腾讯后台处女面凉经+第一次面试感受
这是我的第一场面试,面试之前一直贼紧张,因为不知道面试具体是怎么样的
不知道面试官会不会很严肃或者会不会是压力面之类的
不过这一次面试,体验还是很不错的,就整场下来还算可以吧
感觉就像你朋友在你对面问你问题然后你回答的那种氛围
周五(3.19)收到面试官的电话约我 周一(3.21)晚上七点面试
约好之后发邮件给我,腾讯会议的
所以昨天提前十分钟就已经进入腾讯会议等面试官了(因为我太紧张了,太激动了处女面)
然后面试官讲完之后,直接让我先做题,40分钟,4选2来做(12选一题,34选一题),可以用任意语言和任意你喜欢的编辑器
算法笔试题
要求:
1、语言不限
2、时间为40分钟
一、算法题(1/2题任选一题)
1、给定最长0xff字节的16进制数据,如unsigned char *hex = "0095AFF9F703A8"(最长可能100个字符) ,
要求以10进制格式打印出该数值(要求用大数实现,不能用大数库函数,否则不得分,要求自己实现大数)。
2、小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。
没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
(要求实现的时间复杂度为O(N),例如输入100,那时间复杂度应该是100级别的)
示例 1:
输入:target = 9
输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15
输出:[[1,2,3,4,5],[4,5,6],[7,8]]
def get_res(n):
left, right = 1, 1
res = []
count = 1
while right <= n-1:
if count < n:
right += 1
count += right
elif count > n:
count -= left
left += 1
else:
res.append([i for i in range(left, right+1)])
right += 1
count += right
print(res)
if __name__ == '__main__':
get_res(9)
二、数据结构(3/4任选一题)
3、用拉链法实现hash,接口:插入,查找,删除
hash函数,可以不实现
要求要用链表实现
class Node:
def __init__(self, key, val):
self.key = key
self.val = val
self.next = None
class HashMap:
def __init__(self, n):
# 数组大小和长度
self.table = []
self.length = n
for i in range(n):
# 初始化节点
self.table.append(Node(None, None))
def insert(self, k, v):
# 获取索引
index = k % self.length
# 获取链表
cur_list = self.table[index]
while cur_list:
# 如果找到旧值,更新
if cur_list.key == k:
old_val = cur_list.val
cur_list.val = v
return old_val
if cur_list.next is None:
break
cur_list = cur_list.next
# 如果找不到,插入到链尾
cur_list.next = Node(k, v)
return v
def search(self,k):
# 获取索引
index = k % self.length
# 获取链表
cur_list = self.table[index]
while cur_list:
# 如果找到
if cur_list.key == k:
old_val = cur_list.val
return old_val
cur_list = cur_list.next
# 找不到
return None
def delete(self,k):
# 获取索引
index = k % self.length
# 获取链表
pre = self.table[index]
cur = pre.next
while cur:
# 如果找到节点
if cur.key == k:
pre.next = cur.next
return cur.val
pre = cur
cur = cur.next
return None
if __name__ == '__main__':
hmap = HashMap(10)
hmap.insert(1,2)
hmap.insert(3,4)
res1 = hmap.search(1)
res3 = hmap.search(2)
print(res1,res3)
4、实现一个大根堆,两个过程:
a、构建堆
b、弹出堆顶数据 正好第一第四题不会,第二题好像在力扣做过,第三题,就模仿hashMap的操作来就行
三十几分钟才做好
然后面试官就开始看我的代码,问我是不是第二题做过,我说是,然后面试官说,做过没关系,然后就问我思路,要我证明我的代码为什么没有错,会不会漏掉数据(就证明你的代码是成立的),然后我懵逼了,我真不知道怎么说这个哈哈哈,我就说,左右指针之间的数组总和小于target的时候,就右指针往右移动,当和大于target的时候,就减掉左指针当前的值....之类的话
然后面试官不满意,就说要我证明为什么减掉或者增加数据不会漏掉正确的答案之类的,我真的不知道怎么说哈哈哈哈(心想:呜呜呜呜别骂了别骂了,我就只会写代码,我是菜鸡)总感觉面试官觉得我没有自己的思考,只是单纯的背答案(但是我真的不知道怎么讲哈哈哈哈哈)
然后正式开始
协程什么?为什么是轻量级的线程?跟线程有什么区别?轻量在哪里?(OMG:我不会)
TCP三次握手,四次挥手(八股文)
三次握手能不能四次握手
四次挥手为什么需要四次
timewait一定只能在客户端吗
timewait什么情况会出现过多,怎么看到timewait连接状态
怎么优化timewait过多
为什么要timewait,第四次不能直接关闭吗
timewait需要等待多少(OMG:啊这里我答一个来回时间,2MSL,然后面试官说,不对,然后问我MSL是什么,我先说一个过去的时间吧,然后再补充一个报文存活的最长时间,然后面试官才说嗯,是报文存活的最长时间)
UPD相对TCP优点和缺点
TCP和UDP的应用(答到http和DNS)
为什么http一定要用TCP呢?
知不知道http2.0 (OMG:呜呜呜我忘记了)
http2.0能不能用UDP来实现(感觉想问我HTTP3.0的知识?)
长连接和短链接区别
长连接的好处?(答省资源)→ 省什么资源?(不会)
TCP滑动窗口的实现
滑动窗口初始值是多少(答1)→ 一定是1吗? (呜呜呜我不会,猜:1 2 或者自定义都可以)
接下来就滑动窗口拥塞控制这些的流程了
阻塞和非阻塞区别
让你实现一个 xiewo 你怎么写(我不知道这个英文单词是哪个,是server?我直接不会了)
然后问我Epoll和Poll和Select这些(呜呜呜,这个我真的不会,大家不会的赶紧补一下,我直接说不会了呜呜呜)
然后到操作系统
进程间通信方式
为什么要使用线程池?好处在哪?
线程池任务队列一般怎么设计?如果让你写你怎么实现?(答阻塞队列)
阻塞队列怎么实现?(呜呜呜,我不会 这个怎么答)(猜了sleep?哪个的sleep)
底层怎么实现wait和notify(我是沙雕,答了中断,问:中断能实现?答:啊应该不行吧,我不会了)
你知道线程锁吗?
多线程同步用什么方式?(瞎扯了synchronized)
线程间同步有那些方法?(答了 信号量?)
除了锁还有什么其他的方法(答自旋?问:自旋不也是锁吗)
重量级锁和轻量级锁区别(啊,面试官这个部分想问我啥,我是真不知道哈哈哈哈,总感觉面试官在引导我?)
一直自旋会不会造成资源浪费或者死循环?
悲观锁和乐观锁区别
说一下排序算法熟悉的
(我凉了,我就只知道快排和归并和冒泡
然后其他的都不知道,呜呜呜呜)
快排时间复杂度?(答logN 你敢相信?)
为什么是NlogN你知道嘛?最差会怎么样你知道嘛?
堆排序和归并排序知道嘛?(不会堆排序!!!呜呜呜心态开始崩,讲了归并)
(没讲完,面试官一直在等我讲我会的,我就会讲归并的概念
(然后中间沉默了十几秒,不知道讲啥呜呜呜
红黑树有没有了解? (呜呜呜不会呀,我就扯到HASHMAP)
哈希表的原理?
哈希冲突怎么解决?
哈希表一直随机插数据会怎么样,会发生什么过程?(总感觉面试官想问我扩容的知识)
答:冲突,链表变长,问:链表变长会怎么样?会导致什么情况?答:导致查询复杂度会变高(呜呜呜呜)
你知不知道rehash的过程?(自己给自己挖坑,讲完java之后,扯了一下redis的rehash!!!沙雕了我)
面试官:讲到redis是吧,那redis的网络io讲一讲?(我的天,我真的不会这个)
问我单线程多线程的?内部数据结构是怎么实现的?操作的过程中是单线程还是多线程(答单线程)
为什么要用单线程?
然后就结束了,跟面试官互相拜拜完之后,就没了
反思:
唉,最终还是太菜了,好多问题都答不上来
主要是八股文背得不牢,Epoll这些我一直没去学
常用的排序算法这里太拉垮了,堆排序也不会归并也不会
感觉问网络那一块答得还不错,问到后面差不多排序算法这一块的时候
感觉面试官已经开始给我淘汰分了哈哈哈哈
看了一下,面试官至少是个工作了5、6年的大佬
呜呜呜,面试官人真的好好,虽然挂了,但还是觉得面试官超级好
(大家加油加油,呜呜呜呜,多准备准备吧,别乱冲了)
#面经##腾讯##Java工程师##实习#
查看11道真题和解析