面试时间: 2021年6月21日
一面
1、CSS选择器有哪些、优先级如何
注意一下兄弟、父子选择器的优先级
2、position有哪些取值?absolute和fixed的区别
3、说一下移动端viewport
4、Vue的响应式原理,以及为什么不能检测到对象、数组内部的变化,应该如何处理
创建Vue实例时,将data中所有property遍历,通过Object.defineProperty设置getter、setter,通过观察者模式(watcher),在调用setter时(修改数据时),通知依赖更新
5、改错题:
下面代码存在一些问题,请指出问题并改正
var coder = {
name: " jsCoder",
skill: ["css3","html5", "es6", "react", "angular", "vue"],
say: function () {
for(var i = 0, len = this.skill.length; i< len; i++){
setTimeout(function(){
console.log("No." + i + this.name);
console.log(this.skill[i]);
console.log('--------------------------');
},1000);
}
}
}
coder.say();
//以下为预期输出
No.1 jsCoder
css3
--------------------------
No.2 jsCoder
html5
--------------------------
No.3 jsCoder
es6
--------------------------
No.4 jsCoder
react
--------------------------
No.5 jsCoder
angular
--------------------------
No.6 jsCoder
vue
- this指向问题。settimeout中的this是直接指向window的,这样访问不到对象的属性
- 宏任务问题。settimeout是宏任务,所以每次for循环中并不会直接执行,而是在for循环结束后才执行。此时,已经 i = len-1 了,所以输出的所有 i 都为len - 1
- i 的初始值问题。i 应该初始化为1才能达到预期输出。
6、实现函数
实现如下函数add,使如下执行都等于9
add(2,3,4)=9
add(2)(3,4)=9
add(2)(3)(4)=9
add(2,3)(4)=9
函数柯里化思想。该题关键在于参数长度要为3。
7、算法题
给定一个字符串,请你找出其中不含有重复字符的 最长子串(substring) 的长度。
滑动窗口思想
二面
1、实现函数
压缩字符串
‘aaaaaabbbbbcccceee’ => ‘a6b5c4e3’
‘aaaaaabbaaa’ => ‘a6b2a3’
2、浏览器发出请求到显示页面,经历了什么
这题让你说的越详细越好,考察整个前端知识体系吧
3、三次握手、四次挥手
4、HTTP不同版本特点
5、算法题
给定一个由’1’(陆地)和’0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:
输入:
[
[1,1,1,1,0],
[1,1,0,1,0],
[1,1,0,0,0],
[0,0,0,0,0],
]
输出: 1
示例 2:
输入:
[
[1,1,0,0,0],
[1,1,0,0,0],
[0,0,1,0,0],
[0,0,0,1,1],
]
输出: 3
6、组件封装的看法,如果封装搜索功能需要考虑哪些功能
我的回答是,搜索功能可能会考虑一些 判空情况、过滤脚本字符串、长度限制、是否实时显示搜索结果(基于@input事件或@confitm事件)、如果基于@input的话还需要考虑防抖,然后让我实现一个防抖函数。
三面
三面挺特殊的,一开始聊了会天,得知面试官在国外,并且是java工程师,因为面试官不够了就让他来面。之后就直接上算法题了。
题目不是直接给到牛客,所以我凭印象复述一下。
给定一个二维数组路径,其中数组路径中0为起点或终点,1为路径,2为墙壁,给出起点到终点的最短路径。
给题后问我有思路吗?
应该是DFS算法吧
那时间复杂度是多少呢?
emm(不会)
那你先实现一下吧
最后没完全实现出来,就实现了一个DFS
面试官人很好 说差不多了,然后问我有什么问题问他
我问了问部门职责什么的
结果:
之后看到校招官网上进度是绿色的面试已完成,看牛客上说这样是面试过了。结果几天后晚上正在操场散步接到HR电话,说很遗憾…
心情复杂
面试总结
在一些理论知识方面,如http协议、浏览器请求过程、渲染过程等模块,需要应试者成体系的掌握这些过程。在实践编码方面,字节确实重视算法,而且需要你手动实现,这就需要我们花时间去理解一些算法思想(还是坚持刷LeetCode吧)以及有夯实的coding功底(临场不乱的思路)了