![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 74
小星星*
举一反三 见微知著
展开
-
Spring bean的全生命周期
原创 2024-07-01 22:03:02 · 114 阅读 · 0 评论 -
【jvm从入门到实战】(十) 实战篇-内存调优
在Java中如果不再使用一个对象,但是该对象依然在GC ROOT的引用链上,这个对象就不会被垃圾回收器回收,这种情况就称之为内存泄漏。内存泄漏绝大多数情况都是由堆内存泄漏引起的。少量的内存泄漏可以容忍,但是如果发生持续的内存泄漏,就像滚雪球雪球越滚越大,不管有多大的内存迟早会被消耗完,最终导致的结果就是内存溢出。但是产生内存溢出并不是只有内存泄漏这一种原因:发现问题-通过监控工具尽可能早发现内存变大的现象、诊断原因-通过分析工具诊断产生的原因然后定位到问题代码、修复问题、测试验证。原创 2023-12-20 00:12:57 · 1117 阅读 · 0 评论 -
【jvm从入门到实战】(九) 垃圾回收(2)-垃圾回收器
线程不共享区:程序计数器、Java虚拟机栈、本地方法栈,不需要回收,跟随线程的生命周期随着线程回收而回收线程共享区域:主要回收堆区域。方法区一般不需要回收,JSP等技术会通过回收类加载器去回收方法区。原创 2023-12-19 23:47:36 · 1199 阅读 · 0 评论 -
【JVM从入门到实战】(八)垃圾回收(1)
Java中为了简化对象的释放,引入了自动的垃圾回收(简称GC)机制。通过垃圾回收器来对不再使用的对象完成自动的回收,垃圾回收器主要负责对【堆】上的内存进行回收。其他很多现代语言比如都拥有自己的垃圾回收器。自动垃圾回收java自动根据对象是否使用由虚拟机来回收对象• 优点:降低程序员实现难度、降低对象回收bug的可能性• 缺点:程序员无法控制内存回收的及时性手动垃圾回收C\C++由程序员编程实现对象的删除• 优点:回收及时性高,由程序员把控回收的时机。原创 2023-12-18 00:23:16 · 931 阅读 · 0 评论 -
【JVM从入门到实战】(七)Java内存区域
程序计数器、Java虚拟机栈、本地方法栈、方法区、堆每个线程会通过程序计数器记录当前要执行的的字节码指令的地址程序计数器可以控制程序指令的进行,实现分支、跳转、异常等逻辑。虚拟机栈采用栈的数据结构来管理方法调用中的基本数据(局部变量、操作数等),每一个方法的调用使用一个栈帧来保存。堆中存放的是创建出来的对象,这也是最容易产生内存溢出的位置方法区中主要存放的是类的元信息,同时还保存了常量池。原创 2023-12-15 01:53:55 · 1038 阅读 · 0 评论 -
【JVM从入门到实战】(六)类加载器的双亲委派机制
一个Tomcat程序中是可以运行多个Web应用的,如果这两个应用中出现了相同限定名的类,比如Servlet类,Tomcat要保证这两个类都能加载并且它们应该是不同的类。如果不打破双亲委派机制,当应用类加载器加载Web应用1中的MyServlet之后,Web应用2中相同限定名的MyServlet类就无法被加载了。Tomcat使用了自定义类加载器来实现应用之间类的隔离。每一个应用会有一个独立的类加载器加载对应的类。下面2图为双亲委派机制的核心方法自定义类加载器的父类是AppClassLoader。原创 2023-12-13 23:50:15 · 1313 阅读 · 0 评论 -
【JVM从入门到实战】(五)类加载器
类加载器(ClassLoader)是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术。类加载器只参与加载过程中的字节码获取并加载到内存这一部分。原创 2023-12-13 00:17:00 · 604 阅读 · 0 评论 -
【JVM从入门到实战】(四)类的生命周期
类的生命周期描述了一个类加载连接初始化使用卸载的整个过程。原创 2023-12-13 00:05:31 · 1169 阅读 · 0 评论 -
【JVM从入门到实战】(二)字节码文件的组成
字节码中的方法区域是存放字节码指令的核心位置,字节码指令的内容存放在方法的Code属性中。答:应该是1吧,i++优先级高,先执行之后将返回结果1赋值给 i,所以最终 i应该是1。文件是无法通过文件扩展名来确定文件类型的,文件扩展名可以随意修改,不影响文件的内容。软件使用文件的头几个字节(文件头)去校验文件的类型,如果软件不支持该种类型就会出错。操作数栈是临时存放数据的地方,局部变量表是存放方法中的局部变量的位置。(容易引发其他的兼容性问题,并且需要大量的测试)面试官:这个答案是不对的,最终i的值还是0。原创 2023-12-12 00:13:54 · 503 阅读 · 0 评论 -
【JVM入门到实战】(三) 查看字节码文件的工具
小李的团队昨天对系统进行了升级修复了某个bug,但是升级完之后发现bug还是存在,小李怀疑是因为没有把最新的字节码文件部署到服务器上,请使用阿里的arthas去确认升级完的字节码文件是不是最新的。jclasslib也有Idea插件版本,建议开发时使用Idea插件版本,可以在代码编译之后实时看到字节码文件内容。本地文件可以使用jclasslib工具查看,开发环境使用jclasslib插件。原创 2023-12-12 00:22:55 · 679 阅读 · 0 评论 -
【JVM从入门到实战】(一) 字节码文件
JVM 全称是 Java Virtual Machine,中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。JVM到底是什么?JVM 全称是 Java Virtual Machine,中文译名 Java虚拟机,是一个运行在计算机上的程序,他的职责是运行Java字节码文件。JVM的三大核心功能是什么?JVM 包含内存管理、解释执行虚拟机指令、即时编译三大功能。常见的JVM虚拟机有哪些?原创 2023-12-11 23:52:11 · 691 阅读 · 0 评论 -
【SpringCloud】Gateway服务网关
过滤器的作用是什么?① 对路由的请求或响应做加工处理,比如添加请求头② 配置在路由下的过滤器只对当前路由的请求生效defaultFilters的作用是什么?① 对所有路由都生效的过滤器需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:参数中是否有authorization,authorization参数值是否为admin如果同时满足则放行,否则拦截实现:在gateway中定义一个过滤器。原创 2023-08-06 14:11:53 · 786 阅读 · 0 评论 -
【SpringCloud】Feign远程调用
使用Feign的步骤:① 引入依赖② 添加注解③ 编写接口④ 使用中定义的方法代替RestTemplate类型作用说明修改日志级别包含四种不同的级别:NONE、BASIC、HEADERS、FULL响应结果的解析器http远程调用的结果做解析,例如解析json字符串为java对象请求参数编码将请求参数编码,便于通过http请求发送支持的注解格式默认是SpringMVC的注解失败重试机制请求失败的重试机制,默认是没有,不过会使用Ribbon的重试。原创 2023-08-06 14:46:17 · 270 阅读 · 0 评论 -
【SpringCloud】RabbitMQ基础
基本消息队列的消息发送流程:建立connection创建channel利用channel声明队列利用channel向队列发送消息基本消息队列的消息接收流程:建立connection创建channel利用channel声明队列定义consumer的消费行为handleDelivery()利用channel将消费者与队列绑定多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量接收publisher发送的消息。原创 2023-08-06 15:29:34 · 961 阅读 · 0 评论 -
【Mybatis】调试查看执行的 SQL 语句
Mybatis 的底层都会把 Mapper.xml 配置文件中的SQL 标签转化为基于 JDBC 执行的语句, boundSql 变量可以看到完整的 SQL 语句。记录日常开发过程中 Mybatis 调试 SQL 语句,想要查看Mybatis 中执行的 SQL语句,导致定位问题困难。找到mybatis源码中的。原创 2023-08-10 17:20:38 · 4261 阅读 · 0 评论 -
【Java多线程】CompletableFuture 异步多线程
任务时间长是因为统计指标多,而且指标是串行的方式去进行统计的,我们只需要考虑把这些指标从串行化的执行方式改成并行的执行方式,那么整个页面的时间的渲染时间就会大大的缩短, 如何让多个线程同步的执行任务,我们这里考虑使用多线程,每个查询任务单独创建一个线程去执行,这样每个统计指标就可以并行的处理了。统计报表页面涉及到的统计指标数据比较多,每个指标需要单独的去查询统计数据库数据,单个指标只要几秒钟,但是页面的指标有10多个,所以整体下来页面渲染需要将近一分钟。如果是串行化的统计方式那么总执行时间会为12秒。原创 2023-08-12 01:09:29 · 837 阅读 · 0 评论 -
【Java笔记】对象存储服务MinIO
MinIO基于Apache License v2.0开源协议的对象存储服务,可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在Windows,Linux, OS X和FreeBSD上。配置简单,基本是复制可执行程序,单行命令可以运行起来。MinIO兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。原创 2023-08-14 00:58:37 · 1661 阅读 · 0 评论 -
【java笔记】Optional类的orElse() 和 orElseGet()
乍一看,这两种方法似乎起着同样的作用。在执行较密集的调用时,比如调用 Web 服务或数据查询,这个差异会对性能产生重大影响。这个方法让我们有更丰富的语义,可以决定抛出什么样的异常,而不总是抛出。类提供了 API 用以返回对象值,或者在对象为空的时候返回默认值。这里 user 对象是空的,所以返回了作为默认值的 user2。对象都包含非空值,两个方法都会返回对应的非空值。方法,这个方法会记录一个消息并返回 User 对象。由此可见,当对象为空而返回默认对象时,行为并无差异。上面的代码中,两种方法都调用了。原创 2023-08-15 16:53:03 · 3002 阅读 · 0 评论 -
【Java笔记】分布式id生成-雪花算法
snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。随着业务的增长,有些表可能要占用很大的物理存储空间,为了解决该问题,后期使用数据库分片技术。如果数据库中该表选用ID自增策略,则可能产生重复的ID,此时应该使用分布式ID生成策略来生成ID。原创 2023-08-26 16:01:18 · 996 阅读 · 0 评论 -
【OCR识别】tess4j图片识别文字
OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。原创 2023-08-26 16:30:57 · 443 阅读 · 0 评论 -
【Kafka】Kafka Stream简单使用
kafkastream监听这个topic,每10秒进行一次流式处理,将。字符串分割,并统计每个单词出现的次数。先看下简单的kafkaStream测试。接收到消息并将多条消息进行了统一处理。来生产消息,约10秒后,看到。,发送消息到kafka中的。的topic,消费消息。)启动docker中的。消息,topic均为。应用程序,运行之前的。原创 2023-08-27 13:48:46 · 2272 阅读 · 1 评论 -
【MongoDB】Springboot中MongoDB简单使用
tips: 使用navicat Premium 15以上版本,可以连接MongoDB 查看数据。原创 2023-08-28 00:45:34 · 559 阅读 · 0 评论 -
【Mybatis】基于Mybatis插件+注解,实现敏感数据自动加解密
*** 该注解定义在类上* 插件通过扫描类对象是否包含这个注解来决定是否继续扫描其中的字段注解* 这个注解要配合EncryptTransaction注解/*** 该注解定义在类上* 插件通过扫描类对象是否包含这个注解来决定是否继续扫描其中的字段注解* 这个注解要配合EncryptTransaction注解/*** 该注解定义在类上* 插件通过扫描类对象是否包含这个注解来决定是否继续扫描其中的字段注解* 这个注解要配合EncryptTransaction注解**/原创 2023-10-12 21:31:22 · 3417 阅读 · 13 评论 -
【Mybatis】基于TypeHandler实现敏感数据加密
import cn/*** @Description typeHandler加解密处理器 将String类型的字段加密或解密/** 加工入参= null) {//加密 String encryptHex = des . encryptHex(parameter);log . info("{} ---加密为---> {}" , parameter , encryptHex);} } /** 根据列名获取返回结果,可在此方法中加工返回值= null) {原创 2023-10-15 13:34:56 · 548 阅读 · 0 评论 -
【算法笔记】深度优先遍历-解决排列组合问题-
假设袋子里有编号为1,2,…,m这m个球。现在每次从袋子中取一个球记下编号,放回袋中再取,取n次作为一组,枚举所有可能的情况。每一次取都有m种可能的情况,因此一共有mn种情况。这里我们取m = 3, n = 4,则有34种不同的情况。原创 2023-08-06 13:50:08 · 414 阅读 · 0 评论 -
WebSocket笔记
WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。原创 2023-07-20 01:03:45 · 182 阅读 · 0 评论 -
阿里云oss文件上传Java工具类
阿里云oss文件上传工具类。原创 2023-07-19 01:26:00 · 575 阅读 · 0 评论 -
Spring Cache的使用
Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。EHCacheCaffeineRedis(常用)原创 2023-07-19 19:27:25 · 1077 阅读 · 0 评论 -
Spring开发中JWT实现登录功能
JWT工具/*** 生成jwt* 使用Hs256算法, 私匙使用固定秘钥* @param secretKey jwt秘钥* @param ttlMillis jwt过期时间(毫秒)* @param claims 设置的信息* @return// 指定签名的时候使用的签名算法,也就是header那部分 SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm . HS256;原创 2023-07-19 01:23:02 · 143 阅读 · 0 评论 -
HttpClient Java工具类
HttpClient原创 2023-07-19 01:28:01 · 314 阅读 · 0 评论 -
Spring开发中自定义注解的使用
以自定义注解AutoFill为例,使用**AOP切面编程**,实现功能增强,来完成公共字段自动填充功能。 **说明如何自定义注解,和使用注解**原创 2023-07-18 00:18:07 · 683 阅读 · 1 评论 -
小程序微信登陆实现流程
会话密钥 session_key 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥。临时登录凭证 code 只能使用一次。原创 2023-07-19 20:06:36 · 2235 阅读 · 2 评论 -
【笔记】Java中for循环遍历删除操作
阿里规约:【强制】不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁。在Java中,有些场景会需要根据条件遍历集合元素,进行删除操作。ps: 如果非要使用这种的话,可以使用倒序遍历删除。原创 2023-06-12 15:56:00 · 4359 阅读 · 0 评论 -
【笔记】mybatis大批量数据插入实践
本文测试三种方式,插入大量数据(10万以上)到mysql数据库中,有以下几种方式普通方式foreach批量插入ExecutorType.BATCH插入1 user实体类@Setter@Getterpublic class User { private Long id; private String phone; private String name;}2 IUserServicepublic interface IUserService {原创 2023-06-12 15:56:44 · 1066 阅读 · 0 评论 -
【笔记】mybatis学习
Mybatis简介MyBatis历史MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到GithubiBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Acces原创 2023-06-16 22:32:53 · 866 阅读 · 0 评论 -
RocketMQ 5.0 学习笔记
rocketmq 5.0代码 结合 spring原创 2023-03-07 20:08:05 · 1540 阅读 · 3 评论 -
【转载】HttpServletResponse对象详解
HttpServletResponse对象的介绍、应用原创 2022-11-17 02:15:59 · 123 阅读 · 0 评论 -
Java序列化和反序列化为什么要实现Serializable接口
序列化和反序列化是什么?实现序列化和反序列化为什么要实现Serializable接口?实现Serializable接口就算了, 为什么还要显示指定serialVersionUID的值?我要为serialVersionUID指定个什么值?转载 2022-08-07 16:17:22 · 177 阅读 · 0 评论