原创 在scrapy中使用phantomJS實現異步爬取

使用selenium能夠非常方便的獲取網頁的ajax內容,並且能夠模擬用戶點擊和輸入文本等諸多操作,這在使用scrapy爬取網頁的過程中非常有用。網

原创 java 使用管程(monitor) 實現生產者-消費者模式

這是繼java 使用synchronized, wait(), notifyAll() 實現生產者-消費者模式的下一篇。 讓我們先來看看什麼是管程。管程的英文叫Monitor, 翻譯過來時監視器的意思。爲什麼要使用管程呢? 之前使用信號量

原创 【計算機網絡】不同網段內主機如何通信

學習計算機網絡如果只是被動的接受知識的話,不但枯燥,效率低下,而且理解也不夠深。這裏我推薦一款網絡仿真軟件cisco packet tracer。這款軟件最有價值的地方在於用戶可以通過軟件來模擬真實的網絡,能夠零成本搭建一套計算機網絡。我

原创 【Https原理入門】

將數據加密在進行傳輸: 一種方式:HostA: 文件---------> Rar(加密)------->傳輸-------->HostB:使用密碼進行解壓獲取文件 對稱加密和非對稱加密: 對稱祕鑰加密: 非對稱加密: 公開祕鑰加密。需

原创 【C++】靜態成員函數小結

類中的靜態成員真是個讓人愛恨交加的特性。我決定好好總結一下靜態類成員的知識點,以便自己在以後面試中,在此類問題上不在被動。 靜態類成員包括靜態數據成員和靜態函數成員兩部分。  一 靜態數據成員:  類體中的數據成員的聲明前加上static

原创 【React源碼分析之一】JSX 轉化成JS

我們在開發react 過程中一般都是用JSX, 相當於enhanced JavaScript. 能再JS代碼中嵌入HTML.  JSX是通過Babel翻譯成JS代碼的, 可以通過這個Babel playground 來看看JSX中的htm

原创 【Javascript】徹底搞懂閉包(closure)和原型(prototype)

首先講講爲什麼會有閉包和原型。 Javascript的最初就是一款腳本語言(名字中帶scrip就足以說明這一點),用來開發網頁,所以語法簡潔,沒有面嚮對象語言的概念(多態,繼承,封裝。。。),甚至沒有線程。 爲了實現多態,繼承和封裝,我們

原创 【操作系統】進程與線程

爲什麼會有進程? 以前的計算機性能較差,操作系統只支持單任務,也就是一次只能執行一個任務,當這個任務執行完成之後,才能執行下一個任務,例如MSDOS。當該任務進行IO時,CPU會處於空閒狀態。 隨着計算機性能增強,出現了多任務

原创 【操作系統】文件系統(一)

Prerequiste: 磁盤的結構和工作原理 爲什麼要引入文件系統? 在大容量magnetic disk出現之前,數據和程序都是存儲在磁帶上,那時還沒有文件的概念。當大容量的磁盤出現了以後,需要將數據或者程序存儲在磁盤上。

原创 JS中的this問題

最近在使用react native開發安卓app的過程中,總是遇到this指針所在上下文切換,導致從this中調用對象或者方法時,總是報xxx is undefine, 這是因爲JS中的this十分靈活,隨着代碼執行上下文的不同,this

原创 【計算機網絡】計算機網絡物理層,數據鏈路層和網絡層的理解

對於初學者甚至許多計算機科班出身的同學來說,學習網絡和操作系統一樣,感覺十分抽象,學完總有一種朦朦朧朧的感覺,因爲畢竟對於絕大多數人來說,工作中都不需要接觸這些東西。但是作爲一個較真的程序員,還是想慢慢深入理解其中的奧祕,這也就是我想邊學

原创 【計算機網絡】網絡上兩臺主機是如何通過IP地址和MAC地址進行通信的

互聯網上的兩臺主機HostA 和 HostB想要進行通信的流程,那麼主機A將需要知道自己的ip,mac 以及主機B的ip, mac。但是主機B的mac地址主機A是不知道的,於是主機A如果將他自己的IP與子網掩碼進行 & 與運算得到一個ip

原创 【設計模式】Builder建造者模式

需求: 當創建某一個對象的時候,必須按照的一定的順序對成員變量進行初始化,所以爲了避免用戶在創建的時候打亂這個順序,就有了Builder設計模式。非常簡單有效,這種模式在許多框架中被大量使用。 //假設我們在創建MyData對象的時候,

原创 【設計模式】一文徹底搞懂裝飾器(Decorator)設計模式

網上關於裝飾器(decorator)模式的教程很多,但是很少有能講的很清楚的,所以有了這篇文章。 在講解裝飾器模式之前,先看看爲什麼要使用裝飾器模式。 假設我們要爲一個咖啡館設計一套下單和結算系統,咖啡管的產品有茶,咖啡,橙汁三種產品,售

原创 java 實現一個同步的stack

用java 實現了一個線程安全的棧 (參考了tomcat源碼) public class SynchronizedStack<T> { public static final int DEFAULT_SIZE = 128;