这套【阿里-服务端开发与面试知识手册】2023年了不会还有人没看过吧

内容介绍:

整篇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. 多态实现原理

多态的底层实现是动态绑定,即在运行时才把方法调用与方法实现关联起来。

静态绑定与动态绑定

一种是在编译期确定,被称为静态分派,比如方法的重载;
一种是在运行时确定,被称为动态分派,比如方法的覆盖(重写)和接口的实现。

多态的实现

虚拟机栈中会存放当前方法调用的栈帧(局部变量表、操作栈、动态连接 、返回地址)。多态的实现过程,就是方法调用动态分派的过程,如果子类覆盖了父类的方法,则在多态调用中,动态绑定过程会首先确定实际类型是子类,从而先搜索到子类中的方法。这个过程便是方法覆盖的本质。
## UML 图表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

内容太多,篇幅真太长了这里就不一一展示了,需要完整笔记的可以看到文章末尾的联系方式,拿到笔记后认真学习,相信不管你是在校还是已经毕业工作了学完这篇笔记都会从中收益,看完了不要忘记点赞、评论支持一下哦!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值