如果單純從學習Ruby
再學習運用Rails
開發網頁專案,那可能還要再認識一些技能
,對開發上能更有幫助。當然如果本身已經有非常多的專案開發
相關經驗者,可能對它們就一點都不陌生了。
**Git
**版控工具。
**Github
**一個由Git進行版本控制的軟體原始碼代管服務平台。
**SQL && noSQL
**結構化查詢語言 && 不同於傳統的關聯式資料庫的資料庫管理系統的統稱。以及其相對應的資料庫廠商們。
**前端語言
**當然包括前端最熱門語言(目前沒有之一)javascript
,以及各式由它產生的各種函式庫與框架,例如Recat
orVue
。當然HTML, CSS
也是需要一定基本認知。
試著花一點時間,來重新瞭解他們,以及確認自己是否真的認識他們。
Git
是一種在自己電腦上就可以運行的軟體,可以追蹤你對文件的修改,當文件編輯或程式碼編輯到一定程度時,可以操作其為你紀錄,當你有需要時,隨時可以將檔案恢復
至你想要的版本狀態。當有正常網路連線時,你可以隨時上傳至任何由Git進行版本控制的軟體原始碼代管服務平台,進行雲端存檔。
有認識小說家朋友嗎?推薦他用Git
吧,例如Re:ゼロから始める異世界生活
中有許多的if
線故事,有用Git
寫作上不是更方便?
Git
的重要性在對於利用框架開發專案,或功能較多的專案上尤其重要,熟悉其使用方式者,能更快速的查找到程式碼被修改或加入的日期,協助debug
或修改。協作開發上能讓不同開發者,在不同的分支(branch)上進行功能開發,能讓開發項目同時進行,不用等到一項功能完成,才能進行下一項功能。Git
在對branch
合併時也可找出分支間conflict
,並提醒使用者排除。
有良好版本控制的習慣,已經早是對工程師們基本要求之一,所以學習Git
已經是必要且也是會對自己有所幫助的,其並不是一項程式語言
,而是工具,對於已經開始踏入程式語言
人而言是非常容易學的一項技能。
網路上也有非常多無償
的教學網站及資料。
龍哥的為你自己學Git
連猴子都能懂的Git入門指南:https://backlog.com/git-tutorial/tw/intro/intro2_1.html
內容都已經把這工具使用方式,講得一清二楚,所以接下來這邊只分享一些可能的面試題。
1.Git中的tag?
對一次commit
加上備註,也就是加上一個標籤tag
。tag
有分lightweight
與annotated
,雖然實際上只是多一個備註,但利用其製作版本號
是很常見的行為。
annotated
新建一個priject
並完成第一次的commit
後試試以下指令。(如果不是用rails
記得git init
)
$ git tag #沒有任何資料才是正確的,因為我們從未標記過。
$ git log --oneline #畫面上應該只會有第一次的`commit`。
d93894d (HEAD -> master) 第一次commit
(END)
$ git tag -a v1.0 -m "First time use git tag"
-a
是給予版本號,-m
是給予要儲存資訊。
執行後不會出現任何畫面,但終端有裝一些輔助工具的話,可以看到版本號出現了。
接著。
$ git show v1.0
tag v1.0
Tagger: nauosika <----------@gmail.com>
Date: Wed Sep 8 14:37:03 2021 +0800
First time use git tag
commit d93894de082fe0f6a7f072ed5b293c1610b809d3 (HEAD -> master, tag: v1.0)
Author: nauosika <-----------@gmail.com>
Date: Wed Sep 8 14:29:47 2021 +0800
可以看到備註,以及建立版本號者較完整資訊。
lightweight
如果只是想做標籤不需要任何備註的話。
(請先將資料做變動,再進行一次commit
。)
$ git tag v1.1
這樣就完成了,不需要-a
與-m
。
接著輸入。
$ git show v1.1
commit 5ca1ebc2c32544c95651048803b8f0e169e84b44 (HEAD -> master, tag: v1.1, tag: show)
Author: nauosika <nauosikaforwork@gmail.com>
Date: Wed Sep 8 14:45:40 2021 +0800
second commit
就只會看到commit
資訊了。
也可對之前的commit
加上tag
(為了測試,我已經隨意commit兩次了)
$ git log --pretty=oneline
$ git log --oneline
以上兩種都可查詢commit
以一行顯示,--pretty=oneline
較完整。
我的畫面如下,你我亂數不會相同。(相同的話請通知我,我們一起買樂透。)
893441a25d2df27d488a208a336b60440e485e5a (HEAD -> master) fourth commit
c73366c08b26bfb23fec034f638f233c8d51b999 third commit
5ca1ebc2c32544c95651048803b8f0e169e84b44 (tag: v1.1, tag: show) second commit
d93894de082fe0f6a7f072ed5b293c1610b809d3 (tag: v1.0) 第一次commit
試著將第三次commit
加tag,不要用第四次,那並不是過去式。
$ git tag v1.2 c73366c08b26bfb23fec034f638f233c8d51b999
$ git show v1.2
commit c73366c08b26bfb23fec034f638f233c8d51b999 (tag: v1.2)
Author: nauosika <nauosikaforwork@gmail.com>
Date: Wed Sep 8 14:53:43 2021 +0800
third commit
刪除tag
也可以git tag -d <tagname>
。
另外標籤是不上傳到Github
的,需要以git push origin <tagname>
或一次性上傳git push origin --tags
。
整理:tag
是Git
提供的加註標籤功能,常用在增加版本號,或是對某次commit
再增加註解,使用tag
並不是再開一個分支。tag
有分lightweight
、annotated
兩種。
2.什麼是 Git flow?
開發流程,是一種規範,一種觀念,若是協作中開發者都有這種觀念,團隊可以減少許多不協調的狀況產生。
googleGit flow
可以看到許多圖片,另外如為你自己學git這本書中也有說明各種分支的說明以及以下這張圖
我試著以自己的瞭解說明看看。
Master分支(main分支)
Branch
的重要性。這段話是出自GitHub Flow Guide
。
Branching is a core concept in Git, and the entire GitHub Flow is based upon it. There's only one rule: anything in the master branch is always deployable.
分支是 Git 中的一個核心概念,整個 GitHub Flow 都基於它。只有一個規則:master 分支中的任何東西總是可部署的。
說明了除了應以master
作為部署外,其他分支上會有的操作都不應該在此分支上進行。
為你自己學git也提到了。
因為是穩定版本,所以通常也會在這個分支上的 Commit 上打上版本號標籤。
develop
與master
分支為一般流程中的主要兩大分支,當需要開發新功能時,都應由此分支來開Feature
或Release
分支出去進行處理。如果擁有良好的流程,通常只會有master
與develop
這個分支存在。
Hotfix
請只由master
開啟分支,Hotfix
就只做Hotfix
的事情,例如找出bug
,不再做新功能的增加。若有復數bug
,此分之的週期及所要做的事與Feature
一樣,越短越少較好。
為你自己學Git
Hotfix 分支修復完成之後,會合併回 Master 分支,也同時會合併一份到 Develop 分支。
避免錯誤再次出現。
等於記得有開Hotfix
,都需要merge
回去master
與develop
。
Feature
都由develop
開分支處理,為建立新功能用,剛有提到Feature
分支生命週期越短越好,這也不是一定要的,但如果真的進行的功能真的對自己而言太過龐大與困難,本來就該立即反應處理,是否再拆分或是停止由別人處理。
讓Feature
分支在外流浪遲遲不回歸Develop
除了管控困難,之後merge
回來產生衝突機率大以外,也會對整個團隊開發進度有所影響。
在分支命名上Feature
也是最為重要,看過一篇文章,不想被請喝咖啡,好好命名,一定要讓所有夥伴都知道你在做什麼。
Release
自己心裡戲稱為了master
與develop
更協調的第三者。
當Develop
分支將已完成的Feature
都收回,會merge
到Release
做上線前的測試,有些流程文章也常說,此階段會開始決定版本號,測試完成一樣會develop
與master
都合併一次。Release
最多只做只做debug
不要增加任何新功能。
以上是流程中常見的五個分支。
其他關於Git
的面試中可會被問到的大多為怎麼用,指令的意思,就不說明了。
最後關於Git
,是一種覺得麻煩,但是懂了後不用使用,會讓自己很不放心的存在。
今天的Leetcode561. Array Partition I
題目連結:https://leetcode.com/problems/array-partition-i/
題目重點:解答在例子1的第三個示範,還有例子2,已經告訴我們怎麼找出最佳配對。
# @param {Integer[]} nums
# @return {Integer}
def array_pair_sum(nums)
end
puts array_pair_sum([1,4,3,2]) #=> 4
puts array_pair_sum([6,2,6,5,1,2]) #=>9
直接看例子1的第三個示範
2.7.3 :058 > [1, 2].min + [3, 4].min
=> 4
2.7.3 :059 > [1, 4, 3, 2].sort
=> [1, 2, 3, 4]
2.7.3 :061 > [1, 2, 3, 4].each_with_index{|num, index| puts num if index.even?}
1
3
=> [1, 2, 3, 4]
等於是找sort
後,將位置
是偶數的相加。
例子2示範的最佳組合(2, 1), (2, 5), (6, 6)
其實也是(1, 2), (2, 5), (6, 6)
這樣排列。
2.7.3 :062 > [1, 2, 3, 4].index(1)
=> 0
2.7.3 :064 > [1, 2, 3, 4].index(1).even?
=> true
2.7.3 :065 > [1, 2, 3, 4].index(3).even?
=> true
所以是雙數位置的值的sum
就可以了。
def array_pair_sum(nums)
ans = 0
nums.sort!.each_with_index{|num, index| ans += num if index.even? }
ans
end
今日提到的
1.Git中的tag?
2.什麼是 Git flow?
3.Leetcode561. Array Partition I