Java知识点

JVM

1.垃圾回收

1.1可达性分析

可达性算法
引用计数 VS 可达性分析
引用计数:无法解决循环引用
可达性分析: GC Root扫描,finalize只会被执行一次
关于finalize:
https://stackoverflow.com/questions/158174/why-would-you-ever-implement-finalize
https://stackoverflow.com/questions/52879761/should-java-9-cleaner-be-preferred-to-finalization

1.2 垃圾收集器
1.3 分代回收

2.线程池

参考:
Java 多线程:彻底搞懂线程池

线程池流程图

3.线程安全

4.HashMap

4.1HashCode如何计算

常用的hash函数:直接取余法、乘法取整法、平方取中法
hashcode是为了查找的快捷性,散列对象的存储地址。

以String计算hashcode为例
参考:
科普:为什么 String hashCode 方法选择数字31作为乘子

public int hashCode() {
   int h = hash;
    if (h == 0 && value.length > 0) {
        char val[] = value;

        for (int i = 0; i < value.length; i++) {
            h = 31 * h + val[i];
        }
        hash = h;
    }
    return h;
}

计算hashcode首先选择一个质数为因子,选用31计算时可以被JVM优化(i<<5)-i
hash作用主要是为了散列,减少冲突,以质数作为乘子可以减少冲突

重写equals时一般要重写hashcode(equals相等hashcode一定是相等的),hashcode主要用于hashmap、set中,为了减少冲突减少equals的比较次数先用hash进行散列。

equals若根据类中属性进行重写,hashcode也要根据属性选择相应乘子进行散列(模仿string)

5.

NIO

1.阻塞/非阻塞 vs 同步/异步

同步:调用方调用别的接口或请求数据时一定要得到结果才会执行后续的操作
异步:发起调用后可以先不获取结果执行后续操作,等结果返回再执行相应操作

阻塞:调用方要等待条件满足才能拷贝数据
非阻塞:调用方发起调用可以不用等待条件满足,先执行其他操作,等到条件满足或结果返回才去获取结果

2.select/poll/epoll

参考:
Epoll模型详解

select:1.用户空间fd复制到内核 2.轮询 3.回调 (fd数量受限1024)
poll:同select,只不过fd不受限(链表形式存储)
epoll:接口有3个函数
epoll_create:创建fd句柄
epoll_ctl:在一个eventpoll(红黑树)中增删改节点(fd)
epoll_wait:等待事件的产生

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值