20190823 腾讯后台开发 社招 初试 面试总结

先介绍下博主自己,本科毕业于湖南工业大学计算机科学与技术专业,虽然学校名声没能达到清北之流,但凭着学校出色的人才培养环境O(∩_∩)O,再加上自己三年来的努力,得到了去腾讯面试的机会。不论最终的面试的结果如何,最起码自己的努力付出有了稍许回报,以后当然更要继续努力啦。

本次面试我的面试官是一个年轻的学长,比我早四年毕业,他的技术栈相当全面,C++、Java和Golang门门都比较精通,与之相比,我仅仅c语言勉强算得上"精通",Golang 的开发使用仅有一年之余,现在也仅仅称得上会用。什么叫精通呢?比如说Golang的Map底层是怎么实现的?Golang的go rouring底层是如何实现的?Java的哈希结构是怎么实现的?hash冲突又是如何解决的?jdk 1.7 和1.8相比,都有哪些改进?如果以上内容在任何一门编程语言里都能够脱口而出,我觉得这才叫精通。

对于即将准备面试的同学,建议最好自带几份简历。

整个面试流程大概持续一个小时左右,期间就是聊聊天,主要是关于技术领域的。

我自己带了双份简历,面试官拿了一份,简单看了下(我之前主要任职于通信行业),问了如下问题(以下问题是我的原始回答,可能会有不正确的答案,如有,还请指出,谢谢):


Q1. 对互联网应用有哪些了解的?知道哪些互联网技术?

A: 我之前主要是做通信行业开发的,对互联网行业比较感兴趣,相关的技术也有了解过,比如kafka (Kafka是一种高吞吐量的分布式发布订阅消息系统) 什么的。


Q2. (看了我简历,我简历里面有不少项目使用到了Golang)Golang map底层原理是什么样的?GO routing机制又是怎么实现的?

A: Go语言这块我源代码没有分析过,更多的时候是使用。(学习一门语言,务必要知其然,知其所以然,这个确实是用的少,平时空闲时间不多,不然肯定会研究Go的源代码实现,毕竟,Go是一门相当有趣的语言)。


Q3. 红黑树和AVL树了解么,区别呢?

A:两者都是二叉搜索树,AVL定义的特别严格,左右子树高度相差不大于1,简单的删除或者插入都极有可能导致树的不平衡,需要反复的调整。红黑树要求没有那么严格,它只需要节点到叶子节点的最长路径不超过最短路径的两倍,插入和删除操作引起的调整次数相对来说比较少,最多不超过3次。


Q4. fork后子进程复制了父进程哪些东西?

A:除了代码段,其它的都复制(我之所以这么说,是看到了《APUE》上是这么说的,但是回来后看了下《Linux环境编程》,它这上边又说啥都复制,和前者冲突,可能是内核版本不同吧,此外还涉及到写时复制技术)。


Q5. cpu调度基本单位

A: 基本调度单位是线程。


Q6. 线程咋调度的?设置了优先级会立即生效吗?

A: 可以设置优先级。除了优先级还有其它一些参数,其它的还不是很清楚。(这里问的应该是调度策略?时间片...)


Q7. c语言 hash是怎么实现的?冲突怎么办?有哪些更好的方法?

A:c语言没有现成的hash结构,我平常开发使用到hash有两种方式实现,一种是基于数组,一种是链表。冲突的解法是使用链表串起hash相同的元素。

Q7.1 哈希如果冲突,极端情况下可能会分配到了同一组,有啥好办法?

的确有可能,(这种问题平时我也想过,但是没有相处特别好的方法,此外,基本上也满足需求,《算法导论》上也曾介绍过几种hash冲突解决方法,觉得不太好,没有特别记忆),嗯,这种问题的话,或者找一个比较好的hash函数,将元素均匀的hash到各个数组,(嗯,也可以,还有更好的方法么?)。到了这一步,面试官有意提醒我使用红黑树,思考了N久,我还是想象不出链表加上红黑树长什么样子,目前还没能想到。


Q8. UDP怎么实现可靠性?(我项目里有几个项目采用UDP实现)

A: (自言自语)如果UDP实现可靠性的话,更改UDP协议肯定不行了,毕竟已经是一个标准协议了。嗯...,只能在应用层去处理了。在应用层上面对收到的数据进行检查,如果发现丢失则通知对端重传,为了防止无线重传,还需要加上指定最多次数。


Q9. TCP滑动窗口咋回事?

A: 滑动窗口主要用于流量控制,放置接收方无法及时收取上来。


Q10. TCP慢启动咋回事?描述下

A: 慢启动主要用于拥塞控制,比如说,N个client同时发往服务器,流量超出线路承载或者路由器处理能力,导致丢包,所以不能一开始就发送大量数据,先少量发送点,然后再慢慢提高(这里也问了拥塞控制算法,我对这点不熟)。


Q11. 滑动窗口采用啥结构?

A:啥结构?这个确实是自上学以来没有考虑过的问题,想了下,滑动窗口长得不是非常像队列吗?右边进左边出。这样说了下。


Q12.  拥塞机制算法

A: nagle?这个不太清楚。

【nagle主要用来解法TCP发送时机问题,拥塞控制算法有四个:慢启动、拥塞控制、快重传,快恢复】


Q13. 来点代码吧?给定数组和k求数组中两数之和等于k的下标。

A:愣了一下,有点懵,稍稍紧张。想了会儿,可能用hash解,又想了hash可以解(问了下面试官,下标是需要返回的还是打印?c语言只能返回一个数,多余一个数需要传进指针存储,A:随便,找到就行)。

套出自带的笔和本子,用c语言实现了hash和一个O(n)的算法。


Q14. (看了我的算法,问了下相同的算法能否解决三数之和问题)三数之和

A: 刚搞定两数之和,问我三数之和,(稍稍紧张,2数,3数?扩大1.5倍?脑子有点懵,持续三秒,告诉自己冷静)仔细思考了下,先求出两数之和的所有可能性,插入hash,遍历数组查找hash,貌似可以。又想了一下,可以的。


以上就是今天的面试内容,结束的时候面试官告诉我,腾讯和百度、阿里相比,算法要求不是特别高。嗯,这一点我也感觉到了,平常工作中使用到的技术上不要仅仅满足于会用,要了解其底层实现原理,做到知其然知其所以然。对于后台开发的同学,如果面试腾讯的话,要能够熟练掌握TCP原理,进程/线程调度,高级语言的底层是相当重要的。最后,临走之前,请教了面试官,hash冲突怎么使用红黑树解决?面试官和我说,java1.8版本之后的hash冲突就是hash数组加红黑树解决的。此外,只要是能够存储数据的结构,都可以解决。我们只需要找到查找耗时最小的就好。数组后挂红黑树,学习了。以上就是面试内容。与君共勉。


已凉。就其原因,技术栈不全面。过往的开发工作工作中只用到c以及Go,提问Go底层原理的时候不懂。提问C++直接pass。radis和nginx等互联网后台没有准备。其实,c++, Go都有所了解,但对其原理却没有分析过,之前复习的时候这一块也梅花时间,略微有点遗憾。知道自己的不足之处,后续再继续努力吧。

==============================================================================================

20191107更新

已拿到腾讯的offer。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值