热门课程

免费试听

上课方式

开班时间

当前位置: 首页 -   文章 -   新闻动态 -   正文

大厂必问的10个Java经典面试题,不能错过!

知了堂姐
2024-07-08 17:22:16
0

大厂必问的10个Java经典面试题,不能错过!


01 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?



java 虚拟机(jvm)是可以执行 java 字节码的虚拟进程。准确的来说,java 的跨平台指的是 java 源文件经过 javac 编译器编译成的二进制.class 字节码的跨平台性。各个平台装有不同的 jvm,而 jvm 能将相同的字节码翻译成平台相关的机器码,进而执行。


02 Java中,什么是构造方法?什么是构造方法重载?什么是复制构造方法?


Java经典面试题


新对象被创建的时候,会调用构造方法,每一个类都有构造方法。在程序员没有给类提供构造方法的情况下,Java 编译器会为这个类创建一个默认的构造方法。


构造方法重载和方法重载很相似,可以为一个类创建多个构造方法。每一个构造方法必须有它自己唯一的参数列表。


复制构造方法是 c++中的,Java 不支持,因为不自己写构造方法的情况下,java 不会创建默认的复制构造方法。


关于复制构造函数:C++中的复制构造函数通常有三种作用 :


1.对象作为函数参数

2.对象作为函数返回值 

3.使用一个对象对另一个对象初始化。


C++语法允许用户定义自己的复制构造函数以实现自定义的复制,比如说进行深复制。Java 并不支持这样的复制构造函数。但是这并不代表 Java 中没有这种机制,在 Java 中 Object 类的 clone()方法就是这种机制的体现。而且通过以上三种方式对 Java 对象进行的操作都是对引用的操作,不像 C++里面是对原对象的操作,因此 Java 中也不需要考虑需要使用复制构造函数这种问题。


03 进程线程的区别



根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位


资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。


包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。


内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的


影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。


04 什么是死锁(deadlock)?



所谓死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。死锁产生的 4 个必要条件:


互斥条件:进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。


不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。


请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。


循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被 链中下一个进程所请求。


05 doGet()方法和doPost()方法有什么区别?



doGet:GET 方法会把名值对追加在请求的 URL 后面。因为 URL 对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。


doPOST:POST 方法通过把请求参数值放在请求体中来克服 GET 方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过 POST 请求传递的敏感信息对外部客户端是不可见的。


06 RMI体系结构分几层?



RMI 体系结构分以下几层:


存根和骨架层(Stub and Skeleton layer):这一层对程序员是透明的,它主要负责拦截客户端发出的方法调用请求,然后把请求重定向给远程的 RMI 服务。


远程引用层(Remote Reference Layer):RMI 体系结构的第二层用来解析客户端对服务端远程对象的引用。这一层解析并管理客户端对服务端远程对象的引用。连接是点到点的。


传输层(Transport layer):这一层负责连接参与服务的两个 JVM。这一层是建立在网络上机器间的 TCP/IP 连接之上的。它提供了基本的连接服务,还有一些防火墙穿透策略。


07 TCP三次挥手和四次握手的过程


三次握手:


 1. 客户端发送 SYN 请求,进入 SYN_SEND 状态

 2. 服务端收到 SYN 请求,并返回一个 ACK 应答,并发送一个 SYN 其请求,服务器进入 SYN_RECV 状态

 3. 客户端收到服务端的 SYN 请求和 ACK 应答,发送 ACK 应答,客户端进入 ESTABLISH 状态,服务端收到应答后进入 ESTABLISH。

 如果没有收到应答,数据包都会根据 TCP 的重传机制进行重传。


 四次挥手:


 1. 客户端发送 FIN 包,请求断开连接,客户端进入 FIN_WAIT1 状态

 2. 服务端收到 FIN 包后返回应答,进入 CLOSE_WAIT 状态

 3. 客户端收到 FIN 的应答后进入 FIN_WAIT2 状态

 4. 服务端发送 FIN 请求包,进入 LAST_ACK 状态

 5. 客户端收到 FIN 请求包后,发送应答进入 TIME_WAIT 状态

 6. 服务器收到 ACK 应答后,进入 close 状态。


08 TCP和UDP的区别?



a. TCP 是面向连接的,udp 是无连接的即发送数据前不需要先建立链接。

b. TCP 提供可靠的服务。也就是说,通过 TCP 连接传送的数据,无差错,不丢失,不重复,且按序到达; UDP 尽最大努力交付,即不保证可靠交付。并且因为 tcp 可靠,面向连接不会丢失数据因此适合大数据量的交换。

c. TCP 是面向字节流,UDP 面向报文,并且网络出现拥塞不会使得发送速率降低(因此会出现丢包,对实时的应用比如 IP 电话和视频会议等)。

d. TCP 只能是 1 对 1 的,而 UDP 支持 1 对 1,1 对多。

e. TCP 的首部较大为 20 字节,而 UDP 只有 8 字节。

f. TCP 是面向连接的可靠性传输,而 UDP 是不可靠的。


09 continue、break和return的区别是什么?



在循环结构中,当循环条件不满足或者循环次数达到要求时,循环会正常结束。但是,有时候可能需要在循环的过程中,当发生了某种条件之后 ,提前终止循环,这就需要用到下面几个关键词:


continue:指跳出当前的这一次循环,继续下一次循环。

break:指跳出整个循环体,继续执行循环下面的语句。

return 用于跳出所在方法,结束该方法的运行。return 一般有两种用法:

return:直接使用 return 结束方法执行,用于没有返回值函数的方法

return value:return 一个特定值,用于有返回值函数的方法

大家都在看

2019年前端技术趋势

2024-07-08 浏览次数:0

本科生高薪专业top10,全被计算机承包了

2024-07-08 浏览次数:0

Java有什么就业方向?学Java速看

2024-07-08 浏览次数:0

顺势并进,携手共赢丨知了汇智与灯塔商学院达成战略...

2024-07-08 浏览次数:0

知了汇智“知了杯”网络安全趣味赛在西科大圆满落幕

2024-07-08 浏览次数:0

复学第一周,来看知了堂学员满分课堂状态!

2024-07-08 浏览次数:0
最新资讯
大厂必问的10个Java经典面... java 虚拟机(jvm)是可以执行 java 字节码的虚拟进程。准确的来说,java 的跨平台指的...