新生入坑指南

祝贺大家进入北京林业大学信息学院,成为一名大学生!大学是我们从校园生活到社会过渡的关键结点,也一定会成为大家心中最为宝贵的回忆。也许大家可能对未来还有所顾虑,或者是不知道从何开始。作为北林计协的会长,我希望能够写一篇文章,把自己的一些心得分享给大家。全文都是我写的哦~

北林计协

一 一些大家可能比较关心的事情#

进入大学,就不单单是高中时代的全身心投入高强度的学习了,大家会遇到更广阔的天地,遇到更多优秀的人。也许会有声音告诉你,“没有挂过科的大学是不完整的大学”,或者是“大学就是用来玩的“,但是,千万不要听信这样的话,这只会给自己的未来挖坑。在最开始,先说一些大家可能会遇到的困惑吧。

关于成绩和挂科#

在高中,高考决定你能去哪里,而不是平时的任何一次考试。但在大学,你的成绩是由各个科目按照学分大小进行加权平均的。成绩的排名也是按照这个加权平均数进行排名。

如果挂科,直接取消评优、保研资格,即使补考或重修通过也会取消这些资格,所以,让自己一定不要挂科!

所以,如果让自己挂科,相当于让自己的未来少了一些选择和可能。如果临近毕业还有没有通过补考或重修通过的挂科科目,那么会影响到毕业。

关于学分#

学分是衡量你能否毕业的一个重要指标,也是计算成绩的权值。一门课,学分越高,对你最终成绩的影响就越大。因此,学分高的科目务必谨慎对待。比如高等数学上和下,每个都是5.5学分,比如毛概,5学分。这些科目的影响至关重要,一定要努力对待!

关于选修课#

根据要求,大家一定得选够足够学分的选修课。

为了方便大家理解,我直接按照类别来说。

至于如何选课,选课季的通知会给的比较详细。

**如果有出入,请参阅最新的培养方案:点击进入学院培养方案页面**,里面都是最权威、准确的信息。以下内容是个人经验,供参考。

关于学生组织和社团#

不是必须加入的,看个人兴趣。大家可以权衡利弊来看对自己的好处和坏处。

大家如果加入组织和社团,就好好在里面和大家相处,好好做自己的任务。如果感觉实在不合适,要勇于表达自己的想法。加入学生组织是有量化加分的。这个加分和班委等不叠加。

1 公共选修课(除视频课和体育选修课)#

视频课和体育选修课比较特殊,单独说。

image-20200822221136406

如图所示,可以看到公共选修课分为4类。每一类至少都一门(1.5学分)才能达到毕业要求。

选课前大家互相传一传选课攻略,可以在朋友圈等地方问一问一门课如何,给分如何。希望大家都能找到给分高、有趣生动的课。

关于体育选修课,我个人是大一大二上必修的体育课,大三再选体育选修课。个人行为,供参考。

2 视频课#

视频课从我们那年(2018)开始多了一个慕课或学堂在线的“精品课程”,这个可以得到较多的学分,也很容易得高分!每年选课季大家都可以选一门慕课,可以提高自己的学分绩。

一定要注意:一定要常看截止日期!很多学长学姐(包括我)就被这个坑了,因为错过互评作业的截止日期,一个99分的课被降到了90分,血亏啊~

3 专业选修课#

专业选修课分为本专业选修课跨专业选修课,我们18年入学的学长学姐要求加起来至少32学分,本专业选修课至少24学分才能毕业。根据2019年新培养方案,16学分即可。

这个看培养方案,然后跟着上就可以了。大三大四的这样的课非常多,所以也不用过于着急,按部就班就行。

4 暑期学期#

暑期学期是这几年的新鲜事物。一般每年7月初考完下学期的所有考试,之后进行为期两周的暑期学期。

根据要求,至少选够3学分暑期课才能毕业。暑期课的学分可以转换为专业选修课的学分,在开学后申请。

