自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 问答 (13)
  • 收藏
  • 关注

原创 同步、异步与阻塞、非阻塞的理解

同步 (Synchronous):在同步操作中,调用者发起一个请求,然后等待操作完成,而不进行其他操作,直到操作完成并返回结果。这种方式可以确保操作的顺序性和一致性,但也可能会造成程序在等待操作完成时出现阻塞,降低效率。异步 (Asynchronous):在异步操作中,调用者发起一个请求后,不必等待操作完成,而可以继续执行其他操作。被调用的操作会在后台进行,并且通常会通过回调函数、事件或者轮询等方式来通知调用者操作已经完成或者出现了新的状态。

2023-11-02 16:16:02 123

原创 SpringBoot获取项目日志

对于布署在远端的服务,我们想快速的获取到日志。对于使用了日志服务,也可能因为上报间隔太长,日志不够实时。所以想通过一些方式,可以不用进入到容器内也可以简单快速获取到日志,而且是实时的日志。目标就是获取最新的n条日志,搜索啥的功能也不需要,这是ES的功能。

2023-07-07 18:37:34 2070

原创 JDK生成JRE文件

bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre

2023-05-19 16:12:25 268

原创 Java实现内网穿透

1、当公司的一些系统功能使用了第三方服务时,通常第三方会回调我们的接口。在对接阶段,为了方便debug,我们肯定希望能回调到我们本地电脑上来。2、当你在公司想访问部署在家里电脑的服务或者文件时。3、当你的外地同事想访问你本地的服务,虽然发布到测试也可以,但是部署需要时间,发生错误排除也没有本地来的快,不够所见即所得。虽然有现成的内网穿透工具,但没有比自己写的用起来更有成就感,哈哈哈哈~

2023-04-16 20:44:38 2467 5

原创 对Spring循环依赖的一些理解

类A有个字段需要注入类B,类B有个字段需要注入类C,类C有个字段需要注入类A,它们之间的依赖关系形成了一个循环。Spring初始化完一个对象之后会把实例放入单例池(singletonObjects)中,也就是一级缓存。我们看看一级缓存下循环依赖造成的结果。1、new A(),发现需要B对象2、去singletonObjects找B对象,没有找到3、new B(),发现需要C对象4、去singletonObjects找C对象,没有找到5、new C(),发现需要A对象。

2023-04-10 22:16:30 537

原创 Mybatis如何整合进Spring

我们使用Mybatis框架的时候,只需要定义一个mapper接口,然后在类上面加上@Mapper或者在启动类加上@MappScan,配置需要扫描的路径,就能得到一个对数据库表进行CRUD的Bean。众所周知Java里的接口并不能实例化,那Mybatis是怎么实例化接口的?以及实例化完成之后的对象怎么放入IOC容器?

2023-03-31 14:57:52 384

原创 Spring AOP代理对象创建时机

在Spring中,我们经常会为我们的Bean做AOP,根据上面我们知道,代理对象需要引用被代理对象,那就需要在Bean初始化完成之后再对Bean做代理。因为Bean初始化完成之后就是一个可用的Bean了,而且会被放入IOC容器,我们需要在这个Bean被放入IOC容器之前生成它的代理对象,并代替原先的类放入IOC容器中。而第七步是Spring给我们提供的扩展点,在这一步可以拿到可用的原始对象,我们的代理对象生成和替换就是在这里。

2023-03-28 11:38:53 2437

原创 SpringBoot处理跨域总结

Springboot处理跨域问题的方法以及遇到的问题

2023-01-16 16:30:01 728

原创 CPU利用率过高排查思路

java程序使cpu飙高排查思路

2023-01-01 13:50:35 421

原创 验证码识别PaddleOCR 快速开始

PaddleOCR实现验证码识别

2022-11-30 10:43:53 616

原创 Java对称加密AES工具类

【代码】Java对称加密AES工具类。

2022-10-07 15:35:25 1086

原创 关于Java的@HotSpotIntrinsicCandidate和@IntrinsicCandidate注解

