自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Hello, New World!

万物伊始,效率本源。大道至简,代码之禅。自建博客: https://janycode.github.io

  • 博客(431)
  • 资源 (4)
  • 收藏
  • 关注

原创 像程序一样思考。

文章目录做你喜欢的事 - 心流状态像打字般编程 - 唯手熟尔为理想的求职者总结 - 终身学习做你喜欢的事 - 心流状态“1960年,一位研究人员对1500名商学院学生进行了访谈,并将他们分为两类:那些为了钱财来这里上学的人,1245人。那些打算利用学位做他们非常关心的事情的人,255人。二十年后,研究人员再次访谈了这些毕业生,发现其中有101位百万富翁,除了其中一位,所有百万富翁都来自...

2020-03-07 12:00:07 668 1

原创 浏览器输入URL并回车都发生了什么?

数据传输都是通过 TCP/IP 协议负责底层的传输工作, HTTP 协议基本不用操心,所谓的 “超文本传输协议” 似乎不怎么例会 “传输” 这个事情,那 HTTP 的核心又是什么呢?比图 TCP 报文,它在实际要传输的数据之前附加了一个 20 字节的头部数据,存储 TCP 协议必须的额外信息,例如发送方的端口号、接收方的端口号、包序号、标志位等等。与 TCP/UDP 类似需要在传输数据前设置一些请求头,不同的是 HTTP 是一个 “纯文本” 的协议,所有的头都是 ASCII 码的文本,很容易看出来是什么。

2024-04-11 20:01:31 957

原创 Redis实现延时队列-工具类

第一种方式适合简单的延时任务消费逻辑,并且对资源消耗要求较高的场景,但可能存在资源浪费和性能问题;第二种方式适合集成到Spring Boot项目中,可以利用Spring的特性进行任务调度,但可能无法及时准确地消费到达时间的延时任务,特别是在任务调度频率较低的情况下。根据实际场景和需求,可以根据优缺点选择合适的方式来实现延时消息队列。

2023-11-18 15:08:22 514

原创 MPJ: MyBatis-Plus-Join连表查询

mybatis plus 封装的 mapper 不支持 join,如果需要支持就必须自己去实现。但是对于大部分的业务场景来说,都需要多表 join,要不然就没必要采用关系型数据库了。或者 clone 代码到本地执行 mvn install,再引入以上依赖。那么有没有一种不通过硬 SQL 的形式,通过框架提供 join 能力呢?MPJLambdaWrapper 还有很多其他的功能。

2023-11-18 15:07:03 506

原创 Java实现的插件化策略模式

2023-11-16 15:13:23.465 INFO 5043 — [ main] c.d.m.s.l.ContextBaseDealListener : 注册:register -> class com.demo.mytest.strategy.service.impl.BaseDocumentService, [DOCUMENT]

2023-11-18 15:05:06 640

原创 深究数据库E-R模型设计

数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。数据库设计概述图:数据库是信息系统的核心和基础,它把信息系统中大量的数据按一定的模型组织起来,并提供存储、维护、检索数据的功能,最终使信息系统可以方便、及时、准确地从数据库中获得所需的信息。即数据库的设计目标是:为用户和各种应用系统提供一个信息基础设施和高效率的运行环境,这里的高效率代表的是冗余少、易维护和便于使用。

2023-06-10 23:32:40 823 4

原创 2小时入门Netty网络框架

官方的介绍:Netty isNetty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。

2023-05-23 17:44:01 612

原创 Java实现MQTT传输协议通信

MQTT 是一种基于发布/订阅模式的轻量级物联网消息传输协议,可在严重受限的硬件设备和低带宽、高延迟的网络上实现稳定传输。它凭借简单易实现支持 QoS报文小等特点,占据了物联网协议的半壁江山。MQTT是基于二进制消息的发布/订阅编程模式的消息协议,最早由IBM提出的,如今已经成为OASIS规范。遥感数据汽车智能家居智慧城市医疗医护精简,不添加可有可无的功能。发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递。允许用户动态创建主题,零运维成本。

