前言
本人二本大学科班出身,首次面试美团一面凉了。先分享一下美团的凉经,希望大家做好避坑准备:
一面:
1.http和https的区别,非对称加密和对称加密的原理,还有http2和http1的区别(多路复用、数据通过字节流传输)
2.tcp和udp的区别,TCP如何实现数据的可靠性传输(滑动窗口和拥塞控制)
3.说明一下tcp的三次握手和三次挥手,为什们一定要这样子
5.循环对象的方法有哪几种以及它们的区别(Object.keys() 、for of 、for in)
4.如何实现对象的深拷贝,考虑对象嵌套问题代码实现对象深拷贝(手撕失败,)
5.检测数据类型的方法有哪几种(typeOf 、instanceof、constructor、Object.prototype.toString.apply())
6.说明一下防抖和节流,代码实现他们
7.了解过css动画吗?说一下transition和animation的区别以及transition的触发条件
8.html文件中script标签引入标签的defer属性和async属性以及它们与在head标签内引入的区别
9.给你一个数组根据时间按顺序每秒钟输出一个元素以及其下标
10.对css3的剪切属性有了解吗
11.html页面中为何会出现浮动以及如何清楚浮动(该开始理解成了float浮动,后面知道是BFC)
12.如何实现垂直居中(尽量知道的垂直居中方法都说出来)
13.说明一下nodejs中的IO控制(表示只对http模块和fs模块熟悉)
14.说一下expres和koa的区别
因为这次面试前并没有做什么准备,在boss上联系了通知我面试我就去了,果不其然,凉了....
有了这次的教训,我开始猛刷面试题,准备了一个多月的样子,没日没夜的刷题,头发都掉了一大把,觉得差不多了再去投的字节跳动。下面是字节跳动的面经:
一面:
1.首先自我介绍,然后简单聊下项目。
2.http服务,接收方如何判断数据接受完毕?
3.浏览器输入 www.baidu.com的过程?
4.分别说说ARP、ICMP、TCP协议的理解?
5.路由器属哪一层?IP包经过路由器后发生了什么变化?
6.介绍select、epoll的区别?
7.介绍下泛洪?
8.介绍下C++三种智能指针,三种的区别分别是什么?
9.c语言中static的用法?
10.tcp连接、断开的详细过程?每个过程的标志都有什么?
11.平时如何调试程序?断点的原理是什么?
手撕代码:
1.链表对折,要求O(1)空间,例如:
将1->2->3->4....->n-1->n->null 对折成 1->n->2->n-1->3->n-2....->null
提问:有什么想问的?
面试感受:共四十多分钟,一面主要偏基础知识,网络考察的比较多。
二面:
1.直接介绍实验室的项目(研究生是电机控制)。
2.写一个电机控制相关算法的函数,然后详细讲解,为什么用这个?有没有其他的算法?
3.结构体的成员调用struct1->num的底层实现?宏定义MAX(a,b)的实现?
4.详细说下http请求的方法有哪些?讲下http的报文结构?
5.说几个http首部的字段?管线化是什么?怎么保证服务器按顺序返回?
6.说下tcp的特点有哪些?详细讲tcp的一些机制?为什么需要这些机制?详细讲tcp报文首部?
手撕代码:
1.已知结构体类型和指向某个成员的指针,求结构体起始地址,例如:
struct A {int a; int b;...;int c;...};指向结构体变量a中c成员的指针是int *p。求a的地址?
2.逆时针打印矩阵,例如:
1 2 3
4 5 6 => 147896325
7 8 9
提问:有什么想问的?
面试感受:差不多一个小时,由于晚上刚下班就回来面试,状态不好。二面面试官喜欢考察对问题本质的理解,很喜欢问为什么是这样,面完后长吸了口气。
三面:
1.自我介绍?介绍实习的情况?实习的项目?学到的技术?平时如何学习?
2.实验室的项目?
手撕代码:
1.已知f()函数以概率p输出1,以概率1-P输出0。然后实现g()等概率的输出1和0:
int g()
{
}
进一步通过刚实现的g(),实现等概率输出0-n的函数int h(int n):
int h(int n)
{
}
2.实现Linux命令tail -f filename的函数?(需要检查参数和文件类型是否合格)
int main(int argc, char* argv[])
{
}
提问:有什么想问的?
面试感受: 共一个小时,第一个算法题之前在某篇面经见过,但并没有看怎么实现的(面试时心情复杂),面试官提示后还是写出来了。不会tail的实现,心情十分复杂。自己经常看完面经,会侥幸认为我应该不会遇到这种问题。。。
三面面完后,过几天收到通知,说原本的三面面试官有事情,让其他面试官代替面我,现在真正的三面面试官想要重新面试。我当时就感觉,心累!不过既然三面面的不好,这又何尝不是一次机会呢!
第二次三面:
1.都是tcp、http和select、epoll相关的。
2.简历上的项目+实习的学习情况?
手撕代码:
1.二叉树的右视角,例如:
8
5 15 => 8,15,6,7
3 6
7
提问:后面应该没有面试的,有想了解的吗?
面试感受:二十多分钟,这一面感觉很nice,应该稳了吧。。。
能记住的一些问题就这些了。周五面完,第二周周三收到的意向书。
为了准备这次面试刷了很多面试题,并且做了一个整理,分了HTML、css、JavaScript、React、Vue、浏览器、服务端与网络、算法等等.....
HTML
- 浏览器页面有哪三层构成,分别是什么,作用是什么?
- HTML5的优点与缺点?
- Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?
- HTML5有哪些新特性、移除了哪些元素?
- 你做的网页在哪些浏览器测试过,这些浏览器的内核分别是什么?
- 每个HTML文件里开头都有个很重要的东西,Doctype,知道这是干什么的吗?
- 说说你对HTML5认识?(是什么,为什么)
- 对WEB标准以及W3C的理解与认识?
- HTML全局属性(global attribute)有哪些?
- 说说超链接target属性的取值和作用?
- iframe有那些缺点?
- Label的作用是什么,是怎么用的?
- 如何实现浏览器内多个标签页之间的通信?
- 谈谈你对canvas的理解?
- ......
CSS
- 解释一下CSS的盒子模型?
- 请你说说CSS选择器的类型有哪些,并举几个例子说明其用法?
- 请你说说CSS有什么特殊性?(优先级、计算特殊值)
- 常见浏览器兼容性问题与解决方案?
- 列出display的值并说明他们的作用?
- 如何居中div, 如何居中一个浮动元素?
- 请列举几种清除浮动的方法(至少两种)?
- block,inline和inlinke-block细节对比?
- 什么叫优雅降级和渐进增强?
- 说说浮动元素会引起的问题和你的解决办法
- 你有哪些性能优化的方法?
- 为什么要初始化CSS样式?
- CSS样式表根据所在网页的位置,可分为哪几种样式表?
- 请你说说em与rem的区别?
- ......
JavaScript
- js的各种位置,比如clientHeight,scrollHeight,offsetHeight ,以及scrollTop, offsetTop,clientTop的区别?
- js拖拽功能的实现
- 异步加载js的方法
- js的防抖与节流
- 说一下闭包
- 说说你对作用域链的理解
- JavaScript原型,原型链 ? 有什么特点?
- 请解释什么是事件委托/事件代理
- Javascript如何实现继承?
- 函数执行改变this
- babel编译原理
- 函数柯里化
- 说一下类的创建和继承
- 说说前端中的事件流
- 如何让事件先冒泡后捕获
- 说一下图片的懒加载和预加载
- js的new操作符做了哪些事情
- 改变函数内部this指针的指向函数(bind,apply,call的区别)
- Ajax解决浏览器缓存问题
- ......
由于篇幅有限,只能分享部分面试题,完整版面试题及答案可以【点击我】阅读下载哦~无偿分享给大家
Vue
- Vue中 key 值的作用
- Vue 组件中 data 为什么必须是函数?
- vuex的State特性是?
- 介绍一下Vue的响应式系统
- computed与watch的区别
- 介绍一下Vue的生命周期
- 为什么组件的data必须是一个函数
- 组件之间是怎么通信的
- Vue.cli中怎样使用自定义的组件?有遇到过哪些问题吗?
- Vue如何实现按需加载配合webpack设置
- 简单描述每个周期具体适合哪些场景
- scss是什么?在Vue.cli中的安装使用步骤是?有哪几大特性?
- 聊聊你对Vue.js的template编译的理解?
- Vue 路由跳转的几种方式
- Vue如何实现按需加载配合webpack设置?
- Vue的路由实现:hash模式和history模式
- Vue与Angular以及React的区别?
- Vue路由的钩子函数
- 什么是Vue的计算属性?
- ......
React
- 介绍一下react
- React单项数据流
- react生命周期函数和react组件的生命周期
- react和Vue的原理,区别,亮点,作用
- reactJs的组件交流
- 有了解过react的虚拟DOM吗,虚拟DOM是怎么对比的呢
- 项目里用到了react,为什么要选择react,react有哪些好处
- 怎么获取真正的dom
- 选择react的原因
- react的生命周期函数
- setState之后的流程
- react高阶组件知道吗?
- React的jsx,函数式编程
- react的组件是通过什么去判断是否刷新的
- 如何配置React-Router
- 路由的动态加载模块
- Redux中间件是什么东西,接受几个参数
- redux请求中间件如何处理并发
浏览器
- 跨标签页通讯
- 浏览器架构
- 浏览器下事件循环(Event Loop)
- 从输入 url 到展示的过程
- 重绘与回流
- 存储
- Web Worker
- V8垃圾回收机制
- 内存泄露
- reflow(回流)和repaint(重绘)优化
- 如何减少重绘和回流?
- 一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
- localStorage 与 sessionStorage 与cookie的区别总结
- http多路复用
- cookie可设置哪些属性?
- 正向代理和反向代理
- ......
服务端与网络
- HTTPS和HTTP的区别
- HTTP版本
- 从输入URL到页面呈现发生了什么?
- HTTP缓存
- 缓存位置
- 强缓存
- 协商缓存
- 缓存的资源在那里
- 用户行为对浏览器缓存的影响
- 缓存的优点
- 不同刷新的请求执行过程
- 为什么会有跨域问题
- 如何解决跨域
- 访问控制场景(简单请求与非简单请求)
- withCredentials 属性
- 服务器如何设置CORS
- URL类中的常用方法
算法与数据结构
- 二叉树层序遍历
- B树的特性,B树和B+树的区别
- 尾递归
- 如何写一个大数阶乘?递归的方法会出现什么问题?
- 把多维数组变成一维数组的方法
- 说一下冒泡快排的原理
- Heap排序方法的原理?复杂度?
- 几种常见的排序算法,手写
- 数组的去重,尽可能写出多个方法
- 如果有一个大的数组,都是整型,怎么找出最大的前10个数
由于篇幅有限,只能分享部分面试题,完整版面试题及答案可以【点击我】阅读下载哦~无偿分享给大家
来源:oschina
链接:https://my.oschina.net/u/4705913/blog/4942294