摘要:消息队列本质是将同步处理转成异步处理 消息队列的基本要求不丢消息高可用高性能 消息队列名称 RabbitMQ RocketMQ Kafka 优点 轻量级 低延迟和高稳定性 1. 与周边生态系统的兼容性最好 2. 基于异步批量设计的异步收发性能最好 缺点 1. 消息大量堆积时性能大幅下降 2. 使用的
阅读全文
摘要:String str1= "abc"; String str2= new String("abc"); String str3= str2.intern(); System.out.println(str1==str2); System.out.println(str2==str3); System
阅读全文
摘要:HashMap 结构桶数组+单链表+红黑树(JDK1.8引入) 容量是2的幂的原因寻找位置时,(n - 1)& hashCode值等价于hash%n,但是&比%具有更高的效率。得到key的hashCode值后,通过二次hash(第一次hash时右移 16 位,hashCode值高16位与低16位异或
阅读全文
摘要:内存模型 JVM内存模型主要分为堆、程序计数器、方法区、虚拟机栈和本地方法栈。 堆 堆中包含了字符串常量池。 程序计数器 记录线程执行的字节码的地址。 方法区 存放已被虚拟机加载的类相关信息,包括类信息、运行时常量池(存放编译生成的字面量和符号引用)。当类加载到内存后,JVM把类文件常量池中的内容存
阅读全文
摘要:默认垃圾收集器 JDK1.7和JDK1.8默认垃圾收集器都是ParallelScavenge(新生代)+ParallelOld(老年代)JDK1.9默认垃圾收集器G1 查看命令:java -XX:+PrintCommandLineFlags -version G1 JDK 1.7推出的垃圾收集器,特
阅读全文
摘要:跨平台原理 Java的跨平台基于编译器和JVM。编译器把源文件编译成与平台无关的字节码class文件,JVM把该文件解释成与平台有关的机器码指令,在平台上执行。 Java面向对象的4个特征 1 抽象提取对象的共性,构成抽象类或接口,由继承抽象类的类或接口的实现类来重写抽象方法。2 继承子类继承父类(
阅读全文
摘要:缓存一致性问题 每个线程都有自己的工作内存。线程在初始化时从主内存读取所需的变量值到工作内存。在线程运行时,如果是读取则从工作内存中读取,如果是写入则先写到工作内存再刷新到主内存。在并发情况下可能出现不同线程持有不同的共享变量值。例如,A线程修改了共享变量值并刷新到主内存,但B、C线程在读取该共享变
阅读全文
摘要:生产者不断向队列中添加数据,消费者不断从队列中获取数据。如果队列满了,则生产者不能添加数据;如果队列为空,则消费者不能获取数据。通过实现了BlockingQueue接口的LinkedBlockingQueue来模拟同步。 import java.util.concurrent.BlockingQue
阅读全文
摘要:运行jar包时报错no main manifest attribute pom.xml中增加内容 <build> <!--修改编译出来的jar包名,仅为{artifactId}.jar--> <finalName>${project.artifactId}</finalName> <plugins>
阅读全文
摘要:用法 把http请求映射到方法上。 @Controller public class UserController { @RequestMapping("/user") public String get(){ return "userId"; } } SpringMVC处理流程
阅读全文
摘要:Java线程一对一映射为内核线程。线程池可以复用线程,限制线程数量。 参数含义 public ThreadPoolExecutor(int corePoolSize,// 线程池核心线程数 int maximumPoolSize,// 线程池最大线程数 long keepAliveTime,// 当
阅读全文
摘要:ThreadLocal含义 ThreadLocal线程本地变量把变量与线程绑定在一起,为每一个线程维护一个独立的变量副本(因为是对象引用,堆中的对象是线程间共享的,所以ThreadLocal没有解决线程安全问题),在本线程内随时可取。而ThreadLocal实例通常是private static类型
阅读全文
摘要:synchronized加锁对象 对于普通同步方法,锁是调用该方法的对象。对于静态同步方法,锁是该方法所属类的Class对象。对于同步代码块,锁是synchronized括号里面的对象。 JVM对锁的优化 偏向锁 如果一个线程获得锁,那么锁就进入偏向模式。当这个线程再次请求锁时,不执行同步操作。 轻
阅读全文
摘要:继承Thread类,重写run方法 Thread类实现了Runnable接口(只有一个没有返回值的run方法)。 public class ThreadDemo extends Thread { public ThreadDemo(String name) { super(name); } @Ove
阅读全文
摘要:运行jar包 java -jar demo-0.0.1-SNAPSHOT.jar 下载Arthas并启动 curl -O https://alibaba.github.io/arthas/arthas-boot.jar && java -Dfile.encoding=UTF-8 -jar artha
阅读全文
摘要:基于SpringBoot来开发接口并编译运行 代码 UserController类 package com.wjq.demo; import org.springframework.web.bind.annotation.RequestMapping; import org.springframew
阅读全文
摘要:使用lombok的@Getter和@Setter 作为一个Java 库,以简单的注解方式避免工程中的繁琐重复的代码。常用的注解有@Getter @Setter @Slf4j等。官网是https://projectlombok.org/。 // 配置Maven依赖 <dependency> <grou
阅读全文