- 博客(55)
- 资源 (2)
- 收藏
- 关注
原创 JAVA设计模式-监听者模式
监听器模式是一种观察者模式的扩展,也被称为发布-订阅模式。在监听器模式中,存在两类角色:事件源(Event Source)和监听器(Listener)。事件源负责产生事件,而监听器负责监听事件的发生并采取相应的行动。当事件源触发事件时,所有注册了对应类型监听器的对象都会得到通知,然后执行相应的操作。
2024-07-05 17:08:34
556
原创 前后端分离Nginx
前端:https:// xxx.test.com/#/app/number/card-query/list。后端:https:// xxx.test.com/simcard/querySimcard。旧的部署方式是将前端代码打包进后端包的resource。前端的代码是作为后端的一部分,无法独立发布。3.尽量不改动或者少量改动现有代码。1.保持后端接口访问路由不变。1.导致后端访问接口路由改变。2.没有额外域名提供。
2024-07-05 16:50:26
318
原创 JAVA垃圾回收器
它将整个 Java 堆划分为多个大 小相等的独立区域(Region),触发垃圾回收,那些没有使用region仍然可以对外提供使用,就有效的避免了stop the world。串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。目 前很大一部分的 Java应用都集中在互联网站或 B/S 系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。:设置对象进入老年代的年龄的最大值。算法的缺点就是:在垃圾回收的时候,
2023-07-21 11:11:45
257
原创 bio、nio、aio、io多路复用
IO多路复用模型,就是通过一种新的系统调用,一个进程可以监视多个文件描述符(如socket),一旦某个描述符就绪(一般是内核缓冲区可读/可写),内核kernel能够通知程序进行相应的IO系统调用。目前支持IO多路复用的系统调用,有select,epoll等等。这种模式也是通过轮训的模式,但这是。,这种不断的轮询,将会不断地询问内核,这将占用大量的 CPU 时间,系统资源利用率较低。
2023-07-13 14:50:58
369
原创 Es存储和查询
副本策略对index中的每个分片创建冗余的副本,处理查询时可以把这些副本当做主分片来对待(primary shard),此外副本策略提供了高可用和数据安全的保障,当分片所在的机器宕机,Elasticsearch可以使用其副本进行恢复,从而避免数据丢失。,N个分片会被尽可能平均地(rebalance)分配在不同的节点上(例如你有2个节点,4个主分片(不考虑备份),那么每个节点会分到2个分片,后来你增加了2个节点,那么你这4个节点上都会有1个分片,这个过程叫relocation,ES感知后自动完成)
2023-07-13 14:27:05
1195
原创 Redis哈希槽
1.当集群扩展到1000个节点时,也能确保每个master节点有足够的插槽,实际情况很难达到1000节点。2.槽位过多会增加网络带宽消耗。
2023-05-25 18:19:54
1830
原创 MySQL主从复制原理
第四步:从节点 的 SQL线程检测到relay-log 中新增加了内容后,会将relay-log的内容解析成在主节点上实际执行过的操作,并在本数据库中执行;第一步:从节点上的I/O 进程连接主节点,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;第三步:从节点的I/O进程接收到内容后,将接收到的日志内容更新到本机的relay log(中继日志)中;第二步:当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容;
2023-05-25 17:35:22
162
原创 kafka的rebalance机制
再平衡:Reblance是一种协议,规定了一个ConsumerGroup下所有Consumer如何达成一致,来分配订阅Topic的每个分区,尽量让每个消费者分配到相对均匀的分区,使Consumer的资源都能得到充分利用,防止有些Consumer比较忙,有的Consumer比较闲。
2023-05-25 17:04:55
1521
原创 synchronized和lock
synchronizedsynchronized用的锁是存在java对象头里的JVM基于进入和退出Monitor对象来实现方法同步和代码块同步。1.代码块同步monitorenter指令是在编译后插入到同步代码块开始位置,而monitorexit是插入到方法结束后和异常处。在执行monitorenter指令时,首先要去尝试获取锁,如果这个锁对象没有被占用 ,或者当前线程已经用了那个锁对象,那就把锁的计数器加1;相应的,在执行monitorexit指令时会将锁计数器减1,当计数器被减到0时,锁就释
2022-05-25 20:39:19
128
原创 JAVA内存分区详解
1. 程序计数器首先它是线程私有的,它也称为代码的行号指示器,字节码解释器就是通过改变程序计数器的位置来确定下一行要执行的代码,它不存在OOM。2. Java 虚拟机栈线程私有。Java 虚拟机栈的生命周期与线程相同。3. 本地方法栈Java虚拟机栈为虚拟机执行Java方法服务,本地方法栈则为虚拟机使用到的本地方法服务。像JVM就有好多C语言写的方法,这个就需要本地方法栈来执行。4. Java 堆对大多数应用而言,Java堆是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享.
2022-05-25 20:21:03
1372
原创 TreeSet-原理
TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存储的时候出现异常(没有顺序)如果想把自定义类的对象存入TreeSet进行排序, 那么必须实现Comparable接口在类上implement Comparable重写compareTo()方法在方法内定义比较算法, 根据大小关系, 返回正数负数或零在使用TreeSet存储对象的时候, add()方法内部就会自动调用compareTo()方法进行比
2022-04-05 17:25:16
245
原创 HashMap详解-JDK8
①.判断键值对数组table[i]是否为空或为null,否则执行resize()进行扩容;②.根据键值key计算hash值得到插入的数组索引i,如果table[i]==null,直接新建节点添加,转向⑥,如果table[i]不为空,转向③;③.判断table[i]的首个元素是否和key一样,如果相同直接覆盖value,否则转向④,这里的相同指的是hashCode以及equals;④.判断table[i] 是否为treeNode,即table[i] 是否是红黑树,如果是红黑树,则直接在树中插入键值对,.
2022-04-05 16:10:02
219
原创 查询sql的执行流程-MYSQL
连接器管理现有数据库连接,做权限校验建立连接的过程是比较复杂的,建议是在使用中要尽量减少建立连接的动作(所以现场有很多连接池技术提供,阿里的、C3P0等等),也就是尽量使用长连接。但是全部使用长连接后,有些时候 MySQL 占用内存涨得特别快,因为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断开的时候才释放。所以如果长连接累积下来,可能导致内存占用太大,被系统强行杀掉(OOM),从现象看就是 MySQL 异常重启了。查询缓存为了提升数据库的性能,往往都会想到缓存.
2022-03-01 20:14:59
733
原创 JVM的类加载
什么是Java类加载java类加载器负责将编译好的 Java class 件加载到 Java 虚拟机(JVM)中的运行时数据区中,供执行引擎调用。类加载机制:双亲委派机制**启动类加载器:**java虚拟机启动后创建的第一个类加载器,由C++语言实现,所以我们在java代码中查看其信息时,看到的均为null。负责在JVM启动时加载jdk自身的一些核心class类(jar包形式)到JVM中,加载时寻找资源的路径由只读系统属性:”sun.boot.class.path“ 指定,一般为:”JAVA_HOM
2021-11-21 16:39:21
371
原创 Java线程池
线程池概述1.通过池化技术重复利用已创建的线程,避免频繁创建和销毁线程带来的损耗,降低资源消耗,提高响应速度。2.当服务器启动大量任务时,大量线程创建会消耗服务器的内存空间,影响服务器使用,线程池可以起到管理线程的目的。3.线程池具备可拓展性,允许开发人员向其中增加更多的功能线程池类型①newSingleThreadExecutor单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务②newFixedThreadExecutor(n)固定数量的线程池,没提交一个任务就是一
2021-11-18 18:34:16
2558
原创 JAVA内存泄漏和内存溢出
概念内存泄漏memory leak是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。内存溢出 out of memory指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。关系内存泄漏的堆积最终会导致内存溢出内存溢出的原因1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据
2021-11-18 11:12:15
308
原创 ThreadLocal详解
什么是ThreadLocalThreadLocal类顾名思义可以理解为线程本地变量。也就是说如果定义了一个ThreadLocal,每个线程往这个ThreadLocal中读写是线程隔离,互相之间不会影响的。它提供了一种将可变数据通过每个线程有自己的独立副本从而实现线程封闭的机制。常见应用场景1.DAO的数据库连接,动态数据源切换2.SimpleDataFormat解决线程不安全问题问题:SimpleDataFormat的parse()方法,内部有一个Calendar对象,调用SimpleDat
2021-11-17 18:02:20
508
原创 MySQL索引失效
失效原因口诀:**模型数空运最快**1.模模:模糊查询,以’%’开头2.型型:数据类型不对,索引也会3.数数:使用函数的列索引会失效4.空空:索引是有序的,NULL值进入索引时,无法确定其应该放在哪里。5.运运:进行运算的列索引会失效6.最最:符合索引遵循最左原则,如果违法则失效7.快快:如果无索引查询比索引查快,则索引失效...
2021-11-16 20:22:12
697
原创 Kafka快是有原因的
kafka 基本概念Topic 主题,声明一个主题,producer指定该主题发布消息,订阅该主题的consumer对该主题进行消费Partition 每个主题可以分为多个分区,每个分区对应磁盘上一个目录,分区可以分布在不同broker上,producer在发布消息时,可以通过指定partition key映射到对应分区,然后向该分区发布消息,在无partition key情况下,随机选取分区,一段时间内触发一次(比如10分钟),这样就保证了同一个producer向同一partition发布的消息
2021-11-16 17:53:13
1039
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人