1.缓存雪崩、击穿、穿透是什么?怎么解决?
2.布隆过滤器原理介绍一下?
3.如何设计秒杀场景处理高并发以及超卖现象?
4.网络OSI模型和TCP/IP模型分别介绍一下
5.tcp、ip分别位于哪一层?
6.应用层有哪些协议?
7.应用层HTTP报文有哪些部分?
8.应用层HTTP常用的状态码?
9.应用层HTTP返回状态301 302分别是什么?
10.应用层http 502和 504 的区别?
1.缓存雪崩、击穿、穿透是什么?怎么解决?
雪崩(大量key):当大量缓存数据在同一时间过期(失效)或者 Redis 故障宕机,缓存无法命中,大量请求达到数据库,对数据库造成严重压力。
击穿(单个key):热点key过期,大量请求达到数据库,对数据库造成严重压力。数据库很容易就被高并发的请求冲垮。
穿透:当用户访问的数据,既不在缓存中,也不在数据库中。直接穿透redis,不断打到数据库。
解决方案:总的思路就是,尽可能少的请求到数据库。
雪崩:均匀设置key的过期时间,或者设置互斥锁,在发现未命中时,只有一个线程可以访问数据库,写缓存。再可以设置后台线程,定期更新缓存,不设置过期时间(不推荐)。
击穿:提前预热,把数据先缓存。
穿透:数据库未命中,也把这个假key写到缓存中。非法请求的限制,缓存空值或者默认值,布隆过滤器。
2.布隆过滤器原理介绍一下?
不存在就一定不存在。
我们可以在写入数据库数据时,使用布隆过滤器做个标记,然后在用户请求到来时,业务线程确认缓存失效后,可以通过查询布隆过滤器快速判断数据是否存在,如果不存在,就不用通过查询数据库来判断数据是否存在。即使发生了缓存穿透,大量请求只会查询 Redis 和布隆过滤器,而不会查询数据库,保证了数据库能正常运行,Redis 自身也是支持布隆过滤器的。
如何标记布隆过滤器?
N个哈希函数,和位图。
数据通过N个哈希数组,得到N个值,再分别取模位图长度,得到N个结果,分别把位图对应为置1。
布隆过滤器由于是基于哈希函数实现查找的,高效查找的同时存在哈希冲突的可能性,比如数据 x 和数据 y 可能都落在第 1、4、6 位置,而事实上,可能数据库中并不存在数据 y,存在误判的情况。
所以,查询布隆过滤器说数据存在,并不一定证明数据库中存在这个数据,但是查询到数据不存在,数据库中一定就不存在这个数据。
3.如何设计秒杀场景处理高并发以及超卖现象?
超卖的产生(归根结底就是对那行数据修改的不设限):

必须加锁,但是要考虑加什么锁,高并发下怎样保证等待时间尽可能短。
数据库层面的粗暴解决:加排他锁。

借助分布式锁:这样会造成事务串行,无法很好应对高并发。
分布式锁+分段缓存:把数据分成很多个段,每个段是一个单独的锁,所以多个线程过来并发修改数据的时候,可以并发的修改不同段的数据

最后一种方法是利用redis的incr、decr的原子性 + 异步队列

现实的案例
4.网络OSI模型和TCP/IP模型分别介绍一下?
网络模型。7层OSI,4层TCP/IP。其中TCP/IP是常用的,OSI因为冗余和复杂等问题,提出的也只是概念理论上的分层,并没有提供具体的实现方案。
OSI自底向上:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。(无(物)数网红(传)会表演(应))

TCP/IP:网络接口层,网络层,传输层,应用层。(往届网红创业(网络接口)(网络)(传输)(应用))


最底下的层是比特流,MAC寻址。
网络层是IP路由寻址。
传输层是主机与主机的通讯是,TCP,UDP。传输层协议可在发送应用程序和接收应用程序(以传输端口号区分)之间创建虚拟数据流。端口号可标识端口,端口是内存中接收或发送数据的专用位置。此外,传输协议层可能还会提供其他服务,如可靠的、按顺序的数据传送
应用层是应用程序之间的通讯,FTP,SSH等。
5.tcp、ip分别位于哪一层?
TCP是传输层(数据封装开始的位置,端口),IP是网络层(准备传送包的位置,ip地址)。

先从TCP开始,承接了应用层要传输的数据,开始封装,负责提供可靠的(数据准确完整有序)、面向连接(一对一)、基于字节流的数据传输服务,确保数据能够按照正确的顺序和完整性传递。具体细节

IP协议是网络层的协议,承接传输层的报文,例如TCP数据包,UDP数据包再次封装成IP数据包,简单来说,IP 标头是一系列位(一和零),记录与数据包相关的几段信息,如发送方和接收方 IP 地址等。用于对数据包进行路由和寻址,以便它们可以跨网络传输并到达正确的目的地。
6.应用层有哪些协议?
HTTP、HTTPS、DNS、FTP、IP 都是应用层协议。
7.应用层HTTP报文有哪些部分?
首先HTTP报文是应用层的报文,分为请求报文和响应报文。
在请求报文中,分别具有,请求行,请求头部,空行,请求体。请求行包含请求的方法是get,post等等,URL,HTTP协议。请求头部更多的是自己设置,例如用户登录设置的Token放在请求头部。请求实就是具体的请求内容,通常用于POST请求等需要传输数据的情况。
在响应报文中,**响应行,相应头部,空行,响应体。**响应行有HTTP版本协议,URL,状态码,状态信息。响应头部就是对响应内容的附加信息,例如内容的格式,长度等等。响应体通常是服务器返回的HTML、JSON等内容。
8.应用层HTTP常用的状态码?

9应用层HTTP返回状态301 302分别是什么?

10.应用层http 502和 504 的区别?
502 - Bad Gateway(坏的网关),一般是网关服务器请求后端服务时,后端服务没有按照http协议正确返回结果。
504 - Gateway Timeout(网关超时),一般是网关服务器请求后端服务时,后端服务没有在特定的时间内完成服务。
两个状态码相同的地方就在于,都是后端服务有问题。
不同点:502是你呼叫对方要东西,联系上了对方,但给的东西不是你要的;504是你呼叫对方要东西,联系不上对方。
Java缓存、网络及HTTP相关知识解析
8万+

被折叠的 条评论
为什么被折叠?



