- 时长:60min
- 实习与项目相关的东西仍然是对牛友们没啥价值,就不说了,这块问了20来分钟吧
八股
- http1.0/1.1/2.0/3.0
- V8垃圾回收机制的核心算法,回收策略
- 不用catch怎么去捕获一些错误
- 全局捕获
- 在react和原生JS中,使用
window.onerror捕获全局异常
- 在vue中使用
errorHandler 来捕获未被try...catch的全局异常
- JS为什么是单线程的
- 浏览器环境:在浏览器中,JavaScript 必须与其他内容(例如 HTML 和 CSS)共享同一个线程,以确保页面的同步加载和呈现
- 避免竞态条件:避免死锁
- 简化了内存管理
- Vue生命周期
- 观察者模式和发布订阅模式的差别
源码相关
- 源码题1:Babel将ES6改为ES5的过程?有没有看过源码?
- 比如继承extends是ES6的写法,转成ES5后是怎么样的代码?
- 转换成构造函数和原型链的方式实现
- 源码题2:深拷贝中,JSON.stringfy和parse有什么缺陷
- 解决不了循环引用的问题
let obj = {
a: {
b: obj.a;
}
}
- 使用deepClone调用上面的对象会出现循环引用的问题,应该怎么解决?
- 有没有看过lodash相关的源码?
- 在深度克隆的过程中维护一个缓存(或映射)表,如使用weakMap,用于跟踪已经克隆过的对象
- 源码题3:Promise.all和promise.race的原理和区别
- 源码题4:说说Vue响应式原理,看过源码吗,怎么实现的?
- 你说Vue2不能监听数组的变化,如果arr.slice()使得数组发生变化会触发响应式吗?
- 会的,vue2对数组的7个方法进行了封装,比如slice等函数改变数组会发生变化
- 如果是对数组某个下标进行赋值会触发响应式吗?不会
看代码说结果
var name = 'a'
(function(){
if(typeof name === 'undefined){
var name = 'b';
console.log(name+'11);
} else {
console.log(name+'22);
}
}()
// 在立即执行函数内部:
// typeof name 返回 'undefined',因为在当前作用域中存在一个名为 name 的变量,但它还未赋值。
// 然后,内部通过 var name = 'b'; 声明了一个局部变量 name,并赋值为 'b'。
// 接着执行 console.log(name + '11');
// 故结果:输出 'b11'。
手撕算法
var removeNthFromEnd = function(head, n) {
// 设定快慢指针
let fast = head;
let slow = head;
// 快指针先向前移动n个单位
while(n--){
fast = fast.next;
}
// 如果快指针已经越界,说明要删除第一个元素,直接返回dummy.next
if(!fast){
return head.next;
}
// 双指针同时向前移动,当fast移动到最后一个元素时停止,此时slow指向要删除元素的前一个节点
while(fast.next){
fast = fast.next;
slow = slow.next;
}
// 该节点直接指向下下个节点
slow.next = slow.next.next;
// 返回头指针
return head;
};
反问
- 如何学习源码?
- 部门业务,技术栈
- 致命提问:我们这边留用结果都出了,你在阿里那边留用了吗?
- 此时一个老实人回答已经转正了,但还在尝试新的机会.....这里埋了个伏笔
总结
- 后来团子打电话约我第五次一面,上来就问?你拿到阿里留用还会考虑美团吗?你在广东会来北京吗?可以看出这位面试官的面评里面对我的信息说的挺详细的,既然会被重点问这些问题,我感觉这大概率也是我挂了的原因吧,甚至可能之前快手三面也是面试官问了之后我如实回答菜花挂掉的吧,懂了,以后再也不做老实人了
- 不过说实话这位面试官问的源码有点多,我也大多不太了解,会gg也是合理的吧
- 我的团子,已经挂我4次了行行好给个offer吧,我要做团孝子
#如何一边实习一边秋招##晒一晒我的offer#
#如何判断面试是否凉了##你的秋招进行到哪一步了#
#美团#