前端项目面试核心问题(持续更新)

news2025/1/20 5:56:59

本文有配套视频教程
在这里插入图片描述

项目面核心问题回答思路

说说你最近的项目

  • 记叙文的六要素:时间、人物、地点、起因、经过、结果;
  • 时间:研发周期;
  • 人物:团队成员、分工、我负责哪几个模块;
  • 起因:项目背景、项目的用户是谁、用户能用这个App干啥、基本业务逻辑描述;
  • 经过:我负责哪几个模块,主用的技术栈是…,
  • 结果:1.0耗时多久上线、目前处于何种状态;
  • 项目亮点:最好有并且输出10分钟;

你负责哪些模块?

  • 先下载一个业务极其相近的App在自己的手机上;
  • 对着该蓝本App玩烂、充分脑补,而不要对着空气脑补;
  • 该蓝本App的各种菜单、导航、页面跳转按钮…就是所谓【模块】;
  • 信手一划拉就有十几个模块备选(不要来来回回就是登录、网络通信、路由跳转…)
  • 从以上模块中找几个你最能脑补出东西的模块来,号称是自己做的;

讲讲XX模块的实现细节

  • 业务功能是什么?事先玩透、脑补透;
  • 静态组件布局 + 网络通信获取数据 + 动态渲染 + 事件交互 + 后期优化;
  • 静态布局部分:核心组件,给核心组件传递的主要props与callback(组件与通信)
  • 网络通信:axios三层封装 + vuex/redux的数据缓存;
  • 事件交互:可能有基于antd/elementPlus的二次封装(初中级)、自定义组件库(中高级);
  • 后期优化:性能优化 + 复用提取(Vue和React如何复用逻辑)

为每个模块事先准备一些物料:

  • 二次封装的组件若干(有明确的名字与逻辑)
  • 自定义Hook若干
  • 自定义指令若干
  • HOC/RenderProp若干;

有什么亮点?

  • 性能方面:性能优化25条
  • 复用方面:mixin,自定义指令,自定义hook,HOC,RenderProp,自定义组件(二次封装/自定义组件库)

有什么难点?

  • 不一而足,请为最近的两个项目各自准备一个难点;(至少能输出20分钟)

怎么做的优化?

  • 性能方面:性能优化25条(简单:至少输出30分钟)
  • 复用方面:mixin,自定义指令,自定义hook,HOC,RenderProp,自定义组件(二次封装/自定义组件库)(略难:尽量准备)

@之前团队的工作流程

立项阶段

  • 老板+产品+技术总监一起论证某产品的可行性
  • 产品出《需求文档》+《需求原型》

*PS:需求原型的形态通常是网页上的简单交互与跳转,或手机App上的简单交互与跳转,产品使用的原型制作工具(Axure/墨刀等)能自动生成一个临时的App二维码,扫码即可安装

开发阶段

  • 美术按照需求原型设计界面,生成《效果图》
  • 与此同时前后端共同协商,生成前后端通信的《接口文档》
  • 前后端根据《接口文档》分头开发
  • 前端组长创建工程并推送远程,添加开发者账号,组员克隆项目
  • 组员在各自的分支上开发不同功能(通常按页面分工最容易衡量各自的责权利)
  • 前端根据《效果图》制作静态页面
  • 前端将静态页拆分为组件化结构
  • 前端自己部署mock数据(json/json-server/fast-mock等皆可)
  • 前端与自己的mock-server进行网络通信,完成数据交互与其它业务功能
  • 后端的接口开发完成后,前端将网络框架中的BASE_URL由mock-server改为真实后端服务器地址
  • 前后端共同联调直至前后端功能开发完毕

测试阶段

  • 各功能分支合并到dev分支,再基于dev分支拉出一个test分支,打包到测试环境服务器,提交测试
  • 测试人员提交BUG到【禅道/Jira】等BUG管理平台上
  • 组长将BUG分配给不同的个人进行修复
  • 持续修复BUG并提交测试
  • 【致命】+【严重】+【一般】级别的BUG确认修复完毕后(测试人员需要签字),可以考虑上线

上线阶段

  • 手动上线流程:master分支合并dev分支,打包并上传到生产服务器上的Nginx部署目录下,上线完成
  • 持续集成(CI/CD)上线流程:master分支只要一提交,即自动触发运维脚本(运维同学所写),该脚本执行npm run build并将产出目录上传覆盖到Nginx的部署目录,上线完成

升级/维护阶段

  • 重复上述流程,即:产出新需求 + 产出新界面 + 产出新接口 + 产出新代码 + 测试通过 + 再次上线

