自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(320)
  • 资源 (9)
  • 收藏
  • 关注

原创 【传送门】 Linux软件安装合集

编程语言Java:Linux搭建JavaWeb开发环境(Java、Tomcat、MySQL)Python:Linux上部署Python3.6服务器TomcatLinux搭建JavaWeb开发环境(Java、Tomcat、MySQL)Linux部署多台TomcatNode.js:Linux搭建hexo环境Nginx:Nginx初探(1)——搭建环境SolrSo...

2018-03-22 19:49:33 1061

原创 SpringBoot Metrics 监控系统(1)——技术介绍

一、前言本系列将为大家介绍如何对我们的 SpringBoot 应用程序进行监控和告警,使用的技术为 Prometheus + Grafana。二者均采用 Docker 进行安装部署,实际工作中自己在生产环境搭建的可能性不大,因此我们关注的重点放在如何使用就好了。二、PrometheusPrometheus 是 Soundcloud 开发的一款开源的监控工具,其本质是一个时间序列数据库(TSDB),采用 Go 语言开发。它具有以下特点:多维度:我们可以给指标数据添加多组标 Label,在展示时候

2020-12-09 23:32:05 3378

原创 如何优雅的统计代码耗时

一、前言代码耗时统计在日常开发中算是一个十分常见的需求,特别是在需要找出代码性能瓶颈时。可能也是受限于 Java 的语言特性,总觉得代码写起来不够优雅,大量的耗时统计代码,干扰了业务逻辑。特别是开发功能的时候,有个感受就是刚刚开发完代码很清爽优雅,结果加了一大堆辅助代码后,整个代码就变得臃肿了,自己看着都挺难受。因此总想着能不能把这块写的更优雅一点,今天本文就尝试探讨下“代码耗时统计”这一块。在开始正文前,先说下前提,“代码耗时统计”的并不是某个方法的耗时,而是任意代码段之间的耗时。这个代码段,可能是

2020-10-24 12:57:14 1516 2

原创 Java 浅拷贝性能比较

一、前言实际开发中,经常会遇到对象拷贝的需求,本文就结合日常开发过程中,使用到的浅拷贝技术,进行性能比较,看看谁更强。重要: 下面将会花大量篇幅,列出各种类型浅拷贝的代码,你可以直接拖到文章末尾,看性能对比结果。然后再根据你中意的对象回过头来看它的代码,避免疲劳。源码链接:https://github.com/jitwxs/blog-sample/tree/master/SpringBoot/shallow_copy首先创建一个用于拷贝的 Bean,如下所示:import lombok.Al

2020-09-20 20:37:46 811

原创 Lombok 子类如何使用 @Builder

一、前言业务开发中,子类父类还算是经常用到,Lombok 的 @builder 提供的链式调用帮助我们更轻松的创建对象。但是实验后却发现子类的 @Builder 是不会包含父类的属性。假设存在父类 A:@Data@Builderpublic class A { private String aName; private String aAge;}存在子类 B:@Builder@Data@EqualsAndHashCode(callSuper = true)publi

2020-09-06 10:49:04 2795

原创 Java Fail-Fast 与 Fail-Safe 特性

一、前言在 Java 的集合结构中,如果我们同时进行遍历(for-each, iterator)和集合修改(add, set, remove…)操作时,就有可能发生异常。例如,线程 T1 在对集合进行遍历,而此时线程 T2 对集合进行添加元素;亦或者线程 T1 在对集合进行遍历的过程中,进行删除元素操作。不同的集合在遇到上述这种情况时,会有不同的处理。按照处理的不同,划分为 Fail-Fast 和 Non-Fail-Fast(下文统称为 Fail-Safe)两类。前者不允许在迭代的过程中对集合进行增删操

2020-08-23 00:11:30 821

原创 Windows Terminal 上手把玩指南

