2018 年人生中最重要的事情之一就是找工作啦, 从 6 月份初断断续续开始复习, 7 月内推开始, 9 月大批量的笔试, 面试, 9 月初拿到了第一个 offer,10 月初拿到了自己比较满意的 offer, 也是历经了快 4 个月.
简历投的主要是杭州, 上海的一些大厂们, 分享一些面试的问题吧, 考到烂的如输入 url 发生了什么, 闭包是什么, 虚拟 dom 等, vue 双向绑定一类就不放出来了.
不过这些面试题虽然常见, 但是还是要用心掌握, 因为考到的频率确实蛮高的. 由于当时并没怎么接触 Node.JS 和 react , 所以这方面的题目基本没有. 我是个懒人, 所以仅有一些提供了一下思路~~
JS 相关
Ajax 和 axios 的不同(多益)
vue 中在哪个阶段进行异步请求比较合适(阿里, 百度)
微信小程序底层实现的机制(jsbridge)(阿里)
vue 中 vuex 的 mapSetter 是怎么实现的(bilibili)
什么是尾递归(bilibili)
vue 项目中使用到的优化手段(网易)
commonjs 和 ES6 中的模块化有什么区别(网易)
回答见阮一峰的博客
webstoreage 如果存储满了会怎么样(报错)(网易)
application cache 是怎么设置的(网易)
如何获取一个 div 下所有的文本节点(网易)
兼容浏览器的一些方法(网易)
为什么不同浏览器渲染出来的东西会有差别, 本质是什么(网易)
vue 中写一个组件要注意哪些(58)
JS 如何实现多线程, webworker 怎么通信(美团)
vue 的异步更新考察:(美团)
vue 中以下代码会出发几次 update 生命周期(1 次)
- this.a=1
- // 代码
- this.a=3;
vue 中以下代码会出发几次 update 生命周期(2 次)
- setTimout(()=>{
- this.a=1
- },0)
- // 代码
- this.a=3;
那些红宝书里都有的知识点
红宝书(JavaScript 高级程序设计一定要好好看呀~~~ )
BOM 有哪些东西(网易)
requestAnimationFrame 和 setTimeout 写动画的区别 (网易)
如果得到今天是星期几(getDay()(网易)
[我回答出来后, 网易面试官说你怎么记得那么清楚 - -|||]
CSS 相关
如何实现小于 12px 的字体效果(大疆)
CSS 匹配的算法(从右向左)(大疆)
animation 和 transition 的区别(阿里)
一个 div 从一个地方挪到另一个地方的动画如何实现, 如果还要求鼠标放上去时, 该 div 还要旋转怎么写(美团)
浮动和清除浮动考察(58): 如何 5 个 div, 其中第三个变成浮动的, 会怎么样 怎么让他变回去 -- 清除浮动
如何实现一个进度条(新浪)
手写代码
数组去重怎么做, 如果是数组是这样的[,[2],[3]], 该如何去重(bilibili)
写一个函数 实现 test(a)(b), 如果 b>0 返回 a+b, 如果 b<0, 返回 a-b(柯里化考察)(bilibili)
- function test(){
- var a= [...arguments][0];
- return function(){
- var b = [...arguments][0];
- if(b>0){
- return a+b;
- }else{
- return a-b
- }
- }
- }
实现链式调用(百度)
- coder.sleep().print1().print2()
- class Coder{
- sleep(){
- console.log("sleep");
- return this;// 链式调用的关键
- }
- print1(){
- console.log(1);
- return this;// 链式调用的关键
- }
- print2(){
- console.log(2);
- return this;// 链式调用的关键
- }
- }
如果 sleep 函数要等待 3 秒钟再打印然后在执行之后的操作呢?
- class Coder {
- sleep(){
- var date = new Date();
- while((new Date() - date) <3000) {
- // 通过这里进行阻塞 sleep
- }
- console.log("sleep");
- return this;// 链式调用的关键
- }
- print1(){
- console.log(1);
- return this;// 链式调用的关键
- }
- print2(){
- console.log(2);
- return this;// 链式调用的关键
- }
- }
- var b = new Coder()
- b.sleep().print1().print2()
以下代码会输出什么(百度)
- var date = new Date();
- setTimeout(()=>{
- console.log(new Date()-date)
- },1000)
- while((new Date()-date)<3000){
- }
- // 输出 3000 + 的值
事件代理考察:(百度) 如果有一个页面, 有许多 a 标签, 在上面写点击事件的事件代理怎么写. 如果 a 标签里面也有很多子节点, 点击了这些子节点也要实现上面效果?
思路: 循环判断 e.target.parentNode.tagName==="a"
跳台阶算法(美团)
火车运煤算法(美团)
[1,[2],[3,[4]]]这种无限嵌套数组 变成 [1,2,3,4] 怎么做(58)
数据库
项目中为什么使用 MongoDB, 数据库的三大范式(百度)
MongoDB 的 aggregate 介绍一下(阿里)
MySQL 的优化手段(美团)
MySQL 索引的原理(问的较多)
计算机网络
常见问题
get 和 post 的区别
状态码
http 和 https 的区别
其他
dns 请求过程
dns 是基于什么协议(美团)
TCP 和 UDP 的使用场景和区别(美团)
url 除了 http https 之类的协议, 可以有自己自定义么.(58) 思路: 可以, 例如微信小程序底层 JS Bridge 原理就是利用 url scheme 拦截等
其他
操作系统的功能(百度)
页面置换的算法有哪些(bilibili)
前端安全(xss,csrf)(几乎每个大厂都问到了)
AES 和 MD5 的区别
Git 的 stage, 三个区是什么(工作区, 暂存区, 版本库)(阿里) 如果要写实现一个抢红包页面, 如何防止有人恶意一直玩抢红包或者发包模拟抢红包请求(网易)
个人思路:
1, 判断一段时间内同一个 IP 的请求数量
2, 设置验证码
3, 看页面访问顺序, 一般有一个入口页面再是抢红包页面. 恶意发包可能是直接的页面请求
4, 达到一定次数或者红包额度, 直接丢包
JS 和 c 语言编译的差别
有一个用户登录的表单, 你会如何做使达到安全.(美团)
etag 的原理(文件名时间 hash)(美团)
一个微博 API, 提供 top10 的数据, 但是每次去请求并不一定更新, 所以每次这样请求返回数据会浪费流量, 希望有一个 API 可以返回是否更新, 要怎么操作.(美团) 思路: 将数据进行 hash, 每次判断一下和上一次的 hash 值.
jQuery 和 vue 的区别(美团)
一些面试心得
熟悉简历上写的任何东西
回答问题时引到自己熟悉的东西上 比如问你 ES6 掌握情况, 挑自己熟悉的讲 比如前端优化回答时, 挑自己理解原理的讲, 比如避免重排重绘, 之后一般还会继续问哪些会引起重绘重排
对方提不知道如何回答的问题时
1, 引到自己会的: 比如问 PHP 的继承, 讲将 JS 的继承, 问 MySQL 的优化手段时, 讲 MongoDB 的优化手段
2, 讲大概思路
3, 请面试官给提示
4, 不会就跳过, 不要耽搁太多
展示自己的博客
熟悉的问题可以回答的深入一些
手写代码时考虑封装, 数据类型判断等
面试后总结 面试时有些问题觉得面试官问的很奇怪, 要好好想想人家问问题背后的动机, 想考察的知识点.
祝大家都能拿到心仪的 offer, 哟呼~~
来源: https://juejin.im/post/5c259815e51d455d382eca6c