这篇文章,算是我一朋友年后这一个多月以来的面试总结和思考。
有的朋友看了标题可能会喷:这不有手就行?我一毕业就进来了。
对他而言实属不易,只是想记录总结下,顺便鼓舞下跟他类似的小伙伴。
他18年毕业于河北科技师范学院,非计算机专业,这对于一些大厂的校招、社招要求来说,无论学校还是专业已经失去了资格。
他大学里拿满了3年国家励志奖学金,一等二等奖学金,优秀团干,优秀毕业生等荣誉。
他是大三暑假跟基友一起在外面学习了计算机,为了抢占先机,他没毕业就来杭州,也是收到3-4个offer
,
最后他选择了面朝科技。
从他刚进面朝写bug+加班改bug,到后面一个人负责多个项目游刃有余。他每月都会持续学习总结在CSDN
和掘金分享,说不进步是假的,有时候变化总是潜移默化慢慢积累的。
年后刚好他认识的朋友手里有内推名额,抱着试试看的心理(顺便帮他们完成kpi),就给了5家简历,经历了长达一个多月的面试流程,最终他幸运的拿到了3家offer
,下面针对收到offer
的3家公司,说说他面试流程和遇到的问题。
直接上图,自己思考说出来的才是自己的。
他说了下Vue
的几个核心源码,响应式,双向绑定,Watcher
,扩展到Vue3
进行对比
Vue3 对比 Vue2.x
这里其实就是Vue2
版本,响应式Object.defineProperty
方法的本身的一个缺陷,解决方案,官方也都有提供,$set $delete
或者这个对象数组替换
肯定是一个组件,原理是通过url
中的路径,跟router
中配置的path
进行匹配,渲染出对应的Component
核心方法是match
去匹配,后面还追问了个问题他忘了
可以看下之前发布vuex文章
能理解,简单说其实是vuex
的核心响应式和vue
是一样的,Vuex
有点类似Vue
的Module
层,可以展开说
总结:公司主要技术栈都是围绕vue的,PC H5 小程序,面试官也挺热情,HR是我前同事他哥,都知根知底,也没就问太多,直接一遍过。
项目这块平时怎么写就怎么说
常见场景也就3种,父->子 ,子->父 ,兄弟间,props、$emit、vuex、ref、eventBus、自己写个发布订阅。。。
同上 可以看下之前发布vuex文章
中间件都是用 applyMiddleware
包裹起来,再统一调用compose
进行组合加强 ,源码是通过复合函数实现依次执行
React.fiber
是在16v发布的,跟原来diff算法最大不同就是它的切片式更新策略,高优先级更新不需要漫长等待
详细差异可前往查看
分为5个优先级调度
立即执行 var ImmediatePriority = 1;
用户阻塞 var UserBlockingPriority = 2;
正常优先级 var NormalPriority = 3;
低优先级 var LowPriority = 4;
惰性优先级 var IdlePriority = 5;
实现原理是底层采用requestAnimationFrame
以及 模拟的requestIdleCallback
来实现每一帧执行和闲置期执行的调度问题
可参考之前文章:React hook 10种 Hook (详细介绍及使用)
一个简单的计时器,核心是使用ref
来存值,防止组件更新时被重置
style-loader、css-loader、less-loader
,可以通过MiniCssExtractPlugin
插件配置导出文件路径名称
代码的压缩、用hash name contenthash
命名打包文件,include
打包范围,雪碧图插件,空格 console
过滤,静态资源上传。。。
这个就根据自己公司情况说就行
最本质区别是运行环境的不同,一个基于App Webview JsCode
运行,一个基于浏览器运行
这个还没了解过的可以去了解下
之前整理的面试题里有
网络错误,请求失败,接口返回失败,服务器错误。。。
这个因人而异,有啥说就啥
常用的生命周期Constructor / Render / ComponentDidMount / ComponentDidUpdate / ComponentWillUnmount / ShouldComponentUpdate
17版本即将淘汰的:ComponentWillMount /ComponentWillReceiveProps / ComponentWillUpdate
淘汰原因就是React.fiber
第一阶段,会打断他们执行,造成重复执行。
官方说的是:这三个生命周期函数容易被误解并滥用,可能会对异步渲染造成潜在的问题
可以参考我之前的文章
组件创建一个Action
通过dispatch(action)
传递给Store
,Store
把action
传到Reducer
去匹配,找到需要替换的store,页面做出更新。
阮一峰的redux了解下
使用PureComponent、ShouldComponentUpdate 、 Hooks
手动优化渲染问题
在正常组合式继承的同时,通过父类原型创建一个原型副本,副本的构造函数为子类,将副本指向到子类的原型上。
详细了解可前往
简单说就:分析代码,转换代码,编译代码,输出代码
webpack
初始化参数后,找到入口文件,根据babel
匹配对应的模块解析成ast
语法树,通过loader
去做相关处理过滤,执行一些plugin
,最后根据出口文件进行输出。
bable的原理其实就是根据匹配的模块,解析成ast
,等待处理转换。
这个就因人而异了,自由发挥。
css,代码,缓存,打包,负载均衡,CDN
。。。
路由的按需加载,拆分打包,图片静态资源上传CDN
,压缩代码。。。
总结:流程果然如传说中一样,不过也可以理解,面的人太多确实要筛选筛选(有些问题忘了没记下来)。 第四轮两位leader 以及 第五轮HR 面时候确实是紧张的不行,他们气场太强了,还好幸运的过了并收到offer
前往之前写的Vue3 对比 vue2文章
只要满足封装、继承、多态都可以称为对象。
用let num = 1 举例,类型是基本数据类型number
,可是有 num.toString()
方法,说明是对象的属性
背后调用了集装箱 new Number()
最后反转。。。。巴拉巴拉等一系列的探讨
堆 栈 队列 数组 链表。。。可自行根据了解拓展
const arr1 = [1,3,4,5,-6,-1]
// 首先想到简单粗暴的
fn = (data) => {
let len = data.length
for(let i = 0; i<len ;i++){
for(let k = i+1;k<len;k++){
if(data[i]+data[k] === 0){
return [data[i],data[k]]
}
}
}
}
// 优化-原数组寻找差值方法
fn = (data) => {
let len = data.length
for(let i = 0;i<len;i++){
let short = ~data[i]+1
if(data.includes(short)){
return [data[i],short]
}
}
}
// 优化- new Set
fn = (data) => {
const new_data = new Set(data)
let len = data.length
for(let i = 0;i<len;i++){
if(new_data.has(-data[i])){
return [data[i],-data[i]]
}
}
}
console.log(fn(arr1),'合为0')
原因是上面的for
和includes
都是遍历的过程,时间复杂度都是O(n2)
,而使用Set
的数据格式可以复杂度降低一个维度变成O(n)
。why?
因为数组是通过索引进行排序,增删改查几乎都要查询或重排过程,而Set O(1)
。(面试官补充:为了保障键的唯一性,底层使用了类似hash
随机数来生成键)
这个就因人而异吧,有些东西自己用了才知道,还是自己实践来的总结最深刻。
hooks
虽然是无状态的函数式写法,但在执行的时候,每一个hooks都会被附着到一个Json tree
上,也就保证了唯一性和state
状态的保存问题,我们是无感知的。
这一块还是靠大家的实操和基础,去自己了解webpack一些插件用法和源码。
React hook + 完整Webpack配置详细翻译
这个其实就挺简单了
聊了常用的生命周期,和即将废除的3个will
生命周期,react.fiber
的原理和部分源码,和hooks
使用时候的注意点和优化点。如果你还不知道,赶紧总结总结吧。
规范化 模块化 组件化 自动化
详细姿势前往链接
介绍下自己公司的运营模式,公司的产品
业务流程,盈利手段,跟竞品公司比优势
在公司担任的职位,负责的内容
平时如何学习提升自己
说说关注的最近比较火的技术vue3 原子css react17
涂鸦是他晚上下班,7点去公司面的,一次面完了3轮到10点多了,最后主管面只能推迟到第二天视频面,流程还是挺快的。
前两轮面试官估计看他才两年多,也手下留情,没出太难的手写题目。
原谅他,好多问题睡了一觉第二天总结时候想不起来了。
整个梳理下来,我总结了以下考量的几个点:基础知识 、技术维度 、技术深度 、业务感知 、团队能力 、自律性(学习)。
那我们该怎么做呢?想要在前端的大潮中脱颖而出,平时就要有目标性的朝着这几个方向努力。目标、 规划、 行动 、坚持, 这也是我正在做的。
其实有些东西听着、说着挺简单的,道理大家都懂,但为什么成功都是少部分人,最重要的还是看个人,看自己想要怎样的生活,看自我约束力。
我这个朋友的面试经历,也是给很多非专科的同学打打气了,人人都是有机会的,只是机会来的时候能不能牢牢抓住了。
我们曾无数次后悔过,当时要努力****就好了,既然知道悔不当初了,为什么现在不放手一搏,让未来少一些遗憾,人有时候不能让自己过太舒服。