@项目上线后出现bug怎么去解决?

  • 更新master分支
git checkout master
git fetch
git merge origin/master
  • 从master分支拉出修复BUG的分支
git checkout -b hotfix-bugid
  • 在该分支上修复BUG并提交
git add .
git commit -m "热修复BUG,id1234567"
git push -u origin hotfix-bugid
  • 备份master分支
git checkout master
git checkout -b master-bak
  • 将BUG修复分支合并回master分支
git checkout master

// 解决冲突时选择接受所有新来的代码 accept incoming
git merge hotfix-bugid

git add .
git commit -m "master分支合并BUG修复分支hotfix-bugid"
git push -u origin master
  • 提交master分支自动触发CI/CD的重新打包上线流程(选项A)
  • 也可以手动打包后上传覆盖Nginx服务器中的前端项目目录(选项B)
  • 用户自动访问到BUG修复后的内容

@前端开发人员的日常工作与产出

  • 例会:周例会,日例会,时间可长可短,无非各自通报一下进展与问题;
  • 日报/周报/月报:日报或有或无,周报与月报通常都有,总结一下本周完成,规划一下下周计划(好好写,写漂亮点)
  • 日常工作:早上到公司同步一下最新的代码,开发,晚上下班前例行提交一下今天的代码(哪怕有BUG),每次提交都尽量写详实一点
  • 产出:代码 + 接口文档(可选) + 技术文档(例如特定类库的使用方法,可选)+ 打好的包

代码提交模板

新功能:xxx
修复BUG:xxx
依赖变化:xxx
目录变化:xxx
备注:xxx

@如何排查BUG

  • 多打log(可以考虑封装出一个Log方法,当全局的模式配置为dev时输出,为prd时不输出)
  • 网络错误多看控制台中的网络项,善用其中的各种过滤器
  • 看报错信息,先看一下日志结构,迅速找到重点:例如错误id,代码行号等
  • 善用IDE的全局搜索功能,快速定位关键词出现的位置
  • 多提交,这样可以利用版本回退定位BUG发生的阶段
  • 依赖方面的错误,删除lock文件,删除node_modules,重新执行npm i试一下
  • 重启开发服务器,重启IDE,重启电脑
  • 百度、掘金、烂笔头
  • 实在搞不定就先搞别的,有时做到后面时会忽然获得灵感

@使用过哪些开发工具

PS:掘金搜索:“前端 工具”、“VSCode插件”,几万吨工具将会迎面袭来

以下随便罗列一些:

大工具

  • MarkDown编辑器:Typora + 掘金编辑文章
  • 文本编辑器:notepad++ + editPlus + sublime
  • 思维导图:FreeMind + XMind
  • 数据库可视化:MongoDB/Compass + MySQL/SQLyog(海豚)
  • BUG管理:Jira,禅道

VSCode插件

  • 正则大全:VSCode插件any-rule
  • AI代码提示:Tabnine
  • JSON转TS类型定义:JSON to TS
  • 随机生成假数据:vscode-faker
  • 即时翻译:VSCode Google Translate

在线文档

  • NPM包的使用方式:npmjs.com
  • 图标字体:Iconfont
  • 各种官方文档

浏览器插件

  • Vue调试:devtools浏览器扩展程序
  • 前端性能调试:lighthouse

在线工具类

  • 在线JSON格式化:json.cn
  • 在线翻译:百度翻译
  • 在线作图:Process On
  • 在线二维码生成:草料二维码
  • 在线雪碧图生成:sprite-generator
  • 在线压图:TinyPNG
  • 在线调色板: sojson.com
  • 在线工具大全:tool.lu sojson.com

命令行工具

  • Node版本切换/源切换:nvm/nrm
  • mock数据:json-server,fast-mock
  • 兼容性检查:CanIuse + caniuse-cmd
npm install -g caniuse-cmd
caniuse fetch
  • 删除文件/文件夹: rimraf
npm i -g rimraf
rimraf ./node_modules

@从数据中过滤掉不需要的字段后形成JSON

const p = {
    name:'张三',
    age:18,
    friends:['李四','john']
}

// 在p的地址中将age覆盖为undefined
Object.assign(
    p,
    {age:undefined}
)

// JSON的特性:不识别undefined
console.log(
    JSON.stringify(p)
);

@【咨询模块】怎么做的?

  • 底层核心原理是WebSocket长连接;
  • IM即时通信(Instant Messaging)框架:融云SDK、极光SDK、有赞SDK;

