<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[IT__learning的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/IT__learning</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; IT__learning]]></copyright><item><title><![CDATA[Java通过Apache POI操作Excel]]></title><link>https://blog.csdn.net/IT__learning/article/details/146262904</link><guid>https://blog.csdn.net/IT__learning/article/details/146262904</guid><author>IT__learning</author><pubDate>Fri, 14 Mar 2025 18:11:24 +0800</pubDate><description><![CDATA[读取单元格数据之前，可以先检查该单元格的数据类型。如果它是数字类型，那么你应该读取它的数值值；如果它是文本类型，那么你应该读取它的字符串值。这样可以避免数据类型不匹配的问题。]]></description><category></category></item><item><title><![CDATA[若依自定制logo、网页标题、去掉首页]]></title><link>https://blog.csdn.net/IT__learning/article/details/141194643</link><guid>https://blog.csdn.net/IT__learning/article/details/141194643</guid><author>IT__learning</author><pubDate>Wed, 14 Aug 2024 17:13:46 +0800</pubDate><description><![CDATA[（1）修改 .env.development 里的页面标题,将其标题，改成自己网站标题（2）修改.env.production里面的页面标题，将其标题，改成自己网站标题（3）修改.env.staging里面的网页标题，将其标题，改成自己网站标题（4）修改 vue.config.js网页标题，将其标题，改成自己网站标题。]]></description><category></category></item><item><title><![CDATA[排序算法实现及比较]]></title><link>https://blog.csdn.net/IT__learning/article/details/121482508</link><guid>https://blog.csdn.net/IT__learning/article/details/121482508</guid><author>IT__learning</author><pubDate>Fri, 18 Mar 2022 10:35:45 +0800</pubDate><description><![CDATA[排序算法比较]]></description><category></category></item><item><title><![CDATA[深度优先搜索与岛屿问题]]></title><link>https://blog.csdn.net/IT__learning/article/details/122746921</link><guid>https://blog.csdn.net/IT__learning/article/details/122746921</guid><author>IT__learning</author><pubDate>Sun, 30 Jan 2022 11:06:26 +0800</pubDate><description><![CDATA[深度优先搜索代码
/**
 * DFS核心伪代码
 * 前置条件是visit数组全部设置成false
 * @param n 当前开始搜索的节点
 * @param d 当前到达的深度
 * @return 是否有解
 */
bool DFS(Node n, int d){
    if (isEnd(n, d)){//一旦搜索深度到达一个结束状态，就返回true
        return true;
    }
 
    for (Node nextNode in n){//遍历n相邻的节点next]]></description><category></category></item><item><title><![CDATA[Java 方法调用与虚方法]]></title><link>https://blog.csdn.net/IT__learning/article/details/122362107</link><guid>https://blog.csdn.net/IT__learning/article/details/122362107</guid><author>IT__learning</author><pubDate>Fri, 07 Jan 2022 14:01:59 +0800</pubDate><description><![CDATA[1、静态绑定与动态绑定
绑定是一个字段、方法或者类在符号引用被替换为直接引用的过程，这仅仅发生一次。方法调用与方法体的关联也是绑定。在JVM中，将符号引用转换为调用方法的直接引用与方法的绑定机制相关。有两种类型的绑定：静态绑定在编译时发生，动态绑定在运行时发生。
（1）静态绑定
当一个字节码文件被装载进JVM内部时，如果被调用的目标方法在编译期可知，且运行期保持不变时。这种情况下将调用方法的符号引用转换为直接引用的过程称之为静态绑定。

1）private：不能被继承，则不能通过子类对象调用，而只能通过类本]]></description><category></category></item><item><title><![CDATA[JVM 创建对象过程]]></title><link>https://blog.csdn.net/IT__learning/article/details/122291347</link><guid>https://blog.csdn.net/IT__learning/article/details/122291347</guid><author>IT__learning</author><pubDate>Mon, 03 Jan 2022 20:04:38 +0800</pubDate><description><![CDATA[Java 中对象的创建方式一般有两种：1）new xxx() 通过new关键字创建实例对象；2）通过反射创建对象。不管哪一种创建方式，JVM 底层的执行过程是一样的。

