前端面试
前端跳槽面试必备技巧
一面
页面布局类 / CSS盒模型
DOM事件类 / HTTP协议类
面向对象类 / 原型链类
通信类 / 安全类 / 算法类
二面
渲染机制 / 异步线程
页面性能 / 错误监控
MVVM框架 (vue) 解析
工作原理 / 生命周期
双向绑定 / 项目特色
面试是一个考试。是经过精心设计的。
(1) Javascript的算法包含哪些?
去重,数组排序,交叉
(2) 前端性能优化
(3) 数组的操作
(4) CSS,以及CSS3新增的属性
(5) JS的面向对象
(6) Vue的生命周期,以及工作原理
(7) 在Vue开发的过程中遇到过哪些问题
(8) ES6的继承类
程序员的第三年,是一到坎,基础知识掌握不扎实,学高阶知识,根本没用。
所以,基础知识,加ES6,加Vue,基本就行了。
有一个要注意的一点就是,如果你学的东西,未来用不上。那么你就是在浪费时间。
(1)
页面布局 / CSS盒模型
DOM事件 / HTTP协议
面向对象 / 原型链
通信 / 安全 / 算法
(1) 页面布局
题目:假设高度已知,请写出三栏布局,其中左栏、右栏宽度各为300px,中间自适应。

至少不下于3种解决方案:
(1)浮动
(2)绝对定位
(3) flex-box
(4) 表格布局(table-box)
(5)grid 网格布局
(1)浮动解决方案
<section class="layout float"> <article class="left-right-center"> <div class="left"></div> <div class="right"></div> <div class="center"> <h1>浮动解决方案</h1> 1.这是三栏布局中间部分 2.这是三栏布局中间部分 </div> </article> </section>
(2) 绝对定位
// VSCode 快捷写法
// 然后回车
div.left+div.center+div.right
不断的收集面试题,以及刷面试题。
最高端的还有北邮的计算机研究生,可以去了解一下。怎么会没有事情做?
<style>
* {
margin:0;
padding:0;
}
.layout article div {
min-height: 100px;
}
.layout.absolute .left-center-right > div {
position: absolute;
}
.layout.absolute .left {
left: 0;
width: 300px;
background: red;
}
.layout.absolute .center {
left: 300px;
right: 300px;
background: yellow;
}
.layout.absolute .right {
right:0;
width: 300px;
background: blue;
}
</style>
<section class="layout absolute">
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>绝对定位解决方案</h2>
1.这是三栏布局绝对定位中间部分。
</div>
<div class="right"></div>
</article>
</section>
(3) flexbox解决方案
<style>
* {
margin:0;
padding:0;
}
.layout article div {
min-height: 100px;
}
.layout.flexbox .left-center-right {
display: flex;
}
.layout.flexbox .left {
width: 300px;
background: red;
}
.layout.flexbox .center {
flex:1;
background: yellow;
}
.layout.flexbox .right {
width: 300px;
background: blue;
}
</style>
<section class="layout flexbox">
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>flexbox解决方案</h2>
1.这是三栏布局flexbox中间部分
2.这是三栏布局flexbox中间部分
</div>
<div class="right"></div>
</article>
</section>
(4) 表格布局
<style>
* {
margin:0;
padding:0;
}
.layout article div {
min-height: 100px;
}
.layout.table .left-center-right {
width: 100%;
display: table;
height: 100px;
}
.layout.table .left-center-right > div {
display: table-cell;
}
.layout.table .left {
width: 300px;
background: red;
}
.layout.table .center {
background: yellow;
}
.layout.table .right {
width: 300px;
background: blue;
}
</style>
<section class="layout table">
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>表格布局解决方案</h2>
1.这是三栏布局表格布局中间部分
2.这是三栏布局表格布局中间部分
</div>
<div class="right"></div>
</article>
</section>
(5) 网格布局
<style>
* {
margin:0;
padding:0;
}
.layout.grid .left-center-right {
display: grid; /** 父容器声明为网格布局 **/
width: 100%;
grid-template-rows: 100px;
grid-template-columns: 300px auto 300px;
}
.layout.grid .left {
background: red;
}
.layout.grid .center {
background: yellow;
}
.layout.grid .right {
background: blue;
}
</style>
<section class="layout grid">
<article class="left-center-right">
<div class="left"></div>
<div class="center">
<h2>网格布局解决方案</h2>
1.这是三栏布局网格布局中间部分
2.这是三栏布局网格布局中间部分
</div>
<div class="right"></div>
</article>
</section>
这道题目怎么延申?
(1) 这5种解决方案各自有什么优缺点?
浮动解决方案的兼容性比较好,只要把清除浮动给做好的话。
绝对定位解决方案,好处是快捷,缺点是布局已经脱离文档流了,那意味着下面所有的子元素也必须脱离文档流。
那么就导致了这个方案的有效性,也就是可使用性是比较差的。
flexbox布局,是CSS3中新出现的一种布局方式,flexbox布局,是比较完美的一个,现在的移动端,基本上
都是基于flexbox布局。
表格布局,在很多场景中,还是比较适用的。表格布局的兼容性是非常好的。因为IE8不兼容flexbox,所以,在
低版本的浏览器中可以使用表格布局。
网格布局,是新出的技术。
(2) 还有,如果高度未知,中间的高度被撑开了,需要左边和右边也跟着被撑开。那么刚才写的5种方案,
哪个还可以被适用?哪个已经不可以用了?
如果高度未知,哪一种解决方案不再适用?
浮动解决方案不能用。
绝对定位解决方案不能用。
flexbox解决方案可以用。
表格布局可以用。
网格布局不能用。
(3) 这5种方案的兼容性(浏览器)如何?真正到业务中去使用,哪一个最实用?
(4) 为什么浮动解决方案,中间的超出部分为什么会这样显示?

