<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ozl520的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ozl520</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ozl520]]></copyright><item><title><![CDATA[23种设计模式（一）]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/118105603</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/118105603</guid><author>ozl520</author><pubDate>Tue, 22 Jun 2021 23:03:24 +0800</pubDate><description><![CDATA[1.设计模式概述
什么是设计模式

设计模式是前辈对于代码开发经验的总结，是解决特定问题的一系列套路，它不是语法规定，而是一套用来提高代码可复用性，可维护性，可读性，稳健性以及安全性的解决方案。
Gof（四人帮）合作出版了《设计模式：可复用面向对象软件的基础》一书，收纳了23种设计模式，从此树立了软件设计模式领域的里程碑，人称[Gof模式]

学习设计模式的意义


设计模式的本质是面向对象设计原则的实际应用，是对类封装，继承和多态以及类的关联关系和组合关系的充分理解


正确使用设计模式具有以下优点：

]]></description><category></category></item><item><title><![CDATA[JUC并发编程（二）]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/117854847</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/117854847</guid><author>ozl520</author><pubDate>Sun, 13 Jun 2021 21:27:05 +0800</pubDate><description><![CDATA[16.JMM

请你谈谈对Volatile的理解

Volatile是Java虚拟机提供的轻量级的同步机制
1.保证可见性（JMM挂钩）
2.不保证原子性
3.禁止指令重排

什么是JMM

JMM ：Java内存模型，不存在的东西，是一个概念和约定
关于JMM的一些同步约定
1.线程解锁前，必须把共享变量立刻刷回主存
2.线程加锁前，必须读取主存中的最新值到工作内存中
3.加锁和解锁是同一把锁
线程  工作内存  线程内存
8种操作


内存交互操作有8种，虚拟机实现必须保证每一个操作都是原子的，不可在分]]></description><category></category></item><item><title><![CDATA[JUC并发编程（一）]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/117674577</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/117674577</guid><author>ozl520</author><pubDate>Sat, 12 Jun 2021 19:47:39 +0800</pubDate><description><![CDATA[1.JUC

JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包，JDK 1.5开始出现的。

2.线程和进程

进程是操作系统分配资源的单位，线程是调度的基本单位，线程之间共享进程资源。

一个进程往往包含多个进程，至少包含一个
java默认包含2个线程，main和GC
java不可以自己开启线程，只能通过本地方法调用c来执行
对于java来说，线程就是一个单独的的资源类，没有任何附属的操作，只有属性和方法

并行和并发

并发（多线程操作同一个资源）

CPU一核]]></description><category></category></item><item><title><![CDATA[Redis非关系型数据库]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/116565407</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/116565407</guid><author>ozl520</author><pubDate>Fri, 04 Jun 2021 15:14:22 +0800</pubDate><description><![CDATA[RedisRedis介绍1.引言2.NoSQL3.Redis介绍Redis安装1.安装Redis2.使用redis-cli连接redis3.使用图形化界面连接redisRedis常用命令1.Redis存储数据结构2.string的常用命令3.hash常用命令4.list常用命令
Redis介绍
1.引言

1.由于用户量过大，请求量也随之增大，数据压力过大
2.多台服务器之间，数据不同步
3.多台服务器之间的锁，已经不存在互斥性了


2.NoSQL

Redis是可以一款NoSQL
NoSQL-&gt;非]]></description><category></category></item><item><title><![CDATA[leetcode刷题打卡(十一)]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/117252063</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/117252063</guid><author>ozl520</author><pubDate>Tue, 25 May 2021 11:26:22 +0800</pubDate><description><![CDATA[leetcode刷题打卡(十一)

剑指 Offer 11. 旋转数组的最小数字
难度：简单

把一个数组最开始的若干个元素搬到数组的末尾，我们称之为数组的旋转。输入一个递增排序的数组的一个旋转，输出旋转数组的最小元素。例如，数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转，该数组的最小值为1。

示例 1：
输入：[3,4,5,1,2]
输出：1
示例 2：
输入：[2,2,2,0,1]
输出：0


解法一：

class Solution {
    public int minA]]></description><category></category></item><item><title><![CDATA[leetcode刷题打卡(十)]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/117235428</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/117235428</guid><author>ozl520</author><pubDate>Mon, 24 May 2021 23:39:15 +0800</pubDate><description><![CDATA[leetcode刷题打卡(十)

剑指 Offer 09. 用两个栈实现队列
难度：简单

用两个栈实现一个队列。队列的声明如下，请实现它的两个函数 appendTail 和 deleteHead ，分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素，deleteHead 操作返回 -1 )

示例 1：
输入：
[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[3],[],[]]
输出：[null,null,3,-1]
示例]]></description><category></category></item><item><title><![CDATA[leetcode刷题打卡(九)]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/117224994</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/117224994</guid><author>ozl520</author><pubDate>Mon, 24 May 2021 21:31:01 +0800</pubDate><description><![CDATA[leetcode刷题打卡(九)

剑指 Offer 07. 重建二叉树
难度：中等

输入某二叉树的前序遍历和中序遍历的结果，请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

例如，给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树：



限制：
0 &lt;= 节点个数 &lt;= 5000


解法一：


...]]></description><category></category></item><item><title><![CDATA[leetcode刷题打卡(八)]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/117174724</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/117174724</guid><author>ozl520</author><pubDate>Sun, 23 May 2021 00:53:50 +0800</pubDate><description><![CDATA[leetcode刷题打卡(八)

剑指 Offer 10- II. 青蛙跳台阶问题
难度：简单

一只青蛙一次可以跳上1级台阶，也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7（1000000007），如计算初始结果为：1000000008，请返回 1。

示例 1：
输入：n = 2
输出：2


示例 2：
输入：n = 7
输出：21


示例 3：
输入：n = 0
输出：1


提示：
0 &lt;= n &lt;= 100

解法一：动态规划
cla]]></description><category></category></item><item><title><![CDATA[leetcode刷题打卡(七)]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/117174557</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/117174557</guid><author>ozl520</author><pubDate>Sun, 23 May 2021 00:51:10 +0800</pubDate><description><![CDATA[leetcode刷题打卡(七)

剑指 Offer 10- I. 斐波那契数列
难度：简单

写一个函数，输入 n ，求斐波那契（Fibonacci）数列的第 n 项（即 F(N)）。斐波那契数列的定义如下：
F(0) = 0,   F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N &gt; 1.
斐波那契数列由 0 和 1 开始，之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模 1e9+7（1000000007），如计算初始结果为：1000000008，请返回 ]]></description><category></category></item><item><title><![CDATA[leetcode刷题打卡(六)]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/117050437</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/117050437</guid><author>ozl520</author><pubDate>Sun, 23 May 2021 00:46:56 +0800</pubDate><description><![CDATA[leetcode刷题打卡(六)

剑指 Offer 06. 从尾到头打印链表
难度：简单

输入一个链表的头节点，从尾到头反过来返回每个节点的值（用数组返回）。

示例 1：
输入：head = [1,3,2]
输出：[2,3,1]


限制：
0 &lt;= 链表长度 &lt;= 10000


解法一：


...]]></description><category></category></item><item><title><![CDATA[leetcode刷题打卡(五)]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/117049368</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/117049368</guid><author>ozl520</author><pubDate>Thu, 20 May 2021 00:43:36 +0800</pubDate><description><![CDATA[leetcode刷题打卡(五)

剑指 Offer 05. 替换空格
难度：简单

请实现一个函数，把字符串 s 中的每个空格替换成"%20"。

示例 1：
输入：s = “We are happy.”
输出：“We%20are%20happy.”


限制：
0 &lt;= s 的长度 &lt;= 10000


解法一：利用replaceAll函数

class Solution {
    public String replaceSpace(String s) {
        s=s.repl]]></description><category></category></item><item><title><![CDATA[leetcode刷题打卡(四)]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/117005514</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/117005514</guid><author>ozl520</author><pubDate>Wed, 19 May 2021 01:36:31 +0800</pubDate><description><![CDATA[leetcode刷题打卡(四)

剑指 Offer 04. 二维数组中的查找
难度：中等

在一个 n * m 的二维数组中，每一行都按照从左到右递增的顺序排序，每一列都按照从上到下递增的顺序排序。请完成一个高效的函数，输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。

示例:
现有矩阵 matrix 如下：
[
[1,   4,  7, 11, 15],
[2,   5,  8, 12, 19],
[3,   6,  9, 16, 22],
[10, 13, 14, 17, 24],
[18,]]></description><category></category></item><item><title><![CDATA[leetcode刷题打卡(三)]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/117004482</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/117004482</guid><author>ozl520</author><pubDate>Wed, 19 May 2021 00:49:00 +0800</pubDate><description><![CDATA[leetcode刷题打卡(三)

剑指 Offer 03. 数组中重复的数字
难度：简单
找出数组中重复的数字。

在一个长度为 n 的数组 nums 里的所有数字都在 0～n-1 的范围内。数组中某些数字是重复的，但不知道有几个数字重复了，也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

示例 1：
输入：
[2, 3, 1, 0, 2, 5, 3]
输出：2 或 3


限制：
2 &lt;= n &lt;= 100000


解法一：for循环遍历数组作比较

class Solutio]]></description><category></category></item><item><title><![CDATA[Nginx反向代理服务器]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/116457518</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/116457518</guid><author>ozl520</author><pubDate>Sun, 09 May 2021 14:31:00 +0800</pubDate><description><![CDATA[Nginx反向代理服务器Nginx介绍1.引言2.Nginx介绍Nginx安装1.安装Nginx三级目录
Nginx介绍
1.引言

为什么要学习Nginx
问题1：客户端发送的请求到那个服务器
问题2：发送的请求都到了服务器1
问题3：客户端发出的请求有可能是动态资源的，也有申请静态资源的


服务器搭建集群后

搭建集群后，使用Nginx做反向代理


2.Nginx介绍

Nginx是由俄罗斯人研发的，应对Ramber网站，在2004年发布的第一个版本
Nginx的特点

1.稳定性极强。7*24时不]]></description><category></category></item><item><title><![CDATA[leetcode刷题打卡(二)]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/116448587</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/116448587</guid><author>ozl520</author><pubDate>Thu, 06 May 2021 10:46:58 +0800</pubDate><description><![CDATA[leetcode刷题打卡(二)


递增的三元子序列


给你一个整数数组 nums ，判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i &lt; j &lt; k ，使得 nums[i] &lt; nums[j] &lt; nums[k] ，返回 true ；否则，返回 false 。



我的思路：关键词存在，长度为3，递增，根据要求设置变量one,two,只要three大于two，并且对one,two,three进行递增排序的，就可以实现。

]]></description><category></category></item><item><title><![CDATA[leetcode刷题打卡(一)]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/116297023</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/116297023</guid><author>ozl520</author><pubDate>Fri, 30 Apr 2021 12:20:48 +0800</pubDate><description><![CDATA[leetcode刷题打卡(一)

从这篇文章开始，我会记录每天刷leetcode的题目作为打卡记录在该博客上，也希望大家也可以跟随博主一起走进算法的世界，感受算法的魅力。


出现的题目可以根据题目的题号在leetcode找到相关题目的的信息。


只出现一次的数字 II


题目


给你一个整数数组 nums ，除某个元素仅出现 一次 外，其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。


我的思路


记录每个数字出现的次数，若出现的次数为1则该数字为正确答案


代码

cla]]></description><category></category></item><item><title><![CDATA[走进Shiro世界]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/115680723</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/115680723</guid><author>ozl520</author><pubDate>Mon, 19 Apr 2021 22:55:15 +0800</pubDate><description><![CDATA[ShiroShiro1.1 Shiro是什么Shiro架构1.工作流程2.RBAC模型3.架构HelloWorld与Web集成shiro标签
Shiro

为什么要用shiro
1.项目中的密码不能明文存储
2.任何访客，登录与不登录访问的功能不同
3.项目中的功能不是所有的用户都能操作
项目当项目某些功能被使用，需要进行安全校验，保证整个系统的秩序

1.1 Shiro是什么

Apache Shiro是Java的一个安全权限框架
shiro可以轻松的完成：身份认证、授权、加密、会话管理等功能
Shiro]]></description><category></category></item><item><title><![CDATA[application/json方式提交数据遇到的问题]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/115646072</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/115646072</guid><author>ozl520</author><pubDate>Mon, 12 Apr 2021 23:49:20 +0800</pubDate><description><![CDATA[在servlet的request中发送json数据用post方式的Content-。type:application/json;charset=utf-8发送是不可以用request.getParameter()等获取参数值
SpringMVC的@RequestBody可以接收该请求体，并且自动拼接对象来接收
SpringMVC的@RequestBody Map&lt;String,String&gt;来接收，对于少量参数建议使用这种方式
没有用到框架的话，只能通过用传统的流的方式接收

 		Buffe.]]></description><category></category></item><item><title><![CDATA[走进Git世界]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/115090490</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/115090490</guid><author>ozl520</author><pubDate>Wed, 24 Mar 2021 01:16:18 +0800</pubDate><description><![CDATA[GItGit概述1.引言2.介绍Git环境搭建1.Git安装2.架构Git应用1.仓库1.1 新建仓库2.基本操作2.1 查看仓库状态2.2 暂存文件2.3 提交文件3.远程仓库3.1 远程仓库工作模式3.2 远程仓库选型3.3 基础操作3.3.1 新建远程仓库3.3.2 本地关联远程仓库3.3.3 推送文件到远程仓库3.3.4 克隆远程仓库3.3.5 代码共享3.3.6 命令汇总Git分支1.分支简介2.分支基本操作2.1 查看分支2.2 创建分支2.3 切换分支3.新建分支细节3.1 新分支初始内容3.]]></description><category></category></item><item><title><![CDATA[解决ajax发送list数据到scontroller报错，提示类型不对]]></title><link>https://blog.youkuaiyun.com/ozl520/article/details/113097844</link><guid>https://blog.youkuaiyun.com/ozl520/article/details/113097844</guid><author>ozl520</author><pubDate>Sun, 24 Jan 2021 21:38:20 +0800</pubDate><description><![CDATA[由于在最近对于开发房屋管理系统时候，因为插入房屋信息的时候有多张图片，需要用一张表来单独存放图片的地址，所以就会出现一对多的关系，就需要list数据传输，因为对于layui前端不熟悉以及传输数据格式的要求导致我走了很多弯路，也查了很多资料也不能让我满意。最后让我找到了一篇能够解决我困惑的是一位博主写的文章非常的nice，值得转载一下下面内容是来自以下链接转载于：https://blog.youkuaiyun.com/stones_liu/article/details/108489744

报错内容：Property.]]></description><category></category></item></channel></rss>