微策略:前端:react,重算法、英语。

阿里蚂蚁

一面
1:介绍项目经历
2:同一个网站,在上海打开慢,南京打开快,怎么分析原因--DNS解析与CDN
3:vue,react,jquery比较--有测试过性能吗?没有
4:对大前端理解,前端会发展为什么样
5:算法:两个排序好的数组,怎么找它们的中位数 --归并,再找中位数
时间:半小时
二面
1:介绍项目经历
2:react虚拟DOM,生命周期
3:react子级间通信
4:nodejs如何require一个包
5:es6较es5的不同
6:nodejs加载原生的包与自己定义的包路径如何查找
Node的内置模块被编译为二进制形式,引用时直接使用名字而非文件路径。当第三方的模块和内置模块同名时,内置模块将覆盖第三方同名模块。因此命名时需要注意不要和内置模块同名。如获块取一个http模
7:http2.0优势
8:flex弹性布局,如何适应不同屏幕
9:页面缓存
10:页面性能优化
11:css性能优化,就动画效果,如何从js、css角度减少回流
1、requestAnimationFrame 会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随浏览器的刷新频率,一般来说,这个频率为每秒60帧。
2、在隐藏或不可见的元素中,requestAnimationFrame将不会进行重绘或回流,这当然就意味着更少的的cpu,gpu和内存使用量。
3:强制使用硬件加速 (通过 GPU 来提高动画性能)
可以通过硬件加速的方式,声明一个新的复合图层,它会单独分配资源
(当然也会脱离普通文档流,这样一来,不管这个复合图层中怎么变化,也不会影响默认复合层里的回流重绘)
可以简单理解下:GPU中,各个复合图层是单独绘制的,所以互不影响,
12:webpack的plugin与loader区别
13:了解react.16吗
14:es6如何转为es5--babel
15:了解webpack如何打包吗
16:原型继承
时间:45分钟
一个月后--捞出来的三面
1:BFC--居然没想出来
2:原型链与作用域链
3:jquery源码看过没
4:移动端开发经验
5:css会吗
6:怎么学前端
7:遇到问题怎么解决
8:正则如何解决一个数,千分化表示
9:设计模式知道什么--单例详细说
10:函数式编程--柯里化
11:es6的变量定义与es5区别
12 :事件流
时间:33分钟
四面--幸好捞了本算法书
1:七层网络协议,每层干嘛用
2:tcp三次握手,四次挥手
3:排序算法有哪些,--时间复杂度,选择排序怎搞
4:数据结构有哪些,红黑树与二叉树区别,二叉搜索树与二叉平衡树
5:项目经历
6:树数据很多怎么办--懒加载
7:页面优化方法
8:设计模式--工厂模式说了下
9:cookie与session区别
10:如果现在重新做这个项目,有什么想优化的
时间:34分钟
五面:
1:多长时间开始独立做前端,这段时间是怎么学习的
2:学习生涯最失败的事情,怎么走出来的
3:怎么看待竞争
4:项目里最难的事,怎么克服的
5:职业规划是怎样的
6:你是独生子女吗,对弟弟会有一些指导吗
7:别人对你项目的认可度,项目做的怎么样
时间:20分钟

腾讯测试开发:

1:算法:比较两棵树是否完全相同:
2:TCP与UDP协议,UDP如何转为TCP协议--三次握手,四次重传
3:如何确认包未被接收--超时重传,三次收到上一个包ACK重传
4:进程与线程,上下文概念

京东一面:

1:block元素与inline元素不同
2:position有哪些,特性
3:css选择器哪些
4:es5与es6: let,const打包后会怎么变--块级作用域
5:基本数据类型:bool等
6:作用域链
7:递归
8:react生命周期
9:react通信机制
10:事件流
11:redux
12:flex弹性布局
13:this
14:promise如何从then转为catch
京东二面:
1:介绍项目,
2:promise函数
3:es6模块新特性
4:浏览器内存泄露,闭包内存泄露怎么解决
5:怎么让页面加载更快
6: 兼容过IE吗
7:缓存
8:pc端还是移动端
9:观察者模式如何实现

携程:

1:private与protected子类能访问到吗
2:抽象类与接口
3:Apache与tomcat区别
1. Apache是普通服务器,本身只支持html即普通网页。不过可以通过插件支持PHP,还可以与Tomcat连通(单向Apache连接Tomcat,就是说通过Apache可以访问Tomcat资源。反之不然)
2.两者都是一种容器,只不过发布的东西不同。apache是html容器,功能像IIS一样,tomcat是jsp/servlet容器,用于发布JSP及JAVA的,类似的有IBM的webshere、EBA的Weblogic,sun的JRun等
打个比方:apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),tomcat就是一个桶(装像JAVA这样的水),而这个桶也可以不放在卡车上。
4:数据库锁
事务:ACID(原子性,一致性,隔离性,持久性)原子性指的是事务是数据库的逻辑工作单位,事务中操作要么都做,要么都不做;一致性指的是事务的执行结果必须是使数据库从一个一致性状态变大另一个一致性状态,一致性和原子性是密切相关的;隔离性指的是一个事务执行不能被其他事务干扰;持久性指的是一个事务一旦提交,他对数据库中数据的改变就是永久性的
悲观锁:悲观锁就是在读取数据的时候,为了不让别人修改自己读取的数据,就会先对自己读取的数据加锁,只有自己把数据读完了,才允许别人修改那部分数据--排它锁与共享锁
乐观锁:乐观锁认为一个用户读数据的时候,别人不会去写自己所读的数据
时间戳:时间戳就是在数据库表中单独加一列时间戳,比如“TimeStamp”,每次读出来的时候,把该字段也读出来,当写回去的时候,把该字段加1,
活锁:T1封锁了数据R,T2同时也请求封锁数据R,T3也请求封锁数据R,当T1释放了锁之后,T3会锁住R,T4也请求封锁R,则T2就会一直等待下去,这种处理方法就是采用“先来先服务”策略
死锁:T1封锁了数据R1,正请求对R2封锁,而T2封住了R2,正请求封锁R1,这样就会导致死锁
预防死锁:①一次封锁发,指的是一次性把所需要的数据全部封锁住,但是这样会扩大了封锁的范围,降低系统的并发度;②顺序封锁发,指的是事先对数据对象指定一个封锁顺序,要对数据进行封锁,只能按照规定的顺序来封锁,但是这个一般不大可能的。
判断:一是超时法,二是等待图法。超时法就是如果某个事物的等待时间超过指定时限,则判定为出现死锁;等待图法指的是如果事务等待图中出现了回路,则判断出现了死锁。对于解决死锁的方法,只能是撤销一个处理死锁代价最小的事务,释放此事务持有的所有锁,同时对撤销的事务所执行的数据修改操作必须加以恢复
表级锁又分为5类:
行共享 (ROW SHARE) – 禁止排他锁定表
行排他(ROW EXCLUSIVE) – 禁止使用排他锁和共享锁
共享锁(SHARE) - 锁定表,对记录只读不写,多个用户可以同时在同一个表上应用此锁
共享行排他(SHARE ROW EXCLUSIVE) – 比共享锁更多的限制,禁止使用共享锁及更高的锁
排他(EXCLUSIVE) – 限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表。
5:表数据很大,优化数据库方法
6:泛型利于性能优化吗
7:怎么防止页面爬虫
1:爬静态页的话用js动态页面写:
2:通过 robots.txt 文件屏蔽,可以说 robots.txt 文件是最重要的一种渠道(能和搜索引擎建立直接对话)。通过 meta tag 屏蔽,在所有的网页头部文件添加,添加如下语句:<meta name="robots" content="noindex, nofollow">。通过服务器(如:Linux/nginx )配置文件设置,直接过滤 spider/robots 的IP 段
8:数据库:优化
1:索引;2:分区 --垂直分区:功能更细化,分不同表 --水平分区,根据一些规则,列相同分为不同表(按地区)3:xml代替主从表设计
9:冒泡排序
10:http与https
11:网址访问量很大,页面怎么优化
12:string加一个变量,内存有几个对象
13:堆和栈
14:跨域

华为1面

1:设计接口考虑什么
2:后台数据多怎么优化
3:跟我讲要多看后台,java,数据库啊
4:模块
5用了什么框架

58

--vue前台,nodejs后台,上海浦东,主要是房产那块--子公司,培养有人带,南邮人多,公司氛围轻松,3个月考察

