- 博客(75)
- 资源 (8)
- 收藏
- 关注
原创 【无标题】
Spring Boot + Redis 延时双删功能,实战来了!一、业务场景在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后,级联修改Redis中的数据。请求一:A修改数据库数据 B修改Redis数据请求二:C修改数据库数据 D修改Redis数据并发情况下就会存在A —> C —> D —> B的情况一定要理解线程并发执行多组原子操作执行顺序是可能存在交叉现象的1、此时存在的问题。
2023-12-07 16:49:59
116
原创 人生处处有Bug
灵异事件!程序里发现了新Bug但是它正常运行啦!”、“谁敢信,我电脑死机竟然是因为放青藏高原的时候硬盘共振振幅太大了——”……人生处处有Bug,哪一个最令你目瞪口呆,久久不能忘怀?今天就来浅浅分享一下吧!
2023-08-16 09:35:46
207
2
原创 精心准备了1009道java面试题
Redis的数据类型有哪些? 请简述一下JVM的内存模型 说说堆和栈的区别 说说你对CAP的理解 你知道哪些分布式事务解决方案?什么是二阶段提交? 什么是 HTTP?HTTP 的作用是什么? 说说HTTP的优点和缺点 什么是长连接、短连接? 什么是反向代理?什么是TCP/IP ? 什么是 TCP/IP 通信传输流? 请说说TCP/IP 协议族中的 IP 协议 说一下OSI的七层体系结构说说TCP/IP 四层体系结构 说一下OSI模型(七层)和TCP/IP模型(四层)有什么关系 知道各个层使用的是哪个
2023-08-16 09:34:32
180
1
原创 MySQL事务的12连问,你顶得了嘛
因为RC隔离级别,加锁过程中,只需要对修改的记录加行锁。通俗的讲,数据库中同时存在多个版本的数据,并不是整个数据库的多个版本,而是某一条记录的多个版本同时存在,在某个事务对其进行操作的时候,需要查看这一条记录的隐藏列事务版本id,对比事务id并根据事物隔离级别去判断读取哪个版本的数据。综上所述,在读已提交(RC)隔离级别下,同一个事务里,两个相同的查询,读取同一条记录(id=1),却返回了不同的数据(第一次查出来是孙权,第二次查出来是曹操那条记录),因此RC隔离级别,存在不可重复读并发问题。
2023-08-16 09:34:04
140
原创 还分不清 Cookie、Session、Token、JWT?
而 Token ,如果指的是 OAuth Token 或类似的机制的话,提供的是 认证 和 授权 ,认证是针对用户,授权是针对 App。当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。比如用在用户登录上。
2023-08-16 09:31:05
84
1
原创 SQL 性能优化梳理
select_type,有几种值:simple(表示简单的select,没有union和子查询),primary(有子查询,最外面的select查询就是primary),union(union中的第二个或随后的select查询,不依赖外部查询结果),dependent union(union中的第二个或随后的select查询,依赖外部查询结果)将多表关联查询的一次查询,分解成对单表的多次查询。数据迁移,表升级的过程中可以使用影子表的方式,通过修改原表的表名,达到保存历史数据,同时不影响新表使用的目的。
2023-08-16 09:29:54
63
原创 Spring夺命35连问
Java 是面向对象的编程语言,一个个实例对象相互合作组成了业务逻辑,原来,我们都是在代码里创建对象和对象的依赖。所谓的IOC(控制反转):就是由容器来负责控制对象的生命周期和对象间的关系。以前是我们想要什么,就自己创建什么,现在是我们需要什么,容器就给我们送来什么。引入IOC之前和引入IOC之后也就是说,控制对象生命周期的不再是引用它的对象,而是容器。对具体对象,以前是它控制其它对象,现在所有对象都被容器控制,所以这就叫控制反转。控制反转示意图DI(依赖注入)
2023-08-15 15:28:47
103
原创 并发环境下,先操作数据库还是先操作缓存?
在分布式系统中,缓存和数据库同时存在时,如果有写操作,先操作数据库还是先操作缓存呢?❝❞综上所述,在分布式系统中,缓存和数据库同时存在时,如果有写操作的时候,「先操作数据库,再操作缓存」。如下:1.读取缓存中是否有相关数据2.如果缓存中有相关数据value,则返回3.如果缓存中没有相关数据,则从数据库读取相关数据放入缓存中key->value,再返回4.如果有更新写数据,则先操作数据库,再操作缓存5.为了保证第四步更新缓存成功,使用binlog异步通知操作。
2023-08-15 15:12:23
122
原创 为什么要分库分表?
上面主要从:垂直和水平,两个方向介绍了我们的系统为什么要分库分表。说实话垂直方向(即业务方向)更简单。在水平方向(即数据方向)上,分库和分表的作用,其实是有区别的,不能混为一谈。分库:是为了解决数据库连接资源不足问题,和磁盘IO的性能瓶颈问题。分表:是为了解决单表数据量太大,sql语句查询数据时,即使走了索引也非常耗时问题。此外还可以解决消耗cpu资源问题。分库分表:可以解决 数据库连接资源不足、磁盘IO的性能瓶颈、检索数据耗时 和 消耗cpu资源等问题。
2023-08-15 15:08:24
90
1
原创 服务器性能如何优化?
内存用于存放程序的代码及数据,一般分为物理内存和虚拟内存,其中物理内存指的是服务器的内存,而虚拟内存指的是硬盘的一块空间。如上图所示,这是一个4核CPU服务器,在截图的时候其中3核CPU使用率都超过了75%,再观察一会发现所有CPU的使用率都在85%左右徘徊,说明CPU负载很高了,需要考虑增加新的服务器。一般情况下服务器的平均负载需要小于当前服务器的CPU核数,为了应对突发状况,服务器的平均负载应该在75%即3 以下,很显然,上图这台服务器平均负载超过了75%,需要考虑提升性能了。
2023-08-15 15:05:56
290
原创 如何用 Java 几分钟处理完 30 亿个数据?
根据 CPU 的能力初始化 n 个线程,每一个线程去消费一个队列,这样线程在消费的时候不会出现抢占队列的问题。现有一个 10G 文件的数据,里面包含了 18-70 之间的整数,分别表示 18-70 岁的人群数量统计。假设年龄范围分布均匀,分别表示系统中所有用户的年龄数,找出重复次数最多的那个数,现有一台内存为 4G、2 核 CPU 的电脑,请写一个算法实现。如果在运行了的时候,发现 GC 突然罢工不工作了,有可能是 JVM 的堆中存在的垃圾太多,没回收导致内存的突增。
2023-08-15 15:02:59
72
原创 10种定时任务
不知道你有没有遇到过这种场景:有时需要临时统计线上的数据,然后导出到excel表格中。这种需求有时较为复杂,光靠写sql语句是无法满足需求的,这就需要写java代码了。然后将该程序打成一个jar包,在线上环境执行,最后将生成的excel文件下载到本地。为了减小对线上环境的影响,我们一般会选择在凌晨1-2点,趁用户量少的时候,执行统计程序。(其实凌晨4点左右,用户才是最少的)由于时间太晚了,我们完全没必要守在那里等执行结果,一个定时任务就能可以搞定。那么,这种情况用哪种定时任务更合适呢?linux。
2023-08-15 15:01:42
1248
原创 Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化
至此,Nginx的大部分内容都已阐述完毕,关于最后一小节的性能优化内容,其实在前面就谈到的动静分离、分配缓冲区、资源缓存、防盗链、资源压缩等内容,也都可归纳为性能优化的方案。
2023-08-15 09:49:07
89
原创 大厂都怎么防止重复下单?
系统异常时 666 请求到了,单号更成 666,接着 888 请求到了,单号又更新成 888,但是 666 更新成功的响应丢了,调用方没收到成功响应,自动重试,再次发起 666 请求,单号又被更新成 666了,这数据显然就错了!更新订单服务,通过一个版本号机制,每次更新数据前校验版本号,更新数据同时自增版本号,这样的方式,来解决 ABA 问题,确保更新订单服务的幂等性。创建订单服务,可通过预生成订单号,然后利用 DB 的订单号唯一约束,避免重复写入订单,实现创建订单服务的幂等性。最简单的:DB 事务。
2023-08-15 09:47:20
66
原创 经典面试架构java---系统设计(你会几个)
常用的HTTP方法有GET、POST、PUT、PATCH和DELETE等,它们分别对应获取数据、创建数据、更新数据、部分更新数据和删除数据的操作。订单模型:定义订单模型,包括订单号、下单时间、订单状态、支付状态、收货地址、商品信息、价格等字段。订单生命周期:定义订单的生命周期,包括订单创建、待支付、已支付、待发货、已发货、待收货、已完成、已取消等状态。异步回调处理:如果支付渠道提供异步回调通知的功能,确保在接收到支付成功的通知后,进行订单状态更新等必要的操作,并返回正确的响应码,以避免重复支付。
2023-08-15 09:45:53
877
原创 面试官问我接口优化:我一口气说了十八种
之前工作中,遇到一个504超时问题。原因是因为接口耗时过长,超过nginx配置的10秒。然后 真枪实弹搞了一次接口性能优化,最后接口从11.3s降为170ms。本文将跟小伙伴们分享接口优化的一些通用方案。
2023-08-10 08:48:10
241
原创 Cookie、Session、Token、JWT?
通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就打卡成功)互联网中的认证:用户名密码登录邮箱发送登录链接手机号接收验证码只要你能收到邮箱/验证码,就默认你是账号的主人用户授予第三方应用访问该用户某些资源的权限你在安装手机应用的时候,APP 会询问是否允许授予权限(访问相册、地理位置等权限)你在访问微信小程序时,当登录时,小程序会询问是否允许授予权限(获取昵称、头像、地区、性别等个人信息)
2023-08-09 11:00:48
95
原创 6种对象拷贝工具
Mapstruct的使用和上面几种方式有些不同,因为上面的几种方式,spring和apache,hutool使用的都是反射,cglib是基于字节码文件的操作,都是在都代码运行期间动态执行的,但是Mapstruct不同,它在编译期间就生成了 Bean属性复制的代码,运行期间就无需使用反射或者字节码技术,所以具有很高的性能。星球中有很多独家的干货内容,比如:Java后端学习路线,分享实战项目,源码分析,百万级系统设计,系统上线的一些坑,MQ专题,真实面试题,每天都会回答大家提出的问题。
2023-08-09 10:55:20
1558
1
原创 8 个线程池最佳实践和坑!使用不当直接生产事故!!
一般建议是不同的业务使用不同的线程池,配置线程池的时候根据当前业务的情况对当前线程池进行配置,因为不同的业务的并发以及对资源的使用情况都不同,重心优化系统性能瓶颈相关的业务。
2023-08-09 10:52:45
136
1
原创 SpringBoot 项目使用 Redis 对用户 IP 进行接口限流
在下新建limit.lua-- 获取redis键-- 获取第一个参数(次数)-- 获取第二个参数(时间)-- 获取当前流量-- 如果current值存在,且值大于规定的次数,则拒绝放行(直接返回当前流量)end-- 如果值小于规定次数,或值不存在,则允许放行,当前流量数+1 (值不存在情况下,可以自增变为1)-- 如果是第一次进来,那么开始设置键的过期时间。end-- 返回当前流量@Slf4j@Aspect@Component@Autowired@Autowired。
2023-08-09 10:51:07
225
原创 SpringBoot实现人脸识别功能
去年在公司参与了一个某某机场建设智能机场的一个项目,人脸登机是其中的一个功能模块,当时只是写了后台的接口,调用人脸识别设备的api,给闸机回传数据信号,以保障该功能的正常使用。当时因为项目进度紧张,手里还有其他项目赶进度,也就没时间去分享这个功能的实现。前几天刷脸进公司大楼的时候,突然想起来应该写一个功能类似的demo分享个人的一些小小的经验。
2023-08-09 10:49:39
597
1
原创 @Autowired, @Resource, @Inject 有什么区别?建议怎么使用?
Autowired@Resource@Inject三个注解的区别当你在使用@Autowired时,是否有出现过的警告?你知道这是为什么吗?Spring 依赖注入有哪几种方式?官方是怎么建议使用的呢?如果你对上述问题都了解,那我个人觉得你的开发经验应该是不错的。下面我们就依次对上述问题进行解答,并且总结知识点。
2023-08-09 10:42:56
90
原创 Spring Bean 实例化过程
对于写Java的程序员来说,Spring已经成为了目前最流行的第三方开源框架之一,在我们充分享受Spring IOC容器带来的红利的同时,我们也应该考虑一下Spring这个大工厂是如何将一个个的Bean生产出来的,本期我们就一起来讨论一下Spring中Bean的实例化过程。容器启动阶段Bean实例化阶段容器的启动阶段做了很多的预热工作,为后面Bean的实例化做好了充分的准备,我们首先看一下容器的启动阶段都做了哪些预热工作。容器启动阶段1、配置元信息我们说Spring IOC容器将对象实例的创建与对象实例的使
2023-08-09 10:40:39
48
原创 Java面试题及答案整理
Read Through 和 WriteThrough 的流程类似,只是在客户端查询数据A时,如果缓存中数据A失效了(过期或被驱逐淘汰),则缓存会同步去数据库中查询数据A,并缓存起来,再返回给客户端。可见,最后缓存中的数据A和数据库中的数据A是一致的,理论上可能会出现一小段时间数据不一致,不过这种概率也比较低,大部分的业务也不会有太大的问题。可见,最后缓存中的数据A跟数据库中的数据A是不一致的,缓存中的数据A是旧的脏数据。客户端1 更新缓存中数据A,缓存同步更新数据库中数据A,再返回结果。
2023-08-04 11:15:58
159
2
原创 30 个 IDEA 常用小技巧
下面总结了常用的 30 个 IDEA 使用小技巧,让你的撸码效率直接起飞...查看代码历史版本调整idea的虚拟内存:idea设置成eclipse的快捷键设置提示词忽略大小写关闭代码检查设置文档注释模板显示方法分隔符设置多行tab快速匹配方法的大括号位置代码结尾补全模糊搜索方法预览某个类的代码查看方法在哪里被调用代码模板(代码快捷键)自动导包、自动移除没用的包codota插件:可以优先显示使用频率较高的类、方法快速查看类、字段的注释括号颜色区分。
2023-08-04 11:14:23
548
原创 EasyExcel 带格式多线程导出百万数据
以下为结合实际情况作的方案设计,导出阈值以及单sheet页条数都可以根据实际情况调整大佬可直接跳过新手教程,直接查看文末代码资源占用内存(也是资源的一个,单独说明)响应时间针对以上三个问题,大方向考虑的是多线程结合数据流写入的方式。多线程:使用空间换时间,主要是加快接口响应时间,但是这里线程数不宜过多,一味加快响应时间提升线程数,资源占用会非常严重,故会考虑线程池,线程池的线程数为10;
2023-08-04 11:13:41
406
原创 Java 生成各种 PDF 实战方案(图片、模板、表格)
新开一页的话,就相当于我在第二页开始动态生成表格,这个时候可能有朋友就要问了,那如果我的模板没有占到一页怎么办,这样第一页岂不是会有空白,这个问题我也想到了,因为我的需求是生成好几种不同的pdf,下面我会把这种情况如何生成的代码放出来,我们先看一下第一种生成出来后的结果,我测的数据比较多,就粘几个结果好了。新开一页,这个是因为,如果你不新开一页的话会导致你动态生成的表格会跟模板内容重叠,注意是重叠而不是覆盖!我说一下这个生成pdf需要注意的点,可能有的朋友很疑惑为什么要调用。实体类都是一样的没有变。
2023-08-04 11:13:01
261
原创 RocketMQ会重复消费吗
总得来说,RocketMQ中还是存在很多种导致消息重读消费的情况,并且官方也说了,只是在大多数情况下消息不会重复所以如果你的业务场景中需要保证消息不能重复消费,那么就需要根据业务场景合理的设计幂等技术方案。
2023-08-04 11:12:16
194
原创 MySQL 自增主键一定是连续的吗
自增锁是一种比拟非凡的表级锁。并且在事务向蕴含了列的表中新增数据时就会去持有自增锁,假如事务 A 正在做这个操作,如果另一个事务 B 尝试执行 INSERT语句,事务 B 会被阻塞住,直到事务 A 开释自增锁。
2023-08-04 11:11:34
97
原创 SpringBoot 启动流程
被标注的类等于在Spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个Spring的上下文环境。回顾整体流程,Springboot的启动,主要创建了配置环境(),并基于以上条件,在容器中开始实例化我们需要的Bean,至此,通过SpringBoot启动的程序已经构造完成。注解,其中Registrar类的作用是将启动类所在的包下的所有子包组件扫描注入到spring容器中。文件中找到所有的对应配置类,然后将这些自动配置类加载到spring容器中。
2023-08-04 11:10:51
72
原创 SpringBoot 调用外部接口的三种方式
在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求, 比如在apaas开发过程中需要封装接口在接口中调用apaas提供的接口(像发起流程接口submit等等)下面也是提供了三种方式(不使用dubbo的方式)供我们选择。此处因为我使用了所在项目,所以需要添加一定的请求头等信息,关于Feign的请求头添加也会在后续补充。同样提供了对外访问的接口API,这里主要介绍Get和Post方法的使用。三种方式,其中每种方式都有三种方法,下面介绍。定义controller。
2023-08-04 11:10:11
98
原创 Spring Boot + K8S
在K8s中,当我们实现滚动升级之前,务必要实现应用级别的优雅停机。此外,若需使用回调钩子,需保证镜像中包含curl工具,且需注意应用管理端口(50000)不能暴露到公网。探针类型:exec(进入容器执行脚本)、tcpSocket(探测端口)、httpGet(调用接口)定义访问端口、路径及权限 application.yaml。定义访问端口、路径及权限 application.yaml。定义访问端口、路径及权限 application.yaml。定义访问端口、路径及权限 application.yaml。
2023-08-04 11:08:44
184
原创 布隆过滤器
1.面向对象和面向过程的区别 面向过程 优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗 资源;比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发,性能是 最重要的因素。 缺点: 没有面向对象易维护、易复用、易扩展 面向对象 优点: 易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特 性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 缺点: 性能比面向过程低 2. Java 语言有哪些特点 1. 简单易学; 2. 面向对象(封装,继承,多态); 3.
2023-08-04 11:05:57
76
原创 微服务注册中心产品ZooKeeper、Eureka、Consul、Nacos对比
从ZooKeeper的实际应用情况来看,在使用ZooKeeper获取服务列表时,如果此时的ZooKeeper集群中的Leader宕机了,该集群就要进行Leader的选举,又或者ZooKeeper集群中半数以上服务器节点不可用(例如有三个节点,如果节点一检测到节点三挂了 ,节点二也检测到节点三挂了,那这个节点才算是真的挂了),那么将无法处理该请求。Eureka的集群中,只要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。
2023-08-02 11:01:58
416
原创 注解@PostConstruct作用
Autowired是用于注入对象,注入对象到this.beanDefinitionMap是在invokeBeanFactoryPostProcessors()方法中实现的,而@PostConstruct标识的方法,用于在前置处理阶段,而之前都已经走过了实例化createBeanInstance和属性注入populateBean阶段。前面提到了@PostConstruct在项目启动的时候执行方法,那么@PostConstruct到底在springboot的执行流程中,什么时候执行呢?
2023-08-02 10:55:52
144
原创 postconstruct注解的作用
做过微信或支付宝支付的童鞋,可能遇到过这种问题,就是填写支付结果回调,就是在支付成功之后,支付宝要根据我们给的地址给我们进行通知,通知我们用户是否支付成功,如果成功我们就要去处理下面相应的业务逻辑,如果在测试服务,那么这个回调地址我们就需要填写测试服务的,如果发布到线上那么我们就需要改成线上的地址。有的朋友可能就比较自信了,那我直接加个static修饰下不就好了,如果你真是打算这样做,那你就准备卷好铺盖走人吧。针对上面的场景,我们一般都会通过如下的方式,进行一个动态配置,不需要每次去改,防止出现问题。
2023-08-02 10:53:23
108
原创 列出 @Transactional 注解下,事务失效的七种场景
也不会回滚,因为spring实现事务的原理是通过ThreadLocal把数据库连接绑定到当前线程中,新开启一个线程获取到的连接就不是同一个了。是一种基于注解管理事务的方式,spring通过动态代理的方式为目标方法实现事务管理的增强。,原理很简单,private修饰的方式,spring无法生成动态代理。(以非事务的方式执行,如果当前有事务则把当前事务挂起)。失效的场景,本文总结了七种情况,下面进行逐一分析。当异常被捕获后,并且没有再抛出,那么。类型的异常,依旧不会生效。是不会回滚的,其原因就是。
2023-08-02 10:49:24
219
毕业设计.zip 在进行Java毕业设计时,可以选择与自己感兴趣的领域相关的项目,如Web应用、移动应用、数据分析等
2023-07-25
并发编程面试题汇总.docx并发编程是指在一个程序中同时执行多个独立的任务或操作的能力 在面试中,常常会问到与并发编程相关的问题
2023-07-25
mysql索引失效.docx MySQL索引失效是指在查询执行过程中,数据库无法有效地使用索引来提高查询性能
2023-07-25
MySQL在面试中经常被问到.docx MySQL是一个流行的关系型数据库管理系统(RDBMS),在面试中经常被问
2023-07-25
Spring+Vue全栈实战i项目.pdf Spring和Vue.js是两个流行的开发框架,可以通过前后端分离的方式进行整合
2023-07-25
LINUX使用及相关命令.pdf
2023-07-25
整合Spring和MyBatis,开发人员可以充分发挥两个框架的优势,实现更高效、更灵活、更可维护的持久层操作,并使应用程序的开
2023-07-25
pod文档免费转换、程序员无广告网站、ppt免费下载、在线ps、文库文档下载
2023-07-24
计算机专业毕业设计-Java.rar
2023-07-21
大学智能教务管理系统.war
2023-07-21
大华设备---人脸识别及行为分析
2022-04-20
java数据库面试题目
2022-04-20
本地ftp服务创建软件
2020-11-07
web端调用大华摄像头demo及大华控件开发包编程指南文档
2020-11-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人