<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Vicali的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Vicali</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Vicali]]></copyright><item><title><![CDATA[算法基础（一）]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110970954</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110970954</guid><author>Vicali</author><pubDate>Thu, 10 Dec 2020 21:10:59 +0800</pubDate><description><![CDATA[分治法

核心思想：将一个难以直接解决的问题分割为n个子问题，各个击破，即“分而治之”

也就是把一个大的项目分为n个子项目，交给n个人去解决这n个问题，把问题化解。


递归法

递归是一种特殊的算法，和分治法很像，都是把一个进行分解，使其越来越小，使子问题容易解决。 如果一个函数是自身所定义或调用，就称为递归。

递归至少要满足两个条件
1.自己调用自己的一个过程
2有一个跳出递归过程的出口


冒泡排序
冒泡排序就是比较相邻的元素，将小的放到前面

int[] arr = {1,2,6,5,4,8}.]]></description><category></category></item><item><title><![CDATA[通过ORM实现对象的保存]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110968419</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110968419</guid><author>Vicali</author><pubDate>Thu, 10 Dec 2020 19:45:44 +0800</pubDate><description><![CDATA[通过ORM实现对象的保存
public static int save(Object obj) throws NoSuchMethodException, 
		SecurityException, DocumentException, IllegalAccessException, 
		IllegalArgumentException, InvocationTargetException {
		Class clz = obj.getClass();
		//xml文件解析器
		SAXReader r]]></description><category></category></item><item><title><![CDATA[xml文件描述ORM映射关系]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110967154</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110967154</guid><author>Vicali</author><pubDate>Thu, 10 Dec 2020 19:42:13 +0800</pubDate><description><![CDATA[&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!--
	 class：描述ORM的映射关系 ，描述类和表的关系
	 name: 类名
	 table：表名
--&gt;
&lt;class name="Pet" table="t_pet"&gt;
	&lt;!-- 描述属性和列的映射关系 --&gt;
	&lt;!-- id:描述属性和数据库的主键的映射关系
		 name:属性名
		 column：列名
		 type：列在数据库的类型
		 auto]]></description><category></category></item><item><title><![CDATA[通过DOM4J对xml进行操作]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110959495</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110959495</guid><author>Vicali</author><pubDate>Thu, 10 Dec 2020 19:13:13 +0800</pubDate><description><![CDATA[通过DOM4J将一个node节点写入xml文件
private static void addStudent() {
		try {
			/****
			 * 通过dom4j将一个node节点写入到xml文件
			 */
			//创建SAXReader解析器对象
			SAXReader reader=new SAXReader();
			//加载studentes.xml
			Document doc=reader.read(DOM4jTest.class.
								getClassL]]></description><category></category></item><item><title><![CDATA[xml文件的DOM解析]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110938893</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110938893</guid><author>Vicali</author><pubDate>Wed, 09 Dec 2020 19:35:06 +0800</pubDate><description><![CDATA[DOM模型介绍
bject Model：文档对象模型
Dom解析方法：xml文件解析首先将xml文件加载进内存,然后读取文件中的内容。
在内存将文件以树的结构进行保存，而且树根在上，树枝在下，整个xml文件被封装为
Document对象，文件中的标签节点被封装为Node对象，标签节点中保存的数据被封装为
Text对象。
DOM模型将整个xml文件封装为对象，将文件中的标签和数据封装为对象，利用对象提供的方法完成xml文件内容的读写。
Document: 表示整个文件对象
Node：表示标签对象
Text：表]]></description><category></category></item><item><title><![CDATA[Dao数据访问接口]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110938788</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110938788</guid><author>Vicali</author><pubDate>Wed, 09 Dec 2020 19:30:17 +0800</pubDate><description><![CDATA[介绍
DAO(Data Access Object)是一个面向对象的，数据访问接口，数据访问：与数据库打交道。夹在业务逻辑与数据库资源中间。
在JavaEE的开发将数据库的方法抽象，定义在API中，API中定义访问数据的方法CRUD方法（增删改查）的方法
package的规范


...]]></description><category></category></item><item><title><![CDATA[xml文件的dom4j解析和文件的路径加载问题]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110938583</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110938583</guid><author>Vicali</author><pubDate>Wed, 09 Dec 2020 19:22:51 +0800</pubDate><description><![CDATA[dom（Document Object Model）文档对象模型
dom4j（Document Object Model For Java）
DOM4J:是java解析xml文件的api，性能超过了dom(对dom进行优化，提升了性能，解决了兼容性文件)，简单易用，而且性高，是一个第三方的开源的项目。
在项目中使用的时候需要添加jar包。

实现dom4j解析

创建DOM4J解析器对象


SAXReader reader = new SAXReader();

2.加载xml文件产生Document，获]]></description><category></category></item><item><title><![CDATA[数据库反射]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110881279</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110881279</guid><author>Vicali</author><pubDate>Tue, 08 Dec 2020 20:20:51 +0800</pubDate><description><![CDATA[通过 ResultSetMetaData 可以获得select语句产生的虚拟表的表结构(表名，列名，数据类型，列的个数)
public static void main(String[] args) throws ClassNotFoundException,
		SQLException {
		获得Connection对象
		Class.forName("com.mysql.cj.jdbc.Driver");
		String url="jdbc:mysql://localhost:3306/scho]]></description><category></category></item><item><title><![CDATA[LeetCode算法题：左旋字符串]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110832709</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110832709</guid><author>Vicali</author><pubDate>Mon, 07 Dec 2020 20:34:41 +0800</pubDate><description><![CDATA[题目：
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如，输入字符串"abcdefg"和数字2，该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1：
输入: s = “abcdefg”, k = 2
输出: “cdefgab”
示例 2：
输入: s = “lrloseumgh”, k = 6
输出: “umghlrlose”
限制：
1 &lt;= k &lt; s.length &lt;= 10000
来源：力扣（LeetCode]]></description><category></category></item><item><title><![CDATA[Class类的介绍和基本使用方法]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110825339</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110825339</guid><author>Vicali</author><pubDate>Mon, 07 Dec 2020 19:53:01 +0800</pubDate><description><![CDATA[一、Class类的介绍
Class类的对象表示的是一个，类在内存中的class文件。
Class clz = String.class 表示String在内存中的class文件。
二、Class类的使用
1.获得Class类的对象

通过Class clz = Class.forName(“完全限定名”);
获得Class类的对象封装class文件


完全限定名：包名+类名.



通过类名获得Class对象，类名.class


通过某个类的对象，获得Class文件,String类在内存中的class文]]></description><category></category></item><item><title><![CDATA[封装数据库DML,DQL操作——代码详解]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110825072</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110825072</guid><author>Vicali</author><pubDate>Mon, 07 Dec 2020 19:09:22 +0800</pubDate><description><![CDATA[一、封装数据库DML操作
public class DB_utils {
    
	static final String URL = "jdbc:mysql://localhost:3306/dep ?serverTimezone=GMT";
	static final String USER = "root";
	static final String PWD = "password";

   - 封装加载驱动方法
	public static Connection getConnection() ]]></description><category></category></item><item><title><![CDATA[Java可变参数]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110823876</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110823876</guid><author>Vicali</author><pubDate>Mon, 07 Dec 2020 17:56:50 +0800</pubDate><description><![CDATA[什么是可变参数
可变参数就是在调用方法时，允许传入长度可变的参数，可变参数的本事是数组。
定义方法
在最后一个形参上加三个点 …,就表示该形参可以接收多个参数值，多个参数值被作为数组传入。

可变参数只能放在最后
一个函数最多只能有一个可变参数

带有可变参数方法的调用
调用可变参数方法，可以传入n个参数，编译器会把它转化为一个数组，也可以直接传递一个数组。

调用一个被重载的方法时，如果此调用既能够和固定参数的重载方法匹配，也能够与可变长参数的重载方法匹配，则选择固定参数的方法


...]]></description><category></category></item><item><title><![CDATA[LeetCode算法题：反转链表]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110699363</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110699363</guid><author>Vicali</author><pubDate>Sat, 05 Dec 2020 16:43:49 +0800</pubDate><description><![CDATA[题目：反转链表

方法一：迭代
假设存在链表 1 \rightarrow 2 \rightarrow 3 \rightarrow \varnothing1→2→3→∅，我们想要把它改成 \varnothing \leftarrow 1 \leftarrow 2 \leftarrow 3∅←1←2←3。

在遍历列表时，将当前节点的 \textit{next}next 指针改为指向前一个元素。由于节点没有引用其上一个节点，因此必须事先存储其前一个元素。在更改引用之前，还需要另一个指针来存储下一个节点。不要忘记]]></description><category></category></item><item><title><![CDATA[LeetCode算法题：只出现一次的数字]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110698751</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110698751</guid><author>Vicali</author><pubDate>Sat, 05 Dec 2020 16:38:28 +0800</pubDate><description><![CDATA[题目
给定一个非空整数数组，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素。
说明：
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗？

示例 1:

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4
来源：力扣（LeetCode）
class Solution {
    public int singleNumber(int[] nums) {
     for (int i = 1; i &lt;nums.l]]></description><category></category></item><item><title><![CDATA[LeetCode算法题：拥有糖果最多的孩子]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110689508</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110689508</guid><author>Vicali</author><pubDate>Sat, 05 Dec 2020 15:21:35 +0800</pubDate><description><![CDATA[题目
给你一个数组 candies 和一个整数 extraCandies ，其中 candies[i] 代表第 i 个孩子拥有的糖果数目。
对每一个孩子，检查是否存在一种方案，将额外的 extraCandies 个糖果分配给孩子们之后，此孩子有 最多 的糖果。注意，允许有多个孩子同时拥有 最多 的糖果数目。

示例 1：

输入：candies = [2,3,5,1,3], extraCandies = 3
输出：[true,true,true,false,true]
解释：
孩子 1 有 2 个糖果，如果]]></description><category></category></item><item><title><![CDATA[LeetCode算法题：好数对的数目]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110688234</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110688234</guid><author>Vicali</author><pubDate>Sat, 05 Dec 2020 15:12:50 +0800</pubDate><description><![CDATA[题目
给你一个整数数组 nums 。
如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i &lt; j ，就可以认为这是一组 好数对 。
返回好数对的数目。

示例 1：

输入：nums = [1,2,3,1,1,3]
输出：4
解释：有 4 组好数对，分别是 (0,3), (0,4), (3,4), (2,5) ，下标从 0 开始

示例 2：

输入：nums = [1,1,1,1]
输出：6
解释：数组中的每组数字都是好数对
示例 3：
输入：nums = [1,2,3]
]]></description><category></category></item><item><title><![CDATA[LeetCode算法题：一维数组的动态和]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110682077</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110682077</guid><author>Vicali</author><pubDate>Sat, 05 Dec 2020 14:48:52 +0800</pubDate><description><![CDATA[题目：
给你一个数组 nums 。数组「动态和」的计算公式为：runningSum[i] = sum(nums[0]…nums[i]) 。
请返回 nums 的动态和。

示例 1：

输入：nums = [1,2,3,4]
输出：[1,3,6,10]
解释：动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。

示例 2：

输入：nums = [1,1,1,1,1]
输出：[1,2,3,4,5]
解释：动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+]]></description><category></category></item><item><title><![CDATA[Java中深度克隆和浅度克隆]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110678040</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110678040</guid><author>Vicali</author><pubDate>Sat, 05 Dec 2020 14:20:23 +0800</pubDate><description><![CDATA[在Java中克隆分为两种：深度克隆和浅度克隆


浅度克隆：
浅度克隆完全复制一个对象，但对其内部的引用数据类型，浅度克隆只会复制该对象的引用，因此如果修改被克隆的对象，会影响到原对象。

实现方式
1.被克隆的对象实现Cloneable接口，
2.让克隆的类重写Object的clone()方法



深度克隆
深度克隆完全复制一个对象，包括原对象的引用数据类型也会复制并额外开辟空间去存储数据，独立于原对象，修改克隆出来的对象不会影响原对象。
-实现方式
常用的是使用序列化实现深度克隆(比较常用，使用起来较]]></description><category></category></item><item><title><![CDATA[什么是SQL注入？如何防止注入（附例）]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110672735</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110672735</guid><author>Vicali</author><pubDate>Sat, 05 Dec 2020 10:14:10 +0800</pubDate><description><![CDATA[注入发生的原因
如果用户通过在表单中填写带有SQL关键字的数据来让数据库执行非常规代码的过程。
SQL 数据库的操作是通过 SQL 语句来执行的，而无论是执行代 码还是数据项都必须写在 SQL 语句之中，这就导致如果我们在数据项中加入了某些 SQL 语 句，这些关键字就很可能在数据库写入或读取数据 时得到执行。


...]]></description><category></category></item><item><title><![CDATA[JDBC实现增删改查（附代码详解）]]></title><link>https://blog.youkuaiyun.com/Vicali/article/details/110676914</link><guid>https://blog.youkuaiyun.com/Vicali/article/details/110676914</guid><author>Vicali</author><pubDate>Sat, 05 Dec 2020 09:26:53 +0800</pubDate><description><![CDATA[JDBC实现宠物信息的增效删改查
主方法：
public class Demo {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //加载驱动
		Driver();
        Pet pet = new Pet(55,"小黑","公");
        //添加信息
        add(pet);
        //删除信息
        dele]]></description><category></category></item></channel></rss>