前端面试题
一、笔试题
1、元素垂直居中的几种常用方法(越多越好)?
2、左右固定,中间自适应布局?
3、截取字符串’abcdefg’中的def?
let str = 'abcdefg';
if(str.indexOf('def')!=-1){
console.log(str.substr(str.indexOf('def'),3));
}
4、请将数组按小到大排序并没有重复?
let arry = [1, 16, 22, 5, 2, 7, 1, 3, 9, 16, 3, 7, 10, 22]
5、请写出下面一段代码的输出
for (var i = 1; i <= 5; i++) {
setTimeout(function () {
console.log(i)
}, i*1000 )
}
答:每隔1s输出一个6,一共输出5次6(i被封闭在一个共享的全局作用域中,所有函数共享一个i的引用)
问:如何能间隔1s顺序输出1,2,3,4,5
(答出把var改成let,还有别的其他方法没?)
6、把对象{a: 1, b: 2, c: 3}转换成[1, 2, 3]
function change (_jsonData_) {
let Arr = []
for (let i in _jsonData_) {
Arr.push(_jsonData_[i])
}
return Arr
}
change({a: 1, b:2, c:3})
7、写出下面一段代码的输出,并写出原因?
var a = 2;
let b = 3;
(function () {
console.log(b)
if (typeof a === 'undefined') {
var a = 8
console.log(a)
} else {
console.log(a)
}
})()
if (a) {
console.log(a)
let a = 9
console.log(a)
}
8、写出下面一段代码的输出?
async function one () {
console.log('1')
await two()
console.log('1 end')
}
async function two () {
console.log('2')
await three()
console.log('2 end')
}
async function three () {
console.log('3')
}
console.log('script start')
setTimeout(function () {
console.log('setTimeout')
}, 0)
one()
three()
console.log('script end')
one()
three()
console.log('script end')
9、在js里call()与apply()有什么相同和不同?
共同点都可以继承熟悉和方法,不同点是call第二个参数是个形参,而apply第二个参数是数组
10、深拷贝和浅拷贝的区别是什么?实现一个深拷贝
https://juejin.im/post/5d124a12f265da1b9163a28d
二、问答题
1、移动端怎么自适应?
2、vue父子组件如何通信?
3、Vue中如何监听某个属性值的变化?
4、你常用哪些异步编程? (Callback,事件监听,发布订阅,Promise,async/await 只答ajax就追问还有吗? 连Generators都答了就追问是用来写什么需求吗?)
5、如何进行状态管理?
6、如何进行项目重构?
7、你见过最糟糕的代码是怎样的,如何优化它们?(考察经验)
8、开发中遇到比较难的问题是?如何解决的?
9、做过的有成就感的项目/功能?具体聊某一个项目中运用的技术.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。