由于疫情,2020年没有暑期学期,因此18、19级的毕业要求变成了1.5学分的暑期选修课。

关于英语四六级#

英语四级是毕业的最低要求,六级是走入职场、更高的学府一个很重要的指标。

我的四六级

上面是我四六级的成绩,希望能和大家一起进步哦~

最早什么时候能考?根据学校的规定,我们最早大一下的6月可以考四级,如果四级通过之后就可以考六级。注意,四级如果通过则不允许再考,但是六级允许多次考试,取最高分。这个也叫做“六级刷分”,可以多试几次。

关于口语,其实作用不大,可以不去考。如果想去体验下也可以。

每年四六级考两次,6月和12月的第三个星期六。不过今年情况特殊,咱们学校不组织6月(推迟到9月)的考试了。

满分都是710分,425分通过。如果一次性通过(第一次考就直接达到通过分),量化加3分。如果600分以上,量化加6分。

关于计算机等级考试:信息学院的学子不用考#

身为信息学院的学子,大家的一个福利就是,毕业证相当于计算机四级通过!所以,大家不用考这个证!

关于量化:重要,但是优先级在学习之后#

量化,是衡量你在成绩之外的表现如何的指标。比如,你参加了多少科研竞赛、参与了多少课外活动等。量化满分100分,在进行奖学金评定时乘以0.07,折算到满分7分。

量化重要吗?看你在什么地方。如果想评奖学金或者保研,那么就重要,但优先级一定排在学习成绩之后。如果是考研或者就业,可能量化的要求相对低一些。

怎样获得量化?量化会分为大致如下方面:德智体美劳。

如果在班级中担任班委、在学生组织中担任职务,都可以获得加分。在科研和竞赛上加分是没有封顶的!参加竞赛获奖,或者发表论文、申请专利或软件著作权,都可以得到加分。另外,四六级也有加分。参与志愿活动可以得到加分。参加学院、全校的大型小型活动,如运动会、比赛等都有加分。

关于二课堂#

二课堂是有学分的。每学年至少5个可以获得1学分,必须拿到3学分。

翻译:大家大一大二大三每学年多参与点活动,拿到这3学分。

二 我认为比较不错的入坑途径#

以下仅代表个人观点,希望对大家有所帮助。

第0步 我能学会计算机嘛?#

如果你满足以下条件:

  • 会开机
  • 会打字
  • 会上网,会聊QQ或者微信

那么恭喜你,你能学会。

第1步 C语言 —— 资源推荐#

我以计协会长的名义强烈推荐翁恺老的C语言慕课!

完全免费,适合零基础。

我当年高考完的暑假用大概3周学完了他的这套课,然后在学校的C语言基本上完全无压力咯!上课非常轻松地查漏补缺,感受一下这位老师的魅力吧!

C语言程序设计入门

C语言程序设计进阶

两门课循序渐进,从零基础到能够轻松应对C语言!

当然,B站上也有:B站视频链接

学习建议:

image-20200822232511191image-20200822232622605

这两门课涵盖了开学可能讲到的C语言的全部内容,甚至更多。强烈推荐大家去学习!

第二步 计算机导论 —— 计算机导论永远在路上#

计算机导论是大家接触到的第一门概论性质的课。而如果它能让我们迅速建立起对计算机整体的认知,那么一定能为以后铺下很好的基础。

在这里推荐以下资源:

第三步 数理基础 —— 科学是计算机能诞生的基石#

因为本文面向新生,所以列举了大一可能会遇到的。

高等数学 国防科大:如果你在高数学习中哪里没掌握特别好,就来这里看看吧!有严密的思维、严格的推理和证明,高数学习中遇到困难就来国防科大的高数课里寻找答案吧。

线性代数的本质:上线性代数前的先修课!直观地看一看为什么要有线性代数,能解决什么问题?学了这个,对线代的理解甚至可以更上层楼。

Gilbert - Linear Algebra 麻省理工 线性代数:学着英语就把线代学了😂值得推荐的视频课。

