字节跳动 C++开发实习岗

岗位

C++开发实习岗。
职位描述
1、负责客户端在Windows/MacOS等平台的能力优化和扩展;
2、参与产品需求的讨论、评审和功能实现,对质量负责。
职位要求
1、C++基本功扎实,掌握一门脚本语言,有持续改善意识;
2、对Windows系统机制/MacOS各组件功能及实现方式有深入了解;;
3、本科及以上学历,每周实习3天以上,连续实习3个月以上。

一面

1. 浏览器刷新界面服务器如何区分两次相同的请求?
我回答的是session和cookie,他说不是这意思,就是从客户端发回来的字节序中怎么区分?
2. httpHTTPS在建立连接的时候的区别与联系。HTTPS中的S是指什么?
首先客户端通过URL访问服务器建立SSL连接。
服务端收到客户端请求后,会将网站支持的证书信息(证书中包含公钥)传送一份给客户端。
客户端的服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
服务器利用自己的私钥解密出会话密钥。
服务器利用会话密钥加密与客户端之间的通信。

3. 多线程中会对全局变量进行pad操作,请问是为啥?
当时没听懂pad是啥,面试官解释说就是padding操作,知道struct中的内存对齐吧,就是那种

4. 如何实现在服务器程序升级过程中保持与客户端的连接不断开?

5. Fork之后的父子进程的虚拟内存空间的相同与不同

6. C语言中除了malloc还有哪些获取内存的方式(不是指API的不同,而是获取内存方式的不同)
开始的时候我回答realloc, calloc, new, allocator,他说这些都是底层封装malloc,他问的是那种底层实现就不一样的。然后提示了我一下mmap,我说就是那种文件映射,共享内存,他说共享内存算是一种。其他的是真不知道了我就。

7. 一个线程是如何被挂起的?

8. 一个进程是如何被挂起的?

9. PV操作是怎么实现的?

10. 多核处理器的缓存行是怎么实现的?
11. 介绍一下自旋锁与互斥锁
13. 介绍一下条件变量
14.   数据库中有两个关联列,请问在搜索时,这两个关联列会怎样?(不懂数据库,大概意思就是这)

二面