Windows 平台的终端一直以来的确不好用,被 mac 和 linux 吊着锤。历经了 cmd、powershell、FluentTerminal,微软最新的 Windows Terminal 终于算是进入可用状态,今天就来把玩把玩。一、安装安装前提是 Win10 系统,打开 Windows Store 并搜索 Windows Terminal 点击安装就行。我挂着梯子的时候,进不去商店,所以各位自己把握就好。二、基本了解安装完毕后,正常打开即可。如果想要折腾折腾的话,那么主要就得了解下它的配

2020-07-26 21:28:58 1211 1

原创 上传 Jar 包至 Maven 中央仓库

一、前言随着时间积累,在平常写自己的代码过程中,会有类或者是模块,比较通用,许多项目都能用得到。我们就可以把这些部分抽取成一个公共包,方便其他项目去使用。本地 install 只能保存在本地中,因此将其上传到中央仓库中,平常就能够轻松的去使用了。上传 Jar 包的过程还算简单,本文将记录这一过程,系统环境为 Windiws。另外,请使用 windows 自带的 CMD 作为整篇文章的命令行工具。不要使用 Git Bash,会有坑。二、创建工单首先你得有个 sonatype 的账号,点击这里前往注

2020-06-21 09:26:07 1478 2

原创 MySQL 常用用户权限管理命令

一、用户1.1 创建用户-- 创建用户,并允许其在任何IP登陆create user 'username'@'%' identified by 'password';-- 创建用户,并允许其在任何主机登陆,不设置密码create user 'username'@'%';-- 创建用户,并仅允许使用jitwxs.cn域名的主机登陆create user 'username'@'jitwxs.cn' identified by 'password';-- 创建用户,并仅允许使用192.16

2020-06-06 13:09:23 796 1

原创 Java 代码性能优化之路

一、前言最近一直忙着参与公司的新项目开发,由于临期上线,正在对系统进行性能压测,在这个过程中,发现一些代码有性能优化的空间。因此决定写一篇文章,把本次以及今后,遇到的性能优化的 case 都记录下来,希望对大家们的编码水平能够有所帮助。源码链接:https://github.com/jitwxs/blog-sample/blob/master/Java/performance_optimized二、Java 基础2.1 字符串拼接在我们的系统中,存在着大量的缓存,这些缓存的 key 值根据请求

2020-05-23 21:07:41 691

原创 首次排查 OOM 实录

一、前言距离上篇文章更新已经一月有余,之所以一直没更新一是工作最近比较忙,二是感觉产出不了什么对自己和他人有价值的文章。因此这段时间,主要的空闲时间在学习技术和写 GitHub,博客这边就暂时落下了。本篇文章的落成更像是一篇笔记,而不是博客。因为在一年的工作后,首次碰上了 OOM 问题,虽然导致的原因比较简单,但也算是值得纪念的,哈哈。二、问题复现代码源码:https://github....

2020-05-02 20:47:50 622 2

原创 高性能 Disruptor——消除伪共享

一、CPU Cache存储设备往往是速度越快价格越昂贵,速度越快价格越低廉。在计算机中,CPU 的速度远高于主存的速度,而主存的速度又远高于磁盘的速度。为了解决不同存储部件的速度不对等问题,让高速设备充分发挥性能,引入了多级缓存机制。为了解决内存和 CPU 的速度不匹配问题,相继引入了 L1 Cache、L2 Cache、L3 Cache,数字越小,容量越小,速度越快,位置越接近 CPU。...

2020-04-19 11:10:08 2082

原创 Java 并发编程——线程池的异常处理机制

一、前言1.1 文章起因这篇文章的起因来源于一个 BUG,这个 BUG 和上篇文章《Java SynchronizedSet 线程不安全之坑》 有点关系。简单来说,就是在线程池中执行任务,任务本身未做异常处理,导致出现异常后任务停止。出错的原因来自对 Collections.synchronizedSet(new HashSet<>()) 的线程不安全访问,抛出了 Concurr...

2020-04-06 00:34:38 1280 1

原创 Java SynchronizedSet 线程不安全之坑

