<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[pynash123的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/pynash123</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; pynash123]]></copyright><item><title><![CDATA[分支算法的时间复杂度]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/103564910</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/103564910</guid><author>pynash123</author><pubDate>Mon, 16 Dec 2019 18:17:01 +0800</pubDate><description><![CDATA[记录一下
表示将原问题分解成 a 个 规模大小为 N/b 的子问题，合并这 a 个子问题的代价是 Θ(N^K)  （N^k 表示 N 的 k 次方）
T(N)=aT(N/b)+Θ(N^K)
T(N)的解有以下三种情况：


T(N)=O(N(logab))   当 a &gt; bk 时


T(N)=O(Nk log^N)   当 a =  bk  时


T(N)=O(Nk)   当 a &l...]]></description><category></category></item><item><title><![CDATA[Mysql的四种隔离级别]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/103512157</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/103512157</guid><author>pynash123</author><pubDate>Thu, 12 Dec 2019 16:55:59 +0800</pubDate><description><![CDATA[**Read Uncommitted（读取未提交内容） **
在该隔离级别，所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用，因为它的性能也不比其他级别好多少。
存在的问题：脏读、不可重复读、幻读
Read Committed（读取提交内容）
这是大多数数据库系统的默认隔离级别（但不是MySQL默认的）。它满足了隔离的简单定义：一个事务只能看见已经提交事务所做的改变。
存在的...]]></description><category></category></item><item><title><![CDATA[linux下僵尸进程和孤儿进程]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/103496748</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/103496748</guid><author>pynash123</author><pubDate>Wed, 11 Dec 2019 20:25:21 +0800</pubDate><description><![CDATA[子进程是通过父进程创建的，子进程也可以继续创建子进程。父进程无法预测子进程到底什么时候结束，当一个子进程结束之后，它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。
僵尸进程 ：
子进程结束了，但是父进程没有调用wait()或者waitpid()取得子进程的终止状态，这个子进程将变成一个僵尸进程。
利用命令ps，可以看到有标记为Z的进程就是僵尸进程。
僵尸进程危害：...]]></description><category></category></item><item><title><![CDATA[c++  builder生成器模式]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/103488341</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/103488341</guid><author>pynash123</author><pubDate>Wed, 11 Dec 2019 10:57:34 +0800</pubDate><description><![CDATA[模式定义：
生成器模式是为了解决将一个复杂对象的构建和它的表示分离，使得同样的构建过程可以创建不的表示的问题。对象的构建过程相对稳定。
适用情况：
1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2、当构造过程必须允许被构造的对象有不同的表示时。
生成器模式有点类似于template method，都是某个过程的总体流程固定，具体每一步可变。生成器模式是对象的构建过程相对...]]></description><category></category></item><item><title><![CDATA[指针和引用的区别与相同点]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/103454837</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/103454837</guid><author>pynash123</author><pubDate>Mon, 09 Dec 2019 11:17:21 +0800</pubDate><description><![CDATA[指针和引用的区别
本质：
引用是别名，指针是地址
指针在运行时可以改变所指向的值，而引用一旦与某个对象绑定后就不再改变。
指针可以为空，引用不可以为空，引用在定义的时候必须初始化
指针占用空间，应用不占用
可以有const指针，但是没有const引用
指针可以有多级，但是引用只能是一级
”sizeof引用”得到的是所指向的变量(对象)的大小，而”sizeof指针”得到的是指针本身的大小；
引用和指...]]></description><category></category></item><item><title><![CDATA[c++template method模板方法]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/103430040</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/103430040</guid><author>pynash123</author><pubDate>Fri, 06 Dec 2019 21:42:17 +0800</pubDate><description><![CDATA[模板方法一般在类库里面比较常见，类库里把实现某一功能需要的各个步骤逻辑实现好，调用者只需要按照需要重新修改某几步。框架是相对稳定的，变化隔离在客户程序。
例如实现某一功能逻辑如下
step1()
step2()
if (step()3)
setp4()
setp5()
step2和step4不同用户有不同实现，其他步骤固定
将上述逻辑用模板方法实现
template_method_lib.h
#i...]]></description><category></category></item><item><title><![CDATA[c++工厂模式]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/103412819</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/103412819</guid><author>pynash123</author><pubDate>Thu, 05 Dec 2019 21:33:51 +0800</pubDate><description><![CDATA[简单写了一个工厂模式
在这种模式下，有新增的类时，FileAccessFasctory.h 和FileWork,cpp这两个文件是稳定的，不需要修改，只需要修改FileAccess.h和FileAccess.cpp，或者新增文件，这样就在业务逻辑中隔离变化；同时也可以实现增量编译，也不会影响业务代码的单元测试。
FileAccessFasctory.h
#ifndef _FILE_ACCESS_F...]]></description><category></category></item><item><title><![CDATA[c++组合模式]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/103396604</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/103396604</guid><author>pynash123</author><pubDate>Wed, 04 Dec 2019 23:59:19 +0800</pubDate><description><![CDATA[将内部数据结构与客户代码隔离，不论内部结构是什么样子，客户代码调用方式不变（invokeAll函数）
component.h
#ifndef _THREAD_POOL_H
#define _THREAD_POOL_H
#include &lt;list&gt;
#include &lt;string&gt;

using namespace std;

class component
{
publ...]]></description><category></category></item><item><title><![CDATA[c++线程池]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/103358221</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/103358221</guid><author>pynash123</author><pubDate>Tue, 03 Dec 2019 01:00:45 +0800</pubDate><description><![CDATA[main.cpp
#include"threadPool.h"
#include&lt;iostream&gt;
#include&lt;cstdio&gt;
#include&lt;stdlib.h&gt;
#include&lt;unistd.h&gt;
using namespace std;


class MyTask: public ITask{
public:
    MyTask(...]]></description><category></category></item><item><title><![CDATA[c++ 静态函数与静态变量局部静态变量总结]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/103329896</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/103329896</guid><author>pynash123</author><pubDate>Sat, 30 Nov 2019 22:06:59 +0800</pubDate><description><![CDATA[静态成员变量在类中仅仅是声明，没有定义，所以要在类的外面定义，实际上是给静态成员变量分配内存。通过类名，对象，成员函数都可以访问静态成员变量。
类的静态成员变量需要在类外分配内存空间。
静态成员函数只能调用静态成员变量。
成员函数可以调用静态成员变量和静态成员函数。
类内局部静态变量所有对象共享一个，在编译时分配内存。
#include &lt;iostream&gt;
#include &lt;...]]></description><category></category></item><item><title><![CDATA[leetcode:链表中环的入口结点]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/99677055</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/99677055</guid><author>pynash123</author><pubDate>Fri, 16 Aug 2019 14:28:29 +0800</pubDate><description><![CDATA[题目：
//给一个链表，若其中包含环，请找出该链表的环的入口结点，否则，输出null。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
思路:
快慢指针，快指针每次前进两个长度，慢指针每次前进一个长度，若存在环，则一定会在环内相遇。
假设起点到环入...]]></description><category></category></item><item><title><![CDATA[不用加减乘数实现加减法]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/97496485</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/97496485</guid><author>pynash123</author><pubDate>Sat, 27 Jul 2019 11:15:01 +0800</pubDate><description><![CDATA[#include "iostream"
using namespace std;

int Add(int a, int b)
{
    while(b)
    {
        int tmp = (a &amp; b) &lt;&lt; 1;
        a = a ^ b;
        b = tmp;
    }
    return a;
}

int Subtractio...]]></description><category></category></item><item><title><![CDATA[linux查看cpu 内存  io 系统负载等]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/97263582</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/97263582</guid><author>pynash123</author><pubDate>Thu, 25 Jul 2019 15:07:26 +0800</pubDate><description><![CDATA[查看CPU使用情况的命令

vmstat 5
每5秒刷新一次，最右侧有CPU的占用率的数据
top
top 然后按Shift+P，按照进程处理器占用率排序

查看内存使用情况的命令
free
用free命令查看内存占用情况

top
top 然后按Shift+M, 按照进程内存占用率排序

查看磁盘i/o
iostat
用iostat查看磁盘/dev/sdc3的磁盘i/o情况，每两秒刷新一次

...]]></description><category></category></item><item><title><![CDATA[找出当前文件夹下大小排在前十的文件夹]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/97262854</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/97262854</guid><author>pynash123</author><pubDate>Thu, 25 Jul 2019 15:00:37 +0800</pubDate><description><![CDATA[du -sh * | sort -nr | head -n 10
sort：
-n  : 按照字符串表示的数字值来排序
-r ：按照反序排列
head :
-n : 取出前多少行

]]></description><category></category></item><item><title><![CDATA[c++单例模式]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/97139046</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/97139046</guid><author>pynash123</author><pubDate>Wed, 24 Jul 2019 16:49:04 +0800</pubDate><description><![CDATA[下面代码实现了三种常见的单例模式
#include &lt;iostream&gt;
#include  "pthread.h"
using namespace std;


pthread_mutex_t g_single_lock;

class Single
{
public:
    
    //函数内的局部静态变量在编译时已经分配空间，在第一次函数跑到这里时初始化，之后不再初始化
  ...]]></description><category></category></item><item><title><![CDATA[剑指offer：数字在排序数组中出现次数]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/96303095</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/96303095</guid><author>pynash123</author><pubDate>Wed, 17 Jul 2019 14:00:09 +0800</pubDate><description><![CDATA[题目:
统计数字在排序数组中出现的次数
思路:
二分查找找到位置，然后左右扩展
代码:
class Solution {
public:
    int GetNumberOfK(vector&lt;int&gt; data ,int k) {
        if(data.empty() || data[0] &gt; k || data[data.size()-1] &lt; k)
    ...]]></description><category></category></item><item><title><![CDATA[剑指offer：两个链表的第一个公共结点]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/96302187</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/96302187</guid><author>pynash123</author><pubDate>Wed, 17 Jul 2019 13:53:01 +0800</pubDate><description><![CDATA[题目:
输入两个链表，找出它们的第一个公共结点。
思路:
1、遍历一个链表并用map保存，然后再遍历另一个查找
2、可以讲两个链表尾部相接，然后判断是否存在环，这个代码就不写了
代码:
/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
c...]]></description><category></category></item><item><title><![CDATA[剑指offer：数组中的逆序对]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/96289323</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/96289323</guid><author>pynash123</author><pubDate>Wed, 17 Jul 2019 11:41:54 +0800</pubDate><description><![CDATA[剑指offer：
题目:
在数组中的两个数字，如果前面一个数字大于后面的数字，则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
思路:
复用归并排序，在合并排序时稍加修改
代码:
class Solution {
public:
    int InversePairs(vector&lt;int...]]></description><category></category></item><item><title><![CDATA[emplace_back和push_back区别以及移动构造函数]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/96287942</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/96287942</guid><author>pynash123</author><pubDate>Wed, 17 Jul 2019 11:28:42 +0800</pubDate><description><![CDATA[先说结论：
结论 ：
1、emplace_back以参数列表的形式传入时，不论是否有移动构造函数，都是原地构造，只会调用一次构造函数
2、emplace_back以左值对象的形式传入时，不论是否有移动构造函数，都是调用一次拷贝构造函数
3、emplace_back以右值对象（例如move（左值对象），或者就是右值）的形式传入时
a、有移动构造函数，调用一次移动构造
b、没有移动构造函数，调用拷贝构...]]></description><category></category></item><item><title><![CDATA[剑指offer：合并两个排序的链表]]></title><link>https://blog.youkuaiyun.com/pynash123/article/details/95975575</link><guid>https://blog.youkuaiyun.com/pynash123/article/details/95975575</guid><author>pynash123</author><pubDate>Mon, 15 Jul 2019 17:31:11 +0800</pubDate><description><![CDATA[题目:
输入两个单调递增的链表，输出两个链表合成后的链表，当然我们需要合成后的链表满足单调不减规则。
代码:
class Solution {
public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        if (NULL == pHead1)
		{
			return pHead2;
		}
		if...]]></description><category></category></item></channel></rss>