
java
文章平均质量分 76
有一只柴犬
公众号“柴比特 ChaiBit”创作者,优快云全栈新星创作者,博客专家,阿里云专家博主。
管住嘴,迈开腿。一个努力接受现在的自己的程序员。保持技术保温的同时,分享自己的学习知识。
个人开源Github地址:https://github.com/Shamee99
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
开源声明:只是一个随便写写的管理系统(认真脸)
调侃归调侃,Chai Admin毕竟是自己亲生的。还是投入了一些时间精力来打磨这个项目,并且计划一直持续更新迭代并精心维护下去的。虽然它可能还不够完美,但我相信它能为开发者提供一个有价值的参考。⭐ 如果这个项目对你有帮助,请给它一个 Star!⭐。原创 2025-07-19 21:50:11 · 1032 阅读 · 7 评论 -
Spring Boot 4 震撼发布!诸多特性一览!
Spring Boot 4.0-SNAPSHOT版本已发布,带来多项重大更新:要求Java 17及以上版本,集成Spring Framework 7.0;将GraalVM原生镜像支持升级为正式特性,显著提升启动速度和降低内存占用;支持JDK 21虚拟线程,优化高并发性能;新增API版本控制功能;采用声明式HTTP客户端简化远程调用。同时全面升级至Jackson 3.x,强化Null安全,并迁移至Jakarta EE 10命名空间。目前版本尚不稳定,生产环境建议继续使用3.5.0-GA版本。原创 2025-05-31 17:58:24 · 1414 阅读 · 10 评论 -
Java Agent(三)、ASM 操作字节码入门
在上一篇Javassist入门中,我们介绍了如何使用Javassist操作Java字节码,Javassist主要是利用Java源码以及反射机制来实现的。而今天将要介绍另一种能操作Java字节码的技术,也就是ASM。他相比Javassist更灵活,提供了更细粒度的控制。原创 2025-01-14 20:11:00 · 1891 阅读 · 17 评论 -
Java Agent(二)、Javassist入门
在 Java Agent 开发中,动态字节码增强是一项核心技术,而 Javassist 是一个高效且易用的字节码操作库。相比其他工具(如 ASM),Javassist 的语法更加接近 Java 源码,降低了学习成本,非常适合作为初学者的入门工具。原创 2025-01-01 11:24:59 · 2012 阅读 · 9 评论 -
Java Agent(一)、 初步认识Instrumentation
Instrumentation 是 Java SE 5 引入的一套 API,它允许开发者在运行时修改类的字节码。Java Instrumentation 可以实现在方法插入额外的字节码从而达到收集使用中的数据到指定工具的目的。原创 2024-12-10 20:53:54 · 2145 阅读 · 15 评论 -
POI实现根据PPTX模板渲染PPT
项目中有时候需要实现导出ppt格式报告,生成ppt文件的方式有很多,常见的有poi,aspose,pptx4j。适合需要处理PPT基础功能的情况,免费开源。适合企业级应用,功能强大但收费。较低层次的PPT操作工具,适合需要与docx4j一同使用的项目。现在基本项目中都依赖了poi,因此这里首选poi来实现。基本的实现包括:文字占位替换,表格生成,报表生成(包括饼图,柱状图),超文本连接替换。原创 2024-11-12 22:23:20 · 2434 阅读 · 8 评论 -
15. Springboot集成Redis
Redis作为一款高性能的NoSQL数据库,在现代应用程序中扮演着越来越重要的角色。它常用于缓存、消息队列、分布式锁等场景。Spring Boot作为当下流行的Java开发框架,提供了非常便捷的方式集成Redis,使得开发者能够快速构建基于Redis的应用。本文将深入探讨Spring Boot集成Redis的方方面面,包括基础配置、高级特性、最佳实践等,并通过丰富的示例代码帮助读者更好地理解。原创 2024-09-15 11:35:53 · 1575 阅读 · 2 评论 -
程序OOM后,还能正常访问吗?
今天要探讨的是最近不知道为什么突然间火起来的面试题:当JAVA程序出现OOM之后,程序还能正常被访问吗?答案是可以的,很多时候他并不会直接导致程序崩溃,而是JVM会抛出一个error,告知你程序内存溢出了。当然也要分操作系统。原创 2024-05-19 21:58:52 · 2020 阅读 · 2 评论 -
07. HTTP接口请求重试怎么处理?
HTTP接口请求重试是指在请求失败时,再次发起请求的机制。在实际应用中,由于网络波动、服务器故障等原因,HTTP接口请求可能会失败。为了保证系统的可用性和稳定性,需要对HTTP接口请求进行重试。原创 2024-01-02 20:19:53 · 3633 阅读 · 41 评论 -
【JUC基础】01. 初步认识JUC
前段时间,有朋友跟我说,能否写一些关于JUC的教程文章。本来呢,JUC也有在我的专栏计划之内,只是一直都还没空轮到他,那么既然有这样的一个契机,那就把JUC计划提前吧。那么今天就重点来初步认识一下什么是JUC,以及一些基本的JUC相关基础知识。原创 2023-05-01 16:02:09 · 1271 阅读 · 45 评论 -
【JUC基础】03. 几段代码看懂synchronized
程序员经常听到“并发锁”这个名词,而且实际项目中也确实避免不了要加锁。那么什么是锁?锁的是什么?今天文章从8个有意思的案例,彻底弄清这两个问题。原创 2023-04-12 22:02:55 · 350 阅读 · 27 评论 -
无聊小知识.04 以下代码会输出什么?
今天又学到了一个无聊的小知识。今天同事给我看了一段代码,然后这段简单的代码,我却陷入了沉思。原创 2023-04-11 08:25:53 · 701 阅读 · 14 评论 -
【Spring源码】Spring事务原理
事务是访问并可能更新数据库中各种数据项的一个程序执行单元,这个操作单元要么全部执行成功,要么全部执行失败。同时也是恢复和并发控制的基本单位。原创 2023-04-05 10:46:16 · 1967 阅读 · 31 评论 -
NIO消息黏包和半包处理
我们在进行NIO编程时,通常会使用缓冲区进行消息的通信(ByteBuffer),而缓冲区的大小是固定的。那么除非你进行自动扩容(Netty就是这么处理的),否则的话,当你的消息存进该缓冲区就会存在消息边界的问题,典型的边界问题就是黏包和半包现象。原创 2023-04-04 08:14:30 · 750 阅读 · 16 评论 -
【Spring源码】循环依赖如何处理?
面试官:“看过Spring源码吧,简单说说Spring如何解决循环依赖问题?”大神仙:“Spring利用到了三级缓存来解决循环依赖问题”。面试官:“三级缓存是怎么处理的?为什么一定得是三级缓存?三级缓存别是对应存储的是什么?”大神仙:“......”原创 2023-04-02 19:14:55 · 510 阅读 · 17 评论 -
【Spring源码】讲讲Bean的生命周期
面试官:“看过Spring源码吧,简单说说Spring中Bean的生命周期”原创 2023-04-01 14:01:06 · 1566 阅读 · 28 评论 -
【Spring源码】 BeanFactory和FactoryBean是什么?
面试官:“看过Spring源码吧,简单说说Spring中BeanFactory和FactoryBean的区别是什么?”原创 2023-03-30 22:19:20 · 1290 阅读 · 18 评论 -
IDEA插件开发.02之“异味”代码收集插件
许久没更新IDEA插件开发系列了。最近刚好在汇总日常开发中常见的代码“异味”,共享文档复制黏贴略显麻烦,所以想着是否可以搞一个IDEA插件来帮忙收集常见代码,毕竟IDEA作为后端程序员必备的开发工具,显然会方便很多。原创 2023-03-08 20:35:48 · 1231 阅读 · 6 评论 -
IDEA这些配置,简单高效
经常使用的idea配置项,搞好这些配置,编码轻松又惬意原创 2023-03-04 10:40:02 · 604 阅读 · 4 评论 -
无聊小知识.02 Springboot starter配置自动提示
Springboot项目配置properties或yaml文件时候,会有很多spring相关的配置提示。这个是如何实现的?如果我们自己的配置属性,能否也自动提示?原创 2023-03-03 21:24:38 · 1342 阅读 · 2 评论 -
那些年用过的IDEA插件
今天和大家分享一下经常使用的IDEA的插件,希望有所帮助。原创 2023-03-01 22:42:38 · 2671 阅读 · 4 评论 -
OSGi跨bundle调用,jaxb-impl异常
项目中使用osgi架构,在处理xml解析的实现中使用了jdk自带的Javax.xml.bind包。在单模块结构工程中都没有问题,但是引到插件化模式工程结构中,会提示找不到JaxbContext的工厂类而报错。原创 2023-02-27 13:16:06 · 721 阅读 · 1 评论 -
单元测试的正确姿势
软件测试是软件质量保证的关键步骤。越早发现软件中存在的问题,修复问题的成本就越低,软件质量也就越高,软件发布后的维护费用越低。为了能更好的保障软件质量,制定统一的系统自测指南,形成统一的流程达到此目标。原创 2023-02-27 08:58:21 · 568 阅读 · 0 评论 -
Junit4&Junit5对比
Junit是Java编程语言的单元测试框架,用来编写单元测试代码。随着Junit5的盛行,与Junit4有何差异。原创 2023-02-23 20:50:39 · 2460 阅读 · 0 评论 -
无聊小知识01.serialVersionUID的作用
java编码过程中,经常需要对象序列化和反序列化。对象默认要实现Serializable,同时声明serialVersionUID。那么一定要声明serialVersionUID吗?为什么?原创 2023-02-20 22:50:14 · 701 阅读 · 0 评论 -
线上问题排查总结
系统异常排查流程原创 2023-01-03 22:20:36 · 814 阅读 · 2 评论 -
ByteBuffer中的flip()、clear()、compact()
netty读取文件流的简单demo:public static void main(String[] args) { try (FileChannel channel = new FileInputStream("data.txt").getChannel()){ // 定义缓冲区 allocate分配大小 ByteBuffer buffer = ByteBuffer.allocate(10); while(tr原创 2022-01-16 15:54:41 · 5601 阅读 · 4 评论 -
windows系统启动java程序限制cpu核心数
windows上限制java程序限制cpu核心数的方式:1、任务管理操作任务管理器-->详细信息-->找到进程,鼠标右键-->设置相关性-->选择使用cpu核心。这种方式是临时方案,因为在程序重启后,这里的设置会被还原,即默认还是充分使用全部cpu核心。2、利用bitsum通常我们启动一个java进程为:java -jar xxx.jar。这里添加命令start /affinity 0x0000000000000003 java -ajr xxx.j原创 2021-10-10 20:37:42 · 5337 阅读 · 0 评论 -
OSGI MANIFEST.MF详解
什么是MANIFEST.MF?MANIFEST.MF文件存储的实际上是Bundle的元数据,可以定义Bundle的各种特征,同时能更好的对Bundle进行标识同时帮助用户对Bundle进行理解。MANIFEST.MF文件格式:1、属性声明一般为:name:value2、换行缩进一个空格3、每个子句(clause)进一步分解为一个目标(target)和一组由分号分隔的name-value对参数(parameter)Manifest-Version: 1.0Bundle...原创 2021-09-09 14:55:29 · 973 阅读 · 0 评论 -
Mybatis拦截器做数据范围权限DataScope
目录业务场景:思路:步骤:1、定义Mybatis拦截器DataScopeInterceptor2、定义注解DataScope3、springboot装配该拦截器4、使用业务场景:根据业务需要,这里将角色按照数据范围做权限限定,提供三级权限分别为:1、全部:可以查看所有的数据2、自定义:按照组织架构,可以查看当前所匹配的组织架构数据3、个人:仅能查看由自己创建,或者数据流转到自己节点的数据思路:1、定义Mybatis拦截器DataScopeInte.原创 2021-05-10 10:59:24 · 7849 阅读 · 1 评论 -
vue实现按钮功能级权限控制
文章目录1、store下新建一个js,或者直接使用user.js2、合适的位置接口获取权限信息,比如登录接口3、定义按钮鉴权标签,这里采用插件的形式4、安装插件,在main.js中5、使用,如List.vue中1、store下新建一个js,或者直接使用user.jsimport db from '@/utils/localstorage'const state = { permissions: db.get('PERMISSIONS') || [],}const mutations =原创 2021-04-20 20:19:29 · 1798 阅读 · 0 评论 -
简单理解浅克隆和深克隆
定义浅克隆(Shadow Clone): 拷贝对象时仅仅拷贝对象本身,而不拷贝对象包含的引用指向的对象;对于数据类型是基本数据类型的成员变量,会直接进行值传递,也就是将该属性值复制一份给新的对象。深克隆(Deep Clone): 将原型对象中所有类型,无论是值类型还是引用类型,都复制一份给克隆对象。浅克隆的实现:import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Dat原创 2021-03-01 14:36:49 · 531 阅读 · 0 评论 -
简单理解CAS
文章目录CASCAS算法:CAS(V, E, N)。基于CAS的线程安全AtomicIntegerCAS缺点1、CPU开销大2、只能保证一个共享变量的原子操作3、ABA问题ABA问题解决1、版本号机制2、带有时间戳的对象引用 AtomicStampReferenceCASCAS(Compare And Set)比较交换,是一种无锁算法。即不使用锁的方式来实现多线程同步。由于是无锁的策略,也就是在没有线程被阻塞的情况下实现变量同步,所以也叫非阻塞同步(Non-blocking Synchronizatio原创 2020-12-19 15:09:47 · 1016 阅读 · 2 评论 -
单例模式的8种写法
1、饿汉式,线程安全public class Singleton { /** * 优点:写法简单,类装载的时候完成实例化,线程安全 * 缺点:类装载的时候就完成实例化,没有Lazy Loading,如果没有被使用,会造成内存浪费 */ private static final Singleton INSTANCE = new Singleton(); public static Singleton getInstance(){原创 2020-12-08 15:17:01 · 240 阅读 · 0 评论 -
Synchroinzed对Integer的问题
先来看两段代代码:1、package com.thread.test.synchronize;/** * Created by shamee-loop on 2020/12/6. */public class SynchronizedErrorOnInteger implements Runnable { public static Integer count = 0; static SynchronizedErrorOnInteger instance = new Sy原创 2020-12-06 17:14:00 · 296 阅读 · 2 评论 -
XSS攻击及AntiSamy防御
什么是xssxss:跨站脚本攻击(Cross Site Scripting),因为跟样式css混淆,所以习惯缩写为xss。通过一些方法注入恶意指令代码到网页,使其加载并执行攻击者恶意的网页程序。xss类型1、反射型xss:通过get或者post等方式,向服务端输入数据。如果服务端不进行处理(过滤,验证,编码等),直接将信息呈现出来,可能会造成反射型xss。2、存储型xss:服务端对注入的恶意脚本没有经过验证存入数据库,每次调用数据库都会将其渲染在浏览器上。则可能为存储型xss。AntiSamy防御原创 2020-10-20 16:20:08 · 1107 阅读 · 0 评论 -
Centos应用“Cannot allocate memory”的解决方案
在启动一个Springboot工程时,抛出一项“Cannot allocate memory”异常,很明显,是因为内存分配原因导致的OOM异常导致JVM宕掉。跟随log,查看JVM hs_err_pid24442.log文件。这里解释了可能的原因以及可能的解决措施:可能的原因: #系统已超出物理RAM或交换空间 #在32位模式下,进程大小受到限制可能的解决方案: #减少系统上的内存负载 #增加物理内存或交换空间 #检查交换后备存储器是否满原创 2020-09-07 12:50:47 · 4662 阅读 · 0 评论 -
@Data注解导致的StackOverflowError
场景Springboot项目中使用Lombok,实体采用@Data注解。运行过程中报Caused by: java.lang.StackOverflowError。@Data到底做了啥?1、帮助我们生成Get/Set方法,简化javabean的代码冗余2、帮助我们重写equals方法,3、帮助我们重写hashCode4、大大提高了JavaBean的执行效率(?)StackOverflowError是哪里抛出的异常?通常一看到StackOverflowError,我们立马就想到是JVM在执行j原创 2020-07-15 20:04:05 · 1321 阅读 · 0 评论 -
jdk之keytool生成ssl证书,搭建tomcat+https协议
一、 什么是HTTPS在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网页时候使用的一种协议。HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全。为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。SSL目前的版本是3.原创 2016-12-01 16:05:22 · 16065 阅读 · 8 评论 -
Vue-cli打包线上Nginx访问,css样式无效解决
问题重现:vue-cli-service build通过vue-cli-server build打包,将生成的dist目录发布到服务器,通过nginx代理访问,发现样式无效。百度寻找解决方案,要么是安装css-loader加载器,要么是修改config/index.js的assetsPublicPath为./但是我发现本地是正常的,并且测试服务器也是正常的。而且我的css文件是可以正常拉取的,所以并不是路径的问题。在F12发现控制台警告:发现提示的很明显, 就是浏览器渲染...原创 2020-07-02 17:31:14 · 1867 阅读 · 0 评论