- 博客(41)
- 资源 (1)
- 收藏
- 关注
原创 【待完善】Go语言
待完善GO语言的协程管理模型 MPG协程间通信模型 CSP协程 --- 线程---进程通道channelStruct、func、method、interface、闭包
2022-04-26 16:08:48
698
原创 沟通创造价值,分享带来快乐
这个周末,有幸拜听了乔新亮老师在极客时间上开的CTO复盘专栏课,收益匪浅。乔新亮,人称老乔,在我看来简直就是一个传奇人物,走过了18年的职业生涯,带来的不光是技术认知的提升,更重要的是一套技术思维框架和体系,甚至对世界、人生、软件哲学、人性方面的深度思考。里面有一句话,叫《契约精神是基础,洞察人性成就卓越》,给我印象深刻。的确,人无信则不立,生活中如此,软件设计中也是如此,你对客户的承诺,你对同事的承诺,你对产品的承诺,这些承诺应该贯穿在软件设计者的心中,在写下每一行代码,实现每一个小小的功能时
2022-03-20 22:58:48
342
原创 使用Jenkins pipeline模式来构建持续集成环境
书续前文,前面使用Jenkins-maven构建的方式,搭建了持续集成环境。Pipeline介绍:是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。Pipeline的实现方式是一套GroovyDSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了PipelineasCode的理念。将原本独立运行于多个Job或者...
2021-11-20 14:38:24
938
原创 Docker+Jenkins+Gitlab+Maven搭建持续集成环境
接前文,已经在windows电脑上安装了虚拟机,部署安装了Docker和Gitlab,为了模拟实现实际工作中使用Jenkins完成持续集成和持续部署,现在此基础上,试着搭建Docker+Jenkins+Gitlab+Maven的持续集成环境。大体步骤如下:开发人员通过IDE工具将代码推送到gitlab. jenkins从gitlab中获取到源码,并使用maven编译、打包、自动构建镜像. jenkins在构建脚本中调用docker命令将构建好的镜像push到本地Docker ...
2021-11-15 22:47:55
1884
2
原创 Docker下安装gitlab
1、拉取docker镜像 docker pull gitlab/gitlab-ce 需要用清华大学的镜像仓库:Index of /docker-ce/linux/centos/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 如果遇到下不下来,如403forbiden错误,可能需要切换到手机热点才可以2、docker运行gitlabdocker run --detach \--hostname gitl...
2021-11-14 10:28:03
792
原创 连接Docker容器测试安装完的redis和mysql
在docker容器内安装完redis和mysql后,可以用其客户端功能,简单的测试下连通性。测试redis: centos下:docker exec -it 22381843ba2c redis-cli 【22381843ba2c】:意思为启动的docker 容器id,可以通过docker ps获取到 windows下:docker exec -it myRedis redis-cli测试mysql: centos下:docker exec ...
2021-11-12 21:23:55
1395
原创 如何把本地windows打好的docker镜像发布到centos
经过之前的一番折腾,终于在windows上打包项目的镜像,并在windows环境里验证了该镜像的有效性,下一步,就可以正式的“上线部署”了。(虽然距离实际的项目还差很多,这里只是模拟)。1、首先,为了方便镜像传输,我们需要把本地镜像push到公有云镜像上 我这里使用的是腾讯云容器镜像服务(登录 - 腾讯云),申请账号环节略。根据上面的快捷指令引导,我们来传docker镜像。知道怎么做了,我们就开始执行镜像推送:推送完成以后,我们就可以去腾讯云...
2021-11-07 20:03:17
562
原创 如何把本地项目发布到github上
目录1、申请个github账号,创建资源库。2、在idea中配置github账号,登录确认。3、在idea中创建git remotes:4、windows下获取自己客户端电脑的SSH Key公钥5、在github的网站上到ssh密钥管理页面,添加新公钥6、至此,就可以在idea中添加和推送到git仓库了在技术学习的过程中,可能会同时写写示例代码,或者自己开发个小组件,为了日后分享,可以把项目保存到github上,以便持续迭代和持久保存。今天我们就开看下咋...
2021-11-07 18:39:24
666
原创 windows下打包java项目为Docker容器部署
目录第1步:编写java代码2、给项目打jar包出来3、准备Dockerfile文件4、把项目jar包和Dockerfile文件拷贝到同一个文件夹,编译镜像5、执行打包完的镜像,运行容器windows安装完了Docker,想试验一下如何把java项目打包为容器镜像。第1步:编写java代码项目非常简单,就一个hello-world,以spring-boot构建先在idea内运行OK2、给项目打jar包出来3、准备Dockerfile文件...
2021-11-07 18:15:54
1824
原创 阿里云Docker镜像加速器
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://ihaz6p1p.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台欢迎登录阿里云,全球领先的云计...
2021-11-06 12:43:11
137
原创 如何定义领域服务和应用服务的区别?
1、领域服务属于领域模型设计的范畴,解决的是业务复杂度的问题。 它与聚合的设计关系紧密,聚合侧重一个非常强事务的操作单元。 而领域服务用于处理某些不属于聚合内特定实体或值对象的逻辑, 把一系列操作步骤封装成一个统一的接口。2、应用服务更多的是提供与场景用例相关的接口, 它是在外围的基础设施层(封装了技术复杂度)与领域服务层之间的结合点。 应用服...
2019-08-22 09:03:01
4839
原创 关于LinkedBlockingQueue中notEmpty和notFull-Condition的一点困惑
/** * Inserts the specified element at the tail of this queue, waiting if * necessary for space to become available. */ public void put(E e) throws InterruptedException { i...
2019-07-11 09:22:58
2273
5
原创 网络分层
DHCP是基于UDP实现的HTTP是基于TCP实现的-------协议:网络实体之间为进行网络中的数据交换而建立的规则、标准或约定,如TCP、IP、HTTP、FTP、PPP。面向连接服务:1.可靠数据传输;2.流控制(防止接收buff溢出);3.拥塞控制(防止丢包)无连接服务:1.无连接;2.不可靠数据;3.无流控制;4.无拥塞控制TCP的应用:HTTP(web)...
2019-05-28 08:52:43
276
转载 【Guava】使用Guava的RateLimiter做限流
https://blog.csdn.net/aa1215018028/article/details/80866335
2019-05-27 09:44:42
121
原创 领域驱动设计学习资料汇总
1、书籍2、专栏https://blog.csdn.net/gitchat/article/details/81091470
2019-05-18 09:41:32
172
原创 如何使用mysql的SELETE LAST_INSERT_ID()获取刚刚插入的自增长的id?
互联网项目开发中,mysql的使用居多。而且,DBA也推荐使用数据库表自增长id作为主键,这种方式简单,性能好。但我们插入完实体后,往往需要知道刚插入的数据id,以便作为唯一标识生成或更新到实体中。通常的做法,可能是再发行另外一个SQL,大概是通过更新时间,或者一个刚刚辅助登录完的uuid反查,更或者是select max(id)(有并发问题),这几种方式都不是特别理想,增加了一定的代码复杂度...
2019-05-18 09:16:03
2023
原创 数据结构的底层实现小结
无界队列是基于链表实现的,叫做链式队列,一开始不需要指定内存大小有界队列是基于数组实现的,叫做顺序队列,定义数组时需要指定大小,需要操作系统分配一块独立的且连续的内存空间!《队列最大的特点就是先进先出,主要的两个操作是入队和出队。跟栈一样,它既可以用数组来实现,也可以用链表来实现。用数组实现的叫顺序队列,用链表实现的叫链式队列。特别是长得像一个环的循环队列。在数组实现队列的时候,...
2019-05-09 06:37:05
482
原创 把List按照某个批次量进行分割的方法
把List按照某个批次量进行分割的轮子:package org.apache.commons.collections4.ListUtils;List<String> list = new ArrayList<>();// 以500个为单位进行分割listList<List<String>> splitedList = ListU...
2019-05-06 09:10:15
1654
原创 关于线程池
实际是使用生产者-消费者模式。线程池的使用方式生产者,线程池本身是消费者。生产者决定了消费额度,消费者负责按一定机制(FIFO)消费。尽量使用ThreadPoolExecutor来创建线程池,参数如下:1. int corePoolSize2. int maximumPoolSize3. long keepAliveTime4. TimeUnit unit6. B...
2019-05-05 09:30:00
132
转载 Java8 读写锁的改进:StampedLock(高性能读写锁!)
https://blog.csdn.net/sunhaoning/article/details/68924625https://www.cnblogs.com/ten951/p/6590579.html StampedLock是Java8引入的一种新的所机制,简单的理解,可以认为它是读写锁的一个改进版本,读写锁虽然分离了读和写的功能,使得读与读之间可以完全并发,但是读和写之...
2019-04-29 09:03:38
609
1
原创 CountDownLatch 和CyclicBarrier的区别
区别点 CountDownLatch CyclicBarrier 概念 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。 N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。 强调点 重点在那《一个主线程》,他来协调其他N个线程执行完以后,主线程在做点其他的事 重点是那N个线程,他们之间任何一个没有完成,所有的线程都必须等待...
2019-04-26 20:23:32
1760
转载 关于JUC的Semaphore信号量的原理和示例
信号量的很好的源码解析:Semaphore信号量的原理和示例信号量,1、如果只有1个大小的话,有点类似生活中的红绿灯。当你执行前,看下只有绿灯的时候,才允许执行,否则等待。2、如果有N个大小的话,就类似银行的人工窗口,假设有20个人在等待3个窗口,则只有存在空闲窗口的时候, 才可以去一个人去办业务;而且只有有一个办完业务,释放了一个窗口后,则会唤醒等待队列里的一个人,去...
2019-04-25 19:34:03
151
转载 SpringBoot配置devtools实现热部署
https://www.cnblogs.com/lspz/p/6832358.htmlspring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。devtools的原理深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三...
2019-04-23 22:48:41
172
转载 java中ReentrantReadWriteLock读写锁的使用
读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;如果你的代码修改数据,只能有一个人在写,且不能同时读取,那就上写锁。总之,读的时候上读锁,写的时候上写锁!ReentrantReadWriteLock会使用两把锁来解决问题,一个读锁,一个写锁1、线程进入读锁的前提条件:...
2019-04-23 20:00:16
453
原创 关于synchronized锁和可重入锁
JAVA SDK并发报,最核心的便是对管程的实现。并发领域的两大问题,互斥和同步:互斥:同一时刻只允许一个线程访问共享资源,使用Lock解决。同步:线程之间如何通信,协作?使用Condition解决。这两个关键字与synchronized的区别?synchronized没办法解决《破坏不可抢占条件》,原因是synchronized申请资源如果申请不到,则线程直接进入阻塞状...
2019-04-23 09:31:08
889
原创 Java中的强引用、软引用、弱引用、幻象引用的区别
更详细的介绍可以参考帖子:https://blog.csdn.net/qq_26590199/article/details/71597698
2019-04-11 09:21:40
63
原创 并发编程的微观层面和宏观层面
关于Java内存模型的Happen-Before规则的一个示例:线程A,B同时并发执行,A先执行了writer()方法,把v的值改成了true,B线程执行reader()方法时看到了v的值为true,那么此时B线程看到的x的值是多少?class VolatileExample { int x = 0; volatile boolean v = false; ...
2019-04-08 08:58:29
420
原创 永远都要把wait()放到循环语句里面!
今天在网上看到一段代码,是模拟银行转账的,如何保证多次转账并发执行的时候,转出账户和转入账户的金额一致。代码可谓巧妙绝伦!先看代码:public class MyLock { public static void main(String[] args) { // 模拟转出和转入账户 Account src = new Account(100000)...
2019-04-07 07:51:57
1568
转载 ClassNotFoundException和NoClassDefFoundError的区别
http://www.cnblogs.com/duke2016/p/9153241.htmlClassNotFoundException NoClassDefFoundError 从java.lang.Exception继承,是一个Exception类型 从java.lang.Error继承,是一个Error类型 当动态加载Class的时候找不到类会抛出该异常 当编译...
2019-04-04 08:50:52
184
原创 Java是解析运行的吗?
Java是解析运行的吗?不正确!1. Java源代码经过JAVAC编译成.class字节码文件。2. .class文件经JVM解析或编译执行。1)解析:.class字节码文件经过JVM内嵌的解析器解释执行。(这种方式执行速度会相对比较慢,所以引入了下面2的缓存技术)2)编译:存在JIT编译器(Just In Time Compie 即时编译器)把经常运行的代码作为“热点代码”编...
2019-04-04 08:35:15
113
原创 1. 多线程学习笔记(01 | 可见性、原子性和有序性问题:并发编程Bug的源头)
CPU 增加了缓存,以均衡与内存的速度差异;操作系统增加了进程和线程,以分时复用CPU,进而均衡CPU和IO设备编译程序优化指令执行次序,使得缓存能够得到更加合理地利用。...
2019-03-30 07:29:24
91
原创 Mycat 单库按月分表
Mycat 单库按月分表项目中用到单库按月分表,今天研究了一下,可参考这个帖子做出来:https://blog.csdn.net/qq_25958497/article/details/78731148但,我一开始用的是1.6,但查询时后台控制台总是报个错,说是没有找到schem的table,后来改为1.6.5,不报错了,应该是1.6的一个bug。还有一个问题是,如果作为...
2018-10-26 07:43:44
6656
1
原创 技术书籍推荐
工作的时间久了,必定有些东西,如同大浪淘沙,留下来的才是最珍贵的,不容易被岁月风蚀的东西。今天就把这些年度过的一些印象深刻的经典图书分享出来。(持续更新) ...
2018-10-13 16:53:54
569
原创 Java多线程处理之Fork/Join框架
有一些业务场景,需要计算的数据量比较大,这时候如果单线程去处理,必定占用较多的执行时间,Java并发包中有没有给我们提供一种类似大数据处理中的MapReduce的处理方式呢?但凡成熟的语言,它的API设计必然符合常识,为解决特定环境下的问题而生。于是,上述问题的答案是,有。那就是Java的Fork/Join框架:ForkJoinTask! Fork:英文翻译为叉子,分叉,意思是可以...
2018-10-13 16:33:46
214
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人