赞
踩
大概在去年11月份的时候,我负责的业务线一直做不出成绩。而且整个公司的前端技术设施,都是我一手搭建出来的,再待在公司,没什么可成长的空间,就想跳槽了,期间考虑了几个可能性:
出国工作:这个想法来源,主要是看了某位网友肉身出国到新加坡的虾皮到新加坡打工两个月的经历分享,觉得挺有意思,也想尝试下,后面投了一些跨国企业,没啥反馈,估计是卡学历,所以就放弃了,后面再想想弥补外语的可能性
进入大厂:很多大厂都卡学历,即使是内推,也会被卡面试流程,我被小红书、京东、腾讯、美团,拼多多、虾皮、携程、喜马拉雅卡学历和卡面试进程,所以,能选择的大厂很少,最终入职了 B站
热身阶段(11月下旬 - 12月中旬)
正式阶段(12月下旬 - 2月下旬)
11月 - 2月 一直在陆陆续续准备,持续了 3 个月,主要是准备复习、复盘、刷算法
从开始面试,到入职,差不多 3 个月时间
主要准备了以下几个方面:
这块没啥好说的,把各大社区各位大神经常分享的一些文章看了下,再就是针对计算机基础知识和网络基础知识,做了一些总结,大概看了下面这些文章:
刷了下基本会手写的面试题以及再把面试过程中遇到的手写题总结下,基本上都还好
算法这块不是我的长项,基本没接触,主要是把 LeetCode 热题 HOT 100,Easy 难度简单刷了下,针对大厂频出的算法题,看不懂的,就背答案,比如经典的反转二叉树、任意两个数的和等于 Target、反转单向链表等
后面根据一些面经和文档,比如:前端年后面试真题,会80%直接进大厂副本,做了一些针对性地练习和巩固
React 部分复习了 setState原理、 diff 原理,深入了 hooks 和 fiber 原理,当然这里的深入不是去读源码,因为时间来不及,而是参考了比较多的文章:
Mobx 由于我日常使用比较多的,也被面试官深入问过,就自己搭建过前端脚手架和看了下 React 进阶实践指南里面有一篇讲了 Mobx。主要了解框架的主体逻辑、响应式原理、依赖收集的实现
此外也总结了一下 Redux 和 Mobx 的特点,因为面试官大概率会问:Redux 和 Mobx 的区别?
由于本人经常会写播客,这点在投递简历的时候,是非常大的一个加分项,在多个技术社区有同名账号,经常发表一些文章,会受到面试官的青睐,我最近的面试,都有被面试官提到,你的博客写的不错,而且面试官也会从你的博客中来提问你,我就被问到以下问题:
这些问题,我都在博客上记录了,所以都是信手拈来
前期热身的时候,准备内容的结构化不足,遇到有些没有准备到的问题,临场思考和组织,或者一遍表述一遍思考,导致表达的结构性和连续性较差,表现上就是重点不够、啰嗦、回答不上
解决:针对几大类问题梳理了整体的思维导图,表达的时候,跟进面试官的侧重点,挑选关键点进行结构
化表达
当面试官聊到过往短板问题或者低谷经历时,一开始的回答有点浮于表面,并且有一些规避的回答,受到了面试官的质疑
解决:认真、客观地重新梳理了对应的问题,从主观、客观层面进行重新组织语言进行回答
字节面的感觉还可以,第二天就挂了,很难受,心态有点蹦
七牛云三面完之后,我等了一周左右,没给我反馈,我一直在推进,包括联系三面的面试官,询问结果,就是不给反馈,挂了也没任何反馈
当时手头上只有掌门一对一的 offer ,掌门一对一,HR 在催我入职, B站和网易严选还没有面完,无法拒绝,很纠结,当时做的选择就是,先入职掌门一对一,哪会儿中通联系上我,我就再面了一个中通,拿到了中通的 offer,然后再等B站和严选的流程了,自己对严选是非常意向的,但严选终面完还是被挂,就很头疼,在面严选的过程,B站正式 offer 发了,只能选择B站
面试的 4 个环节:简历准备 - 投递策略 - 面试和复盘 - offer 谈判和选择
跳槽是一项心力、体力、脑力都必须在线的活动
也欢迎大家关注我的博客
css 重绘和重排如何理解
下面宽高各是多少
<style>
.box {
width: 100px;
height: 100px;
padding: 10px;
margin: 10px;
background-color: #f00;
box-sizing: content-box;
}
</style>
<body>
<div class="box">12312312</div>
</body>
<style>
.test {
margin: 20px;
}
</style>
<body>
<div>
<span class="test"></span>
</div>
</body>
为什么 marign 0 auto
无法垂直居中
控制 z-index 的规则有哪些
元素替换概念有了解吗?
移动端 1px 像素如何解决?
一个元素隐藏有几种方式?
讲讲 BFC
css 选择器
display 有哪些属性
三列布局如何实现
css 栅格布局
flex: 0 1 auto 的含义
css 如何实现一个正方形盒子(随父元素)自适应
js 有哪些基本数据类型
讲讲闭包是什么?
var、let、const 的区别
es5 如何实现继承
es6 有哪些新的特性
map 和 waekMap 的区别
js 中 this 指向
讲讲 setTimeout 和 setInterval 的差异
用过函数节流和防抖吗?
localStorage, sessionStorage, Cookie 之间的区别
下面输出结果是什么?
var count = 100;
var obj = {
count: 200,
getCount: function() {
console.log(this.count);
}
}
const c = obj.getCount;
obj.getCount();
c();
var obj1 = { a: 100 };
var obj2 = Object.assign({}, obj1);
var obj3 = obj2;
obj3.a = 200;
console.log(obj1);
console.log(obj2);
var p1 = new Promise((resolve) => {
resolve(1);
});
var p2 = new Promise((resolve) => {
setTimeout(() => {
resolve(2);
}, 0);
});
var p3 = new Promise((resolve) => {
resolve(3);
});
Promise.all([p1, p2, p3]).then((res) => {
console.log(res);
});
async function promise2() {
function p1() {
return new Promise((resolve) => {
resolve(1);
});
}
function p2() {
return new Promise((resolve, reject) => {
reject(2);
});
}
function p3() {
return new Promise((resolve, reject) => {
resolve(3);
});
}
try {
var p11 = await p1();
var p22 = await p2();
var p33 = await p3();
console.log(p11);
console.log(p22);
console.log(p33);
} catch(e) {};
}
请描述下 new 的执行原理
为什么 Object.prototype.toString.call 可以判断出变量,而不是通过 Object.toString.call ?
讲讲 gc 原理
js 如何解决数值精度问题
讲讲事件循环
浏览器缓存原理
单页应用如何提高加载速度?
讲讲 fiber 架构
讲讲对 diff 的理解
讲讲对 hooks 的理解
讲讲 class 生命周期
setState 原理
hooks 为何有一些规则使用条件
聊聊 react 事件机制原理
讲讲 useCallBack 和 useMemo 的区别
讲讲 useRef 和 ref 的区别
react 组件传递状态有哪几种方式
mobx 原理
redux 原理
mobx 和 redux 的区别
函数式组件特点,和 hoc 区别
讲讲 redux 中间件
taro 源码如何实现的?
taro 2.x 和 taro 3 最大区别是什么?
微信小程序原理是什么?
聊聊 vite 和 webpack 的区别
模块化有了解吗,讲讲 import 和 require 的区别?
webpack 的原理
谈谈摇树的概念
webpack 热更新机制原理
vite 原理是什么?
如何实现一个深 copy
实现一个 new
柯里话函数的实现
实现一个函数 calc
function calc() {
}
实现一个 apply
针对深 Copy,变种的题目
实现一个 ajax
function ajax(options) { }
repeat(func, inteval, times){ … }
const r = repeat(repeatPrint, 10, 10);
// 例如:[10,21,0,-7,35,7,9,23,18] 输出索引 5, 数值 7 最小
function getIndex(arr) {
let index = null;
...
return index;
}
const list = [1, 2, 5]
const square = num => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(num * num)
}, 1000)
})
}
function test() {
list.forEach(async x => {
const res = await square(x)
console.log(res)
})
}
test()
var array = [
{pid: 4, id: 6617, name: "a",subNode:[]},
{pid: 5, id: 666, name: "a",subNode:[]},
{pid: 4, id: 6616, name: "a",subNode:[]},
{pid: 6616, id: 66161, name: "a",subNode:[]},
{pid: -1, id: 0, name: "a",subNode:[]},
{pid: 0, id: 4, name: "a",subNode:[]},
{pid: 0, id: 5, name: "a",subNode:[]},
{pid: 4, id: 10, name: "a",subNode:[]},
{pid: 10, id: 451, name: "a",subNode:[]},
{pid: 0, id: 98, name: "a",subNode:[]},
{pid: 98, id: 23, name: "a",subNode:[]},
{pid: 98, id: 523, name: "a",subNode:[]}
];
var toTree = function(tarArray) { }
toTree(array);
实现一个反转二叉树
一个迷宫,最短路径生成
实现单向链表反转
实际场景算法题
twoSum 得到两个数的之后等于 target
聊聊业务上的事
聊聊最复杂的业务如何处理的
如何做性能优化
聊聊前端脚手架
带团队中有哪些难点
聊聊迭代流程
Git 如何覆盖某次 commit
长列表滚动,你怎么优化的
印象中最深的一件事
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。