一、前言一般而言,想要构造出线程安全的 Set,我们会使用 Collections.synchronizedSet 方法,如下所示。Set<User> set = Collections.synchronizedSet(new HashSet<>());但这并不意味着,你可以安全的使用该集合的任何方法,如果没有仔细的了解过其实现的话,一不小心就会踩进坑中。最近我在...

2020-03-01 13:54:49 3398

原创 Parallel Stream 的错误实践

一、前言Java8 Stream 流的出现,极大的简化了业务需求中对集合数据的加工处理操作。虽然好用,但是一旦使用不当,也会带来意想不到的结果,本文记录使用 Parallel Stream 的错误实践。List<Object> sourceList = ...;List<Object> list = new ArrayList();sourceList.strea...

2020-02-22 13:06:36 1386

原创 详解 Spring 定时任务的调度方式

在 Spring 中,我们可以使用 @Scheduled 方便的进行定时任务的执行,其支持以下三种调度方式:Cron、FixedDelay、FixedRate。下面分别介绍在标准模式下和异步模式下这三种调度方式的不同。一、标准模式1.1 示例准备创建一个 SpringBoot 初始程序,依赖包只需要引入 spring-boot-starter-web 即可:<dependencies...

2020-02-14 23:52:08 1514

原创 gRPC 在 Java 中的入门实例

一、前言经过前面三篇 Protobuf 相关文章的学习,相信大家已经对 Protobuf 有所掌握。前文说过, ProtoBuf 很适合做数据存储或 RPC 数据交换格式。可以用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。本节将介绍在 Java 中如何使用 gRPC 和 Protouf。gRpc 也是 Google 推出的 RPC 框架,由于师出同门,Proto...

2020-01-26 17:34:13 1524 2

原创 Protobuf 学习手册——编码篇

一、编码规范Google 官方提供了 Protobuf 的编码规范,通过遵循这些规范,可以使 Protobuf 消息定义及其相应的类保持一致并易于阅读。Protobuf 编码规范可能随着时间推移而发生变化,对于既有项目,应当保持编码规范的一致性,而不需盲目保持最新的编码规范。但是对于全新项目,应当遵循官方的编码规范,可以点击这里查阅官方最新的编码规范。1.1 Override一行不超过 ...

2020-01-19 22:43:17 1583 1

原创 Protobuf 学习手册——语法篇

一、OverrideProtobuf1 是一种语言中立、平台无关、可扩展的序列化数据的格式,可用于通信协议,数据存储等。ProtoBuf 在序列化数据方面,它是灵活的、高效的。相比于 XML 来说,ProtoBuf 更加小巧、更加快速、更加简单。一旦定义了要处理的数据的数据结构之后,就可以利用 ProtoBuf 的代码生成工具生成相关的代码。甚至可以在无需重新部署程序的情况下更新数据结构。只需...

2020-01-19 22:41:03 3140

原创 Protobuf 在 Java 中的入门实例

Protobuf1 是一种语言中立、平台无关、可扩展的序列化数据的格式,可用于通信协议,数据存储等。本文将演示在 Java 语言中如何编写一个 Protobuf 的入级程序,也许你可能并不了解 Protobuf,这没有关系,基于 Protobuf 官方文档的衍生博文已经安排上了,只是限于内容较多,我正在一点点写作中,让我们先来简单实战吧!注: 本文及后续所有关于 Protobuf 相关文章均采...

2019-12-23 01:50:14 1220

原创 Google Jib 容器化构建工具

一、前言随着近些年的技术发展,Java 领域微服务已经成为主流的技术方向。随着微服务化,云原生的概念也逐渐火热起来,不了解云原生仿佛就是一个原始人。而在云原生中,应用容器化 是其核心属性之一。应用容器化,用抽象的话来说就是:将软件容器中的应用程序和进程作为独立的应用程序部署单元运行,并作为实现高级别资源隔离的机制。从总体上改进开发者的体验、促进代码和组件重用,而且要为云原生应用简化运维工作。通...

