java进阶-02

异常体系?举例说明常见的异常

● Java中的所有异常都来自顶级父类Throwable。
● Throwable下有两个子类Exception和Error。
● Error是程序⽆法处理的错误,⼀旦出现这个错误,则程序将被迫停止运行。
● Exception不会导致程序停止,又分为两个部分RunTimeException运行时异常和 CheckedException检查异常
● RunTimeException常常发生在程序运行过程中,会导致程序当前线程执行失败。
● CheckedException常常发生在程序编译过程中,会导致程序编译不通过。
举例:
NullPointerException–空指针异常
ArrayIndexOutOfBoundsException–数组索引越界
ClassCastException–类转换异常
FileNotFoundExcption–找不到文件异常
IOException–输入输出异常
SQLException–SQL异常

java中方法参数是基于值传递,还是基于引用传递

基于值传递
在传输实参给方法形参的时候并不是传输实参本身,而是传输实参中存储的值,这就是值传递

get和post区别

get是从服务器上获取数据(Http与服务器交互的查),通过URL参数传递数据,数据会附加在URL的后面,以?分隔URL和参数,参数之间以&分隔,get传送的数据量小,不能大于2KB,get安全性非常低
post是向服务器传输数据(Http与服务器交互的改),通过请求体传递数据,数据不会附加在URL上,而是包含在请求体中,post传输的数据量较大,一般被默认为不受限制,post安全性较高,
但是get执行效率比post方法好,在进行文件上传时只能使用post而不能是get

cookie和session的区别

session是存储在服务器端,cookie是存储在客户端的,所以session的安全性比cookie高
获取session里的信息是通过存放在会话cookie里的sessionnid获取的,又由于session是存放在服务器的内存中,所以session是的东西不断增加会造成服务器的负担,所以会把重要的信息存储在session中,而把次要东西存储在客户端的cookie里,
session在什么情况下丢失,就是在服务器关闭的时候,或者session过期
Cookie禁用的情况下,使用所有的访问路径url后面带一个session的参数

http和https的区别

http是超文本传输协议,端口号是80,连接很简单,是无状态的,信息是明文传输,
https协议的端口号是443,是由SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议,要比http协议安全,但是https协议需要到ca申请证书,一般免费的证书较少,需要交费

是否了解TCP/IP协议

TCP/IP协议是一种网络通信协议,它是Internet的核心协议之一,也是现代网络通信的基础。TCP/IP协议是由两个协议组成的,分别是传输控制协议(TCP)和互联网协议(IP)。
TCP协议是一种面向连接的协议,它在数据传输之前要先建立连接,然后再进行数据传输,最后再断开连接。TCP协议保证了数据传输的可靠性,能够检测和纠正数据传输中的错误,并保证数据按照正确的顺序到达目的地。
IP协议是一种无连接的协议,它负责将数据包从源主机发送到目的主机。IP协议不保证数据传输的可靠性,它只是将数据包传输到目的主机,而不关心数据包是否到达目的地。
分层协议–应用层,传输层,网络层,数据链路层,物理层,是基于osi7层模型的简化
总之,TCP/IP协议是一种网络通信协议,它由TCP和IP两个协议组成,能够保证数据传输的可靠性和正确性,是现代网络通信的基础。

什么是3次握手 什么是4次挥手

针对TCP的,TCP是面向连接的可靠传输
三次握手是指在建立TCP连接时,客户端和服务器之间需要进行三次握手来确认彼此的身份和同意建立连接的过程。具体的流程如下:

  1. 客户端向服务器发送一个SYN(同步)包,表示客户端请求建立连接,并随机生成一个序列号A。
  2. 服务器收到SYN包后,回复一个SYN+ACK(同步+确认)包,表示服务器收到了请求,并同意建立连接。服务器随机生成一个序列号B,并将A+1作为确认号发送给客户端。
  3. 客户端收到SYN+ACK包后,回复一个ACK(确认)包,表示客户端收到了服务器的回复,并确认建立连接。客户端将B+1作为确认号发送给服务器。
    经过这三次握手,客户端和服务器之间的TCP连接就建立起来了。
    四次挥手是指在断开TCP连接时,客户端和服务器之间需要进行四次挥手来确认彼此的身份和同意断开连接的过程。具体的流程如下:
  4. 客户端向服务器发送一个FIN(结束)包,表示客户端要断开连接。
  5. 服务器收到FIN包后,回复一个ACK包,表示服务器收到了请求,并确认断开连接。服务器此时可以继续向客户端发送数据,但不能再接收客户端的数据。
  6. 当服务器准备好断开连接时,向客户端发送一个FIN包,表示服务器也要断开连接。
  7. 客户端收到FIN包后,回复一个ACK包,表示客户端收到了请求,并确认断开连接。此时客户端和服务器之间的TCP连接就彻底关闭了。
    需要注意的是,三次握手和四次挥手过程中的每个包都包含一个序列号和确认号,用于保证数据的可靠传输。

