线程安全与锁优化

多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调用和交替执行,也不需要额外的同步,或者在调用方进行任何协调操作,都能获得正确的结果,那么这个对象是线程安全的 可以将java语言中的各种操作共享数据分为5类 不可变:Immutable对象、String或被finnal修饰的基本数据类型。对引用类型,只要其地址不变,且其不会暴露出影响其状态的方法 …

正则匹配a,b之间的内容

比如我想匹配 <a>bingo</a> 中的 bingo 可以使用正则 (?<=<a>).*(?=<\a>) 其中的(?<=X)为正后发断言,(?=X)为正先行断言,断言只是条件,帮助你找到需要的字符串,本身不会被匹配到结果中 规则 描述 (?=X) 零宽度先行断言,匹配右侧有表达式X (?!X) 零宽度负先行断言,匹配右侧没有表达式X (?<=X) 零宽度 …

Zookeeper 学习笔记

什么是Zookeeper Zookeeper分为服务端和客户端 一个服务端可以理解为多个节点容器,节点被成为ZNode,一个节点类似于一个文件,用于保存数据,例如字符串。同时,一个节点也可以理解为一个目录,即可以在一个节点下新建其他节点。 一个Zookeeper集群可以有多个服务端,每个服务端在启动时就已经在配置文件中配置了其他服务端的信息,例如ip和通信 …

netty学习笔记

预备 什么是Netty? 异步的、基于事件驱动的网络应用框架,用于快速开发高性能、高可靠的网络IO程序 主要针对TCP协议下,面向Clients端的高并发应用 本指是一个基于TCP的NIO框架,只是对原生的NIO做了一个封装。 应用场景 高性能RPC框架必不可少,例如Dubbo 游戏行业中,处理大并发 I/O模型 Java共支持3中网络编程模型I/O模式 …

MySQL学习笔记

概述 索引的数据结构 二叉树 红黑树 Hash表 B-Tree 每个索引都可以选择不同的数据结构 使用红黑树保存索引数据,仍然会因为树的高度增加带来的查询效率的衰减,解决方案是每个节点多放几个索引数据,即B树,为了更高的查询效率,在B树的基础上衍生出B+树 B和B+树的区别 非叶子节点不保存数据,只保存树索引 叶子节点使用指针链接 B+树每个节点默认是 …

jvm学习笔记

基于栈和基于寄存器的指令集架构 JVM前端编译器架构都是 基于栈 的指令集架构,与之对应的还有 基于寄存器 的指令集架构。 基于栈的指令集架构 跨平台性好、指令集小、指令多、性能相较于寄存器更差 例: 基于寄存器的指令集架构 直接使用cpu的指令集,故执行幸能更好,但是移植性较差 Hotspot/JRocket/J9 JRocket:号称最快的虚拟机,专注于 …

JUC学习笔记

volatile 关于上述程序的说明: main方法中开启了两个线程,一个共享数据flag。myThread线程在100毫秒后将flag修改为true,主线程循环读取flag,如果为true则打印一句话。 但是执行结果发现,即使myThread将flag修改为true,主线程仍然没有打印任何值。 解释: 每个线程都会有自己的工作线程,且他们共享一块主内存 …

js中的async/await

async 起什么作用 这个问题的关键在于,async 函数是怎么处理它的返回值的! 我们当然希望它能直接通过 return 语句返回我们想要的值,但是如果真是这样,似乎就没 await 什么事了。所以,写段代码来试试,看它到底会返回什么: async function testAsync() { return "hello async"; } const …

i++的java底层原理

i++问题 int i = 0; i = i++; print(i) // 0 解释: i++中有两个临时变量,所以上式编译之后会成为 int i = 0; byte temp1 = i; int temp2 = i + 1; i = temp1; print(i) 但是其真正的字节码中只有i一个变量,使用栈完成上述结果(复习栈帧的内容)