图森未来 前端实习 面经 + “渣男”的自我吐槽
先是自我吐槽,面经在下面
不知道有没有老哥认识我,lz是前几天发了一篇阿里六面面经的留学狗。
我昨天已经收到阿里的意向书了,但是还没有确认。而图森是4月初给我发offer的,当时直接确认了(由于是留学生,没有三方,所以是入职签协议),然后开心了好久,因为lz当时秋招全军覆没,图森是第一个愿意给我offer的公司,而且给的待遇也很好,(这个时候我还在鹅厂的备胎里,虽然现在也是),没有理由不接受。说真的,我从来没有哪一刻这么开心过,而且也在心里发誓非图森不去了。
当时是清明前,图森三面面完,hr直接来找我商量offer了。与此同时,阿里三面结束,说是接下来是p9大佬的总监面,不过还没约时间,所以稍微考虑了一下就觉得,反正继续面下去吧,就当是积攒经验了。
然后阿里就一路过了5面技术面 + hr面,直到收到意向书。。
其实在收到意向书前,lz就一直在动摇,心想如果真的被阿里录了,还要不要去图森了。不过当时也没有想太多,毕竟八字还没一撇的事情,结果真的一路走到底的时候,就迷茫了。按照道理,没有理由不去阿里吧?毕竟是实习,大厂的实习经历肯定能加分不少,而且对于国外的公司来说,阿里的知名度也很高,更何况还有可能拿阿里的return。但lz就是心里过不去,因为之前已经答应过人家了,人家都已经给我安排宿舍(图森实习包吃住)和办公桌了,infra的一迪大佬也似乎很看好我,给我报了很高的薪资(和头条差不多,甚至有可能比头条实习还多),几乎都已经是尘埃落定的事情,结果现在我又突然要反悔了?
这种感觉就像是偷情,你们知道吧。你有一个很爱你的老婆,你也很爱她,结果你偶然间爱上了另外一个女人,你知道这个女人有一些特别吸引人的特质比你老婆好,于是就在那纠结要不要和原来的老婆离婚(只是单纯举个例子,lz近乎母胎solo,根本就不可能也绝对不会是渣男)。
刚才和图森的hr聊了很久,分析了很多方面的东西。然后我现在还没有作出最终的决定,和hr说了还需要两天思考一下。不过有一点我可以确定的是,图森是一家很nice的公司,hr很负责,面试官们也很nice。可能我的感受和之前牛客上少数人的感受不一样吧。我觉得图森是绝对值得一去的。
前端实习面经
一面
具体的可能记不太清了,因为很久远了,但我记得问得很细。
整体上来说面了很久,大概80min,内容肯定不止这些内容,然而别的都忘了...
- 同源策略
- 是拦截客户端的请求,还是拦截服务器的响应?
- (很坚定地答了拦截响应)然后问,确定吗?(确定)
- 跨域
- 讲一下跨域的方法
- JSONP的缺点有什么(答了只能GET)
- 除此以外呢?(说同时需要客户端和服务器进行配置)
- CORS里,preflighted request除了自定义请求头和别的方法外(这两个是我自己说的),还有什么会触发preflighted request?(不知道,触及到了知识盲区)
- 原生AJAX的状态码(readyState)
- BFC
- 有哪些特性
- 怎么触发
- 浏览器缓存
- 强缓存 + 协商缓存
- 对应的状态码(200,304)
- 状态码301和302的区别
- new都干了些什么
- 用代码怎么表示?
- (var a = new B();)这个
B.call(a)
解释一下 - 如果用户有输入input呢?(改成apply)
- ES5继承
- 讲一下有哪些继承方法(原型、构造函数、组合、寄生组合)
- 原型链继承有什么缺点
- 写一个寄生组合继承
- (寄生组合继承)为什么要加这个立即执行函数?(出函数作用域自动销毁实例)
- 闭包
- cookie vs. session vs. localStorage vs. sessionStorage
- 怎么保证cookie安全(httpOnly,cookieHash)
- 函数节流和防抖
- 各自写一个
- 有没有办法结合起来
- (我写的节流函数记录了currentTime和prevTime)有没有办法不用变量来记录,而是和防抖函数一样用timer来写?
- 一段Promise,setTimeout等的码,问执行顺序
- 讲一下浏览器的事件轮询(讲了微任务和宏任务)
二面
面了80min,前面一个小时全是算法,后面是网络。
面试官不是负责前端的,所以一点前端的东西都没问。
大致是这样,后面网络的部分可能有些不记得了。
- 一个n的array,每次从arr[i]开始(0 <= i <= n - k - 1),框k个数,求这k个数的平均数
- 说了一个O(nk)的算法,然后主动说能优化成O(n)
- 改成中位数呢?
- 说是用quickselect,时间复杂度O(nk)
- 解释一下quickselect,那你用quickselect写一下
- 有没有一种O(nlogk)的算法?(想了很久说不知道)
- 有没有什么数据结构能达成类似的效果?(回答红黑树)
- 假如有一种是root左边的subtree和右边的subtree node数量差值为1或者0的一个平衡树(就是c++ stl里std::set用的平衡树),给你这么个树,那怎么做(那就简单了)
- 改成众数呢?如果次数一样按照字母排序?
- 用hashtable记录每个元素出现的次数,用vector来记录遍历时每次新出现的,出现次数最多的元素,push到末尾,然后再从末尾往前寻找,时间复杂度O(nklogk)
- 有没有什么数据结构能做到优化的(回答heap)
- 为什么可以用heap?(扯了一大堆)
然后算法方面终于过了。。开始问网络
- 讲一下TCP的三次握手
- 如果只有两次握手,会发生什么?(死锁)
- 如果只有一次握手呢?会产生什么攻击?(回答不知道,面试官说不知道也没事)
- 面试完问了同学才知道是ddos和syn flood
- 状态码202代表了什么?403?503?
- 讲一下TCP的拥塞控制
- 慢开始 + 拥塞避免 + 快重传/快恢复
最后问面试官算法方面怎么样,面试官说对于前端来说够了。。
三面
三面面试官是图森infra的负责人张一迪大佬。。
具体记不太清了,总之面完就问我能不能去图森,我说能。
然后大概一个小时以后,hr就来找我聊offer了。这个效率无敌了。
- 项目
- 你有接触过OO design方面的内容吗?(说知道设计模式)
- 讲一下你知道的设计模式
- 单例 + 简单/抽象工厂 + 适配器 + *** + 原型 + 策略 + 模板
- 观察者模式和发布订阅模式的区别
- 优化怎么做?
- 压缩、合并文件,CSS sprites
- 懒加载
- 减少reflow
- js和css的tree shaking
- (还有吗?把你知道的都说出来?)于是开始说细节
- js字符串使用join而不是+=,因为动态内存分配很expensive
- js使用局部变量代替全局变量,例如window
- css选择器的读取方式
- 内联首屏关键css + css异步加载
- js异步加载
- 减少使用css的昂贵属性例如gradient
- requestAnimationFrame
- 还有吗?(确实没有了,被榨干了...)
总结
总结就是问得巨细,和头条有的一拼(我头条一面上来就让我讲一下数据库索引,我当时就蒙了,因为完全不会,当然现在会了)。怼你基础,怼你算法,项目倒是问得比较少,本来还打算高谈阔论一番的。
话说有人想看鹅厂和头条前端的面经吗?有的话我明天写。
#实习##面经##图森未来##前端工程师#