小红书一面:长达一个小时的拷打😭

前言

兄弟也是好起来了,又又有大厂面试了。

面试过程:

一、自我介绍

二、实习经历

面试官看到我目前在一家公司实习,于是让我聊了聊我的业务内容。

三、项目方面

1. 你为什么选用 Tailwind CSS?能说说有什么好处吗?

  • 原子化设计:Tailwind CSS 是一种原子化 CSS 框架,将样式拆分为最小的功能单元,每个类只负责一个特定的样式属性。
  • 开发效率高:像写内联类一样快速编写样式,无需额外创建 CSS 文件。
  • 响应式友好:支持大量响应式类,例如 md:w-1/2lg:w-1/4lg:flex-row 等。
  • 样式隔离性强:在 Vue 单文件组件中使用 Tailwind 类,避免传统 CSS 中的样式冲突问题,比如 TabBar、ShowProducts 等组件各自维护自己的样式。
  • 技术广度体现:其实当时用这个是想展示一下对现代前端工具链的理解。
  • 缺点: 学习曲线较陡,需要记忆大量类名和约定;熟练后开发效率更高。
  • 拓展思考: 便于 AI 辅助开发:原子类不依赖嵌套或继承,减少 AI 理解上下文的压力;降低样式覆盖风险,减少了 CSS 的“层叠”问题和选择器冲突。

2. 你的项目用到了组件懒加载,讲讲好处?

  • 在路由懒加载中使用了组件懒加载,实现 按需加载,只有当用户导航到特定路由时,才会加载相应的组件。
  • 如果不使用懒加载,打包时会把所有页面打包成一个文件,首页一次性加载全部资源,导致加载速度慢,用户体验差。
  • 使用路由懒加载后,首页资源被拆分为多个 chunk 文件(如 app.js, home.js),CSS 同样被拆分。

机-会

技术大厂,前端-后端-测试,新一线和一二线城市等地均有机会,感兴趣可以试试。待遇和稳定性都还不错~​

面试官追问:你知道为什么会这样吗?

我当时没回答上来,但后来查资料得知:

  • import() 的调用处被视为代码分割点,被请求模块及其子模块会被分离为独立的 chunk。
  • Webpack 等构建工具识别 import(),并将动态导入的模块单独打包,从而减小初始加载体积。
  • 总体积不变,但首屏加载资源减少,提升用户体验。

3. 聊聊你项目中的动态组件

  • 在实现一个礼物推荐助手时,我需要展示用户提问与 AI 回答。
  • 为此我封装了两个组件:一个是用户消息组件,一个是 AI 回复组件。
  • 每次对话内容存储在一个数组中,根据标志属性判断渲染哪个组件。
  • 最终通过 Vue 内置的 <component> 标签结合 :is 属性实现了动态组件切换。

4. 你实现 keep-alive 的目的,以及和 v-if / v-show 的区别?应用场景?

  • keep-alive 目的: 缓存组件状态(如表单输入、滚动位置);避免组件频繁销毁重建;减少 API 请求,提高性能和用户体验。
  • 缓存控制: 使用 include="cachedComponents" 属性,只缓存设置了 meta.cache = true 的组件。
v-ifv-show 的区别:

是否保持状态

✅ 是

❌ 否

✅ 是

渲染机制

组件缓存

条件为 false 不渲染

切换 display 属性

性能

切换成本低,适合频繁切换

初始化开销小

切换快,初始渲染全量

适用场景

多 tab 切换、表单缓存

不常切换、复杂组件

高频切换简单元素

5. 自定义图片懒加载怎么实现的?

流程如下:

scrollTop + offsetTop
=> getBoundingClientRect()
=> IntersectionObserver

从手动计算逐步过渡到现代浏览器 API,性能越来越好。

又问:你了解 HTML 中原生的 lazy 吗?能否讲讲?
  • 原生 HTML 支持懒加载:<img loading="lazy"><iframe loading="lazy">
  • 优点:简单易用,无需 JS,现代浏览器原生支持;
  • 缺点:兼容性一般,IE 不支持,功能有限;
  • 定制性不强,更高级的需求建议使用 IntersectionObserver 自定义实现。

6.响应式布局这方面,你是怎么做的?

  1. 我的项目中,有一个商品展示的功能,使用的是wc-waterfall ,动态的绑定gap和cols两个属性,通过生命周期挂载,添加事件监听,根据屏幕的大小,调整相应的值,来实现响应式布局。
  2. 通过@media声明在不同尺寸下微调样式细节
  3. 商城项目,经常用得到商品的展示,所以我会将它封装成一个组件,方便复用

四、场景题

1.setimeout

这个是一个面试经常问到的题目,但是他问的很细

for(var i=0;i<4;i++){
    setTimeout(function(){
        console.log(i);
    },1000)
}

首先问你输出什么?

由于 var i 的声明具有函数作用域(在这里指全局作用域),所有的 setTimeout 回调函数实际上引用的是同一个 i 变量。当定时器触发时(即循环已经结束),i 的值已经是 4,因此所有回调打印的结果都是 4。在整个循环过程中只有一个 i,最后连着输出四个4.

