。兄弟也是好起来了,又又有大厂面试了。
这个自我介绍我之前在面试文章中提到过,大家可以翻翻查看。
面试官看到我目前在一家公司实习,于是让我聊了聊我的业务内容。
md:w-1/2、lg:w-1/4、lg:flex-row 等。app.js, home.js),CSS 同样被拆分。我当时没回答上来,但后来查资料得知:
import()import(),并将动态导入的模块单独打包,从而减小初始加载体积。<component> 标签结合 :is 属性实现了动态组件切换。include="cachedComponents" 属性,只缓存设置了 meta.cache = true 的组件。流程如下:
scrollTop + offsetTop
=> getBoundingClientRect()
=> IntersectionObserver
从手动计算逐步过渡到现代浏览器 API,性能越来越好。
<img loading="lazy"> 和 <iframe loading="lazy">IntersectionObserver 自定义实现。wc-waterfall ,动态的绑定gap和cols两个属性,通过生命周期挂载,添加事件监听,根据屏幕的大小,调整相应的值,来实现响应式布局。这个是一个面试经常问到的题目,但是他问的很细
for(var i=0;i<4;i++){
setTimeout(function(){
console.log(i);
},1000)
}
由于 var i 的声明具有函数作用域(在这里指全局作用域),所有的 setTimeout 回调函数实际上引用的是同一个 i 变量。当定时器触发时(即循环已经结束),i 的值已经是 4,因此所有回调打印的结果都是 4。在整个循环过程中只有一个 i,最后连着输出四个4.
又问大概在什么时候输出: 因为定时器不一定准,所以是大概的时间,可能就会回答在4秒后了,实际上,执行同步代码的循环后,定时器四个任务,相继执行,因为间隔时间很短,所以就很像四个定时器并发了一样,实际上还是一个又一个执行的。在大概一秒后。
var => let
for 循环迭代中,都会创建一个新的 i 实例。这些 i 变量被限制在循环体的块级作用域内。setTimeout 回调函数捕获的是它对应的那个特定的 i 实例。因此,当定时器触发并执行回调函数时,它们能够访问到正确的 i 值,而不是所有回调都指向同一个 i。
for (let i = 0,time=1000; i < 4; i++,time+=1000) {
setTimeout(function () {
console.log(newDate())
console.log(i);
}, time);
}
2025-05-18T14:14:54.808Z
0
2025-05-18T14:14:55.806Z
1
2025-05-18T14:14:56.814Z
2
2025-05-18T14:14:57.800Z
3
for (var i = 0; i < 4; i++) {
(function (i) {
setTimeout(function () {
console.log(i);
}, 1000*i);
})(i);
}
functiondelay(ms) {
returnnewPromise(resolve =>setTimeout(resolve, ms));
}
(asyncfunction () {
for (var i = 0; i < 4; i++) {
awaitdelay(1000);
console.log(i);
}
})();
const nestedObj = [1, [2, [3, [4, 5]]], 6, 7], 求和。前几天刚好看到了数组和对象的扁平化,刚好就能用上了,不过面试官好像想让我用更简单的方法,我没想出来。
let sum=0
functionflattenObject(obj ) {
for (const item of obj) {
if (Array.isArray(item)) {
flattenObject(item);
} else {
sum=sum+item;
}
}
return sum;
}
console.log(flattenObject(nestedObj));// [ 1, 2, 3, 4, 5, 6, 7]
学习点其他简单的方法:
functionsum(arr) {
return arr.reduce((total, item) => {
return total + (Array.isArray(item) ? sum(item) : item);
}, 0);
}
const nestedObj = [1, [2, [3, [4, 5]]], 6, 7];
console.log(sum(nestedObj)); // 输出: 28
面了几家大厂后,也有一些心得:
❝大厂面试一定是穷追猛打,问到你不会为止。所以有些难题回答不出来也没关系。
而面试其实就是一场表演,大家可以在项目中准备几个亮点,自己演练几遍,在面试时流畅表达出来,体现出自己的深度和思考能力,这才是关键!
🔥号外~号外~
最近我们推出了大厂的一手面经模块,都是刚面完的小伙伴们热乎乎分享的:
这些面经都是花了不少心思整理的,比网上那些过时的八股文靠谱多了。
有需要的小伙伴可以点击这里👉前端面试题宝典(打开小程序,首页即可直接领取【大厂真实面经】),也可直接联系小助理咨询。
毕竟信息差就是竞争力,早点了解面试套路,早点拿到心仪offer!
有会员购买、辅导咨询的小伙伴,可以通过下面的二维码,联系我们的小助手。