@日常开发中遇到过哪些问题?

  1. 项目跑不起来,依赖有问题(特别是库的版本兼容性问题);
    解决方案:删除依赖分析文件package.lock+node_modules,重新执行npm i
  2. JS项目拿TS重构,不知道原始入参的类型,前期可以any,后期追源码;
  3. Git的公共文件,忌讳重名、移动位置、删除等操作;

@项目中遇到过哪些难点,如何解决的?

  1. 性能瓶颈:性能优化25条;
  2. 顽固的BUG:绕行方案(强行给魔方的各个面手动涂颜色);
  3. Adobe的库magento,官方文档一行代码都没有,只有英文教学视频,10来分钟一集*8集,无字幕;
    手动录屏+youtube发布视频草稿,利用youtube的AI字幕功能添加双语字幕,最后将使用方法摸了个大概齐;

@封装过axios没?

底层是实例层 + 中间是操作层(CRUD) + 最顶层是业务层
https://juejin.cn/post/7103922378463248414

@导航守卫/登录校验?

https://vue3js.cn/interview/vue/permission.html

@性能优化/优化页面?

略:参见性能优化25条:桫哥的思维导图-就业辅导-附录-网站性能优化常用手段

@开发团队有多少人?你负责什么?

  • 4前端 + 10后端(Java);
  • 前端团队整体上按页面分工;

@如果处理海量数据/大量数据?

  1. 前后端协同处理,让后端数据接口支持分页获取数据;
  2. 考虑手动缓存数据 + 重构服务端接口;
  3. 懒加载:Suspense + Lazy
  4. 长长的大列表,内存里永远只留三屏数据【当前屏】+【上一屏】+【下一屏】;上上屏/下下屏的数据数组直接置为null等待垃圾回收器去缓存;有一个库叫betterScroll实现了该逻辑;

@白屏问题?

  • 正常使用异步的话 就不会阻塞渲染
  • 本质是渲染被阻塞了(数据没回来,数据量太大);
  • Nuxt/Next首屏使用服务端渲染;

乔布梭的前端课
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(开发导航栏及公共部分)

基于 Vue3.x Vant UI 的多功能记账本(三) 文章目录基于 Vue3.x Vant UI 的多功能记账本(三)项目演示开发导航栏1、底部导航栏2、测试底部导航栏3、公共头部写到最后(附源码)系列内容参考链接基于 Vue3.x …

element-UI组件之日期时间选择器与时间格式转化

element-UI组件之日期时间选择器与时间格式转化日期选择器与时间选择器的一般使用日期时间选择器选择日期时间点选择日期范围日期选择器月份范围选择器禁选日期用time.getTime()进行日期(时间)格式的转换时间选择器el-time-select选择固定时间点el-time-picker选择任意时间点禁…

Vite 基本配置及原理

Vite 基本配置及原理介绍vite.config.jsoptimizeDeps.exclude不同环境的 vite 配置css配置Vite 对 css 的处理Vite 对 cssmodule 的处理和配置Vite 对预处理器的配置devSourcemapVite 对 postcss 的支持Vite 静态资源别名设置Vite 生产环境配置介绍 如果你还不知道 Vite&#…

【Vue入门必备知识篇05】--- Vue Router路由

前言❤️ 当落日余晖照在身上,没有污秽没有杂尘,只有光和希望 ❤️【Vue入门必备知识篇05】--- Vue Router路由一、前端路由的概念与原理(1)什么是路由(2)SPA 与前端路由(3)什么是前…

vue-router中的参数传递

文章目录前言一、本文章中练习需要的准备工作暴力引入bootstrap安装Vue Router二、项目基本架构1. 配置router文件2. 写入路由组件 一级路由3. 二级路由 实现传参3.1 使用params 传参3.1.1 在router文件下配置二级路由3.1.2 在view文件下新建二级路由组件3.1.3 在上一级路由组件…

uniapp**字符串转Json并提取字段值

uniapp字符串转Json并提取字段值 JSON有三种格式,每一种写法都和JS中的数据类型很像,可以很轻松的和JS中的数据类型互相转换 一、简单值的形式:JSON的简单值的格式对应着JS中的基础数据类型:数字 字符串 布尔值 注意事项&#…

这是我见过最牛逼的滑动加载前端框架

文章目录前言一、mescroll简介二、快速开始三、一分钟入门mescroll图片懒加载四、mescroll在vue中的使用五、小结前言 在手机端实现下拉刷新和下拉加载是最常见不过的需求了。今天大师兄就给大家分享一个非常精致的js框架:mescroll. 提示:以下是本篇文…

Cursor:GPT-4 驱动的强大代码编辑器

