背景
这是我人生中的第一次技术面试,投了很多家公司,只有滴滴给了面试机会。作为大二学生,虽然有些紧张,但也很珍惜这次机会。
面试过程
开场介绍
自我介绍
- 讲了学习前端的时长
- 如何学习前端的经历
- 在学校工作室的工作内容
手写代码题
1. 千分位转换(三位一加逗号)
原来还练过正则的写法,结果上来就写手写题太紧张了想不起来了,直接用模拟的方法:数字转字符串再转数组,从末尾开始遍历加上逗号,最后转成字符串。
2. 手写深拷贝
写的极其朴素,原来还想加个WeakMap优化,面试官说可以了就过了。
浏览器相关
浏览器缓存
- 讲了强缓存和协商缓存
- 面试官问Cache-Control的字段有哪些,我只记得max-age了
Cache-Control字段补充:
max-age:决定客户端资源被缓存多久s-maxage:决定代理服务器缓存的时长no-cache:强制进行协商缓存no-store:禁止任何缓存策略public:资源即可以被浏览器缓存也可以被代理服务器缓存private:资源只能被浏览器缓存
CSS相关
Flex相关 很基础,顺利通过。
CSS动画 CSS动画只有刚开始学的时候写过,后来基本没怎么写了,没答上来。
CSS定位
讲了static、relative、absolute、fixed、sticky。
sticky这里说错了,它是相对于最近滚动祖先和最近块级祖先距离来调整相对定位还是固定定位的,我说成了相对于自身外的第一个非static元素...确实没用过这个,只看过文档。
JavaScript相关
节流防抖
- 问项目中的节流防抖使用场景
- 手写节流防抖
手写是写上来了,但是对于防抖和节流的理解可能有些问题。面试官问了使用场景,我说输入框的时候用防抖,按钮防止多次点击用节流。在面试官的引导下改过来了,防止多次点击应该是用防抖...这能说错真该死啊。
框架相关
Vue2 vs Vue3
- 项目原来用的Vue2后来改用Vue3为什么?
- 它们的区别?
更换技术栈原因我回答的是因为学了新的技术所以才换了,然后面试官让我说一下它们的区别。讲了Object.defineProperty的缺点,Vue3更换成Proxy和Option API换成Composition API。
其他问题
Git基本使用 基础操作,没什么问题。
学习相关
- 如何学习前端的?
- 认识什么业界的大牛吗?
自我介绍说了看书看文档,面试官说感觉大二学到这个程度挺好的,没啥其他学习途径吗?我说没有(呜呜呜,可能靠时间堆吧)。
认识什么业界的大牛吗?这个我当时头脑一片空白,我甚至想说"洋"...最后只说了有在看掘金神光的文章。
实习安排 什么时候能来实习?学校放人吗?
面试感受
忘记录音了就记下来这些。第一次面试有点紧张,面试官问的问题都很基础,但是很多问题回答得不是很充分。
面试官最后给过了,还说大二学成这样不错了(久违的被夸奖)。不管二面能不能过,能不能去实习,都感谢给的这次面试机会吧,毕竟投了这么多家,唯一一家给面试的。
总结与反思
做得好的地方:
- 基础知识掌握还算扎实
- 手写代码能力还可以
- 学习态度得到了认可
需要改进的地方:
- 紧张导致一些知识点记混了
- CSS动画这块需要加强
- 对一些概念的理解还不够深入
- 需要多了解业界动态和技术大牛
给后来者的建议:
- 基础知识一定要扎实
- 手写代码要多练习
- 概念理解要准确,不能似是而非
- 适当了解一些业界动态
- 保持良好的心态,第一次面试紧张是正常的