<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ShakespeareLies的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ShakespeareLies</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ShakespeareLies]]></copyright><item><title><![CDATA[MySQL 与 Redis 数据库区别]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136817736</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136817736</guid><author>ShakespeareLies</author><pubDate>Mon, 18 Mar 2024 18:50:06 +0800</pubDate><description><![CDATA[事务特性：BASE { Basically Available(基本可用)，Soft state（软状态）,和 Eventually consistent（最终一致性）}键值类型 （Redis） 文档类型（MongoDB） 列类型（HBase） Graph类型(Neo4j)支持主从集群，分片集群 （从节点 可也 备份 主节点，主节点万一出现宕机，数据也可以从节点找到，读写分离。低延迟，速度快（基于内存（核心），IO多路复用，良好的编码）事务特性：ACID （原子性，持久性，隔离性，一致性）]]></description><category></category></item><item><title><![CDATA[拦截器和过滤器的区别]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136699115</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136699115</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 09:45:53 +0800</pubDate><description><![CDATA[除了可以实现类似于过滤器的安全控制、日志记录等功能外，还可以访问到Spring容器内的Bean，参与到业务逻辑层面，比如权限验证、事务管理、数据预处理和后处理等。通常只能拦截经过框架处理的请求，例如Spring MVC中的HandlerMapping映射后的请求，不适用于对非框架处理的请求或静态资源请求。总之，过滤器关注的是更底层的、通用的请求和响应处理，而拦截器则更加聚焦于特定框架内的请求处理，更便于进行业务逻辑的干预和扩展。：应用范围广泛，可以对几乎所有类型的HTTP请求进行拦截，包括静态资源请求等。]]></description><category></category></item><item><title><![CDATA[Exist 和 In 的区别，哪个效率高？]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136676243</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136676243</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:45:00 +0800</pubDate><description><![CDATA[两个查询的目的都是找出参加了课程的学生。然而，从效率角度来讲，如果没有合适索引，两个查询在大规模数据下可能表现会有差异。但实际上，对于这么简单的关联查询，现代数据库的优化器通常都能很好地优化这两种查询方式的执行计划，难以直观看出效率上的明显差距。]]></description><category></category></item><item><title><![CDATA[SQL查询中实现分组后的Top]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136679487</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136679487</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:44:50 +0800</pubDate><description><![CDATA[中选择了那些排名（Rank）小于等于2的行，即每个销售人员销售额最高的前2个产品。的表，并插入了一些示例数据。然后，我们创建了一个名为。窗口函数对每个销售人员的销售额进行排序。这段代码首先创建了一个名为。的公共表表达式（CTE），在其中使用了。]]></description><category></category></item><item><title><![CDATA[MySQL数据库多种存储引擎]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136679701</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136679701</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:44:42 +0800</pubDate><description><![CDATA[MySQL数据库曾经支持过多种存储引擎，但随着时间的推移和技术的发展，一些存储引擎已经不再被广泛使用或官方不再维护。专门用于存储大量、不常访问的历史归档数据，只支持INSERT和SELECT操作，不支持UPDATE和DELETE，数据自动压缩，不支持索引。早期MySQL默认的非事务型存储引擎，不支持事务和行级锁定，支持全文索引，但不支持外键约束，数据文件和索引文件分离。默认的事务型存储引擎，支持行级锁定，完全符合ACID特性，支持外键约束，提供崩溃恢复能力。：用于图形数据存储和查询的引擎，现已停止开发。]]></description><category></category></item><item><title><![CDATA[mysql索引类型]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136680086</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136680086</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:44:32 +0800</pubDate><description><![CDATA[在数据库系统中，常见的索引类型包括以下几种。]]></description><category></category></item><item><title><![CDATA[为何数据库系统普遍选择B+树作为索引结构而非B树]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136680225</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136680225</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:44:15 +0800</pubDate><description><![CDATA[B+树的所有数据都存储在叶子节点，这样可以最大化地利用操作系统层面的缓存机制，因为一个节点可以存储更多的键值对，使得在同样的内存中可以存储更多索引，减少磁盘I/O。：B+树的所有叶子节点形成了一个有序链表，非常适合范围查询和遍历，而B树由于非叶子节点也存储数据，范围查询需要同时在内部节点和叶子节点间进行，效率较低。：由于B+树的数据都在叶子节点，且叶子节点紧凑排列，故对磁盘I/O更加友好。B树的非叶子节点和叶子节点都存储数据，而B+树仅叶子节点存储数据，非叶子节点只存储键值。]]></description><category></category></item><item><title><![CDATA[ACID原则]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136680424</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136680424</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:44:04 +0800</pubDate><description><![CDATA[脏读（Dirty Read）：一个事务读取到了另一个事务已经修改但尚未提交的数据，如果那个事务最终回滚，那么读到的数据就是临时且无效的。不可重复读（Non-repeatable Read）：在一个事务内，同一查询在不同时刻返回不同的结果，因为其他事务提交了新的数据。不可重复读：虽然避免了脏读，但在一个事务中，同一查询在不同时刻仍可能返回不同的结果，因为其他事务提交了新的数据。这种级别确保在同一事务内多次读取相同数据时，即使有其他事务提交了数据，结果也是相同的。读未提交（Read Uncommitted）]]></description><category></category></item><item><title><![CDATA[面向对象的特征]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136680617</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136680617</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:43:45 +0800</pubDate><description><![CDATA[封装是面向对象的核心概念之一，它将数据（属性）和对数据的操作（方法）捆绑在一起，形成一个单独的单元——对象。抽象类可以包含抽象方法（没有具体实现的方法），迫使子类必须提供这些方法的具体实现。方法重载（Overloading）：在同一个类中，可以定义多个同名方法，但这些方法的参数列表不同（参数个数、类型或顺序不同）。方法覆盖（Overriding）：在子类中重新定义父类的方法，方法名称、返回类型和参数列表必须与父类中的方法完全相同。多态性体现在同一消息发送给不同的对象时，会触发不同的行为。]]></description><category></category></item><item><title><![CDATA[java装箱和拆箱]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136680755</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136680755</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:43:29 +0800</pubDate><description><![CDATA[装箱是指将基本数据类型转换为它们对应的引用类型（包装器类）对象的过程。在Java中，装箱（Boxing）和拆箱（Unboxing）是用来描述基本数据类型（如int、double、char等）与其对应的包装器类（如Integer、Double、Character等）之间相互转换的过程。Java从JDK 1.5版本开始引入了自动装箱和拆箱的特性，极大地简化了程序员的工作，但是在频繁进行装箱和拆箱操作时需要注意性能问题，因为每次装箱和拆箱都会创建和销毁对象，增加内存和CPU的负担。装箱（Boxing）]]></description><category></category></item><item><title><![CDATA[JDK、JRE，JVM 区别]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136680913</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136680913</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:43:18 +0800</pubDate><description><![CDATA[JDK是Java开发工具包，它是为Java开发人员提供的完整开发工具集，不仅包含了JRE，还包括了编译器（javac）、调试器（jdb）、打包工具（jar）、文档生成器（javadoc）以及其他辅助开发、测试、诊断的工具。换言之，JDK是用于开发Java应用程序的完整套件，如果你需要编写和编译Java代码，就需要安装JDK。JRE是Java运行时环境，它是运行Java应用程序所必需的软件环境。JVM是Java平台的核心组成部分，它是一个虚构的计算机，它有自己的指令集和运行时环境，用于执行Java字节码（]]></description><category></category></item><item><title><![CDATA[java创建线程]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136681007</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136681007</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:43:05 +0800</pubDate><description><![CDATA[其中，使用线程池能够更有效地管理和控制线程资源，提高性能和资源利用率，尤其是对于大量短生命周期的线程任务特别适用。方法，它可以有返回值并且可以抛出受检异常。使用线程池（ExecutorService）接口允许开发者获取线程执行的返回值，相比。接口，因此可以作为线程的目标。创建一个新的类，让它继承自。方法，定义线程执行体。创建该类的实例，并调用。方法，定义线程执行体。创建一个新的类，实现。]]></description><category></category></item><item><title><![CDATA[线程池的七个核心参数和四个拒绝策略]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136681395</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136681395</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:42:57 +0800</pubDate><description><![CDATA[线程池的基本大小，即线程池中的核心线程数。CallerRunsPolicy：调用者所在的线程自己来执行任务，这种方式提供了一种简单的反馈控制机制，将任务回退到调用者，从而降低新任务的流量。如果当前线程数超过核心线程数，那么在超过指定时间后，闲置线程会被终止，直到线程池大小回到corePoolSize。线程池所能容纳的最大线程数。当核心线程数已满且工作队列也已满时，线程池会创建新的线程来处理任务，直至达到最大线程数。拒绝策略，当线程池和工作队列均满，无法接受新任务时，定义如何处理新提交的任务。]]></description><category></category></item><item><title><![CDATA[Mybatis原理]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136682026</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136682026</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:42:47 +0800</pubDate><description><![CDATA[当应用程序通过 SqlSession 调用一个 Mapper 接口中的方法时，MyBatis 根据方法签名找到对应的 MappedStatement，并使用预处理语句（PreparedStatement）执行 SQL，同时将结果自动映射到 Java 对象上，这得益于之前配置好的结果映射。MyBatis 提供了一级缓存（本地缓存，存在于 SqlSession 级别）和二级缓存（全局缓存，跨 SqlSession 的共享缓存），用于提高查询性能。，它是会话工厂，负责创建 SqlSession 对象。]]></description><category></category></item><item><title><![CDATA[线程池执行任务的时候出现异常的时候怎么处理]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136681673</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136681673</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:42:24 +0800</pubDate><description><![CDATA[在Java中，当线程池执行任务时出现异常，如果不做特殊处理，线程池本身会根据其配置的异常处理策略来应对。默认情况下，如果线程执行过程中抛出未捕获的异常，线程池会终止该线程，并根据线程池的拒绝策略来决定如何处理后续的任务。当任务无法被线程池执行时（可能是由于线程池饱和且工作队列已满，这时任务被拒绝），这些策略会决定如何处理被拒绝的任务。总之，针对线程池中任务抛出的异常，你需要根据应用的具体需求选择合适的处理方式，包括在任务内部处理、全局配置异常处理器、调整拒绝策略或组合使用以上方法。来统一处理未捕获的异常。]]></description><category></category></item><item><title><![CDATA[java动态代理]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136681846</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136681846</guid><author>ShakespeareLies</author><pubDate>Thu, 14 Mar 2024 07:42:14 +0800</pubDate><description><![CDATA[无论是Java内置的动态代理还是CGLIB，其本质都是在运行时生成一个新的类，这个类能够代理原始对象的方法调用，从而在不修改原有业务代码的基础上，实现对业务方法的增强或控制。代理对象可以实现代理模式，为一个或一组接口提供代理实现，这个代理对象可以在方法调用前后添加额外的处理逻辑，比如权限验证、日志记录、事务管理等。InvocationHandler接口包含一个invoke方法，当通过代理对象调用方法时，这个方法会被调用，从而在方法调用前后添加额外的处理逻辑。Java内置的动态代理（Java Proxy）]]></description><category></category></item><item><title><![CDATA[在SQL LEFT JOIN语句中，将条件置于ON子句与WHERE子句有何区别？]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136676060</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136676060</guid><author>ShakespeareLies</author><pubDate>Wed, 13 Mar 2024 11:57:38 +0800</pubDate><description><![CDATA[【代码】在SQL LEFT JOIN语句中，将条件置于ON子句与WHERE子句有何区别？]]></description><category></category></item><item><title><![CDATA[COUNT(*)，COUNT(0) ，COUNT(1)，COUNT(col1)]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136675856</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136675856</guid><author>ShakespeareLies</author><pubDate>Wed, 13 Mar 2024 11:50:17 +0800</pubDate><description><![CDATA[COUNT(*)，COUNT(0) ，COUNT(1)，COUNT(col1) 有什么区别. 哪个效率高？会忽略列的实际内容，只是用一个常量值（这里是1或0）来进行计数，MySQL优化器会将它们优化为。的效率最高，因为它们直接计算表的行数，而不需要考虑列值。则包含了额外的NULL值检查，如果列中有很多NULL值，其效率可能低于前三种计数方式。这是最常用的计数方式，它会计算表中的所有行，不管这些行中的列值是否为NULL。通常是最高效的，因为它只需要计算行数，无需关心列的具体内容。列中非NULL值的数量。]]></description><category></category></item><item><title><![CDATA[MySql 中所有的聚合函数]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136675637</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136675637</guid><author>ShakespeareLies</author><pubDate>Wed, 13 Mar 2024 11:44:42 +0800</pubDate><description><![CDATA[这三个窗口函数（Window Function）虽然不属于传统意义上的聚合函数，但在SQL查询中常用于根据特定字段对行进行排名或编号。返回参数列表中第一个非NULL的值，虽然不是严格意义上的聚合函数，但在聚合查询中经常用于处理NULL值。RANK()、DENSE_RANK() 和 ROW_NUMBER()VARiance() 和 VARIANCE_POP()计算中位数，MySQL 8.0.2+ 版本引入。STDDEV() 和 STDDEV_POP()BIT_OR() 和 BIT_AND()]]></description><category></category></item><item><title><![CDATA[AtomicInteger作用 ,原理]]></title><link>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136675400</link><guid>https://blog.youkuaiyun.com/ShakespeareLies/article/details/136675400</guid><author>ShakespeareLies</author><pubDate>Wed, 13 Mar 2024 11:36:00 +0800</pubDate><description><![CDATA[在这里的作用就像是一个具备高级功能的银行系统，它确保了无论多少家庭成员同时操作，账户余额的更新总是原子性的，也就是说，每一次存款或取款操作都是独立完成且不会被其他操作打断，这样一来，家庭成员在任何时刻查看账户余额，都能得到正确的数值。的实现主要依赖于CAS（Compare and Swap）操作，这是一种CPU级别的原子指令，可以保证在没有其他线程干扰的情况下更新共享变量的值。等，这些操作在多线程环境下是线程安全的，即在执行这些操作的过程中，不会被其他线程打断，确保了数据的完整性。]]></description><category></category></item></channel></rss>