2019-12-19 00:07:14 1571

翻译 Disruptor:一种高性能的、在并发线程间数据交换领域用于替换有界限队列的方案

一、摘要LMAX 计划创建一个高性能的财务交易系统。作为我们工作的一部分,我们评估了多种方案去设计这个系统以求达到高性能目标,最后我们发现在传统的解决方案中遇到了基础上的瓶颈。许多应用程序通过队列来在不同的处理阶段之间交换数据。我们的性能测试显示,如果按照传统的方式来使用队列,延时代价的量级和磁盘 IO 操作的延时量级是同一个量级——非常慢。如果在端到端的操作中采用多个队列,又会增加了几百个毫...

2019-12-13 00:58:47 798 3

原创 解决 Git Revert 后再次 Merge 代码丢失问题

一、问题场景我司使用 GitLab 进行代码管理,当我对系统进行 SpringBoot 2.0 的版本升级,分支已经 Merge 到 Master 分支。实际部署中发现依赖的某个二方包的子依赖未做升级,导致某个服务无法掉通。由于二方包的修复需要时间,为了不影响后续其他功能的发布,因此决定对 Master 分支进行 Revert。等到第二天,当修复了那个二方包问题后,重新提了 Merge 申请,...

2019-11-30 23:45:25 7442 3

原创 Java 并发编程——CyclicBarrier

一、简介CyclicBarrier 是一个同步工具类,它允许一组线程在到达某个栅栏点(common barrier point)互相等待,发生阻塞,直到最后一个线程到达栅栏点,栅栏才会打开,处于阻塞状态的线程恢复继续执行.它非常适用于一组线程之间必需经常互相等待的情况。CyclicBarrier 字面理解是循环的栅栏,之所以称之为循环的是因为在等待线程释放后,该栅栏还可以复用。建议阅读 Cy...

2019-11-25 20:38:00 383

原创 HDU 2037 今年暑假不AC

Problem Description“今年暑假不AC?” “是的。” “那你干什么呢?” “看世界杯呀,笨蛋!” “@#$%^&*%…”确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。 作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的

2019-11-18 10:01:08 419

原创 Gitmoji 速查指南

在日常使用 Git 提交过程中,是否觉得提交记录太过单调了呢,如果你也有这种想法,那么就赶紧 Get 下 Gitmoji 吧。Emoji 在日常生活中是不是经常使用呢,Gitmoji 就是 Git 领域的 Emoji。下图就是使用效果。Gitmoji 的使用十分简单,只要在 Commit 记录的开头填上对于表情的代码即可,如下图所示。下面列出所有的 Gitmoji 表情代码,以及它们的用...

2019-11-14 23:16:55 8865

原创 理解蓝绿发布、灰度发布和滚动发布

目前绝大多数公司的业务系统都是集群化部署,那么在新版本上线时,保证平滑稳定,尽量减少对线上用户的影响,就显得尤为重要。毕竟谁也不想看到,版本一发布,系统就宕机吧。随着互联网技术的发展,目前业务发布已经基本形成蓝绿发布、灰度(金丝雀)发布、和滚动发布这三种发布策略。一、蓝绿发布蓝绿部署是一种以可预测的方式发布应用的技术,目的是减少发布过程中服务停止的时间。简单来说,我们把整个服务集群分成两组...

2019-11-04 00:37:36 7019

转载 深度解读央行数字货币 DCEP

继上篇谈了下自己对 DCEP 的看法后,再分享一篇 DCEP 的文章,希望能够帮助大家更加了解 DCEP。原文链接:https://mp.weixin.qq.com/s/Xrhza0mKF2idXriR0mNhmg自从区块链技术被国家队提名以来,刷屏之势有如泄洪。各大行业企业纷纷响应号召,喊着“推动区块链技术和产业创新”的口号开始撸起袖子加油干。而与区块链紧密相关的就是“数字货币”概念,在...

2019-11-03 22:36:47 5378

原创 浅谈央行数字货币 DCEP

