青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

從頭再來

#

QuickSort

復(fù)習(xí) 快排



    int buf[1024] = {0};

    int partition(int first, int last)
    {
        int stand = buf[last];
        int i =0, j=0;
        //int e = last -1;
        for (;j <  last  ; j++ )
        {
            if (buf[j] <= stand )
            {
                int temp = buf[j];
                buf[j] = buf[i];
                buf[i] = temp;
                i++;
            }
        }
        int temp = buf[last];
        buf[last] = buf[i];
        buf[i] = temp;
        return i;
    }


    void myQuickSort(int begin, int end)
    {
        if (begin < end)
        {
            int pivot ;
            pivot = partition(begin, end);
            myQuickSort(begin, pivot -1 );
            myQuickSort(pivot+1, end);
        }
    }

int main()
{
    srand(time(0));
    for (int i = 0; i < 1000; i++)
    {
        buf[i] = rand()  * 2342111134 % 6589453 ;
    }
    myQuickSort(0,1023);
    return 0;
}


在本實(shí)現(xiàn) 里面, 直接使用了最后一個(gè)元素作為基準(zhǔn)。

在選擇基準(zhǔn)時(shí)其實(shí)是有多種方式的。1)選第一個(gè),不推薦。2)算最后一個(gè),不推薦。3)選首、尾、中的中間值。4)隨機(jī)選擇。

選擇后將跑一趟比較,結(jié)果是左側(cè)為小的數(shù),右側(cè)為大的數(shù),原理是i,j   當(dāng)數(shù)小于基準(zhǔn)是則與左右的i 對(duì)換,這樣保證了i左側(cè)小于p   i 到j(luò) 之間是大小p 的。

對(duì)于p 無需再排了。




需要特別注意的是partition 里面的元素位置與quicksort 分段是有關(guān)系的。 如果在partition 里面處理了last 那么 在分段時(shí)其實(shí)last 就不用了。 

posted @ 2015-05-30 23:22 易寶@byhh 閱讀(186) | 評(píng)論 (0)編輯 收藏

重學(xué)TCP協(xié)議(一)

目的:重新梳理TCP,全局理解協(xié)議中的細(xì)節(jié),知道是怎樣實(shí)現(xiàn)的,理解為什么要這樣做,了解可能會(huì)帶來什么問題。

PS:圖片有空了慢慢貼。

 

 

 

簡(jiǎn)要介紹:

TCP協(xié)議是基于網(wǎng)絡(luò)層IP協(xié)議的傳輸層協(xié)議,提供一種面向連接的,可靠的字節(jié)流服務(wù)(byte stream service )。在TCP連接中, 僅支持兩方進(jìn)行彼此通信。

TCP的可靠性由以下方式 來提供:

1) 恰當(dāng)?shù)臄?shù)據(jù)分段。即將字節(jié)流根據(jù)MSS來封包發(fā)送。

2) 確認(rèn)機(jī)制、重傳機(jī)制。

3) 首部的檢驗(yàn)和。

4) 網(wǎng)絡(luò)層的IP數(shù)據(jù)報(bào)可能會(huì)失序,因此TCP需要將數(shù)據(jù)進(jìn)行重新排序。

5) 數(shù)據(jù)報(bào)可能會(huì)重復(fù),必須恰當(dāng)?shù)膩G棄重復(fù)的數(shù)據(jù)報(bào)。

6) TCP提供流量控制,可根據(jù)另一端的緩沖區(qū)情況發(fā)送恰當(dāng)?shù)臄?shù)據(jù)(滑動(dòng)窗口協(xié)議)。

7) TCP協(xié)議對(duì)字節(jié)流不作解釋。由應(yīng)用層對(duì)數(shù)據(jù)進(jìn)行語義上的解釋。

 

隨便抓個(gè)包:

 

IP數(shù)據(jù)頭

 

TCP數(shù)據(jù)頭

 

頭部中比較重要的數(shù)據(jù)結(jié)構(gòu)

