自我介绍下:某985硕士,程序媛,接触前端一年时间。从八月份开始校招面试笔试,前先后后大厂小厂也都面了挺多,不过大厂基本都被我挂完了,哭晕我,仍是太菜啊。面过的公司:ThoughtWorks,大疆,阿里,网易,百度,电信it研发中心,深信服,华为,小米,搜狗,腾讯。拿了offer的公司目前是:大疆、电信、深信服、华为。下面总结了这段时间的面筋和挂筋~css
10月16日更新,面了腾讯一面,而后就挂了,结束的太快就像龙卷风。html
1. 怎么从十万个节点中找到想要的节点,怎么快速在某个节点前插入一个节点?前端
这个题目我已经在segmentfault上提问了,目前尚未人给出回答,求大神前去解答~vue
题目连接: 怎么在有十万个节点的html文档中找到特定的某个节点node
2. 负载均衡方式和容错机制mysql
3. 描述一个文件从硬盘读取到进程内存中的过程react
4. TCP三次握手和挥手的过程,除了这些书本上的还有哪些?jquery
5. 画一下OSI七层模型linux
6. 写一个你最熟悉的算法webpack
7. 有哪些伪类和伪元素
8. IE盒模型和标准盒模型,用哪一个属性改变
9. 怎么清除浮动,原理是什么
10. em,rem,px的区别
大疆是我校招面的第一家公司,从六月份投简历,而后笔试面试到拿到录用意向书,先后用了近四个月,来之不易啊。
由于时间过久,就直接放在一块儿了,问的都是基础吧,讲真,大疆前端面试不难,都是很基础的,就是时间长,等的捉急。一面是电话面,两个面试官轮流问;二面是视频面,是三个面试官一块儿微信视频,视频面仍是蛮累的,上下左右都得顾上;终面是去的现场面,就跟一个面试官聊了十几分钟人生。
1. meta标签
meta标签:提供给页面的一些元信息(名称/值对), 好比针对搜索引擎和更新频度的描述和关键词。
name
:名称/值对中的名称。经常使用的有author、description、keywords、generator、revised、others。 把 content 属性关联到一个名称。http-equiv
:没有name时,会采用这个属性的值。经常使用的有content-type、expires、refresh、set-cookie。把content属性关联到http头部。content
: 名称/值对中的值, 能够是任何有效的字符串。 始终要和 name 属性或 http-equiv 属性一块儿使用。scheme
: 用于指定要用来翻译属性值的方案。2. css哪些属性能够继承
3. css3有哪些新属性
(1)边框:
border-radius
:圆角边框,border-radius:25px;box-shadow
:边框阴影,box-shadow: 10px 10px 5px #888888;border-image
:边框图片,border-image:url(border.png) 30 30 round;(2)背景:
background-size
:规定背景图片的尺寸,background-size:63px 100px;
background-origin
:规定背景图片的定位区域,背景图片能够放置于 content-box、padding-box 或 border-box 区域。background-origin:content-box;
CSS3 容许您为元素使用多个背景图像。background-image:url(bg_flower.gif),url(bg_flower_2.gif);
(3)文本效果:
text-shadow
:向文本应用阴影,能够规定水平阴影、垂直阴影、模糊距离,以及阴影的颜色。text-shadow: 5px 5px 5px #FF0000;
word-wrap
:容许文本进行换行。word-wrap:break-word;
(4)字体:CSS3 @font-face 规则能够自定义字体。
(5)2D 转换(transform
)
translate()
:元素从其当前位置移动,根据给定的 left(x 坐标) 和 top(y 坐标) 位置参数。 transform: translate(50px,100px);rotate()
:元素顺时针旋转给定的角度。容许负值,元素将逆时针旋转。transform: rotate(30deg);scale()
:元素的尺寸会增长或减小,根据给定的宽度(X 轴)和高度(Y 轴)参数。transform: scale(2,4);skew()
:元素翻转给定的角度,根据给定的水平线(X 轴)和垂直线(Y 轴)参数。transform: skew(30deg,20deg);matrix()
: 把全部 2D 转换方法组合在一块儿,须要六个参数,包含数学函数,容许您:旋转、缩放、移动以及倾斜元素。transform:matrix(0.866,0.5,-0.5,0.866,0,0);(6)3D 转换
rotateX()
:元素围绕其 X 轴以给定的度数进行旋转。transform: rotateX(120deg);rotateY()
:元素围绕其 Y 轴以给定的度数进行旋转。transform: rotateY(130deg);(7)transition:过渡效果,使页面变化更平滑
transition-property
:执行动画对应的属性,例如 color,background 等,可使用 all 来指定全部的属性。transition-duration
:过渡动画的一个持续时间。transition-timing-function
:在延续时间段,动画变化的速率,常见的有:ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier 。transition-delay
:延迟多久后开始动画。简写为:transition: [<transition-property> || <transition-duration> || <transition-timing-function> || <transition-delay>];
(8)animation:动画
使用CSS3 @keyframes 规则。
animation-name
: 定义动画名称animation-duration
: 指定元素播放动画所持续的时间长animation-timing-function:ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(<number>, <number>, <number>, <number>)
: 指元素根据时间的推动来改变属性值的变换速率,说得简单点就是动画的播放方式。animation-delay
: 指定元素动画开始时间animation-iteration-count:infinite | <number>
:指定元素播放动画的循环次animation-direction: normal | alternate
: 指定元素动画播放的方向,其只有两个值,默认值为normal,若是设置为normal时,动画的每次循环都是向前播放;另外一个值是alternate,他的做用是,动画播放在第偶数次向前播放,第奇数次向反方向播放。animation-play-state:running | paused
:控制元素动画的播放状态。简写为: animation:[<animation-name> || <animation-duration> || <animation-timing-function> || <animation-delay> || <animation-iteration-count> || <animation-direction>]
这里只列出了一部分,详情能够去看w3school的CSS3 教程。
4. 闭包是什么,何时闭包会消除?
由于做用域链,外部不能访问内部的变量和方法,这时咱们就须要经过闭包,返回内部的方法和变量给外部,从而就造成了一个闭包。
JavaScript是一门具备自动垃圾回收机制的编程语言,主要有两种方式:
标记清除
(最经常使用)垃圾收集器在运行的时候会给存储在内存中的全部变量都加上标记(可使用任何标记方式)。而后,它会去掉环境中的变量以及被环境中的变量引用的变量的标记。而在此以后再被加上标记的变量将被视为准备删除的变量,缘由是环境中的变量已经没法访问到这些变量了。最后,垃圾收集器完成内存清除工做,销毁那些带标记的值并回收它们所占用的内存空间。
引用计数
引用计数(reference counting)的含义是跟踪记录每一个值被引用的次数。当声明了一个变量并将一个引用类型值赋给该变量时,则这个值的引用次数就是1。若是同一个值又被赋给另外一个变量,则该值的引用次数加1。相反,若是包含对这个值引用的变量又取得了另一个值,则这个值的引用次数减1。当这个值的引用次数变成0 时,则说明没有办法再访问这个值了,于是就能够将其占用的内存空间回收回来。这样,当垃圾收集器下次再运行时,它就会释放那些引用次数为零的值所占用的内存。
致使问题:会致使循环引用的变量和函数没法回收。
解决:将用完的函数或者变量置为null。
5. 怎么理解js是单线程的
主要说一下异步以及事件循环机制,还有事件队列中的宏任务、微任务。
macrotask
:主代码块,setTimeout,setInterval、setImmediate等。microtask
:process.nextTick(至关于node.js版的setTimeout),Promise 。process.nextTick的优先级高于Promise。更详细能够看这篇博客:这一次,完全弄懂 JavaScript 执行机制,讲的很是清晰。
6. 有哪些排序算法,时间复杂度是多少?何时快排的效率最低?
排序算法 | 最坏事件复杂度 | 平均时间复杂度 | 稳定度 | 空间复杂度 |
---|---|---|---|---|
冒泡排序 | O(n^2) | O(n^2) | 稳定 | O(1) |
插入排序 | O(n^2) | O(n^2) | 稳定 | O(1) |
选择排序 | O(n^2) | O(n^2) | 稳定 | O(1) |
快速排序 | O(n^2) | O(n*log2n) | 不稳定 | O(log2n)~O(n) |
二叉树排序 | O(n^2) | O(n*log2n) | 不必定 | O(n) |
堆排序 | O(n*log2n) | O(n*log2n) | 不稳定 | O(1) |
整个序列已经有序或彻底倒序时,快排的效率最低。
7. 原生ajax的请求过程
建立全平台兼容的XMLHttpRequest对象:
function getXHR(){
var xhr = null;
if(window.XMLHttpRequest) {// 兼容 IE7+, Firefox, Chrome, Opera, Safari
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");// 即MSXML3
} catch (e) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");// // 兼容 IE6, IE5,很老的api,虽然浏览器支持,功能可能不完善,故不建议使用
} catch (e) {
alert("您的浏览器暂不支持Ajax!");
}
}
}
return xhr;
}
复制代码
Ajax请求数据的过程:
var xhr = getXHR();
xhr.open('GET', url/file,true); //设置请求方式,url,以及是否异步
xhr.onreadystatechange = function() { //设置回调监听函数
if(xhr.readyState==4){
if(xhr.status==200){
var data=xhr.responseText;
console.log(data);
}
};
xhr.onerror = function() {
console.log("Oh, error");
};
xhr.send(); //发送请求
复制代码
8. http状态码,cookie字段,cookie通常存的是什么,session怎么存在的?
这部分能够参考个人博客:HTTP协议知识点总结
9. http请求方式有哪些?
10. 怎么用原生js实现一个轮播图,以及滚动滑动
以前我使用轮播图都是用的antd的组件,因此我大体说了一下思路,用定时器去实现,以及如何实现平滑的滚动效果。详情请看: 原生js实现轮播图
11. 用过哪些开源的组件
说了antd和element-ui。
12. 怎么实现上传下载的功能
主要说了下form表单和input标签。
13. react生命周期,以及diff算法,diff算法是对树的深度优先遍历仍是广度优先遍历?
是深度优先遍历。 diff的实现
14. 强缓存和协商缓存
参考:HTTP协议知识点总结
15. react-router的原理
react-router就是控制不一样的url渲染不一样的组件。react-router在history库的基础上,实现了URL与UI的同步。
原理:DOM渲染完成以后,给window添加onhashchange事件监听页面hash的变化,而且在state属性中添加了route属性,表明当前页面的路由。
具体步骤:
16. 怎么用无人机捕获天空上的鸟
这个题目我也不造啊,毕竟我没用过无人机,有知道的大神能够在评论中回答一下~
终面是去的现场,在深圳总部那边,基本就是闲聊了二十来分钟吧,面完还有hr小姐姐给咱们介绍和参观了无人机,酷炫~
阿里是提早批,找人内推了菜鸟网络,面了六轮,面的我怀疑人生了,中途四面原本已经挂了,后面三面面试官又捞起来给我加面了一轮,不过最后仍是挂在了hr。
1. css选择器,怎么选择相同的类
id、class、标签、伪类、通配符等。能够用getElementsByClassName()选择相同的类。
2. css3有哪些伪类,伪类选择器有哪些
这里要区分一下伪类和伪元素的概念。根本区别在于它们是否创造了新的元素(抽象)。
:link
, :visited
, :hover
, :active
; 以及 :first-child
, :last-child
。:before
,:after
, :first-letter
, :first-line
。css3只新增了一个伪元素 ::selection
(改变用户所选取部分的样式)。参考: CSS3 选择器——伪类选择器
3. OSI七层网络模型
OSI七层模型 | 做用 | 对应协议 | 对应设备 |
---|---|---|---|
应用层 | 它是计算机用户,以及各类应用程序和网络之间的接口 | HTTP, FTP, SMTP, POP3 | 计算机设备 |
表示层 | 信息的语法语义以及它们的关系,如加密解密、转换翻译、压缩解压缩 | IPX, LPP, XDP | |
会话层 | 创建、维护、管理应用程序之间的会话 | SSL, TLS, DAP, LDAP | |
传输层 | 服务点编址,分段与重组、链接控制、流量控制、差错控制 | TCP, UDP | 防火墙 |
网络层 | 为网络设备提供逻辑地址,进行路由选择、分组转发 | IP ARP RARP ICMP IGMP | 路由器 |
数据链路层 | 物理寻址,同时将原始比特流转变为逻辑传输路线 | PPTP, ARP, RARP | 交换机 |
物理层 | 机械、电子、定时接口通道信道上的原始比特流传输 | IEEE 802.2, Ethernet v.2, Internetwork | 网卡 |
参考: 一张很是强大的OSI七层模型图解
4. MVC和MVVM的区别
MVC
将响应机制封装在controller对象中,当用户和你的应用产生交互时,控制器中的事件触发器就开始工做了。
MVVM
把View和Model的同步逻辑自动化了。之前Controller负责的View和Model同步再也不手动地进行操做,而是交给框架所提供的数据绑定功能进行负责,只须要告诉它View显示的数据对应的是Model哪一部分便可。也就是双向数据绑定,就是View的变化能实时让Model发生变化,而Model的变化也能实时更新到View。
5. 用过哪些设计模式
(1)单例模式
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
实现方法:先判断实例存在与否,若是存在则直接返回,若是不存在就建立了再返回,这就确保了一个类只有一个实例对象。
适用场景:一个单一对象。好比:弹窗,不管点击多少次,弹窗只应该被建立一次。
(2)发布/订阅模式 定义:又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,全部依赖于它的对象都将获得通知。
场景:订阅感兴趣的专栏和公众号。
(3)策略模式 定义:将一个个算法(解决方案)封装在一个个策略类中。
优势:
应用场景:根据不一样的员工绩效计算不一样的奖金;表单验证中的多种校验规则。
(4)代理模式
定义:为一个对象提供一个代用品或占位符,以便控制对它的访问。
应用场景:图片懒加载(先经过一张loading图占位,而后经过异步的方式加载图片,等图片加载好了再把完成的图片加载到img标签里面。)
(5)中介者模式
定义:经过一个中介者对象,其余全部相关对象都经过该中介者对象来通讯,而不是互相引用,当其中的一个对象发生改变时,只要通知中介者对象就能够。能够解除对象与对象之间的紧耦合关系。
应用场景: 例如购物车需求,存在商品选择表单、颜色选择表单、购买数量表单等等,都会触发change事件,那么能够经过中介者来转发处理这些事件,实现各个事件间的解耦,仅仅维护中介者对象便可。
(6)装饰者模式
定义:在不改变对象自身的基础上,在程序运行期间给对象动态的添加方法。
应用场景: 有方法维持不变,在原有方法上再挂载其余方法来知足现有需求;函数的解耦,将函数拆分红多个可复用的函数,再将拆分出来的函数挂载到某个函数上,实现相同的效果但加强了复用性。
参考: JavaScript设计模式
6. Http状态码
7. https怎么加密
参考: HTTP协议知识点总结
8. es6相比es5有哪些优势
大概说一下:let、const,模板字符串,箭头函数,作异步处理的promise、generator、async await,es6模块等。
参考: 阮一峰 —— ECMAScript 6 入门
9. ajax请求过程
很少说,上面有。
10. 有哪些性能优化
参考:
11. 懒加载怎么实现
场景:一个页面中不少图片,可是首屏只出现几张,这时若是一次性把图片都加载出来会影响性能。这时可使用懒加载,页面滚动到可视区在加载。优化首屏加载。
实现:img标签src属性为空,给一个data-xx属性,里面存放图片真实地址,当页面滚动直至此图片出如今可视区域时,用js取到该图片的data-xx的值赋给src。
优势:页面加载速度快,减轻服务器压力、节约流量,用户体验好。
12. 项目中写过什么组件,组件有哪些功能
主要介绍了下实习项目写过的组件,说了下如何实现的。
1. react框架有哪些设计的好的地方
主要介绍了如下几个部分:
2. react是怎么工做的,怎么提升性能
主要仍是说了下react的生命周期,还有shouldComponentUpdate这个函数,以及diff算法。
3. redux有哪些须要改进,你以为你用的不怎么舒服的地方?
我当时说的是redux的subscribe方法有点麻烦,每次更新数据都要手动的subscribe一下,因此以为react-redux的api封装的更好,用起来比较简单。
参考:
4. 怎么设计一个相似于antd 的 react 组件库
这个问题把我给问懵了额,我是按照软件工程的生命周期流程来答的。
5. 你作的最自豪的一个项目
这个略过...言之有理便可
6. mysql 的左关联和右关联
左关联:保留左表中全部的元组,右表中没有的属性填充NULL。
右关联:保留右表中全部的元组,左表中没有的属性填充NULL。
7. 有没有折腾事后端
直接说了没有,以前学了点PHP,不过都快忘得差很少了额。
8. 学习方法和将来的学习路线
言之有理便可。
9. 浏览器页面渲染机制
参考: 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理
10. XSS和CSRF防范措施
(1)XSS:跨站脚本攻击
攻击方式:在URL或者页面输入框中插入JavaScript代码。
防范:
(2)CSRF:跨站点伪造请求
攻击方式:攻击者经过一些技术手段欺骗用户的浏览器去访问一个本身曾经认证过的网站并执行一些操做(如发邮件,发消息,甚至财产操做如转帐和购买商品)。主要是拿到了用户的登陆态。
防范:
这一面基本问的是我的知识沉淀了,如实回答就能够了。
这一面是在杭州菜鸟现场面的,尴尬的是通知个人小姐姐一直强调是hr面,我天真的觉得是hr面了,然鹅问了不少技术,当时候想的是阿里的hr都这么厉害了,都能直接问技术了。临走以前,特地问了面试官是hr面么,他说是技术,而后我......大概就知道本身凉了。
1. mysql的索引用的什么,介绍一下b树,b+树,红黑树这些
mysql的索引用的是B+树。
参考: 数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)
2. Mysql的基本写法
参考: 一千行 MySQL 学习笔记
3. 估算下杭州上空如今有多少架飞机
这个题目,也真的是为难我了额。在网上搜到了个答案,能够参考下:高盛的面试题
4. 两组数据,都存储五亿条url,内存有4G,如何找出相同的两条url
参考: 面试- 阿里-. 大数据题目- 给定a、b两个文件,各存放50亿个url,每一个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
5. 如何找到一个字符串中最长的两个字符串
解法:后缀数组。首先生成字符串的全部后缀数组,在进行排序,找出相邻两个最长的公共子串(从第一位开始相同的)
例如:abcdeabc
生成后缀数组:【abcdeabc,bcdeabc,cdeabc,deabc,eabc,abc,bc,c】
再排序:【abcdeabc,abc,bcdeabc,bc,cdeabc,c,deabc,eabc】
找出相邻的最长公共子串:【abc,bc,c】
所以,最长的串是abc。
6. 在白板上画出这个项目的整个架构
画了下项目的功能架构什么的。
7. XSS, CSRF,token 怎么来的,sql 注入知道么
sql注入:
攻击方式:服务器上的数据库运行非法的 SQL 语句,主要经过拼接字符串的形式来完成,改变sql语句自己的语义。经过sql语句实现无帐号登录,甚至篡改数据库。
防护:
8. 怎么设计一个ant的组件
9. 你以为你实习作的项目有什么改进的地方
10. 你作过印象最深入的项目
11. 算法了解过吗
就知道一些基本的排序额...
12. Setstate 会发生什么
setState会引起一次组件的更新过程,从而引起页面的从新绘制。主要会涉及如下几个生命周期函数:
13. 平时处理过什么兼容性
参考: web前端兼容性问题总结
14. 了解分布式和负载均衡么
然鹅我并不了解呃。
第四面确实是挂了,没面hr就让我走了,后面过了两天以后,三面面试官又把我捞起来了,说我计算机基础还有数据库基础不怎么好,而后说问我几个简单的,以后给了我机会面了hr,感谢三面面试官让我体验了阿里的整个面试流程,很知足了。
1. 进程和线程的区别
2. 冒泡排序和快速排序的区别
简述了下冒泡和快排的思想,以及冒泡和快排的时间复杂度。
3. OSI七层模型以及做用
上面有写噢,不知道的往上翻。
4. 你有哪些优点,或者打动他的
呃,最怕这种自诩的问题额,而后就是夸了一顿,手动捂脸。
5. 面向对象和非面向对象有什么区别
面向对象三大特性:封装,继承,多态。
面向对象的好处:
6. 设计模式有哪些,说下装饰者模式和代理模式
前面有总结,往前翻。
7. 重载和重写有什么区别
方法重写(overriding):
方法重载(overloading):
重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,可是参数却不相同,方法体也不相同,最多见的重载的例子就是类的构造函数。
参考: 方法重载和重写的区别
二面三面都有手写代码的环节,对于我这种动手能力弱的人来讲仍是挺吃力。当时提早批投递的是深圳百度,总共只招五个前端,没过也很正常。后面正式批笔试过了,可是要去北京面试,也就直接放弃了。
1. 为何要用flex布局,align-items和justify-content的区别
传统布局基于盒模型,很是依赖 display属性 、position属性 、float属性。而flex布局更灵活,能够简便、完整、响应式地实现各类页面布局,好比水平垂直居中。
align-items:定义在侧轴(纵轴)方向上的对齐方式;
justify-content:定义在主轴(横轴)方向上的对齐方式。
2. webpack是怎么打包的,babel又是什么?
把项目当作一个总体,经过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到项目的全部依赖文件,使用loaders处理它们,最后打包为一个(或多个)浏览器可识别的JavaScript文件。
babel将es六、es七、es8等语法转换成浏览器可识别的es5或es3语法。
3. saas和less不一样于普通css的地方
4. es 6模块和其余模块不一样的地方
对比了一下es6模块和CommonJS模块:
区别 | CommonJS | es6 |
---|---|---|
加载原理 | 第一次加载模块就会执行整个模块,再次用到时,不会执行该模块,而是到缓存中取值。 | 不会缓存运行结果,动态的去被加载的模块中取值,而且变量老是绑定其所在模块。 |
输出 | 值的拷贝(模块中值的改变不会影响已经加载的值) | 值的引用(静态分析,动态引用,原来模块值改变会改变加载的值) |
加载方式 | 运行时加载(加载整个模块,即模块中的全部接口) | 编译时加载(只加载须要的接口) |
this指向 | 指向当前模块 | 指向undefined |
循环加载 | 只输出已经执行的部分,还未执行的部分不会输出 | 遇到模块加载命令import时不会去执行模块,而是生成一个动态的只读引用,等到真正用到时再去模块中取值。只要引用存在,代码就能执行。 |
5. 有没有用过es6的一些异步处理函数
Promise,generator,async await
6. redux怎么处理异步操做
能够引入Redux-thunk或者redux-promise这种中间件,能够延迟事件的派发。
其中的原理:是由于他们用了applymiddleware()包装了store的dispatch方法,拥有能够处理异步的能力。
7. 为何reducer要是个纯函数,纯函数是什么?
纯函数:对于相同的输入,永远会获得相同的输出,并且没有任何可观察的反作用,也不依赖外部环境的状态。
缘由:Redux只经过比较新旧两个对象的存储位置来比较新旧两个对象是否相同(浅比较)。若是你在reducer内部直接修改旧的state对象的属性值,那么新的state和旧的state将都指向同一个对象。所以Redux认为没有任何改变,返回的state将为旧的state。两个state相同的话,页面就不会从新渲染了。
由于比较两个Javascript对象全部的属性是否相同的的惟一方法是对它们进行深比较。可是深比较在真实的应用当中代价昂贵,由于一般js的对象都很大,同时须要比较的次数不少。所以一个有效的解决方法是做出一个规定:不管什么时候发生变化时,开发者都要建立一个新的对象,而后将新对象传递出去。同时,当没有任何变化发生时,开发者发送回旧的对象。也就是说,新的对象表明新的state。
8. 高阶函数是什么,怎么去写一个高阶函数
高阶函数:参数值为函数或者返回值为函数。例如map,reduce,filter,sort方法就是高阶函数。
编写高阶函数,就是让函数的参数可以接收别的函数。
9. vue跟react的区别是什么
没有用过vue,因此就只说了vue具备双向绑定,react是单向数据流。
10. nodejs处理了什么问题
能够处理高并发的I/O,也能与websocket配合,开发长链接的实时交互应用程序。
11. 响应式布局,怎么作移动端适配
使用媒体查询能够实现响应式布局。
移动端适配方案:
(1)meta viewport:让当前viewport的宽度等于设备的宽度,同时不容许用户手动缩放。
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
复制代码
width=device-width
: 让当前viewport宽度等于设备的宽度
user-scalable=no
: 禁止用户缩放
initial-scale=1.0
: 设置页面的初始缩放值为不缩放
maximum-scale=1.0
: 容许用户的最大缩放值为1.0
minimum-scale=1.0
: 容许用户的最小缩放值为1.0
(2)媒体查询(响应式)
(3)动态 rem 方案
参考: 移动端是怎么作适配的?
1. 怎么作一个实时的聊天系统
使用WebSocket和nodejs,《nodejs实战》这本书详细介绍了这个项目。
2. 当消息有延迟的时候,怎么保证消息的正确顺序
每一个消息在被建立时,都将被赋予一个全局惟一的、单调递增的、连续的序列号(SerialNumber,SN)。能够经过一个全局计数器来实现这一点。经过比较两个消息的SN,肯定其前后顺序。
3. 怎么作一个登录窗口,input有哪些兼容性
使用form表单。
4. input按钮如何校验
使用正则表达式。
5. 如何实现水平垂直居中,relative、absolute、fixed
我说了三种方式:
(1)使用表格
.container{
width: 600px;
height: 600px;
background: #eee;
display: table-cell;
text-align: center;
vertical-align: middle;
}
.center{
background: blue;
}
复制代码
(2)css3的transform属性
.container{
width: 100%;
height: 400px;
background: #eee;
position: relative;
}
.center{
background: blue;
position:absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
复制代码
(3)flex布局
.container{
width: 100%;
height: 400px;
background: #eee;
display: flex;
justify-content: center;
align-items: center;
}
.center{
width: 100px;
height: 100px;
background: blue;
text-align: center;
}
复制代码
6. 写一个函数,1s以后依次输出1,2,3,4,5
直接使用了let和定时器。
for(let i = 1 ; i < 6; i++){
setTimeout(() => {
conosle.log(i)
}, 1000)
}
复制代码
7. 事件队列(宏任务、微任务)
8. 如何每隔三个数加一个逗号,还要考虑小数点的状况
这道题就是大疆的笔试题,当时候笔试题也是瞎写的,后面也没仔细看,没想到又成了一道面试题。
function transform(number){
var num = number.toString()
var numArr = num.split('.')
var [num, dotNum] = numArr
var operateNum = num.split('').reverse()
var result = [], len = operateNum.length
for(var i = 0; i< len; i++){
result.push(operateNum[i])
if(((i+1) % 3 === 0) && (i !== len-1)){
result.push(',')
}
}
if(dotNum){
result.reverse().push('.', ...dotNum)
return result.join('')
}else{
return result.reverse().join('')
}
}
复制代码
9. webpack有配置过吗?原理知道吗
参考前面。
10. 父子组件如何通讯,子组件怎么跟父组件通讯?
父组件把state做为props传递给子组件进行通讯。
父组件写好state和处理该state的函数,同时将函数名经过props属性值的形式传入子组件,子组件调用父组件的函数,同时引发state变化。
11. 简单说一下pwa
面试的这个部门就是作pwa的,因此说了下本身对pwa的理解。
1. 手写indexOf
function indexOf(str, val){
var strLen = str.length, valLen = val.length
for(var i = 0; i < strLen; i++){
var matchLen = i + valLen
var matchStr = str.slice(i, matchLen)
if(matchLen > strLen){
return -1
}
if(matchStr === val){
return i
}
}
return -1
}
复制代码
2. 实现 JS 的继承
function A () {
this.name = 'a';
}
A.prototype.getName = function () {
return this.name;
}
function B () {
}
// B 如何继承 A
复制代码
参考: JS实现继承的几种方式
3. 从url输入到页面显示会有哪些步骤
(1)DNS服务器解析域名,找到对应服务器的IP地址;
(2)和服务器创建TCP三次握手链接;
(3)发送HTTP请求,服务器会根据HTTP请求到数据服务器取出相应的资源,并返回给浏览器;
(4)浏览器处理响应
4. method有哪些方法,分别是什么意思?post和put的区别
post:上传资源
put:修改资源
5. https有几回握手
6. http2比http1好的地方
主要是考察http2的几个特性。
参考:HTTP协议知识点总结
7. 页面刷新不出来,是有哪些问题
能够从第三题的每一个步骤进行分析,大概是:
8. 上一次系统性的学习是何时,怎么学习的
学习react的时候,看文档、博客,照着网上写了点小项目。
9. 你以为项目中最自豪的是什么
10. 上家公司有哪些很差的地方
网易是在杭州网易大厦面的,一天面完三轮,而后录用排序,择优录取的吧。我投的是网易考拉,哭唧唧,后面被拒了以后还伤心的卸载了考拉。以后正式批投了杭研,过了笔试,要去武汉面,原本海康也是在武汉面的,考虑到还要住一夜,有点怕怕,就没去了。
1.css3动画
2. flex布局
3. 实现call
Function.prototype.call2 = function (context) {
var context = Object(context) || window
context.fn = this
var args = []
for (var i = 1; i < arguments.length; i++) {
args.push('arguments[' + i +']')
}
var res = eval('context.fn(' + args + ')')
delete context.fn
return res
}
复制代码
4. 图片懒加载data-src
5. Promise异步
6. 水平垂直居中
7. 数组有哪些方法,哪些会改变原数组
改变原数组的方法:pop、push、reverse、shift、sort、splice、unshift,以及两个ES6新增的方法copyWithin 和 fill;
不改变原数组(复制):concat、join、slice、toString、toLocaleString、indexOf、lastIndexOf、未标准的toSource以及ES7新增的方法includes;
循环遍历:forEach、every、some、filter、map、reduce、reduceRight 以及ES6新增的方法entries、find、findIndex、keys、values。
8. 操做dom有哪些方法
建立:
createDocumentFragment() //建立一个DOM片断
createElement() //建立一个具体的元素
createTextNode() //建立一个文本节点
添加:appendChild()
移出:removeChild()
替换:replaceChild()
插入:insertBefore()
复制:cloneNode(true)
查找:
getElementsByTagName() //经过标签名称
getElementsByClassName() //经过标签名称
getElementsByName() //经过元素的Name属性的值
getElementById() //经过元素Id,惟一性
9. 左边定宽右边自适应
(1)左盒子左浮动,右盒子width=100%
(2)左盒子左浮动,右盒子margin-left=左盒子宽度
(3)左盒子左浮动,右盒子右浮动,设置calc(100vw-盒子宽度)
(4)父容器设置display=flex,右盒子flex:1
10. 事件代理
利用事件冒泡的原理,让本身的所触发的事件,让他的父元素代替执行。打个比方:一个button对象,原本本身须要监控自身的点击事件,可是本身不来监控这个点击事件,让本身的父节点来监控本身的点击事件。
11. 后端了解么
直接说了不了解,笑哭。
1. 节流和防抖,手写一下代码
(1)防抖:
定义: 合并事件且不会去触发事件,当必定时间内没有触发这个事件时,才真正去触发事件。
原理:对处理函数进行延时操做,若设定的延时到来以前,再次触发事件,则清除上一次的延时操做定时器,从新定时。
场景: keydown事件上验证用户名,输入法的联想。
实现:
function debounce(fn, delay) {
var timer
return function () {
var that = this
var args = arguments
clearTimeout(timer)
timer = setTimeout(function () {
fn.apply(that, args)
}, delay)
}
}
复制代码
(2)节流:
定义: 持续触发事件时,合并必定时间内的事件,在间隔必定时间以后再真正触发事件。每间隔一段时间触发一次。
原理:对处理函数进行延时操做,若设定的延时到来以前,再次触发事件,则清除上一次的延时操做定时器,从新定时。
场景: resize改变布局时,onscroll滚动加载下面的图片时。
实现:
当触发事件的时候,咱们取出当前的时间戳,而后减去以前的时间戳(最一开始值设为0),若是大于设置的时间周期,就执行函数,而后更新时间戳为当前的时间戳,若是小于,就不执行。
缺陷:第一次事件会当即执行,中止触发后没办法再激活事件。
function throttle(fn, interval) {
var previousTime = +new Date()
return function () {
var that = this
var args = arguments
var now = +new Date()
if (now - previousTime >= interval) {
previousTime = now
fn.apply(that, args)
}
}
}
复制代码
当触发事件的时候,咱们设置一个定时器,再触发事件的时候,若是定时器存在,就不执行,直到定时器执行,而后执行函数,清空定时器,这样就能够设置下个定时器。
缺陷:第一次事件会在n秒后执行,中止触发后依然会再执行一次事件。
function throttle(fn, interval) {
var timer
return function (){
var that = this
var args = arguments
if(!timer){
timer = setTimeout(function () {
fn.apply(that, args)
timer = null
}, interval)
}
}
}
复制代码
鼠标移入能马上执行,中止触发的时候还能再执行一次。
var throttle = function(func,delay){
var timer = null;
var startTime = Date.now();
return function(){
var curTime = Date.now();
var remaining = delay-(curTime-startTime);
var context = this;
var args = arguments;
clearTimeout(timer);
if(remaining<=0){
func.apply(context,args);
startTime = Date.now();
}else{
timer = setTimeout(func,remaining);
}
}
}
复制代码
2. 知道哪些性能优化
3. react为何比其余要快,虚拟dom知道吗
4. 写过什么组件
5. 平时怎么学习的
6. node,webpack了解么
7. 模块化,commonjs,es6模块
8. redux怎么实现的
搜狗是内推的,面试也很迷,第一面到第二面中间隔了二十几天,而后二面完了也毫无反馈。
1. 说一下项目,整个网络过程,从前端到后台
2. Ajax 底层实现,readystate 有哪些
0-(未初始化)尚未调用send()方法
1-(载入)已调用send()方法,正在发送请求
2-(载入完成)send()方法执行完成,已经接收到所有响应内容
3-(交互)正在解析响应内容
4-(完成)响应内容解析完成,能够在客户端调用了
3. 状态码有哪些,100,307
4. OSI七层模型
5. TCP三次握手
6. SSL握手过程
7. jQuery 有哪些方法
8. display 有哪些属性,说一下flex的属性
9. Es6的async awiat ,generator
10. Map有哪些方法
Map的方法:set, get, has, delete, clear
遍历方法:
keys():返回键名的遍历器。
values():返回键值的遍历器。
entries():返回全部成员的遍历器。
forEach():遍历 Map 的全部成员。
参考: Set 和 Map 数据结构
11. 正则用过吗?exec, 匹配一个手机号
12. css3动画了解吗,怎么写一个loading动画
13. 怎么实现跨域,cors涉及哪些请求字段
14. 编程: 判断两个网络地址是否属于同一个子网掩码
用与运算符就能够了。当时是在牛客网的面试系统上写的,一直AC不出,也是很迷了额。
15. 怎么上传文件
1. 怎么计算在一个页面上的停留时间
方案1:websocket,前端开个长链接,后台统计长链接时间。
方案2:ajax轮询,隔几秒发一个查询,后台记录第一与最后一个查询间隔时间。
方案3: 关闭窗口或者跳转的时候会触发window.onbeforeunload函数,能够在该函数中作处理(有兼容性问题);统计完数据记录到本地cookies中,一段时间后统一发送。
2. 给你一亿个数,是连续的,怎么找出两个不存在的数
用bitmap就能搞定了,存在为1,不存在为0。
3. 一个搜索框的输入联想,会遇到什么问题?若是第一个请求延迟,第二个请求先到,请问怎么处理?
键盘输入太快,每次输入都去联想,须要屡次发送请求,会致使用户体验太差,可使用防抖优化。
在前端作判断,判断此时的值是否与返回的值相同,不一样就丢弃,相同就显示在页面。
4. Http的缓存
5. 二维码怎么工做的,扫描pc端的二维码,怎么让pc端登陆?
6. Promise 作什么的,有哪几种状态
异步处理的,有三个状态:resolve,pending,reject。
7. 项目有哪些难点,怎么处理的
8. 遇到过哪些性能优化
当时据说电信对学历要求很高,本科基本都是211起的,想着本身本科太渣,就直接放弃了网上的笔试。以后电信来了学校宣讲会,跟朋友吃完饭看到了,就去说凑凑热闹,恰好有笔试也就作了。作完以后笔试竟然考了最高分,比第二名高出二十分,手动捂脸额。一面完分数也挺高的,有95分,运气爆棚。重点是今年电信开的薪资实在过高了,目前还在纠结选哪一个。
1. Xhtml和html的区别
2. 遇到过哪些兼容性问题
3. 浏览器内核有哪些,移动端用的是哪一个
对于Android手机而言,使用率最高的就是Webkit内核。
4. 怎么实现标签页的通讯
5. Cookie、session,localstorage,sessionstorage
6. React 和jquery 之间的区别,哪一个好用
7. 怎么实现继承
8. Es6,es7有哪些特性
9. 怎么跨域
10. Commonjs用的js哪一个特性?
由于js以前只能在浏览器运行,为了能让js能在服务器上运行,因此设计了commonjs规范,并且js以前没有模块化的概念。
11. 选择器优先级
12. 伪类知道吗,有哪些
13. 块级元素有哪些,怎么转成行内元素
14. 一个完整的http请求,页面渲染过程,js和css文件怎么渲染
一面问的都很常规的,不知道为啥给了这么高的分。二面的时候三个面试官,总共就问了三个问题,而后就说面试结束了,不超过五分钟。
1. TCP怎么工做的
三次握手
2. OSI七层模型,路由器工做在哪一层?
网络层
3. 平时用什么语言,用过哪些框架
深信服给的薪资竟然比电信还低,并且加班还严重,就直接拒了。
1. 跨域,同源策略,webpack里面有个跨域的方式知道么
2. 怎么把es6转成es5,babel怎么工做的
3. 反向代理知道么,Nginx
4. 继承有哪些方式
5. 怎么实现一个sleep ,手写一个promise
6. 能写一个二叉树么,怎么去遍历
7. 深拷贝怎么写
(1)var new_arr = JSON.parse( JSON.stringify(arr) );
(2)for in 加递归
function isObj(obj) {
//判断是否为对象或者函数,但不是null
return (typeof obj === 'object' || typeof obj === 'function') && obj !== null
}
function deepCopy(obj) {
let newObj = Array.isArray(obj) ? [] : {}
for(let key in obj) {
newObj[key] = isObj(obj[key]) ? deepCopy(obj[key]) : obj[key]
}
return newObj
}
复制代码
(3)$.extend()
(4)函数库lodash,提供_.cloneDeep()
8. 在公司除了完成上级交待的任务,还作了什么
9. 怎么实现垂直中间布局
10. Call和apply,哪一个性能开销大
在思否上提问了,已有大神回答。
11. 正则写一个手机号,全局匹配是什么
12. 删除一个数组中的某个数
splice方法
13. 模块化介绍一下,什么是编译时优化
14. 有哪些网络安全名词,怎么防范
15. 平时怎么学习
二面小哥哥问了几个问题以后,就一直跟我介绍深信服内部的一些管理、技术氛围、晋升机制什么的,全程都是笑脸额。
1. git push -u 是什么意思
绑定默认提交的远程版本库,加了参数-u后,之后便可直接用git push 代替git push origin master
2. git rebase解释下
有test和dev两个分支,分别有两个commit,此时执行下列命令:
git checkout test
git rebase dev
复制代码
以dev为基准将test的提交进行回放,挨个的应用到dev上去,而后test的那些提交就会废弃。 等价于git merge dev。
git merge 和git rebase区别:
3. linux命令,怎么打开一个文件
cat abc.txt
4. 你的上级给你review 代码时会提什么建议
5. 怎么看待加班和工做效率
6. get和post分别进行几回数据交互
get请求过程:(2次交互)
post请求过程:(3次交互)
7. 怎么打断点,如何肯定一个结果来自于哪一个函数
TW是内推的,作了内推做业后,就面了技术和文化面。技术面是在做业的基础上加两个功能,只写出来一个,后面一个没时间写了,而后就只讲了下思路。
文化面面了快一个小时,据说TW不加班,对女程序员还很友好,挺中意的公司,不过最后仍是挂了额。
华为的面试就很少说了,基本不问前端的,进去是随机分岗的。华为的面试阵仗是我见过的最大的,据说要招一万人,在万达那里面的,全是人啊,阔怕。如今正泡在offer池里,估计国庆后发正式offer吧。
二面碰到的是个女面试官,太恐怖了,一直在怼我,最怕碰到女面试官了,惨。
小米是内推的,电话面了一面,国庆后要我去武汉现场面,那会学校恰好有事应该也不会去了。
1. redux主要作什么的,用过redux的一些中间件吗,简单说一下
2. react生命周期说一下,diff算法说一下
3. setstate时会合并修改,是在哪一个函数里修改的?宏事件和微事件
setstate是异步更新的,经过一个队列机制实现state的更新,当执行setState时,会将须要更新的state合并后放入状态队列,而不会当即更新,队列能够高效的批量更新state。
4. let、const、var的区别;若是const定义的是个对象,可以修改对象的属性吗?
const实际上保证的并非变量的值不得改动,而是变量指向的那个指针不得改动,能够给对象添加属性。若是真的想将对象冻结,应该使用Object.freeze方法。
5. Object.freeze和Object.seal的区别
Object.preventExtension
:禁止对象添加新属性并保留已有属性;
Object.seal
:在一个现有对象上调用 Object.preventExtensions(..) 并把全部现有属性标记为 configurable:false;
Object.freeze
:在一个现有对象上调用 Object.seal(..) 并把全部“数据访问”属性标记为 writable:false。
6. 说一下防抖,应用场景是什么
7. 快速排序算法说下,基点怎么选?若是一个数组是已经排序好的怎么选基点?
8. 算法的稳定性,冒泡、快排
9. lodash,underscore的库了解么?有哪些方法
10. 整个项目的架构,包括前端、后台、运营
11. sort的底层实现机制,看过源码么?
数组长度<=22时采用插入排序,大于22用快排。
12. 怎么调试bug?打过断点么?若是前端代码被压缩,如何去找到相应元素?
chromre控制台下,在 Scripts 面板下面有个 Pretty print 按钮(这种符号 {}),点击会将压缩 js 文件格式化缩进规整的文件,这时候在设定断点可读性就大大提升了。
感谢这一年的学习。另外,公司已签,感谢各位的关注。
这些都是个人学习笔记,也能够参考:
我正在参加掘金技术征文,活动详情 秋招求职时,写文就有好礼相送 | 掘金技术征文