<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[software_Manito的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/software_Manito</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; software_Manito]]></copyright><item><title><![CDATA[二叉搜索树与双向链表（三十七）]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/106527329</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/106527329</guid><author>software_Manito</author><pubDate>Tue, 01 Dec 2020 10:31:00 +0800</pubDate><description><![CDATA[题目
输入一棵二叉搜索树，将该二叉搜索树转换成一个排序的双向链表。
要求不能创建任何新的结点，只能调整树中结点指针的指向。
注意：
需要返回双向链表最左侧的节点。
例如，输入下图中左边的二叉搜索树，则输出右边的排序双向链表。

算法：
class Solution {
    
    public TreeNode convert(TreeNode root) {
        if(root == null) return root;
        Pair&lt;TreeNode,TreeNode]]></description><category></category></item><item><title><![CDATA[springboot整合redis 重写 redisCacheManager和 reidsTemplate 自定义序列化方式]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/110136562</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/110136562</guid><author>software_Manito</author><pubDate>Wed, 25 Nov 2020 17:23:17 +0800</pubDate><description><![CDATA[默认的序列化方式是jdk序列化，我们需要转化为json序列化方式
在springboot1.x版本中，重写缓存管理器
 //缓存管理器
    @Bean
    public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
 ]]></description><category></category></item><item><title><![CDATA[spring boot框架与Redis整合Unexpected character (‘¬‘ (code 172)): expected a valid value]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/110115233</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/110115233</guid><author>software_Manito</author><pubDate>Wed, 25 Nov 2020 10:11:43 +0800</pubDate><description><![CDATA[一般修改cacheManager之后会出现这个问题，只要删除redis保存的数据即可。
springboot2.3.4重写redisTemplate和redisCacheManager
package com.boot01.cache.config;

import com.boot01.cache.pojo.Employee;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.a]]></description><category></category></item><item><title><![CDATA[SpringBoot程序后台运行]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/109564010</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/109564010</guid><author>software_Manito</author><pubDate>Sun, 08 Nov 2020 20:13:39 +0800</pubDate><description><![CDATA[使用nohup命令让进程后台运行
nohup java -jar 自己的springboot项目.jar &gt;日志文件名.log 2&gt;&amp;1 &amp;

日志文件名.log : 将日志文件生成在什么位置,若不指定,默认为root目录下
2&gt;&amp;1 : 2就是标准错误，1是标准输出，该命令相当于把标准错误重定向到标准输出么。这里&amp;相当于标准错误等效于标准输出，即把标准错误和标准输出同时输出到指定的“日志文件名.log”文件中。
&amp; : 让进程保持后台运行

...]]></description><category></category></item><item><title><![CDATA[七种join查询]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/108326619</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/108326619</guid><author>software_Manito</author><pubDate>Mon, 31 Aug 2020 18:17:19 +0800</pubDate><description><![CDATA[根据图片顺序来看
1、内连接（查询a，b公有部分）
select * from a inner join b on a.key=b.key;

2、左连接（查询a，b共有部分以及a独有的部分）
select * from a left join b on a.key=b.key;

3、右连接（查询a，b共有部分以及b独有的部分）
select * from a right join b on a.key=b.key;

4、a独有的部分(左连接减去公有部分)
select * from a left j.]]></description><category></category></item><item><title><![CDATA[手写分页]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/108325461</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/108325461</guid><author>software_Manito</author><pubDate>Mon, 31 Aug 2020 17:23:11 +0800</pubDate><description><![CDATA[PageBean
package com.pojo;

import java.util.ArrayList;
import java.util.List;

public class PageBean&lt;T&gt; {
    /**当前页*/
    private Integer page;
    /**每页数据条数*/
    private Integer pageSize;
    /**存放数数据的集合*/
    private List&lt;T&gt; list = new Arr]]></description><category></category></item><item><title><![CDATA[centos6.5安装Mysql5.5.48详细教程]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/108292415</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/108292415</guid><author>software_Manito</author><pubDate>Sat, 29 Aug 2020 11:58:39 +0800</pubDate><description><![CDATA[在官网下载mysql rpm包
官网地址：https://downloads.mysql.com/archives/community/

将下载好的rpm压缩包上传到centos的/opt目录下
这里我使用的是filezilla进行上传的
将上传的文件解压

tar -xvf MySQL-5.5.48-1.linux2.6.x86_64.rpm-bundle.tar

正式安装

先查看当前系统是否安装过mysql


rpm -qa | grep -i mysql


如果存在则需要先进行删除


rp]]></description><category></category></item><item><title><![CDATA[juc并发编程]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/107825473</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/107825473</guid><author>software_Manito</author><pubDate>Wed, 05 Aug 2020 21:31:28 +0800</pubDate><description><![CDATA[多线程进阶==&gt;juc并发编程
1、什么是juc？
**java.util.concurrent ***  java.util工具包
业务：普通的线程代码 Thread
Runnable 没有返回值，效率比Callable相抵较低！
2、线程和进程
进程：一个程序 ，QQ.exe   程序的集合；
一个进程往往可以包含多个线程，至少包含一个！
java默认包含几个线程？2个 main、GC
线程：开了一个进程typora,写字，自动保存（线程负责）
对于java而言：Thread、Runnable、C]]></description><category></category></item><item><title><![CDATA[复杂链表的复刻（三十六）]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/106312055</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/106312055</guid><author>software_Manito</author><pubDate>Sun, 24 May 2020 11:21:52 +0800</pubDate><description><![CDATA[题目
请实现一个函数可以复制一个复杂链表。
在复杂链表中，每个结点除了有一个指针指向下一个结点外，还有一个额外的指针指向链表中的任意结点或者null。
注意：

函数结束后原链表要与输入时保持一致。

算法
思想：将当前节点复制一份并且插入到当前节点的后面，然后再链接虚拟节点，最后进行拆分。不能直接返回原链表，系统会判别，最后还要将原链表恢复。

class Solution {
    public ListNode copyRandomList(ListNode head) {
    	//第一次遍历]]></description><category></category></item><item><title><![CDATA[二叉树中和为某一值的路径（三十五）]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/106311846</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/106311846</guid><author>software_Manito</author><pubDate>Sun, 24 May 2020 11:04:23 +0800</pubDate><description><![CDATA[题目
输入一棵二叉树和一个整数，打印出二叉树中结点值的和为输入整数的所有路径。
从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
样例
算法
class Solution {
    List&lt;List&lt;Integer&gt;&gt; res = new ArrayList();
    List&lt;Integer&gt; path = new ArrayList();
    public List&lt;List&lt;Integer&gt;&gt; findPath(Tree]]></description><category></category></item><item><title><![CDATA[二叉搜索树的后序遍历序列(三十四)]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/106311467</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/106311467</guid><author>software_Manito</author><pubDate>Sun, 24 May 2020 10:53:50 +0800</pubDate><description><![CDATA[题目
输入一个整数数组，判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则返回true，否则返回false。
假设输入的数组的任意两个数字都互不相同。
样例

输入：[4, 8, 6, 12, 16, 14, 10]
输出：true

算法
后序遍历的最后一个节点是是根节点，所以我们只要找出比根节点小的部分为左子树，然后判断右边部分是否存在比根节点小的值，如果有返回false，否则的话就进行递归调用。


class Solution {
    int[] seq;
    public boole]]></description><category></category></item><item><title><![CDATA[设计模式之原型模式]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/106301725</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/106301725</guid><author>software_Manito</author><pubDate>Sat, 23 May 2020 23:52:03 +0800</pubDate><description><![CDATA[原型模式基本介绍

原型模式-原理结构图


原理结构图说明
1、Prototype：原型类，声明一个克隆自己的接口。
2、ConcretePrototype：具体的原型类，实现一个克隆自己的操作。
3、client：让一个原型对象克隆自己，从而创建一个新的对象（属性一样）

原型模式-代码实现
1、创建实体类，实现cloneable接口，重写clone方法。
package prototype;

/**
 * @Date 2020/5/23 下午4:19
 * @Created by zhaoli
 *]]></description><category></category></item><item><title><![CDATA[设计模式之抽象工厂模式]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/106296241</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/106296241</guid><author>software_Manito</author><pubDate>Sat, 23 May 2020 10:58:17 +0800</pubDate><description><![CDATA[抽象工厂：围绕一个超级工厂创建其他工厂，该超级工厂又称为其他工厂的工厂。


定义
抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口，无需指定他们具体的类。
使用场景

优点

缺点

如何实现
1、定义抽象产品类
package factory.abstractfactory.product;

/**
 * @Date 2020/5/23 上午10:33
 * @Created by zhaoli
 * 手机抽象类
 */
public interface IPhoneProduct {
  ]]></description><category></category></item><item><title><![CDATA[之字形打印二叉树（三十三）]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/106295620</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/106295620</guid><author>software_Manito</author><pubDate>Sat, 23 May 2020 09:28:42 +0800</pubDate><description><![CDATA[题目
请实现一个函数按照之字形顺序从上向下打印二叉树。
即第一行按照从左到右的顺序打印，第二层按照从右到左的顺序打印，第三行再按照从左到右的顺序打印，其他行以此类推。
样例

算法
相比于上一题，这道题仅需要增加一个标志位，我这里采用是一个整数，如果是奇数则正序打印，偶数翻转。
时间复杂度 O(n)
class Solution {
    public List&lt;List&lt;Integer&gt;&gt; printFromTopToBottom(TreeNode root) {
       ]]></description><category></category></item><item><title><![CDATA[分行从上往下打印二叉树（三十二）]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/106295588</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/106295588</guid><author>software_Manito</author><pubDate>Sat, 23 May 2020 09:25:15 +0800</pubDate><description><![CDATA[题目
从上到下按层打印二叉树，同一层的结点按从左到右的顺序打印，每一层打印到一行。
样例

算法
BFS(O(n))
依旧是宽度优先遍历，相比不分行从上到下打印，只需要记住这一层需要弹出队列多少次数即可，对应代码里面的n。

当队列不为空时
记录下当前队列的长度n，这个长度对应树的当前层有多少个节点
相比较上一题，这次在一个循环里面，只弹出n个节点就好了。弹出过程中存储当前节点到temp数组
弹出n个节点之后，将temp数组存入result

时间复杂度
每个节点遍历1遍，O(N)复杂度
class Sol]]></description><category></category></item><item><title><![CDATA[不分行从上往下打印二叉树(三十一)]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/106295545</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/106295545</guid><author>software_Manito</author><pubDate>Sat, 23 May 2020 09:21:52 +0800</pubDate><description><![CDATA[题目
从上往下打印出二叉树的每个结点，同一层的结点按照从左到右的顺序打印。
样例

算法
(BFS) O(n)
我们从根节点开始按宽度优先的顺序遍历整棵树，每次先扩展左儿子，再扩展右儿子。
这样我们会：
先扩展根节点；
再依次扩展根节点的左右儿子，也就是从左到右扩展第二层节点；
再依次从左到右扩展第三层节点；
依次类推
所以BFS的顺序就是这道题目要求的顺序。
时间复杂度
BFS时每个节点仅被遍历一次，所以时间复杂度是 O(n)。
class Solution {
    public List&lt;In]]></description><category></category></item><item><title><![CDATA[设计模式之工厂方法模式]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/106288829</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/106288829</guid><author>software_Manito</author><pubDate>Fri, 22 May 2020 18:57:53 +0800</pubDate><description><![CDATA[前言
在上文提到的：简单工厂模式，发现简单工厂模式存在一系列问题：


工厂类集中了所有实例（产品）的创建逻辑，一旦这个工厂不能正常工作，整个系统都会受到影响；


违背“开放 - 关闭原则”，一旦添加新产品就不得不修改工厂类的逻辑，这样就会造成工厂逻辑过于复杂。


简单工厂模式由于使用了静态工厂方法，静态方法不能被继承和重写，会造成工厂角色无法形成基于继承的等级结构。


为了解决上述的问题，我们又使用了一种新的设计模式：工厂方法模式。
工厂方法模式定义
**工厂方法模式：**定义了一个创建对象的抽象方]]></description><category></category></item><item><title><![CDATA[设计模式之简单工厂模式]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/106265172</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/106265172</guid><author>software_Manito</author><pubDate>Fri, 22 May 2020 15:57:34 +0800</pubDate><description><![CDATA[什么是简单工厂模式（静态工厂模式）
1）简单工厂模式属于创建型模式，是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单的实用模式。
2）简单工厂模式：定义一个创建对象的类，这个类来封装实例化对象的行为。
3）在软件开发中，当我们会用到大量创建某种，某类或者某批对象，就会使用到工厂模式。
如何实现简单工厂模式

工厂模式有什么用处

...]]></description><category></category></item><item><title><![CDATA[栈的压入、弹出序列（三十）]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/106279978</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/106279978</guid><author>software_Manito</author><pubDate>Fri, 22 May 2020 14:56:26 +0800</pubDate><description><![CDATA[题目
输入两个整数序列，第一个序列表示栈的压入顺序，请判断第二个序列是否可能为该栈的弹出顺序。
假设压入栈的所有数字均不相等。
例如序列1,2,3,4,5是某栈的压入顺序，序列4,5,3,2,1是该压栈序列对应的一个弹出序列，但4,3,5,1,2就不可能是该压栈序列的弹出序列。
注意：若两个序列长度不等则视为并不是一个栈的压入、弹出序列。若两个序列都为空，则视为是一个栈的压入、弹出序列。
样例

输入：[1,2,3,4,5]
[4,5,3,2,1]
输出：true

算法
(栈) O(n)
用一个新栈s来模]]></description><category></category></item><item><title><![CDATA[包含min函数的栈(二十九)]]></title><link>https://blog.youkuaiyun.com/software_Manito/article/details/106279831</link><guid>https://blog.youkuaiyun.com/software_Manito/article/details/106279831</guid><author>software_Manito</author><pubDate>Fri, 22 May 2020 14:52:45 +0800</pubDate><description><![CDATA[题目
设计一个支持push，pop，top等操作并且可以在O(1)时间内检索出最小元素的堆栈。

push(x)–将元素x插入栈中
pop()–移除栈顶元素
top()–得到栈顶元素
getMin()–得到栈中最小元素

样例：
MinStack minStack = new MinStack();
minStack.push(-1);
minStack.push(3);
minStack.push(-4);
minStack.getMin();   --&gt; Returns -4.
minStack.]]></description><category></category></item></channel></rss>