阿里巴巴
提取自:https://www.nowcoder.com/discuss/631598?type=all&order=time&pos=&page=1&channel=-1&source_id=search_all_nctrack
top K
HTTP1.0 1.1 区别
1.加入了长连接(持久连接):一个请求去请求浏览器的11个对象,所有的请求及相应都由相同的TCP连接发送,后续只要任意一端没有明确提出断开连接,则保持连接一直存在
2.使用了管道网络传输:客户端可以发起多个请求不用等待前一个请求返回后在发送,减少了整体的相应时间
3。采用了队头阻塞:采用对头阻塞解决管道网络传输中的顺序问题,及前一个请求因为某某种原因阻塞后面的请求一并阻塞
4.新增加了一写错误状态码:如409请求的资源与当前资源冲突,410服务器上的某个资源被永久删除
5.增加了缓存
扩展Http2.0
- 进行了头部压缩:减少了冗余部分,采取的是HPACK算法。两方维护一个头部信息的索引表
- 采用二进制格式传输:头部信息和数据体采用二进制,并且统称为帧。对计算机友好
- 采用数据流:HTTP/2的数据包不是按顺序发送的,同一个连接里面连续的数据包可能属于不同的回应,必须要对数据包做标记,指出它属于那个回应。每个请求和回应的数据包成为数据流。客户端发出的数据流编号位奇数,服务端为偶数,还可以设置优先级
- 采用了多路复用的机制:一个 连接中的并发多个请求或回应,而不用按照顺序一一对应
- 服务器推送:主动向客户端发送消息,减少等待时间(比如客户端请求HTTP页面,可以将可能用到的JS,CSS文件提前退送给客户端)
死锁的条件 如何避免
死锁的条件:
- 互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求该资源,则请求者只能等待,直至占有该资源 的进程用毕释放。
- 请求和保持条件:指进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
- 不可剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
- 环路等待条件:在发生死锁时,必然存在一个进程——资源的环形链。
如何避免
只要破坏其中一个条件就不会产生死锁
①破坏“请求和保持”条件:破坏请求:系统规定所有进程在开始运行之前,都必须一次性地申请其在整个运行过程所需的全部资源。破坏保持:分配资源时,只要有一种资源不能满足某进程的要求,即使其它所需的各资源都空闲,也不分配给该进程,而让该进程等待。
②破坏“不可抢占”条件:当一个已经保持了某些资源的进程,再提出新的资源请求而不能立即得到满足时,必须释放它已经保持了的所有资源,待以后需要时再重新申请。
③破坏“循环等待”条件:系统将所有资源按类型进行线性排队,并赋予不同的序号(mysql中使用了这种方法)
项目用到了哪些锁 答的读写锁,互斥量,问为什么要有读写锁?
可以防止脏读和幻读,以及读到未提交数据
select poll epoll 原理 (后续补充)
问项目:
说一下linux文件系统
Linux 中的各种事物比如像文档、目录(Mac OS X 和 Windows 系统下称之为文件夹)、键盘、监视器、硬盘、可移动媒体设备、打印机、调制解调器、虚拟终端,还有进程间通信(IPC)和网络通信等输入/输出资源都是定义在文件系统空间下的字节流。
一切都可看作是文件,其最显著的好处是对于上面所列出的输入/输出资源,只需要相同的一套 Linux 工具、实用程序和 API。你可以使用同一套api(read, write)和工具(cat , 重定向, 管道)来处理unix中大多数的资源.
gdb调试会吗,怎么调试多线程的程序(info threads,thread ID,然后打断点)
项目代码量多少
7000行
平时看了什么的源码
框架:spring
hashmap,可重入锁,unsafe类,等
设计模式会吗
会,了解一些设计模式如:单例模式,工厂模式,代理模式,原型模式等
10T数据,出现数字随机,如何统计每个数字出现的次数…(当时讲的归并,后面想想通过哈希实现更好?)
https://www.cnblogs.com/itxiaok/archive/2019/02/15/10385676.html这篇文章不错
leetcode 做了多少题(实话实说)
100题左右,牛客80多,leetcode20多