<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_45162113的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_45162113</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_45162113]]></copyright><item><title><![CDATA[Linux中的ps命令详解]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/121129000</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/121129000</guid><author>qq_45162113</author><pubDate>Wed, 03 Nov 2021 20:58:46 +0800</pubDate><description><![CDATA[PS命令：可以查看进程瞬间信息
这里展示命令所有参数的含义




命令
含义




ps a
显示所有进程（TTY不为?的）


ps -a
显示同一终端下所有程序


ps -A
显示所有进程


ps -c
显示进程的实际名称


ps -e
与ps -A相同


ps -f
显示完整格数的输出


ps -F
比ps -f多了SZ、RSS、PSR三列数据


ps -u
列出属于该用户的进程的状况


ps -L
显示进程中的线程


ps -l
显示长列表


ps -N
反向选择


ps -]]></description><category></category></item><item><title><![CDATA[IDEA每次启动都会Indexing]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/121128721</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/121128721</guid><author>qq_45162113</author><pubDate>Wed, 03 Nov 2021 19:39:01 +0800</pubDate><description><![CDATA[每次打开IDEA都会indexing好半天，大一点的项目要几个小时，很是搞人心态。

网上找了两种方法：
第一种是 File -&gt;Invalidate caches -&gt; Restart


这种方式对我试了没啥用，仅供参考。
第二种是File-&gt;Settings 中直接搜索index

然后旁边两个选项都选择Don’t download,use local indexes
亲测有用！

...]]></description><category></category></item><item><title><![CDATA[MySQL索引]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/120923995</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/120923995</guid><author>qq_45162113</author><pubDate>Sat, 23 Oct 2021 17:59:41 +0800</pubDate><description><![CDATA[索引
目的：更快的获取数据
本质：数据结构
索引分类











主键索引
PRIMARY KEY
唯一表示，不可重复，只能有一个列


唯一索引
UNIQUE KEY
避免重复的列出现，可以有多个列


常规索引
KEY/INDEX
默认的


全文索引
FULLTEXT
特定数据库引擎才有


索引的使用
1、创建表时增加索引
2、创建完毕后增加索引
SHWO INDEX FROM table  //显示所有索引信息
//增加索引
CREATE TABLE table(
    id INT ]]></description><category></category></item><item><title><![CDATA[MySQL的事务]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/120923969</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/120923969</guid><author>qq_45162113</author><pubDate>Sat, 23 Oct 2021 17:54:47 +0800</pubDate><description><![CDATA[事务
原子性： 要么都成功，要么都失败。
一致性：事务前后数据完整性保持一致。
持久性：事务提交后不可逆。
隔离性：多个事务不互相干扰。
隔离所导致的问题
脏读：读到未提交事务的数据。
不可重复读：多次读取表中数据时同时数据被更改，导致多次读取数据内容不一致。
幻读：多次读取表中数据时同时有新插入的数据，导致多次读取数据行不一致。
事务的执行
MySql 默认开启事务自动提交。
SET autocommit = 0    关闭自动提交
SET autocommit = 1    开启自动提交
commit ]]></description><category></category></item><item><title><![CDATA[MySQL常用函数]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/120923846</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/120923846</guid><author>qq_45162113</author><pubDate>Sat, 23 Oct 2021 17:51:08 +0800</pubDate><description><![CDATA[更多方法可参考官方文档：https://dev.mysql.com/doc/refman/5.7/en/built-in-function-reference.html

数学运算
SELECT ABS(-10)     --绝对值  10
SELECT CEILING(9.2)   --向上取整 10
SELECT FLOOR(9.2)   --向下取整  9 
SELECT RAND()   --0-1的随机数
SELECT SIGN(10)   --判断正负数  正数返回 1 负数返回 -1

字符.]]></description><category></category></item><item><title><![CDATA[17. 电话号码的字母组合]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/120514779</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/120514779</guid><author>qq_45162113</author><pubDate>Mon, 27 Sep 2021 18:42:27 +0800</pubDate><description><![CDATA[给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下（与电话按键相同）。
注意 1 不对应任何字母。


示例 1：
输入：digits = "23"
输出：["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2：
输入：digits = ""
输出：[]

示例 3：
输入：digits = "2"
输出：["a","b","c"]

class Solution {
     publ.]]></description><category></category></item><item><title><![CDATA[JWT（JSON Web Token）]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/120294024</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/120294024</guid><author>qq_45162113</author><pubDate>Tue, 14 Sep 2021 18:54:39 +0800</pubDate><description><![CDATA[JSON Web Token 是目前最流行的跨域认证解决方案，在介绍JWT之前首先了解一下单点登录。

单点登录
单点登录的目的就是实现在访问同一家企业下的服务时，只需要一次登录就可以访问多个Server，如我们在豆瓣上登录之后，进入豆瓣读书和豆瓣电影时不需要登录。
但问题在于如何实现呢，一般我们项目中会将登录信息存到cookie和session中，每次请求到服务器时都会对比传入的cookie的值；但是如果在集群环境中，如何保证在A服务器登录后访问到B服务器不需要重复登录呢（因为服务器之间的session.]]></description><category></category></item><item><title><![CDATA[责任链模式]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/119939047</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/119939047</guid><author>qq_45162113</author><pubDate>Thu, 26 Aug 2021 19:53:56 +0800</pubDate><description><![CDATA[责任链模式

场景：工作中如果需要请假，只需要在OA系统上发起请假流程，系统需要根据请假的天数来决定具体的操作者，如请假三天内则只需要上级审批，如果大于三天小于七天需要经理审批，如果大于七天需要部门负责人审批。

此时就可以用到责任链模式，即将一个请求的所有处理者形成一个链，请求在未被处理之前都会在这条链上依次寻找真正的处理者。
//创建一个抽象的处理类
abstract class Handler{
    protected Handler nextHandler;
    public void se]]></description><category></category></item><item><title><![CDATA[剑指Offer 14.剪绳子]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/114642652</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/114642652</guid><author>qq_45162113</author><pubDate>Wed, 10 Mar 2021 18:34:34 +0800</pubDate><description><![CDATA[题目：

给你一根长度为 n 的绳子，请把绳子剪成整数长度的 m 段（m、n都是整数，n&gt;1并且m&gt;1），每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少？例如，当绳子的长度是8时，我们把它剪成长度分别为2、3、3的三段，此时得到的最大乘积是18。

输入: 2
输出: 1
解释: 2 = 1 + 1, 1 × 1 = 1

/*
自己写的垃圾代码：一个一个试，递归找出最大乘机。每次均匀切割，开始剪两刀，然后递增，剩下的绳子继续]]></description><category></category></item><item><title><![CDATA[剑指Offer 67.字符串转换整数]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/114529761</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/114529761</guid><author>qq_45162113</author><pubDate>Mon, 08 Mar 2021 14:23:55 +0800</pubDate><description><![CDATA[题目

写一个函数 StrToInt，实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。


首先，该函数会根据需要丢弃无用的开头空格字符，直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时，则将该符号与之后面尽可能多的连续数字组合起来，作为该整数的正负号；假如第一个非空字符是数字，则直接将其与之后连续的数字字符组合起来，形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符，这些字符可以被忽略，它们对于函数不应该造成影响。
注意：假如该字符串中]]></description><category></category></item><item><title><![CDATA[剑指Offer 09. 用两个栈实现队列]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/114482519</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/114482519</guid><author>qq_45162113</author><pubDate>Sun, 07 Mar 2021 13:59:13 +0800</pubDate><description><![CDATA[用两个栈实现一个队列。队列的声明如下，请实现它的两个函数 appendTail 和 deleteHead ，分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素，deleteHead 操作返回 -1 )

class CQueue {
    private Stack&lt;Integer&gt; Stack1 ;
    private Stack&lt;Integer&gt; Stack2 ;

    public CQueue() {   
        Stack1 = .]]></description><category></category></item><item><title><![CDATA[剑指Offer . 重建二叉树]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/114481534</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/114481534</guid><author>qq_45162113</author><pubDate>Sun, 07 Mar 2021 12:47:33 +0800</pubDate><description><![CDATA[剑指Offer.重建二叉树

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


eg：&nbsp; 前序遍历 preorder = [3,9,20,15,7]
&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;中序遍历 inorder = [9,3,15,20,7]


返回如下二叉树
&nbsp; &nbsp; &nbsp;3
&nbsp; &nbsp;   /&nbsp;  \
&nbsp; 9 &nbsp;]]></description><category></category></item><item><title><![CDATA[多线程-线程池]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/113347364</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/113347364</guid><author>qq_45162113</author><pubDate>Thu, 28 Jan 2021 17:00:42 +0800</pubDate><description><![CDATA[线程池
线程池的创建方式
一共有四种创建方式：
Executors.newCachedThreadPool();  创建一个无限大的线程池，线程大小和任务数保持一致。
Executors.newFixedThreadPool(int xxx); 创建一个自定义线程数的线程池。如果任务大于自定义数，多余任务会暂时放在任务队列中等待空闲线程的执行。
Executors.newSingleThreadExecutor(); 创建一个线程数为1的线程池，如果任务大于1，多余任务会暂时放在任务队列中等待空闲线程的执行]]></description><category></category></item><item><title><![CDATA[线程通信-生产者和消费者问题]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/113251572</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/113251572</guid><author>qq_45162113</author><pubDate>Wed, 27 Jan 2021 17:28:12 +0800</pubDate><description><![CDATA[线程通信
Java提供了几个方法解决线程之间的通信问题，这些方法均是Object中的方法。




方法名
作用




wait（）
表示线程一直等待，直到其它线程通知，与sleep不同，sleep不会释放锁而wait会释放锁


wait（long timeout）
指定等待的毫秒数


notify（）
唤醒一个处于等待状态的线程


notifyAll（）
唤醒用一个对象上所有调用wait（）方法的线程，优先级高的线程优先调度


为什么这些方法被定义子啊Object中？
Java的每个对象中都有一]]></description><category></category></item><item><title><![CDATA[Lock锁-用Lock完成三窗口卖票]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/113250687</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/113250687</guid><author>qq_45162113</author><pubDate>Wed, 27 Jan 2021 16:08:29 +0800</pubDate><description><![CDATA[Lock锁

从JDK5.0开始，Java提供了更强大的线程同步机制-通过显式定义同步锁对象来实现同步，同步锁使用Lock对象充当
java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问，每次只能有一个线程对Lock对象加锁，线程开始访问共享资源之前应先获得Lock对象
ReentrantLock类实现了Lock，它拥有与synchronized相同的并发性和内存语义，在现实线程安全的控制中，比较常用的是ReentrantLoc]]></description><category></category></item><item><title><![CDATA[死锁]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/113249204</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/113249204</guid><author>qq_45162113</author><pubDate>Wed, 27 Jan 2021 15:42:22 +0800</pubDate><description><![CDATA[死锁

多个线程各自占有一些共享资源，并且互相等待其它线程占有的资源才能运行，而导致两个或者多个线程都在等待对方释放资源，都停止执行的情形。某一个同步块同时拥有“两个以上对象的锁”时，就可能会发生“死锁”的问题。

//死锁：多个线程互相持有对方的资源，相互僵持。
public class DeadLock {
	
	public static void main(String[] args) {
		MakeUp makeUp1 = new MakeUp(0, "greed1");
		MakeUp ma]]></description><category></category></item><item><title><![CDATA[同步方法-synchronized]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/113181381</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/113181381</guid><author>qq_45162113</author><pubDate>Tue, 26 Jan 2021 16:17:43 +0800</pubDate><description><![CDATA[由于我们可以通过private关键字来保证数据对象只能被方法访问，所以我们只需要针对方法提出一套机制，这套机制就是synchronized关键字，它包括两种使用方法：synchronized方法和synchronized块。
synchronized方法控制对“对象”的访问，每一个对象对应一把锁，每个synchronized方法都必须获得调用该方法的对象锁才能执行，否则线程会阻塞，方法一旦执行，就独占该锁，直到该方法返回才释放锁，后面被阻塞的线程才能获得这个锁，继续执行。

同步方法：实现线程安全的三窗口.]]></description><category></category></item><item><title><![CDATA[守护线程]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/113180090</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/113180090</guid><author>qq_45162113</author><pubDate>Tue, 26 Jan 2021 14:56:45 +0800</pubDate><description><![CDATA[守护线程
线程分为用户线程和守护线程
用户 (User) 线程：运行在前台，执行具体的任务，如程序的主线程、连接网络的子线程等都是用户线程
守护 (Daemon) 线程：运行在后台，为其他前台线程服务。也可以说守护线程是 JVM 中非守护线程的 “佣人”。一旦所有用户线程都结束运行，守护线程会随 JVM 一起结束工作
虚拟机必须确保用户线程完毕，虚拟机不用等待守护线程执行完毕；main 函数所在的线程就是一个用户线程啊，main 函数启动的同时在 JVM 内部同时还启动了好多守护线程，比如垃圾回收线程。比较]]></description><category></category></item><item><title><![CDATA[线程的优先级]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/113179654</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/113179654</guid><author>qq_45162113</author><pubDate>Tue, 26 Jan 2021 14:41:34 +0800</pubDate><description><![CDATA[线程优先级
Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程，线程调度器按照优先级决定应该调度哪个线程来执行。
线程的优先级用数字表示，范围是1~10，默认优先级是5，公平竞争。
使用getPriority().setPriorty(int xxx)方法可以获取优先级。
优先级高的并不一定就一定先跑，但大多情况下会先执行。优先级低只意味获得调度的概率低，并不是优先级低就不会被调用，这都谁看CPU的调度

public class 线程优先级 {
	public static void ma]]></description><category></category></item><item><title><![CDATA[线程状态的观测]]></title><link>https://blog.youkuaiyun.com/qq_45162113/article/details/113179471</link><guid>https://blog.youkuaiyun.com/qq_45162113/article/details/113179471</guid><author>qq_45162113</author><pubDate>Tue, 26 Jan 2021 14:25:28 +0800</pubDate><description><![CDATA[人有生来病死，线程一样，线程主要有创建、就绪、运行、阻塞、死亡这五个状态。


测试线程状态
public class 测试线程状态 {
	public static void main(String[] args) throws InterruptedException {
		Thread thread = new Thread(()-&gt; {
			for(int i = 0 ; i &lt; 10 ; i++) {
				try {
					Thread.sleep(1000);
				.]]></description><category></category></item></channel></rss>