12.1 字节-商业变现后端实习三面(凉经)

12.1 一面(1h 10min) ---------------------------------------------------------------------------------------------
1. 项目相关
2. 讲一下I/O多路复用吧
3. select、poll和epoll的区别
4. select和poll什么区别
5. 讲一下项目中服务器各模块交互
6. 讲一下reactor和proactor模式的区别,讲一下项目的服务器中整个请求处理的经过
7. 协程有了解过吗?什么情况下用协程
8. mysql事务特性有哪些?分别介绍一下
9. mysql有哪些隔离级别?
10. 如何保证数据库的持久性?
11. 聊一聊你比较熟悉的Mysql存储引擎? 答的InnoDb和MyIsam
12. 聊一下InnoDB和MyISAM的区别
13. 能补充一下这两个在外键上面的区别吗?
14. 并发访问过大,怎么优化访问过程?
15. 介绍一下集群和负载均衡
16. 讲一下redis如何做缓存?
17. 对于用户请求,缓存和磁盘数据库的访问顺序是怎样的?
18. 讲一下sql语句执行的过程
19. 缓存里面一般放什么呢?
20. 怎样实现缓存和磁盘数据库的一致性?Mysql中进行更新了之后如何更新到redis里面呢?
21. 怎样保证缓存读写一致性?
22. 讲一下redis内部数据结构
23. 介绍一下redis中有序集合的存储结构?
24. 介绍一下跳表
25. 讲一下redis集群
手撕环节:
1. 一个sql语句,时间太久不记得了
2. 还有一个算法题,时间太久忘了
12.2 二面(50min)-----------------------------------------------------------------------------------------------
1. 项目相关,为什么做这个项目
2. 你的QPS是怎么测的,服务器运行环境是怎样的?(Webbench)
3. 你觉得怎么测QPS比较准确一点?有想过为什么现在的QPS是你的最高值呢?哪些因素会影响你的测试效果?
4. 你觉得你的服务器可以怎么完善?
5. 采用的什么并发模式?
6. select、poll和epoll的区别?分别什么时候使用?
7. epoll系统调用接口有哪些?
8. Linux指令了解哪些?平常都用哪些?
9. jobs指令返回的内容解释一下
10. tcpdump你一般怎么用的?
11. 讲一下滑动窗口
12. 滑动窗口大小是多少?初始大小是多少?
13. 讲一下Timewait?为什么要设置TimeWait?
手撕环节+反问:
1. 一个算法题
12.4 三面(30min)(被吊锤)-----------------------------------------------------------------------------------------------
1. 项目相关
2. 301、302、304分别表示什么意思?
3. 同一个url产生的界面不一样,为什么?(答:可能根据IP划分)
4. 怎么划分IP?(一直在打断,一直在追问。。。)
5. 如果让你设计一个任务调度系统,你会怎么设计?
6. 讲一下一个任务调度的过程
7. 你任务调度系统里面的任务如何存储?
8. 操作系统里面的线程是如何存储的呢?
9. 如果让你设计一个ID生成器,你该如何设计?
10. 甲和乙一次抛硬币,抛到正面即胜利,请问甲和乙获胜的概率分别是多少?
手撕环节:题目忘记了
11. 讲一下redis集群
#实习##面经##字节跳动##C++工程师#
全部评论
I/O多路复用是Linux五种I/O模型之一,其他几种分别为同步阻塞IO、同步非阻塞IO、信号驱动IO、异步IO。其中除了调用特殊的api接口之外,都是同步的。IO多路复用在Linux下目前常用有三种实现:select、poll、epoll。其中目前最为流行的就是epoll,其是在内核中维护了一颗红黑树存储socket信息,也就是要监听的socket。同时,还有一个链表负责存放发生事件的socket。调用epoll_wait函数,当监听的socket中发生事件之后,就会从epoll_wait返回发生事件的文件描述符。 除此之外,epoll还有两种模式,分别是ET和LT模式。其中ET模式就是事件只会触发一次,如果没有处理的话,下次这个事件不会再次返回。LT模式则是,这个事件没有被多次处理,下次还会返回回来。ET才是真正的高效,而LT则可以看成一个高效的Poll。但是muduo中就采用了LT模式(扩展知识,可以展开讲muduo)。 poll是一个改良版的select,这里就从select讲起。select维护了个32个整型的数组,每个数组有8位,每一位都可以表示一个文件描述符,总共也就可以监听32*32=1024个socket。当调用select监听的之前,每次都要先把这个数组清空,然后对不同的socket注册不同的感兴趣事件。当select返回的时候,我们就需要轮询这个数组,判断每个描述符其是否是发生了事件。 而poll也是这一套机制,不过其使用了一个结构体将描述符fd和感兴趣事件event联系起来,同时其突破了1024的限制,最大可监听数达到了65535。
2
送花
回复
分享
发布于 2021-05-30 21:32
楼主你好,请问你是什么岗位?开发的话,是Java方向还是C++方向?或者其他语言方向~
1
送花
回复
分享
发布于 2021-03-09 17:46
秋招专场
校招火热招聘中
官网直投
之前听说C++20也引入了协程,但是不完善,估计要等到C++23。所以当时去剖析了腾讯微信开源的libco,顺便也学习一下协程的知识。 协程又称用户态的线程,是因为其之间的切换是只在用户态进行的,而不需要切换入内核态。就像一个进程有多个线程一样,一个线程也有多个协程。在libco中,一个协程只能运行在一个线程中,其和线程的关系类似于进程之于CPU。这里是跟go语言协程不同的第一个点。 第二个点就是,go语言的协程是对称式的,其协程之间的调度由调度器来resume,然后协程中断执行也会将CPU使用权yield回调度器。而libco这里则是非对称式的,其使用一个pCallStack来跟踪当前的协程调用情况,栈顶永远都是当前正在执行的协程。栈底则是主协程所在的地方,主协程也就是main函数那个协程,其在调用resume其他协程之后就进入了eventloop中负责调度其他协程。而当前的栈顶协程当执行完后,其就出栈,栈顶指针--,也就是将CPU使用权yield到它下面的那个协程。
1
送花
回复
分享
发布于 2021-05-30 22:07
事务时mysql的一种机制,事务中的执行序列要不都执行成功,要不都不执行成功。而事务有四大特性,即ACID。 A即原子性,指事务是一个不可分割的单位。 C即一致性,表示事务按照预期生效,数据的状态是预期的状态 I即隔离性,隔离性又分为四个级别:读未提交、读已提交、可重复读和串行。 读未提交指:同事A在执行事务的过程中,同事B能读到A在事务中修改的数据 读已提交指:同事A在事务中修改了数据,同事B需要在A提交事务后才能读到这个 可重复读指:A提交事务之后,同事B如果不重新登录是读不到这个数据的 串行:AB同时只能有一个开启事务,另一个会被阻塞 D即持久性,指事务提交之后,其的影响是持久的
1
送花
回复
分享
发布于 2021-06-01 20:45
是武汉的部门吗
点赞
送花
回复
分享
发布于 2021-03-09 19:40
楼主最后还是没过吗
点赞
送花
回复
分享
发布于 2021-03-09 21:45
都回答出来好多了 还是没过 好难啊😥
点赞
送花
回复
分享
发布于 2021-03-11 22:03

相关推荐

1 44 评论
分享
牛客网
牛客企业服务