示例程序：
public class Person {
​
    //静态变量
    public  static  int staicVariabl=1;
    //成员变量
    public   int  objVariabl;
​
    //静态初始代码块
    static {
        staicVariabl]]></description><category></category></item><item><title><![CDATA[Java 继承中的属性隐藏与方法重写]]></title><link>https://blog.csdn.net/IT__learning/article/details/122275020</link><guid>https://blog.csdn.net/IT__learning/article/details/122275020</guid><author>IT__learning</author><pubDate>Sun, 02 Jan 2022 12:30:04 +0800</pubDate><description><![CDATA[一、变量隐藏——变量不具有多态性
Java 中的变量不遵循多态性，所以重写仅适用于方法，而不适用于变量。 并且，当子类中的实例变量与父类中的实例变量具有相同的名称时，则从引用类型中选择该实例变量。

在 Java 中，当子类中的实例变量与父类中的实例变量具有相同的名称时，子类的变量将隐藏父类的变量，即使它们的类型不同。 这种概念称为可变隐藏。
在变量隐藏中，子类隐藏继承的变量而不是替换它们，这基本上意味着子类的对象包含两个变量，而子变量则隐藏了父变量。我们可以通过 super.x 来访问父类中的变量。

示]]></description><category></category></item><item><title><![CDATA[Java 字节码分析成员变量初始化顺序]]></title><link>https://blog.csdn.net/IT__learning/article/details/122268398</link><guid>https://blog.csdn.net/IT__learning/article/details/122268398</guid><author>IT__learning</author><pubDate>Sun, 02 Jan 2022 11:51:31 +0800</pubDate><description><![CDATA[一、无继承关系
class Demo {
    private int p1 = 100; 	// 实例变量显式初始化
    private static int p2 = 10; 	// 静态变量显式初始化

    {
        p1 = 101; // 构造代码块初始化
    }

    static {
        p2 = 11; // 静态代码块初始化
    }

    public Parent() {  // 构造函数初始化
        this.p1 = 102;]]></description><category></category></item><item><title><![CDATA[Java 线程池]]></title><link>https://blog.csdn.net/IT__learning/article/details/122213272</link><guid>https://blog.csdn.net/IT__learning/article/details/122213272</guid><author>IT__learning</author><pubDate>Wed, 29 Dec 2021 15:59:53 +0800</pubDate><description><![CDATA[概述
1、什么是线程池

线程池就是首先创建一些线程，它们的集合称为线程池，使用线程池可以很好的提高性能。线程池在系统启动时就创建大量空闲的线程，程序将一个任务传给线程池。线程池就会启动一条线程来执行这个任务，执行结束后，该线程并不会死亡，而是再次返回线程池中成为空闲状态，等待执行下一个任务。

2、为什么使用线程池

在执行异步任务或并发任务时，如果通过 new Thread() 方式创建新的线程，当系统不断的启动和关闭新线程以及过渡切换线程，会过度消耗系统资源，成本非常高，从而导致系统资源的崩溃，这时线]]></description><category></category></item><item><title><![CDATA[Java 基础 —— 序列化]]></title><link>https://blog.csdn.net/IT__learning/article/details/121960911</link><guid>https://blog.csdn.net/IT__learning/article/details/121960911</guid><author>IT__learning</author><pubDate>Wed, 15 Dec 2021 21:10:26 +0800</pubDate><description><![CDATA[一、什么是序列化
Java 提供了一种对象序列化的机制，该机制中，一个对象可以被按字节进行持久化（被表示为一个字节序列），该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。
将序列化对象写入文件之后，可以从文件中读取出来，并且对它进行反序列化，也就是说，对象的类型信息和对象的数据，还有对象中的数据类型可以用来在内存中新建对象。
序列化与反序列化都是 Java 虚拟机（JVM）独立的，也就是说，在一个平台上序列化的对象可以在另一个完全不同的平台上反序列化该对象。
二、为什么要序列化
我]]></description><category></category></item><item><title><![CDATA[递归与动态规划]]></title><link>https://blog.csdn.net/IT__learning/article/details/121883738</link><guid>https://blog.csdn.net/IT__learning/article/details/121883738</guid><author>IT__learning</author><pubDate>Sun, 12 Dec 2021 13:24:49 +0800</pubDate><description><![CDATA[一、概述
动态规划（dynamic programming）是运筹学的一个分支，是求解决策过程（decision process）最优化的数学方法。
动态规划一般可分为线性动规，区域动规，树形动规，背包动规四类。

