PK创意闹新春,我正在参加「春节创意投稿大赛」,详情请看:春节创意投稿大赛
前言
小厂混迹多年,在单位今年中高层人事变动之时(领导去和经理去创业去了),也出门整了了一把,面遍了北京的互联网大厂,虽然学艺不精,只拿到了两个offer,但是总算知道了我们这个年限的小厂前端,跟大厂的前端差距在哪? 同时也体会到了他们跟我们的差距在哪?
言归正传,汇报如下,既算是给后来人一个方向指引,也是给自己的学习来个总结!快过年了,算是给自己的2021画上一个圆满的句号了!
关于自己
本渣渣17年毕业,科班出身,末流本科,工资四千起步,起点奇低!现在的应届大佬们动不动都是一万起步了吧
从最开始的只会html、css的切图仔, 依靠着互联网红利摇身一变成为高级码农,虽然靠着五年三跳,拿着还算过得去的薪资,但是始终不知道自己处在一个什么位置,自身技术处在一个什么水平(因为又是后看很多大佬的什么25k,面经,20k面经,我感觉我一半都答不出来), 学习方向也是飘忽不定。
于是在大约两个月前,单位中高层变动之时,开始了面试学习法,一边写业务,一边面试纠正方向
首先说一下自己的面试学习思路!
- 1、先从小厂开始,练手,直到面试大概率都能进复试为止(本渣大概面试十家,前期前两个不咋地,后期基本每家都进复试)
- 2、注意每次面试之后需要问一下,面试官对你的评价,也跟面试官说明不是为了面试结果,单纯的为了知道自己的不足,并且纠正自己的学习方向
- 3、然后沉淀两周,疯狂补习小厂的遗漏知识点,开始大厂之路(本渣先后面了美团,京东,字节,58、小米、阿里、滴滴等。历时一个月左右)
- 4、对比大厂和小厂的问的一些知识点的区别,以及知识点的细化程度,总结归纳那些是需要自己长期刻意练习才能达到的,那些是需要短期背一背的八股、那些是每个公司都需要的必备技能。那些是面试官觉得的加分项。
大厂和小厂的对比
首先不可否认的是小厂也有些很厉害的人,比如我就遇见一个小厂的架构师,非常厉害,编译原理玩的贼溜。我俩聊得甚欢。
-
1、但是据我感觉(也可能是错觉),小厂的前端对于技术的细节,是欠缺的,通俗的说,也就是咬文嚼字,虽然我们平常在开发时候的表达也是比较粗狂的,比如,我们通常对于上下文的表达一般就会叫这个变量声明的地方。这种叫法虽然没有错,但是我们需要知道的是(面试本身就是一个不说人话的场合),所以这时候你对技术细节的把握程度以及表达,直接决定你在面试官内心的印象(毕竟面试除了自身的示例合格之外,给面试官的感觉也很重要!也就是feel)
-
2、小厂的人往往相信经验,大厂的人往往相信底子(编程能力、基础知识等等),你面试小厂时,你会发现,你的项目经验被问的比较多,编程题基本不考,剩下也就是一些api 基本的使用,以及一些浅显的框架原理(相当于八股文)、 而你去大厂面试大厂你就会发现,什么手写bind ,primese 、 柯理化转化、节流函数全来了,然后算法也是最重要的一环,哪怕你前面的基础知识一塌糊涂,只要你算法写出来了,一般就能过(字节就是这个套路)
-
3、要生死看淡,承认运气的重要性,因为我们都是普通人,不是神仙,我们要承认自己的有限性,承认自己的时间有限,承认自己的精力有限,总有我们不会的东西,或者也总有我们会了又忘了的东西。如果面试没过,那么就是打起精神,继续面,其实面试就像是考试,只不过比较好的是我们可以考好多次。
-
4、大厂看未来潜力,小厂看技术匹配度,我在面试的感受中,发现小厂一般会限制技术栈,来了就要上手干活。而大厂一般情况下都不会限制,而是看中潜力,如果你对技术热爱 ,爱瞎折腾,在社区中活跃,那么大厂非常喜欢你!
-
5、大厂是真卷,小厂还行一般都还行,但是也不乏卷的,每次面试我除了问评价之外,也基本问了工作时间,目前所有的大公司,也只有58给我说的是一般早10晚8,其他的都是995起步,小厂就就比较随意了,卷的厉害的还是比较少的
面试感受
1、面试和上班是两码事,上班的时候你需要知道的是这个东西怎么用,面试的时候你需要知道这个东西为什么这么用。
2、在行业内卷的今天,想要拿高薪算法真的非常重要。在出去面试时,力扣一百题要保证
3、源码相对来说没那么重要,理解原理即可, 在面试之前千万不要抱着vue、react 源码啃,觉得大厂就会问你源码,他们一般都问你原理,很少问源码细节
4、编程能力不管是大厂小厂都非常重要,一些简单的手写源码,比如手写bind 手写防抖,还是要了然于心的。
5、卸载简历上的项目一定要总结怎样表达,我面试的时候就吃了表达的亏,项目很牛逼,表达的一塌糊涂,在去描述你们的项目的时候,尽量从工程角度,和业务角度,技术角度,三个角度去描述,那么如果没有怎么办,编...(后面如果看客老爷们多,我就出一期视频说一下面试怎么编的,文字不还好表达)
大厂前端跟我们其实也有差距,不要神话他们
1、 在面试过程中,从最开始的面试大厂手心出汗,总感觉大厂的人就强,其实后来发现,他们也不是各方面都强,比如,在京东的时候关于vue 源码的问题,我跟面试官争论的时候,一度以为我错了,回来一查他错了。
2、有的面试官真的是为了面试而面试,比如我被问到过遇见这种的,
有500只老虎,1只羊,一片草原。老虎和羊,都可以吃草活着,对,这个题中的老虎可以吃草。老虎呢,也能吃羊,不允许很多只 老虎一起吃羊,只允许一只老虎吃一只羊,并且,吃完羊之后,这个老虎就会变成羊。那么问,老虎会不会吃羊?提示:老虎很聪 明,每只老虎都很聪明。 考动态规划,这谁能想到(字节考的)
直接放弃面试就可以,咱不配
3、有些大厂面试官,有点恃才傲物的感觉,一看小厂出来的,态度总是不那么和善(当然大多数都是挺和善的),与人为善也是他们需要向我们学习的(小厂的目前我面试的都还行,都特别客气),大家都是相互选择,咱没必要姿态放低
基础
只要是技术面试,不管是哪个厂面试,基础都是重中之重,是一定要非常强的,在这里我列举一下我准备以及被问到的一些问题,具体不说每一题,按照分类说方向
css 问题
css问的厂非常少,再次就列举一下比较重要的吧(这个我没准备,这两个是被问到的)
- 1、# css两边对齐 从上到下依次排序(由于最后一排会有问题,有两种解法,grid 以及flex +js )
-
- 2、移动端适配问题
浏览器相关
- 1、v8的垃圾回收
- 2、宏任务微任务(这个基本必考,有的还会问和node端的区别 [被问到])
- 3、网络协议相关(浏览器输入url 之后的一系列过程[被问到])
- 4、devtools相关(怎样检测性能,怎样检测调用堆栈[被问到])
- 5、浏览器缓存(强缓存协商缓存)
- 6、同源策略
- 7、浏览器分层和合成机制(# 为什么css动画比JavaScript高效)
- 8、浏览器中的解释器和编译器
- 9、浏览器中的线程和进程
- 10、重绘重排中怎么做性能优化[被问到]
Js相关
- 1、理解闭包吗?
- 2、JavaScript的作用域链理解吗?原型链呢?[被问到]
- 3、es6有哪些新特性?
- 4、浮点数计算误差问题(0.1+0.2为什么不等于0.3)
- 5、async/await和promise 的区别,解决什么问题[被问到]
- 6、this的一些理解(比如bind函数和箭头函数共用,this 的指向)[被问到]
- 7、 js的不同规范(ES6模块与CommonJS模块有什么区别?)[被问到]
- 8、 js类型判断(null与undefined的区别是什么?为什么类型不一样)[被问到]
框架篇
由于是vue、react、angular 都写过,所以都准备了一些,但是由于vue写的最多,被问到的问题,基本都是vue 的问题(这一块所有的厂都是足够的尊重的,基本只问你最擅长的技术栈)
vue
- 1、如何理解MVVM[被问到]
- 2、响应式的核心API是什么?[被问到]
- 3、为何不能监听数组变化
- 4、说说虚拟dom,你听过diff算法么(一般会对比vue2和vue3的以及react的)[被问到]
- 5、vue模板最后被编译成什么?render函数最后的产物是什么
- 6、理解vue前端路由的原理吗?[被问到]
- 7、 看过源码吗?(后续会问一下源码中的细节,建议还是要大致看下源码,或者重点看下源码中公认实现比较好的地方)[被问到]
- 8、 自己实现v-model[被问到]
- 9、 vue3的一些新特性
react
react 就比较尴尬了,都没有问,就给准备的奉上了
- 1、react父子组件通讯
- 2、hooks 的闭包的坑
- 3、setState为何要使用不可变值,setState是同步还是异步
- 4、react单向数据流
- 5、redux中间件相关
- 6、高阶组件
- 7、 合成事件
- 8、 fiber如何优化的性能
- 9、 jsx 的本质,和vue 的模板的一些区别
- 10、 react相关的性能优化
angular
angular基本很多人也不会,所以面试如果不是特殊岗位,基本没人会问,即使问也都是什么依赖注入,父子组件传值,等一些基本问题
webpack
webpack 自不用多说,基本必考
- 1、Webpack 和 vite 有什么区别
- 2、module chunk bundle 的区别
- 3、webpack怎么去做性能优化?如何提高webpack的构建速度?[被问过]
- 4、webpack、rollup、parcel优劣?[被问过]
- 5、webpack的构建流程是什么?[被问过]
- 6、webpack怎么配置单页应用?怎么配置多页应用?vue和react应用呢?
- 7、 简述跟webpack相关的工具链[被问过]
- 8、 lorder 原理,plugin原理,有没有写过[被问过]
- 9、 webpack 热更新原理
- 10、 babel听说过吗?
ts
ts问题我也没有准备,问的也比较少,大多数都是提一嘴,问你项目中是否用到,可能很多人都给他当做个工具吧,并没有那么重视(本渣觉得如果着急面试可以不用准备,但是还是一定要学的他的类型推导实在太香了,而且体操用法,很有意思)。
node
node 问题没有准备,但是从我面试感觉来看,问到的很少,如果没有特殊岗位要求,基本应该没人会问
网络协议
网络协议问题,小厂没有人问,都是大厂问的,梳理如下:
- 1、简述下七层网络协议[被问过]
- 2、http各个版本的区别
- 3、https为啥是安全的(其实就是让你给https的的流程说一下)[被问过]
- 4、get和post 区别[被问过]
- 5、http状态码,302和301区别?
- 6、HTTP的部首字段有哪些?
- 7、tcp和udp区别
- 8、为什么是三次握手四次挥手?[被问过]、
网络安全
这个在面试前准备了,但是并没有被问到,其实就是去背一些csrf,xss 以及中间人攻击的八股不在赘述,很多人其实是没有深究的,我在准备过程中,其实发现了很多前辈们的智慧(这就是所谓的惊喜),比如token 的出现就是为了解决csrf攻击的问题,这段前端鉴权的发展史研究起来其实是很有意思的,只是在功利社会,少有人有兴趣静下心来研究。
编程题目
编程题部分没有特意准备,这个东西不是通过背八股文就能写出来的,我是靠着这几年有意无意的刷了三百道力扣,来应付面试的,这里值列举被考过的题目,在开始之前先给大家分享一些血泪史
编程踩坑
- 1、虽然断断续续刷了很多题目,但是人的记忆力有限,过一段时间就忘了,以至于很多套路题,明明刷到过却不会写(每个题至少要刷五遍,来保证手感)
- 2、刷题的时候如果不会,跟着题解照葫芦画瓢虽然写出来,但是实现细节没有细究,以至于在现场coding的时候虽然思路正确,但是却得不出正确答案,这样面试官的打分会大大降低(这块我吃过大亏,每个题目一定要在意细节)
- 3、推荐按类型刷题,这样就能举一反三,掌握套路(面向面经刷题,导致同类型的题,换了个形式就凉了)
面试题目
首先编程题分为两种:1、编程基础2、算法
编程基础
这一块其实就是历年不变的老一套,比如手写bind、call、apply,手写promise ,手写防抖节流,函数柯理化,深拷贝或者实现lodash中的某一个简单的方法,实现new ,截取地址栏参数为键值对形式等等。基本也就这些
他的难点就是很多实现比较巧妙,需要你去彻底理解,靠着你正常的思维无法想出来,不过好在数量不多,历年就这些
算法题
这一块就麻烦了,力扣上好几千道,范围广,难度大,需要去赌,我们也不知道面试官会考啥,只能靠着去押题,和面经来提高做出来的概率,当然最重要的还是持之以恒的刷题,并且每个题刷五遍以上,没什么捷径可言。本渣的算法也拉夸的不行,就不在班门弄斧了,在此列举一下我被问到的问题,供后续小伙伴参考
- 1、LRU 缓存(美团)
- 2、 有效的括号(美团)
- 3、 二叉树的最近公共祖先(美团)
- 4、重复的子字符串(美团)
- 5、数组中的第K个最大元素(美团)
- 6、合并两个有序数组(字节)
- 7、环形链表(字节)
- 8、两数之和(字节)
- 9、实现版本号比较(字节)
- 10、chainAsync – 链式调用异步函数(字节)
- 11、 螺旋矩阵(字节)
- 12、全排列(京东)
- 13、 爬楼梯(京东)
- 14、实现一个栈以及他的pop,push,等方法(京东)
- 15、回文数(京东)
- 16、无重复字符的最长子串(小米)
- 17、Tree和array之间相互转换(58)
- 17、random实现返回一个长度为num 元素值在[min, max]区间的整数数组(滴滴)
- 17、两个数组的交集(滴滴)
记得住的编程题就这么多,其他的就是我说的基础编程的范畴以及没记住的。
开放问题
在我的面试的的经验里面,基础问题和算法问题,是决定他要不要你的,但是,开放问题是决定你的高度的(也就是他给你定级,给你多少钱)
举个例子:你写了一个组件库,在和面试官沟通的时候,是给一个人用,还是给十个人用,还是给一百个人用,他对你的定级是不一样的, 而写这些组件库的人他的基础和编程不一定好。但是,如果你能回答出来其中的一些实现细节,性能优化是怎么做的,怎么解决业务问题的,提高了多少效率,那你大概率就能拿到高薪,这就是开放问题回答的好给你带来的好处。
其实很多人他或多或少都搞过比较有挑战的项目,但是,每次到需要去表达的时候,总是吞吞吐吐,导致面试虽然通过了,但是拿不到高薪和高定级。因为他不知道表达的高级也是非常重要的技能之一,这能加深面试官对你的好印象,但是前提是你真的要有真才实学
此时,大家都明白了,我们想要那高薪,那么就要表达的高级。其实说起来也是很简单的,主要思想就是怎么不说人话怎么来,给阿里味儿(赋能,闭环...)都用上(现在知道去阿里的薪资为啥都不低了吧),接下来,就需要发现项目中的一些难点,然后刻意练习即可(自己对着墙说几遍),达到孰能生巧的地步。
打个比方:你是做web端IM的,那通俗的说,其实就是利用ws来处消息内容的一个聊天系统,本身并没有啥复杂度,但是为了让你的的项目有些有肉,那你就要往高端了说(注意:你真的要有真才实学,知道这些东西的底层原理)
- 1、虚拟滚动(其实就是当前聊天框每次只展示几条内容,其他的动态加载)
- 2、合并ack,合并渲染,消息确认(给专有名字用缩写代替)
- 3、心跳检测(其实就是防止断线)
- 4、seqId跟msgId用来高消息吞吐的排序(其实就是给消息做个排序)
说下本渣被问到的几个问题:
- 1、你最近在学习什么?
- 2、你觉得做过最有挑战的事情是什么?
- 3、你在项目中遇到了那些挑战?
- 4、你给项目中做了那些性能优化?
- 5、你是怎么解决一个具体的春节活动问题?
- 6、如果你的项目需要为其他项目赋能,你会怎么做?
- 7、你在工作中有没有做过过什么有成就感的事情?
- 8、说说在架构设计中的一些心得
- 9、自己的优势是什么?
以上是在面试中被问到的问题,其中有两三个在面试之前有所准备,剩下的回答的也是一塌糊涂,还是需要大家有真才实学,对自己所做的项目有一定的思考,但是怎么高端怎么来这个道理是不会变的,希望同志们在有了一定思考之后,要去美化自己的表达,从而拿到高薪,这方面本渣渣也是短板,以至于才两个offer(好几个都是挂在三面),就不在班门弄斧了,问题写下大家可自行准备,只需遵循两个逻辑即可:
- 1、高端之路
- 2、真才实学
最后
由于学历劣势,资质平庸,当前这次放弃年终的跳槽从职业发展的角度来说乃是下下策,也为鲁莽付出了代价,虽然没有拿到当时心仪的offer,但是内卷姿态却少了几分,焉知不是一个好的选择呢,从目前的的工作氛围来说,可以得出的结论:是福不是祸。
但是,话又说回来,职业生涯很长,具体的得失又怎么算的明白呢? 做事不论对与错,唯心而已,是心里面想做的就行!
招人了
58三线互联网单位(俗称养老厂),坐标北京,基础设施齐全,工作氛围到位,领导到位,内卷姿态平缓(比起其他厂小很多,不过还是有点卷)招聘组(核心业务),薪资大厂待遇,15薪,m1mac,有兴趣请联系本渣:yangyongsen1994