自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 深入理解Java IO流:字符流

如果按照字节读取,每次读取的字节没有构成一个汉字的字节数,就直接输出,汉字是显示不了的。

2024-04-21 15:50:32 519 4

原创 深入理解Java IO流:字节流

插曲:取 Output 和 Input 单词首字母不就是 IO 吗?输入:内存 —— Output(将内存中的数据写到硬盘中)> 硬盘。输出:硬盘——Input(将硬盘中的数据读取到内存中)> 内存。如不理解,可以把自己比做内存,当我们吃饭喝水时是输入。

2024-04-21 14:59:27 787 5

原创 深入理解Java IO流:从File类到字节流与字符流

File类是Java中表示文件和文件路径名的抽象表示形式。它不仅仅代表一个存在的文件或目录,还可以代表一个不存在的文件或目录,用于表示未来可能创建的文件或目录。

2024-04-14 21:37:09 447 6

原创 深入理解 Java 序列化中的 readResolve() 方法

方法是 Java 序列化机制中的一个回调方法,它在对象反序列化过程中被调用,允许开发者自定义反序列化后的对象。通常情况下,当读取一个对象并准备返回时,它会检查该对象是否定义了方法。如果定义了,那么会调用该方法,并使用其返回的对象替换原本通过反序列化创建的对象。

2024-04-01 20:14:27 654 3

原创 MySQL--优化(索引--索引失效场景)

由于,在查询是,没有对字符串加单引号,MySQL的查询优化器,会自动的进行类型转换,造成索引失效。

2024-03-08 17:38:05 534 1

原创 MySQL--优化(索引--索引创建原则)

想象一个图书馆,里面的书籍没有按照任何顺序排列。如果你想找一本书,你可能需要一本一本地查看,这会非常耗时。这就是没有索引的数据库的感觉。现在,想象图书馆员决定按照书的标题或作者来排序书籍。突然之间,找书变得容易多了。

2024-03-07 20:46:32 976 1

原创 MySQL--优化(索引--聚簇和非聚簇索引)

MySQL–优化(索引–聚簇和非聚簇索引)定位慢查询SQL执行计划索引存储引擎索引底层数据结构聚簇和非聚簇索引索引创建原则索引失效场景SQL优化经验一、聚簇索引聚簇索引:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据特点:必须有,而且只有一个聚簇索引在 B+树中的数据结构二、非聚簇索引(二级索引)非聚簇索引(二级索引):将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键特点:可以存在多个非聚簇索引在 B+树中的数据结构三

2024-03-07 16:51:34 669 1

原创 MySQL--优化(索引)

我们需要维护一个像(二叉搜索数)有个这样一个数据结构,在查找数据的时候可以提升查找效率,减少 IO 的操作什么是索引索引(index)是帮助MySQL高效获取数据的数据结构(有序)提高数据检索的效率,降低数据库的I0成本(不需要全表扫描)通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗索引的底层数据结构MySQL的InnoDB引擎采用的B+树的数据结构来存储索B+树 阶数更多,路径更短磁盘读写代价B+树更低,非叶子节点只存储指针,叶子阶段存储数据。

2024-03-05 16:52:14 1369 1

原创 MySQL--优化(SQL语句执行慢,如何分析)

可以采用MySQL自带的分析工具EXPLAIN通过key 和 key_len 检查是否命中了索引(索引本身存在是否有失效的情况)通过 type 字段查看 sql 是否有进一步的优化空间,是否存在全索引扫描或全盘扫描通过 extra 建议判断,是否出现了回表的情况,如果出现了,可以尝试添加索引或修改返回字段来修复。

2024-03-04 21:40:42 1178

原创 MySQL-- 优化(慢查询)

一旦 MySQL 服务器重新启动并运行了一段时间,就可以查看慢查询日志文件(在本例中为 /var/lib/mysql/localhost-slow.log)以分析记录的慢查询。日志文件通常包含查询的SQL语句、执行时间、锁定时间等信息。MySQL慢查询日志是定位慢查询的一种有效方法。它记录了执行时间超过指定阈值(由 long_query_time 参数定义,默认是10秒)的所有SQL语句。当数据库执行某些查询时,如果响应时间过长,就可能导致系统性能下降,影响用户体验。

2024-03-04 21:11:24 550

原创 线程安全是---什么是AQS?

基于AQS的自定义同步器示例。我们将实现一个简单的互斥锁(Mutex)// 通过继承AQS并实现必要的方法来创建一个简单的互斥锁。// 示例中展示了如何控制锁的获取和释放,并通过isLocked方法检查锁是否被当前线程占用。// 自定义同步器,继承 AQS// 是否处于占用状态@Override// 当状态为 0 的时候获取锁@Override// 只能为 1if (compareAndSetState(0, 1)) { // state为0才设置为1,不可重入。

2024-02-29 20:39:44 996

原创 线程的基础知识

Thread 类更直接,但受限于Java的单继承机制。Runnable 接口更灵活,适用于多个继承的场景,但没有返回值和异常传递能力。Callable 接口提供返回值和异常传递能力,但需要与 Future 和 ExecutorService 配合使用,适用于需要异步获取结果的场景。

2024-02-28 18:05:11 976

原创 HashMap和hashTabel的区别