了解BIO NIO AIO

区别在于阻塞与非阻塞,同步与异步
BIO是Blocking IO的缩写,中文名为阻塞IO,在Java中指的是同步阻塞IO,在使用BIO时,当一个线程在执行IO操作时,如果数据没有准备好,那么这个线程就会被阻塞,直到数据准备好并被读取或写入,这种阻塞式的IO方式会导致线程的数量增加,从而对系统资源造成压力
NIO是BNon-Blocking IO的缩写,中文名为非阻塞IO,在Java中指的是同步非阻塞IO,在使用NIO时,当一个线程在执行IO操作时,如果数据没有准备好,那么线程不会被阻塞,而是继续执行其他操作,等到数据准备好后再进行读取或写入.这种非阻塞的IO方式可以减少线程的数量,提高系统的吞吐量
AIO是Asynchronous IO的缩写,中文名为异步IO,在Java中指的是异步非阻塞IO.在使用AIO时,当一个线程在执行IO操作时,如果数据没有准备好,这个线程不会被阻塞,而是继续执行其他操作,等到数据准备好后,系统会通知这个线程进行读取或写入.这种异步非阻塞式的IO方式可以减少线程的数量,提高系统的吞吐量,并且可以更好地利用CPU资源

什么是深拷贝?什么是浅拷贝?Java代码如何实现

对象复制
浅克隆是指复制一个对象,只复制对象本身和对象内的基本数据类型,而不是复制对象内部的引用类型变量指向的对象.–原始对象与复制对象共享同一个引用类型变量所指的对象
深克隆是指复制一个对象,不仅复制对象本身和对象内的基本数据类型,还会递归复制对象内部的引用类型变量所指的的所有对象,–原始对象与复制对象不共享任何引用类型变量所指的对象
● 对象中基本数据类型的数据直接拷贝
● 对象中的字符串数据拷贝的还是地址
● 对象中还包含的其他对象,不会拷贝地址,会创建新对象
实现: 让类去实现接口Cloneable,并且重写clone方法,在clone方法中实现对象拷贝的操作,在深拷贝的实现中,需要注意在clone()方法中对引用类型属性进行递归调用clone()方法,以实现对象的深度复制。而在浅拷贝的实现中,直接调用super.clone()方法即可实现对象的浅拷贝

hashCode()与equals()之间的联系

为什么要有hashCode()?
对象加入HashSet时,HashSet会先计算对象的hashcode值来判断对象加入的位置,看该位置是否有值,如果没有,HashSet会假设对象没有重复出现. 但是如果发现有值,这时会调用equals()检查两个对象是否真的相同,如果相同,不会加入. 如果不同,就会重新散列到其他位置,这样大大减少了equals的次数,提高执行速度
● 如果两个对象相等,则hashcode一定相同
● 两个对象相等,对两个对象分别调用equals()都返回true
● 两个对象有相同的hashcode值,它们不一定相等
● equals方法被覆盖过,则hashCode方法也必须被覆盖
● hashCode()的默认行为是对堆上的对象产生独特值,如果没有重写hashCode(),则该class对象无论如何都不会相等

什么是字节码?采用字节码的好处是什么?

Java中的编译器和解释器:Java中引入了虚拟机的概念,即在机器和编译程序之间加入了⼀层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序⼀个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在 Java中,这种供虚拟机理解的代码叫做字节码(即扩展名为 .class的文件),它不面向任何特定的处理器,只面向虚拟机
每⼀种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每⼀条要执行的字节码送给解释器,解释器将其翻译成特定机 器上的机器码,然后在特定的机器上运行。这也就是解释了Java的编译与解释并存的特点。 Java源代码---->编译器---->jvm可执行的Java字节码(即虚拟指令)---->jvm---->jvm中解释器-- —>机器可执行的二进制机器码---->程序运行。
采⽤字节码的好处:Java语⾔通过字节码的方式,在⼀定程度上解决了传统解释型语⾔执⾏效率低的问 题,同时⼜保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专 对⼀种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值