Time of Update: 2018-08-19
如果說其他的開發人員往Github項目中修改了代碼,我要在他們的餓基礎上繼續進行開發,那麼應該怎樣才能把Github的代碼同步下來呢,注意此時並不是要重新git init.在本機建立一個新的倉庫了。其實此時原生代碼倉庫和遠程伺服器已經保持了一個串連,我們只要把代碼pull下來就可以了。 這將會在我的上一篇部落格《使用Git命令實現代碼上傳與同步》,的基礎上繼續進行示範。
Time of Update: 2018-08-19
1.Git是分布式的,SVN是集中式的版本控制系統; 2.Git每個曆史版本儲存完整的檔案,SVN隱藏檔差異; 3.Git可離線完成大部分操作,SVN則相反; 4.Git有著更優雅的分支和合并實現; 5.Git有更強的撤銷修改和修改版本曆史的能力; 6.Git速度更快,效率更高; Git的基本工作流程: (1)Git使用40個16進位字元的SHA-1 Hash來唯一標示對象。 Git有四種對象: (1)blob:文字檔、二進位檔案、或者連結檔案;
Time of Update: 2018-08-19
在一棵二叉樹中,有多少個葉子節點,就會有多少條從根節點到葉子節點的路徑。如果給每一個節點一個data值,那麼每一條路徑經過的節點data加起來就為sum,現在根據給定的sum,請找出有哪些路徑符合這個sum。代碼上傳至 https://github.com/chenyufeng1991/BinaryTreePath 。
Time of Update: 2018-08-19
碰到這樣一道演算法題:給定一個字串,比如: cadacacbedffffreaaawc ,然後給定兩個字元為f,c ,那麼最短子串的長度為5。因為子串有cbedf,freaaawc. 這篇部落格考慮的比較簡單,是只有兩個字元的情況,我會在後續的部落格中講解如果需要包含多個字元那麼應該如何處理。本篇的代碼上傳至
Time of Update: 2018-08-19
(1)git blame 檔案名稱 該命令會顯示出該檔案名稱的建立者,以及最後的提交和時間戳記。 。 (2)git reflog 該命令顯示的是head指標移動的資訊。他是在本地的,而不是你倉庫的一部分。不會包含在push和merge中。如果我使用git log ,我得到的提交資訊是我倉庫的一部分。 。 (3)git stash 把你當前在工作區中的修改暫時儲存起來。然後工作區恢複到上一次提交時的狀態。你可以去進行其他的工作了。 git stash
Time of Update: 2018-08-19
二叉樹的葉子節點是既沒有左子樹又沒有右子樹的特殊的節點,使用遞迴我們可以方便的計算出共有多少葉子節點。代碼上傳至 https://github.com/chenyufeng1991/BinaryTreeLeafCount 。 核心代碼如下: int leafCount = 0;void LeafCountBinaryCount(Node *node){ if (node == NULL) {
Time of Update: 2018-08-19
二叉樹是一種遞迴定義的資料結構,我們對它做的幾乎所有的操作都是遞迴的。求樹的高度也是如此。分別求左右子樹的高度,然後取較長的子樹作為高度。代碼上傳至 https://github.com/chenyufeng1991/BinaryTreeHeight 。 核心代碼如下: int BinaryTreeHeight(Node *node){ int treeHeight = 0; if (node != NULL)
Time of Update: 2018-08-19
在如今很多的筆試面試中,都會出現讓你實現某個函數的,並且進行最佳化,比如降低時間複雜度。而在手寫代碼中,求次方函數是很高頻的考點。範例程式碼上傳至:https://github.com/chenyufeng1991/PowerFunction。 題目如下:實現 double power(double x, int n)函數,實現求x的n次方。注意,n有可能為正或者負。 (1)最簡單的實現,迴圈 //
Time of Update: 2018-08-19
我們可以用很多方式去遍曆一顆二叉樹,比如先序遍曆,中序遍曆,後序遍曆,其實都是通過遞迴的來實現。今天我們來對二叉樹進行層序遍曆,層序遍曆的時候需要藉助另一種資料結構——隊列。本篇的範例程式碼上傳至 https://github.com/chenyufeng1991/LevelOrderBinaryTree 。
Time of Update: 2018-08-19
我們知道二叉樹是一種遞迴定義的資料結構,包括二叉樹的建立、遍曆、求樹高、葉子節點個數等等。使用遞迴來進行以上操作非常的簡便,相關實現請參考 《C語言實現二叉樹的基本操作》。但是今天我們劍走偏鋒,使用非遞迴的方式來實現樹的先序、中序、後序遍曆。實現代碼上傳至 https://github.com/chenyufeng1991/TraverseBinaryTreeNoRecursion 。 (1)非遞迴實現先序遍曆
Time of Update: 2018-08-19
求鏈表的公用節點是一道很經典的演算法題,並不是很難。我們需要知道的是,一旦兩個鏈表有一個公用節點的話,那麼這兩個鏈表的形狀就是一個“Y”型。也就是說,自公用節點之後的所有節點都是一樣的。如下:
Time of Update: 2018-08-19
這同樣是劍指Offer中的很經典的一道面試題。題目描述為:在字串中找出第一個只出現一次的字元。如輸入“abaccdeff”,則輸出'b'. 一開始大家就會想到最簡單的方法就是每訪問到一個字元的時候,與後面的每一個字元去進行比較,若沒有發現相同的元素,那麼該元素就是第一個只出現一次的字元。這樣的複雜度為O(n^2). 顯然這樣的效率不高。
Time of Update: 2018-08-19
這是劍指Offer中非常經典的一道題,也是在面試筆試中高頻出現。題目的詳細描述如下:輸入一個鏈表,輸出該鏈表中倒數第k個節點。為了符合大多數人的習慣,從1開始計數,即鏈表的尾結點是倒數第一個節點。 本題有一個非常直觀的解法,就是對鏈表掃描兩遍,第一遍用來記錄鏈表長度為n,第二次從鏈表頭部走(n-k+1)步後,找到的那個節點就是倒數第k個節點。這種演算法的問題就是需要掃描鏈表兩遍,顯得不是特別聰明。
Time of Update: 2018-08-19
類似的,合并兩個有序的數組或者鏈表也是劍指Offer中的經典題型。題目描述如下:輸入兩個遞增排序的鏈表,合并這兩個鏈表並使新鏈表中的節點仍然是按照遞增排序的。我這裡以合并鏈表來實現。 在這裡,並不需要去建立一個新的鏈表,只要有三個節點指標就行,第一個節點指標Node1指向第一個鏈表,第二個節點指標Node2指向第二個鏈表,第三個節點指標Node3指向新的鏈表。簡單的示意圖如下:
Time of Update: 2018-08-19
首先理解幾個基本概念: origin:預設遠程版本庫; master:預設開發分支; (1)git log 查看提交日誌。會顯示出你的每一次提交。如圖: 。 (2)git log --pretty=oneline 如果你覺得上面輸出內容太多太雜,可以使用這個命令。資訊會在一行顯示。如圖: 。 (3)git branch 查看當前分支。如圖,我現在在master分支。 。 (4)
Time of Update: 2018-08-19
nginx是一款第三方開源的主要用來做資料轉寄、反向 Proxy、負載平衡的軟體,目前在互連網和軟體行業大量使用。本篇部落客要來實現nginx的資料轉寄和負載平衡的功能,最主要的是配置nginx的設定檔。 本文使用的伺服器是阿里雲centos6.8,nginx版本為1.6.2 。為了示範方便,可以在伺服器上安裝一個Tomcat。
Time of Update: 2018-08-19
(1)首先下載BootStrap,把bootstrap.min.css拷貝到項目中。 (2)建立style.css,實現代碼如下: .row{ margin-bottom: 20px;}.row .row{ margin-top: 10px; margin-bottom: 0px;}[class*="col-"]{ padding-top: 15px; padding-bottom: 15px;
Time of Update: 2018-08-19
首先這道演算法題並不是很難,看過劍指Offer的同學都知道這是裡面的一道題。在各大公司的面試中也是經常被用到的,今天我們就採用最常規的方法來實現一下。 首先有人會想到,如果能把數組排序後,那麼中間的那個數字就是超過一半的那個數字了(如果存在的話)。當然排序較快的複雜度為O(nlogn).這種方法完全可以實現,但未必是最好的。
Time of Update: 2018-08-19
鏈表在資料結構中是一種非常重要的線性資料結構,也是各類面試筆試中常常涉及的問題。其中最常見的一個問題就是“輸入一個鏈表的頭結點,從尾到頭反過來列印出每個節點的值”,簡單說就是逆轉鏈表。當然,有人會發現,這其實就是劍指Offer中的一道題。這道題的實現我已經上傳至 https://github.com/chenyufeng1991/ReverseLinkedList_Stack 。
Time of Update: 2018-08-19