自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 论坛 (1)
  • 收藏
  • 关注

原创 记录下java RSA非对称加密 解密工具类

/** * 飞飞 实现rsa 的非对称加密解密 工具类 * * @author xiaofeifei */@Slf4jpublic final class RSAUtils { /** * 加密解密算法 */ private static final String ALGORITHM = "RSA"; /** * 1024 bit 生成公钥 私钥 */ private static final Integer KEY_S

2020-10-13 15:18:42 27 1

原创 记录一下https中的混合加密机制

针对于混合加密机制的了解:共享密钥加密方式: 也就是我们常说的对称加密,加密和解密都是采用同一个密钥来完成,类似算法比如是AES,一般用于对于传输文本的加密,效率较高公开密钥加密方式: 公开密钥加密方式就是我们常说的非对称加密,持有一把私有密钥和多把公开密钥,公开密钥加密的密文只能私有密钥才能解密,相反,私有密钥加密的密文可以由发布的所有公开密钥进行解密,这种加密方式安全性高,但是执行效率低下,不适用于对长文本内容进行加密,一般用于对对称加密的密钥进行加密。混合加密机制:因为共享密钥加密

2020-09-11 16:11:08 33 1

原创 记录下centos7.3安装elasticsearch7.9.0注意事项

安装elasticsearch7.9.01. 从官网上下载elasticsearch7.9.0下载链接地址:elasticsearch7.9.0也可进入centos系统直接采用wget下载,命令如下(切记:下载的目录不可在root目录下,否则es后续无法启动,会提示找不到jdk的错误): wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.0-linux-x86_64.tar.gz2. 进入

2020-09-01 11:30:17 347

原创 记录下velocity模版引擎#foreach获取索引下标

获取方式使用${velocityCount} 来获取使用${foreach.index} 来获取(推荐)最近在网上看到很多文档说的获取索引下标通过${velocityCount} 来获取,但是这个在velocity.properties中配置的初始值是从1开始的,我们需要在初始化vm引擎后,对其初始值进行配置,配置如下: // 设置 $velocityCount 初始值为0 // 已过时,采用$foreach.index 来代表索引下标 $foreach.count 来代表长度

2020-08-24 17:27:01 204

原创 记录一下MessageDigest消息摘要的使用

MessageDigest 基本使用备注: 这里只演示encrypt algorithm为md5的算法展示MessageDigest主要方法简要说明:MessageDigest.getInstance(“MD5”) 创建一个消息摘要实例。MessageDigest.update(byte[] bytes) 更新当前摘要。MessageDigest.digest() 对摘要进行hash获取结果字节数组。MessageDigest 实例/** * 对字节数组转换为16进制字符串

2020-08-19 20:10:48 43

原创 记录一下线上数据cpu100%的问题

记录一下线上数据cpu100%的问题重现准备:创建表:ps: 其中name + telephone字段创建索引CREATE TABLE `t_test_index` ( `id` int(20) DEFAULT NULL COMMENT '资源主键', `name` varchar(255) DEFAULT NULL, `address` varchar(255) DEFAULT NULL, `age` int(12) DEFAULT NULL, `telephone`

2020-07-09 19:57:38 70

原创 记录一下对B+ TREE的简单理解

mysql索引笔记:常用的索引模型有hash表 有序数组和搜索树hash表就是数组 + 链表的散列接口 对指定的列进行hash查询到其在数组上的索引下标,然后value用于存储列名 + 主键id? hash表适用于只有等值查询的场景,不适合返回检索有序数组在等值查询和范围查询场景中的性能都很优秀如果仅仅看查询效率,有序数组就是最好的数据结构了。但是,在需要更新数据的时候就麻烦了,你往中间插入一个记录就必须得挪动后面所有的记录,成本太高。所以有序数组索引只适用于静态存储引擎,比如你要保存的是2

2020-07-09 11:39:30 59

原创 记录一下 csv 文件上传下载至 oss 工具类

import java.io.*;import java.nio.charset.StandardCharsets;import java.util.List;import com.alibaba.enterprise.cash.common.exception.SystemException;import com.opencsv.CSVWriter;import com.opencsv.bean.*;import lombok.extern.slf4j.Slf4j;/** * Csv

2020-06-29 19:20:39 131

原创 根据spring事务注解 + spring事件驱动来联合测试spring事务的传播机制

transaction-propagation-demo这里仅仅只是对隔离级别为mysql默认的隔离级别的测试,如果要联合隔离级别 + 传播机制测试,请自定义测试github地址

2020-03-23 17:25:24 58

原创 记录下mybatis-3源码中文注释

概述说明:针对mapper.xml进行了源码注释针对mapper接口中的注解进行了源码注释,注意,这里仅仅是针对mybatis,不要把spring-mybatis整合混淆进来针对语句执行的全流程进行了源码注释(暂时只针对query),其他的原理差不多,也就没加了mybatis大量使用了构造器模式和动态代理模式,还有责任链模式,委托模式,门面模式等。github地址...

2020-03-20 13:04:31 94

原创 记录下HashMap下的putVal()和resize()方法的底层源码中文注释

/** * Implements Map.put and related methods * * @param hash hash for key * @param key the key * @param value the value to put * @param onlyIfAbsent if true, don't chan...

2020-03-17 16:14:28 58

原创 记录一下springboot + jwt作为认证授权框架,顺便加了一下spring事件驱动作为业务逻辑解耦

采用springboot + jwt作为认证授权框架,spring事件驱动作为业务逻辑解耦jwt用户验证流程:用户使用账号和密码发出POST登录请求;服务器使用私钥创建一个JWT;服务器返回这个JWT给浏览器;浏览器将该JWT串放在请求头中向服务器发送请求;服务器验证该JWT;返回响应的资源给浏览器。服务启动说明:创建数据库jwt_user执行resources/db...

2020-03-16 21:42:37 77

原创 记录一下基于hashmap + 双向链表实现LRU 算法

package com.feifei.demo.arithmetic;import lombok.AccessLevel;import lombok.Getter;import lombok.Setter;import lombok.experimental.FieldDefaults;import java.util.Objects;import java.util.concu...

2020-03-15 16:26:20 83

原创 记录一下ReentrantLock + Condition的组合使用

/** * 可重入锁 + Condition组合测试 * <p> * 实现张三说1 ,李四说2 ,王五说3,赵六说4,然后轮询 * * @author xiaofeifei * @date 2020-03-12 * @since */@FieldDefaults(level = AccessLevel.PRIVATE)public class ReentrantL...

2020-03-12 20:24:02 40

原创 记录一下jvm的相关知识点

java 运行时数据区域:1.程序计数器 => (每个线程都包含一个程序计数器)用来记录字节码执行的行号,字节码指令的循环,跳转,异常处理,线程恢复等需要依靠计数器。2.Java虚拟机栈 => 主要用来描述Java方法执行的内存模型,(每个线程都包含一个虚拟机栈)主要用来处理方法的调用,虚拟机栈中的存储单元是栈帧,方法在执行的同时都会在虚拟机栈中创建一个栈帧,栈帧包含操作数栈,局部...

2020-03-11 10:59:50 79

原创 记录一下改写mybatis-plus租户插件,实现多个字段来确定一个租户,实现租户数据隔离

mybatis-plus-tenantgithub地址考虑到很多企业的租户隔离并非就是通过一个字段来做区分,存在最初设计的缺陷或者是业务场景导致多个字段来确定一个租户类型的情况,随着项目或者产品不断的更新迭代,多个字段来确定租户也便成为了某些企业的租户定义标准。mybatis-plus对多个字段来确定一个租户来实现租户数据隔离是不支持的,好在mybatis-plus提供了我们自定义拓展的方...

2020-03-03 13:31:50 805

原创 记录一下springboot + flyway的集成

flyway-demo主要用于记录flyway + springboot整合使用针对springboot的版本和flyway的版本建议如下:springboot2.0.x 推荐使用flyway5.2.4的版本(如果强制采用6.0版本及以上会出现文件无法找到的错误)springboot2.1.x ~ 最新版本 推荐使用flyway6.2.4的版本这是一个使用flyway的小d...

2020-02-28 10:28:40 290 10

原创 记录一下采用java来实现异步的事件驱动模型

1. node.js中基本上都是采用异步的事件驱动模型来实现的,如何采用Java代码实现一个异步的事件驱动模型呢?下面的例子的场景是模拟借阅者向图书管理员借书。/** * 图书借阅者 * <p> * 图书借阅者的行为便是借书,其中需要与图书管理员交互 * 所以需要持有管理员的引用 * * @author xiaofeifei * @date 2020-02-13...

2020-02-13 22:05:18 102

原创 记录一下IDEA2019.1中采用自己的gradle后,出现服务启动错误的问题解决方案

构建gradle项目的时候需要将gradle中的Delegate settings两个选项设置为IntelliJIDEA即可。

2020-02-12 22:36:12 380

原创 记录一下mac 安装Oh My Zsh后, 配置gradle环境变量,terminal不生效的解决方案

因为安装了zsh了,所以原先的terminal终端使用source ~/.bash_profile后只对当前终端界面生效;解决方案:1. 进入iterm2,输入命令:vim ~/.zshrcvim ~/.zshrc2.使用control + F快捷键跳转到最后一位,输入 source ~/.bash_profile3. 使用wq保存并退出4. 输入 source ~...

2020-02-12 22:02:28 356

原创 记录一下netty ByteBuf扩容机制

喜欢阅读源码的朋友,可先去下载下netty的源码,从github中下载的速度太慢了,这里提供gitlee的下载地址https://gitee.com/mirrors/netty?_from=gitee_search我阅读的是netty4.1版本的源码,下载完成后别忘记了git checkout 4.1一下,切换到4.1分支的源码哦。我们都知道ByteBuf类的继承结构图:的一个...

2020-02-07 13:46:49 234

原创 记录一下基于springboot + TDD + DDD + Rest开发的一个crud demo项目

本项目是基于GitHub作者BornToRain的脚手架开发的一个基于springboot + TDD + DDD + Rest的一个简单的crud项目。GitHub链接如下:https://github.com/chenm1xuexi/springboot-ddd-demo...

2020-02-06 15:21:03 1274

原创 记录一下mac 下的idea最近使用很方便开发的几个快捷键

双击shift => 输入present => 选择enter presentation mode(进入当前模式)=> idea的当前类就会进入全屏,方便开发如果要切换类进行开发,采用command + e来进行指定类的切换。示例如下:1. 双击shift, 输入present(代表当下,当前)2.选择Actions选项3. 回车,然后idea当前类...

2020-02-02 12:50:12 184

原创 记录一下 reactor单线程代码实现

这是单线程的目录结构:服务端Server类代码如下:/** * 单线程的反应器模式的弊端主要是在业务逻辑处理上 * 如果业务逻辑处理事件过长会造成长时间无法去执行select() * 方法获取已就绪的事件集,间接的意味着客户端被阻塞 * * @date 2020-01-26 * @since */public class Server implements Runn...

2020-01-26 14:26:41 87

原创 记录一下归并算法

/** * 归并排序 * 这是采用分治法的一种典型应用 * 也就是分治替换的原则,对一个序列进行分治,然后使其有序, * 使其有序的关键便是对分组后的序列再次分治,一直如此到最后进行比较替换(递归) * 然后归并成一个有序序列 * * 将2个序列进行比较交换的原理是采用双指针方法,在开始的时候,同时指向2个序列的头节点 * 然后预留出一个2个序列之和的新序列用来存放新的有序数据集...

2020-01-16 00:04:52 49

原创 记录一下leetcode 20 有效的括号,基于栈来实现

/** * leetcode 20 * 有效的括号 * * @date 2020-01-09 * @since */public class EffectiveSuffixTest { /** * 括号 ( [ { * 空字符串可被认为是有效字符串 * <p> * 这里用到了栈的概念,对整个字符串进行遍历,当遇到左括号则...

2020-01-10 21:20:42 70

原创 记录一下红包算法(按照自己的想法写的,随机性并不是很好)

package com.feifei.demo.arithmetic;import java.math.BigDecimal;import java.util.Random;/** * * 指定红包算法,红包金额,红包数,最大值,最小值 */public class Test { public static void main(String[] args) { ...

2020-01-07 17:52:36 90

原创 记录一下基于redis来实现博客订阅量排名

1. 创建一个与redis服务器的单连接工具类:/** * redis连接工具类 * 连接的实例采用延迟加载,只针对单连接 * * @date 2020-01-02 * @since */public class RedisConnection { private static class RedisInnerClass { private stati...

2020-01-02 23:52:48 59

原创 记录一下对于单例模式的重新认识

单例模式,毋庸置疑,(这里以java语言来描述)字面意思就是在一个java进程中,只会存在一个对象实例。单例模式主要分为4种,饿汉式,懒汉式,委托,枚举;1.饿汉式:/** * * 测试饿汉式 * 能够保证线程的安全性,但是没有延迟加载,实例化完成后, * 如果长时间不进行使用,会造成内存空间的浪费,因为单例模式的实例中如果包含很多的静态成员变量 * 占用内存比较大,则内存...

2020-01-01 14:58:03 52

原创 记录一下leetcode11.盛最多水的容器

第一种解决方法为暴力破解: /** * 计算出最大值,这里就是求一个面积的最大值 * @param height * @return */ public static int maxArea(int[] height) { if (height.length < 2) { return 0; ...

2019-12-27 16:12:58 29

原创 记录一下深入理解io,nio的实现原理,以及io到nio转化的原因

我们都知道io为是阻塞的,nio为非阻塞的,但是这么理解太过于片面,因为这个东西太过于泛化,没有意义。其实io的阻塞也分为类型,分为连接阻塞和通信阻塞,这么说也太过于抽象,我们先画图说明,然后以实际的代码来进行深入理解。通过上图,我们得知阻塞io的连接和通信过程,接下来我们通过代码来验证上图的过程:首先,我们创建一个服务端IOServerTest类:/** * 测试io阻...

2019-12-03 12:30:50 151 2

原创 记录一下mac使用code命令用vscode的形式打开指定文件

我们都知道使用open命令 + 指定文件(文件夹)便可打开文件,但是mac自带的文件应用不如vscode好用,如何直接使用一个命令采用vscode的方式来打开指定文件呢?步骤如下:1.打开vscode;2.输入command+shift+p;3.在弹出窗口中输入shell command,选择Shell Command: Install ‘code’ command in P...

2019-11-15 17:29:15 386

转载 记录一下基于docker实现mysql master-slave主从复制

https://www.cnblogs.com/songwenjie/p/9371422.html

2019-11-14 14:09:56 34

原创 记录leetCode6: 一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列

/** * Z 字形变换 * * @author xiaofeifei * @date 2019-11-06 * @since */public class Solution1 { /** * ps: * numRows = 3 ,s = abc d efg 3 - 2 = 1 * * a e =&gt...

2019-11-07 11:39:39 368

原创 记录一下后端系统架构搭建初期需要注意的事情

现在的系统架构的底层框架基本都是基于spring作为核心框架,其他的框架都可以完美接入该框架中,这里就不累述了, 主要记录下开发中遇到了一些初期因为未统一规范或者未做好技术选型发生的一些问题。1. 系统中的导入导出为excel,pdf是否在项目初期定义好处理规范,比如说excel导入导出采用阿里巴巴的fastexcel, pdf采用itext,然后是否做好对其进行进一步的封装,做好对当前项目的...

2019-10-16 14:11:50 93

转载 记录下io多路复用

原文链接:https://segmentfault.com/a/1190000003063859

2019-10-10 22:24:10 23

转载 记录下linux 用户态和内核态之间的切换

1、linux进程有4GB地址空间,如图所示:3G-4G大部分是共享的,是内核态的地址空间。这里存放整个内核的代码和所有的内核模块以及内核所维护的数据。2、特权级的概念:对于任何操作系统来说,创建一个进程是核心功能。创建进程要做很多工作,会消耗很多物理资源。比如分配物理内存,父子进程拷贝信息,拷贝设置页目录页表等等,这些工作得由特定的进程去做,所以就有了特权级别的概念。最关键的工作必须...

2019-09-29 14:02:27 65

原创 记录下自己日常开发中用到的时间工具类

这只是我在日常开发中自定义的时间工具类,其中的异常捕获读者们可以根据自己自定义的异常类来接收。/** * LocalDateTime 时间类型工具类 * * @author feifei */public class LocalDateTimeUtil { public static final String DATE_TIME_PATTERN = "yyyy-MM-dd...

2019-09-18 16:37:23 70

原创 记录一下采用java8的流式操作来实现对集合的分组后聚合

在日常的开发中,因为每次使用java8的流式操作给自己带来了极大的便利,但是一直局限于最基本的流式操作,当在开发中遇到了这样的一个场景:对一个集合中根据其中的属性对象中的属性来进行分组,然后统计分组后的某字段的数据总和,我发现我每次都需要使用多次流式操作才能完成,第一是先通过属性分组成一个map,然后在对map进行流式操作来获取数据总和。这样写的很不优雅,但是java8早就为我们考虑到了这一点,通...

2019-09-17 16:41:34 732 1

转载 记录一下TCP的粘包和拆包

TCP粘包、拆包与通信协议详解在TCP编程中,我们使用协议(protocol)来解决粘包和拆包问题。本文将详解TCP粘包和半包产生的原因,以及如何通过协议来解决粘包、拆包问题。让你知其然,知其所以然。1 TCP粘包、拆包图解由于TCP传输协议面向流的,没有消息保护边界。一方发送的多个报文可能会被合并成一个大的报文进行传输,这就是粘包;也可能发送的一个报文,可能会被拆分成多个小报文,这就...

2019-09-13 13:25:12 69

空空如也

记录下学习docker的基本常用命令

发表于 2019-05-19 最后回复 2019-05-19

空空如也

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

TA关注的人 TA的粉丝

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