字节C++客户端-抖音剪映实习生(凉经)

     

## 字节面试(一面)

2021.6.9号面试,面试前一个礼拜hr加了我微信,然后约了这个时间面试,时间也比较紧,字节一共三轮技术面+一轮hr面,一般一轮技术面一到两天就可以出结果,整个流程一个礼拜可以结束。

我确实是没特别准备好,最明显的一面就是这几天我一直在准备背网上的“八股文”,但其实我感觉如果你面试前准备这个已经晚了,这些网上搜到的面试点应该是最基础的,剩下的要全力准备自己简历上面写到的东西了。
  本人中流211科班本科生,学分绩中等。因为准备读研究生,想这参加几个实习感受一下就业的氛围。 
  **面试时候掌握技能:** 
  ①因为学校一些课程设计一般都是使用c++,而且我想从事C++岗位,比较喜欢偏底层的应用,但其实掌握的很一般,matlab仅限于会敲一些基本代码的水平,Linux也就会基本的shell编程,写一写系统调用等等小功能。
  ②计算机专业课都学过,学的时候还学得比较认真,大概也就是期末考试八十几的水平。例如:计算机网络,操作系统,组成原理,数据结构等等。数据结构毋庸置疑肯定得需要掌握的吧,所有公司面试都会问这个,大厂问的会更深。

现在开始正片,因为我简历上写了一个图形学的项目,所以他就先问这个点,但是最不该的就是我之前一直背“八股文”,我知道简历上的项目一定要好好准备,但最终还是轻敌了,他一个最简单的问题我没有答出来。

1、先自我介绍,我巴拉巴拉一堆。
2、不确定面试官有没有看到我简历,他说让我介绍一个大学期间做的项目,很贴心跟我讲学校的一些小课程设也可以(这些我简历里面也写了),然后我开始介绍图形学的项目。
3、问我图学里面锐化是什么。
答:好像就是让图像的一些棱角更鲜明,跟平滑相对应,平滑就是让图像一些地方看起来模糊一点,避免出现特别突兀的现象。
追问:然后呢,还有什么要补充的吗。
答:可能不大记得了。(确实忘记了,面试完我才想起来,学习数字图像处理的时候,还用matlab写了直方图均衡化等等图像平滑锐化的程序,结果搞忘了。第一个问题面试官应该很不满意)。

4、问我c++里面多态性是什么。
答:c++多态就类似于电脑的usb接口,一个接口可以连鼠标、键盘等等多个东西。c++里面实现多态是使用虚函数实现的。
追问:只能用虚函数实现吗。
答:应该是吧,我记着虚函数就是实现多态性。(c++里面父类子类的继承也可以实现多态,虚函数,抽象类,覆盖,模板(重载和多态无关)这些都是实现多态的方法。我不知道面试官是不是想得到这个答案,结果但是失误了,没答出来。感觉他不是特别满意)

5、问:接上个问题,好那你来说说虚函数是什么。
答:就是在一个基类里面声明一个虚函数,用virtual声明,然后后续在其他类里面可以重新定义这个函数,实现重写的一个效果,虚函数可以重写覆盖,然后虚函数可以扩大内存空间 (这里面试时候说错了,我感觉虚函数是逻辑上可以扩大逻辑空间,而不是物理上扩大空间),然后因为虚函数对应这个虚函数表,调用虚函数的时候可以从虚函数表里找到对应你需要的函数,保证正确。

6、接上个问题,你说虚函数可以扩大内存空间吗?
答:我记得是的吧。。。o.o尴尬了。
回复:好的。

7、给了我一个先写的类和虚函数的代码,问我目测这个能不能跑通。
答:(我看了代码感觉是没有问题的)应该可以吧,我觉着没有问题。(这里我也不知道回答的对不对,他也没继续说这个了,就是一个类的调用啊,子类继承啊等这些基础的代码)

8、好的,那我们现在来做一个算法题吧。实现链表list。因为在牛客面试的,直接在空白的编译器上面写。
答:我想了一段时间,确实没有思路,我就写了class,准备用模板实现。
回复:你可以先不用模板这些实现,用其他的实现。
答:啊不好意思面试官,这个我写不知道,没什么思路。(我当时是有思路的,我想到最笨的法子,我用数组实现,list的pop啊等操作我可以写函数实现,但是面试没经验觉着太傻了就没写,后面一想只要你有思路你就写就行)。 

9、面试官现写了一小段五行左右的智能指针shared_ptr声明调用的一小段代码,问我能不能跑通。
答:面试前,我只了解了智能指针有哪几个,每一个是干什么的,没有写过这个代码,我就老实介绍了智能指针有哪几个巴拉巴拉的,但是一般写代码的使用没怎么用到这个,所以我看不出来。
回复:好的那下一个问题。