电工学(电路与电子学基础):这是大一下的课程,所以不着急学哈!这个老师的课讲的很清晰。建议拿一个笔记本自己去学,去记录,和老师一起思考,超极有帮助!

其他#

三 寄语#

珍惜时光 活出自我#

进入大学,愿能够好好学习,同时多见见外面的世界,开拓自己的视野。大学时光非常宝贵,不虚此行!

欢迎加入北林计协#

北林计协是一个学生社团,由信息学院负责指导。里面有技术部,会进行电脑的维修、硬件的交流;有网络部,会讲解网络基础知识,并且一起做点开发;有翻译部,会翻译文献和视频;有传媒部,是运营公众号等新媒体平台的部门,对外宣传的窗口。欢迎新生加入北林计协网络部!

Git学习(更新中…)

Git学习笔记#

[TOC]

根据廖雪峰博客《Git教程》整理。

1 什么是Git#

  • 分布式:

相比“集中式”:中央服务器,联网

分布式不需要中央的服务器,每个人都有一套完整的版本库。

功能很强大,简单易用。

2 安装Git#

3 创建版本库#

3.1 什么是版本库#

又名仓库,英文是repository,就是一个文件夹。而这个文件夹里面的所有东西全部被管理起来。

因此,创建一个版本库,只要创建一个文件夹就好了。

另,建议不要在路径里面出现任何中文,否则可能会出现奇奇怪怪的问题。

举例:

![image-20200816162401990](D:\Document\Typora Images\image-20200816162401990.png)

如图所示,我在桌面下创建了一个GitLearn的文件夹,并且进入这个文件夹,使用git init命令完成了初始化。

进入gitLearn文件夹,发现多了一个隐藏的文件夹.git,这就是用来管理的。所以没事不要动哦~

![image-20200816162514143](D:\Document\Typora Images\image-20200816162514143.png)

3.2 把文件添加到版本库#

写一个readme.txt

![image-20200816163500148](D:\Document\Typora Images\image-20200816163500148.png)

然后告诉Git自己是谁

![image-20200816164022625](D:\Document\Typora Images\image-20200816164022625.png)

然后进行add和commit。

![image-20200816164105269](D:\Document\Typora Images\image-20200816164105269.png)

git commit -m "注释"尽量要写清楚注释是干什么的。

如图,告诉我1个文件被改动,增加了2行。

第一步是去添加文件,第二步是一次性把所有更改都提交上去。

小结:

第一步git add <filename>

第二步git commit -m "注释"

4 时光机穿梭#

修改了一下这个文件:

![image-20200816164707559](D:\Document\Typora Images\image-20200816164707559.png)

并且使用git status查看当前状态。

![image-20200816164741615](D:\Document\Typora Images\image-20200816164741615.png)

告诉我有个文件被修改了但是还没提交。

我们用git diff查看是哪里被修改了。

![image-20200816164903554](D:\Document\Typora Images\image-20200816164903554.png)

然后进行提交:

![image-20200816165003666](D:\Document\Typora Images\image-20200816165003666.png)

4.1 版本回退#

再次改动,追加了一个hohoho。

![image-20200816165538757](D:\Document\Typora Images\image-20200816165538757.png)

每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:

![image-20200816165723675](D:\Document\Typora Images\image-20200816165723675.png)

精简:git log --pretty=oneline

![image-20200816165835643](D:\Document\Typora Images\image-20200816165835643.png)

每提交一个新版本,实际上Git就会把它们自动串成一条时间线。如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线:

![image-20200816170015605](D:\Document\Typora Images\image-20200816170015605.png)

如上图,可以用可视化工具看清楚时间线。

现在我们把他恢复到第二个版本。

在Git中,用HEAD表示当前版本,也就是最新的提交f74bcd...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

现在,我们要把当前版本append hohoho回退到上一个版本add some !,就可以使用git reset命令:

![image-20200816170559622](D:\Document\Typora Images\image-20200816170559622.png)