1、线性动规：拦截导弹，合唱队形，挖地雷，建学校，剑客决斗等；
2、区域动规：石子合并，加分二叉树，统计单词个数，炮兵布阵等；
3、树形动规：贪吃的九头龙，二分查找书，聚会的欢乐，数字三角形等；
4、背包问题：01背包问题，完全背包问题，分组背包问题，二维背包，装箱问题，挤牛奶等；

举例
A ]]></description><category></category></item><item><title><![CDATA[NLP 语义相似度常用计算方法总结]]></title><link>https://blog.csdn.net/IT__learning/article/details/121879952</link><guid>https://blog.csdn.net/IT__learning/article/details/121879952</guid><author>IT__learning</author><pubDate>Sat, 11 Dec 2021 22:50:03 +0800</pubDate><description><![CDATA[概述
总文本相似度的计算方法主要分为三大类：一类是基于统计学的计算方法，此种方法在计算时没有考虑文本的句子结构信息和语义信息，计算的结果有时会与人对自然语言的理解不相符合；另一类是基于语义理解的计算方法，这种方法依赖于具有层次结构关系的语义词典，计算结果相对准确，与人对自然语言的理解较为符合；第三种类是基于深度学习的计算方法。
1、基于向量空间模型的计算方法
向量空间模型简称 VSM，是 Vector Space Model 的缩写，是应用较为广泛的一种信息检索模型。在此模型中，文本被看作是由一系列相互独立]]></description><category></category></item><item><title><![CDATA[Java 常量池]]></title><link>https://blog.csdn.net/IT__learning/article/details/121873196</link><guid>https://blog.csdn.net/IT__learning/article/details/121873196</guid><author>IT__learning</author><pubDate>Sat, 11 Dec 2021 19:26:04 +0800</pubDate><description><![CDATA[常量池分为 Class 常量池常量池、运行时常量池、字符串常量池。
1、 Class 常量池常量池（静态常量池）

Java 文件被编译成 Class 文件，Class 文件中除了包含类的版本、字段、方法、接口等描述信息外，还有一项就是 Class 常量池，Class 常量池是当 Class 文件被 Java 虚拟机加载进来后存放各种字面量 (Literal)和符号引用 。

字面量相当于 Java 语言层面常量的概念，如文本字符串、基础数据、声明为 final 的常量等；符号引用则属于编译原理方面的概念，]]></description><category></category></item><item><title><![CDATA[String 类源码分析]]></title><link>https://blog.csdn.net/IT__learning/article/details/121870476</link><guid>https://blog.csdn.net/IT__learning/article/details/121870476</guid><author>IT__learning</author><pubDate>Sat, 11 Dec 2021 12:50:57 +0800</pubDate><description><![CDATA[源码分析
1、成员变量
public final class String implements java.io.Serializable, Comparable&lt;String&gt;, CharSequence {
    
    // 用不可变的 char 数组用来存放字符串
    private final char value[];

    // 缓存 String 的 hash 值
    private int hash; // Default to 0

    // 实现序列化的]]></description><category></category></item><item><title><![CDATA[微服务熔断、降级——Hystrix]]></title><link>https://blog.csdn.net/IT__learning/article/details/121712616</link><guid>https://blog.csdn.net/IT__learning/article/details/121712616</guid><author>IT__learning</author><pubDate>Wed, 08 Dec 2021 15:19:23 +0800</pubDate><description><![CDATA[一、概述
1、服务雪崩
分布式系统环境下，服务间类似依赖非常常见，一个业务调用通常依赖多个基础服务。如下图，对于同步调用，当库存服务不可用时，商品服务请求线程被阻塞，当有大批量请求调用库存服务时，最终可能导致整个商品服务资源耗尽，无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递，这种现象被称为雪崩效应。

雪崩效应常见场景

1）硬件故障：如服务器宕机，机房断电，光纤被挖断等。
2）流量激增：如异常流量，重试加大流量等。
3）缓存穿透：一般发生在应用重启，所有缓存失效时，以及短时间内大量缓存失效]]></description><category></category></item><item><title><![CDATA[局域网的主机如何连接外网]]></title><link>https://blog.csdn.net/IT__learning/article/details/121784633</link><guid>https://blog.csdn.net/IT__learning/article/details/121784633</guid><author>IT__learning</author><pubDate>Wed, 08 Dec 2021 12:08:52 +0800</pubDate><description><![CDATA[一、局域网内主机上外网——NAT
1、内网与外网
（1）内网

