如果单纯从学习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 <[email protected]>
Date: Wed Sep 8 14:37:03 2021 +0800
First time use git tag
commit d93894de082fe0f6a7f072ed5b293c1610b809d3 (HEAD -> master, tag: v1.0)
Author: nauosika <[email protected]>
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 <[email protected]>
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 <[email protected]>
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
<<: 不只懂 Vue 语法:Vue 的 MVVM、渐进式框架、宣告式渲染是指什麽?
前言 每当我们修改工作表或者仪表板的时候,Tableau Desktop 会立即进行运算以显示出对应...
MVC介绍 希望能将复杂的东西简单化 如果给我一句话我会说下面这句 Model、View、Contr...
事前提要: 本 API 系为 永丰金 PYTHON API,尚未申请的朋友们,有两个方法可以申请 洽...
别再用 setTimeOut、setInterval 写动画啦! 如果你有用 js 写过动画,那通...
建立资料仓库是一个解决企业资料问题应用的过程,是企业资讯化发展到一定阶段必不可少的一步,也是发展资...