9.21
int 和 Integer 有什么区别
-
Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当作对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java5开始引入了自动装箱、拆箱机制,使得二者可以相互转换。
-
Java为每一个袁术的类型都提供了对应的包装类型:
原始类型:boolean,char,byte,short,int,long,float,double
包装类型:Coolean,Character,Byte,Short,Integer,Long,Float,Double
Integer a= 127 与 Integer b = 127相等吗
- 对于对象引用类型:==比较的是对象的内存地址。
- 对于基本数据类型:==比较的是值
String 类的常用方法都有那些?
- indexOf():返回指定字符的索引。
- charAt():返回指定索引处的字符。
- replace():字符串替换。
- trim():去除字符串两端空白。
- split():分割字符串,返回一个分割后的字符串数组。
- getBytes():返回字符串的 byte 类型数组。
- length():返回字符串长度。
- toLowerCase():将字符串转成小写字母。
- toUpperCase():将字符串转成大写字符。
- substring():截取字符串。
- equals():字符串比较。
数组有没有 length()方法?String 有没有 length()方法
数组没有length方法,有length属性,String有length()方法。JavaScript中,获取字符串长度是通过length属性得到的,这点容易混淆
TCP和UDP协议异同点
共同点:工作于传输层,目标都是在程序间(服务器间)传输数据,数据可以是文本文件,视频,音频,图片等,对于他们都是解析为二进制数
举例子:如果将人和人的通讯看成进程于进程的通讯,
- TCP协议就可以看作通话模式,电话接通,互相通话,结束挂断都能得到一系列的反馈,还能确认对象准确的接受到。
- UDP协议就可以看作写信模式,对方能否收到,内容释放完整,顺序是否正确,这些都是未知数。
连接方式上的不同:
- TCP协议基于连接,且为了保证连接状态良好,一共有三个步骤:三次握手,传输确认,四次挥手。
- UDP协议基于非连接:发送数据就是将数据简单封装,再通过网卡进行发送,数据包间无状态上的联系。
连接上的不同也有不同的优缺点
TCP
- 优点:传输稳定,连接可靠,连接和断开都会进行确认,再传输完毕会断开连接来释放资源且成功的在不可靠的信道上建立可靠的连接。
- 缺点:速度慢,效率低,占用资源高,容易被攻击(DDOS,DOS等)
UDP
- 优点:性能损耗非常少,对于CPU和内存的占用远小于TCP,UDP可被攻击者利用的漏洞也少一些。
- 缺点:传输不可靠,稳定性弱,不能保证丢包等一系列问题,如果用户网络质量不好,就容易丢包。
适用场景的不同
- TPC:适用于对于网络质量要求较高的场景,需要准确无误的传输给对方,如传输文件,发送邮件,浏览网页
- UDP:适用于对实时性要求较高,但对少量丢包并吴要求的场景,如域名查询,语音通话,视频直播,FPS游戏等
可以认为很重要不能丢东西的就是TCP,不是很重要追求速度的东西就是UDP。
三次握手
但客户端和服务器要简历连接时,客户端首先发送一个SYN报文,但服务的收到后回复一个SYN报文和一个ACK报文,然后客户端再服务的发送一个ACK报文,连接简历,因为者一过程一共发送了三包数据,所以称为三次握手。
为什么要三次握手,两次握手不行吗?
目的:防止已失效的请求又发送到服务器引起错误。
假设采用的两次握手建立连接,客户端发送SYN1报文来请求建立连接,由于未知原因,SYN1报文没有到达服务端,然后客户端再次发送SYN2报文请求建立连接,数据包正常送达,然后服务器回复SYN2+ACK2,但SYN报文阻塞的网络节点突然恢复,服务端误认为客户端又一次发起的新的连接,从而再两次握手之后进入等待数据状态,服务的认为是两次连接,客户端认为是一次连接造成状态不一致,如果在三次握手的情况下,服务端未收到最后的ACK报文,会认为连接建立不成功。
传输确认
目的:解决传输过程中的丢包问题和乱序问题。
解决:为每一个连接建立了一个发送缓冲区,从0开始依次自增,类似数据库中的主键自增id,具有唯一表示,当需要发送数据时,从发送缓冲区取一部分数据组成发送报文,在tcp协议头中会:序列号+长度+数据内容,接受端在接受到后需要回复确认报文,确认报文中的ACK=序列号+长度=下医保数据需要发送的起始序列号,一问一答的方式能使发送放确认发送的消息已经被对方收到,发送端也可以连续发送夺宝数据,在到达对端后,对端再由序列号和长度重构出完整的数据,当数据丢失时,接受端可以要求发送端重传。
以上过程是全双工的,不区分客户端和服务器的。
四次挥手
客户端和服务的的都可以发送关闭连接请求
假设客户端发起关闭连接
- 客户端向服务的发送FIN报文(进入终止等待一状态)
- 服务端收到后回复ACK报文(关闭等待状态),客户端进入(终止等待二状态)并且继续发送和接受未传输完的数据。
- 服务端发送完数据向客户端发送FIN报文并且进入(最后确认状态)
- 客户端收到后发送ACK包进入(超时等待状态),经过超时时间后关闭连接,服务端收到ACK包后立即关闭连接。
为什么四次挥手中要由超时时间
为了保证服务端收到ACK报文,防止出现ACK报文丢失,服务的会一种停留在最后的确认状态,当服务的没有收到ACK包,会重发FIN包,客户端会响应FIN包,再次发送ACK包,并刷新超时时间。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理