被它标记的方法表明JVM会对其做一些增强处理以提高它的执行性能,比如可能手工编写汇编或手工编写编译器中间语言来替换该方法的实现。虽然这里被声明为 native 方法,但是它跟 JDK 中其他的本地方法实现地方不同,固有方法会在 JVM 内部实现,而其他的会在 JDK 库中实现。在调用方面,由于直接调用 JVM 内部实现,不走常规 JNI lookup,所以也省了开销。

2022-10-05 17:01:14 446

原创 Docker安装Mysql5.7并开启binlog

Docker安装Mysql5.7并开启binlog

2022-06-26 19:09:37 1305 2

原创 使用二叉树匹配IPV4黑名单

import java.util.List;import java.util.stream.Collectors;import java.util.stream.Stream;/** * @author linkaizhi * @date 2022/3/23 */public class IPV4MatchUtils { private class Node { private Node left, right; // 0: left, 1: right .

2022-04-01 12:14:47 720

原创 Git之cherry-pick

一般代码的合并分为两种:一种是整个分支的合并,一个是挑选部分的commit来合并。git cherry-pick:挑选部分的commit来提交。

2022-03-28 21:18:23 3528

原创 Navicat连接Mysql8版本报1251错误解决

1.命令行登录mysql:-u:用户名 -p:密码mysql -h localhost -u root -p2.添加远程登录用户newroot,密码123456CREATE USER 'newroot'@'%' IDENTIFIED WITH mysql_native_password BY '123456';3.给予远程用户所有表所有权限GRANT ALL PRIVILEGES ON *.* TO 'newroot'@'%';4.刷新FLUSH PRIVILEGES;

2022-03-26 21:22:09 1316 1

原创 纯手工打造和运行一个Servlet

脱离IDEA和Maven,纯手写写一个Servlet并布署到Tomcat。第一步:编写一个继承HttpServlet 的Java类大多数Servlet都是在Http环境中处理请求的,所以我们只需要继承HttpServlet来实现对请求的业务处理,当然,如果是其他协议,也可以通过继承GenericServlet去实现业务的处理。HttpServlet也是继承了GenericServlet来实现对Http协议的支持。重写doGet和doPost。import javax.servle.

2022-03-19 09:59:06 555

原创 SpringBoot项目打成War布署在Tomcat

第一步:声名打成WAR<packaging>war</packaging>第二步:排除SpringBoot自带的tomcat<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> .

2022-03-12 20:44:14 1886

原创 Mongodb索引及explain

索引及explain1)mongodb的_id是如何生成的?可以有什么用途?ObjectId是一个12字节的 BSON 类型字符串。按照字节顺序,一次代表:4字节:UNIX时间戳3字节:表示运行MongoDB的主机2字节:表示生成此_id的进程3字节:由一个随机数开始的计数器生成的值用途:主键总是有一个唯一索引,在分布式环境下我们通常有两种方式分配唯一id使用一个原子计数器,这个计算器每次返回一个id并加1,这个数字需要通过网络传输 在机器数量确定的情况下,把每台服务器的step设置

2022-01-02 19:56:31 1169

原创 list.forEach()和list.stream().forEach()区别

首先它们的功能都是遍历数组每个元素并执行入参的accept方法,但是它们的实现方式却不一样,在一些特定的情况下,执行会出现不同的结果。区别list.forEach()使用增强的for循环(默认)ArrayList自己实现了forEachlist.stream().forEach()它首先将集合转换为流,然后对集合的流进行迭代差异一、元素遍历的顺序list.forEach的增强for循环使用集合的迭代器Iterator来遍历元素,相当于这样。List<.

2021-11-27 23:42:18 16219

原创 Docker搭建Mongodb复制集

1. 启动三个Mongodb容器docker run --name mongo0 -p 8080:27017 -d mongo --replSet "mg-1234567"docker run --name mongo1 -p 8081:27017 -d mongo --replSet "mg-1234567"docker run --name mongo2 -p 8082:27017 -d mongo --replSet "mg-1234567"--replSet为复制集取一个名字

2021-11-21 00:09:37 1868

原创 Mongodb connect=direct|replicaSet连接复制集的区别

mongodb://username:password@localhost:3731 默认是direct方式mongodb://username:password@localhost:3731,localhost:3732,localhost:3733/ 默认是replicaSet模式由于复制集中的切换机制,在主节点故障的情况下,集群内其他从节点会通过投票方式产生新的主节点,因此,不能像单机情况下那样,直接连接主节点;否则在MongoDB自动切换主节点时,数据库访问就会出问题。direct|

2021-11-20 19:29:08 2305

原创 Mongodb ObjectId格式

ObjectId类里还有一个重要的变量,NEXT_COUNTER,它是一个静态线程安全的Integer(在同一个java进程中,在一秒内,多个线程同时生成ObjectId,最后每个ObjectId的最后三个字节一定是不一样的),最后三个字节的随机数将由它来生成,初始值是随机的,每使用一次就自增1,使用的时候会跟0x00ffffff相与,保证数值在三个字节以内。ObjectId是一个24位的字符串,实际是由一组十六进制的字符构成,共12个字节。RANDOM_VALUE1代表了3个字节的机器标识符。

2021-11-20 17:17:28 1504

原创 maven学习记录

1.mvn clean只能清除target文件夹?答案是否定的,清除哪个文件夹是可以自己配置,只是默认清除target文件夹,只需要在pom.xml配置需求清除文件夹的路径即可,可以试试clean把整个C盘删了????。Apache Maven Clean Plugin – Delete Additional Files Not Exposed to Maven <plugin> <groupId>org.apache.ma

2021-10-10 21:40:29 441

原创 RocketMQ安装 Windows版

RocketMQ下载:https://rocketmq.apache.org/dowloading/releases/rocketmq-console下载:https://github.com/apache/rocketmq-externals/releases1. 添加系统变量2. path属性添加值”%ROCKETMQ_HOME%\bin“3.启动bin目录下的mqnamesrv4. 启动bin目录下的brokermqbroker.cmd -n loca...

2021-10-04 22:18:44 95

原创 正则表达式

1.元字符元字符是构造正则表达式的一种基本元素。元字符 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白字符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 1.匹配hello regex的字符串 String s = "hello regex abc 123 a1c 1b3";

2021-09-11 16:21:29 166

原创 初识数据结构-跳表

背景对于有序的数组,查找一个数可以用二分查找,时间复杂度为O(logn)。而对于一个有序链表,因为相邻元素存储的位置并不相邻,即使元素有序,也不能像数组一样使用二分去查找元素。 只能从头开始遍历,时间复杂度为O(n)。优化我们可以为链表建一层索引,这样查找就会更快一些。就像书的目录一样,假如我们要翻开书本的第五章,首先会去目录找到第五章对应的页数,而不是一页一页去找。同样的,如果我们在链表上面建一层索引,搜索会不会变快呢?这样,原本需要7次的查询缩减至了4次,如果再加一.

2021-08-29 22:05:37 115

原创 MySQL内置一些时间函数的使用

1.获取系统当前时间函数SELECT NOW(),CURRENT_DATE(),CURRENT_TIME(),CURRENT_TIMESTAMP(),UNIX_TIMESTAMP()2.时间的格式化SELECT TIME(NOW()),DATE(NOW()),NOW(),FROM_UNIXTIME(UNIX_TIMESTAMP()),UNIX_TIMESTAMP()3.时间加减一个固定时间 DATE类型的加减 SELECT DATE_ADD(DATE(NOW()),I

2021-05-21 17:30:56 244 3

原创 Nginx配置Https

# HTTPS server 前端 # server { listen 443 ssl; server_name xxx.com; ssl_certificate /usr/local/ssl/xxx.pem; ssl_certificate_key /usr/local/ssl/xxx.key; ssl_session_cache shared:SSL:1m; ..

2021-05-18 11:29:40 107

原创 SpringBoot自动生成接口文档

跟大家介绍一个自动生成接口文档的工具包,作者的理念是注释即文档,在写代码的时候写上注释,项目启动后就会生成接口文档,非常方便,省去了Swagger写注解的过程。

2021-04-09 21:52:22 1918

原创 JPA实现数据库int类型与Java实体枚举的转化

定义表num字段在java的实体类中定义为枚举枚举类import com.fasterxml.jackson.annotation.JsonCreator;import com.fasterxml.jackson.annotation.JsonFormat;import lombok.Getter;import java.util.Arrays;/** * Created with IntelliJ IDEA. * * @auther: lkz * @date: .

2021-04-05 22:51:59 794

原创 SpringBoot实现前端传入数值Controller层接收为枚举

定义枚举import com.fasterxml.jackson.annotation.JsonCreator;import com.fasterxml.jackson.annotation.JsonFormat;import lombok.Getter;import java.util.Arrays;/** * Created with IntelliJ IDEA. * * @auther: lkz * @date: 2021/04/03 * @version: 1.0 * @

2021-04-05 22:39:49 5691

原创 Maven打包引入本地的jar包

该模块需要引入lib的jar包需要在POM引入坐标<dependency> <groupId>com.icbc-api-sdk-cop</groupId> <artifactId>icbc-api-sdk-cop</artifactId> <version>1.0</version> <scope>system</scope> <system..

2021-04-02 21:38:00 339

原创 AOP实现对请求参数的所以字符串去前后空格

在实际的开发过程中,经常会需要客户端输入一些字符串,比如账号、密码,都是以字符串的形式传给后端的。客户端传给后端的字符串可以说五花八门,""," "," 123456","123456 "," 123456 "等等。这就导致后端拿到字符串之后需要做两次操作,第一次判空,第二次去除前后空格。public String test(String str) { if (str != null) { str = ...

2021-03-08 09:11:52 906

原创 Spring Data Jpa---EntityManager属性与属性值的映射

在开发中使用JPA作为项目的持久层框架,在联表查询查询的时候多半会用到EntityManager这个类。String sql = "SELECT xxx, xxx, xxx FROM x a JOIN y b ON x.id = y.id";Query nativeQuery = em.createNativeQuery(sql);List<Object[]> resultList = nativeQuery.getResultList();大概是这种形式,Object数组里面的值

2021-03-06 16:50:04 989 1

原创 Java类之间有相同属性名之间的赋值

使用这个工具类即可实现,但是不灵活。我们可以进行封装,自定义一些规则。import org.springframework.beans.BeanUtils;BeanUtils.copyProperties(source, target);比如自定义注解,忽略一些不需要赋值的字段。为了方便,我使用了@JsonIgnore。import com.fasterxml.jackson.annotation.JsonIgnore;定义两个类@Dataclass AA { .

2021-01-23 11:54:29 928 3

原创 Mybatis-Plus的代码生成器

1.首先需要先导入依赖, velocity是模板依赖, mybatisplus需要根据你提供的模板来生成代码, mybatisplus提供了默认的模板, 自己可以不用配置。<!-- 代码生成器依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator&lt

2021-01-10 10:58:14 131 2

原创 IDEA根据数据库表生成对应Java实体类

修改这个文件import com.intellij.database.model.DasTableimport com.intellij.database.model.ObjectKindimport com.intellij.database.util.Caseimport com.intellij.database.util.DasUtilimport java.io.*import java.text.SimpleDateFormat/* * Availabl...

2021-01-09 15:56:55 1048 1

原创 了解JAVA中的装箱与拆箱

1.什么是装箱与拆箱、自动装箱与自动拆箱?Java为每种基本数据类型都提供了对应的包装器类型,int对应Integer、boolean对应Boolean。。。所以,装箱就是将基本数据类型转换为包装器类型;拆箱就是将包装器类型转换为基本数据类型。那自动装箱与自动拆箱也很好理解了,就是我们不用在代码里面显式的写装箱与拆箱的代码,由编译器帮我们完成这一操作。在Java SE5之前Integer i = new Integer(1); // 装箱int j = i.intValue(); //

2020-10-31 16:21:31 154

原创 深入了解jdk1.8中的HashMap

HashMap各个字段的意思public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {// 作为序列化的版本号, 可忽略 private static final long serialVersionUID = 362498820763181265L;// 默认的初始容量 该值要求是2的

2020-10-19 20:47:57 114

mybatis原理demo

mybatis原理demo

2023-03-31

mybatis注册到spring容器代码

mybatis注册到spring容器代码

2023-03-31

aop原理使用demo

aop原理使用demo

2023-03-28

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

TA关注的人

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