背景
这学期想找一份暑假实习,3.12走内推投了阿里,现在三面已经过去一周多,趁着假期记录一下。
一面(3.16)
可能是因为投的比较早,才投完简历过了三天电话就来了,约了第二天上午的面试。一面总的来说应该是简历初探+基础。
面试官听声音很年轻,首先让我做个自我介绍,然后根据简历上写的技能,项目以及比赛问了些问题(感觉应该是在核实简历中的东西是否真实吧),比如我提到在实习中使用过 docker,他让我简单解释下 docker 的作用还有怎么在项目中使用的。
说实话前面这一段我很慌,因为根本没问多少前端方面的问题,而且也是第一次面大厂没有经验,甚至还问了我对于前端领域的看法这种宏观问题…我心里一直在想怎么和我在网上看到的别人的面试画风不一样。
不过在把简历上的东西基本问了一遍之后面试官说:下面我们来问一点技术方面的问题(哦原来我的面试才刚刚开始…)以下按照我的记忆记录一些问过的问题
说一下CSS盒模型
标准盒模型和IE怪异盒模型,然后提到了设置 box-sizing
可以转换及一些常见应用场景(这题过)
怎样让一个元素水平垂直居中
(老生常谈问题…我分行内元素和块级元素分别举出了几种方法,这题也过)
知道什么是同源策略吗
知道,同协议同主机同端口,是一个安全策略
那怎么解决跨域问题
CORS 和 JSONP,或者后端设置代理
知道 JSONP 原理吗
HTML 页面中再通过相应的标签从不同域名下加载静态资源,而被浏览器允许,基于此原理,可以通过动态创建script,再请求一个带参网址实现跨域通信
怎么检测浏览器中的内存泄漏
F12 打开开发者工具看一下内存使用情况?…(我有点没懂这道题的意思)
面试官又补充了一下:比如如果要让你给 chrome 写一个插件检测内存泄漏说一下你的思路
(这题我当时比较懵,忘了瞎答了些什么了,后来网上查了下好像可以用计数器的方法)
重绘和重排的区别
(过……)
知道浏览器事件机制吗
当然…捕获阶段,目标阶段,冒泡阶段(顺便还提到了一下IE8以下不支持 addEventListener
)
React 在哪个阶段发起
XhrHttpRequest
componentWillMount
知道为什么要在这个阶段发起吗
我当时思考了一下答的是保证数据的加载并正常渲染……
React 中的虚拟 DOM 为什么更快
直接操作 DOM 的性能消耗很大,所以现在的前端框架一个基本策略就是采用虚拟 DOM,React 会先生成一棵虚拟节点树,然后通过 diff 算法进行同级之间的比较,最后只重新渲染发生修改过的节点部分,然后 balabala 开始讲算法原理
最后我们来说一下那道经典题 从输入一个URL到页面加载完成发生了什么
(这道题的答案我已经倒背如流…)后来还吐槽了一下上学期计网期末考试也有这道题,面试官说是,这道题能延伸出很多方面的知识点。
然后面试官又问了一句,你觉得你和别人相比最大的优势是什么…
(我当时在想是不是面试官觉得我太菜了想最后再问点什么看能不能让他转意,然后我非常混乱的罗列了面试中没有问到的我的其他技术栈……后来才知道原来这个一般答的是性格上的优势)
然后面试官扔了个在线编程的地址给我做,5道题,前三道我感觉熟悉 JS 基本操作的都能过,后两道属于 leetcode easy 级别的简单算法题。
中途遇到一个小插曲,我做到一半网断了,再点那个网址 token 无效,然而我题还有一道没提交,也联系不上面试官,心里觉得一面是不是挂了…没想到过了一个小时面试官又给我打电话过来,我说刚才网络不好断掉了(这学期的路由器经常断),面试官说没事让我给他讲每道题的思路,我哔哔哔讲了一会儿他全程一直嗯嗯,他听完之后居然直接给我说一面过了。
小结:基础部分是真的很基础…感觉还是运气不错问的刚好都是我会的。
二面(3.23)
二面基本问的是项目和平时情况,没怎么问基础问题,而且全程气氛很轻松,我怀疑是一面的面试官给我的评价是基础不错二面就没问了…大概记录一些,第一个问题还是自我介绍。
我看见你简历上写在微软学生俱乐部担任过主席,能给我说一下你们这个俱乐部是干什么的吗
先引用了一下官方解释“微软和高校的学术合作联合项目”,然后说了一下我们平时有技术培训,举办校内活动,主要还是以技术交流为主= =
那你是怎么当上主席的呢
我懵逼,我很想说是上一届内定,但是突然反应过来这个问题应该是在变相的问你相对于别人的优势。吸取了一面的教训我就开始从技术能力和认真负责两个方面分(chui)析(bi)我为什么能当上主席
我看你还参加过信息安全竞赛拿过奖,能说一下当时是做的什么吗
我说这个不是作品赛,是 CTF 夺旗赛,然后说了一些信安比赛相关的东西
你知道前端方面有哪些安全问题吗
说了 XSS 和 CSRF
你做的这个微博词云生成是什么
通过用户微博ID进行爬取并根据词频生成一张图片,这个前端没什么技术难点,主要是后端,项目就在 GitHub 上
你刚才说到爬取微博,那你说一下写一个爬虫的基本思路
(分析页面结构,构造URL,发起请求,获取页面,,balabala讲了一堆)
你在爬取的时候有遇到什么困难吗
我说有反爬机制,然后说了一些常见的解决方法
你平常经常写爬虫吗
有数据需求的时候就写(然后举例说了下我之前在一个开源项目 RSSHub 中贡献了一点代码,就是给学校教务网做了个 RSS 源,实际上也是一个爬虫)
我看到你之前也有实习,当时具体是做什么
我说是大二的时候,主要是写小程序,但是由于开发组只有4个人所以实际上从前端到后台到测试全部都有写…(然后大概介绍了下里面用到的技术栈)
你们怎么进行多人合作的(因为我提到了 gitflow 工作流
我大概描述了下不同的 branch 有什么用还有怎么维护,什么时候该切出一个 feature 或者 bug 分支,什么时候合并,以及CI CD自动构建等等……
未来的学习规划
前端变化很快,所以我想一方面从 CS 基础上加强,另一方面框架,工具这些,就跟着社区走,多看看最近有什么新工具,近期的安排是研究 React 的源码(由于V16有一些变化我也不是很清楚底层原理所以只敢说“近期安排”,主要是怕他问)
你还有什么技能是简历上没写出来的吗
我说我还学过机器学习…在 coursera 上修过吴恩达的课程当时还写了博客记录= =然后还做过一点 Android 开发,不过不是用的 java 是用的 Google 最近一开源框架 flutter,寒假自学的,还在 Google play 上发布了一个 App…(说实话当时对这个问题有点懵逼,但是感觉必须说出点什么技能连机器学习都搬出来了…不过就算他问机器学习方面的基础东西我也还是比较有信心的,上学期期末考试前我可是通宵刷了西瓜书的前 60% 内容…
那你知道现在的 AI 自动生成前端代码吗,你对这个怎么看
(这题我会🙃)
你有什么问题要问我的吗
我想知道现在的前端岗一个厉害的本科生需要做到什么程度,企业比较看重什么?
最后面试官评价:其他方面还不错,就是表达能力有点问题…过~
小结:二面面试官非常友善!全程感觉像聊天一样,后面还给我说 STAR 原则…可能我的表达能力真的还有待加强。