<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wwj_bupt]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq789045</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq789045]]></copyright><item><title><![CDATA[spring mvc源码]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/121171060</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/121171060</guid><author>qq789045</author><pubDate>Sun, 07 Nov 2021 14:12:11 +0800</pubDate><description><![CDATA[初始化
tomcat会读取web.xml，从里面获取servlet class得到DispatcherServlet,父类是HttpServlet，有doget，dopost，传入request，传出response。
tomcat在开始的时候会调用HttpServlet的init方法，子类重写这个方法。FrameworkServlet继承HttpServlet，增加WebApplicationContext。
DispatcherServlet继承FrameworkServlet，增加HandlerMap]]></description><category></category></item><item><title><![CDATA[394. 字符串解码]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/120029142</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/120029142</guid><author>qq789045</author><pubDate>Tue, 31 Aug 2021 23:20:13 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/decode-string/



1.全局小标

2.两种模式

3.']'处理。如果一个新开的decode的第一个字符是]，说明不属于这一层的，直接返回。


class Solution {
public:
    int i;
    string s;

    int get_digit(int i,int j,string s){
        int sum=0;
        for(int k=i;k&lt;=j;k+]]></description><category></category></item><item><title><![CDATA[vimrc]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/116484071</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/116484071</guid><author>qq789045</author><pubDate>Fri, 07 May 2021 10:41:20 +0800</pubDate><description><![CDATA[set nu
nnoremap * :let @/='\&lt;&lt;C-R&gt;=expand("&lt;cword&gt;")&lt;CR&gt;\&gt;'&lt;CR&gt;:set hls&lt;CR&gt;
au BufReadPost * exe("norm g`\"")
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
set tabsto.]]></description><category></category></item><item><title><![CDATA[redis源码]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/114559853</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/114559853</guid><author>qq789045</author><pubDate>Tue, 09 Mar 2021 01:02:02 +0800</pubDate><description><![CDATA[set

get

expire、过期删除策略

复制

sentinel

集群

cluster

事物
]]></description><category></category></item><item><title><![CDATA[剑指 Offer 05. 替换空格]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/111877661</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/111877661</guid><author>qq789045</author><pubDate>Tue, 29 Dec 2020 00:03:16 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/submissions/

原地遍历的话，首先需要计算最终的长度。然后从后到前遍历。


class Solution {
public:
    string replaceSpace(string s) {
        int cnt=0;
        for(int i=0;i&lt;s.size();i++){
            if(s[i]==' ')
           ]]></description><category></category></item><item><title><![CDATA[剑指 Offer 04. 二维数组中的查找]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/111877573</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/111877573</guid><author>qq789045</author><pubDate>Mon, 28 Dec 2020 23:53:14 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/

选择右上角的，就能每次都排除一行或者一列


class Solution {
public:
    bool findNumberIn2DArray(vector&lt;vector&lt;int&gt;&gt;&amp; matrix, int target) {
        int n=matrix.size();
        if(n==0)
  ]]></description><category></category></item><item><title><![CDATA[剑指 Offer 40. 最小的k个数]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/111877008</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/111877008</guid><author>qq789045</author><pubDate>Mon, 28 Dec 2020 23:03:37 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/submissions/


class Solution {
public:

    void topk(int start,int end,int k,vector&lt;int&gt;&amp; arr){
        if(start&gt;=end)
            return;
        int l=start;
        int r=end;
    ]]></description><category></category></item><item><title><![CDATA[剑指 Offer 57 - II. 和为s的连续正数序列]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/111876223</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/111876223</guid><author>qq789045</author><pubDate>Mon, 28 Dec 2020 22:18:04 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/submissions/




class Solution {
public:
    vector&lt;vector&lt;int&gt;&gt; findContinuousSequence(int target) {
        int l=1,r=2;
        vector&lt;vector&lt;int&gt;&gt; ans;
.]]></description><category></category></item><item><title><![CDATA[phxpaxos ubuntu 编译脚本]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/109446811</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/109446811</guid><author>qq789045</author><pubDate>Mon, 02 Nov 2020 12:33:48 +0800</pubDate><description><![CDATA[https://github.com/Tencent/phxpaxos

直接运行脚本，自动下载编译




#!/bin/bash

set -e
set -v

git clone --recursive https://github.com/tencent-wechat/phxpaxos.git
cd phxpaxos

ROOT_DIR=`pwd`

#automake autoconf

cd $ROOT_DIR/third_party
wget http://ftp.gnu.org/gnu/a.]]></description><category></category></item><item><title><![CDATA[spring ioc 源码阅读]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/108700449</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/108700449</guid><author>qq789045</author><pubDate>Mon, 21 Sep 2020 15:27:23 +0800</pubDate><description><![CDATA[阅读框架源码最好的方式，是通过一个小例子，看代码的执行顺序，这样比较容易理解过程。如果是上来就直接看某个重要类的实现，估计会迷失在代码里，这段代码用来干什么的？这个类用来干什么的？这个有什么用？东西太多了啊，类太多了啊！

使用idea，f4进入函数实现或者变量定义，以及返回，以及ctrl+f12看类的函数列表。

所以，先从一个ioc例子看代码。

代码在https://github.com/geneRocket/spring-ioc-aop


	void test_ioc() {
		Resource]]></description><category></category></item><item><title><![CDATA[LeetCode 5502. 将子数组重新排序得到同一个二叉查找树的方案数]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/108308658</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/108308658</guid><author>qq789045</author><pubDate>Sun, 30 Aug 2020 17:56:49 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/number-of-ways-to-reorder-array-to-get-same-bst/


组合+递归

1.按照特定顺序插入，第一个节点就是根节点，后面的插入的都在根节点下面，所以无论怎么排序，第一个总是不变的。

2.后面的可以分成两半，小于根节点的和大于根节点的，这两个集合互不影响，都是分别往根节点左边或根节点右边插入，所以只用考虑一个集合内的相对顺序。

3.考虑左集合或右集合，就是递归了

4.首先从后面的位置（左集合..]]></description><category></category></item><item><title><![CDATA[LeetCode 5497. 查找大小为 M 的最新分组]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/108185899</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/108185899</guid><author>qq789045</author><pubDate>Sun, 23 Aug 2020 17:39:05 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/find-latest-group-of-size-m/


端点到区间的映射，有一个关键是，左右端点相同的时候，更改区间的一端的时候，不要删除原来的索引，因为还有另一个端点还在用。




struct Node{
    int l;
    int r;

    int size(){
        return r-l+1;
    }
};

class Solution {
public:
    int findLate..]]></description><category></category></item><item><title><![CDATA[LeetCode 5495. 圆形赛道上经过次数最多的扇区]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/108185788</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/108185788</guid><author>qq789045</author><pubDate>Sun, 23 Aug 2020 17:34:26 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/most-visited-sector-in-a-circular-track/


位置的模拟，[开始位置，结束位置]，然后从下一个位置开始。

由于旋转，而且从1开始，直接写规则返回相比取余更加方便。

由于包括结束位置，计数器加一后再判断是否要终止，由于需要从下一个位置开始，所以需要保存flag后对位置加1再退出。




struct Node{
    int pos;
    int cnt;
};

bool operato..]]></description><category></category></item><item><title><![CDATA[LeetCode 5481. 得到目标数组的最少函数调用次数]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/108183183</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/108183183</guid><author>qq789045</author><pubDate>Sun, 23 Aug 2020 15:04:42 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/minimum-numbers-of-function-calls-to-make-target-array/


怎样才是最少次数呢，操作有对一个元素加1，对所有元素乘2。数组所有元素从0开始。

反过来思考，对于一个奇数，它的操作是肯定是减1，不可能除2。对于一个偶数，可以减1也可以除2，显然除2比减1的次数更少。除2是对整个数组操作，这就要求所有都是偶数。

所以就是奇数变成偶数，除2。不断重复。

使用0的计数器。


class..]]></description><category></category></item><item><title><![CDATA[LeetCode 5482. 二维网格图中探测环]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/108183039</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/108183039</guid><author>qq789045</author><pubDate>Sun, 23 Aug 2020 14:54:28 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/detect-cycles-in-2d-grid/


dfs深搜找环，关键有两个优化地方：

1.路径中只要包含环就可以，不一定要回到最开始搜索的节点

2.如果一个点不在一个环中，那么后续搜索可以忽略这个节点，因为是多余的。



如果不使用第一个优化，一定要回到最开始的搜索地方，那么第二个优化的地方只能排除最开始的节点，这样会超时，所以两个优化要同时使用




class Solution {
public:
    
    i..]]></description><category></category></item><item><title><![CDATA[LeetCode 206. 反转链表]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/107780914</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/107780914</guid><author>qq789045</author><pubDate>Tue, 04 Aug 2020 10:27:19 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/reverse-linked-list/


这道题是我2017.11月底的时候百度面试的题。

以两个节点为单位，一个前面的节点，一个后面的节点。

开始的时候比较特殊，因为是后一个节点指向前一个节点，同时最后翻转的链表的尾部是NULL，所以一开始前面的节点是NULL。

需要临时保存第三个节点的指针。


/**
 * Definition for singly-linked list.
 * struct ListNode {
 * .]]></description><category></category></item><item><title><![CDATA[LeetCode 136. 只出现一次的数字]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/107780237</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/107780237</guid><author>qq789045</author><pubDate>Tue, 04 Aug 2020 10:05:42 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/single-number/


只出现一次的数字，使用异或，可以达到时间O（N），复杂度O（1）。

a^b^a=a


class Solution {
public:
    int singleNumber(vector&lt;int&gt;&amp; nums) {
        int a=0;
        int n=nums.size();
        for(int i=0;i&lt;n;i++){
     ..]]></description><category></category></item><item><title><![CDATA[LeetCode 437. 路径总和 III]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/107758614</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/107758614</guid><author>qq789045</author><pubDate>Mon, 03 Aug 2020 20:32:57 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/path-sum-iii/



]]></description><category></category></item><item><title><![CDATA[LeetCode 283. 移动零]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/107746437</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/107746437</guid><author>qq789045</author><pubDate>Sun, 02 Aug 2020 16:18:52 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/move-zeroes/


双指针，快慢指针




class Solution {
public:

    void moveZeroes(vector&lt;int&gt;&amp; nums) {
        int p=0;
        int q=0;
        int n=nums.size();

        while(q&lt;n){
            if(nums[q]!=0){
  ...]]></description><category></category></item><item><title><![CDATA[LeetCode 448. 找到所有数组中消失的数字]]></title><link>https://blog.youkuaiyun.com/qq789045/article/details/107745760</link><guid>https://blog.youkuaiyun.com/qq789045/article/details/107745760</guid><author>qq789045</author><pubDate>Sun, 02 Aug 2020 15:48:37 +0800</pubDate><description><![CDATA[https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/


版本1

先排序，后遍历。

遍历的时候记录期望的数字，

如果遇到的等于期望的数字，则通过。

如果遇到的数字大于期望的数字，则说明有间隔，将这段间隔记录到结果里面。


class Solution {
public:
    vector&lt;int&gt; findDisappearedNumbers(vector&lt;int&gt;&am..]]></description><category></category></item></channel></rss>