字节跳动前端实习,一面、二面
前言
楼主大三
自我感觉:一面怕是会挂,结果进了二面,二面面完感觉嗨行,面试官说会有三面通知的,结果等了一天的寂寞,呜呜没有电话...
面的是抖音,
字节跳动真的是我的第一意愿了!
呜呜呜,我这么喜欢它,它还演我....
一面
时间:2020.12.23
Q1:同学,同学,你能听到我说话吗
- A:我赶紧调设备,嘤嘤嘤啥情况,为啥听不到面试官的声音....结果好像是面试官的设备有点问题,他换了两台电脑,然后正常了
Q2:说一下项目叭,你做了什么内容,负责的什么模块
- A:云云云
Q3: cookie和session的区别?
A:云云云....
cookie数据存放在客户端浏览器上,session数据存放在服务器上。
cookie只能存储ASCII码字符串,session则可以存储任何类型的数据
cookie不安全,session比较安全
session在一定时间内保存在服务器上,当访问增多,会比较占用服务器性能
Q4: 如何进行CORS跨域的?
A:云云云,服务端必须设置 Access-Control-Allow-Origin响应头字段,CORS 有两种类型的请求:一种是简单请求(simple request),一种是复杂请求(preflight request)。
Q5: TCP位于哪一层呢?它的主要的应用场景?
Q6: TCP 的可靠运输机制,流量控制机制,拥塞控制机制?
Q7: HTTP是基于什么协议的?
Q8: OSI的七层协议和五层网络架构?
Q9: BFC的触发条件?
Q10: 写一个两栏布局?(一栏自适应,一栏固定长度)
Q11: 清除浮动的方法?为什么要清除浮动
Q12: 外边距合并-父盒子塌陷?
Q13: js的数据类型?堆、栈...
云云云
Q14: 继承...
可以手写一个寄生组合式继承吗?
Q15: new的过程
四步:
- 首先创建了一个新的空对象
- 设置了原型,将对象的原型设置称为函数的prototype对象
- 让函数的this指向了这个对象,指向构造函数的代码(为这个新对象添加了新属性)
- 判读函数的返回值类型,如果是值的类型,返回创建的对象;如果是引用类型,返回引用类型的对象
Q16: 事件冒泡与事件捕获
Q17: 事件委托的原理
Q18: 看题
const event = new Event();
event.on('test', () => {});
event.emit('test');
event.once('once', () => {});
event.off('test');我不知道我理解的对不对,各位大佬也可以分享下你们的答案嗷!但我觉得面试官是想要让我实现一个发布订阅模式
话不多说,上代码:
class Event {
constructor() {
this.handlers = {}
}
on(eventName, callback) { //监听事件,触发时调用callback函数
const eventCallbackStack = this._getHandler(eventName).callbackStack
eventCallbackStack.push(callback)
}
emit(eventName, ...args) { //触发事件,并把参数传给事件的处理函数
if(this.handlers[eventName]) {
this.handlers[eventName].callbackStack.forEach(cb => {
// 修正this指向
cb.call(cb, ...args)
})
// 移除once事件
if(this.handlers[eventName].isOnce) {
this.off(eventName)
}
}
}
once(eventName, callback) {//为事件注册单次监听器
const eventCallbackStack = this._getHandler(eventName, true).callbackStack
eventCallbackStack.push(callback)
}
off(eventName) { // 停止监听事件
this.handlers[eventName] && delete this.handlers[eventName]
}
_getHandler(eventName, isOnce = false){
if(!this.handlers[eventName]) {
this.handlers[eventName] = {
isOnce,
callbackStack: [],
}
}
return this.handlers[eventName]
}
}
//测试一波~
const event = new Event()
console.log('注册test事件')
event.on('test', () => {
console.log('监听到test');
}
)
event.emit('test');
console.log('注册once事件');
event.once('once', () => {
console.log('监听到once');
});
event.emit('once');
event.off('test');
console.log('再次触发test事件');
event.emit('test');
在控制台输出一波~o( ̄▽ ̄)d
看一道关于树的题目,手敲出来
const tree = {
name: '1',
children: [
{
name: '1.1',
children: [
{ name: '1.1.1' },
{ name: '1.1.2' }
]
},
{
name: '1.2',
children: [
{ name: '1.2.1' },
{ name: '1.2.2' }
]
}
]
}
/**
* 深度优先搜索算法
* @param {Tree} tree 树
* @param {string} name 查找的项
* @return {TreeNode | null} 对应的项相对的节点
*/
function dfs(tree = {}, name = ''){}
## 二面
呜呜呜呜,等我睡一告再起来写!!!!然后把答案补上
#实习##面经##字节跳动##前端工程师#
凡岛公司福利 520人发布
查看16道真题和解析