1.你知道有哪个框架用到NIO了吗?
2.有一个学生类,想按照分数排序,再按学号排序,应该怎么做?
3.Native方法解释一下
4.数组与集合区别,用过哪些?
5.说说Java中的集合?
6.Java中的线程安全的集合是什么?
7.Collections和Collection的区别
8.集合遍历的方法有哪些?
9.讲一下java里面list的几种实现,几种实现有什么不同?
10.Arraylist和LinkedList的区别,哪个集合是线程安全的?
1.你知道有哪个框架用到NIO了吗?
没学过这个Netty框架,后续要学!。=
Netty。Netty是一个高性能、异步的网络应用程序框架,可以轻松地开发基于TCP、UDP和HTTP等协议的网络应用程序。它是基于Java NIO技术实现的,具有较高的性能和可扩展性。Netty不仅可以用于开发网络客户端和服务器端,还可以用于开发其他类型的网络应用程序,如网络代理、网关和中间件等。
2.有一个学生类,想按照分数排序,再按学号排序,应该怎么做?
学生类实现Comparable接口,并重写compareTo方法然后在compareTo方法中实现按照分数排序和按照学号排序的逻辑。Collections.sort(students);来实现。
3.Native方法解释一下
感觉问的概率不大,稍微知道做什么的就好。
当java代码编写满足不了需求,需要借助C/C++代码来实现时,就要用到native方法。
Java Native Interface (JNI)标准就成为 Java 平台的一部分,它允许 Java 代码和其他语言编写的代码进行交互。
JNI 的缺点:
①、程序不再跨平台。要想跨平台,必须在不同的系统环境下重新编译本地语言部分。
②、程序不再是绝对安全的,本地代码的不当使用可能导致整个程序崩溃。一个通用规则是,你应该让本地方法集中在少数几个类当中。这样就降低了 Java 和 C/C++ 之间的耦合性。
4.数组与集合区别,用过哪些?
数组初始化后,不可以改变长度,而集合可以。
数据可以是基本类型,而集合只能是对象。
数组可以直接访问数据,而集合要通过迭代器或者相关方法。
5.说说Java中的集合?
基础接口是Collection,Map,进一步的有LIst,Set,Map,Queue。Abstract。
6.Java中的线程安全的集合是什么?
java.util包(常见的集合)中只有vector和HashTable。
java.concurent包里的都是线程安全的集合。并发Map,Set,List,Queue,Deque。例如ConcurrentHashMap,ConcurrentSkipListSet。
这里注意HashTable和ConcurrentHashMap的加锁粒度不同。
C中是把table分成segment,对其加锁。
7.Collections和Collection的区别
Collection是Java集合框架中的一个接口,它是所有集合类的基础接口。Collection接口有许多实现类,如List、Set和Queue等。
Collections位于java.util包中。它提供了一系列静态方法,用于对Collection的实现类进行操作和算法。Collections类中的方法包括排序、查找、替换、反转、随机化等等。
8.集合遍历的方法有哪些?
部分可以通过下标进行索引的可以通过for循环通过索引
增强 for 循环 即 冒号
Iterator 或其子类 ListIterator
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
forEach
System.out.println(element);
stream
list.stream().forEach(element -> System.out.println(element));
9.讲一下java里面list的几种实现,几种实现有什么不同?
ArrayList,LinkedList,Vector。
Vector是早期Java提供的线程安全的动态数组。Vector 内部是使用对象数组来保存数据,可以根据需要自动的增加容量,当数组已满时,会创建新的数组,并拷贝原有数组数据。
ArrayLIst线程不安全。ArrayList 也是可以根据需要调整容量,不过两者的调整逻辑有所区别,Vector 在扩容时会提高 1 倍,而 ArrayList 则是增加 50%。
LinkedList是双向链表,不需要扩容,也线程不够安全。
10.Arraylist和LinkedList的区别,哪个集合是线程安全的?
都是List接口的实现类。
底层实现不同:A是数组,L是链表。
空间占有不同:A是要一段连续的内存空间,L是不用。
效率差别:A的索引效率高,L的插入效率高。
应用场景也不同:A查找和尾插多的场景,L修改删除插入场景。
两者都是不线程安全的,同样实现List接口的实现类Vector是线程安全的。