内容介绍:
整篇128362字,300+页的笔记涵盖**【Java体系】和【架构能力】两大部分
包含网络和操作系统基础、JVM、多线程、Spring、Netty主流框架等重点知识,以及结合实践给出各类难点问题和解决方案**等,不管你是正在学习Java还是已经工作了都是对你的技术提升有非常大的好处,不信你可以看完整篇文章就知道了。
JAVA体系:
包含了: 网络和操作系统基础,JVM、多线程、Mysql、Redis、Kafka等中间件,框架以介绍Spring为主,讲解框架理念与应用场景,也包括一些重点机制的实现方式。重点讲解了分布式系统经常容易出现的难点问题和解决方案。
新技术方面: Java 8~11 新特性,G1、ZGC 垃圾回收算法、最新网络协议 HTTP2;
知识深度方面: 内存屏障、指令重排,JIT 编译器、逃逸分析等。这部分的讲解属于亮点知识。
架构能力:
主要以经典架构的常考点为主,包括 Spring、Netty 等主流框架的重点知识。大数据场景中的ES,云原生场景的中Docker和K8S的应用。同时结合自身具体的项目,讲好如何使用缓存、队列、数据库来优化已有项目。同时整理了LeetCode高频算法题的python模板,这套模板曾帮助他在三个月左右的时间,进入LeetCode前两千名。
第一部分:关于Java语言的方方面面
第二部分:关于DESIGN的方方面面
网络基础
. TCP三次握手
三次握手过程
客户端——发送带有SYN标志的数据包——服务端 一次握手 Client进入syn_sent状态
服务端——发送带有SYN/ACK标志的数据包——客户端 二次握手 服务端进入syn_rcvd
客户端——发送带有ACK标志的数据包——服务端 三次握手 连接就进入Established状态
为什么三次
主要是为了建立可靠的通信信道,保证客户端与服务端同时具备发送、接收数据的能力
为什么两次不行?
• 防止已失效的请求报文又传送到了服务端,建立了多余的链接,浪费资源
• 两次握手只能保证单向连接是畅通的。(为了实现可靠数据传输, TCP 协议的通信双方, 都必须维 护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方 相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤;如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认)
TCP四次挥手过程
四次挥手过程
客户端——发送带有FIN标志的数据包——服务端,关闭与服务端的连接 ,客户端进入FIN-WAIT-1状态
服务端收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1,服务端就进入了CLOSE-WAIT状态
服务端——发送一个FIN数据包——客户端,关闭与客户端的连接,客户端就进入FIN-WAIT-2状态
客户端收到这个 FIN,发回 ACK 报文确认,并将确认序号设置为收到序号加1,TIME-WAIT状态
为什么四次
因为需要确保客户端与服务端的数据能够完成传输。
CLOSE-WAIT
这种状态的含义其实是表示在等待关闭
TIME-WAIT
为了解决网络的丢包和网络不稳定所带来的其他问题,确保连接方能在时间范围内,关闭自己的连接
如何查看TIME-WAIT状态的链接数量?
netstat -an |grep TIMEWAIT|wc -l 查看连接数等待timewait状态连接数
为什么会TIME-WAIT过多?解决方法是怎样的?
可能原因: 高并发短连接的TCP服务器上,当服务器处理完请求后立刻按照主动正常关闭连接
解决:负载均衡服务器;Web服务器首先关闭来自负载均衡服务器的连接
1. OSI与TCP/IP 模型
OSI七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP五层:物理层、数据链路层、网络层、传输层、应用层
2. 常见网络服务分层
应用层:HTTP、SMTP、DNS、FTP
传输层:TCP 、UDP
网络层:ICMP 、IP、路由器、防火墙
数据链路层:网卡、网桥、交换机
物理层:中继器、集线器
3. TCP与UDP区别及场景
基于TCP的协议:HTTP、FTP、SMTP
基于UDP的协议:RIP、DNS、SNMP
4. TCP滑动窗口,拥塞控制
TCP通过:应用数据分割、对数据包进行编号、校验和、流量控制、拥塞控制、超时重传等措施保证数据的可靠传输;
拥塞控制目的:为了防止过多的数据注入到网络中,避免网络中的路由器、链路过载
拥塞控制过程:TCP维护一个拥塞窗口,该窗口随着网络拥塞程度动态变化,通过慢开始、拥塞避免等算法减少网络
拥塞的发生。
5. TCP粘包原因和解决方法
TCP粘包是指:发送方发送的若干包数据到接收方接收时粘成一包
发送原因
TCP默认使用Nagle算法(主要作用:减少网络中报文段的数量):
收集多个小分组,在一个确认到来时一起发送、导致发送方可能会出现粘包问题
接收方原因
TCP将接收到的数据包保存在接收缓存里,如果TCP接收数据包到缓存的速度大于应用程序从缓存中读取数据包的速度,多个包就会被缓存,应用程序就有可能读取到多个首尾相接粘到一起的包。
Java基础
面向对象三大特性
特性:封装、继承、多态
封装:对抽象的事物抽象化成一个对象,并对其对象的属性私有化,同时提供一些能被外界访问属性的方法;
继承:子类扩展新的数据域或功能,并复用父类的属性与功能,单继承,多实现;
多态:通过继承(多个子类对同一方法的重写)、也可以通过接口(实现接口并覆盖接口)
1. Java与C++区别
不同点:c++支持多继承,并且有指针的概念,由程序员自己管理内存;Java是单继承,可以用接口实现多继承,
Java 不提供指针来直接访问内存,程序内存更加安全,并且Java有JVM自动内存管理机制,不需要程序员手动释
放无用内存
2. 多态实现原理
多态的底层实现是动态绑定,即在运行时才把方法调用与方法实现关联起来。
静态绑定与动态绑定
一种是在编译期确定,被称为静态分派,比如方法的重载;
一种是在运行时确定,被称为动态分派,比如方法的覆盖(重写)和接口的实现。文章来源:https://www.toymoban.com/news/detail-450098.html
多态的实现
虚拟机栈中会存放当前方法调用的栈帧(局部变量表、操作栈、动态连接 、返回地址)。多态的实现过程,就是方法调用动态分派的过程,如果子类覆盖了父类的方法,则在多态调用中,动态绑定过程会首先确定实际类型是子类,从而先搜索到子类中的方法。这个过程便是方法覆盖的本质。
文章来源地址https://www.toymoban.com/news/detail-450098.html
内容太多,篇幅真太长了这里就不一一展示了,需要完整笔记的可以看到文章末尾的联系方式,拿到笔记后认真学习,相信不管你是在校还是已经毕业工作了学完这篇笔记都会从中收益,看完了不要忘记点赞、评论支持一下哦!
到了这里,关于这套【阿里-服务端开发与面试知识手册】2023年了不会还有人没看过吧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!