腾讯实习面试记录(很详细,挂了)

面试比较自闭,我会尽可能回忆起更多的内容,而且写我当时的回答,希望大家讨论,互相学习!

上来先三道算法题,写完再叫面试官(但不挂电话)

1. 方阵逆时针旋转。

我现在看不到代码了,凭记忆说一下哈。

先想了用额外空间的情况,模拟了一下。
a是原始矩阵(方阵),b是旋转之后的。

自己写一个3*3的矩阵模拟一下,就会发现,
左边是原始矩阵的位置,右边是转置之后的。
(x_a, y_a) ->(x_b, y_b) 表示一个元素在a矩阵的坐标是x_a, y_a,在b矩阵是x_b, y_b。

(0, 0)->(2, 0)
(0, 1)->(1, 0)
(0, 2)->(0, 0)

(1, 0)->(2, 1)
(1, 1)->(1, 1)
(1, 2)->(0, 1)

看出规律了吗?
一个元素在b矩阵的y值是a矩阵的x值,它的x值是3 - x_a - 1。
所以,对每个x,y
b[a.size() - y - 1][x] = a[x][y]
不用额外空间的情况
我最后写的是这种。
思路是,最外层枚举(0, 0), (1, 1)...(matrix.size() / 2, matrix.size() / 2)这种坐标。然后里层按照上面的映射换,一圈下来是个闭环。代码有点难写,我面试时写的估计也得debug一下。

双向链表的头部插入,删除指定值,冒泡排序。

这里为什么是双向链表呢?我觉得双向链表有点降低难度诶。

插入不必讲。

删除,注意一下删除头部的情况,是让head = head->next。
如果是单向链表的话就让一个东西在后面跟着,first = head, second = second->next。
如果找到second->val == v(v是要删除的),那就first->next = second->next。

冒泡排序,我取了个巧,swap相邻元素的val值,而不对链表的结构进行操作

找一个数组的第10大元素

这是一道经典的题了,百度“数组第K大”可以找到答案。

我觉得用堆是最好的办法,但是它题目说用C语言,我认为默认不给我用堆。

大家复习一下快排

先取一个基准数,然后把比这个数小的放左边,比它大的放右边,它放中间。

这里是求第10大,所以我们反过来,把比基准数大的放左边,比它小的放右边。

因为比他大的都放左边了,那它的坐标就表示它是第几大的,假设坐标为i。

如果i == k,那a[i]就是答案。
如果i > k,那说明要找的数在左边。
如果i < k,说明要找的数在右边。

在递归查找即可。

代码不太好写,面试的时候只是写个大概,如果之后还又心情的话再补一下代码

开始问答环节

自我介绍

略了

在百度做的项目

略了
反思,我实习只是做一些边边角角的工作,也不太懂这个项目是干嘛的,技术原理都说不清楚,因为是在百度自研的框架开发的,也没搞懂底层原理,底层的东西大佬都写好了的。唉,惭愧

go是多线程还是多进程

多线程 // 我懵的

多线程编程需要注意什么?

注意如果同时读写数据的话会出问题。//我真不会啊orz,我太菜了。
这里bb了半天,没说明白。

go是怎么抓数据(大概这个意思吧)的