HashMap 和HashTable 虽然都是基于哈希表实现的键值对集合,但它们在线程安全性、性能和数据结构等方面存在明显的差异。在选择使用哪一个时,我们需要根据具体的应用场景和需求来进行权衡。如果需要在多线程环境下进行安全的并发操作,那么HashTable可能是一个更好的选择。而在单线程环境下,或者对性能有较高要求的情况下,HashMap则可能提供更优的性能表现。同时,我们还需要注意到HashMap在处理空键值对时的灵活性,这也是HashTable所不具备的一个特点。

2024-02-27 19:08:16 665

原创 线程的基础知识

并发(concurrent) 是同一时间应对(dealing with)多件事情的能力并行(parallel) 是同一时间动手做 (doing)多件事情的能力本文通过解释并行和并发在单核和多核CPU下的工作方式,帮助读者更好地理解这两者之间的区别。在单核CPU下,尽管可以创建多个线程,但实际上它们是交替执行的(微观串行),从而实现一种并发的效果。而在多核CPU下,每个核心都可以独立地执行线程,从而实现真正的并行处理。了解这些概念对于理解和优化多线程应用程序的性能至关重要。

2024-02-24 19:54:05 1278

原创 线程的基础知识

线程和进程是操作系统中两种重要的执行模型。它们各有优缺点,适用于不同的场景和需求。在选择使用多线程还是多进程模型时,需要根据应用程序的具体需求和特点来决定。当我们在电脑上打开一个应用程序,比如“谷歌浏览器”或者一个“txt文档”,我们通常说这是开启了一个进程。进程是操作系统中进行资源分配的基本单位,每个进程都拥有其独立的内存空间和系统资源,以确保程序的正确运行。一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行。定义:线程是进程中的执行单元,代表了进程内的一条执行路径或指令流。

2024-02-23 21:19:10 480 1

原创 Spring中的@Component与@Bean:你真的了解它们吗?

Component注解是基于类的注解,用于定义普通的组件类。Spring容器会自动扫描和创建这些组件的Bean对象。@Bean注解是基于方法的注解,用于在配置类中定义Bean对象。我们需要手动在配置类中定义和配置这些Bean对象。在选择使用哪个注解时,如果你只是需要一个简单的Bean对象,并且不需要进行额外的初始化或修改操作,那么@Component注解可能是一个更好的选择。因为它更简洁,且不需要手动配置。

2024-02-19 18:13:27 1877 2

原创 MyBatis一级缓存与二级缓存详解及代码演示

Test// 获取SqlSession对象,用它来执行sql// 执行sql// 获取UserMapper接口的代理对象// 关闭资源// 关闭资源2.4 注意事项二级缓存的生命周期与应用程序相同,当应用程序关闭时,二级缓存会被清空。二级缓存可以在多个SqlSession之间共享数据,但需要注意数据一致性问题。不同的命名空间(Mapper)有各自独立的二级缓存,但可以通过配置实现缓存共享。MyBatis的一级缓存和二级缓存为提高数据访问性能提供了有效手段。

2024-02-03 14:24:56 600 1

原创 MyBatis的执行流程

在MyBatis内部,Executor执行器负责准备SQL语句、绑定参数、执行查询或更新,并处理结果集。根据配置和SQL类型(查询、更新等),Executor可能是SimpleExecutor、ReuseExecutor或BatchExecutor之一。MyBatis根据配置选择一个Executor实现(SimpleExecutor、ReuseExecutor或BatchExecutor)。Executor执行器使用数据源中的连接执行SQL语句。接着,它会将方法参数绑定到SQL语句中的占位符上。

2024-02-02 21:31:07 1459

原创 Spring循环依赖

循环依赖指的是两个或多个Bean之间相互依赖,形成了一个无法解开的循环。例如,A依赖B,B依赖C,而C又依赖A,这就形成了一个循环依赖。在Spring中,循环依赖主要发生在单例Bean的初始化过程中,特别是在执行依赖注入的步骤时。

2024-01-30 17:23:00 1014

原创 Spring Bean的生命周期

在上述的例子中,init 方法被标记为 @PostConstruct,这意味着在 Spring 创建 Dog bean 并注入所有依赖项(如 name)之后,init 方法将被自动调用。在上述例子中,destroy 方法被标记为 @PreDestroy,这意味着在 Spring 容器关闭并销毁 Dog bean 之前,destroy 方法将被自动调用。需要注意的是,@PreDestroy 注解的方法通常只在容器正常关闭时才会被调用。在基于 Spring Boot 的应用程序中,这通常是自动处理的。

2024-01-29 12:25:51 698 1

原创 Spring boot自动配置

@SpringBootConfiguration 注解上面有一个 @Configuration 注解,它表明了一个javaConfigspringboot 中推荐 javaConfig 来代替 xmlConfig@SpringBootConfiguration 的作用是标志一个JavaConfig 文件,在自动注入时可以读到这个配置@ComponentScan自动扫描并加载符合条件的组件(如@Component/@Controller/@Service等)或bean的定义,然后再把这些bean加

2024-01-28 18:51:22 1132 2

原创 springboot 常用注解

Sring Boot 通过提供大量的默认配置和简化的编程模型,使得开发者能够更快速地构建和部署应用程序。在 Spring Boot 中,注解(Annotations)扮演着重要的角色,它们用于配置和管理应用程序的各个方面。Spring Boot 是一个开源的 Java 应用框架,它旨在简化创建独立的、生产级别的基于 Spring 的应用程序。

2024-01-27 22:17:06 496 4

空空如也

空空如也

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

TA关注的人

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