自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

无限进步

本博客主要分享日常学习和做项目遇到的知识点和踩坑记录.当我踏入编程之路起,无论是学习进步还是问题解决,在网络资源和技术博客中获益良多,很多知识都是站在巨人的肩膀上总结而来,所以写博客更倾向于作为自己的学习笔记和分享给其他需要帮助的同学和朋友,无限进步!

  • 博客(90)
  • 收藏
  • 关注

原创 Java是如何实现跨平台的

总的来说,Java的跨平台能力是通过编译成与平台无关的字节码,然后在运行时由JVM将字节码转换成特定平台的机器码来实现的。这种设计使得Java成为一个广泛应用于多种不同类型设备和操作系统的语言。

2024-04-15 23:14:56 288

原创 一条SQL查询语句的执行顺序

SQL常用字段执行顺序

2024-04-08 22:59:33 293

原创 JDK1.8 有哪些新特性

JDK 1.8引入了多个新特性,显著改善了Java语言的函数式编程能力、集合操作和日期时间处理。以下是一些主要的新特性。

2024-04-05 23:33:08 191

原创 JVM垃圾回收算法

分代收集算法是JVM中实现垃圾回收的一种高效策略,它基于这样一个观察:不同年龄的对象具有不同的特性。因此,根据对象的存活时间,JVM的堆内存被划分为几个不同的区域,主要包括年轻代、老年代和永久代。

2024-04-04 23:46:40 995

原创 List Set Map 的值能否为NUll?

ArrayList 在 Java 中是基于动态数组实现的。它的设计允许存储任何类型的对象,包括 null。当一个 null 被添加到 ArrayList 中时,它只是作为数组的一个元素被存储,并不会影响到 ArrayList 的内部数据结构,因为数组本身不关心存储的是引用类型还是 null。

2024-04-03 23:55:19 695

原创 线程池详解、核心参数、拒绝策略

线程池是一种池化技术,它预先创建一组线程,用于执行异步任务。当有新任务到来时,线程池可以立即分配一个线程来处理,而不需要临时创建。这样可以减少因为频繁创建和销毁线程而导致的开销。

2024-03-30 22:49:04 1045

原创 CPU 密集型 和 IO密集型 的区别,如何确定线程池大小?

CPU密集型任务通常涉及到复杂的计算,如算法逻辑、数学计算等,其特点是CPU使用率高,多在这种类型的任务中,线程数量一般与CPU的核心数相匹配就足够了。

2024-03-30 22:22:08 267

原创 TCP三次握手和四次挥手

第一次握手:客户端发送一个SYN包(同步序列编号)到服务器,并进入SYN_SENT状态,等待服务器确认。第二次握手:服务器收到SYN包后,必须确认客户端的SYN(ACK),同时发送自己的SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。第三次握手:客户端收到服务器的SYN+ACK包后,发送确认包ACK,服务器收到后,双方建立连接,可以开始数据传输。

2024-03-29 23:59:06 995

原创 HTTP 与 HTTPS 的区别

从安全性角度来看,HTTP是超文本传输协议,数据传输过程是明文的,这意味着数据在传输过程中可能被截获或篡改,存在一定的安全风险。而HTTPS通过在TCP和HTTP之间加入SSL/TLS安全协议,对数据进行加密传输,有效地保护了数据的安全性和完整性。此外,HTTPS还提供了服务器身份认证,确保用户访问的是真实可靠的网站,而不是钓鱼网站。

2024-03-29 23:41:19 1158 9

原创 四种常用限流算法、固定窗口限流算法、滑动窗口限流算法、漏桶限流算法和令牌桶限流算法

限流可以被视为服务降级的一种形式,其核心目标是通过控制输入和输出流量来保护系统。通常,一个系统的处理能力是可以预估的,为了确保系统的稳定运行,当流量达到预定的阈值时,必须采取措施限制进一步的流量。这些措施可能包括延迟请求的处理时间、直接拒绝请求,或者部分地拒绝请求等策略。

2024-03-28 23:58:58 840

原创 Redis 的内存回收策略

Redis的内存回收策略用于处理过期数据和内存溢出情况,确保系统稳定性和性能。作为一个高性能的键值存储系统,它通过内存回收策略来维护内存的高效使用

2024-03-26 23:58:25 642

原创 MySQL Explain 优化参数详细介绍

Explain是MySQL提供的一个非常有用的工具,它能够帮助数据库管理员和开发者理解SQL查询是如何被数据库执行的。通过在SELECT语句前加上EXPLAIN关键字,我们可以获取关于查询执行计划的信息。

2024-03-26 23:17:59 846

原创 详解ThreadLocal

ThreadLocal是一个与线程相关的类,但它本身并不是一个Thread。这个类可以提供线程局部变量,与普通变量有所不同。虽然你可以实例化一个ThreadLocal对象,但当每个线程访问或设置它时,它们实际上是在操作本线程内的该对象的副本。这也意味着,这个对象在不同的线程中,副本的值是不一样的

2024-03-20 23:21:18 1059

原创 MySQL的锁的类型

