项目介绍
展示层、服务层、持久层
展示层、服务层:提高并发量和扩展性==》Dubbo,之间能进行交互。服务层通过Dubbo注册给Zookeeper,表现层通过Dubbo去Zookeeper获取服务的相关信息。 Zookeeper==》存放服务器地址和服务的相关信息。 单个服务增加服务器应对服务量增加。
消息队列
- 提高响应速度和削峰
- 解耦、提高可扩展
具体: 高并发场景==》无缓存、数据库压力大==》响应缓慢
请求数据给消息队列==》立即返回==》消费者进程从消息队列获取数据,异步请求数据库==》消息队列服务器速度快==》响应速度大幅改善。
降低耦合:不存在直接调用
缺点:1.考虑消息丢失或MQ挂掉 2.复杂:考虑消息丢失、顺序、重复消费 3.不一致:异步可能出现消费者没有正确消费。
Redis
缓存穿透
大量请求的key不存在缓存中,大量请求数据库。一个黑客大量制造不存在的key值。
解决方案:
1.参数校验。2.缓存无效key并设置过期时间 3.布隆过滤器:多个哈希函数得到哈希值,位数组对应位置的下标设置为1. 不存在,一定不存在。不过,可能误判其存在。
布隆过滤器解决redis缓存穿透:1. 存储可能所有请求的key值 2. 请求一来,先判断是否存在。不存在直接返回错误,存在才继续请求缓存,缓存不存在才查库。
计算机网络
输入URL发生了什么?
1 DNS解析:获取域名的IP
2. TCP连接
3. 发送HTTP
4. 响应返回报文
5. 浏览器解析并渲染页面
6. 连接结束
TCP和UDP区别?
- 是否面向连接
- 广播或多播还是单播?
- 是否可靠?三次握手
- 首部字节大不大?
- 应用场景?
TCP如何保证可靠传输?
- 分割应用数据成合适的报文段。
- 编号,排序
- 校验和
- 丢弃重复的数据
- 流量控制,滑动窗口来控制发送速率。
- 拥塞控制,网络不好也发慢点
- ARQ协议:等待对方确认后再发下一个分组
- 超时重传:没有及时确认,重发这个报文。
Java基础
字节流和字符流
字符流由JVM转换而来,耗时,编码类型不知则乱码。