前端相关技术知识点

面试总结

1.投其所好:比如说,面试的公司有大屏项目的话,那么在自我介绍的时候可以说自己做过大屏项目,再详细介绍自己做的大屏项目
2.把握主动权:不要问答模式,要把面试官的问题或者兴趣带到自己熟悉的领域,比如说,在介绍项目过程中,插入自己在项目中比较亮眼的工作,自然而然的把面试官带到你熟悉的领域去
3.活跃气氛:在面试过程中需要适当的活跃气氛(自己体会)
4.面试题链接

1.原型链

深入熟悉构造函数、实例对像、原型对象之前的关系
深入熟悉什么是原型链,原型链最终的指向是什么
深入熟悉如何拓展对象的属性与方法
深入熟悉为什么判断数组是否等于对象的时候使用instanceof,结果为true

2.类型判断

深入熟悉基本类型、引用类型有哪些,以及基本类型和引用类型存放在堆内存还是栈内存
深入熟悉类型判断的方法以及实现原理

3.继承

深入熟悉继承的多种方式和优缺点

4.作用域

深入熟悉var、let、const的特点以及区别
深入熟悉this指向
深入熟悉call、applybind的使用以及区别
深入熟悉箭头函数以及原理

5.函数

深入熟悉闭包函数柯理化,了解偏函数和高阶函数
熟悉了解函数柯理化在vue框架实现中的使用(举例:判断真正的html标签还是自定义组件标签;抽象语法树ast转化成虚拟dom使用函数柯理化已经模板的缓存)
熟悉闭包的优缺点、以及内存溢出(内存泄漏)的原因和解决方案

6.事件循环机制

事件循环机制学习视频
深入熟悉事件循环机制的整个过程和原理
深入熟悉浏览器、eventLoop、call stack(执行栈)、web APIS、callback quene之间的关系以及执行顺序
深入熟悉宏任务和微任务,深入熟悉更新dom的时机,以及宏任务、微任务、更新dom的执行顺序前后
js为什么是单线程语言,能否多线程
js是单线程语言,为什么可以执行setTimeout等异步操作

7.异步编程

深入熟悉promise原理和实现,深入熟悉promise相关apipromise学习视频
深入熟悉generator原理和实现generator学习视频
深入熟悉async/await原理和实现async/await学习视频

8.类

类学习视频
深入熟悉类的原理和实现
如何继承父类以及调用父类的方法(super)
new操作符的作用以及实现

9.ES6-ES11

ES6-ES11学习视频
ES6的新特性在面试过程中都会有被问到,所以学习视频多刷两边哦!

proxy的实现原理和使用

10.缓存策略

深入熟悉缓存策略机制
强制缓存和协商缓存的特点和区别
如何判断缓存结果是否过期(Expires/Cache-Control)
浏览器的缓存存放在哪里,如何在浏览器中判断强制缓存是否生效?
from memory cache 和 from disk cache又分别代表的是什么呢?
什么时候会使用from disk cache,什么时候会使用from memory cache呢?
状态码304是什么意思
如何判断服务器端请求资源发生改变(Last-Modified / If-Modified-Since和Etag / If-None-Match)

11.重绘和重排

深入熟悉重绘和重排,以及如何进行优化

12.防抖和节流

深入熟悉防抖和节流,防抖和节流的区别以及实现

13.事件冒泡、事件捕获和事件委托

深入熟悉事件冒泡、事件捕获和事件委托的区别、实现和运用场景

14.vue框架

vue框架源码解析学习视频
vue框架源码解析学习视频个人刷了两遍,最主要理解vue的实现原理,要做好笔记!!
底层框架问题:
(1)深入熟悉vue从编写页面代码到渲染页面的整个过程,以及vue做了什么事情?(字符串模板-抽象语法书-虚拟dom-真正dom的一系列过程)
(2)vue从编写页面代码到渲染页面的整个过程,哪一环节最消耗性能,vue的优化方案是?
(3)vue的双向绑定原理(数据劫持+发布订阅者模式)
(4)改变数据到视图更新的整一个过程(observe+deps+watcher+diff)
(5)observe进行数据劫持
(6)deps调控中心,dep.depend()/dep.notify()
(7)watcher(计算watch > 监听watch > 渲染watcher)
(8)diff算法原理
(9)什么是虚拟dom,虚拟dom的数据结构和作用,以及虚拟dom的二次提交
(10)数据劫持object.defineproperty
(11)发布订阅者模式和观察者模式的区别
(12)vue对数组api进行重写