打开这个readme.txt,发现已经变成了第二个版本!

![image-20200816170649145](D:\Document\Typora Images\image-20200816170649145.png)

我们再git log一下:

![image-20200816170731149](D:\Document\Typora Images\image-20200816170731149.png)

没有第三个版本了!不过没关系,想要恢复,我们用哪个一长串ID即可。

![image-20200816170901607](D:\Document\Typora Images\image-20200816170901607.png)

如图,恢复成功。再看看readme.txt的内容:

![image-20200816170940232](D:\Document\Typora Images\image-20200816170940232.png)

背后的原理:有一个head指针,仅仅移动head指针,用head指针表示当前版本。

如果找不到这个ID了怎么办?有一个记录了所有命令的文件:

git reflog

![image-20200816171128278](D:\Document\Typora Images\image-20200816171128278.png)

这样又可以找到了。

4.2 工作区和暂存区#

  • 工作区:电脑里能看到的目录 比如gitLearn
  • 版本库 Repository:.git

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

git-repo

(图片来自廖雪峰的Git教程)

现在加一行:

![image-20200816173439892](D:\Document\Typora Images\image-20200816173439892.png)

再创建一个LICENSE文件:

![image-20200816173530009](D:\Document\Typora Images\image-20200816173530009.png)

现在的状态:

![image-20200816173555093](D:\Document\Typora Images\image-20200816173555093.png)

都add,然后这两个文件都在暂存区stage了。最后commit:

![image-20200816173753435](D:\Document\Typora Images\image-20200816173753435.png)

此时暂存区的内容提交到了master,stage被清空了。

4.3 管理修改#

Git管理的是修改,而不是文件。

![image-20200817144218041](D:\Document\Typora Images\image-20200817144218041.png)

加上一行内容。

提交查看status并再次修改。

![image-20200817144356383](D:\Document\Typora Images\image-20200817144356383.png)

直接commit。

![image-20200817144446946](D:\Document\Typora Images\image-20200817144446946.png)

查看status:

![image-20200817144604210](D:\Document\Typora Images\image-20200817144604210.png)

这里面告诉我我没有成功提交修改。no changes added to commit

这说明,必须add提交到暂存区,再commit把暂存区的内容提交到仓库里面。

使用git diff HEAD -- readme.txt查看区别。

![image-20200817144758399](D:\Document\Typora Images\image-20200817144758399.png)

4.4 撤销修改#

当你修改的内容是错误的,如何恢复?

如果不小心加了一行胡话:

![image-20200817145324887](D:\Document\Typora Images\image-20200817145324887.png)

4.4.1 还没add#

手动删除最后一行。

也可以用命令:

![image-20200817145554431](D:\Document\Typora Images\image-20200817145554431.png)

git checkout -- readme.txt

git restore readme.txt

4.4.2 add了#

![image-20200817145735402](D:\Document\Typora Images\image-20200817145735402.png)

然后git status一下:

![image-20200817145836287](D:\Document\Typora Images\image-20200817145836287.png)

1
git restore --staged .\readme.txt

用此命令即可。

此时git status发现暂存区没有被修改,但是本地还是有修改。于是用之前的git restore readme.txt即可成功复原。

4.4.3 commit了#

使用版本回退。当然,前提是还没有push到远程库,否则就真的惨了。

4.5 删除文件#

创建了一个新的文件stupidBoss.txt,然后对其进行提交。

![image-20200817151335210](D:\Document\Typora Images\image-20200817151335210.png)

现在我发现这个文件不能提交,需要删除。

直接在本地删除:

![image-20200817151418165](D:\Document\Typora Images\image-20200817151418165.png)

然后git status

![image-20200817151436652](D:\Document\Typora Images\image-20200817151436652.png)

现在有两种情况:第一,真的要从版本库里也删掉。第二,删错了,老板就是stupid。

如果也要从版本库删掉,那么先git rm stupidBoss.txt,然后再git commit就行了。

