面试复盘
前言:刚经历过大二下的学期末面试,将提问的问题进行了总结,方便后续查看复习。
一,项目
-
弱网条件下,你是怎么判断弱网的?
-
60fps是怎么监测的?
-
你项目中用了状态锁,它是悲观锁还是乐观锁?
-
自己的算法里做了什么优化,有什么区别,借鉴的时候借鉴了什么?
-
大文件分片上传用什么协议,http还是WebSocket,两者哪个更好?
-
arraybuffer和blob的区别,真正计算的时候用的是哪一个?
-
worker有哪几种worker?
-
一般传输的数据会有多大,计算md5的时候怎么快点(可以去开头,中间,结尾等块)?
-
性能优化方面,什么指标,用的什么方法,如果是lighthouse看哪些指标?
-
除了适配器模式,你还了解其他模式吗?
-
讲讲你这设计的两个钩子是干啥的,在什么时候用到?
二,AI
-
讲讲mcp,rag(查找方式),skill(常见的skill有哪些),怎么写出一个比较好的skill?
-
function call是什么吗?
-
plan模式的另一种说法?
-
了解过harness吗,大概讲一讲?
-
codereview的时候怎么用ai,以及你自己会关注哪些点?
-
平时用ai用的多吗?怎么用的?怎么让token的消耗更少?
三,vue源码
-
讲讲热更新?
-
vue渲染原理 前后对比(code watcher 和 Observe函数)?
-
讲讲diff算法,其中提到了最长子序列算法,虚拟dom一定比真实的dom要好吗?
-
单页面了解吗,seo不友好,怎么让他友好,可以用ssr,以及其他的,vue算什么csr?
-
vue的template到render的过程?
四,网络
-
url输入之后发生了什么
-
DNS解析,其中的涉及到哪两个算法,(迭代和什么来着)
-
浏览器缓存有哪几种?
-
说说常见的对应的请求报文和响应报文
-
非对称密钥和对称密钥的区别
-
http1.1到2.0的区别
-
tcp和udp的区别,讲讲tcp的三次握手
-
讲讲TLS
-
讲讲强缓存和协商缓存
五,工程化
-
webpack和vite的区别,为什么选用webpack,plugin和loader的区别,常用的loader说一下?style-loader最后会将文件转换为什么?(js)
-
项目是怎么优化的?大概讲一下?
-
Tree Shaking是什么,什么情况下会失效?(cjs)
-
ts中的工具类型,以及泛型,any和unknown的区别
六, 常见八股
-
commonjs和esm的区别?(其中有涉及到Tree shaking)
-
js为什么是单线程的?
-
浏览器的渲染原理,为什么是GPU来渲染图层,GPU和CPU的区别是什么?
-
npm yarn pnpm的区别,(从左到右的更新都是在不断解决已有问题,幽灵机制,软链接,硬链接)
-
常见的网络攻击类型,csrf说一下是什么
-
script中的defer和async的区别?它们是在DomcontentLoaded前执行还是之后执行
-
domcontentload和load的区别
七,面试心得于总结
1.多多面试 :锻炼在被审视的情况下回答更有逻辑化点。
2.引导面试官 :不要假设面试官了解你的项目,大部分面试官几乎都不太了解你的项目,甚至就算了解可能具体的技术点他也没有涉及到过。他会根据你的描述来去发问,抓住一个点进行深挖,无论这个东西涉及到什么(算法,计算操作系统,计算机组成原理)。所以你讲述的时候就要有引导性,引导他们往你会的熟悉的方向思考发问 。
3.自我介绍 :介绍的时候项目不用过于详细,如果面试官想了解的话他会抓住他感兴的点继续进行问的。
4.项目 :你要对你的项目1000%的了解,每个问题就像是一个网,以此点为基础然后向不同的方向拓展延伸。就比如项目中用了大文件分片上传,上传涉及到什么线程(你项目里有哪几个线程);网络传输(用什么协议,http?websoket?两个哪个更好?);你上传的文件有多大(如果上传超大文件,你难道要用户一直等着吗?有没有做相关的技术处理)。
5.八股 :准备八股题目时也不能只单纯的背答案,题目涉及到的某个点面试官也会去拓展延伸,背诵的时候也要针对一个点往深处研究。
6.深度构建知识网:当前的学习需要建立连接,每个不同领域下的知识点的关联,要让这些不同垂直领中的知识在你脑海中形成一张网。