2023-05-23 17:43:25 1333

原创 Spring Validation注解参数校验详解

注解说明:如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验(是否进行递归验证)验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long。验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long。验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long。

2023-05-05 17:35:43 1105

原创 Maven命令和配置详解

这个包里面包含的jar 基本涵盖了Spring 全家桶,已经Spring 和其他匹配的第三方中间件,pom的意思是只需要maven 包版本信息,这样有什么好处,比如引入一个第三方包,担心用的版本和Spring 的版本不兼容,不用担心,Spring早就替你想好了,当你引入 spring-boot-dependencies ,他里面基本涵盖了市面上常用的组件,相对于的版本也都给你定义好了。:默认值,compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。

2023-05-05 17:34:18 710

原创 SpringBoot 接入chatGPT API

ChatGPT平台已经为技术提供了一个入口了,作为一个Java程序员,我们第一时间想到的就是快速开发一个应用,接入ChatGPT的接口,很简单的就可以实现了。(3)官方 API 文档链接:https://platform.openai.com/docs/api-reference/authentication。官网链接地址:https://platform.openai.com/docs/libraries/community-libraries。// 创建一个定时器,每隔一段时间打印一个字符。

2023-04-20 16:34:54 954

原创 12种优雅的接口优化方案

批量操作数据库,这个很好理解,我们在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,避免多次IO。//批量入库 batchInsert();

2023-04-20 16:27:44 401

原创 线程池提高百万级数据插入效率

spring容器注入线程池bean对象。模拟多线程 测试 2000003条数据。创建多线程批量插入具体业务方法。耗时如下:耗时1.67分钟。创建异步线程 业务类。

2023-04-20 16:23:12 141

原创 统一登录验证&统一返回格式&统一异常处理的实现

登录拦截器// 登录判断业务 HttpSession session = request . getSession(false);if(session!= null) {} log . error("当前用户没有访问权限");} }返回 boolean 类型。相当于一层安保:为 false 则不能继续往下执行;为 true 则可以。

2023-03-16 17:37:19 664

原创 AList搭建网盘挂载硬盘并挂载网络资源(傻瓜式自配置教程)

