Java基础的巴拉巴拉

  1. 实现接口的类,如果是抽象类,就不用实现该接口的所有抽象方法;如果是具体类,就要实现所有抽象方法。

  2. System.out.println(a + b + “,” + i); a=2,b=3,i=4,输出结果是5,4 为什么?因为输出函数可以计算,从左到右先计算再进行字符串拼接。

  3. 线性表最常用的操作是存取第i个元素和其前驱后继的值,节省时间应采用顺序表。其实顺序表就是数组形式存储的表结构,可以实现随机存取。其他表结构不能实现随机存取。

  4. 快速排序和堆排序为不稳定的,归并排序和基数排序是稳定的,但基数排序常用于整数排序。

  5. 堆栈是一种存储部件,即数据的写入和读出不需要编址,而是根据写入的顺序决定读出的顺序。而输入输出设备需要编址。

  6. 32位机器按照4字节补齐,64位机器按照8字节补齐。不够的补上,可以前后拼凑,但如果是4 1 4 ,则1要补齐到4,总共12字节。

  7. 对长度为n和m的两个有序数组进行合并排序,最差要比较多少次?
    - m+n-1 就是数据交叉情况:1,3,5,7 和 2,4,6,8

  8. volatile关键字可以保证并发编程的可见性,有序性。不能保证原子性。

  9. 堆排序是原地算法,所需的空间为O(1),自底向上构建堆时间复杂度为O(n),而自顶向下是O(nlogn)

  10. 可以生成JVM进程堆快照的命令是 jmap。

  11. 在Spring中装配bean的主要方式有:

    • 在XML中显示配置,常见
    • 在Java中进行显示配置,spring boot中常见。
    • 隐式的发现机制和自动装配,例如@Controller, @Service这些。
  12. ArrayList和LinkedList的区别:

    • 对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对 ArrayList而言,主要是在内部数组中增加一项,可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是固定的。
    • 在ArrayList集合中添加或者删除一个元素时,当前的列表所所有的元素都会被移动。而LinkedList集合中添加或者删除一个元素的开销是固定的。
    • LinkedList集合不支持高效的随机访问。
    • ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。
  13. 银行转账中如何检查转账回路,即A转给B,B转给A。

    • AB之间建立有向图,转账行为用有向边表示,即判断该有向图是否存在回路。用拓扑排序:
    • 计算图中所有点的入度,把入度为0的点加入栈。
    • 如果栈非空,取出栈顶顶点a,从图中删除该点,并删除所有以a为起点的边,如果删除的边的另一个顶点入度为0,则入栈。
    • 如果栈为空,图中还存在顶点,则表示该图有环。
  14. 多线程的join()方法是等待被调用线程执行完之后才执行当前线程的。

  15. List a = new ArrayList<LinkedList / DelayQueue>(); 不可以是泛型 ?

  16. 构造函数是没有返回值的。

  17. 函数重载和返回值类型无关。

  18. 浮点数的表示范围和阶码的位数有关,精度和尾数的位数有关。

  19. 在高并发的情况下,map要使用ConcurrentHashMap。

  20. B树和B+树都是平衡树,都可以用于文件的索引结构,但B树只能支持随机检索,而B+树是有序的树,既能支持随机检索,又能支持顺序检索。

  21. tar -zcvf 目标 源文件

  22. 给1,2,3,4,5按照顺序放入一个栈中(stack),同时随机的从栈中弹出,一共有多少种弹栈组合?公式是 (2n)!/(n!(n+1)!)

  23. 进程间的通讯方式有:管道,信号量,共享内存,消息队列

  24. List list = new ArrayList(); 默认创建ArrayList对象,大小为10,不够的时候扩容为1.5倍。
    List list = new ArrayList(20); 调用有参构造函数,创建容量为20的对象,扩充次数为0。

  25. 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

  26. abstract不能修饰变量,只能修饰类和方法。

  27. OIO:每个线程只能处理一个channel(同步的,该线程和该channel绑定)。线程发起IO请求,不管内核是否准备好IO操作,从发起请求起,线程一直阻塞,直到操作完成,如图:
    NIO:每个线程可以处理多个channel(异步)。线程发起IO请求,立即返回;内核在做好IO操作的准备之后,通过调用注册的回调函数通知线程做IO操作,线程开始阻塞,直到操作完成。
    AIO:线程发起IO请求,立即返回;内存做好IO操作的准备之后,做IO操作,直到操作完成或者失败,通过调用注册的回调函数通知线程做IO操作完成或者失败。
    参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值