面试 集合

avatarplhDigital nomad

阿里 外包

阿里的同学真给力,长达50分钟的电话初面。

hr: 你好,我是阿里的,说说你现在工作内容吧。 我: 我现在在做公司后台系统,用vue重构,同时做小程序。

hr: 你在做的过程中,遇到的难题,克服的困难。 我: 小程序商品详情页面有个弹框,我负责实现他的功能,让他在同时满足3个条件的情况下弹出,(这不是我的店铺,我第一次进到商品详情页面,我有店铺可以回去)才弹出该弹框。

hr: 嗯嗯,还有呢? 我: 公司业务做得少。(本来想说上家公司的那个webpack分批打包业务的。有点捉急mmp)说个自己的项目吧,最近有做一个围住神经猫的小游戏,遇到的困难自然是A算法,路径问题,……%¥&……

hr: 这个用库就可以了,网络上一堆,我想问的是,你做的东西对公司有什么帮助,你能不能说一些和公司业务相关的东西。这个问题就算了,你说一下,现在有一个数组,用一个函数就可以得到他的所有名字 我: arr.filter(e=>e.name==='peng').map(e=>e.name); O(1)复杂度吧。 hr: 用一个函数就做到它。 我: 不会,只能用两个。答案如下。。。

var arr = [
	{name:'xiaoming',id:"123"},
	{name:'xiaoming',id:"456"},
	{name:'xiaoming',id:"789"},
	{name:'xiaohua',id:"101112"},
	{name:'xiaowang',id:"131415"},
	{name:'xiaohong',id:"161718"}
];
res = arr.filter(e=>e.name==='xiaoming').reduce((all,e)=>{
	return {name: 'xiaoming',id:[...all.id , e.id]}
},{name:'xiaoming',id:[]})
console.log(res);

hr: 看过你写的 #8 这个issue,35条网络优化建议,你有哪些在公司这里用过。

我: 三级域名 api.vmei.com, static.vmei.com这种,静态资源设置缓存,同时静态资源不携带cookie,可以加速访问静态资源。开启http2,加速网络资源。

hr: 说一下http2与http1的区别.

我: http2采用二进制数据输送,比http1快很多,可以实现资源传输的优先级顺序,实现先加载css,再加载js,http2可以开启google那个加速模块。

http2开启了线路复用, 即可以共享连接,他是之前Google加速模块SPDY的升级版,采用二进制传输,有更强健壮性。header的压缩,服务端推送。有请求优先级别选择。

hr: 还有呢?你为什么开http2?

我: 因为看到京东也开了http2,所以我也开。

hr: 那你知道我们公司都没有全部开启https,你知道为什么么?你都没有去理解其中的原理,就跟风。。那你说一下http2如何开启吧,

我: 先开https,要有一个证书,用的let encrypt.

hr: https和http区别,以及你为什么要用https

我: 中间套一层tcl或者ssl加密层,对数据加密,https更加安全。其实翻墙也是同样的原理,中间套一层ssl加密,让防火墙无法识别数据,从而达到防火墙无法过滤信息的目的。

这个真说错了,shadowsock是基于socket5协议来做的,只不过搬瓦工刚好占用了443端口而让你误以为是https.

hr: 大概说说react的生命周期。以及ajax函数放在生命周期那个阶段最好。

我; 大概分为三部分 生成组件,挂在组件,销毁组件,以及一些componentwillReciveProp,shouldcomponentupdate之类的吧。ajax请求自然是放在created里面最好,放在组件生成的阶段。

hr: 你说的是vue吧,算了setState也懒得问你了。

😰尴尬的一b,其实是应该放在componentDidMount,因为真实Dom还没挂载,无法实现ajax请求,太久没做,忘光了。

hr: 如何防止this作用域紊乱。

我: 箭头函数内部没有this,所以多用箭头函数,bind也可以改变this指向。

hr: 说说webpack如何进行性能优化吧,在原有脚手架基础上。

我: 我觉得vue-cli已经做的非常好了,没有优化必要。我用的webpack3-4,从我接触到webpack的时候就已经 是webpack3了,

hr: 这个肯定是有的,最优配置都是自己做出来的。像我们公司从前的webpack打包要6分钟,现在我们优化到只要 1分钟,我们从1-4一直在做优化,我们自己有研发一个happypack的wepback打包插件,极限提速,666,顺带案例自己的库一波(mmp,10秒jsp编译过程我都嫌久了,真的没做过复杂项目呢。)

hr: 你说说vue-cli脚手架内部实现原理吧,

我: 首先自然是 merge(webpack.base + prod + dev)(居然不问我webpack/babel/vscode插件怎么写。外包还没到这个级别吧。又也许是知道我不会,懒得问直接跳过)

hr: 项目测试用的什么

我: eslint+vscode

hr: 如何禁止不符合eslint规范的代码被提交,

我: 当然是用自定义的命令咯,内部调用node,然后调用eslint对代码进行检查,错误数量>0则不执行git add .的代码咯,


小店铺 - SEE

面试官很nice...无论是深度还是广度,都面面俱到...离开的时候觉得没啥好说的,到宿舍再想想,面试官真的很棒.

页面优化

cdn加速,静态资源压缩, 接口数据持久化. css只发生重绘不要重排,

跨域的几种几种实现方式

nginx / nodejs代理服务器 服务端头部添加'header('Access-Control-Allow-Origin:*')'即可接受所有... jsonp....

很明显我说错了一半以上,但是面试官也不戳破....

科里化函数的实现....

mark,后面再补...

react 中的纯组件与class extends Component {}定义的组件的区别...

不会...

原生js实现一个promise.....

我不会.....

nodejs Express实现模型..... 以及和koa的区别...

express通过回调函数,洋葱模型,,,

beforeCallback()
content()
afterCallback()

koa才是洋葱模型,express不是啊,,...

很明显我又说错了...koa才是洋葱模型, express是啥,我也不清楚...

除了koa,其他python ,go,java, php会不会...

不会..

docker 会么,

会一点,docker分层, repository image container, 说具体怎么用吧, 通过exec可以进入到image快照里面,就像linux系统, attach 和 exec 的区别知道么,,, 不知道....

好吧,面试官非常自信,走的时候,连还有什么你知道的,但我没有问到的么?都不用问了,知识点十分全面,好吧,是我太菜....多参加高水平公司的技术面试是否能提高个人水平,查漏补缺......?