<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wang_yi_l的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/wang_o_yi</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; wang_o_yi]]></copyright><item><title><![CDATA[windows ping长包命令显示时间、记录日志]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/136478244</link><guid>https://blog.csdn.net/wang_o_yi/article/details/136478244</guid><author>wang_o_yi</author><pubDate>Tue, 05 Mar 2024 14:50:39 +0800</pubDate><description><![CDATA[windows 使用ping命令执行长包，进行网络监控，记录日志]]></description><category></category></item><item><title><![CDATA[基于Redis的Java分布式锁，接口并发处理，并发方案]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/130885969</link><guid>https://blog.csdn.net/wang_o_yi/article/details/130885969</guid><author>wang_o_yi</author><pubDate>Fri, 26 May 2023 14:51:55 +0800</pubDate><description><![CDATA[使用自定义注解实现redis分布式锁、java分布式锁、接口并发问题，开箱即用，对业务代码无侵入]]></description><category></category></item><item><title><![CDATA[Nacos配置热更新的4种方式、读取项目配置文件的多种方式,@value,@RefreshScope,@NacosConfigurationProperties]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/124387045</link><guid>https://blog.csdn.net/wang_o_yi/article/details/124387045</guid><author>wang_o_yi</author><pubDate>Sun, 24 Apr 2022 17:46:44 +0800</pubDate><description><![CDATA[nacos热更新，@value,@NacosPropertySource,@ConfigurationProperties,@NacosConfigurationProperties,@RefreshScope]]></description><category></category></item><item><title><![CDATA[windows启动jar nacos yaml配置文件中包含中文问题]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/124300992</link><guid>https://blog.csdn.net/wang_o_yi/article/details/124300992</guid><author>wang_o_yi</author><pubDate>Wed, 20 Apr 2022 16:38:21 +0800</pubDate><description><![CDATA[yaml配置文件中文启动报错]]></description><category></category></item><item><title><![CDATA[Mysql索引原理、聚簇索引和非聚簇索引、回表]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/123352008</link><guid>https://blog.csdn.net/wang_o_yi/article/details/123352008</guid><author>wang_o_yi</author><pubDate>Tue, 08 Mar 2022 14:52:59 +0800</pubDate><description><![CDATA[我们都知道索引的作用是增加查询速度，大部分系统都是读多写少，索引对应查询的帮助是非常大的。特别是数据流越大的时候，索引对应查询性能的影响非常关键。就好比一本字典，如果没有目录，想要找一个字的话就要一页一页的查找，非常耗时，通过字典里面的目录就可以直接定位到数据在哪一页，这样查找效率就非常高。索引就类似字典里面的目录。
一、索引的底层数据结构
1、Hash（哈希表）
哈希算法也叫散列算法，就是把任意的key通过哈希函数转变为固定长度的地址。
2、B+树
Mysql默认使用的就是B+树，B+树是一种平衡查找树。]]></description><category></category></item><item><title><![CDATA[@Transactional注解失效的场景，为何会失效]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/122011828</link><guid>https://blog.csdn.net/wang_o_yi/article/details/122011828</guid><author>wang_o_yi</author><pubDate>Sat, 18 Dec 2021 14:36:25 +0800</pubDate><description><![CDATA[@Transactional是我们项目中很常用的一个注解了，@Transactional可以为我们控制事务，可以保证事务内的操作要么全部成功，要么全部失败，@Transactional也是基于AOP切面实现事务的功能的。
下面列举一下使用@Transactional会导致事务失效的场景：
1、@Transactional应用在了非publice的方法上，事务将会失效：
原因是SpringAOP对事务进行代理增强的时候会调用到computeTransactionAttribute方法，这个方法里面进行了判断，]]></description><category></category></item><item><title><![CDATA[理解MVC架构模式，SpringMVC原理、执行流程图解]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/121931243</link><guid>https://blog.csdn.net/wang_o_yi/article/details/121931243</guid><author>wang_o_yi</author><pubDate>Wed, 15 Dec 2021 12:08:49 +0800</pubDate><description><![CDATA[1、MVC架构模式

说起SpringMVC就不得不说MVC，MVC是一种经典架构模式。MVC架构模式的重点是为了解耦，将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强，很多应用程序的问题在于处理业务数据和显示业务数据的视图的对象之间存在紧密耦合。有一句很有名的话：一个层次的重定向几乎可以解决计算机业务中的所有问题。在模型（Model）和视图层（View）之间引入重定向层可以解决解耦问题，这个重定向层就是控制层（Controller）。这样模型和视图就实现了代码分离，解耦了，由控]]></description><category></category></item><item><title><![CDATA[请求转发和重定向的区别]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/121920790</link><guid>https://blog.csdn.net/wang_o_yi/article/details/121920790</guid><author>wang_o_yi</author><pubDate>Tue, 14 Dec 2021 10:49:23 +0800</pubDate><description><![CDATA[1、什么是请求转发和重定向？


请求转发：
request.getRequestDispatcher(String path).forward(requst,response);



重定向
response.sendRedirect(String path);

简单来说，请求转发是服务端内部做的事情，和客户端无关，客户端也无感知；而重定向是客户端请求服务端，服务端重定向，客户端在发起二次请求才能拿到结果。


2、请求转发和重定向的区别

1、重定向是response发起，请求转发是request发]]></description><category></category></item><item><title><![CDATA[JDK8 lambda操作list常用功能，list转map，list选取字段拼接字符串，分组，统计]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/121396337</link><guid>https://blog.csdn.net/wang_o_yi/article/details/121396337</guid><author>wang_o_yi</author><pubDate>Thu, 18 Nov 2021 11:23:11 +0800</pubDate><description><![CDATA[新建UserDTO对象：
package com.list;

import lombok.Data;

@Data
public class UserDTO {

    public UserDTO(){}

    public UserDTO(Integer id, String userName, String mobile){
        this.id = id;
        this.userName = userName;
        this.mobile = mobile;]]></description><category></category></item><item><title><![CDATA[Spring AOP 面向切面编程，XML和注解方式使用切面]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/121354539</link><guid>https://blog.csdn.net/wang_o_yi/article/details/121354539</guid><author>wang_o_yi</author><pubDate>Tue, 16 Nov 2021 17:12:52 +0800</pubDate><description><![CDATA[一、AOP

APO即Aspect Oriented Programing的缩写，字面直译的意思就是：面向切面编程。
AOP采用横向抽取机制，取代了传统的纵向继承体系中的重复性代码，是对OOP面向对象编程的一种补充和完善。AOP最重要或者说要达到的目的就是开发者在不修改不侵入源代码的前提下，给系统中的业务组件添加某种通用的功能。比如现在要统计系统中service层的所有方法的执行时间，如果使用面向对象的话只能在每个方法前后手动编写一段代码打印开始结束时间，来计算每个方法的执行时间；如果使用AOP就可以把计算]]></description><category></category></item><item><title><![CDATA[Spring ioc 通俗易懂的讲清楚什么是IOC、DI]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/121287123</link><guid>https://blog.csdn.net/wang_o_yi/article/details/121287123</guid><author>wang_o_yi</author><pubDate>Fri, 12 Nov 2021 15:10:22 +0800</pubDate><description><![CDATA[1、IOC的理论背景
我们都知道，在采用面向对象方法设计的软件系统中，系统底层都是有N个对象组成，所有的对象通过彼此的合作最终完成系统的业务逻辑。
图1：软件系统中的耦合对象
当我们打开机械手表的后盖，就会看到如图一上面的类似情景，各个齿轮分别带动时针、分针、秒针顺时旋转，从而在手表上显示正确的时间。图一就是描述的这样一个齿轮组，它拥有多个独立的齿轮，这些齿轮互相啮合在一起，协同工作，共同完成某项任务。我们可以看看到，在这样的齿轮组中，如果有一个齿轮出现了问题，就可能会影响到整个齿轮组的正常运转。
齿轮组中]]></description><category></category></item><item><title><![CDATA[IDEA使用maven插件MyBatis Generator自动生成java实体类代码]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/121248155</link><guid>https://blog.csdn.net/wang_o_yi/article/details/121248155</guid><author>wang_o_yi</author><pubDate>Wed, 10 Nov 2021 15:20:39 +0800</pubDate><description><![CDATA[1、在项目的pom.xml文件中添加plugin插件
&lt;build&gt;
      &lt;plugins&gt;
          &lt;plugin&gt;
              &lt;groupId&gt;org.mybatis.generator&lt;/groupId&gt;
              &lt;artifactId&gt;mybatis-generator-maven-plugin&lt;/artifactId&gt;
              &lt;v]]></description><category></category></item><item><title><![CDATA[MongoDB（三）SpringBoot整合MongoDB，使用MongoRepository和MongoTemplate]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/121243899</link><guid>https://blog.csdn.net/wang_o_yi/article/details/121243899</guid><author>wang_o_yi</author><pubDate>Wed, 10 Nov 2021 11:38:52 +0800</pubDate><description><![CDATA[一、启动MongoDB
1、创建文件夹：D:\Java\mongo_db
2、启动mongodb
// 
mongod --dbpath D:\Java\mongo_db

二、新建项目及配置（MongoRepository方式）

1、新建如下项目：

2、pom依赖

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="]]></description><category></category></item><item><title><![CDATA[MongoDB（二）备份恢复、导入导出、主从复制、副本集集群、分片存储]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/121178274</link><guid>https://blog.csdn.net/wang_o_yi/article/details/121178274</guid><author>wang_o_yi</author><pubDate>Sat, 06 Nov 2021 15:28:08 +0800</pubDate><description><![CDATA[一、备份和恢复
MongoDB提供了备份和恢复的功能，分别是mongodump和mongorestore，可以使用如下命令：
1、备份：mongodump
// 语法
mongodump -h host -d dbname -o directory -u username -p pwd
// 示例，将本地test1数据库的数据备份到D:\Java\mongo_dump文件夹下面
mongodump -h 127.0.0.1 -d test1 -o D:\Java\mongo_dump -u testAdmi]]></description><category></category></item><item><title><![CDATA[MongoDB（一）简介、和关系型数据库比较、安装及常用命令、账号配置]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/121156477</link><guid>https://blog.csdn.net/wang_o_yi/article/details/121156477</guid><author>wang_o_yi</author><pubDate>Fri, 05 Nov 2021 10:53:38 +0800</pubDate><description><![CDATA[一、MongoDB简介及和关系型数据库比较
1、MongoDB是一种非关系型数据库，是用C++语言编写的。其特点是高性能、易部署、易使用，存储数据方便。主要特性：

面向集合存储，易于存储对象类型数据；
支持动态查询，支持完全索引，包含内部对象
模式自由
支持主从复制、分布式和故障恢复
使用高效的二进制存储，包括大型对象
文件的存储格式未BSON（JSON格式的一种扩展）

2、MongoDB和关系型数据库对比




比较项
MongoDB
Mysql/Oracle




表
集合collection
]]></description><category></category></item><item><title><![CDATA[Hibernate框架介绍，一级缓存二级缓存]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/121029028</link><guid>https://blog.csdn.net/wang_o_yi/article/details/121029028</guid><author>wang_o_yi</author><pubDate>Fri, 29 Oct 2021 10:56:33 +0800</pubDate><description><![CDATA[一、Hibernate介绍

1、Hibernate是一种ORM框架，也就是持久层的框架，应用于DAO层，是对JDBC的一种封装，可以让程序直接通过面向对象的方式去完成对数据库的操作，可以做到不用手写SQL语句就能完成对数据库的各种操作。
2、ORM框架，那么什么是ORM？
O：Object
R：Relational
M：Mapping
ORM就是对象关系映射（Object Relational Mapping，简称ORM），关注的是对象和数据库中对应表的关系。通过描述对象和数据库之间映射的元数据，将程序中]]></description><category></category></item><item><title><![CDATA[jvm类加载器，java有哪些类加载器，有什么作用]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/120547203</link><guid>https://blog.csdn.net/wang_o_yi/article/details/120547203</guid><author>wang_o_yi</author><pubDate>Wed, 29 Sep 2021 14:25:21 +0800</pubDate><description><![CDATA[一、什么是类加载器

类加载器ClassLoader就是将我们的.class文件转换成Class对象。类Class只有被加载到jvm中后才能运行，jvm会将编译生成的字节码.class文件加载到内存中，组织成一个完整的java应用程序，这个过程是由类加载器ClassLoader和它的子类来完成的。

二、jvm中的类加载器
jvm中有三个类加载器：

1、引导类加载器：BootStrap，它用来加载 Java 的核心库，是用原生代码来实现的，并不继承自 java.lang.ClassLoader
2、扩展类]]></description><category></category></item><item><title><![CDATA[Mysql数据库优化、数据库规范]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/120159459</link><guid>https://blog.csdn.net/wang_o_yi/article/details/120159459</guid><author>wang_o_yi</author><pubDate>Tue, 07 Sep 2021 15:52:09 +0800</pubDate><description><![CDATA[1	命名规范

(1)	数据库名、表名、字段名必须使用小写字母，并采用下划线”_”分割。
(2)	数据库名、表名、字段名禁止超过32个字符，须见名知意，建议使用名词不是动词。
(3)	数据库名、表名、字段名禁止使用MySQL保留字。
(4)	临时库名、表名必须以tmp为前缀，并以日期为后缀。
(5)	备份库名、表名必须以bak为前缀，并以日期为后缀。

2	基础规范

(1)	使用INNODB存储引擎
(2)	表字符集使用UTF8
(3)	所有表都需要添加注释
(4)	单表数据量建议控制在5000W以内
(]]></description><category></category></item><item><title><![CDATA[java将文件夹和里面的所有文件打包成zip或rar并导出，亲测好用]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/119863992</link><guid>https://blog.csdn.net/wang_o_yi/article/details/119863992</guid><author>wang_o_yi</author><pubDate>Mon, 23 Aug 2021 10:36:35 +0800</pubDate><description><![CDATA[有一个项目需要将文件夹里面的所有文件压缩成zip并导出下载，并且保留原来文件夹里面的所有目录结构，找了一些资料整理了一下。

上代码：

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.tex]]></description><category></category></item><item><title><![CDATA[java Enum枚举的原理，看编译后的源码]]></title><link>https://blog.csdn.net/wang_o_yi/article/details/119780631</link><guid>https://blog.csdn.net/wang_o_yi/article/details/119780631</guid><author>wang_o_yi</author><pubDate>Wed, 18 Aug 2021 15:40:21 +0800</pubDate><description><![CDATA[一、java中的枚举Enum是jdk1.5开始引入的一个新的类型，为开发提供了很大的便利。
enum是一个特殊的class，实际上枚举声明定义的类型就是一个类。
比如下面的一个枚举，我们通过反编译工具可以看到编译后的内容：
public enum ColourEnum {

    RED(1, "红色"),
    BLUE(2, "蓝色"),
    BLACK(3, "蓝色");

    // 成员变量
    private int state;
    private String colour]]></description><category></category></item></channel></rss>