ICode9

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

java常规技术题

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

标签: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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

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

ICode9版权所有