一面
上来先是四道编程题。下面附加我当时写的代码(可能有错误,欢迎指出~)面试过程中主要还是考查编程思维吧
- 给定一个整数数组,判断是否存在重复元素
如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false
示例 1:
输入: [1,2,3,1]
输出: true
示例 2:
输入: [1,2,3,4]
输出: false
示例 3:
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true
var fn = function(arr){
var m = new Map()
for(let item of arr){
if(m.has(item)) return true
else m.set(item)
}
return false
}
- 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
var fn = function(head){
var p = head
while(p.next!==null && p!==null){
if(p.next.value === p.value){
p.next = p.next.next
}
p = p.next
}
return head
}
- 翻转一棵二叉树
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
3 1 9 6
var fn = function(node){
if(node.left === null && node.right === null) return node
var t = node.left
node.left = node.right
node.right = t
fn(node.left)
fn(node.right)
return node
}
- 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前;你应当保留两个分区中每个节点的初始相对位置
示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
var fn = function(head,x){
var p1 = new ListNode(0)
var p_1 = p1
var p2 = new ListNode(0)
var p_2 = p2
var p = head
while(p.next !== null){
if(p3.value < x){
p1.next = p
}
else{
p2.next = p
}
p = p.next
p1 = p1.next
p2 = p2.next
}
p1.next = p_2.next
return p_1.next
}
- Eventloop 机制
- 防抖、节流
- cookie、session 的区别
- cookie 是解决什么问题的?为什么要有cookie?
- HTTP 协议
- GET、POST 请求方式的区别
- 为什么参数放在 URL 安全性较低
- HTTPS 协议
- 浏览器缓存机制
- 强缓存、协商缓存是否发起网络请求?
- BOM、DOM 的区别
- 操作系统的进程、线程
- 数据库的索引,其作用是什么?
- 你平时是怎么学习这些知识的?
二面
前面几个问题忘记了,就记录还记得的:
- 说一下从输入 URL 到页面加载完成的全过程,越详细越好
- vue 生命周期
- vue 数据双向绑定原理
- vue 3.0
- 网页传输状态有哪几种模式?
- 浏览器在多个标签页之间是如何通信的?
- cookie、session、localstorage 的区别
- 怎么给 localstorage 设定过期时间?
- ES6、ES7、ES8 的新特性
- Promise
- 说一说 动态规划
- 给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"
这里有 传送门,大家自行编程和查阅答案吧~
HR面
- 自我介绍(这里注意要针对非技术岗的自我介绍)
- 针对你的项目经历、学校经历进行提问
- 说说你相比于其他同行同学最核心的优势是什么?
- 之前有好几次面试失败的经历,你怎么看待?
- 有亲属在腾讯吗?
- 你是哪里人?老家在哪里?
- 有没有面试其他公司?