快手前端面经-基础技术部
【一面很顺利】
【二面很顺利】
【hr面很顺利】
【入京很顺利】
【入职很顺利】
【在修bug中】
【考试有惊无险没挂科】
【马上开学】
【已辞职回学校,实习还是很快乐的,虽然北漂确实难】
是基础技术部的面经,但是参考意义不大,因为我发现面试官是自己出题的,有次出的很多都是从《ES6标准入门》里面抽的,所以还是建议把各方面的基础都巩固好,做到有备无患!
一面
- 输入url到页面渲染 1. 输入url
2. DNS解析获得ip: 浏览器缓存=>系统缓存=>路由缓存,没有发DNS服务器(DNS服务器是udp连接),最终获得ip
3. 获得目标ip后建立http连接,进行三次握手
4. 服务器发送响应,浏览器接收数据html,css,js等
5. 浏览器渲染dom树,渲染cssom树(dom树渲染过程中会阻塞,所以要注意css的link和js连接位置),dom树和cssom树合并,确定元素大小,位置并渲染(这个过程也叫重排)
6. 四次挥手释放请求,过程结束 - 二进制的文件怎么转的dom 直接转呗,浏览器自己解析转换嘛
- html元素标签怎么生成的dom树,怎么解析 html标签通过进栈弹出的方式加上特殊标签结束匹配(有些标签自闭合,所以要补充这一条),来进行标签的匹配进而渲染dom树
- css的重排(回流)和重绘
- 为什么会重排,什么是重绘
- 怎么减少重排,绝对定位元素会引起重排么
- 怎么减少重排(回流),重绘影响大么?dom操作的样式api是那些,怎么操作
- http2的优点
- 既然提到了一个http请求多个文件传输,那http1怎么保持的长链接 keep-alive
- const p = new Promise()之后怎么改变p的状态,不限方法
- promise的其他方法all,race,实现一下然后写了all的实现后问怎么实现race,只要有promise的then响应就返回就可以了
- 结合setTimeout和promise以及async await的打印顺序<宏任务微任务的事件循环机制>
- vue的响应式怎么做到的(vue2的define,vue3的proxy)
- vue的数据代理,definePrototy怎么用?set和get做什么,怎么set,怎么get
- set之后其他组件怎么知道的【依赖收集,imm的一个函数通知,发布订阅】
- 响应式有什么问题,为什么proxy,proxy有什么优点【我也讲了proxy和reflect】
- 手写函数柯里化,传入回调函数,定时器打印次数和延时时间返回实现顺序定时执行回调函数的方法【函数柯里化加延时回调,设置定时器时间】
- 在上一步基础上考虑this指向问题该如何修改【回调函数执行时候call传入this】
- bind,apply和call区别 为什么上一步这里用call
- 有什么要问的么?【1. 项目组用的技术栈,需要的开发水平是什么 2. vue3.x发布了,用组合api可以更好的封装hooks来组织业务流,但是vue3.x存在一些问题还在逐步改版,项目选型是怎么看待vue3的,有没有在使用】
二面
- 自我介绍
- 问简历项目【答了项目背景,项目做了什么,为什么这么做,自己的封装,自己对封装的理解,为什么要封装,介绍自己心得】
- 函数作用域链问题打印结果
- 对象原型和方法原型对象添加了属性和方法,并分别调用和new代码说打印结果
- 能不能写一个自己的new? 你这个new能不能优化? 再进一步提需求优化new函数,然后问一般new还做了那些?<然后我就补了一个返回对象的隐式原型=构造方法的显式原型>
- call,apply,bind的区别
- 你还有什么要问的?【我问了很多很多有关开发流程和团队合作开发重要的问题】