- 博客(93)
- 资源 (1)
- 收藏
- 关注
原创 Jenkins基于k8s的CI/CD教程
1. 背景介绍传统的主机方式部署的 Jenkins 集群在复杂场景中会经常碰到如下问题,如:主 Master 发生单点故障时,会导致整个流程不可用;Slave 的配置环境不一样,需要重复安装和配置维护麻烦,没办法定制差异化的配置管理;资源分配不均衡,有的 Slave 要运行的 job 出现排队等待,而有的 Slave 处于空闲状态;资源有浪费,每台 Slave 可能是实体机或者 VM,当 Slave 处于空闲状态时,也不会完全释放掉资源;基于k8s编排和Docker容器技术,可以很好的解决
2021-03-10 16:07:54 1414
原创 分布式锁演变思路(基于Redis)
简易版本最基本的要求就是保证唯一性。这里的唯一性是指线程A加锁后,线程B对同一把锁加锁不会产生新的锁数据。那么redis里面的过程就是:使用redis命令setnx(set if not exist),即只能被一个客户端占坑,如果redis实例存在唯一键,如果再想在该key上设置值,就会被拒绝。业务执行成功后,执行 del命令删除锁。增加过期时间上面这个版本存在的问题就是,释放锁需要客户端的操作,如果此时客户端突然挂了,就没有释放锁的操作了,其他客户端想要重新加锁就加不了了。所以利用redis的
2020-12-10 16:24:19 246
原创 JUC并发编程---异步处理神器Future
ExecutorService executorService = Executors.newSingleThreadExecutor();Future<String> future = executorService.submit(() -> { Thread.sleep(1000L); return "success";});new Thread(() -> { try { System.out.println(future.get(
2020-08-21 10:15:10 408
原创 Mysql执行计划Explain
列描述id1. id相同时,执行顺序由上至下2. 如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行3. id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行select_type(1) SIMPLE(简单SELECT,不使用UNION或子查询等)(2) PRIMARY(子查询中最外层查询,查询中若包含任何复杂的子...
2020-01-10 10:06:38 219
原创 JUC并发编程---简单聊聊LockSupport与Unsafe
LockSupport主要提供了一些park和unpark公有的静态方法,用来阻塞和唤醒线程。方法介绍park()阻塞当前线程,如果掉用unpark(Thread)方法或被中断,才能从park()返回park(Object blocker)阻塞当前线程,等待blocker释放parkNanos(long nanos)阻塞当前线程,nanos是超时时间p...
2019-10-30 13:58:31 329
原创 spring事务传播性源码解析
spring中事务传播性如何理解?spring 事务处理中,一个类中的A方法(无事务)调B方法(有事务),事务是否生效?
2019-10-08 14:29:46 756
原创 Mysql事务隔离级别
主要讲解了事务的特性、事务隔离级别、mysql为什么使用可重复读作为默认隔离级别、为什么一般工作中使用读已提交作为事务隔离级别。
2019-09-19 14:35:30 1653 1
原创 JUC并发编程---ReentrantLock源码分析
ReentrantLock重入锁是java中比较常用的锁,其中包含了公平/非公平的概念,通过本文可以了解其中的实现原理。
2019-09-09 17:07:03 3093
原创 一文搞定ThreadLocal、InheritableThreadLocal和ThreadLocalMap
ThreadLocal可以在指定的线程中存储数据,并只有在指定的线程中可以获取到存储的数据。平时我们有使用,现在就看看如何实现的。
2019-09-08 23:11:06 2955
原创 JUC并发编程---ThreadPoolExecutor线程池的状态、机制与原理源码解读
结合源码解读关键变量,线程池状态变更,任务提交及执行流程。
2019-09-06 12:50:15 3142
原创 图解HashMap源码
1. 基础变量这些变量可能会在源码阅读中反复出现capacity: 桶的数量 也就是table长度threshold:默认16 capacity*loadFactor 当size大于threshold的时候会进行resizeloadFactor:加载因子 默认 0.75 减少hash冲突modCount:数据修改次数 Iterator初始化的时候(HashIterator构造函数)e...
2019-09-04 10:19:59 2985 2
原创 Git对象
简介Git 中常见有四种类型的对象 blob、tree、 commit 、tag:blob:用来存储文件数据,通常是一个文件tree:一个tree上可以有多个 blob 或treecommit:指向一个”tree”,用来标记项目某状态。它包括信息数据,如时间戳、提交的作者、父提交(parent commits)等tag:标记某一个提交(commit)下图很好的说明他们的关系 Gi
2017-02-08 11:04:29 1012
原创 一天一个设计模式---访问者模式
平时在进行绩效考核的时候,CEO和CTO进行比较的东西是不同的。比如CEO只关心业绩,而CTO关心代码质量,项目成果。如果将考核写成一个方法进行维护,会有大量的逻辑判断,代码不美观且难以维护。
2016-12-05 10:20:48 1208 2
原创 一天一个设计模式---备忘录模式
在玩红白机的Pokemon–宠物小精灵,卡boss的时候我们常常会用,SL(存/读)大法,这里的存盘读盘就和备忘录模式很相似。
2016-11-30 15:20:06 915
原创 一天一个设计模式---中介者模式
我们去租房子时,每次价格变动的时候,房东通知下面的各个有意向的房客,而我们又需要对每个房东进行反馈。这样,一个房客和每个房东,以及一个房东和每个房客的关系都紧密相连。如果我们通过中介,中介会帮我们处理这些事情,就显得相对简单。
2016-11-22 22:09:45 1145
原创 一天一个设计模式---解释器模式
对于语法的解释,是十分复杂的,比如打造一款计算器,我们需要让程序知道加减乘除和数字的关系,这个时候就可以用到解释器模式
2016-11-16 11:09:09 1139
原创 一天一个设计模式---外观模式
如果让我们来制作一个苹果手机,我们需要实现拍照、视频聊天、通话的功能。通过外观模式,相当于对外提供了几个接口,拍照、视频聊天、通话的接口,而具体的内部处理,用户并不需要关心。
2016-10-25 10:00:22 1231
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人