原理就是内容向左浮动的时候,当内容超出以后,左边的宽度是固定的,中间的文字,没有了遮挡物,
所以,内容就会向左。
(5) 如何让浮动解决方案的中间超出部分,不要跑到左边去?
这个时候,应该怎么做?
答案是创建BFC。
什么是BFC,在盒模型中有这个概念。
页面布局的变通
三栏布局:
- 左右宽度固定,中间自适应
- 上下宽度固定,中间自适应
两栏布局:
- 左宽度固定,右自适应
- 右宽度固定,左自适应
- 上高度固定,下自适应
- 下高度固定,上自适应
还有一个布局面试题,比较常见,"居中"。
题目:1、请写出css样式实现一个不定宽高的弹出框上下左右居中(至少两种)
就是弹层高度宽度不确定,始终上下左右居中(css方法)
(1) translate定位解决方案
CSS3的属性,IE8不支持。
这是css3的transform的属性,可以将宽高度设为百分比,IE8不支持,在移动端使用较好。
<style>
* {
margin:0;
padding:0;
}
.translateCenter {
width: 40%;
height: 20%;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
background: blue;
}
</style>
<div class="translateCenter">我是translate居中定位</div>
(2) margin居中定位解决方案
不需要确定div的宽度和高度,让top,bottom,left,right都为0,再加个margin: auto。 IE7不支持。
<style>
* {
margin:0;
padding:0;
}
.marginCenter {
width: 40%;
height: 20%;
position: absolute;
left:0;
top:0;
right:0;
bottom:0;
margin: auto;
background: yellow;
}
</style>
<div class="marginCenter">我是margin居中定位</div>
(3) 另一种简单的margin居中布局解决方案。
不需要确定div的宽度和高度。原理类似于translate。
<style>
* {
margin:0;
padding:0;
}
.marginCenter {
width: 40%;
height: 20%;
position: absolute;
left: 50%;
top: 50%;
margin-left: -20%;
margin-top: -10%;
background: blue;
}
</style>
<div class="marginCenter">我是margin居中定位</div>
(4) 使用flexbox布局解决方案
纯css实现不定宽度提示框水平垂直页面居中。
一些提示框里的文字字数是不一定的,宽度不能写死。
运用flexbox布局。
justify-content: center;
align-items: center;
控制 .text 在页面水平垂直居中。
提示框不需要设置宽度和高度,只需要控制父容器。
<style>
* {
margin:0;
padding:0;
}
.wrapper {
position: fixed;
top:0;
bottom:0;
z-index:99;
display: flex;
justify-content: center;
align-items: center;
height: 100%;
width: 100%;
background: red;
}
.text {
background: rgba(0,0,0,.6);
padding: 10px;
color: #fff;
}
</style>
<div class="wrapper">
<div class="text">我是flexbox居中定位</div>
</div>
总结:
有四个解决方案:
(1) 通过translate实现不定宽高元素水平垂直居中
.demo1 {
position: absolue;
top: 50%;
left:50%;
-webkit-transform: translate(-50%, -50%);
}
简单分析:
先把元素设定为绝对定位。
绝对定位指的就是 position: absolute;
position:relative; 指的是相对定位。
然后通过top 和 left把元素的最左点和最上点移动到屏幕的中间。
最后通过 translate属性,根据元素自身大小,相对向左和向上移动自身宽高的50%。
从而实现了不定宽高元素的水平垂直居中。
(2) 通过margin居中定位实现不定宽高元素水平垂直居中。
(3) 另一种简单的margin居中定位解决方案,原理类似于translate属性。
(4) 通过flexbox布局解决方案。
.wrapper1 {
display: -webkit-flex;
justify-content: center;
align-items: center;
}
简单分析:
设置父级元素 display 为flex;
justify-content 设定子元素水平居中。
align-items 设定子元素垂直居中。
延申:
使用flexbox布局解决方案的时候,要注意兼容性写法。
.container{ display: -webkit-box; /* Chrome 4+, Safari 3.1, iOS Safari 3.2+ */ display: -moz-box; /* Firefox 17- */ display: -webkit-flex; /* Chrome 21+, Safari 6.1+, iOS Safari 7+, Opera 15/16 */ display: -moz-flex; /* Firefox 18+ */ display: -ms-flexbox; /* IE 10 */ display: flex; /* Chrome 29+, Firefox 22+, IE 11+, Opera 12.1/17/18, Android 4.4+ */ }
(2) CSS盒模型
题目:谈谈你对CSS盒模型的认识
关联知识非常多。
(1) 基本概念:标准模型+IE模型