源端口,目的端口,序號(hào),確認(rèn)序號(hào)。 標(biāo)志位,窗口大小。

URG:緊急指針,一般用不上,忽略。

ACK:經(jīng)常用,接收端發(fā)給源端,確認(rèn)前一個(gè)包已收到。

PSH:個(gè)人沒怎么碰到過。

RST:可以理解為重置連接,普通情況下當(dāng)目標(biāo)端口未開放會(huì)發(fā)送此RST回來,此外,連接中間的防火墻等網(wǎng)絡(luò)設(shè)備也會(huì)發(fā)。

 

SYN:發(fā)起連接的標(biāo)志,SYN Flood是基于的一種DOS攻擊手法。

FINshutdown 時(shí)發(fā)送,告訴對(duì)方,我這邊完成了,要送掉連接了。

 

 

 

1、 TCP連接的建議,三步握手。

1) 源端發(fā)送SYN到服務(wù)器,表示喜娃懷與服務(wù)器的某個(gè)端口建立TCP連接,在TCP首部帶上初始的序號(hào)(client ISN)。此報(bào)文中設(shè)置SYN=1

2) 服務(wù)器返回SYN包,帶上服務(wù)器的初始序號(hào)(server ISN),并且ACK=client ISN+1設(shè)置SYN=1,ACK=1

3) 源端返回服務(wù)器ACK包,  ack = server ISN+1;

 

PS:這邊的Seq居然從0開始,之前都沒注意過~~

 

關(guān)于ISN的選擇,根據(jù)文獻(xiàn)內(nèi)容,應(yīng)當(dāng)隨時(shí)間變化,避免網(wǎng)絡(luò)中被延遲的分組被重新傳遞后導(dǎo)致的錯(cuò)誤解釋。

2、 TCP連接的終止,四步握手。

1) 首先關(guān)閉的一方(A)發(fā)送FIN包。FIN在應(yīng)用層、開發(fā)者面前就是socket.read 將返回EOF

2) 接受端(B)返回FINACK包。

3) B關(guān)閉連接,發(fā)送FIN

4) A發(fā)送ACK

 

關(guān)閉階段存在另外兩衍生的流程。1 23 兩步可以合并, 當(dāng)B端無數(shù)據(jù)發(fā)送時(shí),無需發(fā)放兩個(gè)包,可以在一個(gè)包里面同時(shí)設(shè)置FIN+ACK,也就是上面的截圖。2)當(dāng)僅一端調(diào)用shutdown,另一端還存在數(shù)據(jù)發(fā)送時(shí),存在半關(guān)閉連接的情況。即第2步結(jié)束后,B端繼續(xù)發(fā)送數(shù)據(jù),A端對(duì)這些數(shù)據(jù)仍然發(fā)送ACK,一直到B端發(fā)送FIN

 

以下是一個(gè)簡(jiǎn)單的client + server 測(cè)試代碼,通過簡(jiǎn)單的Sleep可以看出, 當(dāng)收到FIN包時(shí),緩沖區(qū)的數(shù)據(jù)仍然存在,僅在后面多了一個(gè)EOF而已。

 

 1 #!/usr/bin/env python
 2 import socket
 3 import time
 4  
 5 host="192.168.5.106"
 6 port=10000
 7 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 8 s.bind((host,port))
 9 s.listen(5)
10 sock,addr=s.accept()
11 print "got connection form ",sock.getpeername()
12 while 1:
13   data=sock.recv(1)
14   time.sleep(0.1)
15   if not data:
16     print("~~~~~")
17     break
18   else:
19 print data
20  


 

1 #!/usr/bin/env python
2 import socket
3 host="192.168.5.106"
4 port=10000
5 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
6 s.connect((host,port))
7 s.send("hello from client")
8 s.close()

 

 

posted @ 2015-05-16 21:58 易寶@byhh 閱讀(194) | 評(píng)論 (0)編輯 收藏

