一、投递信息
投递时间:2020年4月3日
部门:阿里云数据库产品与事业部
岗位:前端开发工程师
工作地点:北京
信息来源:微信群
面试时间:2020年4月9日晚上19:00
面试方式:电话面试+笔试
面试时长:1小时23分钟
二、面试官问题
- 自我介绍
- 你对前端是感兴趣并且想往这方面发展是吗?
- 介绍圈存机项目以及遇到的困难,怎么解决的?
- 介绍韵律助手小程序以及背景是什么?
- 小程序底层原理
- 遇到问题怎么解决?
- HTML5的新特性
- localStorage
- 第一次访问有引导页,下一次访问引导页不出现,就是关闭引导页,怎么实现?
- flexbox
- call、apply、bind
- 学习新知识的渠道
- 你看是书是纸质书还是电子书?
- 你说一个你周边的你觉得最成功的人的案例,说一下你最欣赏她的哪写方面?
- 笔试1
/**评测题目: 请用尽可能多的方法实现一个圣杯布局-**/
/**三栏布局,main在中间显示,但HTML结构中Main在最前面**/
<style>
.container{
display: flex;
margin: auto;
}
.main{
float
}
</style>
<div class="container">
<div class="main"></div>
<div class="sub"></div>
<div class="extra"></div>
</div>
- 笔试2
// 1. 具备 on 方法绑定事件
// 2. 具备 off 方法解绑事件
function EventEmitter () {
// TODO
const listeners = [];
on : function(eventName, callback){
//要保存eventName这个事件和callback这个回调
listeners.push({eventName, callback});
}
off : function(eventName) {
//不再保存eventName这个事件
listeners.pop({eventName});
}
trigger: function(eventToTrigger) {
//循环已经注册的所有监听,判断与eventToTrigger匹配的事件,并执行对应的callback
listeners.forEach(listener=>{
if (listener.eventName === eventToTrigger) {
if (listener.callback) {
listener.callback(eventToTrigger)
}
}
})
}
}
var emitter = EventEmitter();
emitter.on('foo', function(e){
console.log('listening foo event 1', e);
});
emitter.on('foo', function(e){
console.log('listening foo event 2', e);
});
emitter.on('bar', function(e){
console.log('listening bar event', e);
});
// 监听全部事件
emitter.on('*', function(e){
console.log('listening all events');
});
emitter.trigger('foo', {name : 'John'});
emitter.trigger('bar', {name : 'Sun'});
emitter.trigger('*', {name : 'Sun'});
emitter.off('foo');