10、说一下map和hash_map的原理吧。
答:c++新版本一般都是用unordered_map嘛,这个我掌握的还行。hash_map是基于hash表实现的,所以他里面的元素都是无序的,但是因为hash表实现,所以他的插入等一些操作的速度都要比map快。
map是基于红黑树实现的,红黑树也是二叉排序树的升级版,节点分为红色和黑色,然后红黑树有五个特性,基于这个五个特性保证了任何一条路径不会比其他路径长两倍,所以他可以在nlogn里面完成那些基本操作。

追问:好的那你说hash_map里面是hash表实现,那这个hash表是怎么实现的呢。
答:(这问题确实问的有点蒙我没听懂什么意思)啊不好意思面试官,我没能理解你说的什么意思,你可以解释下吗。

回复:嗷嗷,就是你hash表插入的时候可能会导致冲突啊等,这些是怎么解决的呢。
答:奥面试官,因为我也没有特别研究这个但我知道hash散列表因为有映射函数吗,我们正常的映射就是一对一,下标对应,如果数据比较复杂可以改变我们的映射函数,比如说取余啊、乘以几取模等等,然后好像有一个解决冲突的方法就是,我正常还没涉及到那么复杂的东西,一般情况下设计一个好的映射函数可以解决很多问题叭。(因为我看过算法导论,这些都是算法导论散列表那一章的内容,因为我看不下去,一章全是数学公式看的烦人,所以没有深究只知道这些了)

11、问我static变量初始化的时候在什么时候声明,就是子类调用的时候,是在父类实现还是子类里初始化。(大概就是这个意思,具体记不到了,我也没答出来)
答:啊不好意思,这个我不是特别清晰,我感觉应该是在父类里面初始化吧,因为我记着在类继承什么的时候,都是先初始化父类里面的内容,我感觉这个也是这样。

12、最后给我退了一道leetcode的算法题,算法题不难大概leetcode中等难度。
 这里我感觉我犯了什么大病,我有点紧张,拿到题我想着有没有好的解法,我想着暴力太傻了。结果想了五分钟没结果,我就说不好意思面试官,我先用最傻的法子写一下看看。
 然后两分钟写了一个暴力解法,结果一交,过了,我傻了早知道我直接写这个了。
 面试官问我还有没有更好的解法。
 我把暴力写完马上出来思路了,刚好面试时候问道了map,我用map映射结果了一边,耗时比第一次少了(代码我不大记得了,复杂度我当时也没有算到,如果经常刷题的我建议多培养自己,拿到不太复杂代码可能一眼看出复杂度的能力,还有一些数据结构的复杂度也要牢记)。

面试官:好的思路是对的哈

-------------------------------------------------------------------------------------------
然后第一次面试就结束了.
**总结:**
总的体验,这个面试官还是比较和蔼的,没有特别严厉,体验不错,主要自己太菜,希望下一次有一个好的表现,还有一个教训就是算法题第一遍没思路第一遍一定暴力解,不要费太多时间,算法题做得快是很加分的。

自己平时没事就去看看面经,基本的“八股文”要在面试的时候很熟了,不要临时还在看这些,主要自己简历上写到的东西一定要深入了解,甚至从这个方向的由来,有哪些名人有什么成就,最新的技术是什么等等。


大家看到了有什么想法可以互相交流。


#字节跳动##实习##面经#
全部评论
多态这里不是非要用虚函数实现,虚函数是C++的一个功能,人们常用他实现多态,多态还分为静态多态和动态多态,可以分为静态多态(重载,编译阶段确认函数地址)和动态多态(派生类继承重写基类的虚函数实现的多态,在运行时从虚函数表中寻找调用(虚)函数的地址);
1 回复 分享
发布于 2021-08-19 21:31
大三学长??
点赞 回复 分享
发布于 2021-07-07 12:08

相关推荐

