公众号:架构师与哈苏
关注公众号进入it交流群! 公众号:架构师与哈苏 不定时都会推送一些实用的干货。。。
posts - 305,comments - 4,views - 10万
08 2021 档案
RabbitMQ的集群模式
摘要:单机模式(生产基本不用) 普通集群模式 默认模式,以两个节点(rabbit01,rabbit02)为例来进行说明,对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列结构。当消息进入rabbit0 阅读全文
posted @ 2021-08-30 17:10 公众号/架构师与哈苏 阅读(192) 评论(0) 推荐(0) 编辑
如何保证消息的顺序性
摘要:先看看顺序会错乱的场景:RabbitMQ: 一个queue,多个consumer,这就乱了 拆分多个queue,每个queue一个consumer,就是多一些queue而已,确实是麻烦点;或者就一个queue但是对应一个consumer,然后这个consumer内部用内存队列做排队,然后分发给底层不 阅读全文
posted @ 2021-08-30 16:36 公众号/架构师与哈苏 阅读(59) 评论(0) 推荐(0) 编辑
如何解决数据丢失问题
摘要:rabbitmq数据丢失,分为生产者丢数据,消息队列丢数据和消费者丢数据。 生产者数据丢失 在生产者发送到RabbitMQ时有可能因为网络问题导致投递失败,从而丢失数据。 方案1:rabiitmq事物 采用rabbitmq提供的事务功能 生产者发送数据之前开启rabbitmq事务(channel.t 阅读全文
posted @ 2021-08-30 15:36 公众号/架构师与哈苏 阅读(205) 评论(0) 推荐(0) 编辑
什么是Rabbitmq
摘要:什么是RabbitMQ? 采用AMQP高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需要确保提供存在,实现了服务之间的高度解耦。 使用RabbitMQ有什么好处? 解耦 可以通过队列,来实现消费者和生产者 异步 生产者放到队列中,消费者随时可以来消费 消峰 可以使用消息队列,生产者大量放 阅读全文
posted @ 2021-08-30 10:35 公众号/架构师与哈苏 阅读(66) 评论(0) 推荐(0) 编辑
你知道那些JVM性能调优
摘要:设定堆内存大小 -Xms :堆初始空间大小 -Xmx : 堆内存最大限制。 设置新生代大小。新生代不宜太小,否则会有大量对象涌入老年代 -XX:NewSize : 新生代大小 -XX:NewRatio : 新生代和老年代占比 -XX:SurivorRatio : 伊甸园空间和幸存者空间的占比 设定垃 阅读全文
posted @ 2021-08-24 16:56 公众号/架构师与哈苏 阅读(44) 评论(0) 推荐(0) 编辑
jvm调优命令
摘要:JDK监控和故障jps,jstat,jmap,jhat,jstack.jinfo jps ,JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。 jstat ,JVM statistics Monitoring是用于监视虚拟机运行时状态信息的命令,它可以显示 阅读全文
posted @ 2021-08-24 16:47 公众号/架构师与哈苏 阅读(34) 评论(0) 推荐(0) 编辑
minor gc和Major GC,Full GC的触发条件
摘要:Minor GC Minor GC指新生代GC,即发生在新生代(包括Eden区和Survivor区)的垃圾回收操作,当新生代无法为新生对象分配内存空间的时候,会触发Minor GC。因为新生代中大多数对象的生命周期都很短,所以发生Minor GC的频率很高,虽然它会触发stop-the-world, 阅读全文
posted @ 2021-08-24 11:58 公众号/架构师与哈苏 阅读(211) 评论(0) 推荐(0) 编辑
三个线程按循序一个打印A一个打印B一个打印C 循环打印?
摘要:第一种 public static volatile int flag = 1; public static void printABC1(){ Thread t1 = new Thread(() -> { while (true) { synchronized (obj1) { while (fl 阅读全文
posted @ 2021-08-23 17:35 公众号/架构师与哈苏 阅读(65) 评论(0) 推荐(0) 编辑
两个线程交叉打印一个打印A一个打印B 循环打印?
摘要:public static Object obj1 = new Object(); public static void printAB(){ Thread t1 = new Thread(() -> { while (true){ synchronized (obj1) { System.out. 阅读全文
posted @ 2021-08-23 17:33 公众号/架构师与哈苏 阅读(81) 评论(0) 推荐(0) 编辑
GC垃圾收集器
摘要:垃圾收集器是垃圾收集算法的具体实现,是执行垃圾收集算法的,是守护线程。 HotSport虚拟机采用分代收集(JVM规范并未对堆区进行划分),将堆分为年轻代和老年代,垃圾收集器也是这样组合使用的,不过已有一个G1通用(新生代和老年代)垃圾收集器 JDK中默认的垃圾收集器 jdk1.7 默认垃圾收集器P 阅读全文
posted @ 2021-08-23 16:16 公众号/架构师与哈苏 阅读(52) 评论(0) 推荐(0) 编辑
垃圾回收算法
摘要:jvm中堆是垃圾回收的主要战场,之前我们聊了对象如何判断要被回收的,现在来聊聊垃圾回收的算法。 标记清除算法( Mark-Sweep ) 最基础的垃圾回收算法,分为两个阶段,标注和清除。标记阶段标记出所有需要回收的对象,清除阶段回收被标记的对象所占用的空间。 复制算法(copying) 为了解决Ma 阅读全文
posted @ 2021-08-20 17:23 公众号/架构师与哈苏 阅读(62) 评论(0) 推荐(0) 编辑
对象是否要被回收(引用计数和可达性分析算法)
摘要:java堆和方法区主要存放各种类型的对象(方法区中也存储一些静态变量和全局常量等信息),那么我们在使用GC对其进行回收的时候首先要考虑的就是如何判断一个对象是否应该被回收。也就是要判断一个对象是否还有其他的引用或关联使得这个对象处于存活的状态。我们需要将不在存活状态的所有对象标记出,以便于GC进行回 阅读全文
posted @ 2021-08-20 16:09 公众号/架构师与哈苏 阅读(133) 评论(0) 推荐(0) 编辑
mysql隔离级别
摘要:mysql的隔离级别从高到低分别为: 串行化->可重复读->读已提交->读未提交 Serialzable(串行化):可避免脏读,不可重复读,幻读的发生。 Repeatable read(可重复度): 可避免脏读,不可重复读的发生。 read committed (读已提交): 可避免脏读的发生。 r 阅读全文
posted @ 2021-08-20 09:16 公众号/架构师与哈苏 阅读(39) 评论(0) 推荐(0) 编辑
mysql事务的4大特性
摘要:事务的四大特性(简称ACID) 1.原子性(Atomicity) 事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。 2.一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变道变到另一个一致性状态。一致性与原子性是密切相关的。 3.隔离性(Isolati 阅读全文
posted @ 2021-08-19 17:44 公众号/架构师与哈苏 阅读(224) 评论(0) 推荐(0) 编辑
mysql性能优化
摘要:分析从几个维度 设计维度(引擎,列类型) 索引,sql优化 配置,硬件 架构维度 MyISAM MyISAM引擎是MySQL 5.1及之前版本的默认引擎,它的特点是: 不支持行锁,读取时对需要读到的所有表加锁,写入时则对表加排它锁 不支持事务 不支持外键 不支持崩溃后的安全恢复 在表有读取查询的同时 阅读全文
posted @ 2021-08-19 16:56 公众号/架构师与哈苏 阅读(26) 评论(0) 推荐(0) 编辑
redis缓存穿透,缓存击穿,缓存雪崩
摘要:缓存穿透 缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请求就会绕过缓存直接查数据库,这也是经常提的缓存命中率问题。 解决办法: 1.接口层增加校验,如用户鉴权校验,i 阅读全文
posted @ 2021-08-19 16:33 公众号/架构师与哈苏 阅读(28) 评论(0) 推荐(0) 编辑
redis的持久化
摘要:Redis提供两种持久化机制RDB和AOF机制 RDB RDB(Redis DataBase)持久化方式: 是指数据集快照的方式半持久化模式记录redis数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。 优点: 1.只有一个文件 阅读全文
posted @ 2021-08-19 15:39 公众号/架构师与哈苏 阅读(40) 评论(0) 推荐(0) 编辑
redis的过期策略和淘汰策略
摘要:过期键删除策略 1.定时删除:在设置键的过期时间的同时,创建一个定时器timer,让定时器在键过期时间来临时,立即执行对键的删除操作。 2.惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回改建。 3.定期删除:每隔一段时间程 阅读全文
posted @ 2021-08-18 15:37 公众号/架构师与哈苏 阅读(91) 评论(0) 推荐(0) 编辑
redis如何实现分布式锁?
摘要:1.使用redis中的自增来实现 2.使用setnx + del # 如果不存在set(返回1),如果存在则失败(返回0) 为了避免死锁会加上一个过期时间 自增方式 boolean isSelf = false; try { Long clock = cacheOperation.incrByOne 阅读全文
posted @ 2021-08-18 11:21 公众号/架构师与哈苏 阅读(67) 评论(0) 推荐(0) 编辑
redis支持的数据类型有哪些?
摘要:string,list,hash,set,zset 底层实现数据结构 数据结构 String sds struct sdshdr{ //等于 SDS 保存字符串的长度 int len; //记录 buf 数组中未使用字节的数量 int free; //字节数组,用于保存字符串 char buf[]; 阅读全文
posted @ 2021-08-18 10:52 公众号/架构师与哈苏 阅读(111) 评论(0) 推荐(0) 编辑
redis为什么这么快?
摘要:1.纯内存操作 2.单线程操作,避免了频繁的上下文切换 3.采用了非阻塞I/O多路复用机制 (cpu不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存或者网络带宽。) 阅读全文
posted @ 2021-08-18 10:43 公众号/架构师与哈苏 阅读(25) 评论(0) 推荐(0) 编辑
redis和memecache有什么区别?
摘要:1.memcache所有值均是简单地字符串,redis有复杂的数据类型。 2.memcache不支持数据持久化,redis支持数据持久化。 3.redis速度比memcache快,redis构建了自己的vm机制,因为一般的系统调用系统函数,会浪费一定的时间去移动和请求。 阅读全文
posted @ 2021-08-18 10:29 公众号/架构师与哈苏 阅读(100) 评论(0) 推荐(0) 编辑
双亲委派机制
摘要:当一个类收到类加载请求,他首先不会尝试自己去加载这个类,而是把这个请求委派给父类去完成,每一层次加载器都是如此,因此所有的加载请求都应该传送到启动类加载其中,只有当父类加载器反馈自己无法完成这个请求的时候(在它加载路径下没有找到所需加载的Class),子类加载器才会尝试自己去加载。 采用双亲委派的一 阅读全文
posted @ 2021-08-16 17:03 公众号/架构师与哈苏 阅读(50) 评论(0) 推荐(0) 编辑
类的加载器
摘要:有哪些加载器? Bootstrap(引导类加载器):使用C/C++实现,负责加载JVM基础核心类库rt.jar。 Extension(拓展类加载器):从java.ext.dirs系统属性所指定的目录中加载类库,他的父类加载器为Bootstrap。 System(应用程序类加载器或者称为系统类加载器) 阅读全文
posted @ 2021-08-16 16:43 公众号/架构师与哈苏 阅读(30) 评论(0) 推荐(0) 编辑
类的加载过程
摘要:Class文件需要加载到jvm虚拟机中之后才能运行和使用。 jvm加载Class文件的步骤为:加载->连接(验证->准备->解析)->初始化->使用->卸载 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口 阅读全文
posted @ 2021-08-16 16:42 公众号/架构师与哈苏 阅读(39) 评论(0) 推荐(0) 编辑
CycliBarriar和CountdownLatch(计数器)
摘要:CyclicBarrier可以重复使用,而CountdownLatch不能重复使用。 countDownLatch这个类使一个线程等待其他线程各自执行完毕再执行。 是通过一个计数器来实现的,计数器的初始值是线程的数量。通过countDown()来减一,等减到0,await()方法就进入等待run状态 阅读全文
posted @ 2021-08-10 14:51 公众号/架构师与哈苏 阅读(164) 评论(0) 推荐(0) 编辑
ThreadPoolExecutor(线程池)的参数
摘要:构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory thread 阅读全文
posted @ 2021-08-10 11:03 公众号/架构师与哈苏 阅读(61) 评论(0) 推荐(0) 编辑
ReentrantReadWriteLock(读写锁)
摘要:为了提高性能,java提供了读写锁, 读锁: 在读的地方使用读锁,可以多个线程同时读。 写锁: 在写的地方使用写锁,只要有一个线程在写,其他线程就必须等待 例子: public static ReadWriteLock readWriteLock = new ReentrantReadWriteLo 阅读全文
posted @ 2021-08-09 17:05 公众号/架构师与哈苏 阅读(47) 评论(0) 推荐(0) 编辑
Semaphore(信号量)
摘要:Semaphore是什么 Semaphore通常我们叫它信号量,可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。 使用场景 通常用于哪些资源有明确访问数量限制的场景,常用于限流。 Sempahore常用方法说明 acquire() 获取一个令牌,在获取到令牌、或者被其 阅读全文
posted @ 2021-08-09 16:14 公众号/架构师与哈苏 阅读(176) 评论(0) 推荐(0) 编辑
ReentrantLock中的Condition(等待和唤醒)
摘要:Condition 类的 awiat 方法和 Object 类的 wait 方法等效 Condition 类的 signal 方法和 Object 类的 notify 方法等效 Condition 类的 signalAll 方法和 Object 类的 notifyAll 方法等效 Reentrant 阅读全文
posted @ 2021-08-09 15:21 公众号/架构师与哈苏 阅读(210) 评论(0) 推荐(0) 编辑
ReentrantLock可重入锁lock,tryLock的区别
摘要:void lock(); Acquires the lock. Acquires the lock if it is not held by another thread and returns immediately, setting the lock hold count to one. If 阅读全文
posted @ 2021-08-09 14:42 公众号/架构师与哈苏 阅读(127) 评论(0) 推荐(0) 编辑
守护线程
摘要:定义 守护线程-也称"服务线程",他是后台线程,它有一个特性,即为用户线程提供公共服务,在没有用户线程可服务时会自动离开。例如:垃圾回收线程,当JVM中所有线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则JVM不会退出。 特点 守护线程的优先级比较低,用于为系统中的其他对 阅读全文
posted @ 2021-08-06 15:33 公众号/架构师与哈苏 阅读(48) 评论(0) 推荐(0) 编辑
线程的5个状态
摘要:原理 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建(New、就 绪( Runnable 行( Running)、阻塞( Blocked)和死亡(Dead)5种状态。尤其是当线程启动以后,它不可能一直"霸占"着CPU独自运 行,所以C 阅读全文
posted @ 2021-08-06 14:41 公众号/架构师与哈苏 阅读(183) 评论(0) 推荐(0) 编辑
终止线程4中方式
摘要:1.正常运行 程序运行结束,线程自动结束 2.使用退出标志退出线程 一般run方法执行完,线程就会正常结束,然而有些线程需要他们长时间run,只有外部某些条件满足的情况下,才能关闭这些线程。我们就可以通过一个变量来控制。 package com.wzq.demoftl.thread; public 阅读全文
posted @ 2021-08-06 11:02 公众号/架构师与哈苏 阅读(105) 评论(0) 推荐(0) 编辑
线程池的好处
摘要:第一点:降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二点:提高响应速度。当任务达到时,任务可以不需要等到线程创建就能立即执行。 第三节:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控 阅读全文
posted @ 2021-08-06 09:54 公众号/架构师与哈苏 阅读(76) 评论(0) 推荐(0) 编辑
Volatile关键字
摘要:1.可见性 本质是在告诉jvm当前变量在寄存器(工作内存)中的值不确定,需要从主存中读取。 2.禁止重排序 对它执行的指令不可以乱序,防止了其他线程拿到一个半初始化的对象,使用内存屏障。 阅读全文
posted @ 2021-08-05 17:08 公众号/架构师与哈苏 阅读(24) 评论(0) 推荐(0) 编辑
Synchronized关键字
摘要:synchronized关键字 1.原子性 2.可见性 理解 java早期版本中,synchronized属于重量级锁,效率底下,java的线程是映射到操作系统的原生线程之上的。 唤起和挂起,都需要原生系统帮忙完成。 java6之后java官方从jvm层面对synchronized较大的优化,如:自 阅读全文
posted @ 2021-08-05 16:52 公众号/架构师与哈苏 阅读(22) 评论(0) 推荐(0) 编辑
Java线程池中submit()和execute()方法有什么区别
摘要:两个方法都可以向线程池提交任务,execute()方法的返回类型是void,它定义在Executor接口中,而submit()方法返回有计算结构的Future对象,它定义在ExecutorService接口中,它拓展了Executor接口,其他线程池类像ThreadPoolExecutor和Sche 阅读全文
posted @ 2021-08-05 16:21 公众号/架构师与哈苏 阅读(256) 评论(0) 推荐(0) 编辑
Thread类中yield方法
摘要:Yield方法可以暂停当前正在执行的线程对象,让其他有相同优先级的线程执行。它是一个静态方法而且只保证当前线程放弃CPU占用而不能保证其它线程一定能占用CPU,执行yield()的线程有可能在进入到暂停状态后马上又被执行。 Thread t1 = new Thread(() -> { System. 阅读全文
posted @ 2021-08-05 15:45 公众号/架构师与哈苏 阅读(110) 评论(0) 推荐(0) 编辑
SynchronizedMap和ConcurrentHashMap有什么区别
摘要:SynchronizedMap实现上在调用Map的所有方法是,对整个map进行了同步! public V put(K key, V value) { synchronized (mutex) {return m.put(key, value);} } ConcurrentHashMap的实现却更加精 阅读全文
posted @ 2021-08-05 11:47 公众号/架构师与哈苏 阅读(45) 评论(0) 推荐(0) 编辑
join控制线程的执行循序 T1 -> T2 -> T3
摘要:/** * 控制线程的执行循序 T1 -> T2 -> T3 * join实现 */ public static void join(){ Thread t1 = new Thread(() -> { System.out.println("hello my is T1!"); }); Thread 阅读全文
posted @ 2021-08-05 11:34 公众号/架构师与哈苏 阅读(20) 评论(0) 推荐(0) 编辑
Synchronized和ReentranLock的区别
摘要:1.底层实现上来说? Synchronized是JVM层面的锁,是Java关键字,通过monitor对象来完成。 ReentranLock是API层面的锁底层使用AQS。 2.是否可手动释放锁? synchronized不需要用户手动释放锁。 ReentranLock可以手动释放锁,一般通过lock 阅读全文
posted @ 2021-08-05 11:15 公众号/架构师与哈苏 阅读(245) 评论(0) 推荐(0) 编辑
wait notify的使用
摘要:1、wait()、notify/notifyAll() 方法是Object的本地final方法,无法被重写。 2、wait()使当前线程阻塞,前提是 必须先获得锁,一般配合synchronized 关键字使用,即,一般在synchronized 同步代码块里使用 wait()、notify/noti 阅读全文
posted @ 2021-08-04 17:04 公众号/架构师与哈苏 阅读(309) 评论(0) 推荐(0) 编辑
使用工具类创建一个线程池
摘要:private static void fixed(){ ExecutorService executorService = Executors.newFixedThreadPool(1); for (int i = 0; i < 100; i++) { executorService.execut 阅读全文
posted @ 2021-08-04 16:39 公众号/架构师与哈苏 阅读(35) 评论(0) 推荐(0) 编辑
定时执行的线程池
摘要:private static void scheduled(){ //创建一个定时执行的线程池 ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3); scheduledExec 阅读全文
posted @ 2021-08-04 15:58 公众号/架构师与哈苏 阅读(62) 评论(0) 推荐(0) 编辑
观察者模式使用
摘要:事件对象 package com.wzq.demoftl.observer; import org.springframework.context.ApplicationEvent; public class ObserverEvent extends ApplicationEvent { priv 阅读全文
posted @ 2021-08-04 15:26 公众号/架构师与哈苏 阅读(24) 评论(0) 推荐(0) 编辑
Future有返回值的线程
摘要://创建一个线程池 ExecutorService pool = Executors.newFixedThreadPool(100); //创建多个有返回值的任务 List<Future> list = new ArrayList<Future>(); for (int i = 0; i < 100 阅读全文
posted @ 2021-08-04 15:21 公众号/架构师与哈苏 阅读(62) 评论(0) 推荐(0) 编辑
Java序列化bean保存到本地文件中
摘要:File file = new File("D:\\softTemp\\student.out"); ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file)); Student 阅读全文
posted @ 2021-08-04 14:14 公众号/架构师与哈苏 阅读(114) 评论(0) 推荐(0) 编辑

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示