即所说的局域网，比如学校的局域网，局域网内每台计算机的 IP 地址在本局域网内具有互异性，是不可重复的。但两个局域网内的内网 IP 可以有相同的。

（2）外网

即互联网，局域网通过一台服务器或是一个路由器对外连接的网络，这个 IP 地址是惟一的。也就是说局域网里所有的计算机都是连接到这一个外网 IP 上，通过这一个外网 IP 对外进行交换数据的。也就是说，一个局域网里所有电脑的内网 IP 是互不相同的,但共用一个外网 IP。（用ipconf]]></description><category></category></item><item><title><![CDATA[Linux 的网络配置（以 CentOS 7 为例）]]></title><link>https://blog.csdn.net/IT__learning/article/details/121723319</link><guid>https://blog.csdn.net/IT__learning/article/details/121723319</guid><author>IT__learning</author><pubDate>Sat, 04 Dec 2021 23:44:45 +0800</pubDate><description><![CDATA[一、网络连接模式配置
网络连接类型有桥接、NAT、仅主机和不联网四种。
1、桥接
桥接模式：虚拟机和宿主机在网络上就是平级的关系，相当于两者连接在同一交换机上。


在桥接模式下，虚拟机手动配置的 IP 必须和宿主机属于同一网段，网关与 DNS 必须与宿主机网卡一致，相当于局域网内新建了一台主机。

2、NAT 模式
Netword Address Translation–网络地址转换（模式）：借助宿主机来上网，没桥接那么麻烦，只用配置 DNS 即可。


缺点：扎根于宿主机，不能和局域网内其它真实的主机进]]></description><category></category></item><item><title><![CDATA[Eureka 集群搭建]]></title><link>https://blog.csdn.net/IT__learning/article/details/121618128</link><guid>https://blog.csdn.net/IT__learning/article/details/121618128</guid><author>IT__learning</author><pubDate>Mon, 29 Nov 2021 21:48:06 +0800</pubDate><description><![CDATA[一、Eureka 高可用集群
在实际的生产环境中，eureka 常常是以集群的方式提供服务的，目的就是要保证高可用性，同时它还保证了分区容错性。这也满足了一个健壮的分布式系统所要求的 CAP 理论原则，即 eureka 保证了高可用性，分区容错性。
二、Eureka 集群原理
Eureka 的工作细节
Eureka 本身可以分为两大部分，Eureka Server 和 Eureka Client。
2.1 Eureka Server

Eureka Server 主要对外提供了三个功能：

服务注册：所有的]]></description><category></category></item><item><title><![CDATA[POST 请求的四种提交数据方式]]></title><link>https://blog.csdn.net/IT__learning/article/details/121583188</link><guid>https://blog.csdn.net/IT__learning/article/details/121583188</guid><author>IT__learning</author><pubDate>Sat, 27 Nov 2021 21:12:18 +0800</pubDate><description><![CDATA[Content-Type 属性值
HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中，POST 一般用来向服务端提交数据。
HTTP 协议是以 ASCII 码传输，建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分：状态行、请求头、消息主体。类似于下面形式：
&lt;method&gt; &lt;url&gt; &lt;version&gt;
&lt;headers&gt;]]></description><category></category></item><item><title><![CDATA[JavaWeb 的常用的请求传参注解]]></title><link>https://blog.csdn.net/IT__learning/article/details/121582492</link><guid>https://blog.csdn.net/IT__learning/article/details/121582492</guid><author>IT__learning</author><pubDate>Sat, 27 Nov 2021 20:32:03 +0800</pubDate><description><![CDATA[1、@RequestMapping
@RequestMapping 既可以用在类级别，也可以用在方法级别，当它定义在类级别的时候，标明该控制器所处理的请求都将被映射到这个路径下。另外，@RequestMapping中可以使用method属性，如果指定了method属性的值，那么就只能使用指定的请求方法，如果没有指定的话，那么就可以使用HTTP的get/post方法了。

1、get 请求特点：

a. 请求参数会添加到请求资源路径的后面，只能添加少量参数（因为请求行只有一行，大约只能存放2K左右的数据）
b]]></description><category></category></item></channel></rss>