plantuml guide

文本绘图利器plantuml 应用场景 做系统设计免不了需要画图,从设计流程上来说,用例分析 -> 组件交互 -> 领域对象分析,往往不是一蹴而就的,需要一个反复迭代的过程,在这个过程中,如何更好的追溯你的设计变更很重要,不管后续维护的是你自己还是其他人,都可以从这个设计变更里得到重要的信息。 一个需求 这里以一个假想的需求为例,演示一下上述所述的画图场景 以顾客到餐馆用餐为例,需要经历顾客来餐厅吃饭,点菜,服务员下单,厨师出菜,服务员上菜,顾客结账的过程,下面我们来看怎么画这些图。

file operation on server

服务器文件操作笔记 数据库备份 mysqldump -uroot -p -hlocalhost -P3306 db > /var/lib/mysql/db.sql 数据库恢复

influxdb notes

InfluxDB学习笔记 notice: 学习笔记针对的版本是1.7 时序数据库的特点: 持续写入数据量大,数据和时间相关。读取操作相对较少,且通常读取的是一段时间范围内的数据。 存储 LSMTree 组件 目录结构 |-- data | |-- NOAA_water_database | | |-- autogen | | |-- 3 | | | |-- 000000001-000000001.

how to create a awesome gitlab project

如何创建一个高质量高逼格的Gitlab工程项目 目录 高质量 高逼格 对自己好一点 参考 高质量 首先我们来定义一下什么是高质量,不同于美的定义(一千个读者可能有一千个哈姆雷特),对于高质量,我们可以达成一个共识。 有效的单元测试 相信对于单元测试的作用,大家都不会陌生,对于能提高效率的事情,何乐而不为呢? 对于Java项目来说,junit是公认的测试框架,熟练使用就可以了,另外,你一定会用到mockito这个工具,具体见文末的参考链接 有可观的测试覆盖率 光光有单元测试是不够的,只有达到一定阈值的覆盖率才是合格的,不必追求百分百的覆盖率,按照2/8原则,80%是一个可以追求的阈值 这里推荐下jacoco这个测试覆盖率工具,和Intellij IDEA也有很好的集成 集成sonar 通过sonar扫描代码库,来帮助我们找出容易忽略的问题,对于你认为sonar检出的不是一个问题,大可以忽略,不用太纠结 CI/CD 开发完成之后,还需要手动跑测试用例,手动发布到开发环境? 正确的姿势见下图 高逼格 然后我们来定义一下什么是高逼格

influxdb and grafana

InfluxDB & Grafana 趟坑过程记录 InfluxDB 子查询查最新版本号的分布情况 select count(*) from (select count(value) from table where app =~ /^abc/ group by "app", "version" order by time desc limit 1) group by "app", "version" order by time desc 在子查询里,已经按照时间拿最新的一条数据,但是在外面再套一层之后,老的数据又出来了,这个问题暂时没解,而是通过新的数据过来之后,删掉老的数据规避掉。

reading java dns cache manipulator

java-dns-cache-manipulator源码阅读笔记 阅读开源代码java-dns-cache-manipulator的一些收益 脑图 以下源码来自InetAddressCacheUtil 典型的双检锁实现/反射的应用 static volatile Object[] ADDRESS_CACHE_AND_NEGATIVE_CACHE = null; /** * @return {@link InetAddress#addressCache} and {@link InetAddress#negativeCache} */ static Object[] getAddressCacheFieldsOfInetAddress0() throws NoSuchFieldException, IllegalAccessException { if (ADDRESS_CACHE_AND_NEGATIVE_CACHE == null) { synchronized (InetAddressCacheUtil.

using jmap in docker

Docker里如何使用jmap 缘由 排查cpu 100%问题的时候,发现一个有趣的现象,使用openjdk:8-jdk-alpine作为基础镜像的应用,无法使用jmap, jstack等jdk的工具,但是使用openjdk:8-jdk作为基础镜像,却可以使用,即使应用的PID为1。 测试 使用alpine镜像 FROM openjdk:8-jdk-alpine COPY .

clean coder

代码整洁之道-程序员的职业素养书摘 专业主义意味着担当责任 要对自己的不完美负责 如果你希望自己的软件灵活可变,那就应该时常修改它! 职业发展是你自己的事。雇主没有义务确保你在职场能够立于不败之地,也没义务培训你,送你参加各种会议或给你买各种书籍充电。这些都是你自己的事。将自己的职业发展寄希望于雇主的软件开发人员将会很惨。 如果你无法兑现承诺,那么最重要的就是尽早向你的承诺对象发出预警,越快越好,越早越好。 衡量你是否是一名专业人士的一个重要方面,便是看你是否能将调试时间尽量降到最低。 不要经受不住诱惑盲目冲刺。 为了合理使用与会者的时间,会议应当有清晰的议程,确定每个议题所花的时间,以及明确的目标。 如果收到会议邀请,无比弄清楚指定的议题是什么,每个议题花多长时间,要取得什么成果。如果得不到确切的答案,你可以礼貌拒绝。

spring cloud practice

Spring Cloud整体实践 笔者在最近的工作中用到了Spring Cloud微服务整体解决方案,没有使用SC 的全部组件,只用到了网关(Zuul),注册中心(Eureka)和配置中心(Config server),现将方案简要说明如下 整体简化版部署图如下 首先api访问会经过load balance,再由负载均衡层将请求转发到网关,在网关层,配置了路由规则,会将api请求转发到对应的服务 网关层 使用的zuul的版本还是1.

hubot with rocketchat

hubot with rocketchat 缘起 无意间看到这篇文章,里面提到文章的作者使用了slack和hubot自动化了一些事情,恰巧我在公司的gitlab里,发现了一位同事使用了Rocket.Chat(可以认为是slack的开源版),好奇心驱使下,就倒腾了些这些玩意 -> hubot & rocket.chat,just for fun.