网络&操作系统
1.进程通信的方式有哪些,linux中管道的底层原理
管道、消息队列、共享内存、信号量、信号、socket
要知道管道、消息队列、共享内存的本质:内存本质、效率以及传输数据的要求,各种方式使用
https://www.jianshu.com/p/376b8ac0e461
2.tcp三次握手和四次挥手,四次握手流程,说一下 time_wait
https://www.jianshu.com/p/186485ef5e5e
TCP四次挥手,结合CS两端点的TCP栈和上层应用的交互来解释四次挥手,以及为何需要中间那个FIN-WAIT-2这个过程,最后由被动关闭一方的上层应用通过调用socket.closed()来结束数据传输,进入最终的FIN模式;
3.tcp传输中慢启动原理
https://www.jianshu.com/p/f95f64711902
慢启动,是TCP 协议为了保证可靠性传输而设计的拥塞控制策略中的一个算法,什么是拥塞控制?定义:当网络拥堵时,TCP会出现超时、丢失情况,触发重传数据,但是这会导致情况加剧,TCP 牺牲自己降低发送数量为,叫做拥塞控制。
TCP 拥塞控制、重传机制、滑动窗口、流量控制的关系(https://mp.weixin.qq.com/s/Tc09ovdNacOtnMOMeRc_uA)
tcp重传 https://www.jianshu.com/p/9f7ff80b9d3d
4.一个 10M 大小的 buffer 里存满了数据,现在要把这个 buffer 里的数据尽量发出去,可以允许部分丢包,问是用TCP好还是UDP好?为什么?
tcp,udp传输的是报文,每个包都一样大小,最大报文长度1472,大于就把数据分片,但不允许中间有包丢失,否则接收端协议栈不能组合完整数据
5.https原理
HTTPS 加密过程,需要几次通信
http与https的区别,加密怎么加的?
http各种返回码,401和406啥区别?
Https的过程讲一下。先是说了http+ssl,dns之后,准备讲ssl的原理时,他示意我说回答一下传输层相关的。然后我就回答了tcp三次握手,对着服务器端指定端口,比如80端口发起连接,之后就是正常的数据请求了
https://mp.weixin.qq.com/s/bUy220-ect00N4gnO0697A
6.完整HTTP 请求涉及哪些协议?
https://mp.weixin.qq.com/s/bUy220-ect00N4gnO0697A
6打开一个 URL 的过程 https://mp.weixin.qq.com/s/iSZp41SRmh5b2bXIvzemIw
7.进程的调度:https://www.jianshu.com/writer#/notebooks/37032437/notes/80945566(待发布)
8.操作系统内存模型?哪些区具体放什么?
虚拟地址、物理地址
内核地址空间、用户地址空间、
进程内存空间模型:代码段、数据段、栈、堆等
https://www.jianshu.com/p/97d2ce61f64a
9.linux 里,被打开文件可以被另一进程删除吗?
不会真正删除,linux 有 2 个删除文件函数:
int unlink(const char *pathname); 删除文件系统中名字,如名字是文件最后一个link 且 该文件没被打开,删除。否则等关闭或最后link被删除,释放空间
int rmdir(const char *pathname); 只目录空时,才能删除
https://blog.csdn.net/weiwangchao_/article/details/94578327
https://www.cnblogs.com/StartoverX/p/4600866.html
10.linux中seletc和epoll原理
https://www.jianshu.com/p/4bca399daca3
二、db redis:
1、为什么 mysql 用 B+ 树,mongodb 用 B 树?https://www.jianshu.com/p/9916e4483905
2、用过哪些锁,自旋锁和互斥锁区别?https://www.jianshu.com/p/7c5e28d839bb
3、mysql 主从同步怎么搞的?分哪几个过程?新机器要加到从机里,怎么个过程?
同步:https://www.jianshu.com/p/3fae2a45623f
扩容:https://www.jianshu.com/p/340d0b207a04
4、binlog 日志是 master 推的还是 salve 来拉?s拉,https://www.jianshu.com/p/dacea10cbddb
5、mysql,redis, zookeeper 分布式锁优缺点 https://www.jianshu.com/p/914c738d29f3
6、redis setnx + expire 有什么缺点,如何优化 https://www.jianshu.com/p/e6548912893b
7、redis 跳表,为什么不用红黑树?https://www.jianshu.com/p/0fd6de64bcbf
8、redis 集群怎么实现,说下一致性 hash
9、zset 延时队列怎么实现
https://www.jianshu.com/p/326052101b6c
https://www.jianshu.com/p/072ecd523590
10、ZSET 做排行榜,分数相同时,按时间顺序排序怎么实现?说了一个将 score 拆成高 32 位和低 32 位,高 32 位存分数,低 32 位存时间的方法
11、让你设计一个限流的系统怎么做?令牌桶
12、让你设计一个延时任务系统怎么做 说了两个方案,一个是使用 redis 的 ZSET 来实现,考虑分片来抗高并发,使用 redis 的持久化来实现落地,使用 redis 的哨兵实现故障转移。一个是使用时间轮的方法。
中间件
DUBBO的底层原理
rabbitmq 的工作原理
kafka 工作原理,如何保证顺序等
Kafka 选主怎么做的?
kafka 分区怎么同步的
kafka 为什么可以扛住这么高的qps
kafka partition broker consumer consumer group topic 等都是啥关系?
Netty的IO原理,答:Reactor反应模型,Linux那边叫做IO多路复用。一个线程用来接收请求,将读写事件交给背后的worker线程。Redis、Nginx、Netty都是用到了这种模型。Redis其实也是多线程,只不过是用单线程来接收请求,在客户端看起来是串行接收执行,所以效果上就是单线程。但是IO多路复用才是Redis能高并发的底层保证
系统设计
海量的评论系统。这部分一共聊了近 20 分钟
设计海量日志系统
微信朋友圈系统,列出主要的表结构,只需要实现一些基础的功能,比如聊天列表等。写出一些数据结构
设计一个长链接转短链接,不过需要考虑高并发,回答了分库分表
算法:
实现简单令牌桶算法,没有考虑随时间滑动的情况;
加强版:令牌桶,加上随时间滑动的要求,即:限制用户在任一连续的一小时内,不能超过5W的请求。这边提到了说将一小时分成多格,比如60格这样的,面试官点头貌似同意了,然后就实现代码了,包括协程异步更新时间窗口;
把一个方程式设计成树以及很多的 follow up
①给你一个整数 n,使得从 n 中删除 k 个数字之后的数字最大
二叉树中和为K的所有路径
链表表示的两个数相加
股票买卖,一次和无限次两
给定一个数组代表股票每天的价格,请问只能买卖一次的情况下,最大化利润是多少?日期不重叠的情况下,可以买卖多次呢?
输入: {100, 80, 120, 130, 70, 60, 100, 125}
1)只能买一次:65(60 买进,125 卖出)
2)可以买卖多次: 115(80买进,130卖出;60 买进,125卖出)
输出买卖的序列和最大利润
求一个有序整数数组中和为K的数的对数
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
两个单向链表,返回求和后的链表结构,例如2->3->1->5,和3->6,结果返回2->3->5->1
一个无序数组找其子序列构成的和最大,要求子序列中的元素在原数组中两两都不相邻
现有一个随机数生成器可以生成0到4的数,现在要让你用这个随机数生成器生成0到6的随机数,要保证生成的数概率均匀。
有 N 枚棋子,每个人一次可以拿1到 M 个,谁拿完后棋子的数量为0谁就获胜。现在有1000颗棋子,每次最多拿8个,A 先拿,那么 A 有必胜的拿法吗?第一个人拿完后剩余棋子的数量是8的倍数就必胜,否则就必输。
给出一棵二叉树的根节点,现在有这个二叉树的部分节点,要求这些节点最近的公共祖先
1.https://blog.csdn.net/weixin_33805152/article/details/106618948;
2. https://leetcode-cn.com/circle/discuss/A0YstA/;
3. https://www.nowcoder.com/discuss/476824?type=post&order=time&pos=&page=1&channel=-2&source_id=search_post&subType=2;
4. https://www.sohu.com/a/404254709_463974
演拉登的题:
1、操作系统中断时,保存上下文保存的都是什么内容
2、print f输出输入时,程序怎么运行,操作系统底层在干嘛
3、Java里边的future等待时候底层在干嘛,操作系统在干嘛
4、红黑树原理,证明红黑树查找logn
5、序列化和反序列化 https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof/submissions/
6、两个线程并发输出,1到100,怎样才能保证输出按顺序