vue原理问题:
(1)vue的生命周期,vue父组件和子组件的生命周期(父created - 子created - 子mounted - 父mounted)
(2)在mounted钩子函数里能否获取真正的dom(不能,在mounted使用setTimeout或者this.nextTick)
(3)nextTick的作用和使用
(4)为什么vue里面data是一个函数,而不是对象
(5)v-model的实现
(6)通讯方式:props、refs、eventBus、emit/on、attr/listener
(7)v-for和v-if为什么不能在同一个标签里公用(v-for和v-if的渲染顺序问题)
(8)v-for里的key属性作用(diff算法相关)
(9)路由hash和history的实现原理和区别,为什么hash改变,页面不会重新渲染(单页面应用)
(10)插槽,如何添加多个插槽
(11)mixins的作用是使用场景

vue路由
(1)路由hash和history的实现原理和区别,为什么hash改变,页面不会重新渲染(单页面应用)
(2)动态路由(addRouter)
(3)路由权限控制的实现
(4)路由缓存keepAlive的作用以及实现
(5)路由钩子(路由守卫):全局、组件级、单路由享用

vuex状态管理库
(1)深入熟悉状态管理库的整个流程
(2)为什么不直接改变state,而是要通过mutation来改变state(记录问题)
(3)mutation和action的区别,为什么mutation不能进行异步操作
(4)如何查看状态管理库的更新记录(vue-devtools)
(5)当页面进行刷新,状态管理库的数据消失了怎么处理

axios
(1)深入熟悉axios的二次封装
(2)axios的请求拦截以及响应拦截分别可以做什么配置

15.webpack

webpack学习视频
(1)webpack的实现原理(webpack_required引入依赖)
(2)webpack的性能优化(速度和体积,自动(tree-sharking和scope-hasting)和手动(happypack、ignorePlugin、externals、动态链接库、splitChunks))
(3)web-loader的执行顺序(从下往上,从右往左)
(4)sass-loader、css-loader、style-loader的区别以及作用
(5)file-loader和ulr-loader的区别以及作用
(6)实际项目中使用过哪些loader和plugin
(7)结合实际项目使用webpack做了哪些工作或者是性能优化

16.其他

(1)深拷贝和浅拷贝的区别,如何实现深拷贝
(2)Cookie、session和localStorage、以及sessionStorage之间的区别
(3)Echart的性能问题,修改数据使用setOptions api,使用dispose销毁Echart实例
(4)git合并部分代码使用cherry pick
(5)vue3发布日期2020.9.18,时间允许的话也去了解vue3新增特性以及实现原理,加分项
(6)前端微服务,加分项

17.css相关知识点

(1)CSS选择器
元素选择器、类选择器、ID选择器、属性选择器、通用选择器、伪类和伪元素

(2)盒子模型
盒子模型 = margin + border + padding + content
标准盒模型 和 IE盒模型区别在于width
标准盒模型:width = content
IE盒模型:width = content + padding + border

box-sizing: border-box / content-box
// 假如设置元素宽度为100px
box-sizing: border-box // IE盒模型:width = content + padding + border = 100px
box-sizing: content-box // 标准盒模型:width = content = 100px

(3)弹性布局

display: flex/inline-flex
flex-direction: row/row-reverse/column/column-reverse // 设置主轴方向
justify-content: flex-star/flex-end/center/space-between/space-around // 横坐标对齐
align-items: flex-star/flex-end/center/baseline/stretch // 纵坐标对齐
flex-wrap:  nowrap/wrap/wrap-reverse // 换行
order: 1(number) // 排序
flex-grow: 0 // 剩余空间按比例放大,默认为0
flex-shrink: 1 // 剩余空间按比例缩小,默认为1
flex-basis: auto // 如果主轴为水平,则设置这个属性,相当于设置项目的宽度。 原width将会失效
flex: 1 // flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选

(4)响应式布局和自适应布局
响应式布局与自适应布局原理相似,都是通过检测设备,根据不同设备的分辨率作适配。

