前端日常实习面经2.0(嘉为科技、皓云原智)

658 阅读16分钟

前端日常实习面经2.0(嘉为科技、皓云原智)

距离上次卓动面试已经过去了两个多星期,满打满算从5月15号开始投简历到现在差不多也快一个月了,中间有一个星期多因为课程的原因没有继续投递。我感觉第一份实习还是挺重要的,所以一开始没有选择海投,在投递简历的时候会考虑到通勤距离、目标公司规模和公司技术栈与自身技术栈的匹配度等。算上这周面试的两家,一共面试了4家公司。总体感觉这段时间找实习还是不容易的,特别是在这种大环境下。昨天下午面试完嘉为科技后回来本来是想写面经的,但是有软件测试的期末报告要交就暂时耽搁了,今天有时间顺便把和今天另外面试的一家给记录下来。

广州嘉为

嘉为科技我记得我刚开始投简历的第一天就投递他们公司的前端岗位,但是当时给那个男HR打完招呼后已读不回(也许我第一版简历不太行?),后面半个月后(简历参考了知识星球 HearLing 姐的改了一版)又在某聘上看到嘉为另外一个女HR在招前端实习生,就抱着试试的心态投了,后面简历筛选过了,也成功的约到了面试,不过后面发来的面试邀约写的是一开始那个男HR的名字,我又去某聘上看了看,发现女HR那个岗位已经停止招聘了,而男HR那边的还在招,估计是交流过后转接到那边去了。

这次面试有两个面试官 A,B ,其中主导面试的是面试官 A ,看了我的简历后,没有让我做常规的自我介绍环节,直接就是进入面试,问的东西比较基本,基本上是围绕我简历上的内容展开的,能回想起来的都记录下来了:


面试官 A:

你的这个数据管理系统是肉鸽管理的那个吗?你在这个项目中主要是负责什么的?

答:

我们写的是饮食数据管理系统,主要是做饮食数据推荐的,我主要负责的是写后台管理系统的前端界面(肉鸽数据管理这个项目很熟悉,有点像我们学院实验室里面的项目......)


面试官 A :

问点比较基础的 html 知识吧,html 中块级元素和行内元素分别有哪些?二者有什么区别?

答:

常见的块级元素有:div、ul,常见的行内元素有:span、input等;二者的区别是:块级元素在页面上会独占一行,宽高可以任意修改,而行内元素无法修改宽度和高度,它的内容有多少就默认了自身有多长的宽度。(这个知识点之前是有总结过的,但是最近一段时间准备的面试题基本上都是 js 相关的,所以之前总结的知识点一时半会没想出来,感觉答的不好)


面试官 A :

平时写代码的时候 css 部分哪些属性用的比较多?

答:

平时自己写样式弹性布局用的比较多,还有像一些改变字体样式的属性:像 font-size、color,还有内外边距相关的、border-radius 这些。


面试官 A :

现在有这样一个实现场景:一个页面从上往下分为 header、main、footer 三个部分,当 main 中的内容足够多的时候,footer 会被挤到页面下面,鼠标下滑到页面底部可以看到底部就是 footer,那如果当 main 部分的内容较少的情况下,如何保持 footer 固定到页面底部不变?

答:

可以给 main 部分一个最小高度限制,让 footer 部分可以一直在页面底部。

面试官 A:

如果项目运行在多个浏览器上呢?每个浏览器的兼容性是不同的。

答:

可以设置一个监听函数,用 addEventListener 来进行监听,当main 小于某一个值的时候,可以将 footer 用 fixed 固定在页面底部。(当时脑子里突然有的想法,没有实践过,但我觉得这种方案应该是可行的,毕竟知乎日报移动端那边也有过类似的做法)


面试官 A:

如何学习前端?学习前端的路线?有没有看过前端相关的书籍?

答:

校内的课程有学习三件套,但主要还是靠自学,大部分时间会在 B 站看教学视频,像黑马尚硅谷这些,还有一个就是逛社区,社区主要还是掘金,现在还会用 ChatGPT 辅助学习。

学习前端的路线基本上是按照:三件套、Node.js、Vue2/3、Uni-app 这个路线来走(后面面试官觉得有点笼统,想让我说说学习之后一些总结之类的,我就回答了按这个路线学习时的学习方式)。

还没有看过前端相关的书籍,平时主要还是以看视频做项目还有参加比赛提升能力为主(其实之前有看过红宝书的电子版,但是就看了一点点,而且太久了我也忘记看了什么内容了所以就没说出来)


面试官 A:

实现页面水平垂直居中有哪些方案?

答:

说了 flex 布局还有定位,并说出了具体的 css 实现代码,后面面试官问我还有没有,我就回答了还有像 text-align:center、margin: auto 这些。


面试官 A:

有没有了解过 Vue 的数据双向绑定原理?

答:

Vue 的数据双向绑定原理主要是依靠 Object.defineProperty() 这个 API 实现的,主要是对数据进行劫持监听,并通过其中的 getter 和 setter 方法对数据进行更新(有专门的看过这个,还特地去看了一下别人的用原生模拟实现的代码,但是看得似懂非懂的)。