乐观锁与悲观锁、全局锁、表级锁、页级锁和行级锁、共享锁与排它锁、间隙锁与临键锁

2024-03-19 23:56:00 343

原创 详解Redis的持久化RDB和AOF

AOF文件会随着时间不断增长,为了效率和性能,Redis还提供了AOF文件重写机制。重写过程会创建一个新的AOF文件,该文件记录了恢复当前数据集所需的最小写命令集。这个过程可以手动触发或根据配置文件中设置的规则自动进行。

2024-03-19 23:30:44 1003

原创 Docker 是什么,Docker 常用命令,怎么写Dockerfile

Docker 是一个开源的应用容器引擎,它允许开发者将应用及其依赖打包成一个标准化的单元,这个单元可以在任何支持Docker的环境中运行。

2024-03-18 23:44:52 1014

原创 Git 常用命令总结

Git 是一个开源的分布式版本控制系统。

2024-03-18 23:25:35 598

原创 Redis 常用数据类型,各自的使用场景是什么?

性能考虑读写速度:所有类型的读写操作都是高效的,但List和Hash在大数据量时的性能可能更优。内存使用:String和Hash通常更节省内存,因为它们不会像List和Set那样存储额外的结构信息。持久化:String类型的小数据量操作更适合利用Redis的持久化机制。

2024-03-17 23:43:44 476

原创 什么数据需要存在Redis里?缓存的缺点?怎样进行数据同步?

在选择数据同步方法时,需要根据具体的业务场景和需求来决定最适合的方法。例如,对于对一致性要求较高的场景,可能需要采用同步双写策略;而对于更新频率低的业务,设置有效期可能是一个更简单的选择。无论选择哪种方法,都需要考虑到系统的复杂性、维护成本以及潜在的风险。

2024-03-17 23:11:10 934

原创 Nacos为什么对于临时实例采用心跳检测,非临时实例采用主动询问?Nacos同时作为配置中心和注册中心有什么坏处?为什么Nacos可以抗住那么高的注册?

Nacos 对于临时实例采用心跳检测,而对于非临时实例采用主动询问,这两种不同的健康检查机制是为了满足不同场景下的服务发现需求。总的来说,临时实例适用于那些对稳定性要求不高或者不需要持久化存储的场景,例如临时任务或者测试环境。而非临时实例则适用于生产环境中对服务稳定性和可靠性有较高要求的场景。通过这种方式,Nacos能够灵活地适应不同类型的服务注册和发现需求,提供更加精准和高效的服务管理。

2024-03-15 22:02:36 994

原创 MySQL主键采用什么结构?为什么要自增?为什么用int?

MySQL主键通常采用的是自增的整数类型结构。MySQL主键需要自增主要是为了保证插入性能优化以及数据聚簇。MySQL主键通常使用int类型是因为它足够高效且空间占用小。

2024-03-15 21:46:08 453

原创 什么是API签名认证?

一种用于验证API请求合法性的安全机制,它通过使用密钥和算法为每个请求生成一个唯一的签名值来确保数据的安全传输和访问控制。

2024-03-14 22:54:40 382

原创 什么是RPC?RPC 和 HTTP 对比?RPC有什么缺点?市面上常用的RPC框架?

RPC(Remote Procedure Call)是一种用于实现不同计算机间程序之间通信的协议,主要用于分布式系统中。它允许程序员编写客户端和服务器端代码,就像它们位于同一台机器上一样,而不需要显式地处理网络通信的细节。

2024-03-14 22:24:58 1499

原创 volatile关键字用处和场景?

在C语言和Java中,它是一种特殊的类型修饰符,用来告诉编译器该变量可能会被意外地改变。这样,每次存取该变量时,编译器都不会对其进行缓存优化,而是直接从内存中读取或写入,提供了对特殊地址的稳定访问。在Java中,volatile提供了一种比synchronized更轻量级的同步机制,因为它不会引起线程上下文的切换和调度。但相较于synchronized,它的同步性较差,使用时需谨慎以避免出错。

2024-03-13 23:28:53 571

原创 Rabbit MQ详解

RabbitMQ 是一个消息代理:它接受和转发消息。你可以把它想象成一个邮局:当你把你想投递的邮件放在一个邮箱里时,你可以确定信使最终会把邮件送到你的收件人手中。在这个类比中,RabbitMQ 是一个邮箱、一个邮局和一个信箱。

2024-03-13 23:20:16 1030

原创 乐观锁与悲观锁

乐观锁的核心思想是“乐观”,它假设在数据处理过程中,冲突发生的概率较低。因此,乐观锁不会在事务开始时就锁定数据,而是在数据提交时检查是否有其他事务修改过这些数据。如果数据未被修改,则事务可以成功提交;如果数据被其他事务修改了,则当前事务需要重新执行或放弃。乐观锁通常通过版本号(version)或时间戳(timestamp)来实现,每次更新数据时,版本号或时间戳都会相应地增加。这样,当事务尝试更新数据时,它会检查版本号或时间戳是否与开始时相同,如果不同则说明数据已被其他事务修改。

2024-03-12 23:57:57 1620

原创 用like对某个关键字进行搜索, 在关键字左边加%, 右边加%, 两边都加%, 那种情况索引会失效?

