==项目问题==
🚀 报 500 错误一定是后端的问题吗?
a. 不一定,也有可能是前端传入了错误的数据格式造成的(不符合接口文档的要求),导致后端解析失败。
b. 不一定,也取决于后端是怎么抛异常的,可能是你某个参数传的不对,导致业务没办法进行的话,后端也有可能给你抛 500。
c.不一定,也可能是代理服务器配置错误导致的,这时候可以通过 Postman 工具去调试下。
🌞 如何与其他前端同事配合,你们会有共同的代码吗?
a. 一般情况下不会有,做的模块不一样。有时候也会涉及到公共的内容,这时候可以找对应的前端同事沟通,合理的进行组件封装,代码复用是有必要的。
b. 一个迭代中,某个类型的业务,一般都是有同一个人负责的,有配合的话会先提前沟通好,要么某个人去封组件,写好了另一个人导入使用即可。
🥑 后端是如何给你接口文档的?
a. 错误回答:后端通过飞秋给我一个 Markdown 文件。
b. 参考回答:开发阶段,后端程序员(Java)使用 SwaggerUI 自动生成接口文档并托管到公司内网,前端同学只需要访问局域网内的某个网址(后端给的)就可以查看并测试。
🍄 这个项目完成之后你的收获是什么?
a. 错误答案:学了几个新 API,例如:include,reduce...。错误原因:这几个 API 太简单了,反映了你的能力很差。
b. 参考回答:代码组织、封装复用、性能优化、业务...
c. 首先肯定是对代码的写法更熟练,以及增加了一些处理问题的能力,其次的话就是对公司代码的管理,一整套流程有了清晰的认知,包括产品、UI、开发、提测、发布以及相关的业务有了更多的了解。
💊 项目基本情况:做了多久?是几个人做的,如何分配的?技术栈是什么?为啥选择这个技术栈?项目的用户是谁,有多大规模?是否驻场开发?你对应几个后端?
a. 参考答案 1:公司有 4~5 个项目,PC、移动、微信小程序等,从 18 年开始都有不停的去更新迭代,最早的时候甚至是后端去写的前端代码,现在前端团队有十来个人,是根据业务去划分的。技术栈的话主要是 Vue,开发的产品主要服务的是 B 端用户,当然也有 ToC 的项目,B 端用户量应该一千左右吧。不需要驻场开发,按照业务来划分的话,可能不同的开发任务会对应不同的后端,基本所有后端都有接触到。(不需要驻场开发,我当初就是1个前端对应一个后端,也有的时候是 1 个前端对 2 个后端。)
b. 参考答案 2:项目是公司一直在维护的,这个项目已经迭代了 1 年多的时间,后续依然会迭代推出新的版本/功能,平常的话基本上就是一个前端来开发,除非新的需求比较多,可能会派其他前端来帮忙。公司基本上简单的项目一个前端,复杂工作量大的项目,可能会两到三个前端;我来公司的时候,项目已经做了半年了,当时 Vue3 还不太稳定,所以这个项目是基于 Vue2 开发的,上手也比较简单一些。用户群体是针对于区块链的用户,不是大众的产品,这个是我们公司自己的产品,无需驻场。
🌽 项目中是如何做 Git 分支管理的?
a. 一般情况下,我们项目经理会创建三个分支,分别是 master => 主分支,打包上线;release => 测试分支;develop => 开发分支。
b. 具体开发的时候,我会把 develop 拉到本地,然后基于 develop 开一个自己的功能分支,例如我要开发【用户界面】这个功能,首先保证处于 develop,git checkout -b feature/user;然后,在自己的功能分支上面写代码,写完了之后,git add . / git commit -m 提交信息;然后,切换到 develop,在此分支上执行 git merge feature/user 合并功能分支的代码到 develop;最后推送到远端,执行 git push origin develop;如果期间出现了 Bug,一般会开一个分支用于紧急修复,例如 hotfix。
🍆 在开发的过程中,接口是部署在哪里的?
a. 我们公司有专门的开发服务器,会部署在公司的内网服务器;
b. 或者通过局域网 IP 链接的是后端电脑进行调试。
c. 开发过程中接口部署在 k8s。
🏓 项目代码托管在哪里?
a. Gitlab(公司自己部署的,需要内网才能访问)。
b. 一般开源的项目在 Github,闭源使用公司搭建的 Gitlab。
🥒 接口是现成的么?你 Mock 过数据么?怎么 Mock 的?
a. 前后端同时开发项目,我会先写页面,一般页面写好了,后端接口也就差不多了,没写好的话就根据后端提供的接口文档来通过 mock.js 进行模拟。
b. 有时候后端也会先写一些 Mock 数据给我们前端使用,等后端把逻辑写完后,再替换成真实数据返回。
🍕 你的项目共调用过几个接口?
a. 那就太多了,具体没数过,几十个肯定是有的。
b. 例如编辑用户列表中的某一个用户信息,一般会涉及到三个接口:根据 ID 获取详情、编辑功能、获取用户列表。
🍔 接口会跨域吗?为啥?你是怎么解决的?
a. 会,浏览器出于安全性的考虑会有跨域的限制,一般后端通过 CORS 可以去处理。
b. 前端也可以通过配置代理来进行处理,例如可以在 vue.config.js 中配置 devServer 的 proxy 属性,部署上线后,也可以在 Nginx 做反向代理。
🍟 你封装的最难的组件是什么?是怎么封装的?
a. 多层级侧边栏封装,根据后端返回的数据,v-for 循环 + 组件自调用。
b. 封装的最难得组件是把阿里的 G6 封装到 React 中,之前 G6 都不支持 React,需要封装到 React 中,抽离成一个组件,支持卡片拖动,设置属性,要单独封装卡片列表和操作栏,然后整合 G6 的 API 暴露给组件外部使用。
🌭 如果有机会再写一遍,这个项目会有什么改进?
a. 会做更加详细的组件抽离,避免一个组件中代码逻辑过多,不利于后期的维护。
b. 组件设计更合理一些,增加可复用性,减少代码的耦合度,不过这个还是要根据具体业务来看。
🍜 后端是如何给你接口文档的?
a. 前期接口没出来,先会给定义字段的文档,后端会在在 SwaggerUI 或者 Yapi 自动生成接口文档并托管到局域网内,前端只需要访问一局域网内的某个网址(后端给的)就可以阅读最新的文档。
b. 我们公司用的是 Wiki,后端同学会开技术评审,然后写接口文档,真实联调的时候他们也会自动生成 SwaggerUI。
🥭 接口不能正常工作时,如何判断问题是在前端,还是后端?
a. 首先根据接口文档看传参, 一般传参没问题会后端沟通。
b. 更多的是直接看后端返回的数据,自己做的功能,如果数据有问题是能够看出来的。
🍍 测试同学给你报了什么 Bug?为啥当时没有发现?
a. Bug 还是很多的,写代码不可能没有 Bug 的,多加强自测即可。
b. 测试觉得跟需求文档上不一致或不合理的地方会给你提 Bug, 这个原因有很多 前后端没协调一致, 需求文档没看仔细, 或者有些地方不好处理 需要再商量,都有可能。
c. 开发的时候按照产品的需求写,都是大家设定好的情况,但是开发出来的产品,一定会有疏忽,会出现大家没有考虑到的情况,这种都比较好解决,添加逻辑代码即可,还有一种错误就是预期之外的,因为前端面对的是用户,用户的设备不同,效果很有可能是有差异的。
🍌 你修复 Bug 的基本流程是什么?
a. 根据 Bug 清单,从页面交互逻辑入手,然后深入到具体代码。
b. 先复现问题, 样式问题还是报错.还是业务没走通啥的.要是报错就看控制台就能定位到代码报错的地方修改.业务导致的找产品是完善逻辑。
c. 改 Bug 基本流程先定位,本地查看,本地没问题的话看线上环境的本地环境的相关配置是否有差异,最麻烦的是客户端兼容性导致的 Bug,找到相应问题解决即可。
d. 一般由测试发布到禅道,后面由组长分配到下面,也可以自己直接解决。
🍋 打包部署?
a. 项目业务简单,后台管理系统,yarn build 完毕之后,把生成的 dist 文件交给了后端,后端一般部署到 Nginx 服务器。
b. 我们公司是基于 jenkins 进行的打包,只需要正常提交代码,老大配置好了打包的步骤和流程,点一下打包按钮自动生成了打包文件到对应的服务器。
🍊 Webpack 配置?
a. entry、output、loader、plugins、alias、externals...
🍉 做项目碰到那些问题?
a. 上传图片的时候有时候不会触发,解决:oFile.value = ''。
b. 路由跳转,created 或 mounted 里面发请求不会触发(路由缓存问题),解决:watch $route。
c. 数据不更新问题。
d. 大数字问题,告诉后端改成字符串,或者用 axios transformResponse 里面配合 json-bigint 进行处理。
e. 滚动条问题,解决:overflow-y: auto,让每一个容器产生自己的滚动条。
f. refresh_token。
g. 权限。
h. keep-alive。
🍓 埋点是什么,一般怎么做?
a. 埋点的目的就是统计用户对页面进行的任何操作,收集用户的行为帮助复盘,改进产品。一般会在关键位置的操作进行记录,纯手动埋点就是调用接口把行为上报到后端。
b. 一般这些接口都是封装好的函数,直接调用传递过去当前行为标识就行了。
🍅 后端返回数据规范。
a. 成功后端返回 2 开头的 HTTP 状态码,错误就返回对应的 HTTP 错误状态码。
b. 无论成功还是失败,HTTP 状态码一律返回成功(2 开头的),具体错误用后端提供的字段进行表示。
🍐 说一个你觉得有价值的事情?
a. 有一次在旧项目上进行迭代的时候,发现某一个组件一共有 1k 多行代码,那这个会不会影响项目的运行速度呢?于是我又看了整个项目的代码,发现有好多类似的问题,于是我先改造了某一个组件,完成之后运行没有问题,给我的老大看了下,他觉得很满意...于是。
🍑 整个项目的开发流程?
a. 产品经理收集客户需求,然后用 墨刀 或者 Axure 或者蓝湖等等产品原型工具画出原型图 (可自行百度大致了解一下这些原型工具)。
b. 项目经理召集人员开研发会议(前端、后端、测试都要参加), 跟研发人员捋清业务流程,然后前后端评估项目完成时间(需求排期)。
c. 开发准备阶段:技术组长分配任务;测试人员给出测试用例;前后端一起商量需求中需要联调的部分,进行接口的口头协议交流。
d. 在后端接口还没写好之前,前端可以先依照原型图来完成自己任务模块的静态页面和结构搭建。
e. 后端接口文档写好后,前端开始实现功能和数据铺设等等。
f. 开发完成后,将项目打包测试环境发给测试,测试人员根据测试用例,来进行测试,如果测出 Bug,会将问题提交到禅道 (或者其他的管理软件)上。然后根据他给出的 Bug 来改,改完之后继续给他测直到 ok (回归测试)。
g. 进行项目上线,上线过程中,一般所有开发人员都要在场(因为会有很多意想不到的 Bug),如果出现 Bug 需要紧急修复。一切 ok 之后第一版完成。
h. 项目经理将第一版交付给客户(甲方)对接,如果客户有不满意的地方,需要调整需求,反馈给我们,然后进行改版..........循环这个改版过程 直到客户满意。
🍒 25. 高薪就业。
七次有效面试(每次大于 30 分钟,有问有答,==相谈甚欢==),可拿 Offer!
\