前端知识大纲
一、面试环节设置
- 一面/二面 测试基础知识(html js css,html5 ES6 css3)
- 二面/三面 高级工程师问基本原理(深入,往往根据简历和个人介绍来发问)
- 三面/四面 技术负责人/业务负责人 关注你的从业经历中,你推动了什么,改变了什么
- 终面 hr具有一票否决权,关注面试人的沟通、性格、潜力等
注意:
二、面试准备
- JD分析
- 职位描述
- 业务分析,实战模拟
- 前端技术栈
- 源码分析
- 前端框架
- 简历和自我介绍
-
简历
- 1.基本信息:姓名 年龄 手机 邮箱 籍贯
- 2.教育背景:学历
- 3.工作经历:时间 公司 岗位 项目背景 技术栈 职责 业绩
- 4.开源项目和博客 github和开源项目说明,博客地址 注意:不要在简历中放自我评价
-
自我陈述
- 1.把握面试沟通方向(为面试官提问埋伏笔)
- 2.豁达,自信,节奏适宜,适度发挥,务实谦虚 (面试中不存在标准答案,凡事不能太绝对) (不要因为自己比别人懂得多了一点而对面试官产生鄙视,那是玩火自焚)
-
三、一/二
目录
- 页面布局
- css盒模型
- DOM事件
- 原型链
- 面向对象 & 类
- http协议 & 跨域
- 安全:XSS CSRF
- 算法:没有标准
1. 页面布局
2. css盒模型
3. DOM事件类
4. 原型链
-
创建对象的几种方法?
点击查看代码
-
原型链图示
-
只有函数才有prototype(function的声明时产生)
-
只有实例对象才有__proto__
-
修改了构造函数的prototype,相当于改变了实例所指向的原型对象
-
-
instanceof 原理
- instanceof用来判断构造函数的prototype是否在实例对象的原型链上。
-
new运算符原理
-
新对象obj被创建,继承自foo.prototype,构造函数foo被执行。执行时传入相应的实参,同时上下文this会被指定为这个新实例obj,不传参的情况下,new foo等同于new foo()。
-
如果构造函数返回了一个”对象”,那么这个对象会取代整个new出来的结果。如果构造函数没有返回对象,那么new出来的结果为创建的对象obj。
-
5. 面向对象&类
- 类与实例
- 类的声明:构造函数、class
- 实例:new
- 类与继承
- 实现继承的方式-基于原型链的继承、extends
点击查看代码
6. http协议类
-
通信类
-
同源策略及限制
源: 协议 + 域名 + 端口 = 源
限制:不是同源的文档能操作另一源的资源
-
前后端如何通信
-
创建ajax
点击查看代码
-
跨域通信
-
7. 安全类
- CSRF 跨站请求伪造
- 攻击原理
- XSS 跨站脚本攻击
-
攻击原理 向页面注入脚本运行,自动触发,引诱触发,iframe广告插入。 xss定义(反射型,存储型) 1.反射型: 发出请求时,xss代码出现在url中,作为输入提交到服务器端,服务器解析后相应,xss代码随响应内容一起传回给浏览器,最后浏览器解析执行xss代码。
2.存储型: 存储型xss与反射型xss差别仅在于提交的代码会存储在服务器端,下次请求页面不用再提交。
3.DOM型: 属于特殊的反射型。DOM 型 XSS攻击中,取出和执行恶意代码由浏览器端完成,属于前端JavaScript自身的安全漏洞。
-
防御措施
-
8. 算法类
-
排序 冒泡排序, 快速排序, 选择排序,希尔排序
-
数据结构 堆栈,队列,链表
-
递归 60%算法都要用递归(本质要抓住,中止条件,参数如何传,尾递归)
-
波兰式和逆波兰式
- (1 + 2 * (4 - 3) + 6/2)中缀表达式
- +1+*2-4 3/6 2 前缀表达式(波兰式,从右向左)
- 1 2 4 3-*+6 2/+ 后缀表达式(逆波兰式,从左向右)
-
哈夫曼编码
- 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。
- 哈夫曼编码示例 注意: 基本功和理解题意,让面试官提示,写清原理。
四、二/三
A. 渲染机制
-
什么是DOCTYPE及作用 DTD告诉浏览器我是什么类型 DOCTYPE声明文档类型
-
浏览器过程
-
重排(Reflow)/ 回流
dom中各元素都有自己的盒子,根据样式计算,并根据计算结果将元素放到它该出现的位置。
- 重绘(Repaint)
当盒子的位置,大小,颜色,字体大小都确定下来后,浏览器便把这些元素按照各自特性绘制一遍,于是页面内容出现了,这个过程称之为repaint。
注意点: 一次添加节点
B. JS运行机制类
- js单线程:一个时间内js只能干一件事
- 任务队列:同步任务、异步任务
- event loop
- 微任务micro task是跟屁虫,总是跟在同步任务的后面
- 异步任务:
- setTimeout和setInterval
- Dom事件 点击的时候和时间到了才扔到异步任务中
- ES6中的promise
C. 页面性能
-
提升页面性能有哪些方式
- 资源压缩合并,减少http请求
- 非核心代码异步加载(异步加载方式?区别?)
- 利用浏览器缓存(缓存分类?缓存原理?)
- 使用CDN
- 预解析DNS
-
异步加载
- 方式: 1.动态脚本加载 2.defer 3.async
- 区别:
- defer在HTML解析完才执行,多个按加载的顺序执行
- async加载完之后立即执行,多个执行顺序和加载顺序无关 注意:
- 普通的script(不使用async和defer)加载完会立即执行,会阻塞script标签下面的资源加载和dom的解析
- 使用async后,script加载完后会立即执行。(网络)资源的加载过程是异步的,不会阻塞后续资源的加载dom和解析。
- 使用defer后,script异步加载,html解析之后执行、DomContentLoaded之前执行。
- 浏览器缓存
缓存分类:
-
强缓存 1.Expires: Thu,21 Jan 2017 23:09:02 GMT (绝对时间,服务器下发的,与本地浏览器比较) 2.cache-control: max-age=3600(相对时间,单位s) 同时存在,以cache-control为准 ①public 所有内容都将被缓存(客户端和代理服务器都可缓存) ②private 内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存) ③no-cache 浏览器将不再使用强制缓存, 而是直接去请求服务器, 如果存在协商缓存这个时候就会用到了 ④no-store 浏览器则不会在使用缓存的数据也不缓存数据,即强制缓存和协商缓存都失效了
-
协商缓存 下发 请求
- Last-Modified If-Modified-Since
- Etag If-None-Match 浏览器默认优先强制缓存,强制缓存失效了,才使用协商缓存,协商缓存服务器两个都下发,根据客户端支持程度决定用啥,优先If-None-Match
-
D. 错误监控
-
实现一个埋点监控SDK? A: 一般埋点监控SDK满足三个功能:用户行为监控(pv/uv/点击行为)、页面性能监控(页面开始加载时间,白屏时间)、页面错误告警监控。 实现要素productID,send(image、navigator.sendBeacon),performance.timing(FP,DCL,LOADED) 错误告警监控分为JS原生错误和React/Vue的组件错误的处理。 js原生错误:try catch和未捕获的error及unhandledrejection vue和react可以使用错误边界组件解决错误问题。
-
错误上报
- 采用ajax通信方式上报
- 采用Image对象上报
五、三/四
业务能力 团队协作能力 事物推动能力 带人能力 其他能力(组织能力 学习能力 行业经验)
六、终
-
职业竞争力 业务能力 思考能力 学习能力 无上限付出
-
职业规划
- 目标:业务上成为专家,技术上成为大牛
- 近期目标: 不断学习积累各方面经验,学习为主
- 长期目标:做几件有价值的事情,开源作品,技术框架
- 方式方法:先完成业务上的主要问题,做到极致,然后逐步向目标靠拢。
-
总结
- 胜不骄,败不馁,总结经验,步步为营,多拿offer
- 30%技术 + 70%状态
七、常用知识点
- ts常用示例
点击查看代码
- css 水平垂直居中