<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Scyth1的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Scyth1</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Scyth1]]></copyright><item><title><![CDATA[缓存穿透，缓存击穿，缓存雪崩问题实例及解决方案]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/132342237</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/132342237</guid><author>Scyth1</author><pubDate>Thu, 17 Aug 2023 15:59:46 +0800</pubDate><description><![CDATA[缓存穿透是指请求一个不存在于缓存中的数据，这会导致请求直接落到后端数据库，增加数据库的负载。攻击者可以通过频繁请求不存在的数据来导致缓存穿透。：缓存击穿是指一个热点数据在缓存中过期或被删除后，大量请求同时涌入，直接落到后端数据库，导致数据库负载剧增。：缓存雪崩是指多个缓存中的数据同时失效，导致大量请求涌入后端数据库，造成数据库负载激增，甚至崩溃。]]></description><category></category></item><item><title><![CDATA[谈谈HashMap扩容]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/132338139</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/132338139</guid><author>Scyth1</author><pubDate>Thu, 17 Aug 2023 12:11:06 +0800</pubDate><description><![CDATA[如果有下一个元素 并且是TreeNode类型 用hash值 与原来桶的容量进行与运算 假如是变成了 32 就和10000 进行与运算 当扩大了一倍 重新计算也就是和 前五位进行与运算 因为前四位的在上一次已经计算出来了 只需要看hash第五位是不是1就可以了 如果 第五位 是0 就继续放到低位节点 和以前的节点一样 如果是1 就放到高位节点 以前的节点+一半的容量 因为以前的桶的位置是和 前4位进行与运算计算到的。如果桶的数量不是2的幂次方，可能会出现一些桶无法被充分利用的情况，导致内存浪费。]]></description><category></category></item><item><title><![CDATA[深入探索Redis]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/132337946</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/132337946</guid><author>Scyth1</author><pubDate>Thu, 17 Aug 2023 11:58:03 +0800</pubDate><description><![CDATA[redis 是一种高性能的内存数据存储结构,常用于缓存,消息队列,计数器等场景.

1.可以当作缓存来使用 减轻数据库的压力

2.可以用来实现分布式锁保证多个线程同时操作共享资源的数据一致性

3.计数器 redis支持自增自减,可以用做计数器的实现

4.Redis的列表结构可以当作消息队列来使用]]></description><category></category></item><item><title><![CDATA[浅谈自动装箱、自动拆箱和128陷阱]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/132337571</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/132337571</guid><author>Scyth1</author><pubDate>Thu, 17 Aug 2023 11:47:37 +0800</pubDate><description><![CDATA[所以当 Integer a = 127 , Integer b = 127 时 , a 和 b 被包装到同一个对象中 , 所以 用 == 号判断时, 认为是相等的. 而当等于128 时,则是分装在两个对象中的 , 自然地址也不会相等 , 所以 == 号 判断结果为 false . 超过128 结果也是一样的 .我们在使用自动装箱时实际调用的是手动装箱Integer的valueOf()方法(即Integer a = 127等价于Integer a = Integer.valueOf(127))。]]></description><category></category></item><item><title><![CDATA[深入浅出：Spring IOC 容器与注解详解]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/130091560</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/130091560</guid><author>Scyth1</author><pubDate>Thu, 17 Aug 2023 11:31:22 +0800</pubDate><description><![CDATA[Qualifier：在自动按照类型注入的基础上再按照Bean的id注入，给变量注入时必须搭配@Autowired，给方法注入时可单独使用。①：注解是代码特殊标记，格式：@注解名称(属性名称=属性值，属性名称=属性值...)@Resource java提供的注解，也被支持，使用name属性，按名称注入。A类想要调用B类就必须自己在自己的内部新建B类的对象，这样的耦合度太高。Spring ----------------> IOC 控制权翻转。②：使用注解，注解作用在类上面，方法上面，属性上边。]]></description><category></category></item><item><title><![CDATA[ArrayList和LinkedList的一些区别（简洁明了）]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/132299653</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/132299653</guid><author>Scyth1</author><pubDate>Tue, 15 Aug 2023 15:21:52 +0800</pubDate><description><![CDATA[ArrayList 和 LinkedList 都是不同步的，不保证线程安全]]></description><category></category></item><item><title><![CDATA[深入理解Java内存管理：探究JVM内存溢出与垃圾回收策略]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/132261515</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/132261515</guid><author>Scyth1</author><pubDate>Mon, 14 Aug 2023 00:21:49 +0800</pubDate><description><![CDATA[软：在系统要发生oom，会回收所有的软引用对象，如果回收完，还是放不上这个对象，才溢出。，每次垃圾回收的时候，如果对象还没死，就不回收，但是在oom之前，不管有没有死，都会被回收。设置虚拟机启动参数的目的：如果不限制jvm启动参数（不限制堆大小，不限制栈大小，他会默认是无限的，会不断的占用服务器的内存，直到服务器发生oom，影响到其他程序）为什么说要有这个设置：为了满足当内存空间还足够时， 能保留在内存之中， 如果内存空 间在进行垃圾收集后仍然非常紧张， 那就可以抛弃这些对象。如果不是，就得修复。]]></description><category></category></item><item><title><![CDATA[单点登录逻辑解释]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/132183946</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/132183946</guid><author>Scyth1</author><pubDate>Wed, 09 Aug 2023 11:20:32 +0800</pubDate><description><![CDATA[它的原理是通过在用户第一次登录时颁发一个令牌（Token），然后在用户访问其他应用系统时，这些系统可以通过验证令牌来确认用户身份，从而实现无缝的登录体验。当你第一次登录任意一个系统时，你只需输入一次用户名和密码，认证中心会颁发一个令牌给你。然后，当你访问其他系统时，这些系统会检查你的令牌，如果有效，无需再次输入用户名和密码，你就可以无缝地访问其他系统。用一个例子来解释单点登录的概念： 假设你是一个公司的员工，公司有多个内部系统，比如邮件系统、办公系统和人事系统，每个系统都有自己的登录方式。]]></description><category></category></item><item><title><![CDATA[linux启动tomcat的一些错误]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/132116738</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/132116738</guid><author>Scyth1</author><pubDate>Sat, 05 Aug 2023 13:53:00 +0800</pubDate><description><![CDATA[etc/jxlTest/tomcat8001/apache-tomcat-8.5.91-src/bin/catalina.sh:行508: /etc/jxlTest/tomcat8001/apache-tomcat-8.5.91-src/logs/catalina.out: 没有那个文件或目录。touch: 无法创建"/etc/jxlTest/tomcat8001/apache-tomcat-8.5.91-src/logs/catalina.out": 没有那个文件或目录。]]></description><category></category></item><item><title><![CDATA[synchronized的使用场景，锁的升级，锁对象、锁静态变量、锁变量的区别]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/132100141</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/132100141</guid><author>Scyth1</author><pubDate>Fri, 04 Aug 2023 11:10:33 +0800</pubDate><description><![CDATA[锁的升级是指在同一个线程中多次获取同一把锁，锁可以升级但不能降级。具体来说，一个线程在持有锁的情况下，可以再次进入被同一把锁保护的代码块（即嵌套。是 Java 中用于实现线程同步的关键字，它可以用来修饰方法或代码块，以实现对共享资源的互斥访问。锁变量是一种更灵活的方式，可以实现更细粒度的线程同步。你可以使用任意对象作为锁，通过在代码块中使用。这种方式允许你更精确地控制同步的范围，不局限于对象实例或类的锁。的使用场景、锁的升级以及锁对象、锁静态变量、锁变量的区别。这种升级是隐式的，不需要额外操作。]]></description><category></category></item><item><title><![CDATA[反射详解（三种反射获取类的方式）]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/132098435</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/132098435</guid><author>Scyth1</author><pubDate>Fri, 04 Aug 2023 10:19:10 +0800</pubDate><description><![CDATA[三种反射获取类的方式

1.通过对象的getClass方法进行获取

2.通过Class.forName()方法获取 //里面填写类的路径 tomcat就是用的这个

调用静态方法 forName 获得类名对应的 Class 对象。

String dassName = "java.util .Random";

Class cl = Class.forName(dassName);

3.通过静态属性class可直接获取到该类型对应的Class对象例如：T]]></description><category></category></item><item><title><![CDATA[元注解介绍]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/132097438</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/132097438</guid><author>Scyth1</author><pubDate>Fri, 04 Aug 2023 09:54:50 +0800</pubDate><description><![CDATA[如果一个注解被@Inherited元注解标记，并且它应用于某个类，那么这个注解会被其子类继承。在类继承关系中，子类会自动继承父类上的被@Inherited标记的注解。如果一个注解被@Documented元注解标记，并且它应用于某个元素（如类、方法、字段等），则在生成JavaDoc文档时，这个注解会被包含在文档中，方便开发者查看。如果一个注解被@Inherited元注解标记，并且它应用于某个类，那么这个注解会被其子类继承。在类继承关系中，子类会自动继承父类上的被@Inherited标记的注解。]]></description><category></category></item><item><title><![CDATA[消息队列解耦、异步、削峰：简单实例与原理解析]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/131860788</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/131860788</guid><author>Scyth1</author><pubDate>Fri, 21 Jul 2023 21:49:33 +0800</pubDate><description><![CDATA[通过消息队列，我们可以实现异步处理，订单系统只需要发送消息到消息队列，然后立即返回响应给用户，而不需要等待库存系统的响应。消息队列充当了消息的中转站，生产者将消息发送到消息队列，消费者从消息队列中获取消息并进行处理。消息队列可以用于削峰填谷，即将请求暂时存储在消息队列中，然后按照系统处理能力逐渐消费消息，从而平滑处理高峰期的请求，避免系统崩溃或性能下降。当一个系统产生消息时，将消息发送到消息队列，其他系统可以订阅消息队列并接收消息，从而实现解耦。而通过消息队列，我们可以实现它们之间的解耦。]]></description><category></category></item><item><title><![CDATA[Java Socket实现简易多人聊天室传输聊天内容或文件]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/131769030</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/131769030</guid><author>Scyth1</author><pubDate>Mon, 17 Jul 2023 17:28:39 +0800</pubDate><description><![CDATA[通过建立客户端和服务器之间的连接，以及使用输入流和输出流进行数据的读写，可以实现实时的聊天和文件传输功能。ChatClientHandler 类的作用是与客户端建立连接并处理与客户端的通信，包括接收和发送消息以及接收和发送文件。服务器端广播消息：服务器在接收到客户端发送的消息后，可以将该消息广播给其他连接到服务器的客户端。通过遍历保存所有客户端的列表，并调用相应客户端的输出流发送消息给客户端。服务器端接收消息：当客户端连接到服务器后，服务器会为每个客户端创建一个独立的线程，用于处理与该客户端的通信。]]></description><category></category></item><item><title><![CDATA[正向代理和反向代理]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/131738142</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/131738142</guid><author>Scyth1</author><pubDate>Sat, 15 Jul 2023 13:48:52 +0800</pubDate><description><![CDATA[客户端发送请求时，并不直接与目标服务器通信，而是与反向代理服务器通信。反向代理服务器根据请求的内容和规则，将请求转发到相应的目标服务器上，并将目标服务器的响应返回给客户端。在反向代理中，客户端并不知道响应来自哪个具体的目标服务器，只知道响应来自代理服务器。客户端首先将请求发送给代理服务器，然后代理服务器再将请求转发给目标服务器，最后将目标服务器的响应返回给客户端。在正向代理中，目标服务器并不知道请求的真实发起者是客户端，只知道请求来自代理服务器。是代表目标服务器发送响应，隐藏目标服务器身份。]]></description><category></category></item><item><title><![CDATA[HashMap两个对象判等]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/128668890</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/128668890</guid><author>Scyth1</author><pubDate>Fri, 13 Jan 2023 08:12:25 +0800</pubDate><description><![CDATA[判断两个对象的hashCode()是否相等。判断两个对象的equals()是否相等。两个对象相等，两个对象的哈希一定相等。哈希相等的两个对象并不一定完全相等。，认为两个对象也不相等。，认为两个对象也不相等。]]></description><category></category></item><item><title><![CDATA[Maven项目中的依赖管理、RelativePath、Maven多模块项目中Base模块和Common模块]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/128616904</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/128616904</guid><author>Scyth1</author><pubDate>Mon, 09 Jan 2023 17:27:38 +0800</pubDate><description><![CDATA[多个子项目引用同样的依赖，则可以避免在每个使用的子项目里都声明一个版本号，这样当想升级或者切换到另外一个版本时，只需要在顶层父容器更新版本号即可，不需要一个一个子项目中修改；Maven会沿用父子层次向上走，直到找到一个拥有dependencyManagement元素的项目，然后它就会使用dependencyManagement元素中提供的指定版本号。使用pom.xml中的dependencyManagement元素能让所有的子项目中引用一个依赖而不需要显示的列出版本号。通常会在一个组织或者项目的最顶层。]]></description><category></category></item><item><title><![CDATA[统一异常拦截、ioc apo实现操作记录、非法sql拦截]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/128171674</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/128171674</guid><author>Scyth1</author><pubDate>Sun, 04 Dec 2022 15:51:45 +0800</pubDate><description><![CDATA[平时我们都会用try catch 或throw的方式去处理异常，统一异常拦截可以进行统一处理将后端的异常，将没有try，catch住的给拦截住，不用每次编码都进行try，catch，降低了开发的复杂度。 如果不统一异常拦截，我们需要写很多try catch实现了解两个注解@RestControllerAdvice可以扫描到所有的controller，所有controller中都有@RestController这个注解Spring在扫描容器的时候，将类归到了Controller中，扫描Controller即可]]></description><category></category></item><item><title><![CDATA[Mybatis关联映射 多表查询（三种写法优缺点、主流性） 以及分步查询 延迟加载（按需加载、懒加载）]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/127675700</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/127675700</guid><author>Scyth1</author><pubDate>Fri, 04 Nov 2022 21:20:57 +0800</pubDate><description><![CDATA[本文其实是我给自己写的保姆级教程，以防自己在新手期忘记了怎么写。。。。也方便自己时常拿出来看看]]></description><category></category></item><item><title><![CDATA[final关键字的作用 final和基本类型、引用类型]]></title><link>https://blog.youkuaiyun.com/Scyth1/article/details/126016472</link><guid>https://blog.youkuaiyun.com/Scyth1/article/details/126016472</guid><author>Scyth1</author><pubDate>Wed, 27 Jul 2022 16:06:26 +0800</pubDate><description><![CDATA[final四个作用
final修饰常量 ，值不可以被第二次修改

final修饰的类不可以被继承

final修饰的方法不可以被重写

final防止多线程下的指令重排序，保障线程安全]]></description><category></category></item></channel></rss>