<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Author1thy的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Author1thy</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Author1thy]]></copyright><item><title><![CDATA[SpringBoot 集成Redis，修改序列化方法]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/109537829</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/109537829</guid><author>Author1thy</author><pubDate>Fri, 06 Nov 2020 19:35:21 +0800</pubDate><description><![CDATA[首先看一下源码：
public class RedisTemplate&lt;K, V&gt; extends RedisAccessor
 implements RedisOperations&lt;K, V&gt;,
BeanClassLoaderAware {
 //声明了key，value的各种序列化方式，初始值为null
 @Nullable
 private RedisSerializer keySerializer = null;
 @Nullable
 private RedisSerial]]></description><category></category></item><item><title><![CDATA[Spring MVC笔记]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/109457978</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/109457978</guid><author>Author1thy</author><pubDate>Mon, 02 Nov 2020 21:30:07 +0800</pubDate><description><![CDATA[Spring MVC笔记
Spring MVC是Spring提供给我们的一个简化web开发的框架
第一部分Spring MVC 应⽤
第一节Spring MVC 简介
1.1Spring MVC 简介
三层架构
我们的开发架构⼀般都是基于两种形式，⼀种是 C/S 架构，也就是客户端/服务器；另⼀种是 B/S 架构
，也就是浏览器服务器。在 JavaEE 开发中，⼏乎全都是基于 B/S 架构的开发。那么在 B/S 架构中，系
统标准的三层架构包括：表现层、业务层、持久层。三层架构在我们的实际开发中使⽤的⾮常多]]></description><category></category></item><item><title><![CDATA[Spring笔记]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/109269334</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/109269334</guid><author>Author1thy</author><pubDate>Sun, 25 Oct 2020 01:20:47 +0800</pubDate><description><![CDATA[第一部分 Spring概述
第1节Spring简介
Spring 是分层的 full-stack（全栈） 轻量级开源框架，以 IoC 和 AOP 为内核，提供了展现层 Spring
MVC 和业务层事务管理等众多的企业级应⽤技术，还能整合开源世界众多著名的第三⽅框架和类库，已
经成为使⽤最多的 Java EE 企业应⽤开源框架。
Spring 官⽅⽹址：http://spring.io/
我们经常说的 Spring 其实指的是Spring Framework（spring 框架）。
第2节Spring 发展]]></description><category></category></item><item><title><![CDATA[Mybatis笔记]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/109235140</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/109235140</guid><author>Author1thy</author><pubDate>Sat, 24 Oct 2020 16:01:24 +0800</pubDate><description><![CDATA[一、自定义持久层框架

JDBC存在问题

数据库连接创建、释放频繁造成系统资源浪费，从而影响系统性能
Sql语句在代码中硬编码，造成代码不易维护，实际应用中Sql变化可能较大，sql变动需要改变java代码
使用preparedStatement向占位符传参存在硬编码，因为sql语句的where条件不一定，可能多页可能少，修改sql还要修改代码，系统不易维护
对结果集存在硬编码（查询列明），sql变化导致解析代码变化，系统不易维护，如果能将数据库记录封装成pojo对象解析会更加方便


问题解决思路

使]]></description><category></category></item><item><title><![CDATA[java手写简单实现ioc、aop事务demo]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/109169491</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/109169491</guid><author>Author1thy</author><pubDate>Mon, 19 Oct 2020 21:22:10 +0800</pubDate><description><![CDATA[java手写简单实现ioc、aop事务demo
下载地址：
https://download.youkuaiyun.com/download/Author1thy/12972060

]]></description><category></category></item><item><title><![CDATA[java  自定义持久层框架代码]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/109140573</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/109140573</guid><author>Author1thy</author><pubDate>Sun, 18 Oct 2020 00:44:55 +0800</pubDate><description><![CDATA[java  自定义持久层框架代码
下载地址：
https://download.youkuaiyun.com/download/Author1thy/12952333

]]></description><category></category></item><item><title><![CDATA[JVM垃圾回收器]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/108698517</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/108698517</guid><author>Author1thy</author><pubDate>Tue, 22 Sep 2020 01:46:02 +0800</pubDate><description><![CDATA[GC分类与性能指标
分类

按线程数分，可以分为串行垃圾回收器和并行垃圾回收器。
按工作模式 分，可以分为并发式垃圾回收器和独占式垃圾回收器。
按碎片处理方式分，可分为压缩式垃圾回收器和非压缩是垃圾回收器。
按工作的内存空间分，可分为年轻代垃圾回收器和老年代垃圾回收器。

指标
- 吞吐量：运行用户代码的时间占总时间的比例

垃圾收集开销：吞吐量的补数，垃圾收集时间与总运行时间的比例
- 暂停时间：执行垃圾收集时，程序的工作线程被暂停的时间STW
收集频率：相对于程序执行，收集操作发生的频率
- 内存占用：]]></description><category></category></item><item><title><![CDATA[JVM垃圾回收相关概念]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/108695181</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/108695181</guid><author>Author1thy</author><pubDate>Sun, 20 Sep 2020 20:53:11 +0800</pubDate><description><![CDATA[System.gc()的理解

在默认情况下，通过System.gc()或者Runtime.getRuntime.gc()的调用，会显示触发Full GC，同时对老年代和新生代进行回收，尝试释放被丢弃对象占用的内存
然后System.gc()调用附带一个免责声明，无法保证堆垃圾收集器的调用
JVM实现者可以通过System.gc()调用来决定JVM的GC行为。而一般情况下，垃圾回收应该自动进行，无需手动触发，否则太过麻烦。在一谢特殊情况下，如我们正在编写一个性能基准，我们可以在运行之间调用System.gc]]></description><category></category></item><item><title><![CDATA[JVM垃圾回收相关算法]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/108688061</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/108688061</guid><author>Author1thy</author><pubDate>Sun, 20 Sep 2020 15:48:11 +0800</pubDate><description><![CDATA[标记阶段：引用计数算法


对每个对象保存一个整型的引用计数属性，用于记录被引用的情况，引用+1，引用失效-1


优点：实现简单，垃圾对象便于识别；判定效率搞，回收没有延迟性


缺点:

它需要独立的字段存储计数器，这样的作法增加了存储空间的开销
每次赋值都需要更新计数器，伴随着加法和减法的操作，增加了时间开销
引用计数器又一个严重的问题，即无法处理循环引用的情况。这是一条致命缺陷，导致在Java的垃圾回收器中没有使用该算法



java使用的不是引用计数算法（Python使用了）


标记阶段：可达]]></description><category></category></item><item><title><![CDATA[JVM垃圾回收概述]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/108687690</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/108687690</guid><author>Author1thy</author><pubDate>Sun, 20 Sep 2020 00:13:33 +0800</pubDate><description><![CDATA[什么是垃圾

垃圾是指在运行程序中没有认合指针指向的对象，这个对象就是需要被回收的垃圾，如果不及时对内存中的垃圾进行清理，那么这些垃圾对象所占用的内存空间会一直保留到应用程序结束，被保留的空间无法被其他对象使用。甚至可能导致内存溢出。

为什么需要GC

对于高级语言来说，一个基本认知是如果不进行垃圾回收，内存迟早都会被消耗完，因为不断分配内存空间而不进行回收，就好像不停地生产生活垃圾而不打扫一样
除了释放没用的对象，垃圾回收也可以清楚内存里的记录碎片。碎片整理所占用的堆内存移到堆的的一段，以便将整理出的内]]></description><category></category></item><item><title><![CDATA[JAVA String]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/108656290</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/108656290</guid><author>Author1thy</author><pubDate>Fri, 18 Sep 2020 01:17:56 +0800</pubDate><description><![CDATA[String常量池
在字符串常量池中生成：

直接使用双引号声明
List item
使用intern()方法

位置：
所有字符串都在堆中，和其他普通对象一样。
String拼接

常量与常量拼接的结果在常量池，编译期优化
常量池中不会存在内容相同的常量
只要其中一个是变量，结果就在堆中。变量拼接的源里是StringBuider
如果拼接的结果调用intern()方法，则主动将常量池中没有的字符串对象放入池中，并返回此地址

    public static void main(String[] arg]]></description><category></category></item><item><title><![CDATA[JVM执行引擎，解释器，即时编译器(]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/108633849</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/108633849</guid><author>Author1thy</author><pubDate>Thu, 17 Sep 2020 00:40:22 +0800</pubDate><description><![CDATA[解释器(Interpreter): 解释器解释字节码的速度很快，但执行缓慢。缺点是: 当一个方法被多次调用时，每次都需要新的解释。
即时编译器(JIT Compiler): JIT编译器消除了解释器的缺点。执行引擎使用解释器来帮助转换字节码，但是发现热点代码(重复执行代码) ，它将使用JIT,将热点代码编译成本机机器码 。机器码直接用于重复的方法调用，从而提高系统性能。


...]]></description><category></category></item><item><title><![CDATA[JVM运行时数据区]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/108633456</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/108633456</guid><author>Author1thy</author><pubDate>Thu, 17 Sep 2020 00:34:18 +0800</pubDate><description><![CDATA[程序计数器
记录当前线程正在执行的字节码指令地址，是线程独享的不存在垃圾回收和OOM
栈
一个方法在栈中是一个栈帧，一个栈帧中包含局部变量表、操作数栈、动态连接和方法返回地址等，不存在垃圾回收，存在OOM

局部变量表：存放编译期可知的各种基本数据类型，对象引用和返回类型
操作数栈：方法中运算产生的变量
动态连接：每个栈帧中都包含一个指向运行时常量池中该栈帧所属方法的引用
方法出口：正常的return和异常的抛出

方法区/元空间
JDK1.8之后改为元空间，使用本地内存，用于存储类信息、常量、静态变量，即]]></description><category></category></item><item><title><![CDATA[JVM类加载器]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/108632935</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/108632935</guid><author>Author1thy</author><pubDate>Wed, 16 Sep 2020 23:59:50 +0800</pubDate><description><![CDATA[类加载过程
一、加载

将class文件加载到内存之中，class文件来源有本地文件、JAR包、网络、动态编译java源文件。
类加载器除了JVM提供的（bootstrap 等）之外可以通过继承ClassLoader类来创建自己的类加载器

二、链接


验证：检查被加载的累结构是否正确，可以防止恶意入侵，确保Class文件中包含的信息符合当前虚拟机的要求。主要包括文件格式验证，元数据验证，字节码验证，符号引用验证
文件格式验证：验证字节流是否符合Class文件格式规范
元数据验证：对字节码描述的信息进行语]]></description><category></category></item><item><title><![CDATA[jvm堆常用设置]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/108565986</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/108565986</guid><author>Author1thy</author><pubDate>Sun, 13 Sep 2020 18:57:09 +0800</pubDate><description><![CDATA[-XX:+PrintFlagsInitial ：查看所有的参数默认初始值
-XX:+PrintFlagsFinal ：查看左右参数的的最终值，修改后的值
具体查看某个参数的指令：jps:查看当前运行中的进程
jinfo -flag 查看的参数 进程id
-Xms：初始化堆空间内存（默认为物理内存的1/64）
-Xmx：最大堆空间内存（默认为物理内存的1/4）（建议最大最小值一致，较少系统动态调整空间二浪费性能）
-Xmn：设置新生代的大小。（初始值及最大值）
-XX:NewRatio：配置新生代与老年代在堆]]></description><category></category></item><item><title><![CDATA[java马踏棋盘实现，回溯+贪心]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/108372205</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/108372205</guid><author>Author1thy</author><pubDate>Wed, 02 Sep 2020 22:54:16 +0800</pubDate><description><![CDATA[思路：
正常回溯算法，通过贪心算法优先走剩余可走位置少的，因为可能之后再也走不到了
代码：
package com.wangyq.datastructrue.arithmetic;

import java.util.Arrays;

/**
 * 回溯算法，贪心算法实现马踏棋盘问题
 */
public class TheHorseStepBoard {
    static final int[] dx = {-2, -1, 1, 2, 2, 1, -1, -2}; // x方向的增量
    stat]]></description><category></category></item><item><title><![CDATA[JAVA实现弗洛伊德算法，求顶点之间的最短距离]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/108352910</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/108352910</guid><author>Author1thy</author><pubDate>Tue, 01 Sep 2020 23:19:42 +0800</pubDate><description><![CDATA[思路：
A通过B到C的距离可能比直接从A到B的距离更短，挨个比较更新到距离表中
代码：
package com.wangyq.datastructrue.arithmetic;

import java.util.Arrays;

public class FloydAlgorithm {
    private static int MAX = 1000;

    public static void main(String[] args) {
        //构建图
        int[][]]]></description><category></category></item><item><title><![CDATA[java实现迪杰斯特拉算法]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/108333082</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/108333082</guid><author>Author1thy</author><pubDate>Tue, 01 Sep 2020 02:04:54 +0800</pubDate><description><![CDATA[思路：
从起始点出发，广度遍历，记录到该点距离最短的顶点，记录下来，再广度遍历剩余的顶点，直到确定所有顶点都为最短时结束
代码：
package com.wangyq.datastructrue.arithmetic;

import java.util.Arrays;

public class Dijkstra {
    private static int MAX = 1000;

    public static void main(String[] args) {
        //构建图
]]></description><category></category></item><item><title><![CDATA[java斐波那契查询]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/107920827</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/107920827</guid><author>Author1thy</author><pubDate>Tue, 01 Sep 2020 00:01:37 +0800</pubDate><description><![CDATA[代码：
package com.wangyq.datastructrue.search;

import java.util.Arrays;

public class FibonacciSearch {
    public static void main(String[] args) {
        int[] ints = {1, 6, 18, 19, 37, 50, 61, 69, 76, 81, 83, 99, 108, 113, 114, 121, 124, 156, 180, 197};]]></description><category></category></item><item><title><![CDATA[java克鲁斯卡尔算法]]></title><link>https://blog.youkuaiyun.com/Author1thy/article/details/108330415</link><guid>https://blog.youkuaiyun.com/Author1thy/article/details/108330415</guid><author>Author1thy</author><pubDate>Mon, 31 Aug 2020 23:55:04 +0800</pubDate><description><![CDATA[思路：
依次取最短路径，如果可以两个顶点美豆都联通则连接该路径直到所有顶点全都链接
代码：
package com.wangyq.datastructrue.arithmetic;

import java.util.Arrays;

public class Kruskal {
    public static void main(String[] args) {
        //构建图
        int[][] ints = new int[7][7];
        for (int[]]]></description><category></category></item></channel></rss>