这是我的第一场面试,面试之前一直贼紧张,因为不知道面试具体是怎么样的
不知道面试官会不会很严肃或者会不会是压力面之类的
不过这一次面试,体验还是很不错的,就整场下来还算可以吧
感觉就像你朋友在你对面问你问题然后你回答的那种氛围
周五(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年的大佬
呜呜呜,面试官人真的好好,虽然挂了,但还是觉得面试官超级好
(大家加油加油,呜呜呜呜,多准备准备吧,别乱冲了)
全部评论
(40) 回帖