摘要: CPU读取内存数据时并非一次只读一个字节,而是会读一段64字节长度的连续的内存块(chunks of memory),这些块我们称之为缓存行(Cache line)。 假设你有两个线程(Thread1和Thread2)都会修改同一个volatile变量x: volatile long x; 如果Th 阅读全文
posted @ 2023-03-27 15:01 刚刚好。 阅读(36) 评论(0) 推荐(0) 编辑
摘要: Mysql使用limit m,n分页查询,性能很低,原因在于MySQL是先查出m+n个数据,然后抛弃掉前m个数据。 优化方法: 阅读全文
posted @ 2023-03-27 14:58 刚刚好。 阅读(62) 评论(0) 推荐(0) 编辑
摘要: 1.开放定址法:线性探测法、平方探测法等。就是哈希冲突后,加上一个便宜,寻找不冲突的位置。ThreadLocal采用这种方法。 2.拉链法:哈希冲突后,通过链表解决。HashMap采用这种方法。 3.双哈希法。哈希冲突后,再使用另一个哈希重新计算位置。 4.建立公共溢出区。将哈希表分为基本表和溢出表 阅读全文
posted @ 2023-03-27 11:38 刚刚好。 阅读(52) 评论(0) 推荐(0) 编辑
摘要: HashTable是一个线程安全的HashMap,是jdk早期版本的产物,但其效率较低 #1.初始化 可以看到,与HashMap不同,HashTable无参构造是默认会构造一个容量为11的数组,而HashMap在无参构造初始化时不会构造数组,只有在第一个put后才会构造容量为16的数组 #2.put 阅读全文
posted @ 2023-03-26 20:36 刚刚好。 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 哈希算法:取哈希后模节点的数目 假设有一个由A、B、C三个节点组成的KV服务,每个节点存放不同的KV数据。通过哈希算法,每个key都可以寻址到对应的服务器,比如,查询key是key-01,计算公式为hash(key-01)%3,经过计算寻址到了编号为1的服务器节点A 但如果服务器数量发生变化,基于新 阅读全文
posted @ 2023-03-24 09:40 刚刚好。 阅读(36) 评论(0) 推荐(0) 编辑
摘要: #Q1:客户端连接一个不存在的 IP 地址,会发生什么? 这个问题要分两种情况来思考,不同的情况得到的结论是不同的。 第一个情况:目标 IP 地址和客户端的 IP 地址是同一个局域网(网络号相同)。 第一种情况,客户端无法发出 SYN 报文,主要卡在数据链路层。 因为目标地址不存在 IP 地址,客户 阅读全文
posted @ 2023-03-20 16:10 刚刚好。 阅读(153) 评论(0) 推荐(0) 编辑
摘要: select 实现多路复用的方式是,将已连接的 Socket 都放到一个文件描述符集合,然后调用 select 函数将文件描述符集合拷贝到内核里,让内核来检查是否有网络事件产生,检查的方式很粗暴,就是通过遍历文件描述符集合的方式,当检查到有事件产生后,将此 Socket 标记为可读或可写, 接着再把 阅读全文
posted @ 2023-03-20 16:07 刚刚好。 阅读(131) 评论(0) 推荐(0) 编辑
摘要: ![](https://img2023.cnblogs.com/blog/2324742/202303/2324742-20230319110241554-1197267584.png) 阅读全文
posted @ 2023-03-19 11:02 刚刚好。 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 1.自定义runnable接口实现类 public class MySyncThreadTest { public static void main(String[] args) throws Exception { CustomRunnable cRunnacle = new CustomRunn 阅读全文
posted @ 2023-03-19 11:02 刚刚好。 阅读(77) 评论(0) 推荐(0) 编辑
摘要: 核心线程数:如果任务是 CPU 密集型,即计算任务比较多,可以设置线程数为核心数+1,这样可以让 CPU 资源得到充分利用。如果任务是 IO 密集型,即网络请求比较多,可以根据实际情况设置线程数,一般可以设置为 2 * 核心数。 最大线程数:最大线程数一般设置为 2 * 核心线程数,可以根据实际情况 阅读全文
posted @ 2023-03-18 18:45 刚刚好。 阅读(2415) 评论(0) 推荐(0) 编辑