(2) 标准模型和IE模型区别
标准模型和IE模型的区别,就是宽度和高度的计算方式不同。
标准模型,的宽度指的就是content的宽度。
不包含padding和border。
IE模型,的宽度包含padding 和 border。
比如:宽度是200px,那么content的宽度只有180px。
高度也是类似的。
(3) CSS如何设置这两种模型
box-sizing 是CSS3的一个属性。
box-sizing: content-box;
或者
box-sizing: border-box;
(4) JS如何设置获取盒模型对应的宽和高
dom.style.width或者 dom.style.height
dom.currentStyle.width 或者 dom.currentStyle.height ,这个属性只有IE支持。
window.getComputedStyle(dom).width 或者 window.getComputedStyle(dom).height ,这个属性所有浏览器都支持。
dom.getBoundingClientRect().width 或者 dom.getBoundingClientRect().height ,这个API适用于获取绝对位置。
(5) 实例题(根据盒模型解释边距重叠)


给 .wrapper 加上 overflow: hidden; 之后, .wrapper的高度变为 110px。
(6) BFC(边距重叠解决方案)
BFC是用来解决边距重叠的方案的。
BFC的基本概念:就是块级格式化上下文。
跟BFC并列的另一个叫IFC,叫内联格式化上下文。
BFC的原理:
- 在BFC垂直方向的,边距会发生重叠。
- BFC的区域,不会与浮动元素的box重叠。
- BFC在页面上是一个独立的容器,外面的元素不会影响它里面的元素。反过来,里面的元素也不会影响外面的元素。
- 计算BFC高度的时候,浮动元素也会参与计算。
如何创建BFC?
- 通过给父元素加上 overflow:hidden;
- float不为none;
- position的值是absolute或者fixed。
- display 设置为inline-box 或者 table 以及 table-xxx相关的。
(7) BFC的使用场景
CSS的基石就是盒模型
(3) DOM事件
(4) 通信 (跨域)
(5) CSRF / XSS 安全
(6) 算法
去重,迭代
浙公网安备 33010602011771号