面试官很和蔼,都是对简历的深挖,重基础。
问答(45min)
- 自我介绍
- Vue通信机制有哪些
- 水平垂直居中实现
- 实现一个左边固定,右边自适应布局
- 跨域是啥?跨域有哪些?
- Vue父子组件的执行流程
- 浏览器一帧发生了啥?
- 原生Ajax实现
- let,const,var区别
- 怎么实现const里面的属性不能修改?
- Promise.all() 怎么实现?
- 原型链是啥?
- new的原理
- this的指向有哪些?
- 怎么改变this的指向?
- call、bind()、apply() 区别
- Vue数据响应式原理
- css盒子模型、BFC
- 父元素高度塌陷解决方案
- requestAnimationFrame/requestIdleCallback
- session、cookie、localStorage 、sessionStorage
- HTTP强缓存和协商缓存
- 有缓存返回的状态码(200)
- 页面布局响应实现?(媒体查询)
- http网络状态码有哪些
- 301和302的区别
- 前端安全XSS、CSRF
非全面(有些想不起来了)
编程题 (20min)
- JSONP实现
function Jsonp(src){
var script = document.createElement('script')
script.src = src
document.getElementsByTagName('head')[0].appendChild(script)
}
- 大数相加
// input: a,b (string)
//output: string
function bigAdd(a,b) {
let aLen = a.length
let bLen = b.length
let len = aLen > bLen ? aLen : bLen //取最长的字符串
//以 0 补位
if(aLen > bLen){
var str = ''
for(var i = 0; i < (aLen - bLen); i++) {
str += '0'
}
b = str + b
}else{
var str = ''
for(var i = 0; i < (bLen - aLen); i++) {
str += '0'
}
a = str + a
}
//反转字符串,从个位开始计算
a = a.split('').reverse()
b = b.split('').reverse()
//字符串转number
a = a.map((value,index)=>{
return parseInt(value)
})
b = b.map((value,index)=>{
return parseInt(value)
})
let carryAdd = 0 //进位
let res = []
for(var i = 0; i < len; i++) {
if(a[i] + b[i] + carryAdd >= 10) {
res[i] = a[i] + b[i] - 10 + carryAdd
carryAdd = 1
if(i == len - 1) res[i + 1] = 1 //最后一位进位
}else{
res[i] = a[i] + b[i] + carryAdd
carryAdd = 0
}
}
return res.reverse().join('')
}
console.log(bigAdd('369222222','359222222'))