不忘初心 方得始終

 《 程序員必讀的職業(yè)規(guī)劃書》



最開始好像是在微博上看到pdf版本,挺長(zhǎng)挺有層次的一篇文章。

最近半年也是有點(diǎn)動(dòng)的想法,但其實(shí)在規(guī)劃這件事情上做的不夠, 有個(gè)參考指南可以慢慢對(duì)比一下自身

posted @ 2015-05-05 17:58 易寶@byhh 閱讀(171) | 評(píng)論 (0)編輯 收藏

使用putty配置SSH通道,然后你懂的


因?yàn)槟硍all的原因,大家需要一個(gè)通道。

現(xiàn)在比較好的辦法是使用hk或其他地方的vps ,然后搭個(gè)ssh過去,再使用Sock代理。 

putty 已自帶ssh通道的功能。但其不支持記住密碼。很煩。 

網(wǎng)上傳的很多教程中使用了 myentunnel 。 結(jié)果下載后一下,這逗比工具使用的還是putty,既然如此,何必使用額外的工具。

putty雖然記住密碼不方便,但使用SSH自帶的證書功能,也是可以實(shí)現(xiàn)自動(dòng)登錄的~

1、使用puttygen 生成密鑰對(duì)。 此處的 key passphrase 填寫后,最終的private key 使用需要密碼。。因此可以不填。

2、將public key 放入 /home/user/.ssh/authorized_keys中。此處需確保 .ssh authorized_keys 對(duì)其他用戶僅可讀。 如755,否則無法使用。

3、在putty的Connection -> ssh -> auth 處可以選擇private key . 

4、在Connection -> Data 處可選填auto-login username。

5、為確保不會(huì)自動(dòng)掉線,Connection keepalive 填上非0。如30

6、再save就行啦。 后面再使用就方便了。



不過此種方法因?yàn)樾枰褂盟借€文件,且對(duì)私鑰文件無passphrase保護(hù),需保證私鑰的安全性,如放在私密的U盤中,僅使用時(shí)插上,離開時(shí)帶走。

posted @ 2015-02-06 15:15 易寶@byhh 閱讀(492) | 評(píng)論 (0)編輯 收藏

為線程命名

為L(zhǎng)inux下線程加個(gè)名字。同樣的Windows 也可以干。 chrome 的源碼中有使用到這個(gè)trick,raise 一個(gè)Exception.  
1 #include <sys/prctl.h>
2 void set_thread_name(const char *prefix)
3 {
4     static int index = 0;
5     char thname[16];
6     snprintf(thname, sizeof(thname), "%s%d", prefix, __sync_fetch_and_add(&index, 1));
7     prctl(PR_SET_NAME, (usigned long)thname, 0, 0, 0); //~ refer to `man prctl`
8 }
9 


windows 版本 原文見:http://msdn.microsoft.com/en-us/library/xcb2z8hs(VS.90).aspx

//
// Usage: SetThreadName (-1, "MainThread");
//
#include <windows.h>
const DWORD MS_VC_EXCEPTION=0x406D1388;

#pragma pack(push,8)
typedef struct tagTHREADNAME_INFO
{
   DWORD dwType; // Must be 0x1000.
   LPCSTR szName; // Pointer to name (in user addr space).
   DWORD dwThreadID; // Thread ID (-1=caller thread).
   DWORD dwFlags; // Reserved for future use, must be zero.
} THREADNAME_INFO;
#pragma pack(pop)

void SetThreadName( DWORD dwThreadID, char* threadName)
{
   THREADNAME_INFO info;
   info.dwType = 0x1000;
   info.szName = threadName;
   info.dwThreadID = dwThreadID;
   info.dwFlags = 0;

   __try
   {
      RaiseException( MS_VC_EXCEPTION, 0, sizeof(info)/sizeof(ULONG_PTR), (ULONG_PTR*)&info );
   }
   __except(EXCEPTION_EXECUTE_HANDLER)
   {
   }
}