emmm因为我只是调用那个框架的函数,我也不知道啊。(问得好深

这里开始断片,接下来的是连不到一块了,

linux是怎么抓数据的(记不清了,大概这个意思)

不知道。。

在linux用什么命令查看正在运行的端口?

我工作的时候记在笔记里,现在不记得了。

TCP和UDP的区别。

TCP是可靠链接,UDP是尽最大努力的。
TCP是面向连接的,UDP是面向报文的。
TCP有拥塞机制,UDP没有。

(这个没有查,我长期记忆记的这些)

你知道拥塞机制和流量机制有什么区别吗?

我知道拥塞机制,b收到a的数据包之后就会返回一个ack,表示ack序号之前的包都收到了,然后如果丢包过多的话就会降低发包的速度。

流量机制不知道。

浏览器打开一个网址,从浏览器到服务器上的代码,经历了怎样的过程?

先是DNS域名解析嘛,然后到得到了IP地址,就取发起一个HTTP会话到这个地址,然后通过TCP进行封装成数据包,输入到网络层。

在客户端的传输层,把HTTP会话请求分成报文段,加上源端口和目的端口,比如服务器使用80端口,客户端是系统随机出来一个端口。

接下来数据链路层是ARP协议啥的,我记不清了。

Q:然后呢?

然后应该服务器那边有个端口监听,接着。。

我做项目的时候知道我们的框架有一个叫路由的东西,定义了GET和POST,就是访问哪个URL,就会映射到代码的哪个函数,然后就执行。

(emmmm太难了。我太菜了。)

SQL和redis有了解吗?

不了解

map和unordered_map有什么区别?

map的底层是红黑树,unordered_map是hash。

hash怎么实现的?
emmm先说一下为什么要用hash吧,就是有一个key要映射到一个value,然后有一个连续的空间是存value的,通过hash函数,把key映射到这片连续的空间上。

红黑树有什么特点?

先说一下,最开始是二叉排序树,然后发展到平衡树,而红黑树相对于平衡树来说,旋转操作比较少,对于插入删除比较频繁的应用场景,用红黑树比较好,所以map用红黑树。

那它有什么特点呢?

我想想。。比如根节点是黑的。

(其他记不起来了mmp,考这个有意思吗)

C++的多态是怎么实现的?

每个类都有一个虚函数表,然后当父类指针指向的子类对象调用虚函数时,就会找那个表,然后映射到子类定义函数的地址。

还问了一些我记不得了,但我还是理解了这块的。

定义一个main函数,一个f函数,在f函数里声明100万的数组,然后返回。这个程序的编译运行是怎样的?

首先呢,局部变量是放在栈里,100万放到栈里有可能会栈溢出,这个编译可以过,但是运行可能会出现segment fault。

面试官重新说了下,把100万改成10个。还特地强调了CPU的状态

大概就是,调用的时候有个JMP命令,然后跳转到f函数的起始地址,接着开始执行f函数。

执行JMP的时候CPU的状态是怎样的?

哦。。那就是有一个寄存器存当前执行指令的地址,执行到JMP的时候,因为JMP有个地址嘛,就会取那个地址取指令,然后执行。(这是计算机组成原理的知识吧。。我记起来一些)

知道用户态和内核态嘛?

知道
可以说一下吗?
内核态能执行的指令权限最高,而用户态的权限较低。

那你用户态调用内核态的函数时,是怎样实现的?

我不知道。。。

有100亿个QQ号,肯定有重复的,要求去重。

用布隆过滤器(我还记错记成多隆orz,面试官纠正了一下)
然后blabla说一下原理。

看了这篇文章才知道的
详解布隆过滤器的原理,使用场景和注意事项 - Young Chen的文章 - 知乎
https://zhuanlan.zhihu.com/p/43263751

用布隆过滤器会出现什么问题?
我哪知道,我知道布隆过滤器已经很不容易了。。。哭

大概没有了吧。

反思

要了解业务,我太水了,做项目不认真了解项目背景,只是高T派过来任务,然后我去coding。像以前刷题一样做需求,是远远不够的。

要了解一下底层底层没了解,不知道调的框架底层是咋实现的。

这段时间主要花在算法上了,主要是上次被wxg的算法整自闭了。

上次面试顺便记一下

是wxg的,也是上来就四道算法题,
第1题当场写的有Bug
第2题提示之后才做出来(其实就是中序遍历,但我太久没复习数据结构了),
第3题因为做过所以直接秒。
第4题写了个假算法

于是面试结束了。。。
题目如下:

链表的奇偶合并。https://leetcode-cn.com/problems/odd-even-linked-list/
1->2->3->4->5变成1->3->5->2->4

二叉排序树求第k大元素。
https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/

装雨水问题https://leetcode-cn.com/problems/trapping-rain-water/

类似这道用rand7()求rand10(),只是数字不一样。

https://leetcode-cn.com/problems/implement-rand10-using-rand7/

#腾讯暑期实习##腾讯##实习##C++工程师##面经#
全部评论
最后一个可以考虑 用 bitmap
1 回复 分享
发布于 2020-03-11 17:18
太难了,我越学越自闭了。 为什么我这么菜。。
1 回复 分享
发布于 2020-03-11 15:33
不好意思,我之前说的有点问题,正确的应该是这样:     // 顺时针旋转     void rotate(vector<vector<int>>& matrix) {         int n = matrix.size();         if (n < 2)return;         //1. 交换对角元素         for (int i = 0; i < n; ++i)         {             for (int j = 0; j < i; ++j)             {                    swap(matrix[i][j], matrix[j][i]);             }         }         //2. 每一行逆序         for (int i = 0;i < n;++i)         {             reverse(matrix[i].begin(), matrix[i].end());         }     }          //同理:若需要进行逆时针翻转,则先对每一行进行逆序,然后交换对角元素
1 回复 分享
发布于 2020-03-11 11:40
楼主什么岗位呢?
1 回复 分享
发布于 2020-03-11 00:53
看我帖子,投我们这里
1 回复 分享
发布于 2020-03-11 20:41
wlw?
点赞 回复 分享
发布于 2020-03-12 13:50
答应我,收下这份礼物😘http://m.nowcoder.com/discuss/379708
点赞 回复 分享
发布于 2020-03-11 18:33
老哥,多隆过滤器太秀了 🤣
点赞 回复 分享
发布于 2020-03-11 16:33
太难了,我也投了后端开发,还没被捞起来。现在在看计算机网络的东西,操作系统数据库全部不会。。。。算法题也只刷过剑指offer,慌的一批
点赞 回复 分享
发布于 2020-03-11 15:47
go是什么,go语言吗?我都没听过。不是考C++吗?为什么问了go?
点赞 回复 分享
发布于 2020-03-11 15:35
腾讯后端不要Java吗😅
点赞 回复 分享
发布于 2020-03-11 13:57
拥塞控制和流量控制似乎说反了吧
点赞 回复 分享
发布于 2020-03-11 12:57
老哥,你这个面试内容和我之前面试的基本一模一样
点赞 回复 分享
发布于 2020-03-11 12:49
楼主,,,钉钉暑期实习要不要康康
点赞 回复 分享
发布于 2020-03-11 12:40
lz投的那个事业群呢,pcg么?
点赞 回复 分享
发布于 2020-03-11 12:22
这算法确实有点强,基础知识再补补,试试字节,应该没啥问题
点赞 回复 分享
发布于 2020-03-11 11:00
你什么时候投呀,我为啥都没有面试通知,是不是简历没过😔😔
点赞 回复 分享
发布于 2020-03-11 07:11
学习了
点赞 回复 分享
发布于 2020-03-11 00:06
群友暖贴
点赞 回复 分享
发布于 2020-03-10 23:41

相关推荐

03-30 19:21
已编辑
上海东海职业技术学院 Java
时间线:2025.3.17&nbsp;BOSS内推投递2025.3.18&nbsp;电话约面2025.3.21&nbsp;一面&nbsp;下午三点半面完&nbsp;五点半收到笔试取消邮件&nbsp;凉自我介绍大模型:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;研究生科研方向&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大模型了解吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大模型的应用场景有过了解吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;假如我现在有一个特定的场景,想对其增强,可以采用哪些手段呢?比如说我现在有一个答疑的agent,我怎么去对这个agent进行增强?(当时不懂,这里应该是像往RAG那边引导)项目:&nbsp;&nbsp;&nbsp;&nbsp;点评+外卖&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简单介绍一下点评这个项目,主要是干什么的&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个项目是你从0到1自己实现的吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有尝试把这个服务部署到云上吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是个单体服务还是微服务?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;单体服务为什么要引入redis?换个方式问,你的项目中哪些场景应用了redis?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其实我是想问你作为一个单体服务,为什么不能在内存里面使用比如像有些caffeine或者是最简单的给一个map在jvm的内存里面实现?为什么要用redis?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有考虑过怎么把你的单体服务改造成微服务吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简单讲一下你的短信登陆怎么实现?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP请求携带token是把token保存在HTTP的哪个部分?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我看你下一个项目鉴权和认证使用的JWT,什么场景下使用JWT,什么场景使用传统的token?或者换个话题问,JWT和传统的token的区别在哪里?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JWT的token在服务端是有保存的吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那你当时技术选型是怎么考虑的?为什么要使用JWT?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;怎么实现用户的登出的操作?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JWT是在哪里删除?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JWT如何实现令牌的过期?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;令牌过期的校验放在哪里?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为什么要把用户的信息放在Threadlocal里面?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你在实现整个鉴权和认证的过程中有用过一些比如像Springsecurity这些相关的框架吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那你整个认证过程是你自己实现的吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那你觉得整个认证的流程里面有困难有亮点的地方是哪里?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你提到你解决了一个缓存穿透的问题,你能详细的描述一下你怎么解决的吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还有就是你解决了一个缓存穿透的问题,你能详细的描述一下你怎么解决的吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;抛开redisson,使用redis实现一个分布式锁,常规的我们应该怎么实现?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Redis里面用了很多非常精妙的数据结构,你能介绍一下吗?举例一个最感兴趣的或者觉得他设计的最好的一个?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你整个项目实现中数据库是用的是Mysql对吧?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mysql是一个事务型的数据库对吧?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;事务的四个特性是什么?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这四个特性分别有什么含义?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我看你实现了一个点赞排行榜的一个功能,那这个点赞排行榜的数据要写入数据库吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Redis是基于内存的一个数据库,假如我Redis集群宕机了,宕机了之后我需要把Redis重新拉起来,拉起来之后这份Zset的数据也就是点赞排行榜的数据是不是也就没有了?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你知道Redis怎么做持久化吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用RDB或者AOF把Redis存的数据持久化下来会有问题吗?如果Redis宕机了再拉起来,我去读这个数据会有问题吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简单想个方案解决Redis宕机之后重新拉起来不是最新的数据这个问题&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;websocket是全双工还是半双工通信?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;websocket是否有类似https的机制来保证安全性?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;举两个适合使用websocket的场景&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;项目里面websocket怎么使用的?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我看你是使用了注解加AOP实现了公共字段的赋值,为什么要使用这个方式实现公共字段的赋值?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为什么这种更新的操作不在mybatis的xml文件使用now这个函数实现而是要通过AOP这种方式实现?还有没有什么更好的方法?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AOP会面临失效的问题,什么时候AOP会失效?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;怎么保证缓存和数据库的数据一致性?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我看你第一个项目(点评)是前后端分离的项目,你有考虑过前端怎么去部署吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你能简单介绍下什么叫前后端分离吗?这个分离具体分离的什么?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在前后端分离提出之前我们项目是怎样部署的?手撕:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;实现一个简单的哈希表,实现三个方法get、put、remove,实现的时候怎么简单怎么来,不用考虑扩容机制。由于写不出,又接着问了点八股。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对基本类型和包装类型有了解吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为什么要引用包装类型?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;装箱和拆箱是什么?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果有一个Integer是null,对其拆箱会出现什么?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;新建线程的方式?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;什么情况下会发生线程的上下文切换?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;讲一下什么情况下会发生死锁,遇到死锁该怎么解决?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;产生死锁的必要条件介绍一下?轻松问答:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对以后的工作岗位有什么期待吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;做网上的项目有什么体会吗?最长知识的部分在哪里?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有对技术栈进行系统性的学习吗?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;学习java期间有没有对java的一些方法论进行探讨?我要写好一个java程序需要怎么去做?反问面试官很温柔,提问会有引导,回答不出来还会谈他的看法,还给了一些学习建议,面试体验非常好。第一次面,自己太菜了,回去接着沉淀了,非常感谢能够给面试机会(跪#牛客AI配图神器##面试##暑期实习##后端开发##Java##淘天#
点赞 评论 收藏
分享
评论
20
146
分享

创作者周榜

更多
牛客网
牛客企业服务