那么溫暖http合約,入門。

簡介

HTTP是一個屬于應用層的面向對象的協議,因為其簡捷、高速的方式。適用于分布式超媒體信息系統。它于1990年提出。經過幾年的使用與發展,得到不斷地完好和擴展。眼下在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規范化工作正在進行之中,并且HTTP-NG(Next Generation of HTTP)的建議已經提出。
HTTP
協議的主要特點可概括例如以下:
1.
支持客戶/server模式。


2.
簡單高速:客戶向server請求服務時,僅僅需傳送請求方法和路徑。請求方法經常使用的有GETHEADPOST。每種方法規定了客戶與server聯系的類型不同。

因為HTTP協議簡單,使得HTTPserver的程序規模小,因而通信速度非常快。
3.
靈活:HTTP同意傳輸隨意類型的數據對象。正在傳輸的類型由Content-Type加以標記。


4.
無連接:無連接的含義是限制每次連接僅僅處理一個請求。

server處理完客戶的請求,并收到客戶的應答后。即斷開連接。

採用這樣的方式能夠節省傳輸時間。
5.
無狀態:HTTP協議是無狀態協議。無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著假設興許處理須要前面的信息。則它必須重傳,這樣可能導致每次連接傳送的數據量增大。

還有一方面。在server不須要先前信息時它的應答就較快。

一、HTTP協議具體解釋之URL

http(超文本傳輸協議)是一個基于請求與響應模式的、無狀態的、應用層的協議。常基于TCP的連接方式,HTTP1.1版本號中給出一種持續連接的機制。絕大多數的Web開發。都是構建在HTTP協議之上的Web應用。

HTTP URL (URL是一種特殊類型的URI,包括了用于查找某個資源的足夠的信息)的格式例如以下:
http://host[":"port][abs_path]
http
表示要通過HTTP協議來定位網絡資源;host表示合法的Internet主機域名或者IP地址;port指定一個port號。為空則使用缺省port80abs_path指定請求資源的URI;假設URL中沒有給出abs_path,那么當它作為請求URI時,必須以“/”的形式給出。通常這個工作瀏覽器自己主動幫我們完畢。


eg:
1
、輸入:www.guet.edu.cn
瀏覽器自己主動轉換成:http://www.guet.edu.cn/
2http:192.168.0.116:8080/index.jsp

二、HTTP協議具體解釋之請求篇

http請求由三部分組成,各自是:請求行、消息報頭、請求正文

1、請求行以一個方法符號開頭,以空格分開,后面跟著請求的URI和協議的版本號,格式例如以下:Method Request-URI HTTP-Version CRLF
當中 Method表示請求方法;Request-URI是一個統一資源標識符;HTTP-Version表示請求的HTTP協議版本號。CRLF表示回車和換行(除了作為結尾的CRLF外。不同意出現單獨的CRLF字符)。

請求方法(全部方法全為大寫)有多種,各個方法的解釋例如以下:
GET
請求獲取Request-URI所標識的資源
POST
Request-URI所標識的資源后附加新的數據
HEAD
請求獲取由Request-URI所標識的資源的響應消息報頭
PUT
請求server存儲一個資源,并用Request-URI作為其標識
DELETE
請求server刪除Request-URI所標識的資源
TRACE
請求server回送收到的請求信息。主要用于測試或診斷
CONNECT
保留將來使用
OPTIONS
請求查詢server的性能。或者查詢與資源相關的選項和需求
應用舉例:
GET
方法:在瀏覽器的地址欄中輸入網址的方式訪問網頁時。瀏覽器採用GET方法向server獲取資源,eg:GET /form.html HTTP/1.1 (CRLF)

POST方法要求被請求server接受附在請求后面的數據,經常使用于提交表單。
eg
POST /reg.jsp HTTP/ (CRLF)
Accept:image/gif,image/x-xbit,... (CRLF)
...
HOST:www.guet.edu.cn (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF) //
CRLF表示消息報頭已經結束。在此之前為消息報頭

user=jeffrey&pwd=1234 //
此行下面為提交的數據

HEAD方法與GET方法差點兒是一樣的,對于HEAD請求的回應部分來說。它的HTTP頭部中包括的信息與通過GET請求所得到的信息是同樣的。利用這種方法。不必傳輸整個資源內容,就能夠得到Request-URI所標識的資源的信息。該方法經常使用于測試超鏈接的有效性。能否夠訪問,以及近期是否更新。
2
、請求報頭后述
3
、請求正文()

三、HTTP協議具體解釋之響應篇

在接收和解釋請求消息后,server返回一個HTTP響應消息。

HTTP響應也是由三個部分組成,各自是:狀態行、消息報頭、響應正文
1
、狀態行格式例如以下:
HTTP-Version Status-Code Reason-Phrase CRLF
當中,HTTP-Version表示serverHTTP協議的版本號;Status-Code表示server發回的響應狀態代碼。Reason-Phrase表示狀態代碼的文本描寫敘述。
狀態代碼有三位數字組成。第一個數字定義了響應的類別,且有五種可能取值:
1xx
:指示信息--表示請求已接收,繼續處理
2xx
:成功--表示請求已被成功接收、理解、接受
3xx
:重定向--要完畢請求必須進行更進一步的操作
4xx
:client錯誤--請求有語法錯誤或請求無法實現
5xx
:server端錯誤--server未能實現合法的請求
常見狀態代碼、狀態描寫敘述、說明:
200 OK //
client請求成功
400 Bad Request //
client請求有語法錯誤。不能被server所理解
401 Unauthorized //
請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden //
server收到請求,可是拒絕提供服務

404 Not Found //
請求資源不存在。eg:輸入了錯誤的URL
500 Internal Server Error //
server發生不可預期的錯誤

503 Server Unavailable //
server當前不能處理client的請求。一段時間后可能恢復正常
eg
HTTP/1.1 200 OKCRLF

2、響應報頭后述

3、響應正文就是server返回的資源的內容

四、HTTP協議具體解釋之消息報頭篇

HTTP消息由client到server的請求和server到client的響應組成。請求消息和響應消息都是由開始行(對于請求消息,開始行就是請求行,對于響應消息,開始行就是狀態行),消息報頭(可選),空行(僅僅有CRLF的行),消息正文(可選)組成。

HTTP消息報頭包含普通報頭、請求報頭、響應報頭、實體報頭。
每個報頭域都是由名字+“”+空格+組成。消息報頭域的名字是大寫和小寫無關的。

1、普通報頭
在普通報頭中。有少數報頭域用于全部的請求和響應消息,但并不用于被傳輸的實體,僅僅用于傳輸的消息。


eg

Cache-Control
用于指定緩存指令。緩存指令是單向的(響應中出現的緩存指令在請求中未必會出現),且是獨立的(一個消息的緩存指令不會影響還有一個消息處理的緩存機制),HTTP1.0使用的類似的報頭域為Pragma
請求時的緩存指令包含:no-cache(用于指示請求或響應消息不能緩存)、no-storemax-agemax-stalemin-freshonly-if-cached;
響應時的緩存指令包含:publicprivateno-cacheno-storeno-transformmust-revalidateproxy-revalidatemax-age
s-maxage.
eg
:為了指示IE瀏覽器(client)不要緩存頁面,server端的JSP程序能夠編寫例如以下:
response.sehHeader("Cache-Control","no-cache");
//response.setHeader("Pragma","no-cache");
作用相當于上述代碼,通常兩者//合用

這句代碼將在發送的響應消息中設置普通報頭域:Cache-Control:no-cache


Date普通報頭域表示消息產生的日期和時間

Connection普通報頭域同意發送指定連接的選項。比如指定連接是連續,或者指定“close”選項,通知server,在響應完畢后,關閉連接

2、請求報頭
請求報頭同意client向server端傳遞請求的附加信息以及client自身的信息。


經常使用的請求報頭
Accept
Accept
請求報頭域用于指定client接受哪些類型的信息。egAcceptimage/gif,表明client希望接受GIF圖象格式的資源。Accepttext/html。表明client希望接受html文本。
Accept-Charset
Accept-Charset
請求報頭域用于指定client接受的字符集。egAccept-Charset:iso-8859-1,gb2312.假設在請求消息中沒有設置這個域,缺省是不論什么字符集都能夠接受。


Accept-Encoding
Accept-Encoding
請求報頭域類似于Accept,可是它是用于指定可接受的內容編碼。egAccept-Encoding:gzip.deflate.假設請求消息中沒有設置這個域server假定client對各種內容編碼都能夠接受。
Accept-Language
Accept-Language
請求報頭域類似于Accept,可是它是用于指定一種自然語言。egAccept-Language:zh-cn.假設請求消息中沒有設置這個報頭域。server假定client對各種語言都能夠接受。
Authorization
Authorization
請求報頭域主要用于證明client有權查看某個資源。當瀏覽器訪問一個頁面時,假設收到server的響應代碼為401(未授權),能夠發送一個包括Authorization請求報頭域的請求。要求server對其進行驗證。


Host
(發送請求時,該報頭域是必需的)
Host
請求報頭域主要用于指定被請求資源的Internet主機和port號,它通常從HTTP URL中提取出來的,eg
我們在瀏覽器中輸入:http://www.guet.edu.cn/index.html
瀏覽器發送的請求消息中。就會包括Host請求報頭域,例如以下:
Host
www.guet.edu.cn
此處使用缺省port號80,若指定了port號,則變成:Hostwww.guet.edu.cn:指定port號
User-Agent
我們上網登陸論壇的時候。往往會看到一些歡迎信息,當中列出了你的操作系統的名稱和版本號,你所使用的瀏覽器的名稱和版本號,這往往讓非常多人感到非常奇妙,實際上。server應用程序就是從User-Agent這個請求報頭域中獲取到這些信息。User-Agent請求報頭域同意client將它的操作系統、瀏覽器和其他屬性告訴server。只是,這個報頭域沒必要的,假設我們自己編寫一個瀏覽器。不使用User-Agent請求報頭域。那么server端就無法得知我們的信息了。


請求報頭舉例:
GET /form.html HTTP/1.1 (CRLF)
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)

3、響應報頭
響應報頭同意server傳遞不能放在狀態行中的附加響應信息。以及關于server的信息和對Request-URI所標識的資源進行下一步訪問的信息。


經常使用的響應報頭
Location
Location
響應報頭域用于重定向接受者到一個新的位置。Location響應報頭域經常使用在更換域名的時候。


Server
Server
響應報頭域包括了server用來處理請求的軟件信息。與User-Agent請求報頭域是相相應的。以下是
Server
響應報頭域的一個樣例:
Server
Apache-Coyote/1.1
WWW-Authenticate
WWW-Authenticate
響應報頭域必須被包括在401(未授權的)響應消息中,client收到401響應消息時候,并發送Authorization報頭域請求server對其進行驗證時,服務端響應報頭就包括該報頭域。

eg
WWW-Authenticate:Basic realm="Basic Auth Test!" //能夠看出server對請求資源採用的是基本驗證機制。


4、實體報頭
請求和響應消息都能夠傳送一個實體。

一個實體由實體報頭域和實體正文組成,但并非說實體報頭域和實體正文要在一起發送。能夠僅僅發送實體報頭域。實體報頭定義了關于實體正文(eg:有無實體正文)和請求所標識的資源的元信息。
經常使用的實體報頭
Content-Encoding
Content-Encoding
實體報頭域被用作媒體類型的修飾符,它的值指示了已經被應用到實體正文的附加內容的編碼,因而要獲得Content-Type報頭域中所引用的媒體類型,必須採用對應的解碼機制。

Content-Encoding這樣用于記錄文檔的壓縮方法,egContent-Encodinggzip
Content-Language
Content-Language
實體報頭域描寫敘述了資源所用的自然語言。沒有設置該域則覺得實體內容將提供給全部的語言閱讀

者。

egContent-Language:da
Content-Length
Content-Length
實體報頭域用于指明實體正文的長度,以字節方式存儲的十進制數字來表示。

Content-Type
Content-Type
實體報頭域用語指明發送給接收者的實體正文的媒體類型。eg
Content-Type:text/html;charset=ISO-8859-1
Content-Type:text/html;charset=GB2312
Last-Modified
Last-Modified
實體報頭域用于指示資源的最后改動日期和時間。


Expires
Expires
實體報頭域給出響應過期的日期和時間。

為了讓代理server或瀏覽器在一段時間以后更新緩存中(再次訪問曾訪問過的頁面時,直接從緩存中載入,縮短響應時間和減少server負載)的頁面。我們能夠使用Expires實體報頭域指定頁面過期的時間。

egExpiresThu15 Sep 2006 16:23:12 GMT
HTTP1.1
的client和緩存必須將其它非法的日期格式(包含0)看作已經過期。eg:為了讓瀏覽器不要緩存頁面。我們也能夠利用Expires實體報頭域,設置為0jsp中程序例如以下:response.setDateHeader("Expires","0");

五、利用telnet觀察http協議的通訊過程

實驗目的及原理:
利用MStelnet工具,通過手動輸入http請求信息的方式。向server發出請求。server接收、解釋和接受請求后。會返回一個響應。該響應會在telnet窗體上顯示出來,從而從感性上加深對http協議的通訊過程的認識。

實驗步驟:

1、打開telnet
1.1
打開
telnet
執行-->cmd-->telnet

1.2 打開telnet回顯功能
set localecho

2、連接server并發送請求
2.1 open
www.guet.edu.cn 80 //注意port號不能省略

HEAD /index.asp HTTP/1.0
Host:www.guet.edu.cn

/*
我們能夠變換請求方法,請求桂林電子主頁內容,輸入消息例如以下
*/
open
www.guet.edu.cn
80

GET /index.asp HTTP/1.0 //
請求資源的內容

Host:www.guet.edu.cn

2.2 open www.sina.com.cn 80 //在命令提示符號下直接輸入telnetwww.sina.com.cn 80
HEAD /index.asp HTTP/1.0
Host:www.sina.com.cn

3 實驗結果:

3.1 請求信息2.1得到的響應是:

HTTP/1.1 200 OK //請求成功
Server: Microsoft-IIS/5.0 //web
server
Date: Thu,08 Mar 200707:17:51 GMT
Connection: Keep-Alive
Content-Length: 23330
Content-Type: text/html
Expries: Thu,08 Mar 2007 07:16:51 GMT
Set-Cookie: ASPSESSIONIDQAQBQQQB=BEJCDGKADEDJKLKKAJEOIMMH; path=/
Cache-control: private

//資源內容省略

3.2 請求信息2.2得到的響應是:

HTTP/1.0 404 Not Found //請求失敗
Date: Thu, 08 Mar 2007 07:50:50 GMT
Server: Apache/2.0.54 <Unix>
Last-Modified: Thu, 30 Nov 2006 11:35:41 GMT
ETag: "6277a-415-e7c76980"
Accept-Ranges: bytes
X-Powered-By: mod_xlayout_jh/0.0.1vhs.markII.remix
Vary: Accept-Encoding
Content-Type: text/html
X-Cache: MISS from zjm152-78.sina.com.cn
Via: 1.0 zjm152-78.sina.com.cn:80<squid/2.6.STABLES-20061207>
X-Cache: MISS from th-143.sina.com.cn
Connection: close


失去了跟主機的連接

按隨意鍵繼續...

4 .注意事項:1、出現輸入錯誤。則請求不會成功。
2
、報頭域不分大寫和小寫。


3
、更深一步了解HTTP協議,能夠查看RFC2616,在http://www.letf.org/rfc上找到該文件。
4
、開發后臺程序必須掌握http協議

六、HTTP協議相關技術補充

1、基礎:
高層協議有:文件傳輸協議FTP、電子郵件傳輸協議SMTP、域名系統服務DNS、網絡新聞傳輸協議NNTPHTTP協議等
中介由三種:代理(Proxy)、網關(Gateway)和通道(Tunnel),一個代理依據URI的絕對格式來接受請求,重寫所有或部分消息,通過 URI的標識把已格式化過的請求發送到server。

網關是一個接收代理,作為一些其他server的上層,而且假設必須的話,能夠把請求翻譯給下層的server協議。一個通道作為不改變消息的兩個連接之間的中繼點。當通訊須要通過一個中介(比如:防火墻等)或者是中介不能識別消息的內容時,通道常常被使用。
代理(Proxy):一個中間程序,它能夠充當一個server,也能夠充當一個客戶機,為其他客戶機建立請求。

請求是通過可能的翻譯在內部或經過傳遞到其他的server中。

一個代理在發送請求信息之前,必須解釋而且假設可能重寫它。代理常常作為通過防火墻的客戶機端的門戶,代理還能夠作為一個幫助應用來通過協議處理沒有被用戶代理完畢的請求。
網關(Gateway):一個作為其他server中間媒介的server。

與代理不同的是。網關接受請求就好象對被請求的資源來說它就是源server;發出請求的客戶機并沒有意識到它在同網關打交道。


網關常常作為通過防火墻的server端的門戶,網關還能夠作為一個協議翻譯器以便存取那些存儲在非HTTP系統中的資源。


通道(Tunnel):是作為兩個連接中繼的中介程序。一旦激活,通道便被覺得不屬于HTTP通訊。雖然通道可能是被一個HTTP請求初始化的。當被中繼的連接兩端關閉時,通道便消失。當一個門戶(Portal)必須存在或中介(Intermediary)不能解釋中繼的通訊時通道被常常使用。



2
、協議分析的優勢—HTTP分析器檢測網絡攻擊
以模塊化的方式對高層協議進行分析處理,將是未來入侵檢測的方向。
HTTP
及其代理的經常使用端口8031288080network部分用port標簽進行了規定

3
HTTP協議Content Lenth限制漏洞導致拒絕服務攻擊
使用POST方法時,能夠設置ContentLenth來定義須要傳送的數據長度,比如ContentLenth:999999999,在傳送完畢前,內存不會釋放,攻擊者能夠利用這個缺陷。連續向WEBserver發送垃圾數據直至WEBserver內存耗盡。這樣的攻擊方法基本不會留下痕跡。
http://www.cnpaf.net/Class/HTTP/0532918532667330.html

4
、利用HTTP協議的特性進行拒絕服務攻擊的一些構思
server端忙于處理攻擊者偽造的TCP連接請求而無暇理睬客戶的正常請求(畢竟client的正常請求比率很之小),此時從正常客戶的角度看來,server失去響應,這樣的情況我們稱作:server端受到了SYNFlood攻擊(SYN洪水攻擊)。


SmurfTearDrop等是利用ICMP報文來FloodIP碎片攻擊的。

本文用正常連接的方法來產生拒絕服務攻擊。
19
port在早期已經有人用來做Chargen攻擊了。即Chargen_Denial_of_Service。可是。他們用的方法是在兩臺Chargenserver之間產生UDP連接,讓server處理過多信息而DOWN掉。那么,干掉一臺WEBserver的條件就必須有2個:1.Chargen服務2.HTTP服務
方法:攻擊者偽造源IPNChargen發送連接請求(Connect)。Chargen接收到連接后就會返回每秒72字節的字符流(實際上依據網絡實際情況,這個速度更快)給server。

5
Http指紋識別技術
Http
指紋識別的原理大致上也是同樣的:記錄不同server對Http協議運行中的微小區別進行識別.Http指紋識別比TCP/IP堆棧指紋識別復雜許,理由是定制Httpserver的配置文件、添加插件或組件使得更改Http的響應信息變的非常easy,這樣使得識別變的困難;然而定制TCP/IP堆棧的行為須要對核心層進行改動,所以就easy識別.
要讓server返回不同的Banner信息的設置是非常easy的,Apache這種開放源碼的Httpserver,用戶能夠在源碼里改動Banner信息,后重起Http服務就生效了;對于沒有公開源碼的Httpserver比方微軟的IIS或者是Netscape,能夠在存放Banner信息的Dll文件里修,相關的文章有討論的,這里不再贅述,當然這種改動的效果還是不錯的.第二種模糊Banner信息的方法是使用插件。


經常使用測試請求:
1
HEAD/Http/1.0發送主要的Http請求
2
DELETE/Http/1.0發送那些不被同意的請求,比方Delete請求
3
GET/Http/3.0發送一個非法版本號的Http協議請求
4
GET/JUNK/1.0發送一個不對規格的Http協議請求
Http
指紋識別工具Httprint,它通過運用統計學原理,組合模糊的邏輯學技術,能非常有效的確定Httpserver的類型.它能夠被用來收集和分析不同Httpserver產生的簽名。



6
、其它:為了提高用戶使用瀏覽器時的性能。現代瀏覽器還支持并發的訪問方式,瀏覽一個網頁時同一時候建立多個連接,以迅速獲得一個網頁上的多個圖標。這樣能更高速完畢整個網頁的傳輸。
HTTP1.1
中提供了這樣的持續連接的方式,而下一代HTTP協議:HTTP-NG更添加了有關會話控制、豐富的內容協商等方式的支持。來提供
更高效率的連接。

?

版權聲明:

轉載于:https://www.cnblogs.com/hrhguanli/p/4843761.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375492.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375492.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375492.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數組中第K個最大元素

在未排序的數組中找到第 k 個最大的元素。請注意&#xff0c;你需要找的是數組排序后的第 k 個最大的元素&#xff0c;而不是第 k 個不同的元素。 示例 1: 輸入: [3,2,1,5,6,4] 和 k 2 輸出: 5示例 2: 輸入: [3,2,3,1,2,4,5,5,6] 和 k 4 輸出: 4說明: 你可以假設 k 總是有…

各大互聯網公司2014前端筆試面試題–JavaScript篇

很多面試題是我自己面試BAT親身經歷碰到的。整理分享出來希望更多的前端er共同進步吧&#xff0c;不僅適用于求職者&#xff0c;對于鞏固復習js更是大有裨益。 而更多的題目是我一路以來收集的&#xff0c;也有往年的&#xff0c;答案不確保一定正確&#xff0c;如有錯誤或有更…

iOS:蘋果企業證書通過網頁分發安裝app

本文轉載至 http://blog.sina.com.cn/s/blog_6afb7d800101fa16.html 蘋果的企業級證書發布的應用&#xff0c;是不用設備授權即可直接安裝&#xff0c;并且不限設備上限。為了方便分發&#xff0c;蘋果有協議實現通過網頁鏈接直接下載安裝企業級的應用。 基本的原理就是在生成企…

這道題很難

請編寫一個函數&#xff0c;使其可以刪除某個鏈表中給定的&#xff08;非末尾&#xff09;節點。傳入函數的唯一參數為 要被刪除的節點 。 現有一個鏈表 – head [4,5,1,9]&#xff0c;它可以表示為: 示例 1&#xff1a; 輸入&#xff1a;head [4,5,1,9], node 5 輸出&a…

設計模式學習筆記-基礎知識篇

1. 設計模式的重要性 1.1 設計模式解決的是在軟件過程中如何來實現具體的軟件功能。實現同一個功能的方法有很多&#xff0c;哪個設計容易擴展&#xff0c;容易復用&#xff0c;松耦合&#xff0c;可維護&#xff1f;設計模式指導我們找到最優方案。 1.2 設計中往往會存在設計缺…

JavaScript對象類型詳解

《JavaScript高級程序設計》已經學習到了第四章&#xff0c;不過因為第五章講的都是各種對象類型&#xff0c;所以在進行第五章的學習之前&#xff0c;先深入了解一下對象是有好處的。 JavaScript Objects in Detail 關于對象類型的方方面面在這篇文章里都寫得很清楚了&#xf…

旋轉鏈表

給定一個鏈表&#xff0c;旋轉鏈表&#xff0c;將鏈表每個節點向右移動 k 個位置&#xff0c;其中 k 是非負數。 示例 1: 輸入: 1->2->3->4->5->NULL, k 2輸出: 4->5->1->2->3->NULL解釋:向右旋轉 1 步: 5->1->2->3->4->NULL向…

內心的平靜就是財富本身-Cell組件-用友華表的由來-T君

時至今日&#xff0c;Cell組件仍是應用廣泛的商業報表組件 作者&#xff1a;人生三毒 編者注&#xff1a;本文作者人生三毒為知名網站及網頁游戲公司創始人&#xff0c;此前曾為IT類媒體資深編輯&#xff0c;見證了中國互聯網早期的發展。 認識T君之前先認識的是他的軟件&#…

mybatis06 增刪改差 源碼

