面试复盘

百度(get)

一面

  1. 手写一个评分组件
  2. 原型、原型链问题
function Person(name) {
	this.name = name
	return name
}
var p = new Person('test')
	1. ``Person.__proto__``等于什么?
		指向Function.prototype;构造函数的``__proto__``指向Function.prototype;
		而对象的``__proto__``指向其构造函数的原型
		[原型、原型链](https://www.cnblogs.com/webjoker/p/5319377.html)
	2. new运算符的原理:
		1. 创建一个空对象    ``a = {}``
		 2. 将空对象的原型赋值为构造函数的原型 ``a.__proto__ = A.prototype``
		 3. 更改构造函数内部this,将其指向新创建的空对象 ``A.call(a)``
		 4. 如果构造函数返回值为object,则返回该object;否则返回a;也回答了下一题;哎。。。。。。
	3. Person中的return发生了什么?
		如果name是基础类型,new Person()会返回Person的实例;
		 如果name是引用值,new Person()会返回name这个引用值
(再好好理解理解原型这块东西)
  1. 继承的实现
  2. promise了解多少,手写一个promise.all方法
  3. 判断是否是数组,instanceof的原理
    instanceof原理只要右边变量的 prototype 在左边变量的原型链上即可(说白了,还是原型这块的东西)
  4. 实现数组降维,用es6的扩展运算符实现
function myFlat(arr) {
	const res = []
	while(arr.length) {
		let val = arr.shift()  // 取到数组首值,并移除该值
		if (Array.isArray(val)) {
			arr.unshift(...val)  // 如果是拿到的值是数组就将该值展开添加到数组头,这就做了一次降维
		} else {
			res.push(val)  // 如果是值就直接添加到结果数组中
		}
	}
	return res
}
  1. vue双向绑定的原理,什么时候会触发watcher清除
  2. webpack优化措施
  3. 谈谈cmd、amd、commonjs、es module模块化方案,cmd引入的拷贝还是引用
  4. 缓存原理
  5. 常见网络攻击及防御
  6. 跨域
  7. 聊项目

二面

  1. 二叉树的深度遍历,寻找是否有路径的和等于给定的值
    root: {
    left: root,
    right: root,
    val: number
    }
function hasPathSum(root, sum) {
    if (root === null) return false;
    if (root.left === null && root.right === null) return root.val === sum
    sum = sum - root.val
    return hasPathSum(root.left, sum) || hasPathSum(root.right, sum)
}
  1. 非同源页面的跨域通信
  2. 实现loadjs去加载一个异步js文件,并使用.then的方式使用里面的方法

三面

  1. 聊了二三十分钟的人生
  2. webpack的设计模式、设计思想
  3. 前端万级大数据怎么处理
  4. 线上bug怎么处理
  5. 国际化的解决方案

极米(凉。。。。)

一面

  1. 聊项目
  2. 常规的一些面试题(不记录了)
  3. 跨域请求会到达服务器吗?
  4. 怎么理解Object的原型是Function的原型??有点蒙,再看看原型这部分内容吧
    因为函数的__proto__都是指向Function.prototype的,所以Object的__proto__就指向了Function的原型;
    对象(实例)的__proto__指向的是构造函数的原型,而非构造函数;
    prototype是函数的属性,里面默认有constructor属性指向其构造函数本身

二面 hr面

三面 总监面+hr面

  1. 对红黑树的理解
  2. 对ci/cd的理解
  3. 用过哪些ui库,怎么评价element-ui
  4. node是怎样读取文件的
  5. 最后给我的建议:前端也需要有软件工程的概念;往前需要深入浏览器原理、js引擎,往后需要对node、操作系统有较深理解
    (感觉二三面就不只考察前端的能力了,更考察对整个软件工程的理解)

WPS(get)

一面

没自我介绍,没聊项目,比较常规的面试题(不记录了)

  1. 了解linux和Nginx吗?(当时真没听清Nginx,因为平时都是说的ng。然后由结合linux,我以为后面的名词是unix之类的东西;太丢脸了)
  2. 了解图片懒加载吗?原理是什么?
    我说了用data-src的属性去暂存链接,然后再可视范围时src去加载data-src的值。
    然后他问我还有什么方法吗???emmm。。。。。
    getBoundingClientRect()获取元素的大小和相对于试口的位置
    IntersectionObserver方法
    图片懒加载

二面

  1. 非同源页面的跨域通信
  2. 什么时候会第五次挥手

三面

聊项目
永远逃不开的话题,离职原因

腾讯音乐

一面

  1. 自我介绍(说我自我介绍很全面,哈哈哈哈哈)
  2. 一些常见的问题不记录了
  3. vue-loader的实现过程
  4. 浏览器怎么知道跨域的,如果是简单跨域请求会修改服务吗?
  5. node的事件循环机制?
  6. vue3.0的双向绑定原理??!!
  7. 怎么操作cookie
  8. 小程序,我说不了解,就没问了

腾讯金融

同时投了两个腾讯部门,导致腾讯音乐的二面邀约被取消了,冤。。。。。。

一面

  1. 笔试
  2. 好多网络相关的题,tcp三握四挥、https、http1和http2的区别、状态码、缓存、osi模型、tcp和udp区别
  3. 解释回流和重绘
  4. 怎么优雅的插入100的元素
    使用文档碎片,createDocumentFragement
  5. 使用es5实现const
  6. vue的双向绑定原理
  7. 移动端点击事件,移动端click为什么会有延迟
  8. 使用touch模拟click
  9. 解释点击穿透
  10. 聊项目

二面

  1. 如何定位bug
  2. 从技术的角度评价一个网站的优劣
  3. 聊项目

三面

  1. 聊项目
  2. 性能优化
  3. 移动端适配的解决方法
  4. node i/o操作的优化
  5. 深圳市上空同一时刻有多少架飞机??!!

阿里(个人原因,拒了hr面)

一面

都是从项目入手问的问题

  1. 深度拷贝
  2. 最长无重复字符子串的长度
  3. 缓存相关,last-Modified什么时候会改变
  4. base64的优缺点
  5. node什么时候会阻塞,midway的原理
  6. vue computed lazy的理解
  7. vue diff算法;ABCD->BCDE是怎么移动的
  8. 箭头函数和function的this指向,改变this指向的方法
  9. 性能优化,拆包,图片懒加载
  10. 客户端和web端通信问题,bridge的实现
  11. 运营页面的快速构建(我提到了珏哥的模板运营活动),动画库的选择
  12. 微前端(给自己挖坑。。。。)

二面

  1. 手写节流函数,介绍节流和防抖的应用场景
  2. 不使用setTimeout,使用打点的方式写节流函数
  3. 不使用闭包写节流函数
  4. this指向问题
  5. 为什么浏览器是60帧渲染,稳定吗
  6. for in和for of的区别,哪些类型可以使用for in和for of
  7. 怎么让对象使用for in
  8. 实现一个及时聊天页面
  9. 短轮询、长轮询、websocket 的区别
  10. websocket的实现
  11. http1.x和http2的区别,http2可以实现及时聊天吗
  12. http2怎么解决队头阻塞的
  13. http2在应用层的握挥过程(不是tcp的握挥)

总结:别给自己挖坑。。。。不清楚的就别提

字节

一二面(连着面,你敢信)

  1. https证书的作用
  2. tcp三次握手,如果客户端反复发起握手请求怎么处理
  3. requestAnimationFrame在事件循环中的位置
  4. vue模板怎么处理的,双向绑定原理
  5. proxy的使用
  6. webpack loader和plugin的区别
  7. webpack的构建流程
  8. webpack优化
  9. 防抖、节流,手写节流
  10. 事件循环的题
console.log(1); 

setTimeout(() => { 
   console.log(2); 
   Promise.resolve().then(() => { 
     console.log(3) 
   }); 
}); 

new Promise((resolve, reject) => { 
   console.log(4) 
   resolve(5) 
}).then((data) => { 
   console.log(data); 
}) 

setTimeout(() => { 
   console.log(6);
 }) 

console.log(7);
  1. node的http请求的header怎么处理,不同格式(content-type)的http请求怎么处理,用了什么中间件
  2. 柯里化函数的实现
  3. 手写代码
// JS编码实现一个render方法,使得可以这样调用,例如 
const year = '2017'; 
const month = '09'; 
const day = '21'; 
const str = render('${year}-${month}-${day}');
console.log(str);  // 输出2017-09-21

// 设计一个柯里化函数(currying ),实现sum(100,200)(300)();得到600
function currying(fn) { 
 // todo 
 }
 var sum = currying(function () {
 // todo
 })

console.log(sum(100,200)(300)()); //600
console.log(sum(100)(300)(200)()); //600 console.log(sum(50)(50)(100)(150,50)()) //400
  1. 判断单向链表是否有环
  2. babel和polyfill的区别

三面+hr面(又是连着面)

  1. 聊项目
  2. css的布局方式,了解grid布局吗
  3. 缓存,使用场景
  4. vue双向绑定原理,watcher在何时被执行
  5. es10了解吗?。。。。。我只了解es6/7
  6. 为什么没有学react,以后的技术规划
  7. 移动端适配解决方案
  8. 自己给自己技术定级是多少,他居然说百度校招生定级是t5???!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值