面试

1、synchoronized和lock区别

synchoronized是JVM的内置锁,而lock是Java代码实现的。lock是sync对的扩展,完全可以替代后者。

lock可以重入,允许同一个线程连续多次获得同一把锁。其次,lock独有的功能有:

  1. 可以响应中断,sync要么获得锁执行,要么保持等待。而重入锁可以响应中断,使得线程在迟迟得不到锁的情况下,不用再等待。主要由lockInterruptibly()实现,这是一个可以对中断进行响应的锁申请动作,锁中断可以避免死锁。
  2. 锁的申请可以有等待时限,用tryLock()可以实现限时等待,如果超时还未获得锁会返回false,也防止线程迟迟得不到锁时一直等待,可以避免死锁。
  3. 公平锁,即锁的获得按照线程先来后到的顺序依次获得,不会产生饥饿现象。sync的锁默认不公平,可通过传入构造方法的参数实现公平锁。
  4. 重入锁可以绑定多个Condition条件,这些Condition通过调用await/singal实现线程间通信。

2、java如何对对象排序

有时我们需要对类按照类中的某一个属性(或者多个属性)来对类的对象进行排序,有两种方法可以实现

  1. 类实现Comparable<t>接口,然后调用Collections.sort(List)方法进行排序</t>
  2. 类不实现Comparable<t>接口,而在排序时使用Collections.sort(List, Comparator<t>)方法,并实现其中的Comparator<t>接口。</t></t></t>

3、java有哪几种集合?有什么区别?

图片说明
Java中的集合有List,Set,Map.

List和Set有着很多的相似之处,都是存储单例数据的集合,父接口都是Collection。

List是有序的,值允许重复,每次插入数据,不是把对象本身存储到集合中,而是在集合中用一个索引变量指向这个对象。Set是无序的不允许有重复的值出现。

Map集合是存储双列数据的集合,存储的数据是无序的,键不可以重复,值可以重复。

1.List集合

  1. ArrayList:
    ** 底层数据结构是数组,查询快,增删慢,查询是根据数组下标直接查询速度快,增删需要移动后边的元素和扩容,速度慢。线程不安全,效率高**

  2. LinkedList:

底层数据结构是链表,查询慢,增删快,查询需要遍历数组,速度慢,增删只需要增加或删除一个链接即可,速度快,线程不安全,效率高

  1. Vector:
    底层数据结构是数组,查询快,增删慢,线程安全,效率低

2.Set集合

  1. Hashset:
    底层数据结构是哈希表,是根据哈希算法来存取对象的,存取速度快,当Hashset中元素个数超过数组大小(默认值位0.75)时,会进行近似两倍的扩容,哈希表依赖两个方法hashcode()和equals()方法,方法的执行顺序,判断hashcode值是否相同,是:执行equals方法看其返回值,true:说明元素重复不添加,false:直接添加到集合,hashcode值不相同直接添加到集合。

  2. LinkedHashset:
    底层数据结构是链表和哈希表,由链表保证元素有序,由哈希表保证元素的唯一

  3. Treeset
    底层数据结构是红黑树(唯一,有序)由自然排序和比较器排序保证有序,根据返回值是否是0判断元素是否唯一

Map集合

  1. HashMap:
    HashMap是基于散列表实现的,其插入和查询的<k,v>的开销是固定的,可以通过构造器设置容量和负载因子来调整容器的性能,线程不安全,效率低

  2. Treemap:
    基于红黑树实现,查看<k,v>时,它们会被排序,TreeMap是唯一带有subMap()方法的Map,subMap()方法可以返回一个子树。

  3. LinkedHashMap:
    类似于HashMap,但是迭代遍历它时,取得<K,V>的顺序是其插入次序,或者是最近最少使用(LRU)的次序。

Map取键值的两种方法

  1. 第一个,使用keySet方法,获得key的set,然后遍历set,就可以获得所有的value

  2. 第二个,使用entrySet方法,获得map中的所有键值对的一个视图,遍历就可获得所有的key、value


4、数组(Array)和列表(ArrayList)有什么区别

一、数组

  1. 数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单
  2. 声明数组的时候,必须同时指明数组的长度,数组的长度过长,会造成内存浪费,数组和长度过短,会造成数据溢出的错误。
  3. 数组只能存放类型一样的数据(基本类型/引用类型)

二、list

  1. List (列表)是接口,与Set(集)一起继承了Collection接口
  2. 元素有放入顺序,元素可重复

JAVA语言为什么能跨平台?

因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码。然后不同的硬件平台上安装有不同的Java虚拟机(JVM),由JVM来把字节码再“翻译”成所对应的硬件平台能够执行的代码。因此对于Java编程者来说,不需要考虑硬件平台是什么。所以Java可以跨平台。

全部评论

相关推荐

04-27 08:59
常州大学 Java
牛客139242382号:《两门以上汇编语言》
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务