左侧通配符%:当使用LIKE '%xxx'(百分号在左侧)的模式时,由于需要匹配任意开头的字符串,索引无法有效限制搜索范围,因此往往会导致索引失效,需要进行全表扫描。

2024-03-11 22:48:18 499

原创 Spring的声明式事务的@Transactional注解, 默认情况下, 不考虑try-catch和throws, 是否一定会进行异常捕获.? 如何让他支持回滚所有异常?

在Spring的声明式事务中,@Transactional注解默认情况下会在方法抛出运行时异常(RuntimeException)和错误(Error)时进行回滚。对于其他类型的异常,如检查型异常(Checked Exception),默认情况下不会进行回滚。

2024-03-11 22:32:29 633

原创 SpringBoot自动装配原理

SpringBoot的自动装配原理主要基于三个核心功能:启动类注解流程、自动配置类加载和条件装配。

2024-03-10 23:58:45 360

原创 详解@Configuration

boolean proxyBeanMethods() default true; //默认为ture Spring会保证多次调用@Bean标注的工厂方法,不会重复产生新的对象,始终是同一个

2024-03-10 23:49:52 485

原创 Spring 事务的种类 ? 传播机制 ?

在实际开发中,可以根据具体的业务需求和项目规模来选择合适的事务管理方式。对于大多数应用程序,声明式事务是更常见和推荐的选择,因为它提供了更好的解耦和可维护性。而对于需要细粒度事务控制的复杂场景,可以采用编程式事务来满足需求。

2024-03-09 23:24:47 623

原创 千字详解@Autowired和@Resource (附代码示例)

@Autowired:这个注解是由Spring框架提供的,属于org.springframework.beans.factory.annotation.Autowired包。它是Spring框架的一部分,用于实现依赖注入的功能。Spring框架从2.5版本开始对依赖注入的方式进行了改进,使得@Autowired成为了一个更加便捷和强大的注解。

2024-03-09 23:04:16 982

原创 String StringBuffer StringBuilder StringJoiner区别

总的来说,对于不需要改变内容的字符串,应使用String;对于需要频繁修改且可能涉及多线程的字符串,应使用StringBuffer;而对于需要频繁修改但只在单线程中使用的字符串,应使用StringBuilder。而当需要构建由分隔符分隔的字符串时,应考虑使用StringJoiner。

2024-03-08 23:57:29 415

原创 String类的常用方法并附代码举例

length():返回字符串的长度。charAt(int index):返回指定索引处的字符。

2024-03-08 23:49:10 336

原创 什么是RESTful API? 详解@ResponseBody @RequestBosy @PathVariable@RestController

@RequestMapping@RequestMapping 是一个Spring MVC注解,用于定义HTTP请求的映射规则。在RESTful API中,每个资源都对应一个URL路径,而HTTP方法则表示对资源的操作类型。例如,对于一个用户资源的API,我们可能需要定义一个URL路径为 /users,并使用GET、POST、PUT、DELETE等HTTP方法来对用户资源进行操作。

2024-03-07 23:42:12 1048

原创 四种常见的线程池

newSingleThreadExecutor:创建一个单线程的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定的顺序(FIFO, LIFO, 优先级)执行。这种线程池适用于需要保证任务顺序执行的场景。

2024-03-07 01:35:58 345

原创 synchronized 五连问

怎样避免死锁?要避免线程死锁,可以采取以下几种策略:避免循环等待:确保系统中不存在循环等待资源的线程关系。可以通过合理分配资源顺序,使得每个线程按照一定的顺序请求资源,避免形成循环等待的闭环。限制资源请求:限制线程同时申请多个资源的能力,即一次只能申请一个资源,待使用完毕后再申请下一个资源。这样可以减少死锁发生的可能性。

2024-03-06 22:04:44 959

原创 Spring AOP在什么场景下会失效?

静态方法:AOP不能代理静态方法,因为静态方法属于类级别,而不是实例级别,所以无法通过代理机制进行拦截。内部类:如果目标方法是内部类的实例方法,那么AOP也无法进行代理,因为内部类的实例化是在外围类的实例化之后,此时AOP代理已经创建完成。Spring版本兼容性问题:不同版本的Spring框架可能在AOP的实现上存在差异,如果遇到AOP失效的问题,也需要考虑是否是由于Spring版本升级导致的兼容性问题。

2024-03-06 19:11:47 453

原创 B树和B+树的区别是什么?

B+树通过将数据全部存储在叶子节点,并且通过指针将这些叶子节点连接起来,提高了区间访问和全表扫描的效率,这也是为什么MySQL等数据库系统通常选择B+树作为索引结构的原因。而B树虽然在非叶子节点上可以直接访问到数据,但在大数据量的情况下,其查询效率和空间利用率不如B+树。

2024-03-05 23:57:34 601

原创 了解MVCC的实现吗 ?(隐式字段,ReadView,undo log)

MVCC即多版本并发控制,它的实现原理主要依赖于记录中的隐藏字段、undo log(回滚日志)以及Read View(读视图)。

2024-03-05 21:46:27 575

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除