1. 介绍自己做过的项目
2. 一道算法题
#C开发实习##实习##面经##字节跳动##C++工程师#
全部评论
只有我觉得一面的问题很难吗?多线程中会对全局变量进行pad网上搜都搜不到.。。
1 回复 分享
发布于 2020-11-30 22:17
如何实现在服务器程序升级过程中保持与客户端的连接不断开? 这个有人回答一下嘛
点赞 回复 分享
发布于 2020-12-10 18:00
线程 和 进程 挂起 不是 一样的原因吗,楼主 这两个 挂起 有什么 区别吗qwq
点赞 回复 分享
发布于 2020-12-02 17:25
第6题,有大佬回复我说是,brk和sbrk,malloc就是基于这两个实现的,如果实在类Unix系统中
点赞 回复 分享
发布于 2020-12-02 13:29
对于6,局部变量的栈内存和全局变量占用的.bss内存要分配的空间大小在编译期就已经确定了,是由程序已有指令自动分配的。 动态分配的话,主要是分配得到堆内存和mmap内存,动态分配栈内存可以通过 alloc() 函数。 堆内存的话,由堆管理器作为内存中间管理者。 堆管理器向操作系统申请内存主要通过 brk 和 mmap 两种系统调用,申请到的内存以 arena 的形式管理。其中,主线程申请的较小的内存使用 brk 系统调用直接在代码段的上方扩展空间得到,过大的内存申请则由 mmap 系统调用申请一个 mmap 段得到;而其它线程的堆空间只是由 mmap 系统调用提供。 而用户向堆内存管理器提出动态内存分配申请,则是通过坤坤你答过的一系列标准库函数 malloc()、realloc() 等,从已有的 arena 中获取由堆管理器以 chunk 形式管理起来的内存。 mmap 内存的话那就直接用封装了 mmap 系统调用的库函数 mmap() 喽。
点赞 回复 分享
发布于 2020-12-02 13:24
1、TCP的 sequence number? 3、不对齐可能会引发一条CPU访存指令分成两次操作执行,从而使得并发执行中产生问题:参考[多核并发编程中的cache line对齐问题](http://blog.kongfy.com/2017/01/%E5%A4%9A%E6%A0%B8%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B%E4%B8%AD%E7%9A%84cache-line%E5%AF%B9%E9%BD%90%E9%97%AE%E9%A2%98/) [内存访问为什么需要地址对齐](https://www.sunxidong.com/532.html) 4、参考Nginx热升级+进程间传递sockfd?
点赞 回复 分享
发布于 2020-12-01 19:57
6 感觉是楼主想复杂了吧 直接定义变量也是获取内存啊,不过是获取栈内存; 定义全局变量或者static变量应该也算是一种方式吧
点赞 回复 分享
发布于 2020-12-01 16:21
fork调用时将两个进程中每个页面标为只读,再修改这些页面时,会仅为修改的页面修改创建一个副本 当fork在新进程中返回时,新进程的虚拟内存和调用fork时存在的虚拟内存相同 见 CSAPP 584页、APUE 182页
点赞 回复 分享
发布于 2020-12-01 16:07
fork以后是写时复制吧,读取的时候共享,写的时候再分配新内存。这个从虚拟内存的角度应该咋回答。。。
点赞 回复 分享
发布于 2020-11-30 19:37

相关推荐

05-11 22:04
门头沟学院 Java
前面就是基本上是八股盛宴,然后看你说什么词触发他被动然后追着问。复盘的时候确实发现底层网络和操作系统问得挺细的,可能客户端偏底层?总体来说面得挺舒服的,面试官也很友善,一个小时很快就过去了。提问环节:1. 自我介绍2. 面试官强调这是客户端面试 说明一下base地,进来要转cpp3. 了解cpp吗?不了解,对于两者的理解我认为最大的不同在于内存管理,cpp可以灵活地控制内存,提高程序运行效率。Java通过jvm来进行内存管理,好处是系统自动分配内存和垃圾回收,安全简单,缺点就是不能更颗粒度地操作内存。还有就是cpp的学习曲线比较陡峭,其他的就不太清楚了。4. Java集合有哪几种?ArrayList,Linkedlist,HashSet,hashmap,ConcurrentHashMap5. ArrayList和LinkedList有什么区别?底层实现,读写应用场景,6. 具体到每一个节点上,他们两在内存占用上哪个更优?ArrayList底层是连续内存的动态数组,利用了计算机的局部最优特性,所以更优一些7. 什么是反射?通过类名在程序运行时构建类实例,操作类方法,类字段,增强编码的灵活性和解耦,但是也存在着安全的隐患8. JVM是如何反射构建类对象的?通过方法区中存放的类信息,字段和方法,去构建类对象实例9. 讲一下类加载机制,描述一下类是如何被加载的?加载-验证-准备-解析-初始化-使用,然后具体内容10. 类加载的时候,它对静态成员变量和非静态成员变量的处理具体有什么不同?静态放在方法区,局部变量放在堆,基本数据类型放在栈帧11. 讲一下CAS是什么?12. 有没有遇到ABA问题?13. Mysql底层存储的数据结构是什么?14. 平时写sql查询语句时需要注意什么,对查询进行优化,结合一个例子说明?15. 你的主表的主键ID是增长是+1吗?还是怎么样?16. 推荐使用顺序递增索引,说了一下顺序递增和UID的优缺点17. 有遇到并发插入,出现ID空洞的情况吗?没有,加行锁了18. 你刚刚说了行锁是吧,那Mysql具体有哪些锁?行锁、表锁、全局锁,间隙锁防止幻读19. 什么是幻读?20. 我看你有提到计算机网络,介绍一下UDP和TCP差异21. 如果在客户端建立TCP的话,一般会怎么做?(愣了一下)一般是操作系统底层通过协议栈来进行网络连接,通过JavaAPI来操作Socket层来进行网络连接通信22. 你有用过java的Socket相关的这些,手动去建立连接的API吗?用过简单的http网络请求连接,还有使用Java的网络应用框架Netty来进行网络通信,可以自定义消息序列方式和序列头等信息23. 你刚才提到操作系统负责网络连接,你知道操作系统提供的TCP的API是什么吗?不太清楚,没有在操作系统层面上实现过这种网络通信的调用24. 解释一下TCP和HTTP这两个专有名词?25. HTTP一定要建立在TCP上吗?还是说UDP也可以?26. 你刚刚说了QUIC协议,关于QUIC你知道哪些呢?27. 既然你提到了中间密钥,那它建立连接的大概过程是什么?28. TCP协议的握手是干什么的,为什么要有握手的过程?29. 它如何保证不接收过去的数据呢?30. 说了一个乱七八糟的问题,什么什么API和你刚刚说的握手有什么关系?(没听懂)31. 那我换一个问法,你知道半连接队列吧?那它在握手的哪一步把链接从半连接移到全连接队列?32. 如果第三次握手的ACK,客户端没收到,会怎么样?33. OK网络相关的就,嗯(话锋一转),HTTP头的大概结构你清不清楚?34. 问你两个操作系统相关的问题,kill命令有用过吗?(玛德没听清,没回答出来)结束一个进程一般用shutdown或者close函数35. 嗯我不是说在你程序内,那你有个jar包跑起来了,你怎么把它删掉?一般在服务器上用docker部署多个容器,用docker stop来停掉程序36. 那你知道在Linux平台,进程退出的时候会有几种信号,你知道几种它们有什么不同?不清楚具体哪个信号,说了个shutdown和shutdownNowPS:GPT说有6种,对应不同触发的方式:SIGHUP是终端关闭挂起,SIGNT是Ctrl键+c优雅退出,SIGQUIT是Ctrl键+\用于调试,SIGKILL是强制终止进程,SIGTERM是kill <PID>用来杀死进程优雅终止,SIGTOP是暂停进程可恢复37. OK,那你对Window系统相关的知识了解吗?不太清楚,只用过一些简单命令行做题:翻转数字?(“123456”输出“654321”)聊天环节:1. 因为我们这边是客户端开发,你这个经验都是服务端的,有做过安卓或者是其他平台的开发吗?做过一个功能比较全的C#全栈作业2. 那你愿意找客户端吗?(灵魂拷问)(流汗黄豆)可以考虑反问:3. 腾讯对于转语言或者转岗位的同学会有过渡的培训吗?会有,但也看部门,主要是看你有没有意愿去做这个方向的工作4. 元宝客户端具体是做PC端还是移动端?都有,具体看你兴趣就行(😥)5. 那具体的业务是干什么的?业务就是元宝客户端,你在各个平台都能搜到的吧,这就是我们的业务(😥这不没说吗?)6. 那客户端主要的工作是集中在哪些方面?用户使用界面?类似前端JS的逻辑处理?都会做,不光是UI展示,还有用户交互层面,也有数据要处理。虽说是客户端,但是整个数据的上下链路都是要做的7. 腾讯对实习生会不会苛刻一些?主要看不同部门的要求,我们这边还好,更注重你的基础是否扎实,解决问题的能力。
点赞 评论 收藏
分享
评论
8
53
分享

创作者周榜

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