Review
English Article
SQL vs. NoSQL Databases: What’s the Difference?
In the world of database technology, There are main types of database:SQL(relational databases) and NoSQL(non-relational databases).
Relational databases:
Structured Query Language (SQL), like a phone book, consists of two or more tables with columns and rows, Each row represents an entry, and each column sorts a every specific type of information, like a name, address, and phone number. The relationship between tables and field types is called a schema, the schema must be clearly defined before any information can be added in a relational database.
SQL is a lightweight, declarative language that does a lot of heavy lifting for the relational database.
Popular SQL: MySQL/Oracle/IMB DB2/MariaDB....
NOSQL databases:
Think of non-relational databases more like file folders, assembling related information of all types.If a WordPress blog used a NoSQL database, each file could store data for a blog post: social likes, photos, text, metrics, links and more.
NoSQL databases are document-oriented. non-structured data can be stored in a single document that can be easily found but isn't necessarily categorized into fields like a relational database does. Its more intuitive,but note that storing data in bulk like this requires extra processing effort and more storage than highly organized SQL data.
Popular NoSQL databases: MongoDB/Apache's CouchDB/HBase/Oracle NoSQL/Riak
Reaons to use a SQL database:
- You need to ensure ACID compliancy
- Your data is structured and unchanging.
Reasons to use a NOSQL database:
- storing large volumes of data that often have little to no structure.
- Making the most of cloud computing and storage.
- Rapid development.
Chinese Article
這篇文章干貨太多,不是一時(shí)可以都能看懂,又結(jié)合網(wǎng)上的資料看了一下,之前就是了解基本的原理三次握手,四次揮手。并沒有仔細(xì)研究其內(nèi)在原理。
TCP包頭格式:
- 源端口號(hào)
- 目的端口號(hào)
- 序號(hào)
- 確認(rèn)序號(hào)
- 首部長度+保留位
- 標(biāo)志位
- 窗口大小,負(fù)責(zé)擁塞控制,以防止數(shù)據(jù)阻塞。
- 校驗(yàn)和
- 緊急指針
- 選項(xiàng)
- 數(shù)據(jù)
標(biāo)志位
SYN:TCP三次握手中,如果A是發(fā)起端,則A就對(duì)服務(wù)器發(fā)一個(gè)SYN報(bào)文。表示建立連接
ACK:收到數(shù)據(jù)或請(qǐng)求后發(fā)送響應(yīng)時(shí)發(fā)送ACK報(bào)文
RST:表示連接重置
FIN:TCP四次揮手時(shí),表示關(guān)閉連接
PSH:發(fā)送端需要發(fā)送一段數(shù)據(jù),這個(gè)數(shù)據(jù)需要接收端一收到就進(jìn)行向上交付。而接收端在收到PSH標(biāo)志位有效的數(shù)據(jù)時(shí),迅速將數(shù)據(jù)交付給應(yīng)用層。所以PSH又叫急迫比特。但是現(xiàn)在已經(jīng)不需要將數(shù)據(jù)交付給應(yīng)用層了,因?yàn)檫@些效果在TCP棧已經(jīng)可以自行處理這些問題了
URG:緊急指針,意為URG位有效的數(shù)據(jù)包,是一個(gè)緊急需要處理的數(shù)據(jù)包,需要接收端在接收到之后迅速處理
校驗(yàn)和
目的是為了發(fā)現(xiàn)TCP首部和數(shù)據(jù)在發(fā)送端到接收端之間發(fā)生的任何改動(dòng)。如果接收方檢測(cè)到檢驗(yàn)和有差錯(cuò),則TCP段會(huì)被直接丟棄。
緊急指針
要求在接收方在沒有處理完數(shù)據(jù)之前就能夠發(fā)送一些緊急數(shù)據(jù),這就使得發(fā)送方將CODE字段的URG置為1 即緊急指針字段有效,這樣可以不必考慮你發(fā)送的緊急數(shù)據(jù)在數(shù)據(jù)流中的位置,也就是相當(dāng)于優(yōu)先級(jí)最高,緊急指針指出的是緊急數(shù)據(jù)在報(bào)文段中結(jié)束的位置。如在某些連接中進(jìn)行強(qiáng)制中,當(dāng)你按下CTRL+C時(shí),可能出現(xiàn)的就是這種情況。
三次握手
第一次握手:首先由Client發(fā)出請(qǐng)求連接即SYN=1,ACK=0(TCP規(guī)定SYN=1時(shí)不能攜帶數(shù)據(jù),但要消耗一個(gè)序列號(hào)),因此聲明自己的序號(hào)是seq=x;
第二次握手:然后Server一直監(jiān)聽客戶端是否發(fā)來請(qǐng)求,監(jiān)聽到客戶端有請(qǐng)求發(fā)送,核對(duì)后進(jìn)行回復(fù)確認(rèn),即SYN=1,ACK=1,seq=y, ack=x+1;
第三次握手:然后Client再依次進(jìn)行確認(rèn),但不用SYN,這時(shí)即為ACK=1,seq=x+1, ack=y+1. 然后就建立連接;
問題:首先,為什么要三次,而不是兩次?為了可靠,為什么不是四次?
如果兩次,那么B無法確定B的信息A是否能收到,所以如果B先說話,可能后面的A都收不到,會(huì)出現(xiàn)問題 。
如果四次,那么就造成了浪費(fèi),因?yàn)樵谌谓Y(jié)束之后,就已經(jīng)可以保證A可以給B發(fā)信息,A可以收到B的信息; B可以給A發(fā)信息,B可以收到A的信息。
為什么TCP協(xié)議終止鏈接要四次?
1 當(dāng)主機(jī)A確認(rèn)發(fā)送完數(shù)據(jù)且知道B已經(jīng)接受完了,想要關(guān)閉發(fā)送數(shù)據(jù)口(當(dāng)然確認(rèn)信號(hào)還是可以發(fā)),就會(huì)發(fā)FIN給主機(jī)B。
2 主機(jī)B收到A發(fā)送的FIN,表示收到了,就會(huì)發(fā)送ACK回復(fù)。
3 但這是B可能還在發(fā)送數(shù)據(jù),沒有想要關(guān)閉數(shù)據(jù)口的意思,所以FIN與ACK不是同時(shí)發(fā)送的,而是等到B數(shù)據(jù)發(fā)送完了,才會(huì)發(fā)送FIN給主機(jī)A。
4 A收到B發(fā)來的FIN,知道B的數(shù)據(jù)也發(fā)送完了,回復(fù)ACK, A等待2MSL以后,沒有收到B傳來的任何消息,知道B已經(jīng)收到自己的ACK了,A就關(guān)閉鏈接,B也關(guān)閉鏈接了
第二種就是就是文章說的:
因?yàn)門CP是全雙工的,所以,發(fā)送方和接收方都需要Fin和Ack。只不過,有一方是被動(dòng)的,所以看上去就成了所謂的4次揮手。如果兩邊同時(shí)斷連接,那就會(huì)就進(jìn)入到CLOSING狀態(tài),然后到達(dá)TIME_WAIT狀態(tài)。
Share
2018工作的最后一天,談兩個(gè)話題
抖音“生僻字”的視頻大火,原創(chuàng)是個(gè)帥氣小伙,不過他的視頻其實(shí)還沒那么火,一個(gè)語文老師發(fā)布的“生僻字”轉(zhuǎn)發(fā)量是最高的,因?yàn)锽GM好聽,而且人又好看,可能不少人都以為這首BGM是她原創(chuàng)的,而真正原創(chuàng)的作者是另有其人,是劉至佳唱的一首賊好聽的BGM,但是又有誰會(huì)關(guān)心最好聽的劉至佳女生版呢?又有誰會(huì)關(guān)注原創(chuàng)小伙呢?估計(jì)大家最關(guān)心的還是語文老師那個(gè)視頻,因?yàn)橐呀?jīng)被大眾所認(rèn)可了。
關(guān)于即將過去的2018年,想對(duì)自己說,你以前的主見都是主觀看法,現(xiàn)在失去了主見,將來的學(xué)識(shí)和經(jīng)歷多了,即將會(huì)建立新的主見,請(qǐng)迎接好未來嶄新的自己。
今天說兩個(gè)話題:
第一個(gè)是君子性非異也,善假于物也。身邊的人,以及環(huán)境并不重要,重要的是自己是否在核心網(wǎng)絡(luò)之中,如果身處外圍網(wǎng)絡(luò),手里只有這么簡(jiǎn)陋的工具,就算能看到主流的人在做什么,也插不上手,再聰明也無用武之地,只能追逐第三世界的研究。所以已經(jīng)想辦法讓自己進(jìn)入核心網(wǎng)絡(luò)之中,寫程序也要在核心的產(chǎn)品上。而不是外圍。
關(guān)于成功之前的三步走戰(zhàn)略:
第一步是學(xué)習(xí)第一條定律,不敢犯錯(cuò)才是最大的錯(cuò)誤,不怕犯錯(cuò),勇往直前。
第二步是積累,新人水平再高,你讓他直接當(dāng)市長也不能服眾,也指揮不動(dòng),如果一個(gè)人已經(jīng)樹大根深,你不用他也不行,水平只是積累的前提條件。
第三部是推廣,過了學(xué)習(xí)階段,你就配得上作為天下英雄的稅收,積累,則是你淘汰天下英雄的終極手段。通過博客Github,以及國外論壇幫助他人解決問題,發(fā)布開源的控件以及項(xiàng)目讓大家所使用,解決他們的問題,就是推廣自己絕佳的方式。