![image-20200817151711277](D:\Document\Typora Images\image-20200817151711277.png)

如果删错了,可以从版本库里面恢复:

git checkout -- stupidBoss.txt

![image-20200817151955196](D:\Document\Typora Images\image-20200817151955196.png)

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

5 远程仓库#

使用GitHub来玩玩。

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

1
$ ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

![image-20200817153320210](D:\Document\Typora Images\image-20200817153320210.png)

然后在GitHub上创建一个SSH key。

![image-20200817153427047](D:\Document\Typora Images\image-20200817153427047.png)

5.1 添加远程仓库#

先在GitHub上创建一个仓库。

![image-20200817153648493](D:\Document\Typora Images\image-20200817153648493.png)

在本地进行关联:

![image-20200817153847240](D:\Document\Typora Images\image-20200817153847240.png)

然后push到远程:

![image-20200817153955271](D:\Document\Typora Images\image-20200817153955271.png)

哇!push成功啦!

![image-20200817154012876](D:\Document\Typora Images\image-20200817154012876.png)

从现在起,只要本地作了提交,就可以通过命令:

1
$ git push origin master

把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!

5.2 从远程库克隆#

先创建一个带README.md的远程仓库。

![image-20200817154422677](D:\Document\Typora Images\image-20200817154422677.png)

然后克隆到本地。

1
$ git clone git@github.com:michaelliao/gitskills.git

![image-20200817154553939](D:\Document\Typora Images\image-20200817154553939.png)

下面进入gitskills文件夹:

![image-20200817154648913](D:\Document\Typora Images\image-20200817154648913.png)

可以使用https,ssh等协议,但ssh最快。

6 分支管理#

如果自己想要开发别的新功能,但是不影响别人的使用,那么自己先在自己的分支里开发,到最后再合并即可。

6.1 创建与合并分支#

首先,我们创建dev分支,然后切换到dev分支:

1
2
$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

1
2
3
$ git branch dev
$ git checkout dev
Switched to branch 'dev'

然后,用git branch命令查看当前分支:

1
2
3
$ git branch
* dev
master

git branch命令会列出所有分支,当前分支前面会标一个*号。

然后,我们就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行:

1
Creating a new branch is quick.

然后提交:

1
2
3
4
$ git add readme.txt 
$ git commit -m "branch test"
[dev b17d20e] branch test
1 file changed, 1 insertion(+)

现在,dev分支的工作完成,我们就可以切换回master分支:

1
2
$ git checkout master
Switched to branch 'master'

切换回master分支后,再查看一个readme.txt文件,刚才添加的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变:

git-br-on-master

现在,我们把dev分支的工作成果合并到master分支上:

1
2
3
4
5
$ git merge dev
Updating d46f35e..b17d20e
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)

git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。

合并完成后,就可以放心地删除dev分支了:

1
2
$ git branch -d dev
Deleted branch dev (was b17d20e).

删除后,查看branch,就只剩下master分支了:

1
2
$ git branch
* master

因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

switch#

我们注意到切换分支使用git checkout <branch>,而前面讲过的撤销修改则是git checkout -- <file>,同一个命令,有两种作用,确实有点令人迷惑。

实际上,切换分支这个动作,用switch更科学。因此,最新版本的Git提供了新的git switch命令来切换分支:

创建并切换到新的dev分支,可以使用:

1
$ git switch -c dev

直接切换到已有的master分支,可以使用:

1
$ git switch master

使用新的git switch命令,比git checkout要更容易理解。

分支操作小结#

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>或者git switch <name>

创建+切换分支:git checkout -b <name>或者git switch -c <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

6.2 解决冲突#

![image-20200817194958999](D:\Document\Typora Images\image-20200817194958999.png)

![image-20200817194757912](D:\Document\Typora Images\image-20200817194757912.png)

(VSCode可以直接识别出来)

![image-20200817195035590](D:\Document\Typora Images\image-20200817195035590.png)

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

git log --graph命令可以看到分支合并图。