ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java常规技术题

2022-05-14 16:34:19  阅读:9  来源: 互联网

标签:java ArrayList list 技术 接口 线程 常规 集合


一:线程的基本状态以及状态之间的关系
1.新建状态:新创建了一个线程对象
2.就绪状态:也叫可运行状态,线程对象创建后,其他线程调用了该对象的start()方法。
3.运行状态:就绪状态的线程获取了cpu,执行程序代码
4.阻塞状态:阻塞状态是线程因为某种原因放弃CPU执行权,暂时停止运行,直到线程进入就绪转态,才有机会转到运行转态,阻塞的情况分三种:等待阻塞,同步阻塞,其他阻塞

二:描述java锁机制
java中所说的锁就是内置锁,每个java对象都可以作为一个实现同步的锁,虽然说在java中一切皆对象,但是锁必须是引用类型的,基本数据类型则不可以。

三:启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程就绪转态,以后可以被调度为运行转态,一个线程必须关联一些具体的执行代码,run()方法是该线程所关联的执行代码。

四:set和list的区别,list和map的区别?
1.set是无序的,元素不可重复;list是有序的,元素可以重复
2.list存储的是单个对象的集合(有序的),map存储的是键值对为对象的集合(无序的);

五:同步方法,同步代码块区别?
1.同步方法:即有synchronized关键字修饰的方法。在使用该方法前,需要获得内置锁,否则就处于阻塞状态。
2.同步代码块:即有synchronized关键字修饰的语句块,被该关键字修饰的语句块会自动被加上内置锁,从而实现同步。

六:comparable和comparator接口是干什么的,说出他们的区别
它们都是用于对类的对象进行排序和比较使用的接口
1.comparable是排序接口,位于java.lang包下,且重写了compareTo方法,就意味着该类支持排序,常结合Collections.sort或Arrays.sort对集合或数组内的元素进行排序。
2.comparator是比较接口,位于java.util包下,我们如果需要控制某个类对象的次序,而该类本身不支持排序(即没有实现Comparable接口),那么我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator接口即可。
3.comparable相当于“内部比较器”,而comparator相当于“外部比较器”

七:java集合类框架的最佳实践有哪些?
首先Java中的集合框架体系非常强大和完善,主要用于程序中的数据存储,从最顶层主要分为了Collection和Map接口,我们平时使用的集合类都是从这两个类别中扩展开来,正确选择要使用的集合的类型对性能非常重要。
比如:
1,元素的大小是固定的,而且能事先知道,我们就应该用Array而不是ArrayList。
2)如果我们大概知道存储的数量,可以在使用集合时先给予一个初始容量大小,从而有效避免集合自动增长的算法而造成的空间浪费,如new ArrayList(30)。
3,为了类型安全,提高存取效率和可读性,我们优先使用泛型,并且还能有效避免ClassCastException类型转换异常。
4,有时为了提高数据的快速定位查找,可优先使用Map键值对集合,因为Map集合在数据的查找上效率非常高,但是如果要保证数据的顺序,最好使用List
5,使用JDK提供的不变类作为Map的键可以避免为我们自己的类实现hashCode()和equals()方法。
6,底层的集合实际上是空的情况下,返回长度是0的集合或者是数组,不要返回null。

八:hashmap和hashtable的区别?
1.hashmap和hashtable都说键值对数据结构,且都实现了map接口,存储的元素无序。
2.hashmap非线程安全的,hashtable是线程安全的,所以hashmap的效率高于hashtable(HashTable里面的方法使用Synchronize关键字修饰)
3.hashmap允许空键空值,hashtable则不允许。

九:hashset和treeset有什么区别?
相同点:1.单列存储,2.元素不可重复
不同点:1.底层数据结构不同(hashset哈希表结构,treeset二叉树结构)
2.数据唯一性依据不同(HashSet通过重写hashcode和equals TreeSet通过compareable接口)
3.有序性不同,hashset无序,treeset有序

十:说出ArrayList,vector,linkedlist的存储性能和特性。
1.ArrayList,vector,linkedlist都实现了list接口;
2.ArrayList和vector底层是用数组实现的,而linkedlist使用双向链表实现
3.在容量增长上,ArrayList增长原来50%,vector集合增加容量为原来的一倍.
4.安全性方面vector能保证线程安全,但是效率比ArrayList要低

标签:java,ArrayList,list,技术,接口,线程,常规,集合
来源: https://www.cnblogs.com/eafkng/p/16270469.html

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有