追问:

(原话是什么已经忘记了,但是具体就是问我知不知道 v-model 在封装的时候是如何实现的,我觉得应该是要问 v-model 语法糖背后的具体实现方式)

答:

这个没有去了解过(其实是有接触过,在仿写 UI 组件库的时候在 B 站上有 UP 主介绍过,但是当时只是跟着敲了一遍,时间一长就忘记了......)。


面试官 A:

有了解过 Vue 中的自定义事件吗?

答:

有了解过,具体就是用 emit 来实现(答得很没底气,因为刚学 Vue2 的时候有接触过,平时项目用的比较少,时间一长很多都忘了......)


面试官 A:

描述一下浏览器页面渲染的过程(依你的理解,越详细越好)。

答:

首先用户在浏览器当中输入 URL 按下回车键后,浏览器内部会进行 DNS 解析,将用户输入的 URL 转换成相应的 IP 地址,然后向对应的 IP 地址发送建立 TCP 连接请求,建立 TCP 连接后再向对应的服务器发送 http 请求以获取相应的网页资源,像图片、html、css、js 等页面资源,根据请求回来的页面资源进行解析,生成相应的 DOM 树和 CSSOM 树,最后将二者合并成一颗渲染树,进行页面渲染,得到我们平时上网时所看到的网页(这部分之前只是简单地看一下,知道个大概流程而已,我觉得我自己答得很粗糙,还有许多细节都没说上......)。


面试官 A:

你简历上说过了解基本的数据结构与算法具体有哪些?自己平时有做过算法题吗(像力扣这些刷题网站)?

答:

数据结构与算法其实就是在大一的时候校内课程学习到的,具体的就是一些常用的堆、栈、队列等,还有一些比较简单基础的算法,像排序算法这一类;之前是有在力扣上刷过题的,但是刷的也不多,最近一段时间就没怎么刷过,我感觉在力扣上刷算法题还是有点吃力的。


面试官 A:

说说你的职业规划。

答:

因为一开始也说到了我以后希望从事的工作是前端开发,近期找的也都是前端开发相关的实习,秋招也越来越近了,我觉得在秋招前有一份相关的实习经历是很有必要的,然后我希望在毕业后能够拿到一份前端开发的 offer,在 3 - 5 年内通过工作提升自己的技术深度和广度,再到往后的阶段会考虑自己是否有能力晋升成为管理层。

追问:

你一直有在提到你以后希望从事的是前端岗位的工作,那你觉得前端和后端岗位哪个发展空间更大,还有你偏向前端的原因?

答:

首先我觉得肯定是后端发展的空间更大,因为后端会接触到公司的核心业务,一般来说在开发流程中后端会更有话语权,而大部分情况下前端只是负责配合后端来实现相应的页面。

偏向前端的原因还是因为对前端更加感兴趣,因为在学校也学过 Java 这些后端的东西,但是最终还是觉得对前端更感兴趣一点。

追问:

那你对前端感兴趣具体是在哪方面?

答:

就是页面效果实现这方面,像几行代码就能实现溢出文本用省略号代替,还有 css 动画之类,像 Animasta、GreenSock 这些 css 库......


面试官 A:

如果给现在你顺利入职公司你会接受 995 的工作制度吗(打个比方,公司不会让实习生做那么多活)?如果平时给你布置的工作内容不多,在完成工作后的剩余时间里你会做什么?

答:

首先我还没有真正实习工作过,如果是 995 制度我会先接受体验一下这种工作强度,看看自己能不能很好地适应它。

平时日常工作完剩余的时间里我会继续学习一下前端相关的知识,像最近我就在跟着官方文档学习 React,边看边动手敲代码,像这种用碎片化的时间来学习我觉得是可以实现的。


面试官 B:

我看了你的这个饮食数据推荐系统项目中的登录功能,你能说说在这个登录模块你做了哪些事吗?

答:

登录模块的话首先是在前端进行表单预验证,这边我用到的是 Element UI 组件库中的表单预验证功能,然后通过预验证后会向服务器发起请求,这边用到的是 axios 网络请求库,根据返回的状态码来判断登录是否成功,登录成功后会将后端请求到的 token 存储在本地,并写在 axios 请求头当中,后续的相关功能操作需要这个 token 请求头才能获取相应功能的使用权限,还有就是在 main.js 当中设置路由导航守卫,如果本地没有存储 token 则强制将页面跳转回登录界面。

追问:

你说你是将 token 存储在本地,那具体用的是哪种存储方式?

答:

这边我是将 token 存储到 localStorage 当中。

追问:

那如果我在本地伪造一个 token 是不是也能进入后台界面当中。

答:

如果在本地伪造 token 即使能够进入到后台界面也无法使用相应的功能,因为这边后端是有作处理的,你只有真正请求到后端的 token 并将其作为请求头发送其他请求去使用其它功能,服务器才会放权,只是在本地伪造 token 没有进行相应的请求是获取不到权限的。


反问:

公司当前前端主要使用的技术栈是什么?前端实习生日常工作内容主要有哪些?

面试官 A:

当前我们公司主要用到的技术栈是 Vue2 ,实习生这边会配一个导师,不会的可以问,日常工作内容主要就是对公司现阶段的项目进行维护,像嘉为蓝鲸 DevOps ,具体要看导师布置的什么内容。


反问:

想了解一下公司在简历筛选的过程中比较看重实习生的哪些点?

面试官 A:

主要还是看代码量,看看这个人的项目是不是自己真正完成的,是不是真的懂得如何去开发,因为我们这种小民营企业不像互联网大厂那样,还是希望实习生进来能够尽快上手干活的;其实你的这份简历是我挑选的,我觉的还是不错的,像你这上面写的自己的 github 仓库,还有自己的社区账号,挺不错的。


反问:

面试的结果大概多久会通知呢?

面试官 A:

这个其实也不太清楚,这是 HR 负责的,估计也是 3 - 4 个工作日,你可以先去了解一下我们公司官网的产品,然后后面两天还会有其他几个实习生来面试嘛,我们会综合考虑一下选取合适的人选,周五前会给出答复(当时是周二去面试的,一开始其实还挺期待结果的,因为感觉面试官对我印象还不错,但是后面到了周五也没有通知结果,我也去问过那个男 HR ,但是那个 HR 每次都是已读不回,也宣告这次面试寄了)。


皓云原智

面完嘉为的第二天早上,就有一家叫 " 皓云原智 " 微厂的 HR 在某聘上找到我,直接就是要了一份简历,查看简历后问我下午有没有时间过去面谈,当时就想着反正那天也没课,去看看也无妨。那天还雨还下的很大,特地大老远地从海珠跑到天河,到了那边才发现这家公司就两个房间连在一起的,正门连个前台都没有。

进去后就是直接问里面的人,HR 只是问了我的名字然后就打印出一份笔试题让我现场先做一下(之前也没提前和我说过),全部都是简答题,我记得我是做了大概 35 分钟,有几道题是空着没写的,题目比较好记,大致的描述如下:


  1. 使用 css 实现以下布局:三栏布局,左右两栏宽度固定,中间一栏宽度自适应,三栏的高度都相同。
  2. 对 Vue 中 keep-alive 的理解,它涉及到的生命周期有几个?
  3. this.$nextTick 的原理及作用。
  4. Vue 中 data 中的对象添加一个属性会发生什么,如何解决?
  5. 对跨域的理解,跨域有哪些解决方案?
  6. 对闭包的理解,闭包有哪些解决方案?
  7. 什么是事件冒泡与事件捕获,二者有何区别。
  8. 封装一个函数实现数组扁平化(一维数组转二维数组)。
  9. 最后这道是场景题,具体就是后端请求返回的数据是一个数组,每个元素都是对象,然后要求是将返回的数组转换成树。

HR 让我直接在旁边答题,也没有单独一个答题的空间,旁边都是其他员工在交流和噼里啪啦地写代码,里面的 3、4、7、9 我是没有做出来的,其他的或多或少都有了解过,该完成的也都完成了,后面就直接交了。那个 HR 还特地问我那几道空着的是不会吗?(我会还空着吗),然后就是简单地看了一下过后就和我说我的笔试没有通过,今天的面试就先到这里吧,想从事前端工作还得加强一下学习。当时有点懵逼,她让带来的简历看都还没看一眼,我甚至都不知道她是 HR 还是面试官(卓动当时也有笔试题呀,虽然我答的不好,但是他们笔试和面试是分开考核的),后面后知后觉才知道自己是被当成小白帮她刷 KPI 了,我寻思笔试题也没有大篇幅地空,会的地方答得还是感觉还行,然后他们就单单只靠这张面试题就把我给 pass 掉了,一开始出去后还是有点生气的,但是后来想想还是算了,至少拿了份面试题,也知道自己哪些地方遗漏的,虽然是很敷衍的一次 KPI 面,但是后来想想:提前见识到社会的险恶也算是一种收获吧......

总结

经历过这一个月的面试,自身还是有所成长的,不管是面试题知识点的理解,还是心态方面等等,或多或少都会有所收获。这一个月的面试让我总结出这么几点:在面试的时候不要对某个公司抱有太大的期望,只要没有通知结果就好好准备好下一场的面试;其次就是在找公司的时候要提前和 HR 沟通好,彼此先有一个大概的了解,如果一上来就是要简历直接面试的,那大概率会像我一样去给人家刷 KPI;找工作是一个持久战,特别是现阶段的大环境,不要太急躁,每场面试都要好好做准备,结束后好好复盘。

其实到现在还没有找到工作一开始心理稍微有那么一点气馁,但是后来想了想,才一个月,慢慢来,不要着急,多面多总结是可以找到点门道的,这次端午先回趟家休息几天吧,端午过后再继续。