Alist 在网页上查看和管理还是非常麻烦的,因此可以映射到本地磁盘,让网盘的使用如同本地磁盘一样(而且还不占物理硬盘的空间,岂不美哉?一个支持多种存储的文件列表程序,可以实现多种网盘挂载为硬盘,并可以挂载不限量的网络资源,启动 alist 服务。

2023-03-08 16:10:42 20296 9

原创 SpringBoot动态数据源实现详解

在annotation包中,添加数据源注解DS@Target({/*** 数据源名称定义数据源切面,此切面可以针对使用了DS注解的方法或者类,进行数据源切换。(1)添加aop依赖

2023-03-07 10:34:13 675

原创 最简单的SpringBoot+MyBatis多数据源实现

随着应用用户数量的增加,相应的并发请求的数量也会跟着不断增加,慢慢地,单个数据库已经没有办法满足频繁的数据库操作请求了,在某些场景下,可能会需要配置多个数据源,使用多个数据源(例如实现数据库的读写分离)来缓解系统的压力等,同样的,Springboot官方提供了相应的实现来帮助开发者们配置多数据源,一般分为两种方式(目前所了解到的),分包和AOP。并分别插入两条记录,为了方便对比,其中testdatasource1为芳年25岁的张三, testdatasource2为芳年30岁的李四。大功告成~ ~ 了吗?

2023-03-06 16:10:32 2224 1

原创 10分钟搞定win11安卓子系统

与虚拟机或第三方安卓模拟器相比,微软官方的Windows 11安卓子系统在性能和与系统的集成上更为优越!非常实用,可以让安卓生态软件完美扩展到PC。相信随着Windows 11正式版的发布,以及Android子系统的不断完善和优化,将为用户打开一扇通往安卓与Windows紧密合作的新世界的大门。就像苹果Mac可以安装iOS应用一样,未来在PC上安装安卓移动应用将非常普遍。

2023-03-02 14:06:12 30839 13

原创 自定义线程池ThreadPoolExecutor详解

ThreadPoolExecutor 线程池的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,那么超出数量的线程排队等候,等其他线程执行完毕再从队列中取出任务来执行。

2023-03-01 10:53:20 510

原创 MySQL主从复制+读写分离详细方案

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库mysql的主从复制原理和读写分离的原理;MySQL有四种同步方式:异步复制(Async Replication)、同步复制(sync Replication)、半同步复制(Async Replication)、增强半同步复制(lossless Semi-Sync Replication);

2023-03-01 10:51:09 497

原创 MySQL慢查询日志使用

mysql慢日志查询,不要被网上一些关于mysql慢查询的相关文章所迷惑——他们对此参数的解释是(如果设置了,所有没有使用索引的查询也将被记录),我看了就奇怪了,这不和参数log-queries-not-using-indexes的功能是一样的么,于是百度之,可笑的是,即然有很多文章都是类似描述,这些只知道copy的站长或那些只顾转载的朋友,你要我怎么说你们呢。通过查看慢查询日志可以发现,很乱,数据量大的时候,可能一天会产生几个G的日志,根本没有办法去清晰明了的分析。所以,这里,采用工具进行分析。

2023-03-01 10:49:42 451

原创 分布式任务调度:XXL-JOB框架部署&使用&原理详解

分布式任务调度:XXL-JOB框架部署&使用&原理详解

2022-04-05 10:12:41 2133

原创 【代码生成器】Java项目代码生成器核心逻辑

Java项目代码生成器核心逻辑

2022-03-17 23:26:25 1413

原创 Arthas 阿里诊断工具快速诊断java线上问题

Arthas 阿里诊断工具快速诊断java线上问题1. 安装2. 快速诊断2.1 快速诊断流程dashboardthreadjad★ watch★ trace3. 高级命令4. IDEA 插件参考资料(官网): https://arthas.gitee.io/index.html参考资料(阿里云官方CSDN): Arthas 使用的四种方式参考资料: 使用Arthas五分钟解决一个问题1. 安装下载并启动:curl -O https://arthas.aliyun.com/arthas-boo

2022-02-19 13:43:42 896

原创 40行代码完全理解java线程池工作流程

40行代码完全理解java线程池工作流程线程测试Demo线程测试Demo结论在注释中,建议自己跑一跑。import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;public class Th

2021-12-02 17:48:13 378

原创 MySQL解析json字段以及遍历json字段

MySQL解析json字段以及遍历json字段MySQL 5.7版本以后支持json格式的字段类型定义、存储和使用,最近做BI开发,开发把所需数据用JSON的形式存储在字段中,本次记录下MySQL解析JSON。官方参考:https://dev.mysql.com/doc/refman/8.0/en/json.html一般来说,主要是提取json字段的值,所以update就不写了,提取select json使用的参数是:JSON_EXTRACTJSON_EXTRACT参数使用方式是:JSON_EXT

2021-09-11 17:25:21 6966

原创 MyBatis-Plus 的高级使用

MyBatis-Plus 的高级使用1. 快速入门2. 核心功能2.1 注解2.2 CRUD接口2.3 Service CRUD接口2.4 条件构造器2.5 更新操作2.6 删除操作2.7 自定义SQL2.8 分页查询2.9 AR模式2.10 主键策略2.11 配置2.12 代码生成器3. 高级功能3.1 逻辑删除3.2 自动填充3.3 乐观锁插件3.4 性能分析插件3.5 多租户SQL解析器3.6 动态表名SQL解析器4. 总结MyBatis-plus 是一款 Mybatis 增强工具,用于简化开发,提

2021-06-27 10:54:13 2793

原创 Spring Cloud Alibaba Nacos2.0注册中心部署与服务注册使用

Spring Cloud Alibaba Nacos 注册中心部署与服务注册1. Nacos 简介1.1 为什么需要注册中心1.2 主流注册中心对比1.3 Nacos 2.02. Nacos 部署启动3. Nacos 服务注册3.1 Provider 服务3.2 Consumer 服务3.3 Nacos 下的服务间通信4. 服务注册和管理4.1 服务注册查看4.2 服务流量权重和流量保护4.3 服务元数据管理4.4 服务优雅上下线4.5 监听者查询4.6 配置实例权重4.7 配置保护阈值参考资料:Nac

2021-04-06 08:37:29 1523 3

原创 Sping Cloud Feign 配置、使用和源码分析

Sping Cloud Feign 配置、使用和源码分析1. 简介2. 基本使用2.1 Feign 依赖2.2 Feign 注解2.3 Feign 测试2.4 Feign 配置(可选)3. 源码分析3.1 原理和源码详解3.2 请求是如何转到 Feign 的?3.3 Feign 是怎么工作的?3.4 Feign 的负载均衡策略?官网文档:https://spring.io/projects/spring-cloud-openfeign1. 简介Spring Cloud OpenFeign : Decl

2021-03-07 18:22:45 307

原创 IDEA-生成Javadoc外部文档

IDEA-生成Javadoc外部文档IDEA中,点击 Tools-> Generate JavaDoc,这样会打开生成 javadoc 文档的配置页面。进行配置:标注的是重要的部分,从上往下分别是配置 javadoc 的范围,输出文件夹路径以及命令行参数。这里的命令行参数很重要,因为只有使用 utf-8 编码才能保证生成时可以正常处理中文字符,所以一定要加上:-encoding utf-8 -charset utf-8还可以配置那些注解需要生成,哪些权限类(private、

2021-02-17 22:23:51 377

原创 SpringBoot+自定义注解+Redis实现分布式锁

SpringBoot+自定义注解+Redis实现分布式锁1. 自定义注解+动态代理:日志2. 自定义注解+AOP:分布式锁2.1 Redis分布式锁理论2.2 Redis整合 封装服务类2.3 自定义注解2.4 Aop实现注解环绕通知、获取注解参数、加锁解锁2.5 ThreadLocal实现可重入锁1. 自定义注解+动态代理:日志@Target(ElementType.METHOD) //该注解只能作用在方法上@Retention(RetentionPolicy.RUNTIME) //运行时可被

2021-02-17 22:21:25 575

原创 ElasticSearch用法和IK分词器

ElasticSearch用法和IK分词器ElasticSearch 是什么?为什么选择ES?ES提供的能力ES常用使用场景ES架构ES 基本概念ES 数据类型ElasticSearch , Kibana 和 elasticsearch-head第一个HelloWorld(v6.8)分词器常见入门问题1. ES 6.8 IK分词器bug2. 日期格式设置错误3. 设置匹配度 优化查询结果ES的Java客户端选择1. ES提供了两个JAVA REST client 版本2. TransportClient3

2021-02-17 22:19:03 619

原创 Spring 事务嵌套和异常捕获的问题和解决方案

事务嵌套和异常捕获的问题和解决方案1. 无嵌套的正常事务2. 方法A调用带事务的方法B3. 加入异常捕获处理的事务4. 事务回滚的注意事项1. 无嵌套的正常事务public class C{ @Transactional public void a(){ //TODO }}【结论】:出现异常,正常回滚。原因:事务的 ACID 特性中的 C,Consistency 一致性,事务内有操作失败时则数据将全部回滚到修改前的状态。2. 方法A调用带事务

2021-01-23 00:56:19 2298 3

原创 Java Stream 流高级使用全解

Java Stream 流高级使用全解一 基本汇总1. 创建流2. 中间操作3. 终止操作二 经验累积1. 统计1.1 取最大值1.2 取最小值1.3 取总和值1.4 取平均值2. 过滤2.1 获取最近时间3. 排序3.1 根据字段排序4. 分组4.1 获取字段出现次数4.2 过滤并获取指定字段列表Java 强大的 stream 流处理,必会!无状态:指元素的处理不受之前元素的影响;有状态:指该操作只有拿到所有元素之后才能继续下去。非短路操作:指必须处理所有元素才能得到最终结果;短路操作:指遇

2020-12-26 18:38:56 3904 3

原创 Java 线上问题快速排查思路(最全)

Java 线上问题快速排查思路-最全一 服务器层面1.1 磁盘1.1.1 问题现象1.1.2 排查思路1.1.2.1 利用 df 查询磁盘状态1.1.2.2 利用 du 查看文件夹大小1.1.2.3 利用 ls 查看文件大小1.1.3 相关命令1.1.3.1 df1.2 CPU过高1.2.1 问题现象1.2.2 排查思路1.2.2.1 利用 top 查询CPU使用率最高的进程1.2.3 相关命令1.2.3.1 top二 应用层面2.1 Tomcat假死案例分析2.1.1 发现问题2.2.2 查询日志2.2.

2020-12-26 18:36:34 1358

原创 Jmeter压力测试工具使用详解

Jmeter压力测试工具使用详解一、下载二、环境变量三、压测步骤四、请求参数随机数参考资料:http://www.jmeter.com.cn/category/jmeter-book一、下载进入官网:http://jmeter.apache.org/download_jmeter.cgi1.第一步进入官网如下图2.选择进行下载,下载下来为一个压缩包,解压即可。3.下载jmeter5.3对应jdk1.8的版本。然后就进行解压。个人认为要注意3点:1)解压之后压缩包叫apache-jmete

2020-12-26 18:34:28 2404 2

原创 MySQL EXPLAIN查询计划详解

MySQL EXPLAIN查询计划详解1. EXPLAIN简介2. 执行计划各字段含义2.1 id2.2 type2.3 possible_keys 和 key2.4 key_len2.5 rows2.6 Extra1. EXPLAIN简介使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。 通过explain我们可以获得以下信息:表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表

2020-12-26 18:32:17 242

原创 18条效率至少提高3倍的MySQL技巧

1、EXPLAIN做MySQL优化,我们要善用EXPLAIN查看SQL执行计划。type列,连接类型。一个好的SQL语句至少要达到range级别。杜绝出现all级别。key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式。key_len列,索引长度。rows列,扫描行数。该值是个预估值。extra列,详细说明。注意,常见的不太友好的值,如下:Using filesort,Using temporary2、SQL语句中IN包含的值不应过多MySQL对于IN做了相应的优化

2020-09-25 16:00:01 463

原创 Java 8 stream 流获取 list 中最大值、最小值、总和值、平均值

// liststatic List<Employee> empList = new ArrayList<Employee>(); private static void initEmp(){ empList.add(new Employee("张三",30)); empList.add(new Employee("张三1",96)); empList.add(new Employee("张三2",23)); empList.add(new Employee("张

2020-09-25 15:56:23 28654

原创 IDEA 中自动保存的 database console 控制台内容记录

用过了 SQLyog 以及 Navicat 对字段的自动补齐还是不够好。所以坚持使用 IDEA 自带的 Database 数据库客户端,自带控制台 console。语句补全:字段补全:但需要将 临时的 console 作为一个 sql记事本 的 客户端来用,所以要找到 IDEA 存储它的位置,不至于丢失掉以前的记录。花了点功夫找到它!藏身之处:...

2020-09-23 09:55:20 6465 6

JVM-Java内存规范.png

Java-JVM内存规范(详细完整思维导图),包含物理内存与虚拟内存、内核空间与用户空间、java中需要使用的内存组件、jvm内存结构、jvm内存回收策略、JVM参数等...

2020-05-28

MVC模式用JSP实现用户管理(增删改查)核心逻辑图示.png

MVC模式 + JSP + 三层架构设计,实现对用户的登陆、登出、新增(注册)、删除用户、修改用户、查询用户、以及查询所有用户的基本核心逻辑。

2020-05-09

Filter过滤器实现自动登陆核心逻辑.png

Java中Servlet使用Filter过滤器实现自动登陆核心逻辑流程图(基本可以直译代码),特此分享供大家学习交流使用,如有不足之处请私信或者评论纠正。

2020-05-09

空空如也

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

TA关注的人

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