首页 > 笔经面经 > 腾讯后台处女面凉经+第一次面试感受

腾讯后台处女面凉经+第一次面试感受

头像
屎忽鬼
编辑于 2021-04-15 16:13:27 APP内打开
赞 63 | 收藏 374 | 回复40 | 浏览11222

这是我的第一场面试,面试之前一直贼紧张,因为不知道面试具体是怎么样的

不知道面试官会不会很严肃或者会不会是压力面之类的

不过这一次面试,体验还是很不错的,就整场下来还算可以吧

感觉就像你朋友在你对面问你问题然后你回答的那种氛围

周五(3.19)收到面试官的电话约我 周一(3.21)晚上七点面试

约好之后发邮件给我,腾讯会议的

所以昨天提前十分钟就已经进入腾讯会议等面试官了(因为我太紧张了,太激动了处女面)

然后面试官开始的时候,先让我自我介绍,我介绍完之后,面试官也自我介绍了一下,顺便讲了一下他们部门主要做微信支付C++后台开发业务的?
(听得不是很清楚,我记得我投的是PCG腾讯视频?不知道为啥来到了微信支付hhh)

然后面试官讲完之后,直接让我先做题,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的时候,就减掉左指针当前的值....之类的话

然后面试官不满意,就说要我证明为什么减掉或者增加数据不会漏掉正确的答案之类的,我真的不知道怎么说哈哈哈哈(心想:呜呜呜呜别骂了别骂了,我就只会写代码,我是菜鸡)总感觉面试官觉得我没有自己的思考,只是单纯的背答案(但是我真的不知道怎么讲哈哈哈哈哈)

然后看完第三题的代码之后,问了一下数组里面存的是什么,我就说是头节点,用来处理冲突的时候,做成链表

然后正式开始

问我是不是一点都不会C++,我说是,比较熟Python和JAVA(说完之后我后悔了,我应该说JAVA就好,别扯Python了)面试官直接问了几个python的东西我都不会

协程什么?为什么是轻量级的线程?跟线程有什么区别?轻量在哪里?(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 或者自定义都可以)

接下来就滑动窗口拥塞控制这些的流程了

ACK超时会怎么样(我以为问我冗余ACK,听错题目呜呜呜呜)

计网问了15分钟

阻塞和非阻塞区别

让你实现一个 xiewo 你怎么写(我不知道这个英文单词是哪个,是server?我直接不会了)

然后问我Epoll和Poll和Select这些(呜呜呜,这个我真的不会,大家不会的赶紧补一下,我直接说不会了呜呜呜)

然后到操作系统

进程间通信方式

为什么要使用线程池?好处在哪?

线程池任务队列一般怎么设计?如果让你写你怎么实现?(答阻塞队列)

阻塞队列怎么实现?(呜呜呜,我不会 这个怎么答)(猜了sleep?哪个的sleep)

底层怎么实现wait和notify(我是沙雕,答了中断,问:中断能实现?答:啊应该不行吧,我不会了)

你知道线程锁吗?

多线程同步用什么方式?(瞎扯了synchronized)

线程间同步有那些方法?(答了 信号量?)

除了锁还有什么其他的方法(答自旋?问:自旋不也是锁吗)

重量级锁和轻量级锁区别(啊,面试官这个部分想问我啥,我是真不知道哈哈哈哈,总感觉面试官在引导我?)

一直自旋会不会造成资源浪费或者死循环?

悲观锁和乐观锁区别

(我扯到CAS)问我CAS怎么实现

说一下排序算法熟悉的

(我凉了,我就只知道快排和归并和冒泡

然后其他的都不知道,呜呜呜呜)

快排时间复杂度?(答logN 你敢相信?)

为什么是NlogN你知道嘛?最差会怎么样你知道嘛?

排序和归并排序知道嘛?(不会堆排序!!!呜呜呜心态开始崩,讲了归并)

(没讲完,面试官一直在等我讲我会的,我就会讲归并的概念

(然后中间沉默了十几秒,不知道讲啥呜呜呜

红黑树有没有了解? (呜呜呜不会呀,我就扯到HASHMAP)

哈希表的原理?

哈希冲突怎么解决?

哈希表一直随机插数据会怎么样,会发生什么过程?(总感觉面试官想问我扩容的知识)

答:冲突,链表变长,问:链表变长会怎么样?会导致什么情况?答:导致查询复杂度会变高(呜呜呜呜)

你知不知道rehash的过程?(自己给自己挖坑,讲完java之后,扯了一下redis的rehash!!!沙雕了我)

面试官:讲到redis是吧,那redis的网络io讲一讲?(我的天,我真的不会这个)

问我单线程多线程的?内部数据结构是怎么实现的?操作的过程中是单线程还是多线程(答单线程)

为什么要用单线程?

为什么线程切换会有消耗,消耗啥?

然后就结束了,跟面试官互相拜拜完之后,就没了

对,面试完之后我见面试官也没有什么不耐烦的,我以为我能过一面哈哈哈哈哈,不过过了一个小时去查询状态就发现挂了

反思:

唉,最终还是太菜了,好多问题都答不上来

主要是八股文背得不牢,Epoll这些我一直没去学

常用的排序算法这里太拉垮了,堆排序也不会归并也不会

感觉问网络那一块答得还不错,问到后面差不多排序算法这一块的时候

感觉面试官已经开始给我淘汰分了哈哈哈哈

看了一下,面试官至少是个工作了5、6年的大佬

呜呜呜,面试官人真的好好,虽然挂了,但还是觉得面试官超级好

(大家加油加油,呜呜呜呜,多准备准备吧,别乱冲了)

更多模拟面试

40条回帖

回帖
加载中...
话题 回帖

相关热帖

笔经面经近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