您的位置:首页 > 职场人生

java面试基础--持续更新

2018-01-21 19:12 477 查看

java面试基础

1、解释什么事面向对象编程(oop)

java是一个支持并发、基于类和面向对象的计算机编程语言。具体优点如下:

-代码开发模块化,易于维护和修改

-代码服用

-增加代码的可理解性

特性

封装:即给对象提供了隐藏内部特性和行为的能力。

多态:多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作可以应用到其他类型的值上面。

继承:继承给对象提供了从积累获取字段和方法的能力。继承提供了代码的重用性,也可以在不修改类的情况下给现存的类添加新特性。

抽象:把想法从具体的试题中分离出来的步骤。

2、什么是java虚拟机?为什么java被称作是“平台无关的编程语言”?

java虚拟机是一个可以执行java字节码的虚拟机进程。java源文件被编译成j能被ava虚拟机执行字节码文件。

3、static关键字是什么意思?

static关键字表明一个成员变量或者成员方法在没有所属类的实力变量的情况下被访问。static可以修饰变量,方法,代码块和静态内部内。

4、什么事值传递和引用传递

对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响元对象的值.

对象被引用传递,意味着传递的并不是实际的对象而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。

java面试线程

1、进程和线程的区别

进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。

2、创建线程有几种不同的方式?你喜欢哪一种?为什么

有三种实现方式:

继承Thread类

实现Runnable接口

应用程序可以使用Excutor来创建线程池

实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。

3、概括的解释下线程的几种可用状态

线程在执行过程中,可以处于下面几种状态:

1、就绪(Runnable):线程准备运行,不一定立马就开始执行。

2、运行中(Running):进程正在执行线程的代码。

3、等待中(Waiting):线程处于阻塞的状态,等待外部的处理结果。不占cup阻塞

4、睡眠中(sleeping):线程被强制睡眠。占cpu阻塞

5、I/O阻塞:等待I/O操作完成。

6、同步阻塞:等待获取锁。

7、死亡(Dead):线程完成了执行。

4、什么是死锁?

两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。

饥饿锁:优先级搞得不断获取资源,优先级低的一直获取不到资源,就会造成死锁。

谦让锁:都等其他线程先执行,就发生了死锁。

5、如何确保N个线程可以访问N个资源同时又不导致死锁?

使用多线程的时候,一种非常简单的避免思索的方式就是:制定获取所的顺序,并且强制线程按照制定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。

6、HashMap在多线程环境下使用需要注意什么?为什么?

在多线程环境下,需要使用ConcurrentHashMap,因为HashMap是线程不安全的,如果多线程操作,会造成不可预期的结果。

ConcurrentHashMap对大数组的每个值进行分离加锁,实现了锁分离。

java集合类

java集合提供了一套设计良好的支持对一组对象进行操作的接口和类。Java集合类里面最基本的接口有:

Collection:代表一组对象,每一个对象都是它的子元素。

Set:不包含重复元素的Collection。

List:有顺序的Collection,并且可以保护重复元素。

Map:可以把键(key)映射到值(value)的对象,键不能重复。

1、Java中的HashMap的工作原理是什么?

Java中的HashMap是以键值对(key-value)的形式存储元素的。HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。HashMap的一些重要的特性是它的容量(capacity),负载因子(load factor)和扩容极限(threshold resizing)。

2、HashMap和HashTable有什么区别?

HashMap允许键和值是null,而Hashtable不允许键或者值是null。

Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。

3、HashSet和TreeSet有什么区别?

HashSet是由一个hash表来实现的,因此,它的元素是无序的。add(),remove(),contains()方法的时间复杂度是O(1)。

另一方面,TreeSet是由一个树形的结构来实现的,它里面的元素是有序的。因此,add(),remove(),contains()方法的时间复杂度是O(logn)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: