IV雜記


答案也是借鑒大神的!只是拿來(lái)和大家分享!??! (從-1開(kāi)始算起)

 i       0    1    2    3    4    5   6   7    8   9   10  11 

 s     a    b    a    b    a    a   a   b    a    b   a    a   

next[i] -1 0 0 1 2 3 1 1 2 3 4 5

先計(jì)算前綴next[i]的值: (字符串匹配是 從頭開(kāi)始的 和 從尾開(kāi)始的字符串進(jìn)行匹配是否重復(fù) )

next[i]的值主要是看s[i]之前的字符串中重復(fù)的子串長(zhǎng)度。next[0] = -1,定值。

next[1]是看s[1]之前的字符串“a”中重復(fù)的子串長(zhǎng)度為0,故next[1] = 0。

next[2]是看s[2]之前的字符串“ab”中重復(fù)的子串長(zhǎng)度為0,故next[2] = 0。

next[3]是看s[3]之前的字符串"aba"中重復(fù)的子串長(zhǎng)度,s[0]與s[2]重復(fù),長(zhǎng)度為1,故next[3] = 1。

next[4]是看s[4]之前的字符串"abab"中重復(fù)的子串長(zhǎng)度,s[01]與s[23]重復(fù),長(zhǎng)度為2,故next[4] = 2。

next[5]是看s[5]之前的字符串"ababa"中重復(fù)的子串長(zhǎng)度,s[012]與s[234]重復(fù),長(zhǎng)度為3,故next[5] = 3。

next[6]是看s[6]之前的字符串"ababaa"中重復(fù)的子串長(zhǎng)度,s[0]與s[5]重復(fù)(因?yàn)槎嗔艘粋€(gè)a,無(wú)法找到長(zhǎng)度為3的重復(fù)字符串,這只能是s[0]和s[5]重復(fù)),長(zhǎng)度為1,故next[6] = 1。

同樣的,求next[7]和next[8]、next[9]、 next[10]、 next[11] 分別為1和2、3、4、5。


next數(shù)組下標(biāo)從1開(kāi)始計(jì)算

next[1] 肯定是 0

next[2] 肯定是 1

next[n] 的情況,將前面n-1個(gè)字符,計(jì)算從首尾開(kāi)始組成最大的相同子串的長(zhǎng)度,如果找到,那么next值是該長(zhǎng)度加1,否則next值是1。

舉例

next[6]的計(jì)算,字符串第六位是 a ,( ababa a ababaa)

將前面的5個(gè)字符,從頭尾開(kāi)始取4個(gè)組成子串比較,如果不相等,則從首尾取3個(gè)字符組成子串繼續(xù)比較,并以此類(lèi)推, 如果一直比較到最后一個(gè)字符都不相等,那么該next值為1。

4個(gè)字符的情況:abab : baba

3個(gè)字符的情況:aba : aba 此時(shí)相等,那么next[6] = 3+1 = 4


public void add(int a) { int b = a; } 這個(gè)可以看作是值傳遞,a是基本數(shù)據(jù)類(lèi)型,他把他的值傳給了b public void add(Object obj) { Object objTest = obj; } 這個(gè)可以看作是址傳遞,obj是引用數(shù)據(jù)類(lèi)型,是把他棧中指向堆中的對(duì)象的地址值賦值給了objTest. 這時(shí)候就同時(shí)有兩個(gè)引用指向了堆中的某個(gè)Object對(duì)象 其實(shí)這樣看來(lái),java應(yīng)該只有值傳遞的。如果是基本數(shù)據(jù)類(lèi)型,傳遞的就是實(shí)際的值. 如果是引用數(shù)據(jù)類(lèi)型,傳遞的就是該引用的地址值.


  • 從輸入網(wǎng)址到顯示網(wǎng)頁(yè),過(guò)程 ?

DNS域名解析 –> 發(fā)起TCP的三次握手 –> 建立TCP連接后發(fā)起http請(qǐng)求 –> 服務(wù)器響應(yīng)http請(qǐng)求,瀏覽器得到html代碼 –> 瀏覽器解析html代碼,并請(qǐng)求html代碼中的資源(如JavaScript、css、圖片等) –> 瀏覽器對(duì)頁(yè)面進(jìn)行渲染呈現(xiàn)給用戶(hù)。


TCP的狀態(tài) (SYN, FIN, ACK, PSH, RST, URG) 在TCP層,有個(gè)FLAGS字段,這個(gè)字段有以下幾個(gè)標(biāo)識(shí):SYN, FIN, ACK, PSH, RST, URG. 其中,對(duì)于我們?nèi)粘5姆治鲇杏玫木褪乔懊娴奈鍌€(gè)字段。 它們的含義是: SYN表示建立連接, FIN表示關(guān)閉連接, ACK表示響應(yīng), PSH表示有 DATA數(shù)據(jù)傳輸, RST表示連接重置。 其中,ACK是可能與SYN,F(xiàn)IN等同時(shí)使用的,比如SYN和ACK可能同時(shí)為1,它表示的就是建立連接之后的響應(yīng), 如果只是單個(gè)的一個(gè)SYN,它表示的只是建立連接。 TCP的幾次握手就是通過(guò)這樣的ACK表現(xiàn)出來(lái)的。 但SYN與FIN是不會(huì)同時(shí)為1的,因?yàn)榍罢弑硎镜氖墙⑦B接,而后者表示的是斷開(kāi)連接。 RST一般是在FIN之后才會(huì)出現(xiàn)為1的情況,表示的是連接重置。 一般地,當(dāng)出現(xiàn)FIN包或RST包時(shí),我們便認(rèn)為客戶(hù)端與服務(wù)器端斷開(kāi)了連接;而當(dāng)出現(xiàn)SYN和SYN+ACK包時(shí),我們認(rèn)為客戶(hù)端與服務(wù)器建立了一個(gè)連接。 PSH為1的情況,一般只出現(xiàn)在 DATA內(nèi)容不為0的包中,也就是說(shuō)PSH為1表示的是有真正的TCP數(shù)據(jù)包內(nèi)容被傳遞。 TCP的連接建立和連接關(guān)閉,都是通過(guò)請(qǐng)求-響應(yīng)的模式完成的。 概念補(bǔ)充-TCP三次握手: TCP(Transmission Control Protocol)傳輸控制協(xié)議 TCP是主機(jī)對(duì)主機(jī)層的傳輸控制協(xié)議,提供可靠的連接服務(wù),采用三次握手確認(rèn)建立一個(gè)連接: 位碼即tcp標(biāo)志位,有6種標(biāo)示:SYN(synchronous建立聯(lián)機(jī)) ACK(acknowledgement 確認(rèn)) PSH(push傳送) FIN(finish結(jié)束) RST(reset重置) URG(urgent緊急)Sequence number(順序號(hào)碼) Acknowledge number(確認(rèn)號(hào)碼) 第一次握手:主機(jī)A發(fā)送位碼為syn=1,隨機(jī)產(chǎn)生seq number=1234567的數(shù)據(jù)包到服務(wù)器,主機(jī)B由SYN=1知道,A要求建立聯(lián)機(jī); 第二次握手:主機(jī)B收到請(qǐng)求后要確認(rèn)聯(lián)機(jī)信息,向A發(fā)送ack number=(主機(jī)A的seq+1),syn=1,ack=1,隨機(jī)產(chǎn)生seq=7654321的包; 第三次握手:主機(jī)A收到后檢查ack number是否正確,即第一次發(fā)送的seq number+1,以及位碼ack是否為1,若正確,主機(jī)A會(huì)再發(fā)送ack number=(主機(jī)B的seq+1),ack=1,主機(jī)B收到后確認(rèn)seq值與ack=1則連接建立成功。 完成三次握手,主機(jī)A與主機(jī)B開(kāi)始傳送數(shù)據(jù)。 在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接。 第一次握手:建立連接時(shí),客戶(hù)端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn); 第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶(hù)的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài); 第三次握手:客戶(hù)端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶(hù)端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。完成三次握手,客戶(hù)端與服務(wù)器開(kāi)始傳送數(shù)據(jù). 摘自中國(guó)云安網(wǎng)(www.yunsec.net) 原文:http://www.yunsec.net/a/school/wlcs/agreement/2012/0317/10262.html


一個(gè)HTTP請(qǐng)求報(bào)文由請(qǐng)求行(request line)、請(qǐng)求頭部(header)、空行和請(qǐng)求數(shù)據(jù)4個(gè)部分組成

1.請(qǐng)求行由請(qǐng)求方法字段、URL字段和HTTP協(xié)議版本字段3個(gè)字段組成,它們用空格分隔。
2.請(qǐng)求頭部由關(guān)鍵字/值對(duì)組成,每行一對(duì),關(guān)鍵字和值用英文冒號(hào)“:”分隔。請(qǐng)求頭部通知服務(wù)器有關(guān)于客戶(hù)端請(qǐng)求的信息。
3.最后一個(gè)請(qǐng)求頭之后是一個(gè)空行,發(fā)送回車(chē)符和換行符,通知服務(wù)器以下不再有請(qǐng)求頭。
4.請(qǐng)求數(shù)據(jù)不在GET方法中使用,而是在POST方法中使用。

HTTP響應(yīng)也由三個(gè)部分組成,分別是:狀態(tài)行、消息報(bào)頭、響應(yīng)正文。


  • redis安裝和使用
    下載地址官網(wǎng) https://redis.io/download
    安裝準(zhǔn)備:(1)VMware Workation虛擬機(jī)(2)Linux(CentOS)系統(tǒng)(3)SecureCRT(Xshell也行)
    安裝過(guò)程:
    (1)安裝編譯器:yum install gcc-c++(需要先安裝C++編譯器,redis 使用c++寫(xiě)的)
    (2)下載Redis源碼并上傳到服務(wù)器
    (3)解壓Redis壓縮包:tar -zxvf redis
    (4)進(jìn)入Redis目錄進(jìn)行編譯:make
    (2/3/4步)或者直接在Linux上($符不用輸入)
    $ wget http://download.redis.io/releases/redis-3.2.9.tar.gz(下載)
    $ tar xzf redis-3.2.9.tar.gz(解壓)
    $ cd redis-3.2.9
    $ make(編譯)
    編譯后是二進(jìn)制文件僅在目錄中 src 可用。運(yùn)行Redis:
    要想更好的使用還需
    (5)安裝Redis:make PREFIX=/user/local/redis install
    (6)將redis.conf拷貝到Redis安裝目錄:cp redis.conf /user/local/redis
    (7)進(jìn)入安裝目錄,更改redis.conf文件:vim redis.conf --> daemonize no 改為 yes(之后可以后臺(tái)模式運(yùn)行)(vi 下按i 進(jìn)行編輯 按esc后shift+zz(或者直接l倆大寫(xiě)Z),或者:wq 保存并退出)
    (8)啟動(dòng)redis后端模式:./bin/redis-server ./redis.conf
    (9)終止redis的操作 : ./bin/redis-cli shutdown

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容