一面:
1:接口设计考虑什么
2:http缓存机制
3:node对并发怎么分配进程
强项:I/O密集型(异步操作,不影响后续执行),
因为I/O操作是由node的工作线程去执行的(nodejs底层的libuv是多线程的线程池用来并行io操作),且主线程是不需要等待结果返回的,只要发出指令马上就可以去忙其他事情了
弱项:CPU密集型(计算量大,主线程挂起)
多进程共享监听socket
Node.js与进程相关的模块有processchild_processcluster, 这其中cluster用于方便的创建共享端口的多进程模式(The cluster module allows you to easily create a network of processes that all share server ports),这种模式使多个进程间共享一个监听状态的socket,并由系统将accept的connection分配给不同的子进程
一般采用系统负载均衡,只要某个子进程的accept queue为空(通常为最后创建的那个子进程),系统就会将多个connection分配到同一个子进程上,这会造成进程间负载极为不均衡。特别是在使用长 连接的时候,单位时间内的new coming connection并不高,子进程的accept queue往往均为空,就会导致connection会不停的分配给同一个进程。所以这种负载均衡完全依赖于accept queue的空闲程度,只有在使用短连接,而且并发非常高的情况下,才能达到负载均衡,但是这个时候系统的load会非常高,系统也会变得不稳定起来。
express-cluster
4:wepack打包机制
二面:项目--女面试官被我感动了
三面:规划
以下是秋招。。。

中国电信IT研发中心

1面:
1. 继承, 寄生组合式继承
var inherit = function(o) { if(!typeof o === "object")return; function F () {} F.prototype = o; F.prototype.constructor = F; returnnew F(); };
util.inheritPrototype = function(subType, superType) { var _prototype = inherit( superType.prototype ); _prototype.constructor = subType; subType.prototype = _prototype; };
2.css从左到右实现,hover实现 效果是水平方向向左10px,0.4s完成
.moveleft:hover img{ -webkit-transition: transform 0.4s; -o-transition: transform 0.4s; transition: transform 0.4s; -webkit-transform: translateX(-10px); -ms-transform: translateX(-10px); -o-transform: translateX(-10px); transform: translateX(-10px); }
3.react生命周期,
整数和小数分别转换.
整数除以2,商继续除以2,得到0为止,将余数逆序排列.
22 / 2 11 余0
11/2 5 余 1
5 /2 2 余 1
2 /2 1 余 0
1 /2 0 余 1
所以22的二进制是10110
小数乘以2,取整,小数部分继续乘以2,取整,得到小数部分0为止,将整数顺序排列.
0.8125x2=1.625 取整1,小数部分是0.625
0.625x2=1.25 取整1,小数部分是0.25
0.25x2=0.5 取整0,小数部分是0.5
0.5x2=1.0 取整1,小数部分是0,结束
所以0.8125的二进制是0.1101
十进制22.8125等于二进制10110.1101
5.负数二进制,-1在计算机里用二进制表达就是全1
及正数二进制是原码,负数二进制是补码
6.小数相加
2.6+2.6+2.6=7.800000000001,JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制,这里就出现了第一次的误差。待小数都换算为二进制后,再进行二进制间的运算,得到二进制结果。然后再将二进制结果换算为十进制,这里通常会出现第二次的误差。
7.number几位,字符串,汉字几位
所有 JavaScript 数字均为 64 位,8字节
字符串,汉字几位
UTF-8英文1字节中文3字节
8. promise(resolve(),reject());外面调promise.then(),promise.catch()会出现什么
9node怎么知道当前环境:process.env.NODE_ENV
10.怎么匹配'.jpg'后缀路径

美团

1面-55分钟
1.eyelake项目里平铺与树与索引比较
2.阿里项目小程序坑怎么解决
3. typeof(undefined),null
4. 动画渐变延迟效果
5. 判断对象与数组里哪个相同算法
2面
聊人生,聊理想

腾讯

1面
1hasownproperty有什么问题,不知道
2怎么把arguments转为数组
3promise ajax,手写不对
4rem,em,vh,vw怎么用,vh不知道
5absolute,fixed,relative
6安全,xss与csrf,除了referer方法,不知道