03-30 20:53
东南大学 C++
一、自我介绍 / 岗位匹配 / 方向选择1.请做一下自我介绍。2.你之前主要投的是后台岗位,为什么后来转向客户端?3.你说自己和后台岗位匹配度不高,主要差在哪些方面?4.你对移动客户端开发岗位是怎么理解的?5.你为什么会考虑客户端 / SDK / AI 应用这些方向?二、实习项目整体理解:端侧特征平台做什么6.你在字节这段实习主要做了什么?7.你们这个 SDK 的定位是什么?是跨端的吗?8.你们这套东西更像 APM、数据采集,还是特征处理平台?9.你对这套业务在线上产品里的完整流程理解到什么程度?10.原始事件是怎么转成特征,并最终被业务方使用的?三、本地数据库 / SQL / 特征查询链路11.你们端上的数据是怎么存的?为什么用本地数据库?12.这个数据库用的是什么?它是普通数据库,还是有针对性能做特殊设计?13.你看到过哪些查询 / SQL 优化相关的内容?14.你做的 SQL 复用优化,本质上是在优化什么问题?四、设备特征缓存优化:设计、指标、并发问题15.你讲一下设备特征缓存优化这个需求的背景和方案。16.为什么会想到做 2s / 10s / 90s 这样的分层缓存?这些数值是怎么定的?17.你这个缓存是怎么检查过期、怎么更新的?18.这套缓存是你们第一次上线的吗?19.最终的优化收益是怎么测出来的?30%、Android 4.8%、iOS 2.5% 分别代表什么?20.你这里用到的智能指针和 concurrent hash map,线程安全和内存安全是怎么理解的?21.如果缓存瞬间失效,又来了很多并发请求,会不会出现类似缓存击穿的问题?你怎么处理?22.如果让你继续优化这套缓存,你觉得还能怎么做?五、特征 SQL 结果缓存 / 事件驱动失效 / TTL23.你说的特征 SQL 复用具体是怎么做的?24.所谓 SQL 签名化是什么意思,为什么要这么做?25.这个查询结果缓存的 key 和 value 分别是什么?26.查询结果缓存怎么判断是否还能复用?27.事件驱动失效机制具体是什么?为什么事件变了缓存就会失效?28.你这里有两个 TTL:设备特征缓存 TTL 和特征查询缓存 TTL,它们分别是怎么设计的?29.后期你提到不是直接删缓存,而是把最新结果插入缓存,这个思路具体是什么?30.这里有没有用队列或者别的方式维护事件变更?六、实习中的挑战 / 自动化测试 / MCP & Agent 生成用例31.这段实习里你遇到过最大的挑战是什么?32.这个需求是你一个人做的吗,还是 mentor 带着推进的?33.你提到自动化测试用例,这块具体做了什么?34.这些测试用例属于什么级别,是接口测试、单元测试,还是别的?35.你做的 MCP / Agent 自动补全测试用例,大致思路是什么?36.如果测试失败了,你们后续有没有自动分析、自动修复,还是主要人工处理?七、AI Coding:工具使用、代码占比、主要问题37.你现在 AI 用得多吗?平时会付费用哪些工具?38.你在项目里手写代码和 AI 生成代码的比例大概是多少?39.你主要用什么 AI coding 工具?40.你觉得 AI 写代码最大的优点和最大的问题分别是什么?41.如果 AI 生成的代码不符合你的预期,你一般怎么改进?八、多 Agent 项目:设计、评估、稳定性42.你这个 AI 投资分析系统整体是怎么设计的?43.多 Agent 的分工和整体执行流程是什么?44.你是一步步确认它生成的内容,还是一次性让它完成?45.你怎么判断一个 Agent 是否满足你的预期?46.Agent 和 Agent 之间通信的数据格式是谁定义的?47.多次运行的时候,Agent 之间输出的格式和结果能保持一致吗?48.如果模型不按你定义的格式输出,你会怎么优化?49.你这里 prompt、rule、skill 分别用在什么地方?九、上下文窗口 / 滑动窗口 / 记忆管理50.你高并发 AI 聊天系统里提到的“滑动窗口”具体是怎么做的?51.为什么要做这个滑动窗口?它解决了什么问题?52.这个窗口的 size、起点和终点是怎么定的?53.你怎么判断哪些上下文该保留,哪些该裁掉?54.你这个设计是不是严格来说不算真正的滑动窗口?55.如果让你重新设计这块上下文管理,你会怎么优化?十、C++ / 网络库 / 并发框架56.你这个高并发 AI 聊天系统里的网络库,是自己写的还是现成的?57.你给我讲一下这个网络框架的整体设计。58.epoll 在这里起到了什么作用?59.你的线程池是怎么设计的,为什么要动态扩容 / 缩容?60.你的网络库里,最核心的几个组件和职责分别是什么?十一、弱网排查 / 网络链路 / 协议优化61.如果用户反馈“很卡”,你怎么判断到底是不是弱网问题?62.如果线上只能看到网络日志,你会重点看哪些指标来排查?63.从输入网址到页面加载完成,整个网络链路里会经过哪些步骤?64.DNS、TCP 建连、资源下载这些环节分别可能出什么问题?65.如果 DNS 慢或者查不到,有什么优化思路?66.如果服务端响应慢或者 TCP 层有问题,你会怎么排查?67.对于弱网场景,有没有一些客户端侧的兜底优化手段?68.你了解哪些协议层面的优化,比如多路复用、QUIC 之类的吗?算法题:滑动窗口最大值面了一个半小时,面试官整体比较和蔼,不追问。转面客户端整体强度还是小了很多,不管了,现在能赚几年钱赚几年,有了AI以后哪个方向都是危机了,还是争取拿个好背书吧
点赞 评论 收藏
分享
评论
6
42
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务