- 博客(42)
- 收藏
- 关注
原创 JavaSE知识点梳理
首先,您需要定义一个新的类,并使其继承自Exception或其子类。如果您想要创建的是一个非检查型异常(unchecked exception),那么应该继承自RuntimeException。其次可以在自定义异常类中添加更多的属性和方法,以便在抛出异常时提供更多的上下文信息。SQL 注入(SQL Injection)是一种常见的网络安全攻击技术,攻击者通过在应用程序的输入字段中插入恶意的 SQL 代码,从而操纵后端数据库的查询逻辑。
2025-03-27 15:32:22
464
原创 Redis 知识点梳理
NoSQL最常见的解释是"non-relational", 很多人也说它是"Not Only SQL"NoSQL仅仅是一个概念,泛指非关系型的数据库区别于关系数据库,它们不保证关系数据的ACID特性NoSQL是一项全新的数据库革命性运动,提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入Redis是当前比较热门的NoSQL系统之一它是一个开源的、使用ANSI C语言编写的key-value存储系统(区别于MySQL的二维表格形式存储)
2025-03-22 17:35:50
1184
原创 JVM 知识点梳理
在classpath下,要加载一个 java.lang.Integer 类的请求,通过双亲委派机制委派的启动类加载器,发现存在Integer类直接返回,不会重新加载传递的过来的Integer类,只会加载JAVA_HOME中的jar包里面的类,可以防止核心API被随意篡改。当一个类加载器收到了类加载的请求的时候,他不会直接去加载指定的类,而是把这个请求委托给自己的父加载器去加载。当快满的时候,将标记出来的存活的对象复制到另一块内存区域中,然后对整个之前的空间进行垃圾回收,将未复制的垃圾对象清理掉。
2025-03-21 23:59:37
1159
原创 MySQL 索引下推
索引下推(Index Condition Pushdown,简称 ICP) 是 MySQL 5.6 版本中提供的一项索引优化功能,它允许存储引擎在索引遍历过程中,执行部分 WHERE字句的判断条件,直接过滤掉不满足条件的记录,从而减少回表次数,提高查询效率。
2025-03-21 15:03:57
971
原创 Spring 事务注解原理
隔离级别(Isolation):与数据库隔离级别一致,默认为Default,直接使用数据库的隔离级别。注意:如果Spring的隔离级别与MySQL不一致,则以Spring为准。回滚处理(RollbackFor):控制事务什么时候回滚,如果不配置,默认在遇到RuntimeException和Error时才回滚。在try块中代理对象调用了增强方法,catch块中对异常情况进行回滚处理,finally块中清理本次事务的信息。
2025-03-20 15:14:58
629
原创 Spring-循环依赖问题
Spring是如何解决Bean的循环依赖?采用三级缓存解决的就是三个Map//一级缓存//二级缓存//三级缓存流程总结先实例A对象,同时会创建ObjectFactory对象存入三级缓存singletonFactoriesA在初始化的时候需要B对象,这个走B的创建的逻辑B实例化完成,也会创建ObjectFactory对象存入三级缓存singletonFactoriesB需要注入A,通过三级缓存中获取ObjectFactory来生成一个A的对象同时存入二级缓存,
2025-03-20 13:24:43
856
原创 JVM垃圾回收
在java8时,堆被分为了两份:新生代和老年代【1:2】,在java7时,还存在一个永久代。对于新生代,内部又被分为了三个区域。Eden区,S0区,S1区【8:1:1】当对新生代产生GC:MinorGC【young GC】当对老年代代产生GC:Major GC当对新生代和老年代产生FullGC: 新生代 + 老年代完整垃圾回收,暂停时间长,应尽力避免!应用于新生代和老年代,在JDK9之后默认使用 G1。
2025-03-19 14:50:14
885
原创 MySQL-深分页问题的背景和影响
MySQL 作为最受欢迎的开源关系数据库之一,被广泛用于各种规模的应用程序中。随着数据量的不断增长,高效地处理大量数据成为数据库管理的重要挑战之一。分页是一种常见的数据检索技术,它允许用户在大量数据中浏览和检索信息,而不必一次性加载所有数据。这对于提高用户体验和减少服务器负载至关重要。然而,当涉及到“深分页”时,即查询大量数据后的页面时,MySQL的性能可能会显著下降。深分页的影响响应时间增加:随着分页深度的增加,查询所需的时间也会增加,导致用户体验下降。
2025-03-14 14:24:51
1130
原创 Redis-缓存穿透&击穿&雪崩
向布隆过滤器询问 key 是否存在时,跟 add 一样,也会把 hash 的几个位置都算出来,看看位数组中这几个位置是否都为 1,只要有一个位为 0,那么说明布隆过滤器中这个key 不存在。对于恶意攻击,向服务器请求大量不存在的数据造成的缓存穿透,还可以用布隆过滤器先做一次过滤,对于不存在的数据,布隆过滤器一般都能够过滤掉,不让请求再往后端发送。当它说不存在时,那就肯定不存在。缓存击穿中,请求的 key 对应的是热点数据 ,该数据存在于数据库中,但不存在于缓存中(通常是因为缓存中的那份数据已经过期)。
2025-03-11 13:38:31
873
原创 Redis分布式锁
下面这段代码在多线程下存在线程安全问题!超卖的主要原因是下面的步骤不是原子性的。==> 单机情况下,可以加锁(synchronized | ReentrantLock)解决这个线程安全问题。但是在分布式场景下,必须使用分布式锁解决这个问题。
2025-03-11 13:24:29
608
原创 MySQL默认隔离级别是RR(可重复读),为什么大多企业改为RC(读已提交)?
本文介绍了一些 MySQL数据库的 RR 和 RC 两种事务隔离级别。他们主要在加锁机制、主从同步以及快照方面存在一些差异。而很多大厂,为了提升并发度和降低死锁发生的概率,会把数据库的隔离级别从默认的 RR 调整成 RC。当然,这样做也不是完全没有问题,首先使用 RC 之后,就需要自己解决幻读的问题,这个其实还好,很多时候幻读问题其实是可以忽略的,或者可以用其他手段解决。所有的技术方案的选择,都是一种权衡的艺术!
2025-03-10 17:47:16
1023
原创 Redis-限流方案
限流就是在高并发场景下,通过限制系统处理请求的速率,迅速拒绝超过设定上限的请求(最大的QPS),从而保证系统正常运行。在限流技术中,主要是有两个注意点:当前系统请求的阈值和拒绝策略。请求的阈值:阈值就是单位时间内允许请求的最大请求数。例如,将QPS(Queries Per Second)设置为1000,表明1s内最多接受1000个请求。通过设置适当的阈值,可以有效控制系统负载,避免系统请求过多而崩溃。(阈值是上线前通过压测或者评估得出的指标)
2025-03-07 16:44:54
1185
原创 微服务架构概述Spring Cloud Alibaba
针对微服务系统架构所存在的问题,肯定是需要有具体的技术来解决,而所使用到的技术就是Spring Clouad Alibaba。那么想要了解Spring Clouad Alibaba,那么就需要先了解一下Spring Cloud。1、Spring Cloud 是一系列框架的有序集合。在Spring Cloud这个项目中包含了很多的组件【子框架】,每一个组件都是用来解决问题系统架构中所遇到的问题,因此Spring Cloud可以看做是一套微服务的解决方案。
2025-03-07 16:29:44
887
原创 JUC-AQS详解
AQS的全称是AbstractQueuedSynchronizer,翻译过来就是抽象队列同步器。这个类是在包下面。AQS就是一个抽象类,是用来构建锁和同步器的一个底层。AQS底层构建锁和同步器提供了一个通用的功能的实现,因此使用AQS可以构建出应用广泛的同步器,比如我们常见的等等都是基于AQS的。
2025-03-04 14:46:35
900
原创 MySQL知识点梳理
为什么要分库分表分区?分库:主要解决的是并发量大的问题,数据库的连接数是有限的,当QPS过高导致数据库连接数不足,可以考虑分库分表:主要解决的是数据量大的问题,单表数据量大导致查询和存储的性能太低,一般超过500W行或者2GB考虑分表分区:数据量变大时,先考虑分区再考虑分表innodb中表存储主要依赖两个文件,一个是.frm,存储表结构,一个是.ibd,存储表数据innodb会将每个分区存储在不同的.ibd文件里表面看还是一张表,只不过数据存储在不同的位置(同一个.frm文件)
2025-03-04 14:23:36
771
原创 单例模式为什么会引发空指针异常?
这个版本在getConnection方法增加了同步关键字,可以正确处理同步问题,程序执行正确符合预期,但是将同步关键词加在方法上锁粒度较大,可能会影响性能。我们将b变量声明为Volatile,那么在为b赋值即Volatile写前后会加上如下屏障,从而保证了语句1和语句2执行顺序不会重排。语句3依赖语句1,语句4依赖语句2,所以语句3和语句4不会第一个执行。这就引出我们下一个话题:指令重排。这样说有一些抽象,我们结合代码进行分析,还是使用上文代码实例,只是不同的是这一次我们新增了Volatile关键字。
2025-02-28 14:24:49
1007
原创 Java正则表达式
"正则表达式"属于,一般情况下用不到,如果会用,就会感叹它在文本处理方面的强大能力!正则表达式并不难,主要是知识点太多,一不经常使用就会忘,正好我想可以把它作为笔记记录先来,以后用到的时候直接翻看笔记就行了,省去了在网上频繁查找的麻烦!笔记以后还会补充,希望对大家理解“正则表达式”有帮助!
2024-02-27 14:26:03
950
原创 函数式编程-Stream 流
Lambda是 JDK8 中一个语法糖。可以看成是一种语法糖,他可以从对某些匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现。让我们不用关注是什么对象。而是更关注我们对数据进行了什么操作。Java8的Stream使用的是函数式编程模式,如同它的名字一样,它可以被用来对集合或数组进行链状流式操作。可以更方便的对集合或数组操作。我们在编写代码的时候出现最多的就是空指针异常。所以在很多情况下我们需要做各种非空的判断。if(author!= null) {尤其是对象中的属性还是一个对象的情况下。
2024-01-08 15:05:03
920
1
原创 Java温故而知新
什么是死锁?所谓死锁是一组互相竞争资源的线程因为互相等待造成“永久”阻塞的现象发生锁的原因:互斥条件。共享资源x、y只能被一个线程占用占有且等待。线程t1已经取得了共享资源x,在等待共享资源y的时候,不释放共享资源x不可抢占。其他线程不可强行去抢占线程t1占有的资源循环等待。线程t1等待线程t2占有的资源,线程t2等待线程t1占有的资源如何避免死锁(从上面4个原因入手)
2023-10-26 03:31:11
101
原创 Kafka 科普
kafka介绍Kafka 是一个分布式流媒体平台,类似于消息队列或企业消息传递系统。kafka介绍-名词解释:发布消息的对象称之为主题生产者(Kafka topic producer):Kafka将消息分门别类,每一类的消息称之为一个主题(Topic):订阅消息并处理发布的消息的对象称之为主题消费者(consumers):已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker)。
2022-12-21 16:47:06
168
原创 定时任务 科普
在实际项目开发中,除了Web应用、SOA服务外,还有一类不可缺少的,那就是定时任务调度。那究竟何为定时任务调度,一句话概括就是:基于给定的时间点、给定的时间间隔、自动执行的任务。
2022-12-10 03:24:45
181
原创 Nginx 科普
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx的网站有:百度、京东、新浪、网易、腾讯、淘宝等。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。Nginx可以作为静态web服务器来部署静态资源。
2022-11-26 19:15:55
378
原创 Spring Cache
是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。Spring Cache只是提供了一层抽象,底层可以切换不同的cache实现。具体就是通过接口来统一不同的缓存技术。CacheManager是Spring提供的各种缓存技术抽象接口。描述使用EhCache作为缓存技术使用Google的GuavaCache作为缓存技术使用Redis作为缓存技术。
2022-11-26 04:06:53
506
原创 Redis基础
Redis是一个基于内存的key-value结构数据库。Redis是互联网技术领域使用最为广泛的存储中间件,它是「RemoteDictionaryService」的首字母缩写,也就是「远程字典服务」。基于内存存储,读写性能高适合存储热点数据(热点商品、资讯、新闻)企业应用广泛。
2022-11-24 06:19:44
114
原创 HashMap实现原理【集合】
Map存储双列数据,存储型的数据,类似于函数 y = f(x)HashMap是Map的实现类,LinkedHashMap是HashMap的子类。
2022-11-17 19:13:49
214
原创 【多线程】知识问答
目前主流操作系统都是多任务的,即多个进程同时运行。为了保证安全,每个进程只能访问分配给自己的内存空间,而不能访问别的进程的,这是由操作系统保障的。在每个进程的内存空间中都会有一块特殊的公共区域,通常称为堆(内存)。进程内的所有线程都可以访问到该区域,这就是造成问题的潜在原因。
2022-11-16 17:40:24
153
原创 【JVM】问答梳理
Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟 的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为> 特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(即扩展名为.class的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。
2022-11-16 17:29:47
281
原创 【Java基础】问答
面向过程:更注重步骤与程序面向对象:更注重有哪些参与者(对象),及各自要做什么面向过程比较直接高效,面向对象更易于复用、拓展和维护;hashCode()的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode()定义在JDK的Object.java中, Java中的任何类都包含有hashCode()函数。散列表存储的是键值对(key-value),它的特点是:能根据"键"快速的检索出对应的“值"。这其中就利用到了散列码!
2022-11-16 17:20:48
250
原创 分布式缓存 科普
RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录
2022-11-16 17:15:32
131
原创 数据库索引 科普
MySQL官方对索引的定义为 :索引(Index)是帮助MySQL高效获聊数据的数据结构。索引的本质: 索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法。索引是在存储引擎中实现的,因此每种存储引擎的索引不一定完全相同,并且每种存储引擎不一定支持所有索引类型。同时,存储引擎可以定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。
2022-11-14 20:06:18
1957
1
原创 Java8新特性 (jdk1.8)
Java 8(又称为jdk 1.8)是Java语言开发的一个主要版本。Java 8是oracle公司于2014年3月发布,可以看成是自Java5以来最具革命性的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性。
2022-11-14 19:45:06
4101
原创 动态代理(反射的应用)
使用一个代理将对象包装起来,然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。
2022-11-14 19:14:41
108
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人