user.java package cn.itcast.mybatis.po;import java.util.Date;public class User {private int id;private String username;// 用戶姓名private String sex;// 性別private Date birthday;// 生日private String address;// 地址public int getId() {return id;}public voi…

socket 編程 基于 select 實現的回射客戶端/服務程序

github 代碼 地址 unp.h #include <stdio.h> #include <unistd.h> #include <arpa/inet.h> #include <string.h> #include <sys/socket.h> #include <stdlib.h> #include <errno.h> #include <sys/wait.h> #include <sys…

MyEclipse的優化

出自&#xff1a;http://blog.csdn.net/u010124571/article/details/41316255?refmyread 第一步: 取消自動validation validation有一堆&#xff0c;什么xml、jsp、jsf、js等等&#xff0c;我們沒有必要全部都去自動校驗一下&#xff0c;只是需要的時候才會手工校驗一下&…

NSlog輸出

NSLog的定義 void NSLog(NSString *format, …); 基本上&#xff0c;NSLog很像printf&#xff0c;同樣會在console中輸出顯示結果。不同的是&#xff0c;傳遞進去的格式化字符是NSString的對象&#xff0c;而不是char *這種字符串指針。 實例 NSLog可以如下面的方法使用&#x…

推理題,會則秒解

你和你的朋友&#xff0c;兩個人一起玩 Nim 游戲&#xff1a;桌子上有一堆石頭&#xff0c;每次你們輪流拿掉 1 - 3 塊石頭。 拿掉最后一塊石頭的人就是獲勝者。你作為先手。 你們是聰明人&#xff0c;每一步都是最優解。 編寫一個函數&#xff0c;來判斷你是否可以在給定石頭…

【圖論】割點、橋、雙連通

連通分量 個數可以通過一次BFS或者DFS得到 割點和橋 可以枚舉刪除每一個點或者每一條邊&#xff0c;判斷連通分量個數是否增加 更好的方法 該算法是R.Tarjan發明的。對圖深度優先搜索&#xff0c;定義DFS(u)為u在搜索樹&#xff08;以下簡稱為樹&#xff09;中被遍歷到的次序號…

奇酷手機顯示Log

1、在桌面點擊撥號&#xff0c;在撥號盤輸入“*20121220#”&#xff0c;進入工程模式;2、看到日志輸出等級&#xff0c;點進去 Log print enable 選 enable Java log level 選 LOGV C and C log level 選 LOGV Kernel log level 選 KERN_DEBUG3、完畢 參考網址&#xff1a;http…

getCanonicalPath getAbsolutePath區別

1、在winows環境下它們的區別是 &#xfeff;&#xfeff;getCanonicalPath是標準路徑&#xff0c;沒有特殊字符&#xff0c;getAbsolutePath是有特殊字符的 2、在AIX系統中它們的區別&#xff1a; 首先編譯&#xff1a;javac com/ai/test/BugTest.java 然后運行&#xff1a;ja…

Hbase與hive整合

//hive與hbase整合create table lectrure.hbase_lecture10(sname string, score int) stored by org.apache.hadoop.hive.hbase.HBaseStorageHandler whth serdeproperties("hbase.columns.mapping" :key,cf1:score)tblproperties("hbase.table.name" &q…

C++實現一個http服務器

一個簡單的博客后端服務器 github地址&#xff0c;持續更新 設計參考 #define MYSQLPP_MYSQL_HEADERS_BURIED #include "httplib.h" #include "rapidjson/document.h" #include <mysql/mysql.h> #include <iostream> #include <string>…

KMP算法的java實現

package com.trs.utils;public class KMPStr {/** 在KMP算法中&#xff0c;最難求的就是next函數&#xff0c;如何理解next函數是一個難題&#xff0c;特別是knext[k]&#xff0c;這里* 需要指出的是當p[i]!p[j]時&#xff0c;我們只有通過回溯將k的值逐漸減小&#xff0c;貌似…

線段分割法實現微信搶紅包

無意間看到的一種實現搶紅包的方法&#xff0c;于是用C實現了一下。 將一個紅包分成 n 份 具體的思路是&#xff0c;將一個紅包看作是一個線段&#xff0c;線段的長就是紅包總金額&#xff0c;然后在這個線段上隨機切 n-1 刀&#xff0c;分成 n 份&#xff0c;然后搶紅包的人依…