欢聚集团前端实习一面,二面+hr面
补更一下面经,2021年12月在BOSS上投了欢聚,后面接到面试邀约后便开始面试了。还挺坎坷的,期间被捞了一次。已经尽量回忆了,有一些可能隔太久没回忆起来的问题就不写出来了。
一面 12.22
这个部门是做一个给内部员工使用的平台,我在一面前几乎还没有开始准备,就直接面了。
面试官是同校的一个师兄,还挺巧,不过之前不认识哈哈。
先做个自我介绍
讲了自己在学校期间的工作室经历和做过的项目,不到一分钟就介绍完了。
后来跟工作室的一个在字节的师兄吃新年饭的时候,他分享了一下自我介绍的小妙招,教我怎么介绍项目,怎么讲学习,最好写个小稿子,听后觉得收益很多,在这之前面试的时候我都没注意到这点。
有咩有了解过ES6?讲讲有那些新特性?
面试官没有太问我项目,直接对着基础开始。因为我看过《深入浅出ES6》,所以基本都答的上来,主要引了在开发中主要用到的那些,promise, let , const, proxy,模块
其实还有很多内容没答
-
块级作用域
-
字符串和正则表达式
-
函数
-
扩展对象的功能性
-
解构:使数据访问更便捷
-
Symbol和Symbol属性
-
Set集合与Map集合
-
迭代器和生成器
-
JavaScript中的类
-
改进数组中的方法
-
Promise与异步编程
-
代理和反射
-
用模块封装代码
那你讲一下promise的使用?
我大概讲了一下有哪些方法,以及状态的转换,还有resolve和reject的使用,本以为自己掌握的还可以,面试官说:嗯,可以,那我们来做一下题吧
Promise.resolve("a").then("b").then(Promise.resolve("c")).then(console.log);第一眼,不妙,我没试过then里传入非函数参数的,当时我说的是c,场面一整个尬住了。
后来回去便细补了then处理那块。如果忽略针对某个状态的回调函数参数,或者提供非函数 (nonfunction) 参数,那么 then 方法将会丢失关于该状态的回调函数信息,但是并不会产生错误。
讲一下箭头函数和普通函数的区别?
讲了this的指向,还有函数参数,new.target和继承的区别
看你项目里有用到ts,有了解过泛型吗?
这又是一个警钟,我ts之前只是大概看了一边官方文档就直接上手项目了,一直没去细扒,西八。
面试官:来改个小bug
function getProperty<T, K>(obj: T, key: K) { return obj[key]; }不妙,是的,这么简单的题,我大概只讲到继承,但平时写项目基本只是写类型定义,很少写其他。
后面又去补了下TS的基础,去了解keyof和typeof方面的内容,其实就是需要保证k是属于T的就行,K extends keyof T。
继续问ts
那你讲讲type和interface的区别
好家伙,我基本只写过interface,还真没去细对比它们的区别,当时答说它们都差不多,我好菜,因为这两道题我反省了挺久的。回来后认真重学了一遍ts。
-
接口可以有多个合并声明,但对象类型文字的类型别名不能。
-
接口可以在extends或implements子句中命名,但对象类型字面量的类型别名不能。
-
与接口不同,类型别名还可以用于其他类型,如基本类型(原始值)、联合类型、元组。
-
两者都可以用来描述对象或函数的类型,但是语法不同,type使用=赋值
-
两者都可以扩展,但是语法又有所不同,interface使用extends,而type使用&符号
-
类可以以相同的方式实现接口或类型别名。但是请注意,类和接口被认为是静态的。因此,它们不能实现/扩展命名联合类型的类型别名。
-
type 能使用 in 关键字生成映射类型,但 interface 不行。
你项目开发应该知道请求响应的一些状态码吧,讲讲?
我大概讲了1到5头的触发场景,面试官没有细问下去
有用过react吗
我简历上没写这个,但面试官也问了。之前写软工课设的时候有尝试用react去写过一个小项目,但为了避坑,说不太熟悉。
然后面试官问了有使用哪些钩子,讲了导航,还有响应状态这些。
因为简历上的项目写的技术栈是vue,面试官还问了react和vue的区别。我根据开发的感受讲了一下函数式编程,单向数据流和状态管理的几个点。
提了个场景题,vue做到同步数据更新
我引了nextTick的使用,讲到源码的实现,我有看过vue3这部分的源码,说底层是基于promise.resolve().then(),但面试官说只有这个方式吗,我坚定的说是的。。。因为源码各种边界都是绕回这部分。当时觉得很疑惑,他说还有其他方式,我便反问了回去,他叫我自己回去查。。。
后来我真查了,确实有其他实现方式,不过都是vue2的内容了,估计面试官没看过vue3的实现。
Vue2.x在内部对异步队列尝试使用原生的Promise.then、MutationObserver和 setImmediate,如果执行环境不支持,则会采用 setTimeout(fn, 0) 代替。Vue3不再支持IE11,所以nextTick直接使用Promise。
反问了部门的一些情况还有本次面试的表现,面试官评价还挺好的
二面 12.29
二面的体验极差,面试官只问项目,之前没好好准备项目,答的很抽象,讲的难点也不好,面试官全程一直打断我回答。。。。
问我怎么给组员分配任务,提了一个场景,如果一个任务我定大概完成时间是七天,但一个人一个小时就写完了,问我怎么处理。我讲了各种处理方案,测试评估功能完成度,检验代码健壮性,与组员开进度会分析下一步需求排期,以及分析工时落差的点,全被他否定了。心里很憋屈,真的。
引到缓存优化那一块,他问我怎么在第二次发起请求前就知道该不该取缓存,怎么知道已经缓存了,我答了请求头,响应头的一些缓存控制字段,还有强缓存、协商缓存的策略,他还是说请求都还没发出去,怎么取到缓存信息。。。
现在还是很疑惑
硬聊到30分钟就结束了,不出意外,凉了。
本来以为缘分就这样终止了,因为二面还颓了一段时间,后来HR又打电话来联系说推到另一个部门,简历过筛了,问还有没有意向面试,便接着面了,推到一个大数据的部门
一面 1.12
这个面试官一口好不标准的普通话哈哈哈,很神奇的。
还是自我介绍加项目,项目那块提了百度地图,面试官也没细问。
后面便是考察各块基础了
讲一下浏览器从输入URL到页面渲染的过程都发生了什么
我之前看面经很多都有问这个,便有去学习了解,从解析URL,到浏览器缓存,DNS解析,OSI各层传递
,到服务端怎么解包,再到这边怎么构建dom树和cssdom树,还讲了重排重绘。
面试官:嗯嗯,你答的还挺全的。
同样又问了状态码,这面试官是每一块问一两个问题就去问其他块了。
让你实现两端固定,中间自适应有几种实现方式
答了是实现圣杯布局,讲了脱离文档流的几种方式进行辅助实现,也提了BFC,漏讲了flex布局,后来面试官补充上来了。
js也问了一些,都是比较简单像箭头函数这些的内容
你可以说一下vue3和vue2的区别吗
答了数据劫持的proxy和组合式API,讲了一下它们的优势。还有很多,像虚拟DOM的比对那些都没有讲,主要是结合开发讲的。
讲一下组件传值有哪些方式
讲了父子,祖孙,兄弟几种不同情况对应的方法,也是结合开发遇到的情况讲的。
场景题:让你封装一个组件,你会怎么考虑
大概讲了提取共同点还有差异点进行数据逻辑判定处理,尽量提高重用性和可拓展性
手写题:深拷贝
当时我写的是覆盖数组和对象的部分,像Symbol这些特殊情况没有覆盖全,后面讲了一下思路,其实这个我之前有看过一些博客,要写全的话代码量还挺多的,很多情况都要考虑进去。
反问环节都一样,问了部门技术栈,带新人方式还有主要业务,面试官评价本次表现给建议
二面 1.13
这个部门二面的面试官看起来好年轻。
上来自我介绍+项目
讲一下promise的方法
都答完整了
你项目中有用到TS,讲讲ts中类的继承
一开始没get到点,讲到es6的类去了,后来他又提了private和protected的区别,语言的共通思想都回答上来关键点
讲一下vue3的setup
答的差不多
你项目中有用到html5的拖拽API,可以讲讲用原生实现的思路吗
讲了监听鼠标的操作,还有位置的判断,不过顺序讲错了,跟面试官在这块扯了好久
开发有用哪些组件库吗
提了项目有用vant
简历里有写熟悉使用npm和git,讲讲npm的发包
尬住了,平时只对依赖包做一些操作,没自己写发过,便直接说明情况了,后面觉得发包管理多个项目通用模块的形式挺友好的,便跟师弟们分享了一下。
讲讲你们团队的git管理
我们现在开发的git模式都是我之前参考结合我们团队情况制定的,所以流程答的比较顺利,后面又跟面试官讨论了git-flow模型在小团队的应用会好一点。
场景题:线上项目出错了,怎么排查定位解决
结合团队开发模式讲了模块,以及分析出错的原因,找到原因后修复,然后重新走测试流程合并,讲了回滚版本。
hr电话面 1.27
沟通了一下之前拒掉offer的原因,和目前其他公司的面试进度,介绍了入职的一些安排,站个人角度,这个HR姐姐很温暖哈哈,点赞!