响应式布局:根据设备的不同展示不同的网站风格(通过媒体查询判断,在不同的设备和分辨率下展示不同的网站风格),通过响应式设计能使网站在不同的设备上有更好的浏览阅读体验。

自适应布局:根据设备的不同而作出一些自适应样式的调整(不需要媒体查询判断,直接让每个元素通过相对宽度,不如说%,vw,em等改变容器的大小,字体的大小)

(5)BFC

Formatting context(格式化上下文) 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。

那么 BFC 是什么呢?
BFC 即 Block Formatting Contexts (块级格式化上下文),它属于上述定位方案的普通流。

具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性。

通俗一点来讲,可以把 BFC 理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部。

创建或触发 BFC

只要元素满足下面任一条件即可触发 BFC 特性:
body 根元素
浮动元素:float 除 none 以外的值
绝对定位元素:position (absolute、fixed)
display 为 inline-block、table-cells、flex
overflow 除了 visible 以外的值 (hidden、auto、scroll)

BFC 特性及应用

同一个 BFC 下外边距会发生折叠(如果想要避免外边距的重叠,可以将其放在不同的 BFC 容器中。)
BFC 可以包含浮动的元素(即清除浮动)

(6)盒子居中
flex 布局实现 (元素已知宽度)

CSS 代码:
<style>        
    .box{            
        width: 300px;            
        height: 300px;           
        background-color: #ccc;            
        display: flex;            
        display: -webkit-flex;            
        justify-content: center;            
        align-items: center;        
    }        
    .box .a{            
        width: 100px;            
        height: 100px;            
        background-color: blue;        
    }    
</style>
HTML 代码:
<div class="box">        
    <div class="a"></div>    
</div>

position (元素已知宽度)
父元素设置为:position: relative;
子元素设置为:position: absolute;
距上50%,据左50%,然后减去元素自身宽度的一半距离就可以实现

CSS代码:
<style>        
    .box{            
        width: 300px;            
        height: 300px;            
        background-color: red;            
        position: relative;        
    }        
    .box .a{            
        width: 100px;            
        height: 100px;            
        background-color: blue;            
        position: absolute;            
        left: 50%;            
        top: 50%;            
        margin: -50px 0 0 -50px;        
    }    
    </style>

HTML 代码:
<div class="box">        
    <div class="a">love</div>    
</div>

position transform (元素未知宽度)
如果元素未知宽度,只需将上面例子中的 margin: -50px 0 0 -50px;替换为:transform: translate(-50%,-50%);

CSS 代码:
<style>        
    .box{            
        width: 300px;            
        height: 300px;            
        background-color: red;            
        position: relative;        
    }        
    .box .a{            
        background-color: blue;            
        position: absolute;            
        top: 50%;            
        left: 50%;            
        transform: translate(-50%, -50%);        
    }    
</style>

position(元素已知宽度)(left,right,top,bottom为0,maigin:auto )

CSS 代码:
<style>        
    .box{            
        width: 300px;            
        height: 300px;           
        background-color: red;            
        position: relative;        
    }        
    .box .a{            
        width: 100px;            
        height: 100px;            
        background-color: blue;            
        position: absolute;            
        top: 0;            
        bottom: 0;            
        left: 0;            
        right: 0;            
        margin: auto;        
    }    
</style>
HTML 代码:
 <div class="box">        
    <div class="a">love</div>    
</div>

table-cell 布局实现

<style>        
    .box{            
        width: 300px;            
        height: 300px;            
        background-color: skyblue;            
        display: table-cell;            
        text-align: center;            
        vertical-align: middle;        
    }        
    img{            
        /* 设置成块元素后,text-align:center 就会失效 */            
        width: 100px;            
        height: 100px;        
    }    
</style>

HTML:
<div class="box">    
    <img src="1.jpg" alt="">
</div>

(7)position定位
熟悉了解定位每个属性值的作用:
static: 默认值。没有定位,元素出现在正常的流中。
absolute:生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。
relative:生成相对定位的元素,相对于其正常位置进行定位。
fixed:生成绝对定位的元素,相对于浏览器窗口进行定位。
inherit:规定应该从父元素继承 position 属性的值。

(8)float浮动
熟悉使用浮动进行页面布局以及清空浮动

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容