自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(143)
  • 收藏
  • 关注

原创 BeanUtils复制List对象

【代码】BeanUtils复制List对象。

2023-08-12 15:10:10 1303

原创 java 富文本html 转 word(带图片处理

java 富文本html 转 word(带图片处理

2023-02-15 14:24:38 3169

转载 [Linux系统] VMware克隆CentOS7,解决网络配置问题

VMware克隆CentOS7,解决网络配置问题

2022-07-16 15:16:24 798

原创 freemark 使用ftl文件 生成word

<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency>import freemarker.template.TemplateException;import java...

2022-05-27 15:21:34 376

原创 MyBatis一级缓存和二级缓存命中场景

MyBatis一级缓存命中场景MyBatis一级缓存是与会话(sqlSession)相关的,会话关闭后,一级缓存会被清空一:运行时参数相关:1.同一个会话(sqlSession)2,sql语句和参数形同3、相同的statementId4.RowBound相同二:配置与操作相关的1、未手动清空缓存(提交或回滚)2.未配置flushCahch=true3.未执行update、delete、insert语句4.缓存作用域不是statement备注:和spring集成后,非事务环境下,不走一

2022-03-09 21:48:05 660

原创 springBoot过滤器、拦截器配置使用

拦截器与过滤器的区别 :拦截器是基于java的反射机制的,而过滤器是基于函数回调。拦截器不依赖与servlet容器,过滤器依赖与servlet容器。拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次拦截器的代码实现。Filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而inter

2022-02-28 11:11:36 924

原创 后台系统登录一般流程

登录整个流程1.异步请求后端得到验证码(生成验证码的答案后存入redis,uuid作为key),验证码图片以base64的编码和uuid返回前端2.根据用户名和密码、验证码值、uuid传递到后端,为了效率,先判断验证码值是否正确,正确的话,再根据用户名和密码去数据库进行匹配,匹配时,查询用户表、部门表、用户与角色的关联表、角色表获取当中的有用字段信息,再使用用户id去查询权限表、角色权限关联表、用户角色关联表、角色表(因其中功能涉及角色、权限状态)返回权限标识如(system:role:edit多个的

2022-02-25 16:18:26 7758

原创 maven 命令 分环境 打包 指定pom文件

mvn clean package -DskipTests -Pdev -f pom_2.xml备注:clean:清除项目中target目录package: 打包-DskipTests :跳过测试文件-Pdev :dev代表对应的环境-f pom_2.xml :pom_2.xml代表指定的pom文件

2021-07-16 17:48:27 3617

原创 java List<Object> 深拷贝

//list深度拷贝List<Object> newList = new ArrayList<>();org.apache.commons.collections4.CollectionUtils.addAll(newList, new Object[list.size()]);Collections.copy(newList, list);备注:list为源数据

2021-05-27 10:33:18 747

原创 java 根据对应的年份取出在所有年份中的位置及取对应的数值

public class TestF { public static void main(String[] args) { String [] quanYearArray={"2016","2017","2018","2019","2020"}; String [] haveYearArray={"2018","2020"}; String [] haveValueYearArray={"2018的值","2020的值"}; Map .

2021-04-28 13:00:09 201

转载 VMware12 CentOS 7 NAT方式连接网络配置

转自https://blog.csdn.net/u013305747/article/details/78375946VMware、CentOS 7 安装略过(网上教程一堆),以下是安装完成后以NAT方式链接网络的配置,需要注意的几个点:一、虚拟网络编辑器配置1、VMnet8设置(不需要改动)2、NAT设置(不需要改动)3、DHCP设置(CentOS IP地址段设置,不需要改动)二、虚拟机设置(网络适配器选择NAT模式)三、主机VMware Virtual Ethe

2021-04-22 11:18:08 196

转载 java 线上应用故障排查之二:高内存占用

前一篇介绍了java线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查。搞Java开发的,经常会碰到下面两种异常:1、java.lang.OutOfMemoryError: PermGen space(jdk1.7及之前版本)2、java.lang.OutOfMemoryError: Java heap space要详细解释这两种异常,需要简单重提下Java内存模型。(友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogja...

2021-04-13 11:15:42 575

转载 java 线上应用故障排查之一:高CPU占用

一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。(友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen)以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题。但是,怎么定位到具体线程或者代码呢?首先显示

2021-04-13 10:58:00 126

原创 java 通过反射创建对象并给属性赋值

import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class ReflectPO { private String h1; private String h2; public String getH1() { return h1; } public void setH1(String h1) { .

2021-04-12 17:17:22 1276

原创 java 通过网络流 把文件写到某个地方

@Testpublic void testCopyFile() throws Exception{ URL url = null;//把远程文件地址转换成URL格式 InputStream fin=null; FileOutputStream fileOut=null; try { url = new URL("http://ip地址/6456b1051fa6531cf9b36cacb9a0e92a.xlsx"); fin = url.o.

2021-04-08 17:29:44 332

原创 java 流与byte 互相转换,并与base64编码转换

在java 文件操作过程中,经常会用到stream to byte 还有 byteto stream ,有时还需将流转换成base64 编码,然后才好传输, 一旦受到这个base64的字符串,接收端,需要将这个还原成流,保存为文件。下面就是几个主要方法:1. streamtobyte:public static byte[] steamToByte(InputStream input) throws IOException{ ByteArrayOutputStream...

2021-04-08 10:11:59 1584

原创 centos7普通用户和root用户 安装python3

一:普通用户python -V,看下之前系统中是否有python,看这个是因为安装python3时的基本环境都已具备了,如下图中的是python2版本官网下载 Python-3.7.9.tar.xz 安装包解压 tar -xvJf Python-3.7.9.tar.xz 编译安装 创建编译目录mkdir /home/username/python3 备注:username为用户名 cd Python-3.7.9 ./configure --prefix=/home/user...

2021-03-18 17:52:23 2307 1

原创 java 多个数组 按照一个数组元素排序 其他数组值也跟着变

//前提,每个数组的元素个数一致 ,使用对象是最简单的方法,下边这种方法没有使用对象public static void main(String[] args) {String[] xValue={"1","2","3","4","5"};String[] xNote={"1月1日0时","1月1日1时","1月1日2时","1月1日3时","1月1日4时"};String[] xNoteNew=new String[xNote.length];//String[] xValueNew=new

2021-01-26 14:52:33 1208

原创 java 远程调用 RestTemplate 传json

@SpringBootTestpublic class NyyTest { private Logger logger = LoggerFactory.getLogger(NyyTest.class); @Test public void initProcess() { RestTemplate restTemplate=new RestTemplate(); String url ="http://aaa"; HttpHeader...

2021-01-20 18:05:18 283

原创 列表 转成 树形结构

List<Abc> chainList = mapper.selectList(bb);for (int i = chainList.size() - 1; i >= 0; i--) { // 当前要移动的记录 Abc child = chainList.get(i); // 如果当前节点没有父节点,则不用往下了 if (StringUtils.isEmpty(child.getParent())) { continue; }...

2020-12-10 18:05:59 638

原创 高并发系统的演进(如何设计一个高并发系统架构)

一:系统拆分:将一个系统拆分为多个子系统,用dubbo或springCloud来搞,然后每个系统连接一个数据库,这样就可以对并发访问起到一定的作用。二:缓存:必须得用缓存。大部分的高并发场景,都是读多写少,完全可以在数据库和缓存中都写一份,然后读的时候大量都是走的缓存。毕竟redis轻松单机几万的并发是完全没有问题的。三:MQ:可能你还是会出现高并发写的场景,比如一个业务操作里要频繁操作数据库多次,这时候就得用MQ了,大量写请求到MQ里,后边的系统消费后慢慢写,控制在mysql承载范围之内,MQ单机

2020-12-05 10:45:15 180

原创 Redis 过期策略 内存淘汰机制 原理

一:删除策略1.定期删除 redis默认每隔100ms会随机抽取一些设置了过期的key进行检查其是否过期,如果过期了就删除2.惰性删除 因定期删除可能导致很多过期key到了时间并没有被删除掉,这就用到了惰性删除,就是你在获取某个key的时候,redis会检查下,这个key是否设置了过期时间,如果设置了而且已经过期了,就会删除而且不会给你返回任何东西,并不是key到时间就被删除掉,而是你查询这个key的时候,redis才会进行检查二:内存淘汰策略如果redis的内存占用过多的时候,此时会进行内

2020-11-26 21:52:32 367

原创 Redis 单线程原理 示意图

1.客户端向redis server发送socket连接到server socket,server socket接收到请求后会产生AE-READBLE事件,IO多路复用程序会监听到AE-READBLE事件,IO多路复用程序中有一个队列,客户端来的请求会进入到里边,后边就是文件事件分派器,接着就到连接应答处理器,server socket接收到连接后,命令请求处理器会读出来数据,在自己内存中完成key.value数据处理,命令回复处理器处理完后,IO多路复用程序会监听AE-WRITEABLE事件,再返回到客户

2020-11-26 17:09:37 262

原创 redis memcahe 区别

1.redis单线程,memcache多线程2.redis数据类型更丰富,memcache比较单一3.reids官方支持原生cluster模式,memcache不支持

2020-11-26 15:58:51 107

原创 elasticSearch es 性能优化

1.写入到es中的数据量尽量少于filesystem cache的剩余内存2.es中的数据放那些需要搜索的必要信息3.冷热数据分离,假如有6条机器,两个索引,一个索引放热数据,一个索引放冷数据,每个索引3个shard,3台机器放热数据index,另外3台机器放冷数据index,这样你大部分时间在访问热数据,热数据都在filesystem cache中,这样访问性能是很高的,另外冷数据的话,大部分都在磁盘上,即使性能差点,也是少部分人在访问。4.设计es中的数据模型,例如订单表、订单条目表o.

2020-11-25 17:19:35 105

原创 elasticSearch es 概念 写入 读取 搜索数据 原理

1.index 相当于数据库中的一张表2.mapping相当于字段表结构的定义(字段及类型)3.document代表数据表中的一条数据,每个document中有多个filed,每个filed就代表这个document中一个字段的值4.shard 每个index会被拆成多个shard,每个shard中放index的一部分数据,每个shard可能分在不同的机器上,每个shard都有一个副本,主数据和副本不在同一台机器,primary shard 会自动同步到replication shard上m

2020-11-24 17:36:01 240

原创 RabbitMQ 高可用 幂等 消息丢失 顺序消费

1.高可用:RabbitMQ的高可用指的是镜像模式的集群,queue的元数据和消息数据都存在每个节点上,不是分布式的(中小公司推荐,qps万级)2.(重复消息)幂等:不管生产者发送几条相同的消息到mq,消费者消费的时候,只消费一条,实现思路1.例如写库,订单表,生产者生产消息的时候在消息体中加入一个唯一标识(一个字段或者多个字段组合),这样在消费者消费的时候,首先去从库中查看是否有这个标识的数据,如果有的话,直接丢掉就行。3.消息丢失:分为三个部分,分别为3.1:生产者消息是否发送到mq服务器中

2020-11-23 17:49:36 140

转载 转java通过身份证号码获取出生日期、性别、年龄

转自:https://blog.csdn.net/u011199063/article/details/79564587身份证号码: 15位:6位地址码+6位出生年月日(900101代表1990年1月1日出生)+3位顺序码 18位:6位地址码+8位出生年月日(19900101代表1990年1月1日出生)+3位顺序码+1位校验码 1 2 3地区码: 1、 第一、二位表示省(自治区、直辖市、特别行政区)。 2、 第三、四位表示市(地级市、自治州、..

2020-11-12 11:08:55 1465

转载 转 Springboot的异步线程池 四种线程池拒绝策略

1:定义线程池 1 2 3 4 5 6 7 8 9 10 11 12 13 一般写到启动类中,当做启动类中的内部类 @EnableAsync @Configuration classTaskPoolConfig { @Bean("taskExecutor") publicE...

2020-10-29 16:19:42 2123

转载 转 java8一行代码获取昨天时间字符串

import java.time.Instant;import java.time.ZoneId;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;String date = DateTimeFormatter.ofPattern("yyyy-MM-dd") .withZone(ZoneId.systemDefault()).format(Instant.now().minus(1,

2020-10-28 17:35:37 537

原创 oracle 使用sql查询表注释和列注释及数据类型等

SELECTt1.Table_Name || chr(13) || t3.comments AS "表名称及说明", ROWNUM , t1.Column_Name AS "字段名称", t1.DATA_TYPE AS "数据类型", t1.DATA_LENGTH AS "长度", t1.NullAble ...

2020-10-28 11:58:33 655

原创 web 统一打印出接到前端的请求参数是什么 调试使用

public class MyAuthorityInterceptor implements HandlerInterceptor{@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//请求中Controller中的方法名HandlerMethod handlerMethod = (Ha.

2020-10-22 14:33:55 360

原创 SpringMvc 需要对返回的json做统一的处理时用

import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;@ControllerAdvicepublic class MyResponseBodyAdvice implements ResponseBodyAdvice {@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, Media.

2020-10-22 14:23:32 271

原创 Cotroller 当遇到返回值和方法返回值不一样时的处理

大致代码如下:HttpServletResponse response;response.reset();//note 这里要添加reset,否则报异常 getWriter() has already been called for this response.response.setCharacterEncoding("UTF-8");//note 这里要设置编码,否则会乱码response.setContentType("application/json;charset=UTF-8");//.

2020-10-22 14:15:23 150

原创 SpringWeb 中的全局异常处理 两种方式

import org.springframework.stereotype.Component;import org.springframework.stereotype.Repository;import org.springframework.stereotype.Service;import org.springframework.web.servlet.HandlerExceptionResolver;import org.springframework.web.servlet.Model.

2020-10-22 14:08:41 328

原创 java 链式调用经典写法

public class Chain {private List<ChainHandler> handlers; private int index = 0; public Chain(List<ChainHandler> handlers) { this.handlers = handlers; } public void proceed(){ if(index >= handlers.size())...

2020-10-14 20:55:14 2094 1

原创 JDK代理和Cglib代理对比

1.JDK代理只能针对有接口的类的接口方法进行动态代理2.JDK代理也不能对private方法进行动态代理2.Cglib基于继承来实现代理,无法对static、final类进行代理3.Cglib由于基于继承实现代理,无法对private、static方法进行代理...

2020-10-13 22:10:53 114

原创 (转载)java 导出数据为word文档(保持模板格式)

导出数据到具体的word文档里面,word有一定的格式,需要保持不变这里使用freemarker来实现:①:设计好word文档格式,需要用数据填充的地方用便于识别的长字符串替换 如 aaaaaaaaaaaaaaaa②:将word文档另存为 2003 xml格式③:找到需要替换的地方, 如 将 aaaaaaaaaaaa 修改为 ${userName} 如果是list展示,注意按照如下方式修改: <#list list1 as list1Ite...

2020-09-29 16:28:48 1004 1

原创 RocketMQ 术语与概念 概览

1.Topic(主题) 一类消息的集合,RocketMQ的基本订阅单位2.消息模型:Producer(生产者,生产消息) Broker(消息代理,存储消息,转发消息) Consumer(消费者,消费消息)3.部署机构:NameServer(名字服务)生产者/消费者通过名字服务查找各自主题相应的BrokerIp列表(类似与服务发现组件nacos)BrokerServer(代理服务器)消息中转角色 负责存储消息 转发消息4.消费模式:Pull Consumer(拉取式消费)应用调用Consume

2020-09-22 22:42:34 147

原创 JWT 组成 各部分作用

1.Header(头) 作用:记录令牌类型、签名算法等 例如:{“alg":"HS256","type","JWT}2.Payload(有效载荷)作用:携带一些用户信息 例如{"userId":"1","username":"mingzi"}3.Signature(签名)作用:防止Token被篡改、确保安全性 例如 计算出来的签名,一个字符串...

2020-09-21 22:08:32 2355

空空如也

空空如也

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

TA关注的人

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