好大夫前端开发实习一面
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 请做一下自我介绍。
- 介绍一下你的实习和项目经历。
- 介绍一下闭包。
- 介绍一下 ES6 的新特性。
- 讲解一下 BFC。
- 如何实现水平垂直居中?
- 讲解一下 HTTP 各个版本的差异。
- Vue 的生命周期是怎样的?
- Vite 和 Webpack 有什么区别?
- 了解 uniapp 吗?
- 平时怎么开发的?用大模型辅助编码多不多,比例如何?
《参考解析》
闭包
闭包是函数与其定义时所处词法环境的组合:内层函数引用了外层函数的变量,外层返回之后这些变量依然被引用着,因此不会被回收。它的正面用途是私有变量、函数工厂、防抖节流里保存定时器状态;副作用是变量常驻内存,用得不当会带来内存泄漏。追问一般落在循环里用 var 注册回调为什么都打印同一个值(共享同一个变量对象),以及块级作用域和闭包在 V8 里的实现差异。
BFC 与水平垂直居中
BFC(块级格式化上下文)是一个独立的渲染区域,内部的布局不影响外部,触发方式有 overflow 非 visible、float、绝对定位、display 为 flow-root/inline-block/flex 等。它的实际作用主要是三件:包住内部浮动元素(高度塌陷)、阻止与浮动元素重叠、阻止 margin 合并。居中则是另一道送分题,要能说出至少三种:flex 的 justify-content 加 align-items、grid 的 place-items、绝对定位加 transform 负位移(或 margin auto);再往下追问就是定宽与不定宽、以及 transform 位移为什么不会触发重排。
HTTP 各版本的差异
HTTP/1.1 引入了长连接和管道化,但管道化有队头阻塞,实际靠并发多连接绕过;HTTP/2 用二进制分帧、多路复用、头部压缩(HPACK)和服务器推送解决了应用层的队头阻塞,但 TCP 层的丢包仍会拖住所有流;HTTP/3 换到基于 UDP 的 QUIC,把流控和重传下沉到用户态,头部压缩改用 QPACK,还支持连接迁移,因此丢包只影响单条流。回答时最好把「队头阻塞发生在哪一层」这条线索一直带着。
Vue 生命周期
以 Vue 3 为例:setup 先执行,随后 beforeMount / mounted,数据变化触发 beforeUpdate / updated,卸载走 beforeUnmount / unmounted,配合 keep-alive 还有 activated / deactivated。要点是讲清「哪些阶段能拿到真实 DOM」(mounted 之后)和「哪些阶段适合清理副作用」(unmounted 里清定时器、解绑事件),组件的父子挂载顺序(父 beforeMount → 子 mounted → 父 mounted)也是常被追问的细节。
Vite 和 Webpack 的差别
Webpack 是先把整个依赖图打包再交给浏览器,开发态靠 dev-server 做编译,项目一大冷启动就慢;Vite 开发态直接利用浏览器原生 ESM,按需编译请求到的模块,冷启动几乎与项目规模无关,依赖预构建用 esbuild 完成。生产构建上 Vite 早期用 Rollup(新版可选 Rolldown),Webpack 则靠 loader/plugin 生态和更细的分包控制取胜。追问一般会到 HMR 的实现差异、以及为什么 Vite 在生产环境仍然需要打包(避免大量小请求的瀑布)。