一面
- 自我介绍
- 线程、进程的区别,JS为什么是单线程的
- HTTP与HTTPS的区别,HTTPS解决了哪些安全性问题
- 算法题:二叉树遍历有哪些方法?写出层序遍历
- 节流与防抖的区别?写一个节流函数
- Vue的数据双向绑定
- 算法题:岛屿的周长
给定一个矩阵。矩阵的每个元素都是边长为 1 的正方形,值为 1 表示陆地,值为 0 表示海洋。
相邻(上下左右)的陆地格子连成一个岛屿。
假设矩阵中只有唯一的 1 个岛屿,求该岛屿的周长。
例子:
输入:grid = [
[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]
]
输出:16
输入:grid = [
[0,0,0,0],
[0,1,0,0],
[0,0,0,0],
[0,0,0,0]
]
答案:
function solve(grid) {
let count = 0;
let mianji = 0;
grid.forEach((item, i) => {
item.forEach((col, j) => {
if(col === 1) {
let up = i - 1;
let left = j - 1;
if(up >= 0 && grid[up][j] === 1) {
count++;
}
if(left >= 0 && grid[i][left] === 1) {
count++;
}
mianji++;
}
})
})
return mianji * 4 - count * 2;
}
该团队技术栈: React TypeScript Node.js Golang
二面(交叉面)
- 自我介绍
- ES5实现数组去重(问时间复杂度,以及我用到的indexOf方法底层的时间复杂度)
- 并发控制,实现一个dispatch(arr, n)方法,arr是一个Promise构造器promiseG的数组,promiseG()执行会返回一个Promise,需要保证同时最多有n个promise在执行,不需要考虑返回的问题,类似浏览器并发请求的控制
- 链表折叠返回,1->2->3->4->5->6 返回 1->6->2->5->3->4
- 项目中遇到的难点
- 写一个类似百度的搜索框需要注意哪些问题
- 逻辑题:在岛上有100只老虎和1只羊,老虎可以吃草,但他们更愿意吃羊。 假设:A:每次只有一只老虎可以吃羊,而且一旦他吃了羊,他自己就变成羊。B:所有的老虎都是聪明而且完全理性的,他们的第一要务是生存,再能吃羊的时候,不介意自己变成羊。问最后这只羊会不会被吃?如果是n只老虎和一只羊呢?(偶数只老虎不会吃,奇数只老虎会吃变成偶数)