一面(牛客网视频面试)
- 自我介绍
- 问了两个项目相关的具体实现,有提到有没有了解过最新的Vue3的一些知识
- 项目中用到的Better-scroll包主要用来做什么(实现拖动到底/顶时的一个弹簧效果),该效果的实现原理?
- 问两个log的输出:
var name = 'x'
var people = {
name: 'y',
setName: (name) => {
this.name = name
return () => {
return this.name
}
}
}
var getName = people.setName(name)
console.log(people.name) // y
console.log(getName()) // x
- log的输出顺序(Event Loop):
console.log('start')
setTimeout(() => {
console.log('timer1')
Promise.resolve().then(function () {
console.log('promise1')
})
}, 0)
setTimeout(() => {
console.log('timer2')
Promise.resolve().then(function () {
console.log('promise2')
})
}, 0)
Promise.resolve().then(function () {
console.log('promise3')
})
console.log('end')
// start - end - promise3 - timer1 - promise1 - timer2 - promise2
- ES6常用语法: let/const、...、()=>{}、Promise、async/await (Promise、async/await的区别)
- css选择器权重优先级了解么?important>style>id>class>tag>wildcard
- 简述一下css盒模型。content/padding/border/margin
- 怎样设置两种盒模型,哪种盒模型更常用?box-sizing: border-box/content-box;
- 用flex实现一个css双列布局,左侧定宽200px,右侧自适应;flex是哪三个属性的缩写,flex-grow flex-shrink flex-basis;flex-basis与width有什么区别?
- 常用git命令了解哪些?add/commit/push/clone/merge/reset
- HTTPS是对称加密还是非对称加密?
- 前端跨域方式。proxy、JSONP、CORS、websocket
- 为什么有跨域限制?CORS怎么怎么保证安全性?CORS会默认携带cookie吗?
- 前端静态资源的协商缓存、强缓存了解么?
- 算法题:数字格式化为千分位
// 实现千分位
// 1234567 => 1,234,567
function format (num) {
const list = (num + '').split('');
let count = 0;
for(let i = list.length - 1; i >= 0; i--) {
count++;
if (count === 3) {
list.splice(i, 0, ',');
count = 0;
}
}
return list.join('');
}
console.log(format(1234567));
- 算法题:有效的括号
给定一个只包括
'(',')','{','}','[',']'的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
// ()[] true
// ({}) true
// ({)} false
/**
* @param {String} str
* @returns {Boolean}
*/
function isValid(str) {
if(!str.length || str.length % 2 !== 0) return false;
const stack = [];
const map = {
')': '(',
'}': '{',
']': '[',
};
for(let i = 0; i < str.length; i++) {
if(!map[str[i]]) {
stack.push(str[i]);
} else if(map[str[i]] === stack[stack.length - 1]) {
stack.pop();
}
}
return !stack.length;
}
console.log(isValid('({})'))