时间 | 面试/笔试 | 结果 |
---|---|---|
7.18 | 字节提前批一面 | × |
7.22 | 字节提前批一面 | × |
8.3 | 字节提前批一面 | √ |
8.5 | 字节提前批二面 | × |
8.9 | 字节提前批一面 | × |
9.1 | 字节正式批一面 | × |
7.18 字节提前批一面
内容:
javascript
,css
,http
,vue
js
类型判断- 节点遍历
- 事件循环
- 盒模型
- box-sizing
- 前端调用
api
是用了浏览器的什么api
css
分栏布局:两侧固定宽度,中间自适应flex
布局httpRequest
怎么用- http 请求头
- 304 状态码
- 缓存有关的请求头
vue
:v-for
中key
的作用http
文件上传content-type
请求头和响应头promise
catch
- 盒模型
box-sizing
vue
的特性
1 | .div1 { |
总结:没复习,很多都忘了
7.22 字节提前批一面
内容:小程序,
javascript
,vue
, 算法题
- 为什么选择
h5
or 小程序 - 小程序和
h5
的区别在哪里? - 小程序是怎么调用
native
方法的 - 小程序双线程是怎么通信的
jsapi
是怎么调用native
方法的- 介绍一下
js
中事件循环 - 什么时候用宏任务,什么时候用微任务
- 自己实现一下兼容性比较好的
promise
vue
中vdom
的diff
算法,有何优化vue3
中做了什么优化?(双向数据流 &diff
算法)- 算法题:简单动态规划
总结:算法题生疏了;
javascript
中的代码题需加强
8.3 字节提前批一面
感觉还行?
- 蚂蚁实习做了什么
- bff, RPC 的了解
- 怎么做移动端适配
- 算法:反转二叉树(自顶向下递归,自底向上递归)
- 缓存
js
中的深拷贝和浅拷贝,深拷贝方法有哪些- http 和 https
- http 状态码
- 简述一下防抖,实现一下
- 在搜索框中多次搜索,怎么保证返回结果的有序性
- 怎么实现登陆
8.5 字节提前批二面
暴击😭😭😭
- 在蚂蚁实习做了什么
- 前端学习过程
css
动画有了解过吗css
伪类和伪元素- 怎么实现夜间模式
- less 和 sass 有了解过吗
- 说一下盒模型
z-index
不生效的情况- CPU 读取内存的过程
- 局域网(在 NAT 内)和公网之间的访问过程
js
的数据类型js
的内置对象类型js
创建一个没有原型的对象js
中使用new constructor()
创建对象底层发生了什么- 代码:事件总线有了解吗?自己实现一下
- 代码:阿拉伯数字 -> 中文
123 -> 一百二十三
,1003 -> 一千零三
- React 合成事件
- React 中
setState
的同步异步问题 - React hook 中
useLayout
有使用过吗 - 使用 React hook,每次进入页面后更改页面标题,
useTitle
? - http 各个版本的区别
8.9 字节提前批一面
抓着项目一直问。。。代码题给我考麻了
- 自我介绍
- 有挑战性的项目
- 项目中你负责什么呢
- 你觉得前端部分有挑战性的在哪里
- 怎么对前端做优化
- cdn 的原理
- 缓存有哪些
- 跨域是什么
- 前端安全问题
- http 和 https 的区别
- 说一下
Vue
- MVVM 模型和 MVC 模型的优劣
- 说一下小程序为什么体验比较好
js
中promise
,async
,await
的关系promise
怎么捕获异常js
异步,事件循环- h5 怎么调用 native api
- 代码:数组合并排序
- 代码:js 实现异步调度器 https://blog.csdn.net/weixin_37680520/article/details/108244727
9.1 字节正式批一面
- 实习期间做了什么?(这个没答好,感觉要事先准备一下)
- 实习期间做的最有难度的一件事是什么?亮点在哪?
- 埋点是怎么实现的?用户行为链路是怎么实现的?
- bff 网关介绍一下,是如何完成鉴权的?
Process.nextTick
的事件循环(node.js 的事件循环)- 闭包和
var
的理解1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21// 以下输出是什么?
for (let i = 0; i < 5; i++) {
setTimeout(() => console.log(i), 0);
}
for (var i = 0; i < 5; i++) {
(function() {
setTimeout(() => console.log(i), 0);
})();
}
for (var i = 0; i < 5; i++) {
(function(j) {
setTimeout(() => console.log(j), 0);
})(i);
}
// 0 1 2 3 4
// 5 5 5 5 5
// 0 1 2 3 4 - 说一下 http 三次握手?
syn
洪水攻击(DDOS 攻击)?和流量大崩溃有什么区别?什么时候需要消耗序列号?- http 状态码 307 308 401 是什么?
- 浏览器渲染的过程?composition 的过程?依据什么进行 composition ?
- 浏览器滚动时发生了什么?
- CSS 中 absolute 的理解
1
2
3
4
5
6
7
8
9
10
11
12<div class="app">
<div class="item" />
</div>
.item {
position: absolute;
top: 10px;
}
// 1. item 位置如何?
// 2. app 为 relative 时,item 位置如何?
// 3. app 为 relative, transform 时,item 位置如何? - 说一下 serverless 和 BFF 的区别
- CSS 中 fix 的理解
- 浏览器 GPU 加速是什么?
- 代码:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53// 实现一下大数相乘
function multiply (a, b) {
const len1 = a.length;
const len2 = b.length;
let res = [];
// 计算
for (let i = len1 - 1; i >= 0; i--) {
for (let j = len2 - 1; j >= 0; j--) {
const index1 = len1 - 1 - i;
const index2 = len2 - 1 - j;
const num1 = a[i];
const num2 = b[j];
const tmp = num1 * num2;
if (tmp < 10) {
res[index1 + index2]
= res[index1 + index2] ? res[index1 + index2] + tmp : tmp;
} else {
const tmp1 = tmp % 10;
const tmp2 = (tmp - tmp1) / 10;
res[index1 + index2]
= res[index1 + index2] ? res[index1 + index2] + tmp1 : tmp1;
res[index1 + index2 + 1]
= res[index1 + index2 + 1]
? res[index1 + index2 + 1] + tmp2
: tmp2;
}
}
}
// 进位处理
for (let i = 0; i < res.length - 1; i++) {
if (res[i] >= 10) {
res[i + 1]
= res[i + 1]
? (res[i] - res[i] % 10) / 10 + res[i + 1]
: (res[i] - res[i] % 10) / 10;
}
res[i] = res[i] % 10;
}
// 转化为字符串
let ret = '';
for (let i = res.length - 1; i >= 0; i--) {
ret += res[i];
}
return ret;
}
const res = multiply('2', '33');
console.log(res);