本文目录如下:
- Java面试题(二)
- 四、并发编程
- 线程和进程的区别?
- 守护线程是什么?
- 创建线程有哪几种方式?
- 线程有哪些状态?
- sleep() 和 wait() 有什么区别?
- 线程的sleep()方法和yield()方法有什么区别?
- 线程的 run()和 start()有什么区别?
- 你对线程优先级的理解是什么?
- Java中怎么保证多线程的运行安全 (如何避免死锁)?
- 什么是死锁?
- synchronized 和 Lock 有什么区别?
- 五、IO
- Java 中 IO 流分为几种?
- BIO、NIO、AIO 有什么区别?
- Files的常用方法都有哪些?
- 六、设计模式
- 说几个常用的设计模式?
- 七、通信/网络
- 简述 tcp 和 udp的区别?
- url是什么?由哪些部分组成?
- OSI 的七层模型都有哪些?
- get 和 post 请求有哪些区别?
- 简单说一下四次挥手?
- 什么是B/S架构?什么是C/S架构?
- 八、JVM
- 什么是Java虚拟机?
- 说一下 jvm 的主要组成部分?及其作用?
- 说一下堆和栈的区别?
Java面试题(二)
四、并发编程
线程和进程的区别?
- 进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。
- 线程是进程的一个实体,是cpu调度和分派的基本单位,多个线程共享内存资源,减少切换次数,从而效率更高。
守护线程是什么?
- 守护线程(即daemon thread),是个服务线程,准确地来说就是服务其他的线程。
创建线程有哪几种方式?
- 1.继承Thread类创建线程类: 定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。
- 2.通过Runnable接口创建线程类: 定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。
线程有哪些状态?
- 线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。
sleep() 和 wait() 有什么区别?
sleep()
:sleep() 让调用线程进入睡眠状态,让出执行机会给其他线程。但不会释放锁。wait()
:wait() 是 释放对象的机锁,使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程。
线程的sleep()方法和yield()方法有什么区别?
- sleep() 方法给其他线程运行机会时不考虑线程的优先级;
- yield() 方法只会给 相同优先级 或 更高优先级 的线程以运行的机会;
线程的 run()和 start()有什么区别?
run()
: 线程体。它包含了线程要执行的内容。start()
: 用于启动线程。
你对线程优先级的理解是什么?
- Java默认的线程优先级为5,线程的优先级会在线程被调用之前设定。
- 高优先级的线程一般比低优先级的线程先执行。
Java中怎么保证多线程的运行安全 (如何避免死锁)?
点击查看
- 1.使用**安全类,比如 Java. util. concurrent 下的类。
- 2.使用自动锁 synchronized。
- 3.使用手动锁 Lock。
- 4.原子性: 保证一个或者多个操作在CPU执行的过程中不被中断。
- 5.可见性: 保证一个线程对共享变量的修改,另外一个线程能够立刻看到。
- 6.有序性:保证程序执行的顺序按照代码的先后顺序执行。
什么是死锁?
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态。
synchronized 和 Lock 有什么区别?
- synchronized是Java内置关键字,在JVM层面,Lock是个Java类;
- synchronized 可以给类、方法、代码块加锁;而 Lock 只能给代码块加锁。
- synchronized 不需要手动获取锁和释放锁,不会造成死锁;而 Lock 需要自己加锁和释放锁,使用不当会造成死锁。
五、IO
Java 中 IO 流分为几种?
- 按类型来分:字节流 和 字符流。
- 字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。
BIO、NIO、AIO 有什么区别?
查看原理
BIO
:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。NIO
:New IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道) 通讯,实现了多路复用。AIO
:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了 异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。
Files的常用方法都有哪些?
- Files.exists():检测文件路径是否存在。
- Files.createFile():创建文件。
- Files.createDirectory():创建文件夹。
- Files.read():读取文件。
- Files.write():写入文件。
- Files.delete():删除一个文件或目录。
六、设计模式
说几个常用的设计模式?
点击查看
- 单例模式: 一个应用程序中,某个类的实例对象只能有一个。
- 观察者模式: 对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。(本质就是
调用
其他对象的函数)- 装饰者模式: 对已有的业务逻辑进一步的封装,使其增加额外的功能。(依赖
继承
实现, 不断加料)- 适配器模式: 把一个类的接口变换成客户端所期待的另一种接口。(创建一个
中间类
来解决无法调用的问题)
七、通信/网络
简述 tcp 和 udp的区别?
- TCP面向连接; UDP是无连接的。
- TCP提供可靠的服务。保证数据无差错,不丢失,不重复,且按序到达; UDP尽最大努力交付,不保证可靠交付。
- UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高要求的通信。
url是什么?由哪些部分组成?
- URL(Uniform Resource Locator,统一资源定位器),它是WWW的统一资源定位标志,就是指网络地址。
- URL由4部分组成:协议、主机、端口、路径。
OSI 的七层模型都有哪些?
- 应用层:网络服务与最终用户的一个接口。
- 传输层:定义传输数据的协议端口号,以及流控和差错校验。
- 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。
- 数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。
- 物理层:建立、维护、断开物理连接。
get 和 post 请求有哪些区别?
- GET参数通过URL传递,POST放在Request body中。
- GET请求在URL中传送的参数是有长度限制的,而POST没有。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
简单说一下四次挥手?
点击查看
什么是B/S架构?什么是C/S架构?
- C/S(Client/Server):客户端–服务器结构。
- B/S(Browser/Server):浏览器–服务器结构
八、JVM
什么是Java虚拟机?
- 所有的Java代码都是在一个叫做Java虚拟机的东西上执行的。
- 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。
说一下 jvm 的主要组成部分?及其作用?
- 类加载器(ClassLoader)
- 运行时数据区(Runtime Data Area)
- 执行引擎(Execution Engine)
- 本地库接口(Native Interface)
说一下堆和栈的区别?
- 栈内存存储的是局部变量。堆内存存储的是实体。
- 栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短。
- 栈内存存放的变量在生命周期结束时释放。堆内存存放的实体会被垃圾回收机制不定时的回收。