Java基础
基础原理篇
Java超神之路
这个作者很懒,什么都没留下…
展开
-
每次固定截取list
在这个示例中,我们遍历了 list 列表,并且使用 subList() 方法获取 5 个元素的子列表。每次循环时,我们都会检查元素下标 i 和下一个元素的下标 i + limit 的范围,以确保它们没有超出列表的大小。所有子列表都将添加到一个名为 resultList 的主列表中,最后我们输出该列表以验证每个子列表是否正确生成。你可以使用Java的subList()方法来获取一个固定大小的子列表。在该问题中,你可以遍历整个列表,在每5个元素结束时创建一个新的子列表,然后将该子列表添加到结果列表中。原创 2023-06-07 15:12:15 · 995 阅读 · 0 评论 -
ThreadLocal
123原创 2022-02-24 14:12:38 · 146 阅读 · 0 评论 -
1. Hashmap底层数据结构,以及hash寻址的原理性问题?
hashmap底层就是一个数组,为了存储更多的数据他会在数组的桶位1.7 数组+ 列表1.8+数组+列表+红黑树存放寻址从put方法开始,关键put时先判断table是否为空,空的话会用扩容,默认16容量不为空的话,计算数组下标计算方式hashcode(&)与上length-1final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) {原创 2022-02-23 17:20:42 · 229 阅读 · 0 评论 -
nio原理
nio关键是selector(多路复用器)epoll原理三个关键函数epollCreat创建一个epoll实例,并返回一个非负数作为文件描述符(Linux系统一切皆文件)epollCtl会调用Linux操作系统EPOLL_CTL调用EPOLL_CTL才会真真监听evnt事件epollWaitslector内部有两个集合就绪事件列表rdlistchannel集合1.注册调register会把socketchannel和serverSocketChannel放到channel集原创 2022-02-23 16:27:51 · 848 阅读 · 0 评论 -
线程死锁及解决方案
线程死锁的四个必要条件如果在一个系统中以下四个条件同时成立,那么就能引起死锁:互斥性:线程对资源的占有是排他性的,一个资源只能被一个线程占有,直到释放。请求和保持条件:一个线程对请求被占有资源发生阻塞时,对已经获得的资源不释放。不剥夺:一个线程在释放资源之前,其他的线程无法剥夺占用。循环等待:发生死锁时,线程进入死循环,永久阻塞。解决方法:互斥性,可用ThreadLocal请求和保持条件,踢掉一个(结束一个)不剥夺,trylcok,加个超时时间,抢不到释放资源分布式锁,可以用DB原创 2022-02-23 13:24:11 · 3119 阅读 · 0 评论 -
kafka分区消费计算
int numPartitionsPerConsumer = numPartitionsForTopic / consumersForTopic.size(); int consumersWithExtraPartition = numPartitionsForTopic % consumersForTopic.size(); List<TopicPartition> partitions = AbstractPartitionAssignor.partitions(topic, num.原创 2022-02-18 09:48:20 · 967 阅读 · 0 评论 -
Semaphore-流控信号量
Semaphore用作流控信号量在rocketmq中有很好的例子Semaphore可以用来控制同一时刻访问共享资源的线程数量SemaphoreReleaseOnlyOnce#release通过cas保证只释放一次public void release() { if (this.semaphore != null) { if (this.released.compareAndSet(false, true)) { this.s原创 2022-02-17 17:23:12 · 166 阅读 · 0 评论 -
JMM内存模型
可见性原子性有序性volatile只保证可见性,和有序性,不保证原子性volatile会禁止指令重排MESIJMM-CPU缓存一致性协议假如现在只有一个线程用到变量x,那他的状态就是独占假如现在有其他线程用到变量x,状态改变,有E(独占)→S(共享),此时得保证一致性这是就引入缓存行,加lock锁缓存行,通过总线裁决,失败的状态改成I(已失效)...原创 2022-02-14 23:54:24 · 135 阅读 · 0 评论 -
HashMap和Hashtable的区别?
HashMap和Hashtable的区别?1.继承的父类不同HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口Dictionary类是一个已经被废弃的类(见其源码中的注释)。父类都被废弃,自然而然也没人用它的子类Hashtable了。2.对Null key 和Null value的支持不同Hashtable既不支持Null key也不支原创 2021-04-08 00:57:38 · 125 阅读 · 0 评论