欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java面试个人整理(手打勿喷,易于个人学习)1,java面试

来源: javaer 分享于  点击 26639 次 点评:244

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


相关文章

    暂无相关文章
相关栏目:

用户点评