又问大概在什么时候输出: 因为定时器不一定准,所以是大概的时间,可能就会回答在4秒后了,实际上,执行同步代码的循环后,定时器四个任务,相继执行,因为间隔时间很短,所以就很像四个定时器并发了一样,实际上还是一个又一个执行的。在大概一秒后。

如何输出 0 1 2 3呢?

var => let

  • 块级作用域:在每次 for 循环迭代中,都会创建一个新的 i 实例。这些 i 变量被限制在循环体的块级作用域内。
  • 延迟执行的回调函数:每个 setTimeout 回调函数捕获的是它对应的那个特定的 i 实例。因此,当定时器触发并执行回调函数时,它们能够访问到正确的 i 值,而不是所有回调都指向同一个 i
那我想要每隔大概一秒输出一个数字呢?
  1. 当时我想到了是:
for (let i = 0,time=1000; i < 4; i++,time+=1000) {
    setTimeout(function () {
        console.log(new Date())
        console.log(i);
    }, time);
}
2025-05-18T14:14:54.808Z
0
2025-05-18T14:14:55.806Z
1
2025-05-18T14:14:56.814Z
2
2025-05-18T14:14:57.800Z
3

  1. 还有就是使用闭包加立即执行函数了:
for (var i = 0; i < 4; i++) {
    (function (i) {
        setTimeout(function () {
            console.log(i);
        }, 1000*i);
    })(i);
}


  1. 进阶:

function delay(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

(async function () {
    for (var i = 0; i < 4; i++) {
        await delay(1000);
        console.log(i);
    }
})();


2. 数组求和

const nestedObj = [1, [2, [3, [4, 5]]], 6, 7], 求和。前几天刚好看到了数组和对象的扁平化,刚好就能用上了,不过面试官好像想让我用更简单的方法,我没想出来。

let sum=0
function flattenObject(obj ) {
    for (const item of obj) {
        if (Array.isArray(item)) {
            flattenObject(item);
        } else {
            sum=sum+item;
        }
    }
    return sum;
}
console.log(flattenObject(nestedObj));// [ 1, 2, 3, 4, 5, 6, 7]


学习点其他简单的方法:

  1. 递归
function sum(arr) {
    return arr.reduce((total, item) => {
        return total + (Array.isArray(item) ? sum(item) : item);
    }, 0);
}

const nestedObj = [1, [2, [3, [4, 5]]], 6, 7];
console.log(sum(nestedObj)); // 输出: 28

结语

面了几家大厂后,也有一些心得:

大厂面试一定是穷追猛打,问到你不会为止。所以有些难题回答不出来也没关系。

而面试其实就是一场表演,大家可以在项目中准备几个亮点,自己演练几遍,在面试时流畅表达出来,体现出自己的深度和思考能力,这才是关键!

——转载自:Danta

全部评论

相关推荐

岗位职责:&nbsp;1、负责团队内小程序相关需求的开发工作2、负责团队内数据平台,调试看板等的建设和开发工作任职要求:2028&nbsp;届在校生,本科及以上学历,计算机相关专业,有前端&nbsp;/&nbsp;小程序开发相关实习&nbsp;/&nbsp;项目经验优先;1、熟练掌握&nbsp;HTML/CSS/JavaScript&nbsp;基础,理解&nbsp;Flex/Grid&nbsp;布局、盒模型、响应式适配(熟悉&nbsp;rpx/px&nbsp;单位转换);2、熟练掌握微信小程序原生开发(WXML/WXSS/JS/TS),熟悉小程序生命周期、组件化开发、API&nbsp;调用(如网络请求、本地存储、支付&nbsp;/&nbsp;分享等);&nbsp;3、具备像素级还原设计稿能力:能精准还原设计稿中的间距、颜色、字体、圆角、动效等细节;4、掌握&nbsp;Vue&nbsp;2/Vue&nbsp;3&nbsp;基础用法,熟悉&nbsp;Vue&nbsp;组件封装、指令、生命周期、Vuex/Pinia&nbsp;状态管理,能独立完成简单&nbsp;Vue&nbsp;页面开发;5、了解前端工程化基础,如&nbsp;npm&nbsp;包管理、Git&nbsp;版本控制(会提交、合并、分支管理等基础操作);&nbsp;6、具备良好的沟通能力,能清晰理解需求,主动反馈开发中的问题,配合团队推进任务。加分项1、熟练使用&nbsp;AI&nbsp;工具(Kimi-K2.5、Claude、ChatGPT&nbsp;等)辅助开发,能利用&nbsp;AI&nbsp;完成&nbsp;UI&nbsp;转小程序代码、逻辑优化、bug&nbsp;排查;2、了解&nbsp;PAG/Lottie&nbsp;动画在小程序中的接入和使用,能实现复杂动效的还原;3、有小程序发布、审核、版本回滚、分批发布的实操经验;4、熟悉小程序性能优化(如包体积压缩、页面加载提速、减少卡顿);5、有独立完成的小程序项目;核心部门,在北京腾讯总部大楼,本岗位大部分时间会开发小程序(如果小程序0基础一点没开发过勿投递),要求实习时间长,表现很优异的话后续会转正机会
点赞 评论 收藏
分享
现在AI技能是求职的默认必备技能,不管是传统的前后端项目还是现在AI潮流新涌出的AI应用开发工程师、AI&nbsp;Agent工程师以及最顶的AI&nbsp;算法工程师,笔者为前端岗位,秋招投递了15+互联网大厂,收获3家大厂Offer(快手、京东、拼多多),下面聊聊个人对面试中的AI的一些idea:总结(通过JD总结要学什么)前端基础JS&amp;算法、React&amp;Vue框架、Vite、Monorepo、Pnpm工程化、性能优化、主流(微前端、SSR、大前端)仍为基础,全栈+AI是亮点,前端&amp;AI学习:框架前端开发者不再只是&nbsp;UI&nbsp;渲染层,而是要理解大模型、Agent、多模态交互,并能在业务中落地&nbsp;AI&nbsp;能力。整体架构可以分为四层:AI基础知识大模型基础核心概念:LLM(大语言模型)、Token、上下文窗口、Embedding、微调(Fine-tuning)、提示工程(Prompt&nbsp;Engineering)。关键能力:文本生成、代码生成、多模态理解(文生图&nbsp;/&nbsp;文生视频)、知识问答。前端视角:如何通过&nbsp;API&nbsp;调用模型、如何处理流式输出(SSE/WebSocket)、如何优化&nbsp;Token&nbsp;消耗。Agent&nbsp;与&nbsp;RAGAgent:能自主规划、调用工具、完成复杂任务的&nbsp;AI&nbsp;实体(如&nbsp;Coze&nbsp;扣子、TRAE)。RAG(检索增强生成):结合私有知识库,让大模型回答更精准、可控。前端视角:如何设计&nbsp;Agent&nbsp;交互界面、如何展示&nbsp;RAG&nbsp;检索过程、如何做多轮对话管理。多模态&nbsp;AI核心:文本、图像、音频、视频的融合生成与理解(如剪映的&nbsp;AI&nbsp;生成、实时交互)。前端视角:Canvas/WebGL&nbsp;渲染、WebRTC&nbsp;实时流、WebGPU&nbsp;加速、多模态内容预览与编辑。AI工具链应用场景AI&nbsp;IDE&nbsp;开发(TRAE、Cursor&nbsp;方向)核心:打造端到端生成真实软件的智能协作平台。前端职责:AI&nbsp;功能交互实现(代码生成、代码理解、知识问答)、IDE&nbsp;内核框架开发、插件生态与工具链。技术栈:React/TypeScript、WebAssembly、Monaco&nbsp;Editor、WebSocket/SSE。Agent&nbsp;平台开发(Coze、HiAgent&nbsp;方向)核心:新一代&nbsp;AI&nbsp;Agent&nbsp;平台,支持协同办公与应用开发。前端职责:LLM&nbsp;驱动的&nbsp;AI&nbsp;Agent&nbsp;框架实现、多&nbsp;Agent&nbsp;协同界面、可视化编排工具。技术栈:React/Vue、状态管理、可视化编辑器、实时通信。多模态创作与交互(剪映、抖音方向)核心:生成模型优化、多模态内容合成、实时交互体验提升。前端职责:AI&nbsp;生成内容预览、实时滤镜&nbsp;/&nbsp;特效、多模态编辑界面。技术栈:WebGL/WebGPU、WebRTC、Canvas、性能优化(FPS、内存)。AI&nbsp;+&nbsp;全栈开发(小红书、美团方向)核心:在&nbsp;AI&nbsp;Coding&nbsp;工具协助下完成前后端开发、测试、部署。前端职责:全栈开发、AI&nbsp;辅助需求分析与方案设计、提升开发效率。技术栈:Node.js/Python、前后端协作、CI/CD、AI&nbsp;工具深度使用。可视化与&nbsp;AI&nbsp;交互(同顺方向)核心:大模型应用的可视化交互、RAG/Agent&nbsp;工作流演示。前端职责:可视化&nbsp;Prompt&nbsp;编排、多轮对话可视化、模型输出调试界面。技术栈:ECharts/D3.js、流程图库、实时数据渲染、响应式设计。工程化与能力要求前端基础扎实的&nbsp;HTML/CSS/JS/TS,熟悉&nbsp;React/Vue&nbsp;等框架。工程化工具:Webpack/Vite、NPM/Yarn、CI/CD、自动化测试。跨端能力:WebAssembly、Electron、Taro&nbsp;等。AI&nbsp;工程化模型接入:OpenAI&nbsp;API、火山方舟&nbsp;SDK、流式输出处理。性能优化:Token&nbsp;压缩、缓存策略、推理延迟优化、首屏加载。安全合规:数据脱敏、隐私计算、内容审核。软能力拥抱新技术,紧跟&nbsp;AI&nbsp;前沿,不设边界。跨团队协作:与算法、后端、产品紧密配合。创新思维:将&nbsp;AI&nbsp;技术与前端体验创造性结合。
AI时代下,你的岗位要求...
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务