自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

原创 CentOS 7常用命令

CentOS 7 常用命令在开发中常用的一些命令。1)目录切换2)对目录的操作3)对文件的操作4)文件的压缩、解压5)权限的操作6)防火墙及端口管理7)网络配置8) 系统信息查看9)一些其他的命令执行以下命令时需要注意自己对应系统的版本,不同的版本会稍有差别。1 目录切换cd / # 切换到根目录cd ~ # 切换到用户跟目...

2017-08-14 15:16:04 10393

原创 Map 家族

Map 实现类 线程安全否 自然排序 Key的底层结构 Key是否可为null 特性 HashMap 否 无序 数组+(链表或者红黑树) 是 hash(null) = 0; 因此,map.get(null) 是有值的 查询快,O(1) TreeMap 否 迭代时中序遍历,...

2020-05-03 17:58:45 297

原创 可变参数如果传入基本类型数组会怎么样?

可变参数如果传入基本类型数组,JVM会当整个数组当做一个参数来处理。如果传入的是封装类型的数组,那么数组中内容会被拆分成多个参数传入方法。代码如下: public static void main(String[] args) { Integer[] test = new Integer[] {1, 2, 5}; int[] test2 = new ...

2020-04-23 21:38:23 1238

原创 不同的进制表示转换十进制

进制 Java表示方式 例子 转10进制的方式 转10进制的结果 16进制 0x**** 0xABC C * 10^0 + B * 10^1 + A * 10^2 96768 8进制 0**** 017 7 * 8^0 + 1 * 8^1 15 2进制 0b**** 0x11 1 * 2^0 + ...

2020-04-22 15:35:10 470

原创 @Target 的ElemenType释义

Element 应用类型 释义 ElementType.TYPE 类 Can be applied to any element of a class ElementType.FIELD 成员变量 Can be applied to a field ElementType.PARAMETER 方法参数 Can be applied to...

2020-04-21 16:28:33 255

原创 Java获取UTC时间

工具:joda-timeMvn:<!-- https://mvnrepository.com/artifact/joda-time/joda-time --><dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactI...

2020-04-16 09:17:59 2735 2

转载 Java 8 中的 Streams API 详解

是什么 --> 为什么要用 --> 怎么用 --> 总结是什么 Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 L...

2020-04-09 17:15:14 157

转载 Lombok 看这篇就够了

前提自从进公司实习后,项目代码中能用 Lombok 的都用了,毕竟这么好的轮子要充分利用好。也可以减少一些 get/set/toString 方法的编写,虽说 IDEA 的插件可以自动生成 get/set/toString 方法,但是使用 Lombok 可以让代码更简洁。下面看看如何在 IDEA 中如何安装 Lombok:安装打开 IDEA 的 Settings 面板,并选择 Plu...

2020-02-26 10:15:12 135

原创 Collection 删除元素的高效写法

Collection 如果使用 foreach 来删除会抛ConcurrentModificationException 异常,检查并发修改。即在 foreach 迭代的过程中修改Collection 是不被允许的,因此采用以下方式删除。1 List @Test public void testList() { List<String...

2019-10-30 16:35:31 283

原创 多线程竞争执行,谁先跑完用谁?

做性能优化时,遇到一些跨不过的坎,如果能够绕过问题本身来解决该问题也是不错的选择。本人在做 MongoDB 联合查询时,遇到了性能瓶颈,使用 MongoDB 内部联合查询时 Mongo竟然不会使用索引,效率低下,不得采用数据库外部联合查询来解决。那么,问题来了,两种方式优势与劣势同样明显,若要同时运用两种查询方式的优势,避其短处,本人采用了竞争式查询。在不同的场景下,两者同时执行,谁...

2019-10-30 15:01:58 629

转载 Java 8中处理集合的优雅姿势——Stream

在Java中,集合和数组是我们经常会用到的数据结构,需要经常对他们做增、删、改、查、聚合、统计、过滤等操作。相比之下,关系型数据库中也同样有这些操作,但是在Java 8之前,集合和数组的处理并不是很便捷。 不过,这一问题在Java 8中得到了改善,Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。本文就来介绍下如何使用Stre...

2019-10-18 15:08:48 138

转载 Java 8 Stream的性能到底如何?

之前的文章中我们介绍了Java 8中Stream相关的API,我们提到Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。那么,Stream API的性能到底如何呢,代码整洁的背后是否意味着性能的损耗呢?本文我们对Stream API的性能一探究竟。为保证测试结果真实可信,我们将JVM运行在-server模式下,测试数据在GB量级,测试机器采用常见...

2019-10-18 14:30:00 1121

原创 MongoDB 使用 count 带来的分页问题与应对措施

count 在MongoDB 存在着不小的问题,对比关系型数据库,无固定结构的数据存储对count 函数存在着天然的缺陷,在大量数据情况下,count 函数计算非常慢,这对分页查询产生了不小的影响。 毫无疑问,count 的查询语句使用了索引比没有使用索引快上1000倍不止,因此,一定要用 explain 函数看看,count 的查询语句是否使用了索引。 ...

2019-10-15 16:33:26 2128

转载 什么是分布式系统,如何学习分布式系统

《什么是分布式系统,如何学习分布式系统》

2019-08-25 17:55:50 79

转载 Java多线程什么时候释放锁—wait()、notify()

什么时候释放锁:(1)当前线程切换为wait 状态时释放同步锁(2)当同步块执行结束时释放同步锁正确阻塞线程示例:(在同步块中,在循环中调用阻塞方法) public void execute() throws InterruptedException { synchronized (this) { while (isAwakened...

2019-08-25 17:00:36 414

原创 为什么不推荐使用Spring @Scheduled 中的 Cron 表达式

原因: Spring @Scheduled 使用非常方便,你只需要在指定执行定时任务的方法上添加 @Scheduled 注释即可,但是在最近用 @Scheduled 使用 Cron 表达式时,出现了大问题,问题如下: 首先,时钟往过去拨,@Scheduled 的 Cron 表达式不会按预期执行了。(原因见后续源码分析) 其次,Cron 不按预期执行了...

2019-08-16 16:47:38 1436 1

原创 Java 获取操作系统时区

Java 可以通过 Timezone 获取时区,但是通过 Timezone 获取的时区是 JVM 初始化时保存的时区,并不是操作系统所设置的时区。当修改过操作系统的时区后,JVM 并不会同步更新。Timezone 获取时区的代码如下:// 获取 JVM 启动时获取的时区TimeZone.getDefault();// 获取任意指定区域的时区String[] zoneID...

2019-08-16 14:33:32 20177

原创 单元测试—— 强大的 PowerMock

系列文章《单元测试—— Mock 对象行为之 Mockito》《单元测试—— Spring 环境下测试之 SpringJUnit4ClassRunner》《单元测试—— Spring @Scheduled》 Mockito 这个测试工具已在前面的文章写道,它能够 Mock 对象的行为,模拟测试对象的依赖,基本上能够满足大多数的单元测试。但是 Mockito 不可以实现对...

2019-07-30 15:32:25 366

原创 单元测试—— Spring 环境下测试之 SpringJUnit4ClassRunner

系列文章《单元测试—— Mock 对象行为之 Mockito》《单元测试—— 强大的 PowerMock》《单元测试—— Spring @Scheduled》前言 上篇文章《单元测试—— Mock 对象行为之 Mockito》介绍的实践部分是运行MockitoJUnitRunner 上的,Mockito 它可以模拟 Bean 的行为,但是它并没有真正的创建 Bea...

2019-07-25 17:50:32 3621

原创 单元测试—— Mock 对象行为之 Mockito

系列文章《单元测试—— Spring 环境下测试之 SpringJUnit4ClassRunner》《单元测试—— 强大的 PowerMock》《单元测试—— Spring @Scheduled》前言 本章要介绍的工具时 Spring 的单元测试工具之一,Mockito,Mock对象的行为。 满足单一职责原则的类,都有自己独立的功能与行为,而类与类之...

2019-07-24 15:19:02 1819

原创 AES 调用 Java 库加解密

简介 AES(Advanced Encryption Standard)高级加密算法,它具有算法稳固,快速,简单等特点,成为2006之后最流行的加密算法之一。以下是它的特点:(1)稳固:抵抗所有已知的攻击。(2)快速:在多个平台上速度快,编码紧凑。(3)简单:设计简单。算法要求(1)分组长度必须固定为 128 bit (即 16 bytes)(2)密钥长度...

2019-07-23 10:55:24 330

原创 Retry,Spring 重试策略

前言 失败了重来,重试策略在一定程度上提高了程序的健壮性。一些偶尔失败的程序,例如web服务的短暂网络故障,第三方设备故障,如果第一次运行失败,在接下来的重试能够保证程序运行成功,那么这段程序就应该引入重试策略,保证程序的健壮。 最简单的重试策略就是 while 循环,这里介绍 Spring 的重试策略其底层实现也是while循环,只是对其进行了封装,然后对外提...

2019-07-22 20:57:09 581

翻译 MongoDB 索引的行为与限制

MongoDB 索引的行为与限制要特别注意以下的索引行为限制: 一个 collection 的索引不能超过 64 个; 索引键值不能超过1024个字节;(<key, value>, value 的长度不能超过1024字节) 一个 Document 不能索引键值长度超过了最大长度的 fields 要查询键值太大而无法编制索引的文档,可以使用类似于以下内容...

2019-07-17 16:34:09 408

原创 MongoDB 备份与恢复

1 简述 MongoDB 的安装目录下提供了一系列数据库的操作与检测工具,备份与恢复程序也在其中。MongoDB 提供的备份与恢复程序是一种静态备份与恢复工具,可用于数据迁移。2 MongoDB 备份(1)备份全库 备份命令:mongodump --database <database name> --user <da...

2019-07-11 17:37:31 438

原创 Maven 打包可执行 jar

pom.xml 配置如下:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven....

2019-07-11 13:53:12 106

原创 单元测试—— Spring @Scheduled

系列文章《单元测试—— Mock 对象行为之 Mockito》《单元测试—— Spring 环境下测试之 SpringJUnit4ClassRunner》《单元测试—— 强大的 PowerMock》Maven依赖 <dependency> <groupId>junit</groupId> <artifac...

2019-07-04 16:52:06 4684

原创 短信猫发送GSM 和 CDMA PDU长短信

GSM和CDMA网络制式下发送PDU长短信实例短信内容:【这是一封长短信,支持中文。长短信在发送的过程中,需要被拆分成多条短短信发送,而每一条短短信的长度最多仅有67个中文字符。这些被拆分的短短信将会在目标终端上合并为一条短信展示。】电话号码:15521071000GSM PDU 字符串及AT指令:发送GSM短信初始化指令(若后面都发送GSM短信,只需设置一次):>A...

2019-07-02 17:34:01 1890

原创 卸载动态库DLL(Dynamic Link Library)

在给热部署系统热加载资源时,如果不掌握对象和资源的生命周期,系统运行时很容易产生一些意想不到的错误。从Jar 加载到系统中,到被替换,不同的资源生命周期是不一样的。 首先是对象,如果一个对象没有手动的丢弃,那么它的生命周期与加载它的 ClassLoader 生命周期一样。销毁对象时,只需要确保对象的引用为 null 即可,清理游离的对象的工作由GC处理。 ...

2019-06-19 19:08:25 2465

原创 String 工具之StrSubstitutor, 字符替换

字符替换,可以使用正则表达式对匹配的字符进行替换,这种方式比较灵活。而StrSubstitutor是一个工具类,它的目的也是字符替换,但是它封装了由正则表达式灵活性带来的复杂性,从而以更简单,通用的方式组织数据。 首先,明确它是apache工具包下的一个类;然后来学习学习它的简单调用。1 简单的调用。 Map valuesMap = new HashMap()...

2019-06-19 18:29:23 15425 2

原创 对异常处理的思考

简介 程序运行的分支中,正确结果只有一种,而异常情况却有很多种。在刚开始编程时,我几乎把所有的关注点都放在了那唯一的一条正确分支上,很少处理异常。然而,当那些不得不处理的异常处理代码添加到我的代码中时,突然发现,代码的逻辑变得混乱了。了解异常 异常的有两大类,Error和Exception。 Error 一般是 JVM 处理不了,可能导致JVM崩溃...

2019-05-31 21:51:19 198

原创 重构之Code Small 代码的坏味道

前言本篇文章的内容是学习完《重构 改善既有的代码设计》而整理的内容,其中有一些是我在运用这些重构手法的的理解。写代码如同写文章,好的文章总是能让人津津乐道,而坏的文章读起来味同嚼蜡。评论一篇文章的好坏,首先要看语言是否表达通畅,然后要看文章结构组织是否合理。软件编程亦如此。重构教你如何将代码书写得通顺,那么《设计模式》就是将代码合理组织起来的内经心...

2019-05-27 21:35:47 648

原创 Mongo崩溃crash, 报out of memory的问题分析与解决方案

1 问题描述 应用程序和MongoDB运行时,数据量在100M以内,系统运行3天左右后,MongoDB报OOM的错误并退出。 使用环境:windows 10 Mongodb 3.4.2 异常信息:2019-05-09T19:20:44.186+0800 I CONTROL [conn59] mongod.exe ...\src\m...

2019-05-27 20:48:48 8516

原创 切面AOP追踪大法--参数追踪法

前言切面AOP 是指,系统运行时,动态的将代码切入到指定的地方执行,常在日志,事务,访问控制,过滤器等地方使用。在面向对象编程(OOP)时,我们将不同功能分割在不同的对象中管理,尽可能的满足单一职责原则。这样做的好处时降低程序复杂性,提高代码复用性。但是,多个类存在相同的行为,例如,它们都需打印日志,事务,又例如,在删除数据之间都需要对删除操作做权...

2019-04-30 16:28:03 1388

原创 非关系型数据库MongoDB联合查询解决方案

前言 关系型数据库的使用有一套数学理论支撑,数据库表结构优化其实质就是优化范式。通常在关系型数据库中使用的第三范式。然而,在非关系型数据库中,使用第二范式更能够发挥非关系型数据库中的优势。 第二范式需要满足两点:一,属性不重复,二,所有的属性依赖于主属性。因此第二范式允许将一次查询的所有属性都存在同一张表中。 第三范式需要满足两点:一,满足第二范...

2019-04-28 23:46:33 2261

原创 License设计

What is License Management License是对软件使用的许可,可分为资源型和功能性许可。 资源型License 对软件使用数量,内存,容量,期限等使用资源的限制或许可。 功能型License 对软件的功能列表的限制或许可。Design Principles 设...

2018-11-06 21:22:32 1462 1

原创 Git 常用命令

前言Git有3个区,work,head,origin;工作流是将work的代码添加到head中,再由head中堆到origin中一、远程Git地址连接git remote -v 查看远程地址git remote add origin [address] eg:git remote add origin scutech -gitoite:xingjun/jdbc_learning...

2018-11-06 18:59:25 180

原创 Java 获取运行程序安装路径

System.getProperty("user.dir"); 

2018-11-06 18:54:36 3462

原创 RC4 调用Java库加解密

RC4特点:对称加密,安全度高,按字节加密。密钥长度:128可保证安全性1、加密 public byte[] encryptWithRC4(String content, String key) throws Exception { SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");...

2018-11-06 18:38:12 2851 2

原创 MySQL 5.7.19 CentOS 7 安装

MySQL 5.7.19 CentOS 7 安装Linux的版本有很多,因此下载mysql时,需要注意下载对应Linux版本的MySql数据库文件。以下方法也适合centOS 7 的mysql 5.7.* 版本的安装。安装方法我整理为16步。1:下载centOS7对应的MySQL版本(通用版的Generic) [root@localhost soft]# wget http...

2017-08-14 11:03:03 6758 5

SSM(Struts2+Spring+Mybatis)

SSM(Struts2+Spring+Mybatis)三大框架

2017-07-12

空空如也

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

TA关注的人

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