![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
chenm1xuexi
虚心求教,砥砺前行
展开
-
记录一下leetcode:1178猜字谜
package com.feifei.demo.algorithm;import org.apache.commons.lang3.StringUtils;import java.util.*;import java.util.stream.Collectors;import java.util.stream.IntStream;import java.util.stream.Stream;/** * leetcode: 1178.猜字谜 * <p> * 外国友人仿照中原创 2021-02-27 01:18:16 · 556 阅读 · 1 评论 -
记录一下java中的 & | ^ ~ << >> >>>的基本使用
/** * 符号转换操作 主要针对 * & 逻辑与 * | 逻辑或 * ^ 逻辑异或 * ~ 取反 * << 有符号左移 * >> 有符号右移 * >>> 无符号右移 * * @Author: xiaofeifei * @Date: 2021/1/22 10:32 */public class SymbolTransferDemo { public static void main(String[] args) { .原创 2021-01-22 12:57:19 · 638 阅读 · 0 评论 -
记录下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 · 684 阅读 · 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 · 1077 阅读 · 0 评论 -
记录下velocity模版引擎#foreach获取索引下标
获取方式使用${velocityCount} 来获取使用${foreach.index} 来获取(推荐)最近在网上看到很多文档说的获取索引下标通过${velocityCount} 来获取,但是这个在velocity.properties中配置的初始值是从1开始的,我们需要在初始化vm引擎后,对其初始值进行配置,配置如下: // 设置 $velocityCount 初始值为0 // 已过时,采用$foreach.index 来代表索引下标 $foreach.count 来代表长度原创 2020-08-24 17:27:01 · 4559 阅读 · 0 评论 -
记录一下MessageDigest消息摘要的使用
MessageDigest 基本使用备注: 这里只演示encrypt algorithm为md5的算法展示MessageDigest主要方法简要说明:MessageDigest.getInstance(“MD5”) 创建一个消息摘要实例。MessageDigest.update(byte[] bytes) 更新当前摘要。MessageDigest.digest() 对摘要进行hash获取结果字节数组。MessageDigest 实例/** * 对字节数组转换为16进制字符串原创 2020-08-19 20:10:48 · 407 阅读 · 0 评论 -
记录一下线上数据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 · 202 阅读 · 0 评论 -
记录一下 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 · 1183 阅读 · 0 评论 -
根据spring事务注解 + spring事件驱动来联合测试spring事务的传播机制
transaction-propagation-demo这里仅仅只是对隔离级别为mysql默认的隔离级别的测试,如果要联合隔离级别 + 传播机制测试,请自定义测试github地址原创 2020-03-23 17:25:24 · 194 阅读 · 0 评论 -
记录下mybatis-3源码中文注释
概述说明:针对mapper.xml进行了源码注释针对mapper接口中的注解进行了源码注释,注意,这里仅仅是针对mybatis,不要把spring-mybatis整合混淆进来针对语句执行的全流程进行了源码注释(暂时只针对query),其他的原理差不多,也就没加了mybatis大量使用了构造器模式和动态代理模式,还有责任链模式,委托模式,门面模式等。github地址...原创 2020-03-20 13:04:31 · 246 阅读 · 0 评论 -
记录下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 · 169 阅读 · 0 评论 -
记录一下springboot + jwt作为认证授权框架,顺便加了一下spring事件驱动作为业务逻辑解耦
采用springboot + jwt作为认证授权框架,spring事件驱动作为业务逻辑解耦jwt用户验证流程:用户使用账号和密码发出POST登录请求;服务器使用私钥创建一个JWT;服务器返回这个JWT给浏览器;浏览器将该JWT串放在请求头中向服务器发送请求;服务器验证该JWT;返回响应的资源给浏览器。服务启动说明:创建数据库jwt_user执行resources/db...原创 2020-03-16 21:42:37 · 218 阅读 · 0 评论 -
记录一下基于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 · 491 阅读 · 0 评论 -
记录一下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 · 193 阅读 · 0 评论 -
记录一下改写mybatis-plus租户插件,实现多个字段来确定一个租户,实现租户数据隔离
mybatis-plus-tenantgithub地址考虑到很多企业的租户隔离并非就是通过一个字段来做区分,存在最初设计的缺陷或者是业务场景导致多个字段来确定一个租户类型的情况,随着项目或者产品不断的更新迭代,多个字段来确定租户也便成为了某些企业的租户定义标准。mybatis-plus对多个字段来确定一个租户来实现租户数据隔离是不支持的,好在mybatis-plus提供了我们自定义拓展的方...原创 2020-03-03 13:31:50 · 2544 阅读 · 1 评论 -
记录一下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 · 820 阅读 · 10 评论 -
记录一下采用java来实现异步的事件驱动模型
1. node.js中基本上都是采用异步的事件驱动模型来实现的,如何采用Java代码实现一个异步的事件驱动模型呢?下面的例子的场景是模拟借阅者向图书管理员借书。/** * 图书借阅者 * <p> * 图书借阅者的行为便是借书,其中需要与图书管理员交互 * 所以需要持有管理员的引用 * * @author xiaofeifei * @date 2020-02-13...原创 2020-02-13 22:05:18 · 698 阅读 · 0 评论 -
记录一下IDEA2019.1中采用自己的gradle后,出现服务启动错误的问题解决方案
构建gradle项目的时候需要将gradle中的Delegate settings两个选项设置为IntelliJIDEA即可。原创 2020-02-12 22:36:12 · 713 阅读 · 0 评论 -
记录一下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 · 1261 阅读 · 0 评论 -
记录一下基于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 · 4157 阅读 · 0 评论 -
记录一下 reactor单线程代码实现
这是单线程的目录结构:服务端Server类代码如下:/** * 单线程的反应器模式的弊端主要是在业务逻辑处理上 * 如果业务逻辑处理事件过长会造成长时间无法去执行select() * 方法获取已就绪的事件集,间接的意味着客户端被阻塞 * * @date 2020-01-26 * @since */public class Server implements Runn...原创 2020-01-26 14:26:41 · 282 阅读 · 0 评论 -
记录一下对于单例模式的重新认识
单例模式,毋庸置疑,(这里以java语言来描述)字面意思就是在一个java进程中,只会存在一个对象实例。单例模式主要分为4种,饿汉式,懒汉式,委托,枚举;1.饿汉式:/** * * 测试饿汉式 * 能够保证线程的安全性,但是没有延迟加载,实例化完成后, * 如果长时间不进行使用,会造成内存空间的浪费,因为单例模式的实例中如果包含很多的静态成员变量 * 占用内存比较大,则内存...原创 2020-01-01 14:58:03 · 143 阅读 · 0 评论 -
记录一下leetcode11.盛最多水的容器
第一种解决方法为暴力破解: /** * 计算出最大值,这里就是求一个面积的最大值 * @param height * @return */ public static int maxArea(int[] height) { if (height.length < 2) { return 0; ...原创 2019-12-27 16:12:58 · 89 阅读 · 0 评论 -
记录一下深入理解io,nio的实现原理,以及io到nio转化的原因
我们都知道io为是阻塞的,nio为非阻塞的,但是这么理解太过于片面,因为这个东西太过于泛化,没有意义。其实io的阻塞也分为类型,分为连接阻塞和通信阻塞,这么说也太过于抽象,我们先画图说明,然后以实际的代码来进行深入理解。通过上图,我们得知阻塞io的连接和通信过程,接下来我们通过代码来验证上图的过程:首先,我们创建一个服务端IOServerTest类:/** * 测试io阻...原创 2019-12-03 12:30:50 · 462 阅读 · 2 评论 -
记录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 =>...原创 2019-11-07 11:39:39 · 665 阅读 · 0 评论 -
记录一下后端系统架构搭建初期需要注意的事情
现在的系统架构的底层框架基本都是基于spring作为核心框架,其他的框架都可以完美接入该框架中,这里就不累述了, 主要记录下开发中遇到了一些初期因为未统一规范或者未做好技术选型发生的一些问题。1. 系统中的导入导出为excel,pdf是否在项目初期定义好处理规范,比如说excel导入导出采用阿里巴巴的fastexcel, pdf采用itext,然后是否做好对其进行进一步的封装,做好对当前项目的...原创 2019-10-16 14:11:50 · 391 阅读 · 0 评论 -
记录一下使用springmvc实现自定义参数类型转换
在我们的实际开发中,我们知道,springmvc会对前端传递的参数进行解析,反序列化,反射等机制来映射到我们需要接收请求参数的实体类中,但是对于有些引用类型的参数映射,springmvc并未提供默认的实现,好在Springmvc是一个强大的轻量级框架,它为我们提供了一个WebMvcConfigurer接口(只应用于controller层),供我们实现我们自定义的参数类型转换器,自定义拦截器,自定义...原创 2019-07-30 09:45:08 · 712 阅读 · 0 评论 -
JVM 指令大全
JVM 指令集整理原文链接:www.wangyuwei.me指令码 助记符 说明 0×00 nop 什么都不做 0×01 aconst_null 将null推送至栈顶 0×02 iconst_m1 将int型-1推送至栈顶 0×03 iconst_0 将int型0推送至栈顶 0×04 iconst_1 ...转载 2019-07-15 13:21:54 · 344 阅读 · 0 评论 -
记录一下使用java实现责任链模式
责任链模式在我们的日常开发中会经常遇到,比如我们在servlet中的Filter过滤器,就是采用责任链模式来进行处理的,Mybatis中SqlSession下的四大对象Execute(执行器), StatementHandler(语句处理器),ResultHandler(结果集处理器)以及ParameterHandler(参数处理器)也是采用责任链模式来完成对数据的关系映射生成完整的sql和映射响...原创 2019-06-04 09:23:03 · 2787 阅读 · 1 评论 -
对Mybatis执行过程详解和如何编写mybatis拦截器
Mybatis是我们目前开发中最流行的ORM持久层框架,我们在做到学习如何使用它的同时,也应当对它的实现原理进行剖析,以后方便我们在持久层对其进行拓展。这是我的一位好友总结的一篇博客,读完让人对mybatis的实现有了更深层次的理解和感悟,废话不多说,直接上url:https://blog.csdn.net/qq_26440803/article/details/89613505...转载 2019-05-24 11:17:52 · 458 阅读 · 0 评论 -
记录下使用docker部署elasticsearch+kibana时,kibana出现[Kibana server is not ready yet]问题的解决方法
1.下载完elasticsearch + kibana镜像时,一定要确保tag(我们可以理解为版本)的一致性,如下图所示:如果tag版本不一致会出现,启动kibana容器后,使用浏览器打开会出现[Kibana server is not ready yet]的问题,这个问题的造成原因就是因为版本不一致造成的。我们依次启动elasticsearch 和 kibana:1.启动ela...原创 2019-05-23 15:00:18 · 23896 阅读 · 4 评论 -
记录一下使用win10系统的idea的terminal终端对git出现中文乱码问题的完美解决
快捷键ctrl+alt+s进入设置界面,选择Tools->Terminal,将Environment Variables中添加LESSCHARSET=utf-8,即可解决使用git出现中文乱码的问题。原创 2019-05-22 18:57:44 · 1081 阅读 · 0 评论 -
记录下集合以指定条数进行分组
/** * 将集合进行分组, 每toIndex条数据作为一组 * @param list 需要分组的集合 * @param toIndex 每组的条数 * @return */ private List<List<String>> groupList(List<String> list,int to...原创 2019-05-14 18:35:46 · 737 阅读 · 0 评论 -
记录一下java操作数栈,局部变量表的使用和Java的执行过程
定义一个java类如下所示:public class TestJVM { public static void main(String[] args) { int a = 2; int b = 5; int c = a + b; System.out.println("c = " + c); }}通过执行...转载 2019-07-21 13:41:10 · 512 阅读 · 0 评论 -
使用Java实现循环队列(基于数组),链表队列(基于双向链表)
1. 基于数组实现循环队列package com.feifei.demo.queue;import java.io.Serializable;import java.util.Objects;import java.util.stream.Stream;/** * 自定义循环队列 * 1. 单队列会出现假溢出的情况,也就是队列有空闲空间,但是无法插入 * 队列有2个指针标识...原创 2019-08-19 13:45:11 · 1310 阅读 · 0 评论 -
使用mybatis-plus通过自定义模版来自动生成相关模版代码
在现在的开发中,对我们开发人员而言,最重要的就是开发效率,本次讲解的就是使用mybatis-plus来完成自定义代码生成的教程。 我们在对一个框架进行自定义拓展的话,第一种方式就是阅读官方文档,如果官方文档没有给出相关的解决方案,我们可能还需要通过查看源码来完成我们想要实现的功能,我们都知道mybatis-plus实现了代码自动生成器,我们通过官方文档就可以查看,我们知道通过mybati...原创 2019-08-20 09:47:06 · 7629 阅读 · 5 评论 -
记录下LinkedList源码中通过索引值来获取指定元素
/** * Returns the (non-null) Node at the specified element index. */ Node<E> node(int index) { // assert isElementIndex(index); if (index < (size >> 1))...原创 2019-08-20 13:29:14 · 1670 阅读 · 0 评论 -
记录一下学习笔记
@ConfigurationProperties 主要用来把properties配置文件转化为bean来使用的@EnableConfigurationProperties({HttpUrl.class}) 是使@ConfigurationProperties注解生效(并获取该实例), 也就是将实例交由spring管理(@EnableConfigurationProperties注解是用来开启对...原创 2019-08-29 13:11:02 · 400 阅读 · 0 评论 -
记录下jvm类加载机制
地址:https://blog.csdn.net/m0_38075425/article/details/81627349转载 2019-08-29 13:36:16 · 269 阅读 · 0 评论 -
记录一下mac使用IDEA插件之CamelCase 【大小写,下划线,驼峰,首字母大写等转化工具】
使用mac环境下,在plugins安装完camelCase,直接使用shfit + alt + U是无法生效的,因为mac并没有alt按键,经过测试采用shift + option + U便可正常使用CamelCase原创 2019-09-04 10:28:42 · 3677 阅读 · 0 评论