一、前言距上篇文章更新已经有一月有余了,在这一个月时间内,一是公司事情比较多,一直在加班。二是也有点犯懒了,文章更新频率下降了。正逢最近区块链风头正热,造就了这篇文章的诞生。上周五(2019.10.25)晚新闻联播中,播报了主席对区块链技术的讲话。当晚,BTC 一转数周的颓势,从 7300$ 直接疯涨至 10500$。网上甚至有人说这是当代中本聪,哈哈。当然,比特币只是区块链技术一个非常小...

2019-10-29 01:09:13 5667

原创 ES6 箭头函数

ES6 中添加了函数新的定义语法——箭头函数,当有大于一个形参的时候,必须使用()代表部分参数,函数体大于一行时,必须使用{}将函数体括起来,并使用 return 返回。箭头函数不会创建自己的 this箭头函数会在自己的作用域链上的上一层寻找 this。所以箭头函数会在定义时找到自己外层的 this,并继承这个 this 的值。在后面的任何操作中,this 的值都不会改变。箭头函数的实现:...

2019-09-27 22:37:46 336

原创 JS 防抖技术和节流技术

在监听窗口进行 resize、scroll 等调用函数频率很高的操作时,如果每次都做相应的处理,则会加重浏览器的负担,导致渲染延迟,甚至是假死,这样会给用户带来非常糟糕的体验。为此我们必须在特定场景下限制调用频率,但是又不影响效果。一、防抖防抖技术:使得事件被触发 N 秒之后再执行回调,如果再 N 秒内再次触发,则重新倒计时。var btn = document.getElementById...

2019-09-27 22:35:48 742

原创 性能监控 TP 指标

一、TP 指标在对系统进行性能测试或性能监控时候,TP 指标是一种比较常见的性能参数,包括 TP50、TP99、TP999 等等。总次数∗指标数=对应指标在总次数中的序号总次数 \ast 指标数 = 对应指标在总次数中的序号总次数∗指标数=对应指标在总次数中的序号通俗点说,假设为了测试某接口性能,对其调用100次,将每次的响应时间升序排序,假设响应时间排序结果为:1、2、3…99、100...

2019-09-27 22:18:03 3631

原创 SpringBoot集成Spring Security(10)——角色继承

在本节中,补充下角色继承的知识点。角色继承其实是一个十分常见的需求,因为一般系统中角色权限呈金字塔型,高层用户拥有底层用户的权限。例如存在以下角色:普通用户、VIP 用户、SVIP 用户、星悦会员,那么对应的权限可以是“星悦会员 > SVIP 用户 > VIP 用户 > 普通用户”。那么如何在 Spring Security 中实现这样的功能呢?源码地址:https://g...

2019-09-27 22:15:18 4409 10

原创 理解 DRY、KISS、YAGNI 三原则

在软件的设计当中前人已经总结了许多的设计原则和设计模式。例如 SOLID,GRASP 设计原则,这些原则都是基于面向对象设计总结而来的。而 GOF23 是基于许多常见的场景总结出了一套设计模式,在我们遇到类似的场景,都可以套用设计模式。而今天所讲到的软件三原则是适用于在软件设计的各个层面的。它不仅适用于面向对象的设计,也适用于面向过程的程序设计;不仅适用于类的设计,也适用于模块、子系统的设计。就...

2019-09-27 22:11:03 4961

原创 Maven filter 实现 SpringBoot 多环境配置

一、前言当我们正式开始工作生涯后,最先发现商业项目和我们自己写的项目的不同之一就是:怎么这么多配置文件啊!!就按照最普遍的:开发、测试、预发(仿真)和线上来说,一个项目就至少有四套配置了,那么我们到底要如何配置多环境呢?二、Multiple Application目前使用比较多的是配置多个 application-{profile}.yml 文件的写法,一张图就能解释清楚了,如下图所示。...

2019-09-27 15:59:41 1273 1

原创 SpringBoot 条件注解