Cursor (https://www.cursor.so/)是 GPT-4 驱动的一款强大代码编辑器,可以辅助程序员进行日常的编码。下面通过一个实际的例子来展示 Cursor 如何帮助你编程。这个例子做的事情是网页抓取。抓取的目标是百度首页上的百度热搜,如下…

使用Python进行网站页面开发——HTML

目录 一、HTML基础语法 1.HTML是什么? 2.HTML基本结构 3.HTML注释 二、HTML常用标签介绍 1.文本标签 2.格式化标签 3.图片标签 4.超级链接标签 5.表格标签(用来显示数据) 6.表单标签(用来接收数据) 7.行内…

ACM模式下JavaScript(js)的输入输出 V8 Node

OJ在线编程常见输入输出练习场 ACM模式下分V8和node.js node.jsV8内置基本模块,相当于java中的JREJVMjava标准库 node就是带有能操作IO和网络库的V8引擎,提供了很多可调用的API使得JavaScript能够读写文件,网络请求,系统信息等…

【IIS搭建网站】本地电脑做服务器搭建web站点并公网访问「内网穿透」

文章目录1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试3. Cpolar内网穿透3.1 下载安装Cpolar3.2 Cpolar云端设置3.3 Cpolar本地设置4.公网访问测试5.结语1.前言 在网上各种教程和介绍中,搭建网页都会借助各种软件的帮助,比如网页…

前端项目如何部署到服务器实现网址访问

目录 前言 需要用到的东西 购买云服务器和域名 绑定域名 使用Xshell连接云服务器 下载Nginx 安装nginx 配置nginx 启动nginx 传输文件 配置防火墙 卸载自带的防火墙 安装iptables防火墙 最后 前言 写了那么久的前端,就想着让朋友们欣赏欣赏&#xff0…

ElementUI快速上手(jar包本地下载)

Element-ui是饿了么前端团队推出的基于vue进行开发的前端框架。 最近刚学了Element-ui,迫不及待练练手,却发现现成的组件样式用不了。引用官网的使用方法,如图: 展示的效果也是不尽人意,在百度的过程中发现可能是链接…

相对定位relative、绝对定位absolute、固定定位fixed

注:默认情况下的定位是 postion:static; 使用定位时,常常使用偏移量对位置进行描述:left、right、top、bottom定位时,使用z-indent可以元素的堆叠顺序,例:z-indent:1&…

Spring Security 权限控制

日积月累,水滴石穿 😄 前言 项目版本Boot2.3.12.RELEASESecurity5.3.9.RELEASE 官网文档 在前面的文章中,所有的接口只需要登录就能访问。并没有对每个接口进行权限限制。 在正式的系统中,一个用户会拥有一个或者多个角色&#…

三种架构模式——MVC、MVP、MVVM

目录 前言 一、MVC(Model-View-Controller) 1、简介 2、框架图 二、MVP(Model-View-Presenter) 1、简介 2、框架图 三、MVVM(Model-View-ViewModel) 1、简介 2、框架图 四、总结 前言 MV系列框…

微信小程序插件--wxml-to-canvas(生成图片)

一、需求 项目中要实现一个将图片分享到朋友圈的功能,将生成的海报转成图片保存到手机。用到了wxml-to-canvas插件。 二、官方示例使用方法 1.安装wxml-to-canvas npm install --save wxml-to-canvas2.JSON 组件声明 {"usingComponents": {"wxml-t…

多款顶级好用的 Vue 表单设计器测评推荐,可拖拽生成表单

本文完整版:《多款顶级好用的 Vue 表单设计器测评推荐,可拖拽生成表单》 Vue 表单设计器form-generator - 适配 Element Plus UI 框架的表单设计器form-render - 阿里团队开源表单设计器,自家 Antd UI 框架友好form-create - 支持Vue3 及 Ele…

内网npm私有仓库搭建以及使用教程

前言 前端团队沉淀一套通用的UI库、工具类、脚手架,不允许在公网发布,内网npm私有库搭建需求应运而生。如何在内网环境搭建npm私有仓库并使用?主角登场了 —— Verdaccio。接下来我来教大家使用 verdaccio 在内网环境中搭建npm私有仓库。 基…

canvas详细入门教程(1W字 吐血分享)

大家好&#xff0c;我是潘潘 今天为大家带来的是我已经写了很久了的canvas详细教程&#xff0c;对入门canvas很有帮助。 点击跳转原文&#xff1a; canvas详细教程原文 canvas是什么&#xff1f; 简单来说&#xff0c;<canvas> 是HTML5中的标签&#xff0c;它是一个容…