- 博客(43)
- 资源 (2)
- 收藏
- 关注
原创 registry-ui docker搭建私有仓库的一些问题笔记
关键点在于 - REGISTRY_URL=http://127.0.0.1:5000 此处不能写127.0.0.1 会导致跨域问题。要写成 - REGISTRY_URL=http://192.168.77.130:5000 用registry容器所在的地址。搭建私有仓库,用docker-registry 作为仓库,docker-registry-ui 作为界面。原来的docker-compose.yml如下。
2025-07-21 12:58:26
290
原创 CentOS 安装jenkins笔记
1. 安装 Java。目前一般jdk要求11以上,否则会报错2. 手动添加 Jenkins 仓库先创建一个专门的Jenkins文件夹:mkdir jenkins然后 执行然后,更新你的仓库配置文件。编辑或创建文件,内容如下:[Jenkins]gpgcheck=1enabled=13. 清理 YUM 缓存并安装再尝试安装Jenkins。
2025-07-14 18:08:36
608
原创 IM即时通讯系统设计——TIO 作为技术框架
在IM即时通讯的技术调研中,对比了业务几个开源,半开源的的技术框架。例如野火(收费的),jim(社区版免费,商业版收费)等等,最终选择tio作为核心组件。tio主要完成的工作。
2025-07-05 21:02:57
834
原创 Spring 中 Bean 生命周期
如果实现了 Aware 接口,比如 BeanNameAware、ApplicationContextAware,Spring 会回调对应方法;:通过扫描项目中设置好的各种注解,例如@service, @mapper,@autoware。:再执行初始化方法,可能是 @PostConstruct 注解、InitializingBean 接口或者指定的 init-method;:最后在容器关闭时执行销毁逻辑,包括 @PreDestroy、DisposableBean 接口或 destroy-method。
2025-06-20 13:13:49
248
原创 回表, 覆盖索引,索引下推简述
查询条件不能涉及函数或复杂表达式(否则不能下推);MySQL 5.6 及以上版本默认开启了 ICP。3. 查看是否使用了 ICP。,就说明用了索引下推。
2025-04-06 17:13:41
286
原创 SSO单点登录原理——基于CAS机制
是多次有效,会在cookie中保持较长时间。当用户访问任何新系统时,只需使用浏览器携带的 TGT自动完成登录。如果未设置正确的 Cookie 保护属性,攻击者可能通过固定会话或修改 Cookie 值,执行会话劫持。,即使 TGT 被窃取,仍需要额外验证。如果 TGT 未严格绑定到用户身份,攻击者可能利用用户已登录的状态,执行恶意操作。:禁止跨站使用 Cookie,有效防御 CSRF 攻击。:对同站子域名允许,但限制跨域使用,适用于多子系统场景。),攻击者可冒充合法用户,进行未授权访问。SMS(短信验证码)
2025-03-23 20:20:40
481
原创 建造者模式典型应用场景
如果用默认的构造函数。建造者模式(Builder Pattern)是一种创建型设计模式,主要用于处理复杂对象的构建过程,尤其是当对象的创建需要多个步骤、参数较多或者构建过程需要灵活控制时。它通过将对象的构建过程与表示分离,允许用户逐步构建对象,同时隐藏内部构建细节。假设你在开发一个披萨订购系统,披萨有多种类型(经典、意式、芝心),每种披萨可以选择不同的配料(如奶酪、香肠、橄榄)。在 Java 中,许多类(如 StringBuilder 或某些配置对象)在构建时需要设置多个属性,但对象一旦创建就不允许修改。
2025-03-06 05:57:45
539
原创 Kafka实现事务的机制
如上代码所示,只要在commitTransaction()执行成功之后,record1和record2 才被认为发送成功,即事务协调器把两条消息全部改成已提交状态,此时的消息才会被消费者看见。如果abortTransaction()执行,则两条消息都任务发送失败,消费端不回看到任何消息。Kafka保证事务的一致性,主要是分别保证生产者,消费者两端都要保证一致性。即生成端保证多个消息要不全部发送成功,要不就全部发送失败。,否则可能读取到未提交的事务数据。Kafka 事务主要由。
2025-03-03 05:57:31
460
原创 spring中解决循环依赖的方法
它保存的是那些已经实例化但是还没有完全初始化完成的 Bean(例如,还没有设置完所有依赖的 Bean)。就是指一个 Bean 在刚被实例化,没初始化之前,Spring 会将它放入二级缓存中,以便其他 Bean 在需要的时候能够提前依赖它。):这是存放已经完全创建好的单例 Bean 的缓存。的缓存,它实际上是一个工厂,用来生成 Bean 实例。放入这个缓存中,这个工厂在被调用时会返回一个正在创建的 Bean 的实例。注意,这里二级缓存中的早期引用,是解决循环依赖的关键。
2025-01-29 23:15:19
394
原创 火币矿池微服务架构
● 对外接口 hbp-open-api。给第三方提供对外接口,对可用性要求较高,独立出来采用多实例的集群部署。微服务所有请求的入口,负责路由分发,黑白名单url,以及部分简单的安全验证等。● 配置中心:hbp-config-cernter。● 结算服务 hbp-hpt。● 算力服务 hbp-pow。算力拉取,独立作为一个服务 ,独立维护高可用性,独立对外提供接基。● 管理后台服务 hbp-admin。● 登录中心 hbp-uc。● 注册中心 hbp-eureka。
2024-08-06 02:52:41
256
原创 jwt权限验证原理
通过对头部和载荷进行编码,然后用指定的算法和密钥生成的签名,用于验证数据的完整性和真实性,其中secret是密钥,不可泄漏,并且其生成也用到了头部信息和载荷信息。: 服务器在收到请求时,解码 JWT 头部和载荷,使用密钥验证签名是否正确。生成时,服务器将用户的身份信息(例如用户 ID 和角色)放入载荷中,并用密钥对其进行签名,生成完整的 JWT。1. JWT,全称是Json Web Token, 是一种JSON风格的轻量级的授权和身份认证规范,可实现。5.代码示例,工具类。JWT 的这三部分通过点(
2024-07-30 23:53:14
455
原创 IM即时通讯系统设计——获取消息历史记录
会根据groupId.先从redis中获取到messageId 的list。再进行遍历,根据messageId 获取具体的消息内容。
2024-05-16 18:54:05
814
原创 IM即时通讯系统设计(2)——对应更新消息已读未读状态
这样设计,主要是因为经常需要更新单条消息的某个属性。例如用户已读某条消息,则需要更新isRead属性。这样利用redis的hash结构,可以方便的直接更新某条消息的某个属性。key是CHAT_MESSAGE_CONTENT_CACHE+{messageId}首先所有的聊天消息都是用Hash结构存放在redis中。value是消息的具体内容。
2024-05-16 18:19:49
506
原创 mysql 保存记录时,id发生冲突的问题
PushMessageListener 监听一个topic。当前后两个消息同时到来时候,保存到数据,会发送id冲突的问题。
2023-10-21 19:27:55
159
原创 springboot工程,如果动态控制mybatis-plus的sql数据是否输出
项目背景,springboot工程,用mybatis-plus 做orm框架,nacos获取配置。 需求场景:IM项目,需要动态控制sql语句的输出,平时不用输出sql,以免影响性能。如果有异常或者需求需要排查,才输出sql好方便排查问题。
2023-09-07 18:51:51
278
原创 mysql中建立联合索引需要注意哪些问题
联合索引的作用如下:用于多字段查询,比如,建了一个 key(a,b,c) 的联合索引,那么实际等于建了 key(a)、key(a,b)、key(a,b,c) 等三个索引,(是为什么会这样,待考证) 我们知道,每多一个索引,就会多一些写操作和占用磁盘空间的开销,尤其是对大数据量的表来说,这可以减少一部分不必要的开销; 覆盖索引,比如,对于联合索引 key(a,b,c) 来说,如果使用 SQL:select a,b,c from table where a=1 and b = 1 ,就可以直接通过遍历索
2021-09-04 17:33:48
450
原创 MySQL 执行计划的浅析
首先是explain中所有列的信息,Extra只是其中比较重要的一列。EXPLAIN列的解释table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index、ALLtype显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > in...
2021-09-04 17:25:29
1256
1
原创 关于mysql索引的一些问题
1. 什么叫聚集索引与普通索引 聚集索引的叶子节点存储行记录,因此, InnoDB必须要有,且只有一个聚集索引 普通索引的叶子节点存储主键值。 假设有下表tabletable (id PK, name KEY, sex, flag);表中有四条记录:1, shenjian, m, A3, zhangsan, m, A5, lisi, m, A9, wangwu, f, B 则该表的聚集索引和普通索引的B+树的数据...
2021-09-04 15:56:13
114
原创 为什么 MySQL 官方建议使用自增主键作为表的主键?
因为自增主键是连续的,在插入过程中尽量减少页分裂,即使要进行页分裂,也只会分裂很少一部分;并且自增主键也能减少数据的移动,每次插入都是插入到最后,所以自增主键作为表的主键,对于表的操作来说性能是最高的。...
2021-09-03 13:02:17
548
原创 JVM内存排查(1)
首先了解一下垃圾收集工作原理JVM使用一种称为跟踪收集器的垃圾收集器,它通过stop-the-world来操作垃圾收集,标记所有根对象(由主线程直接引用的对象),并遵循它们的引用,标记它沿途看到的每个对象。如果发现某些对象没有任何引用,就标记为垃圾对象,对其进行收集(如下图)。Young Generation -年轻代。这里只会出发最小垃圾回收(Minor GC ),所以代价最小,时间最快。它有两个子代 Eden Space -对象从这里开始。大多数物体都是在Eden Spac...
2021-08-24 00:46:36
189
原创 Hystrix的资源隔离策略
Hystrix提供了两种依赖隔离方式:线程池隔离 和 信号量隔离。两种隔离方式都是限制对共享资源的并发访问量,线程在就绪状态、运行状态、阻塞状态、终止状态间转变时需要由操作系统调度,占用很大的性能消耗; 而信号量是在访问共享资源时,进行tryAcquire,tryAcquire成功才允许访问共享资源。线程池隔离。Hystrix可以为每一个依赖建立一个线程池,使之和其他依赖的使用资源隔离,同时限制他们的并发访问和阻塞扩张。每个依赖可以根据权重分配资源(这里主要是线程),每一部分的依赖出现了问题,也不会
2021-08-23 16:59:37
1146
原创 并发处理的CAS简述
CAS的全称是Compare And Swap 即比较交换,其算法核心思想如下执行函数:CAS(V,E,N) 其包含3个参数 V表示要更新的变量 E表示预期值 N表示新值 如果V值等于E值,则将V的值设为N。若V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么都不做。通俗的理解就是CAS操作需要我们提供一个期望值,当期望值与当前线程的变量值相同时,说明还没线程修改该值,当前线程可以进行修改,也就是执行CAS操作,但如果期望值与......
2021-08-22 21:32:02
144
原创 简述HashMap在并发的情况下,可能形成环链现象的原因:
非线程安全的HashMap在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。例如,以下代码就会引起死循环。 public static void main(String[] args) throws InterruptedException { final HashMap<String, String> map = new HashMap<String, Stri......
2021-08-22 21:05:06
468
原创 HahsMap原理
1. HashMap的数据结构图HashMap采⽤Entry数组来存储key-value对,每⼀个键值对组成了⼀个Entry实体,Entry类实际上是⼀个单向的链表结 构,在JDK1.8中,链表⻓度⼤于8的时候,链表会转成红⿊树。2.为什么使用链表+数组 数组的长度是限制死的,我们在对key值进行散列取到下标以后,放入到数组中时,难免出现两个key值不同,但是却放入到下标相同的格子中,此时我们就可以使用链表来对其进行链式的存放。3.Linked......
2021-08-20 18:30:44
181
原创 Redis的哨兵机制
什么是哨兵机制?Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务: 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。 提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。 自动故障迁移(Automatic failover):当一个Master不能正常...
2021-08-18 23:13:36
156
原创 jvm模型
存储栈帧:每次方法调用时创建,包含局部变量表、操作数栈、动态链接等。JDK8 后由元空间(Metaspace)取代,存在于。存储类信息、静态变量、常量池、JIT 编译后的代码等。为执行本地(native)方法服务,如 JNI 调用。指示当前线程执行的字节码行号(类似指令指针)。分为新生代(Young)、老年代(Old)。所有对象实例及数组的内存分配区域。是 GC 管理的主要区域。
2021-08-18 22:42:40
129
原创 查看mysql锁情况的命令详解
1.检查InnoDB_row_lock状态变量来分析系统上的行锁的争夺情况mysql> show status like 'InnoDB_row_lock%';+-------------------------------+-------+| Variable_name | Value |+-------------------------------+-------+| InnoDB_row_lock_current_waits | 0 ||
2021-08-18 22:24:03
2779
原创 InnoDB行锁实现方式
InnoDB行锁是通过给索引上的索引项加锁来实现的,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁在实际应用中,要特别注意InnoDB行锁的这一特性,不然的话,可能导致大量的锁冲突,从而影响并发性能。下面通过一些实际例子来加以说明。(1)在不通过索引条件查询的时候,InnoDB确实使用的是表锁,而不是行锁。(2)由于MySQL的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但是如果是使用相同的索引键,是会出现锁冲突的。(3)当...
2021-08-18 22:14:46
602
原创 JDK线程池各种参数
ThreadPoolExecutor的重要参数1.corePoolSize:核心线程数:核心线程会一直存活,及时没有任务需要执行。当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理。设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭。2.queueCapacity:任务队列容量(阻塞队列)当核心线程数达到最大时,新任务会放在队列中排队等待执行。3.maxPoolSize...
2021-08-18 18:04:08
240
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