posted @ 2015-01-30 13:53 易寶@byhh 閱讀(496) | 評(píng)論 (0)編輯 收藏

Linux高性能服務(wù)器編程閱讀隨筆(一)





Page 76 . 5.4 監(jiān)聽socket 




此處作者說法不完整。  


通過Google "man listen "  http://linux.die.net/man/2/listen


listen() marks the socket referred to by sockfd as a passive socket, that is, as a socket that will be used to accept incoming connection requests using accept(2).

The sockfd argument is a file descriptor that refers to a socket of type SOCK_STREAM or SOCK_SEQPACKET.

The backlog argument defines the maximum length to which the queue of pending connections for sockfd may grow. If a connection request arrives when the queue is full, the client may receive an error with an indication of ECONNREFUSED or, if the underlying protocol supports retransmission, the request may be ignored so that a later reattempt at connection succeeds.





可見與實(shí)現(xiàn)有關(guān)。


書的內(nèi)容還是很全的,但作者的觀點(diǎn)略感覺不對(duì)。  服務(wù)器中用信號(hào)來通知的,或者說來做異步的,就我了解是幾乎沒有。  作者去花了很多篇幅去介紹。

讓人感覺完全是為了湊字?jǐn)?shù)啊。  書名里面的“高性能”要打個(gè)折扣了

posted @ 2014-10-21 19:14 易寶@byhh 閱讀(392) | 評(píng)論 (0)編輯 收藏

reservoir sampling


今天和某同學(xué)聊到面試題,他提到被某投行打擊很深的一個(gè)reservoir sampling問題。 

于是我翻了翻。 大致意思在網(wǎng)上很容易找到。 

難是難理解其中的思維點(diǎn): 怎么發(fā)現(xiàn)的這個(gè)解法。

也就是如何詮釋你的歸納法的出發(fā)點(diǎn)。

目前我的總結(jié)是,對(duì)于這種無限問題,先設(shè)定一個(gè)基礎(chǔ)的通解。 即在n的時(shí)候成立,再想辦法證明當(dāng)n = n+1的時(shí)候,結(jié)論也成立,或與原結(jié)論存在一定的對(duì)應(yīng)關(guān)系 。 

這樣就可以推導(dǎo)出來了。

posted @ 2014-10-21 13:09 易寶@byhh 閱讀(247) | 評(píng)論 (0)編輯 收藏

個(gè)人梳理


干活四年, 有近兩年在打醬油。 昨天與某前輩聊了聊,也發(fā)現(xiàn)確實(shí)荒廢太多。

近期
1、重點(diǎn)把書完整的看一看。 

2、把現(xiàn)有知識(shí)梳理一下,知道的與了解的都列一列。

3、有代碼相關(guān)的多寫一寫,加強(qiáng)一下。

4、有設(shè)計(jì)相關(guān)的多想一想,不要“原來如此”,而要多“為什么不這樣”。


posted @ 2014-10-19 21:06 易寶@byhh 閱讀(262) | 評(píng)論 (0)編輯 收藏

手上的書籍

一、數(shù)據(jù)結(jié)構(gòu)與算法分析
二、算法導(dǎo)論
三、unix環(huán)境高級(jí)編程
四、設(shè)計(jì)模式
五、linux 設(shè)備驅(qū)動(dòng)程序
六、數(shù)學(xué)之美
七、c和指針 
八、boost程序庫完全開發(fā)指南
九、c++反匯編與逆向分析
十、python基礎(chǔ)教程
十一、編程珠璣
十二、程序員自我修養(yǎng)
十三、Linux 多線程服務(wù)端編程
十四、大規(guī)模分布式存儲(chǔ)系統(tǒng)(公司的)
十五、深入理解Linux內(nèi)核
十六、格蠹匯編
十七、深入Linux內(nèi)核架構(gòu)
十八、TCP/IP詳解
十九、UNIX網(wǎng)絡(luò)編程 套接字
二十、UNIX網(wǎng)絡(luò)編程 進(jìn)程間通信 (這兩本速度的看完扔了)
二十一、ddos攻擊與防范深度剖析
二十二、深入C++對(duì)象模型
二十三、Web前端黑客技術(shù)揭秘

