面了三家,都是走完流程了,收到字节口头offer,其他两家挂了。就打算去字节了。。。感谢各位师兄内推,虽然只拿到一个offer是我太菜了
个人情况
更新一下个人的情况,方便学弟学妹做参考。
个人大学没打过任何比赛,大一混了个院三等奖奖学金,简历非常简陋。大一大二沉迷西方哲学,甚至想过转专业,所以大二除了算法其他基本没学。大三开始看书和学前端,书的话对我有很大帮助的就两本,《计网自顶向下》和《OSTEP》,做的项目是坛主发起的华师大阅马活动管理系统,做了整个前端包括性能优化之类的,学到了不少东西。后面买了《JavaScript高级编程》把基础部分看完了,就差不多到暑期实习提前批的申请节点了。整个面试下来感觉自己基础是没问题,但是实践能力确实很弱,特别是前端部分,这也是接下来要重点补充的部分了。
腾讯
一面 2小时
自我介绍
项目如何优化
cos和cdn有什么区别
dns的原理说一下
js es6新特性
promise实现思路说一下
css 如何隐藏一个div
算法题大数相加 (作为一个大学三年只做了三道leetcode题的懒🐕,这道题我做了一个小时。。。面试官内心:看过算法导论就这?)
面完后吃个饭就显示一面过了
二面 一小时
自我介绍
项目
看了一眼我的项目,问我为什么在div里写段落,我说我用antd他内部封装是这样的
js await async题
this指向题
算法 求词频(哈希秒了)
二面后让我等一个星期,等了一个星期然后跟我说凉了。。。
阿里
一面 1小时
自我介绍
项目
说一下ssr原理
说一下tcp/ip协议栈(从http到tcp到ip到arp大概说了一遍,每层实现了什么功能,tcp的多路复用,可靠传输,流量控制,拥塞控制大概说了一遍)
说一下https(对等密钥,公钥,md5,mac,整个https的握手挥手流程我大概说了一遍)
说的比较完整,说一下公钥和对等密钥的区别吧(直接把rsa和块加密说了一遍,公钥比较费性能,一遍用来穿对等密钥)
react的diff算法原理是怎么样的
react生命周期
算法题
比较版本号(leetcode mid)
第二天通知二面
二面 半小时
自我介绍
项目说一下
vscode打开为什么比notepad快(????我说可能是用了按需加载)
按需加载那要搜索怎么办?(只加载不渲染)
逻辑题 11223344 1和1之间只能有一个数字 2和2之间只能有2个数字以此类推求排列
(直接枚举两分钟搞定)
算法题
atoi(number,base);
把任意进制的数转为十进制的数,这道题我拉了,因为是字符串,我连负数的情况都没有考虑。。。
过两天去官网看凉了。
字节
一面 一小时
自我介绍
项目
https说一下(同上)
不定宽水平垂直居中
function sayHi() {
console.log(name)
console.log(age)
var name = 'Tom'
let age = 21
}
sayHi()
this.a = "byte";
function A() {
this.a = "123";
}
A.prototype.a = "b";
A.prototype.log = function() {
console.log(this.a + 1);
}
window.a = "dance";
var o = new A();
var log = o.log;
o.log();
log();
实现一个 promiseify 方法,将 callback 风格调用转成 promise 调用方式
// 使用前
fs.readFile('1.txt', (err, data) => {
if (!err) {
console.log(data)
}
console.log(err)
})
// 使用promisify后
const readFile = promisify(fs.readFile)
readFile('1.txt')
.then(data => {
console.log(data)
})
.catch(err => {
console.log(err)
})
算法题
盘子里有 n 个 苹果,由于你的手比较小的原因,一次只能拿1个或2个,每次至少拿1个,请问有多少种拿法?
dp或斐波那契秒了
第二天hr打电话说过了
二面 二小时
自我介绍
项目
https用nginx怎么配置
原理说一下(同上)
dns说一下(同上)
用过webpack吗?loader和plugin区别说一下
下面的代码会输出什么?(异步流不能被同步catch,必须用异步方法处理)
try {
(async () => {
a(); // 会报错
})();
} catch(e) {
console.log(`执行出错:${e.message}`);
}
异步输出0 - 9的数字(每隔一秒输出一个),写出你能想到的一个最简洁的解法。(这个我看js高级程序设计看过居然没写出来,太可惜了,当时以为凉了)
因为是比较常考的题,这里简单放几个实现
//方法1:实现一个类似java里sleep方法
async function sleep(delay){
return new Promise(resolve=>setTimeout(resolve,delay))
}
async delayOutput(arr){
for(const i of arr){
console.log(i);
await sleep(1000);
}
}
//方法2: promise工厂函数
async function delayOutput(value,delay){
return new Promise(resolve=>{
console.log(value);
setTimeout(resolve,delay);
})
}
function output(arr){ arr.reduce((pm,i)=>pm.then(delayOutput(i,1000)),Promise.resolve());
}
如何解决应用发布页面之间影响的问题?比如:你只改了一个A页面,结果A页面跟B页面共用代码,如何防止应用发布后对B页面没有影响?
(????至今没懂,我估计是做解耦合,用发布订阅模式?应该问一下面试官的,那时候感觉凉了就忘记问了)
代码题
const url = 'https://bytedance.feishu.cn?foo=bar&a=b';
function urlSearchParse(url) {
// todo
}
returned {
foo: 'bar',
a: 'b'
}
Array.prototype.reduce
用split秒了
要求写成一行代码
用reduce最后硬生生写成一行代码,感觉自己以前从来没注意过代码的简洁性
第二天收到hr电话说过了二面
三面 一小时
听师兄说是部门老大,但是全程笑眯眯的,非常和蔼可亲的样子,他说你前面写了快十道题了,就不多做题了,再写一道
你是学校老师, 有n个学生; 某次考试后, 你让n个学生排成一排, 按照他们的分数来给予奖励; 奖励为发送糖果, 每个孩子至少会得到一个糖果; 另外如果某个孩子发现他的分数比相邻同学分数高, 但是糖果却不比他们多, 便会不开心; 你需要用最少的糖果来让所有孩子都开心; example: 分数为 80 90 99 80 70: 那糖果最少给1+2+3+2+1 = 9
想了一会,先排序,然后排成中间分数最高向两边递减,然后每个人先给一颗糖,循环检查是否有不满意的小朋友,有的话给他补糖
从想到写用了30分钟,面试官说不用紧张慢慢写
问项目
项目有什么难处
面试官看时间差不多了就说没问题了
吃个饭晚上hr打电话说过了,准备hr面
hr面 半小时
和小姐姐聊天
为什么学前端
前端难处是什么
前端有趣的地方是什么
为什么要学js
如何选择就业地点
将来想做哪个方向
晚上hr加了我微信,说offer在申请中了,好开心
面试总结
- 主要考察基础和js和框架和算法
- 基础计网操作系统算法推荐几本书:《计网:自顶向下方法》《OSTEP》《算法导论》看完基本没问题了
- js的话《JavaScript高级程序设计(第四版)》或者犀牛书新出的最新版本
- react
- 算法的话要多刷题,我这方面非常薄弱,不是没思路而是写的太少了,现在在疯狂刷题中
面试的话建议多投多面,每次面试都能找到自己薄弱的点,然后去补
自信很重要,字节二面我因为两道题没答出来后面差点没状态了,但是其实还是可以过的
找一个安静的地方面试!