- 博客(170)
- 收藏
- 关注
原创 idea git五大操作技巧
切换到a分支,然后在git上选择show diff with workins tree。4.将b分支合并到a分支时,将多次的commit记录合并成一个新的提交记录。则刚刚commit的内容修改会被取消,且可以再次commit。3.比较当前版本和历史某个版本的代码差异。5.普通merge和压缩merge的区别。5.普通merge和压缩merge的区别。2.取消commit的文件。选择undo commit。commit 测试11。1.对比两个分支差异。
2025-02-08 17:31:43
109
原创 easyexcel读取写入excel easyexceldemo
新建test类ApplicationTests。1.新建springboot项目。新建实体类TestData。
2025-01-21 16:48:22
222
原创 easyexcel读取写入excel easyexceldemo
新建test类ApplicationTests。1.新建springboot项目。新建实体类TestData。
2025-01-21 16:45:44
566
原创 6堆(超级重点)
堆针对一个 JVM 进程来说是唯一的,也就是一个进程只有一个 JVM,但是进程包含多个线程,他们是共享同一堆空间的。从内存模型而不是垃圾收集的角度,对 Eden 区域继续进行划分,JVM 为 =每个线程分配了一个私有缓存区域= ,它包含在 Eden 空间内。多线程同时分配内存时,使用 TLAB 可以避免一系列的非线程安全问题,同时还能够提升内存分配的吞吐量,因此我们可以将这种内存分配方式称之为 =快速分配策略=。据我所知所有 OpenJDK 衍生出来的 JVM 都提供了。
2024-11-06 16:29:05
1107
原创 6堆(超级重点)
堆针对一个 JVM 进程来说是唯一的,也就是一个进程只有一个 JVM,但是进程包含多个线程,他们是共享同一堆空间的。从内存模型而不是垃圾收集的角度,对 Eden 区域继续进行划分,JVM 为 =每个线程分配了一个私有缓存区域= ,它包含在 Eden 空间内。多线程同时分配内存时,使用 TLAB 可以避免一系列的非线程安全问题,同时还能够提升内存分配的吞吐量,因此我们可以将这种内存分配方式称之为 =快速分配策略=。据我所知所有 OpenJDK 衍生出来的 JVM 都提供了。
2024-11-06 16:17:28
1074
原创 6堆(超级重点)
堆针对一个 JVM 进程来说是唯一的,也就是一个进程只有一个 JVM,但是进程包含多个线程,他们是共享同一堆空间的。从内存模型而不是垃圾收集的角度,对 Eden 区域继续进行划分,JVM 为 =每个线程分配了一个私有缓存区域= ,它包含在 Eden 空间内。多线程同时分配内存时,使用 TLAB 可以避免一系列的非线程安全问题,同时还能够提升内存分配的吞吐量,因此我们可以将这种内存分配方式称之为 =快速分配策略=。据我所知所有 OpenJDK 衍生出来的 JVM 都提供了 TLAB 的设计。
2024-11-06 16:01:24
713
原创 5本地方法接口本地方法栈
简单地讲,=一个 Native Method 是一个 Java 调用非 Java 代码的接囗=在定义一个 native method 时,并不提供实现体(有些像定义一个 Java interface),因为其实现体是由非 java 语言在外面实现的。举例。
2024-11-06 16:00:53
285
原创 4虚拟机栈
由于跨平台性的设计,Java 的指令都是根据栈来设计的。不同平台 CPU 架构不同,所以不能设计为基于寄存器的。=优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令=。
2024-11-05 16:40:55
512
原创 3运行时数据区程序计数器
程序计数器就是用来记录当前线程执行到哪里的一个工具,cpu是有限的,在并发状态下,看起每个线程是一起执行的,其实不是,每个线程都是分配了一个时间片,轮到他的时候,他才有机会使用cpu,所以线程是一直在不停的切换,每次切换后都需要记录下当前线程执行到哪里了,所以每个线程都需要有一个自己的程序计数器。但在微观上:由于只有一个 CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。(img-Tm6qC1W7-1730795709800)]共有的包含堆,方法区。
2024-11-05 16:35:27
428
原创 2类加载子系统
类加载器子系统负责从文件系统或者网络中加载 Class 文件,class 文件在文件开头有特定的文件标识。ClassLoader 只负责 class 文件的加载,至于它是否可以运行,则由 Execution Engine 决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是 Class 文件中常量池部分的内存映射)
2024-11-04 17:02:00
380
原创 1初识别jvm
由于跨平台性的设计,Java 的指令都是根据栈来设计的。不同平台 CPU 架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。时至今日,尽管嵌入式平台已经不是 Java 程序的主流运行平台了(准确来说应该是 HotSpotVM 的宿主环境已经不局限于嵌入式平台了),那么为什么不将架构更换为基于寄存器的架构呢?具体 JVM 的内存结构,其实取决于其实现,不同厂商的 JVM,或者同一厂商发布的不同版本,都有可能存在一定差异。
2024-11-04 17:01:24
511
原创 tomcat安装教程
注意有zip和exe两种格式的,zip(64-bit Windows zip(pgp,md5,sha1))是免安装版的,exe(32-bit/64-bit Windows Service installer(pgp,md5,sha1))是安装版。1、进入官网http://tomcat.apache.org/,选择download,下载所需Tomcat版本。2、找到目录bin下的startup.bat,点击启动Tomcat;此处我们选择下载最新版本Tomcat 9。一、下载Tomcat。
2024-11-01 16:49:36
300
原创 利用java visualvm 分析内存溢出oom
此时cmd中输入jvisualvm,如果path配置好了,则会弹出窗口。利用java visualvm 分析内存溢出oom。5.生成dump文件后从dump堆中分析oom原因。此时visualvm中就可以看到这个项目了。线上一般会导出来一个堆的hprof文件。1.准备一段oom的测试java代码。然后就和上面的分析方法一样了。2.启动visualvm。
2024-10-25 15:49:34
673
原创 idea安装visualVm插件
2.安装成功后,重启idea,此时启动按钮旁边有这两个按钮。idea 安装visualVM插件用于分析java程序,1.在插件市场安装visualvm launcher。3.需要在这里配置插件的visualvm位置。4.配置完后,点击启动。
2024-10-25 15:49:01
908
原创 java You aren‘t using a compiler supported by lombok, so lombok will not work and has been disabled
需要在pom文件添加这个。然后reload项目。
2024-07-25 15:13:44
310
原创 oracle 查询锁表
如果有数据 看数据是那个服务的,重启下那个服务即可;如果能定位问题代码 可以看下代码为什么产生锁表。oracle 查询锁表。
2024-07-25 15:13:11
951
1
原创 一次完整的支付链路
前端界面展示支付二维码,客户扫码支付,支付成功后,钱到支付宝账户;支付宝发起回调通知,调用商城系统回调接口,回调接口将支付流水(用户转给品牌商的流水)状态修改为支付成功;然后将收款单状态流转为已收款,将订单流转为待出库;同时发起两次转账请求,一个是品牌商转账给经销商,一个是品牌商转账给中间商的手续费;通过返回的应收账款信息,前端组装数据,调用生成收款单接口,此接口调用支付宝支付1011请求,生成支付流水(此时支付流水为用户转给品牌商),1011请求此时默认返回待支付状态,与支付二维码返回给前端。
2024-07-12 11:34:06
302
原创 Redis 输入输出缓冲区解析
缓冲区的功能是用一块内存空间来暂时存放命令数据,以免出现因为数据和命令的处理速度慢于发送速度而导致的数据丢失和性能问题。但因为缓冲区的内存空间有限,如果往里面写入数据的速度持续地大于从里面读取数据的速度,会导致缓冲区需要越来越多的内存来暂存数据。缓冲区占用的内存超出了设定的上限阈值时,会出现缓冲区溢出。如果发生了溢出,会丢数据了。随着累积的数据越来越多,缓冲区占用内存空间越来越大,一旦耗尽了 Redis 实 例所在机器的可用内存,就会导致 Redis 实例崩溃。
2024-07-10 14:04:00
1460
原创 mysql判断时间段是否重合
SELECT CASE WHEN t1.start_time = t2.start_time THEN ‘重合’ ELSE ‘不重合’ END AS result。mysql判断时间段是否重合。
2024-07-10 14:03:30
501
1
原创 小程序中UnionID,AppID,AppSecret,OpenID怎么理解?
比喻(假设):就像每个人(用户)在每个国家(小程序)有不同的身份证(OpenID),在中国有在中国的身份证,在美国有在美国的身份证;每一个人有一个全球身份证(UnionID),即在不同的小程序用户的UnionID不变。AppID:小程序的身份证号码,是微信公众平台上的小程序 ID,有了它,微信客户端才能确定你的小程序“身份”,并使用微信提供的高级接口。同一个用户在不同的小程序中的 OpenID 是不一样的。UnionID:同一用户,对同一个微信开放平台下的不同应用,UnionID 是相同的。
2024-06-26 15:35:43
1207
原创 jvm强引用软引用弱引用虚引用
当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象后,将这个虚引用加入引用队列,以通知应用程序对象的回收情况。相对的,软引用、弱引用和虚引用的对象是软可触及、弱可触及和虚可触及的,在一定条件下,都是可以被回收的。弱引用和软引用一样,在构造弱引用时,也可以指定一个引用队列,当弱引用对象被回收时,就会加入指定的引用队列,通过这个队列可以跟踪对象的回收情况。在 Java 程序中,最常见的引用类型是强引用(普通系统 99%以上都是强引用),也就是我们最常见的普通对象引用,也是默认的引用类型。
2024-06-26 15:35:10
984
原创 count()和count(1)和count(字段)的区别
使用,当要统计的数量比较大时,发现count(*)花费的时间比较多,相对来说count(1)花费的时间比较少。1、如果你的没有主键,那么count(1)比count(*)快;如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快。2、如果你的表只有一个字段的话那count(*)就是最快的。3、如果count(1)是聚索引,id,那肯定是count(1)快,但是差的很小的。因为count(*),自动会优化指定到那一个字段。
2024-06-20 22:39:52
240
原创 并发修改账户余额不一致问题与解决方法悲观锁select…for update
并发修改账户余额不一致问题与解决方法悲观锁select…for update。
2024-06-19 10:46:35
318
原创 threadlocal详解
朋友们在遇到线程安全问题的时候,大多数情况下可能会使用synchronized关键字,每次只允许一个线程进入锁定的方法或代码块,这样就可以保证操作的原子性,保证对公共资源的修改不会出现莫名其妙的问题。这种加锁的机制,在并发量小的情况下还好,如果并发量较大时,会有大量的线程等待同一个对象锁,会造成系统吞吐量直线下降。JDK的开发者可能也考虑到使用synchronized的弊端,于是出现了volatile 和 ThreadLocal等另外的思路解决线程安全问题。
2024-06-19 10:45:57
1132
原创 Lua脚本
3. 替代redis的事务功能:redis自带的事务功能很鸡肋,而redis的lua脚本几乎实现了常规的事务功能,官方推荐如果要使用redis的事务功能可以用redis lua替代。2. 原子操作:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。管道不是原子的,不过redis的批量操作命令(类似mset)是原子的。1. 减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在redis服务器上完成。arg [arg …key [key …numkeys 是键的数量。
2024-06-18 14:20:07
422
原创 看门狗机制概述
看门狗机制是Redission提供的一种自动延期机制,这个机制使得Redission提供的分布式锁是可以自动续期的。看门狗机制提供的默认超时时间是30*1000毫秒,也就是30秒如果一个线程获取锁后,运行程序到释放锁所花费的时间大于锁自动释放时间(也就是看门狗机制提供的超时时间30s),那么Redission会自动给redis中的目标锁延长超时时间。在Redission中想要启动看门狗机制,那么我们就不用获取锁的时候自己定义leaseTime(锁自动释放时间)。如果自己定义了锁自动释放时间的话,无论是通过。
2024-06-04 17:29:14
1749
原创 过滤器(filter)和拦截器(Interceptor)的区别以及使用场景
过滤器实现的是 javax.servlet.Filter 接口,而这个接口是在Servlet规范中定义的,也就是说过滤器Filter 的使用要依赖于Tomcat等容器,导致它只能在web程序中使用。拦截器 Interceptor 是在请求进入servlet后,在进入Controller之前进行预处理的,Controller 中渲染了对应的视图之后请求结束。过滤器和拦截器 底层实现方式不相同,过滤器是基于函数回调的,拦截器则是基于Java的反射机制(动态代理)实现的。过滤器 和 拦截器的触发时机不同。
2024-05-31 11:20:24
3154
原创 访问github加速方法
对 GitHub 说"爱"太难了:访问慢、图片加载不出来。本项目无需安装任何程序,仅需 5 分钟。GitHub 访问速度慢的问题GitHub 项目中的图片显示不出的问题让你"爱"上 GitHub。注:本项目还处于测试阶段,仅在本机测试通过,如有问题欢迎提issues。
2024-05-30 09:16:04
1181
原创 设计模式-状态模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:** 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。**** 状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。**
2024-05-30 09:15:15
1255
原创 防刷发送短信验证码接口的五种简单好用方法绝对够用
1.前端调用发送短信接口前,通过密钥(1234abcd)与加密算法,将miyao1234+(16位英文字母与数字字符串) 例如miyao1234wgly1noKSXg47Mn6 进行加密。5.如果解密后包含约定字符串miyao1234,则通过校验,此时注意⚠️,需要将此校验码存入redis,下次如果有相同校验码 则提示重复。前端增加图形验证码,点击发送按钮后增加60s倒计时,60s后才可以再次点击。3.后端接收到后对校验码进行解密,如果解密失败,提示失败。2.前端调用发送短信接口时,将校验码传递给后端。
2024-05-29 00:11:48
3089
2
原创 一次完整的JVM堆外内存泄漏故障排查记录
记录一次线上JVM堆外内存泄漏问题的排查过程与思路,其中夹带一些JVM内存分配机制以及常用的JVM问题排查指令和工具分享,希望对大家有所帮助。在整个排查过程中,我也走了不少弯路,但是在文章中我仍然会把完整的思路和想法写出来,当做一次经验教训,给后人参考,文章最后也总结了下内存泄漏问题快速排查的几个原则。故障描述和排查过程故障原因和解决方案分析JVM堆内内存和堆外内存分配原理常用的进程内存泄漏排查指令和工具介绍和使用文章撰写不易,请大家多多支持我的原创技术公众号:后端技术漫谈。
2024-05-29 00:11:10
1188
原创 【秒杀系统】秒杀系统实战(四):缓存与数据库双写一致性深度分析
微笑挖坑,努力填坑。———— 已经拥有黑眼圈,但还没学会小猪老师时间管理学的蛮三刀同学本文是秒杀系统的第四篇,我们来讨论秒杀系统中缓存热点数据的问题,进一步延伸到数据库和缓存的双写一致性问题,并且给出了实现代码。零基础上手秒杀系统(一):防止超卖。
2024-05-28 09:25:20
1159
原创 【秒杀系统】零基础上手秒杀系统(三):抢购接口隐藏 + 单用户限制频率
时光飞逝,两周过去了,是时候继续填坑了,不然又要被网友喷了。本文是秒杀系统的第三篇,通过实际代码讲解,帮助你了解秒杀系统设计的关键点,上手实际项目。抢购接口隐藏单用户限制频率(单位时间内限制访问次数)当然,这两个措施放在任何系统中都有用,严格来说并不是秒杀系统独特的设计,所以今天的内容也会比较的通用。零基础上手秒杀系统(一):防止超卖本项目的代码开源在了Github,大家随意使用:希望大家多多支持我的公主号:后端技术漫谈。
2024-05-28 09:24:47
837
原创 【秒杀系统】零基础上手秒杀系统(二):令牌桶限流 + 再谈超卖
本文是秒杀系统的第二篇,通过实际代码讲解,帮助你快速的了解秒杀系统的关键点,上手实际项目。本篇主要讲解接口限流措施,接口限流其实定义也非常广,接口限流本身也是系统安全防护的一种措施令牌桶限流单用户访问频率限流抢购接口隐藏此外,前文发出后很多同学对于乐观锁在高并发时无法卖出全部商品提出了“严正抗议”,所以还是在本篇中补充讲解下乐观锁与悲观锁。从零开始打造简易秒杀系统:防止超卖从零开始打造简易秒杀系统:接口限流(令牌桶限流)+ 再谈超卖。
2024-05-27 10:37:51
605
原创 【秒杀系统】从零开始打造简易秒杀系统(一):防止超卖
大家好,好久不发文章了。(快一个月了- -)最近有很多学习的新知识想和大家分享,但无奈最近项目蛮忙的,很多文章写了一半搁置在了笔记里,待以后慢慢补充发布。本文主要是通过实际代码讲解,帮助你一步步搭建一个简易的秒杀系统。从而快速的了解秒杀系统的主要难点,并且迅速上手实际项目。从零开始打造简易秒杀系统:乐观锁防止超卖从零开始打造简易秒杀系统:令牌桶限流从零开始打造简易秒杀系统:Redis 缓存从零开始打造简易秒杀系统:消息队列异步处理订单欢迎关注我的公众号:后端技术漫谈(二维码见底部)
2024-05-27 10:37:19
805
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人