67 Star 533 Fork 87

鹏磊 / DevBooks

Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Please pay attention to the specific project description and its upstream code dependency when using it.
Clone or Download
Java常见2021年最新面试题,附答案解析.md 8.89 KB
Copy Edit Web IDE Raw Blame History

Java常见2021年最新面试题,附答案解析

全部答案,更新日期:12月29日,直接下载吧!

下载链接:高清172份,累计 7701 页大厂面试题 PDF

1、创建socket通讯的步骤?

1、 服务器程序创建一个ServerSocket,然后再用accept方法等待客户来连接

2、 客户端程序创建一个Socket并请求与服务器建立连接

3、 服务器接收客户的连接请求,并创建一个新的Socket与该客户建立专线连接

4、 刚才建立了连接的两个Socket在一个线程上对话

5、 服务器开始等待新的连接请求

2、Java 中 sleep 方法和 wait 方法的区别?

虽然两者都是用来暂停当前运行的线程,但是 sleep() 实际上只是短暂停顿,因为它不会释放锁,而 wait() 意味着条件等待,这就是为什么该方法要释放锁,因为只有这样,其他等待的线程才能在满足条件时获取到该锁。

3、程序计数器(线程私有)

一块较小的内存空间, 是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的程序计数器,这类内存也称为“线程私有” 的内存。

正在执行 java 方法的话,计数器记录的是虚拟机字节码指令的地址(当前指令的地址) 。如果还是 Native 方法,则为空。

这个内存区域是唯一一个在虚拟机中没有规定任何 OutOfMemoryError 情况的区域。

4、什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing)?

线程调度器是一个操作系统服务,它负责为Runnable状态的线程分配CPU时间。一旦我们创建一个线程并启动它,它的执行便依赖于线程调度器的实现。时间分片是指将可用的CPU时间分配给可用的Runnable线程的过程。分配CPU时间可以基于线程优先级或者线程等待的时间。线程调度并不受到Java虚拟机控制,所以由应用程序来控制它是更好的选择(也就是说不要让你的程序依赖于线程的优先级)。

5、迭代器 Iterator 是什么?

Iterator 接口提供遍历任何 Collection 的接口。我们可以从一个 Collection 中使用迭代器方法来获取迭代器实例。迭代器取代了 Java 集合框架中的 Enumeration,迭代器允许调用者在迭代过程中移除元素。

因为所有Collection接继承了Iterator迭代器

6、线程的 sleep()方法和 yield()方法有什么区别?

1、 sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;yield()方法只会给相同优先级或更高优先级的线程以运行的机会;

2、 线程执行 sleep()方法后转入阻塞(blocked)状态,而执行 yield()方法后转入就绪(ready)状态;

3、 sleep()方法声明抛出 InterruptedException,而 yield()方法没有声明任何异常;

4、 sleep()方法比 yield()方法(跟操作系统 CPU 调度相关)具有更好的可移植性,通常不建议使用yield()方法来控制并发线程的执行。

7、Java 中能创建 volatile 数组吗?

能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个线程同时改变数组的元素,volatile 标示符就不能起到之前的保护作用了。

8、java中equals方法的用法以及==的用法

tech.souyunku.com/bluestorm/a…

9、如何创建一个json对象?

使用{}实例化一个json对象,json对象多个元素使用逗号隔开,每个元素都是一个键值对

10、如何判断对象是否是垃圾?

**引用计数:**在对象中添加一个引用计数器,如果被引用计数器加 1,引用失效时计数器减 1,如果计数器为 0 则被标记为垃圾。原理简单,效率高,但是在 Java 中很少使用,因为存在对象间循环引用的问题,导致计数器无法清零。

**可达性分析:**主流语言的内存管理都使用可达性分析判断对象是否存活。基本思路是通过一系列称为 GC Roots 的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程走过的路径称为引用链,如果某个对象到 GC Roots 没有任何引用链相连,则会被标记为垃圾。可作为 GC Roots 的对象包括虚拟机栈和本地方法栈中引用的对象、类静态属性引用的对象、常量引用的对象。

11、GC是什么?为什么要有GC?

12、线程池四种创建方式?

13、形成死锁的四个必要条件是什么

14、java 面向对象编程三大特性------封装、继承、多态

15、什么是IoC和DI?DI是如何实现的?

16、假设数组内有5个元素,如果对数组进行反序,该如何做?

17、Java的内存模型是什么?(JMM是什么?)

18、什么时候用断言(assert)?

19、对象在哪块内存分配?

20、一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?

21、怎么将 byte 转换为 String?

22、Swing 是线程安全的?

23、线程B怎么知道线程A修改了变量

24、notify() 和 notifyAll() 有什么区别?

25、Java 中的 LinkedList 是单向链表还是双向链表?

26、Java中垃圾回收有什么目的?什么时候进行垃圾回收?

27、你对线程优先级的理解是什么?

28、JVM内存模型

29、解释servlet如何完成生命周期?

30、Java中是如何支持正则表达式操作的?

31、接口有什么特点?

32、什么是过滤器?怎么创建一个过滤器

33、在 Java 程序中怎么保证多线程的运行安全?

34、直接内存是什么?

35、Char类型能不能转成int类型?能不能转化成string类型,能不能转成double类型

36、解释何时在Tomcat使用SSL ?

37、堆(Heap-线程共享) -运行时数据区

38、SWAP会影响性能么?

39、什么是方法内联?

40、谈一谈Hibernate的一级缓存、二级缓存和查询缓存。

全部答案,更新日期:12月29日,直接下载吧!

下载链接:全部答案,整理好了

新增:高清PDF:172份,7701页,最新整理

大厂面试题

大厂面试题

Java
1
https://gitee.com/souyunku/DevBooks.git
git@gitee.com:souyunku/DevBooks.git
souyunku
DevBooks
DevBooks
master

Search