Rychou'blog

春招面试

2019-03-14

除了阿里一面记录比较详细,其他主要记录在面试过程中不会的问题

阿里零售通

一面

  • 讲讲最近项目经历
  • http请求过程
  • http多路复用是从哪个版本开始的
  • http 304 404 500 状态码表示的含义
  • 讲讲浏览器缓存
  • 看你github上的star还挺多的,介绍一下吧。
  • 小程序和Web开发的区别
  • 你有上线的小程序嘛,介绍一下。
  • 你如何实现“在书云”扫码录入图书的,接口是自己写的吗?如何绕过豆瓣接口对小程序的请求限制?除了目前的方案有没有更好的方案?
  • 对ES6有了解吧?讲讲let和const,遍历数组有几种方式
  • 讲讲对Redux的理解
  • 开放题:1. 如果让你做一个可以供学生查询成绩的应用(成绩已经录入数据库),你打算怎么做。2. SQL查询 3. 未来前端规划

二面

  • 10万个点,如何渲染到地图,前端可视化基础
  • react 生命周期
  • react-router 不用hash 实现单页应用中改变路由页面不刷新
  • nodejs

意见与建议

  • 定期系统复习知识

笔试

二面结束后两个小时后面试官就找我笔试了,给的时间是1个小时,我40分钟左右就都做完了,后来一直纠结在第四题。后来面试官给我15分钟优化,我也纠结在第四题。。。最后也没优化到。。。。有点虚。

题目1:请为 Common 类编写一个 getType 方法,能够识别出不同的数据类型,请用原生 js(ES6) 实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const A = [1, 2];
const B = "String";
const C = /[\w]/g;
const D = new Date();
const E = new Error("something wrong");

console.log(Common.getType(A)); // array
console.log(Common.getType(B)); // string
console.log(Common.getType(C)); // regexp
console.log(Common.getType(D)); // date
console.log(Common.getType(E)); // error

// 以下为回答
class Common{
getType(x){
const temp = Object.prototype.toString.call(x).split('');
temp.pop();
return temp.slice(8).join('').toLowerCase();
}
}

// 优化后的答案
class Common{
getType(x){
/*
* 笔试时不知道string也能slice,其次对于slice的方法掌握不透彻,不知道slice(8,-1)的-1指向倒数第二个元素
*/
return Object.prototype.toString.call(x).slice(8,-1).toLowerCase();
}
}

题目2:在文档流中存在一个元素 id 为 test, 除去点击 test 元素,点击文档流中的任何一个元素让 test 元素隐藏,请用原生 js(ES5) 实现

1
2
3
4
5
window.addEventListener('click',function(e){
if(e.target.id !== 'test'){
document.getElementById('test').style.visibility = 'hidden';// display:none 会引起reflow
}
},false)

题目3:如图可见区域container的总宽度为100%,内部有三个 div,column1宽度是400px,column2和 column3宽度相同。请补充CSS3来实现基于以下dom结构的布局。

已知的Dom结构:

1
2
3
4
5
<div class="container">
<div class="column">column1</div>
<div class="column">column2</div>
<div class="column">column3</div>
</div>

回答:

1
2
3
4
5
6
7
8
9
10
11
12
.container{
display: flex;
}
.column:nth-child(1){
width: 400px
}
.column{
background: red;
}
.column:nth-child(2), .column:last-child{
flex-grow: 1;
}

题目4: 给 Array 对象增加一个原型方法,用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function removeMultiple(){
let arr = this;
let temp = [];
let result = [];
for(let i=0; i<arr.length;i++){
if(!(arr[i] in temp)){
temp.push(arr[i])
}else{
result.push(arr[i])
}
}
return result;
}

Array.prototype.removeMultiple = removeMultiple

腾讯IEG

一面

  • 渲染树渲染效率优化
  • XSS与CSRF
  • 5层/7层协议栈
  • React性能优化相关
  • Js new 与 Java new的区别
  • 如何实现两台机器两个浏览器,一个在页面画画,另一个页面同步显示

意见与建议

  • 后端知识也要学习
  • 理论不错,需要配合实践

腾讯PCG

一面

  • 如何实现继承
  • Websocket
  • 快排
  • XSS与CSRF的区别
  • 301和302状态码

意见与建议

  • 基础算法知识
  • 总结能力待提高
Tags: 面试
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