1、线程、进程、多线程、线程池
- 线程:线程是指进程中的一个单独的执行路径,不能单独存在,必须包含在进程中,是进程中的实际运作单位,是操作系统能够进行运算调度的基本单元。
- 进程:是具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配(处理机个数,内存等资源)的基本单元。一个进程可以包含多个线程,每个线程都可以并行执行不同的任务。
- 多线程:是指在同一时间内运行多个线程来完成多个任务。多线程提高程序的性能和响应速度。但是增加了代码的复杂性,同时需要考虑线程安全和死锁等问题。
- 线程池:是一组预先创建的线程,它们可以被重复使用来执行多个任务。使用线程池可以避免在创建和销毁线程时产生额外的开销,从而提高程序的性能。Java中提供了 Executor 框架来实现线程池。
2、Java集合中List,Map和Set三者的特点以及区别
List,Map和Set三者的特点
- List , Set, Map都是接口,List和Set继承至Collection接口,Map为独立接口
- List和Set是存储单列数据的集合,Map是存储键值对这样的双列数据的集合;
1.List
特点:List中存储的数据是有顺序的,并且值允许重复;
2.Map
特点:
1.Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的。
2.Map和Collection没有继承关系。
3.Set
特点:Set中存储的数据是无顺序的,并且不允许重复。
3、讲一下Java内存回收机制
Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收垃圾(无任何对象引用的对象)
4、虚拟机和docker什么区别
1、docker(开源的应用容器引擎)启动快速属于秒级别,而虚拟机通常需要几分钟去启动;
2、性能损耗不同,docker需要的资源更少;
3、隔离性不同,docker属于进程之间的隔离,隔离性较弱,而虚拟机可以实现系统级别的隔离。
5、Java里integer和int区别是什么?
1.Integer是int的包装类,int是基本类型。
2.Integer变量必须实例化后才能使用,而int不需要。
3.Integer是对象的引用,而int是直接存储数值。
4.Integer默认值是null,而int默认值是0
6、integer和int是否可以相互赋值?
能,这是java本身实现的,自动拆箱,装箱的过程也就是自动转换
7、Java里面有一些访问修饰符吗?然后你说一下有哪几个?然后分别有什么作用?它们的区别是什么?
- public:public是最为宽松的访问修饰符,用于修饰的成员可以被同一包中的所有类、其他包中的所有类和所有子类所访问。
- protected:protected修饰符用于修饰类的成员,只有在同一包中的类或其他包中的子类可以访问它,其他类不能访问。
- private:private是最为严格的访问修饰符,只有在同一类中才能访问该成员,其他类都无法访问。
- default(也称为包访问权限):当一个类、变量、方法或构造函数没有任何修饰符时,即使用default修饰符。默认访问级别仅适用于同一包中的所有类。
8、Java中的限制访问范围的关键字有?
- final关键字:final表示不可更改的、终态的,一旦final修饰的变量被初始化赋值,就无法再更改它的值,final也可以修饰类、方法和参数,表示它们不能被继承、覆盖和改变。
- abstract关键字:abstract表示抽象的、未实现的,一般用于修饰类和方法。抽象类是不能被实例化的,只能用来继承和派生子类,其中的抽象方法必须在子类中被重写实现。
- static关键字:static表示静态的、不变的,可以修饰成员变量、方法和代码块。静态变量属于类而非对象,只有一个副本,而且在类加载时就已经初始化,静态方法不需要实例化对象就可以调用,静态代码块在类加载时执行。
- synchronized关键字:synchronized表示同步的、线程安全的,可以修饰方法和代码块。它可以保证在同一时间只有一个线程可以访问被synchronized修饰的代码,防止出现多线程竞争导致的数据不一致问题。
9、Java异常有哪些?
NullPointerException(空指针异常)
ArithmeticException(算术异常)
ArrayIndexOutOfBoundsException(数组越界异常)
RuntimeException(运行时异常)和IOException(输入或输出异常)
10、RuntimeException和Exception有什么区别?
Exception:定义方法时必须声明所有可能会抛出的exception;
Runtime Exception:在定义方法时不需要声明会抛出runtime exception