-
实现接口的类,如果是抽象类,就不用实现该接口的所有抽象方法;如果是具体类,就要实现所有抽象方法。
-
System.out.println(a + b + “,” + i); a=2,b=3,i=4,输出结果是5,4 为什么?因为输出函数可以计算,从左到右先计算再进行字符串拼接。
-
线性表最常用的操作是存取第i个元素和其前驱后继的值,节省时间应采用顺序表。其实顺序表就是数组形式存储的表结构,可以实现随机存取。其他表结构不能实现随机存取。
-
快速排序和堆排序为不稳定的,归并排序和基数排序是稳定的,但基数排序常用于整数排序。
-
堆栈是一种存储部件,即数据的写入和读出不需要编址,而是根据写入的顺序决定读出的顺序。而输入输出设备需要编址。
-
32位机器按照4字节补齐,64位机器按照8字节补齐。不够的补上,可以前后拼凑,但如果是4 1 4 ,则1要补齐到4,总共12字节。
-
对长度为n和m的两个有序数组进行合并排序,最差要比较多少次?
- m+n-1 就是数据交叉情况:1,3,5,7 和 2,4,6,8 -
volatile关键字可以保证并发编程的可见性,有序性。不能保证原子性。
-
堆排序是原地算法,所需的空间为O(1),自底向上构建堆时间复杂度为O(n),而自顶向下是O(nlogn)
-
可以生成JVM进程堆快照的命令是 jmap。
-
在Spring中装配bean的主要方式有:
- 在XML中显示配置,常见
- 在Java中进行显示配置,spring boot中常见。
- 隐式的发现机制和自动装配,例如@Controller, @Service这些。
-
ArrayList和LinkedList的区别:
- 对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对 ArrayList而言,主要是在内部数组中增加一项,可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是固定的。
- 在ArrayList集合中添加或者删除一个元素时,当前的列表所所有的元素都会被移动。而LinkedList集合中添加或者删除一个元素的开销是固定的。
- LinkedList集合不支持高效的随机访问。
- ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。
-
银行转账中如何检查转账回路,即A转给B,B转给A。
- AB之间建立有向图,转账行为用有向边表示,即判断该有向图是否存在回路。用拓扑排序:
- 计算图中所有点的入度,把入度为0的点加入栈。
- 如果栈非空,取出栈顶顶点a,从图中删除该点,并删除所有以a为起点的边,如果删除的边的另一个顶点入度为0,则入栈。
- 如果栈为空,图中还存在顶点,则表示该图有环。
-
多线程的join()方法是等待被调用线程执行完之后才执行当前线程的。
-
List a = new ArrayList<LinkedList / DelayQueue>(); 不可以是泛型 ?
-
构造函数是没有返回值的。
-
函数重载和返回值类型无关。
-
浮点数的表示范围和阶码的位数有关,精度和尾数的位数有关。
-
在高并发的情况下,map要使用ConcurrentHashMap。
-
B树和B+树都是平衡树,都可以用于文件的索引结构,但B树只能支持随机检索,而B+树是有序的树,既能支持随机检索,又能支持顺序检索。
-
tar -zcvf 目标 源文件
-
给1,2,3,4,5按照顺序放入一个栈中(stack),同时随机的从栈中弹出,一共有多少种弹栈组合?公式是 (2n)!/(n!(n+1)!)
-
进程间的通讯方式有:管道,信号量,共享内存,消息队列
-
List list = new ArrayList(); 默认创建ArrayList对象,大小为10,不够的时候扩容为1.5倍。
List list = new ArrayList(20); 调用有参构造函数,创建容量为20的对象,扩充次数为0。 -
Float.isNaN方法就是判断是否为NaN,即not a number 未确定值。例子:
Float f1 = new Float(-1.0/0.0); f1.isNaN() 结果: -Infinity = false;
Float f2 = new Float(0.0/0.0); f2.isNaN() 结果:true 是NaN -
abstract不能修饰变量,只能修饰类和方法。
-
OIO:每个线程只能处理一个channel(同步的,该线程和该channel绑定)。线程发起IO请求,不管内核是否准备好IO操作,从发起请求起,线程一直阻塞,直到操作完成,如图:
NIO:每个线程可以处理多个channel(异步)。线程发起IO请求,立即返回;内核在做好IO操作的准备之后,通过调用注册的回调函数通知线程做IO操作,线程开始阻塞,直到操作完成。
AIO:线程发起IO请求,立即返回;内存做好IO操作的准备之后,做IO操作,直到操作完成或者失败,通过调用注册的回调函数通知线程做IO操作完成或者失败。
参考链接
Java基础的巴拉巴拉
最新推荐文章于 2024-07-18 18:51:51 发布