Java面试个人整理(手打勿喷,易于个人学习)1,java面试
Java面试个人整理(手打勿喷,易于个人学习)1,java面试
1.Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。
Java被设计成允许应用程序可以运行在任意的平台上,个人理解为:安装个Java虚拟机(进程),就可以处理可以编译的源文件后的字节码。
2.JDK AND JRE
JDK:Java开发工具包,包含JRE,编译器以及其他的工具(JavaDoc,Java调试器)。
JRE:Java运行环境。包括Java虚拟机,Java核心类库和支持文件。
3.static环境中是否可以访问非static变量
static变量是属于类的,当类被Java虚拟机载入的时候,会对static进行初始化,如果代码尝试不用实例访问非static的变量时,编译器会报错,因为还没被创建。
4.基本类型
byte int long short
float double boolean char
5.接口和抽象类的区别
1.接口中所有的方法都是抽象的,而抽象类则可以同时包括非抽象的
2.类可以实现很多接口但是只能继承一个抽象类,抽象类可以在不提供接口方法实现的情况下实现接口
3.接口中声明的变量默认都是final的,抽象类可以包含非final的变量
4.Java接口的成员函数默认为public,(Java8新特性:在接口中用default修饰的方法可以有函数体),抽象类可以各种。
5.接口是绝对抽象的,不可以被实例化。抽象类如果包含main方法可以被调用,但是也被能被实例化。
6.java内的传递都是值传递(8个基本数据+String),其他的实例对象的传递都是引用传递。
7.进程和线程
进程是执行着的应用程序,线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫轻量级进程。
8.创建线程的几种不同方式
1.继承Thread
2.实现Runnable接口,并且重写里面的run方法(简易)然后调用new Thread(类名).start()
3.使用Executor框架来创建线程池
4.实现collable接口,重写call方法,有返回值。
Thread的常用方法:
1.start()
2.run()
3.currentThread()//静态的,调取当前的线程
4.getName() //获取线程名字
5.setName()
6.yield()//当前线程释放CPU执行权
7.join()//在A线程中调用线程B的join方法表示:当执行到这的时候,停止执行等待B先执行然后再执行。
8.isAlive()//判断是否存货
9.sleep()
10.wait(),notify,notifyAll()//线程通信(在Object类中)
11.getPriority() setPriority(int newPriority)//改变线程优先级
9.为何Java要使用同步代码块和同步方法
Java允许多线程并发控制,多个线程同时操作一个可以共享的资源变量时(数据的增删查改),将会导致数据不准确,相互之间冲突,因此假如同步锁以避免在线程没有完成操作之前,被其他线程调用,保证变量的唯一性和准确性。
1.同步方法(有synchronized关键字的方法)
由于Java中的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁保护方法,在调用该方法前,需要获得内置锁,否则处于阻塞状态。
代码块如:
public synchronized void save(){}
注意:synchronized关键字可以修饰静态方法,如果调用该静态方法,将会锁住整个类。
2.同步代码块(有synchronized修饰的语句块)
代码如synchronized(object){}
注意:同步是一种高开销的操作,尽量减少同步内容。
注意:3.使用特殊变量(violate)实现线程同步(其实不能实现,在特定情况下,对于某个变量可以获取最新的数据)
aviolate关键字为域变量的访问提供了一种免锁机制
b使用其告诉虚拟机该域可能会被其他线程更新
c每次使用该域都会重新计算,而不是使用寄存器中的值
dviolate不提供原子操作,不能修饰final类型的变量
4.使用重入锁实现线程同步
javaSE5.0新增java.util.concurrent包来支持同步
ReentrantLock类可重入,互斥,实现了Lock接口的锁。
它与使用synchronized方法具有相同的基本行为和语义,并且扩展了其能力
方法:ReentrantLock()创建
Lock()获得锁
// 代码块
Unlock()释放锁
代码块位置就实现同步。
5.ThreadLocal(个人认为其实并没有实现一种常规认识的同步,用空间换取了时间,不是为了协调线程同步问题的策略)
使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,副本之间相互独立,而不会对其他线程产生影响。
ThreadLocal类的常用方法
ThreadLocal()//创建一个线程本地变量像ThreadLocal <Integer>tl=new ThreadLocal<Integer>();
initialValue()//返回此线程局部变量的当前线程的初始值 例如 Integer initialValue();
set(T i)//将此线程局部变量中的当前线程副本中的值设置为i。
10.显示监视器(Lock),隐是监视器(synchronized)
被监视的只能由一个线程来执行
11.死锁
1.互斥条件
2.不剥夺条件
3.请求和保持条件
4.循环等待条件
12.Java集合类框架有哪些基本接口
有2大类:
Collection+Map
一个元素集合一个键值对集合
List和Set继承Collection
一个有序集合,一个无序
ArrayList和LinkedList继承List
HashSet继承Set
HashMap和HashTable继承Map
HashTable是线程安全的,但是HashMap性能更好,能用null作为Key
相关文章
- 暂无相关文章
用户点评