一、引言当我们使用 SpringBoot 进行开发时,会引入许多的 starter 包,引入后就会为我们做一些自动化配置,省去了大量配置的时间,快速开发。以 Redis 为例,当我们引入 Redis 的 starter 包时: <dependency> <groupId>org.springframework.boot</groupId> &l...

2019-09-24 20:54:42 2310

原创 Java 并发编程——CountdownLatch

一、前言今天来介绍下 concurrent 包下的一个工具类——CountDownLatch,这算是一个比较实用的工具类,在我们日常开发中使用的比较多,而且 API 也很简单,总结记录下。注:本文的源码浅析章节参考文章:《CountDownLatch详解》二、基本使用CountdownLatch 的主要功能是允许一个或多个线程等待直到在其他线程中一组操作执行完成,用人话说就是多个线程分...

2019-09-23 16:53:11 377

原创 Java 并发编程——ReentrantLock

一、简介ReentrantLock 是一个可重入且独占式的锁,相较于传统的 Synchronized,它增加了轮询、超时、中断等高级功能。其类图如下:[外链图片转存失败(img-3M1j3YcP-1569170523799)(/images/posts/20190806224334764.png)]ReentrantLock 是 java.util.concurrent(J.U.C)包中的锁...

2019-09-23 00:44:52 376

原创 详解 Cron 表达式

一、背景介绍Cron 表达式,最初是应用于· Unix 系统中的 crontab 命令,用于设置周期性被执行的指令。Cron 表达式应用广泛,在服务器中,可以利用 linux 的 cron 服务定时执行一些脚本;在 Java Web 中,利用 cron 可以实现任务的定时执行。本文将介绍 Cron 表达式的语法,理解 Cron 表达式的构成。二、Cron 语法Cron 表达式由6位或7位由...

2019-07-30 00:33:34 3226

原创 Apollo 配置中心介绍

一、前言最近我司进行基础架构升级,将配置中心从 Spring Cloud Config 迁移至 Apollo。趁此机会也学习下 Apollo,本文主要知识来自于我对官方 Wiki 的学习,如有错误,欢迎勘误。Apollo(阿波罗)来自于携程研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理...

2019-07-25 23:49:08 12489 2

MemoryAnalyzer-1.10.0.20200225-win32.win32.x86_64.zip

Ecplise 内存分析工具独立版,分析 dump 文件必备之选,

2020-04-18

Navicat15 Keygen.zip

Navicat是万能数据库客户端工具,具体的使用教程:https://www.jitwxs.cn/ecc43537.html

2020-02-14

Sublime Text 3176安装包+激活,亲测可用

Sublime Text 3176安装包+激活,亲测可用;Sublime Text 3176安装包+激活,亲测可用

2018-05-19

aspose word+excel+ppt for java 支持jdk1.8 附赠工具类(旧版资源)

aspose for java集合,内部包含word、excel、ppt转pdf三个jar包!,支持jdk-1.8!没有水印!附赠使用说明、工具类!,全网独家,买不了吃亏买不了上当,如有使用疑问请留言(旧版资源)

2018-03-22

亿图图示9.0破解补丁

亿图图示9.0破解补丁,亲测可用。因安装包过大,无法上传,如有需要请留言

2018-03-22

简历生成器 动态生成简历HTML版、PDF版

简历生成器 动态生成简历HTML版、PDF版 动态生成简历HTML版、PDF版

2018-03-22

dubbo-admin 2.5.6 完美支持JDK1.8

dubbo-admin 2.5.6 完美支持JDK1.8 亲测支持!!dubbo-admin 2.5.6 完美支持JDK1.8 亲测支持!!

2018-03-22

JDK 9中文文档(谷歌机翻 无广告 自编译)

JDK 9中文文档,采用谷歌机翻,对源码自行编译,去除广告,安安静静的做一个文档。

2018-03-16

IK-Analyzer-6.6.2

IK-Analyzer官方只支持到了Lucene5,自行编译支持到Lucene6.6.2。

2018-03-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除