posted @ 2014-09-22 20:34 易寶@byhh 閱讀(173) | 評(píng)論 (0)編輯 收藏

syslog reload failed service syslog dead



今天碰到syslog 服務(wù) 過陣子就會(huì)dead的情況。 經(jīng)多次確認(rèn),是打包的時(shí)候,腳本里面會(huì)執(zhí)行syslog reload 導(dǎo)致 。 

而相同的配置文件restart 是OK的。  

回來重新測(cè)試后,發(fā)現(xiàn)有個(gè)文件是不能讀取的。也就是 appArmor 的權(quán)限沒有配置。 

經(jīng)再次回憶,是當(dāng)天晚上上線,本來應(yīng)該將snmp 的目錄  /var/log/* r , 寫到配置文件中,但由于認(rèn)為messages 同樣在這個(gè)目錄下,已經(jīng)可讀,就沒有配置。

最后導(dǎo)致syslog reload 就失敗。

posted @ 2014-07-04 16:36 易寶@byhh 閱讀(392) | 評(píng)論 (0)編輯 收藏

僅列出標(biāo)題
共3頁: 1 2 3 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国产99| 欧美精品在线一区| 国产午夜精品理论片a级探花| 午夜激情亚洲| 亚洲综合第一| 好吊色欧美一区二区三区四区| 久久疯狂做爰流白浆xx| 久久不射2019中文字幕| 亚洲福利av| 日韩一级黄色av| 国产女人18毛片水18精品| 久久精品国产清高在天天线| 久久精品国产91精品亚洲| 亚洲欧洲在线视频| 99re热精品| 国产噜噜噜噜噜久久久久久久久| 久久久久欧美精品| 老鸭窝亚洲一区二区三区| 宅男在线国产精品| 欧美一区二区播放| 亚洲黄色视屏| 亚洲午夜视频在线观看| 国产日韩欧美精品在线| 欧美a级在线| 欧美午夜电影一区| 裸体丰满少妇做受久久99精品| 欧美极品aⅴ影院| 欧美影院成年免费版| 欧美福利视频在线| 久久福利精品| 欧美色欧美亚洲另类二区| 狼狼综合久久久久综合网| 欧美日韩一区二区视频在线 | 亚洲啪啪91| 亚洲伊人伊色伊影伊综合网| 欧美国产欧美综合| 欧美日韩一区高清| 久久综合中文色婷婷| 欧美特黄视频| 亚洲激情网站免费观看| 国产欧美亚洲精品| 亚洲片在线资源| 亚洲第一视频网站| 亚洲欧美精品伊人久久| 这里只有精品视频在线| 美国十次了思思久久精品导航| 欧美一区二区三区成人| 欧美日韩视频在线一区二区观看视频| 久久精品国产久精国产一老狼| 欧美日本久久| 亚洲福利视频专区| 在线观看欧美一区| 午夜伦理片一区| 亚洲无吗在线| 欧美日韩黄色大片| 亚洲激情在线观看视频免费| 在线观看欧美亚洲| 欧美在线短视频| 久久久久国产一区二区| 国产精品中文在线| 亚洲一区二区视频在线| 亚洲综合色在线| 欧美调教vk| 在线视频精品一区| 亚洲欧美日韩在线一区| 国产精品成人免费视频| 99国产精品久久久久久久久久 | 一区二区三区亚洲| 久久精品一区二区| 玖玖精品视频| 亚洲电影免费在线观看| 久久伊人一区二区| 欧美激情一区二区三区全黄| 亚洲欧洲日本mm| 欧美极品在线观看| 一本色道久久88精品综合| 亚洲欧美成人网| 国产毛片一区| 久久久精品网| 91久久国产精品91久久性色| 亚洲免费观看高清完整版在线观看| 欧美精品一区二区三区蜜臀| 99精品免费视频| 欧美在线影院| 尤物精品在线| 欧美日本免费| 欧美一级夜夜爽| 欧美激情女人20p| 亚洲午夜免费福利视频| 国产日韩成人精品| 蜜臀av在线播放一区二区三区| 亚洲日本中文| 久久超碰97人人做人人爱| 伊人久久男人天堂| 欧美理论在线| 欧美在线视频一区二区三区| 欧美大片在线观看| 欧美午夜不卡在线观看免费| 亚洲欧美国产制服动漫| 免费中文日韩| 亚洲一区欧美| 在线成人性视频| 欧美亚州韩日在线看免费版国语版| 亚洲欧美日韩精品久久亚洲区| 老司机午夜精品| 亚洲一区在线直播| 在线免费观看日本欧美| 国产精品大片wwwwww| 久久婷婷综合激情| 亚洲一区二区黄| 亚洲国产日韩欧美| 久久久久久久一区| 亚洲无限av看| 亚洲国产精品成人久久综合一区| 国产精品jizz在线观看美国 | 亚洲国产精品第一区二区三区| 亚洲一区在线观看免费观看电影高清| 韩国一区二区三区美女美女秀| 欧美日韩免费一区二区三区| 久久久五月婷婷| 午夜精品国产精品大乳美女| 日韩午夜在线电影| 欧美大秀在线观看| 久久久国产精品亚洲一区| 亚洲私人影院在线观看| 亚洲欧洲日本国产| 亚洲福利视频二区| 国产一区二区中文字幕免费看| 国产精品成人观看视频免费 | 亚洲伊人观看| av不卡在线| 亚洲欧洲日本一区二区三区| 欧美~级网站不卡| 久久影院午夜片一区| 久久精品国产免费看久久精品| 亚洲在线一区二区三区| 中文一区二区| av72成人在线| 99re热精品| 在线一区二区视频| 9人人澡人人爽人人精品| 亚洲卡通欧美制服中文| 亚洲精选中文字幕| 99re视频这里只有精品| 日韩写真视频在线观看| 99热在线精品观看| 中文av字幕一区| 亚洲一区二区三区成人在线视频精品| 一区二区日韩免费看| 亚洲私人黄色宅男| 亚洲午夜高清视频| 午夜精品国产更新| 久久福利毛片| 蜜桃av一区二区| 亚洲国产高清aⅴ视频| 亚洲黄色一区二区三区| 999亚洲国产精| 亚洲欧美国产日韩天堂区| 欧美中在线观看| 毛片av中文字幕一区二区| 久久久免费av| 欧美精品日韩| 国产精品久久久久av| 国产一区二区精品久久91| 影音先锋久久久| 一区二区欧美日韩| 欧美一区免费视频| 久久综合激情| 亚洲乱码国产乱码精品精天堂| 在线视频免费在线观看一区二区| 欧美一级日韩一级| 美脚丝袜一区二区三区在线观看| 欧美日韩高清在线播放| 国产热re99久久6国产精品| 亚洲第一页在线| 亚洲一区二三| 欧美jizzhd精品欧美巨大免费| 99国产欧美久久久精品| 欧美在线视频导航| 欧美日韩免费观看一区=区三区| 国产久一道中文一区| 亚洲人体偷拍| 久久国产欧美日韩精品| 亚洲人成欧美中文字幕| 欧美一区二区女人| 欧美日韩亚洲一区二区三区在线| 国产视频亚洲| 在线午夜精品自拍| 欧美电影免费| 午夜国产精品视频| 欧美日韩精品一区二区三区| 国产一区二区三区四区五区美女 | 国产精品理论片| 亚洲福利在线看| 久久精品视频免费| 夜久久久久久| 欧美成人免费一级人片100| 国产日韩欧美在线观看| 一区二区三区日韩| 亚洲大片精品永久免费|