CS61B結(jié)課筆記,感想,以及資源
我用到的各種資源的合集
(可能不是很全,有補(bǔ)充的可以評論區(qū)貼出來)
?
https://csdiy.wiki/
非常感謝CS自學(xué)指南讓我發(fā)現(xiàn)了許多好課
?
網(wǎng)上類似的經(jīng)驗(yàn)貼已經(jīng)很多了,這里就不贅述了直接上別人的貼子。
https://instant.1point3acres.com/thread/908806
(他的下半文章我沒找到,找到的可以評論區(qū)貼一下)
https://github.com/ZonePG/CS61B
(別人寫sp21留下的代碼,實(shí)在沒辦法的時候去看)
(寫gitlet的時候別看,他的merge我看著就……)
(代碼不復(fù)用,是這個樣子的。)
https://www.mcatin.com/index
(61B精譯在的地方,61B還是免費(fèi)的,61C就開始收費(fèi)了?=_=)
(蠻貴的,268,不過有分銷員系統(tǒng),當(dāng)分銷員的話別人點(diǎn)你的鏈接買課你可以得到10%的傭金,可以和基友py一下)
(比如這樣https://www.mcatin.com/h5/course-detail?id=17&share_source=1&distribute_uid=1131)
?(當(dāng)然也可以選擇網(wǎng)上的機(jī)翻)
https://sp21.datastructur.es/
課程主頁,lab以及project都在那里面
https://www.gradescope.com/
autograder的所在網(wǎng)站,邀請碼去自學(xué)指南61B那個地方找
https://joshhug.gitbooks.io/hug61b/content/
jush版本的61B課程配套教材
這里順便推薦一下他們的選讀課本,普林斯頓那本算法4(橙色封面的,應(yīng)該很好認(rèn))
?
一些雜七雜八的推薦
https://blog.csdn.net/li12ji34an/article/details/105821558
https://zhuanlan.zhihu.com/p/432135426
?
別人寫的學(xué)習(xí)總結(jié)
https://blog.csdn.net/fourier_transformer/category_9856976.html
https://blog.csdn.net/lindaicoding/article/details/119439923
(這里強(qiáng)調(diào)老師叫jush,不是josh)
?
關(guān)于配置環(huán)境
https://zhuanlan.zhihu.com/p/115229260
https://zhuanlan.zhihu.com/p/344813657
這里我只說交作業(yè)的東西,這個上傳到github用lab里面提供的東西,我這么也交不上去
最后我直接用gitbub做到那個GitHub?desktop?交了,效果一樣(也就是最后面那個鏈接里的東西)
(環(huán)境配了我5h,真正的開發(fā).jpg)
?
61B里面的style?與 debug?guide?我覺得蠻好的,額外貼出來
https://sp21.datastructur.es/materials/guides/style-guide.html
https://sp21.datastructur.es/materials/guides/debugging-guide.html
?
關(guān)于git,做gitlet之前可以了解一下(雖然我就看了個開頭)
https://www.liaoxuefeng.com/wiki/896043488029600
附上廖雪峰的教程
?
據(jù)說學(xué)完就可以leetcode刷題啦
https://leetcode.cn/
?
關(guān)于gitlet(proj2)(重要)
https://zhuanlan.zhi.com/p/533852291
https://zhuanlan.zhihu.com/p/496809425
我覺得61B的gitlet是我目前做過最難的一個project(我剛?cè)腴T)
里面各種各樣的東西花了我40~50h的時間(可能更多)
但是學(xué)完真的非常有收獲?。?/p>
我覺得我變強(qiáng)了,我這種剛?cè)腴T的菜雞居然可以寫出這樣的東西!
如果你有一顆勇敢的心,一定要去試試(即使你不學(xué)61B)
順便gitlet的這個項(xiàng)目,有大佬搞來了本地測試(參考知乎文章),真的非常厲害,我覺得這個至少節(jié)省了我至少8h!
感謝Null佬!以及abmdocrt
?
sp18與sp21的難度確實(shí)不一樣,sp18的作業(yè)比sp21的要多好多(我懶得寫了)
?
關(guān)于61B
最終自己考試分?jǐn)?shù)大概是222分(滿分300,不算附加題)
估計排名排的蠻后面的
而且這是我自己改的比較松,主要是改的難了這分?jǐn)?shù)就有點(diǎn)傷心了
我自己找到自己不少漏洞,估計寫點(diǎn)其他年份的考試可以發(fā)現(xiàn)更多,但懶得寫了......
以下是我的漏洞
1.????? 沒有掌握快速排序的實(shí)現(xiàn),然后導(dǎo)致分隔的具體過程出錯(很多東西自己推一邊可能不會忘)
2.????? 題目看錯好多,好多東西想的一樣,結(jié)果寫出來和他要求的有點(diǎn)不一樣,所以如果真的要嚴(yán)格改的話,估計200分都沒有……
3.????? 傳terator 的時候忘記加new,而且沒有直接把this傳遞進(jìn)去,用了一個比較蠢的等價
4.????? JAVA的private 以及外部的強(qiáng)制類型轉(zhuǎn)化
5.????? Hashcode的實(shí)現(xiàn),首先,hashcode必須是int,我不知道這個。。。。。
6.????? 數(shù)組的resize在部分題目也需要把他的時間成本考慮進(jìn)去
7.????? 關(guān)于Dijkstra’s Runtime,或者可以推廣到所有的圖,我們都需要考慮頂點(diǎn)和邊兩個東西,然后專門針對于這一題來講,主要有三個構(gòu)成,add,removeMin,changePiority,不同的操作針對的東西(圖和頂點(diǎn))需要分開來分析,上圖的時候就記了一個結(jié)論了,沒有搞清楚這里的推導(dǎo)過程,結(jié)果暴雷了。
8.????? 沒有考慮負(fù)數(shù)的情況,我的代碼有bug
學(xué)習(xí)時長
大約200h左右(包含項(xiàng)目)就能學(xué)完(這里針對初學(xué)者,比如我)
(前四周JAVA基礎(chǔ)語法,5~11數(shù)據(jù)結(jié)構(gòu),11~排序算法以及補(bǔ)充)
拋開數(shù)據(jù)結(jié)構(gòu)我想說的是,61B對數(shù)據(jù)結(jié)構(gòu)的講解并沒有十分的深入,相反的,61B補(bǔ)充了許多和數(shù)據(jù)結(jié)構(gòu)無關(guān)的東西
比如說教你DEBUG,寫Unit?Test,軟件工程,(甚至后面還有道德理念,團(tuán)隊(duì)協(xié)作之類的水課)
我個人聽了覺得還是蠻受用的。教的也非常通俗易懂。
作業(yè)甚至擁有風(fēng)格檢查環(huán)節(jié)(保持良好排版習(xí)慣是必要的)
?

(這就是我被扣了160分的理由嘛)
?
?
關(guān)于project
61B(sp21版本)可以基本說是項(xiàng)目驅(qū)動的了,畢竟作業(yè)少了很多
從61A開始,每次看項(xiàng)目說明我就能看上好久,經(jīng)常看的我頭疼。非常鍛煉人的英語能力,每次寫完項(xiàng)目都有一種劫后余生的感覺。
(請拒絕使用網(wǎng)頁的全文翻譯,谷歌翻譯的全文也不行,閱讀英語文檔的能力是編程人員的一種基本功。)
(寫這段感慨的時候我還沒寫gitlet,現(xiàn)在寫完gitlet,現(xiàn)在我覺得其他的項(xiàng)目說明真的太友好了!?。ㄖ辽匍L度是這個樣子的,gitlet有1.4w的說明,看說明看了我兩天)
?
你如果有對應(yīng)的屬性的話(是個M)在項(xiàng)目完結(jié)的那一刻,真的可以感受到那種非常激動的感覺。
(git寫最后面merge的重構(gòu)的時候,寫到晚上一點(diǎn))
在project1的時候,我還只是一只雞,只能寫出雙端隊(duì)列的實(shí)現(xiàn)形式,但是在我寫完基本數(shù)據(jù)結(jié)構(gòu)以及基本的動作邏輯后
撥出音符的那一刻我是很激動的
(相信我,對一只雞而言這個已經(jīng)很痛苦了,這么多bug,你總能寫出來其中的(十)幾個的,況且中間發(fā)現(xiàn)前面寫的實(shí)在是太爛了,我把前面的代碼全部刪掉重寫了)
當(dāng)我后面使用老師提供的TTFAF(through?the fire and flame,不過我不知道在哪里聽)聽歌的時候,我整個人都沉沒在一種幸福之中
我目前在國內(nèi)還沒上到這樣的課(主要是我現(xiàn)在才大一),但我覺得能學(xué)這么厲害,這么用心寫出來的東西能學(xué)習(xí)是我的榮幸。
?
關(guān)于gitlet(proj2)
真的非常棒
足足把我碾了五遍?。ǖ谝淮螘r讀文檔說明的時候)
大概有4次大改,第1次是邏輯都不通暢,第2次是代碼實(shí)在是太繁瑣,第3次是持久性亂寫,存儲的東西亂七八糟的,第四次是merge沒有復(fù)用,把我寫麻了
(寫了5h的代碼說刪就刪了…..)
我覺得做一個類似于這樣的項(xiàng)目真的可以改掉很多人編程的不良風(fēng)格(如果你愿意重構(gòu)你的代碼的話),良好的風(fēng)格本身就是為了節(jié)約時間,降低復(fù)雜度的,做這個項(xiàng)目的時候我主動的去了解了一些軟件工程以及代碼編寫之類的知識。同時對自己寫了比較詳細(xì)的注釋(因?yàn)樽约河悬c(diǎn)看不懂自己寫的東西了)
John hug 在課程中提到paul(61A那個老教授)使用的gitlet項(xiàng)目好像比這個要難的多,有興趣的話你們也可以試試他的。
Ps.這門課Paul?Hill?finger?也教過(而且比較難)
我選用的是fa21版本的課程(因?yàn)橛芯g),然后采用的是sp21的作業(yè),(順帶一提同樣開放autograder的好像還有sp18,不過好像sp21的在今年年底會關(guān)閉lab的autograder?)
老教授好像今年退休了(2022),作為看過他61A教學(xué)視頻的云學(xué)生,我還是很尊敬他的。

?

?
大家的時間開銷大概是這個樣子的(jush說自己可能要20h)
有一說一看伯克利學(xué)生說gitlet難的時候我還是非常開心的(你小子也有今天)
?
一點(diǎn)感慨
真的是一門好課,也許做的時候,心態(tài)會有點(diǎn)炸,重構(gòu)代碼的時候,精神會有點(diǎn)崩潰,但一切都是值得的。
(最后調(diào)proj3的時候漏看了需求,成功的把我心態(tài)弄炸了,大不了就autograder沒有滿分嘛,我做游戲自己能玩就行。)
分享一下筆記
?

?
正經(jīng)內(nèi)容已經(jīng)說完了,下面是上課時的我覺得有趣的部分
(和61B關(guān)系不大,只是分享點(diǎn)有趣的東西,覺得浪費(fèi)時間可以跳過)
在這門課你會看到
·超級棒而且聰明的的老師(而且有點(diǎn)禿)
?

?

·JUJU的奇妙比喻


?

?
·平易近人的話題(指被父母揍)
?

甚至有次講座diss了一下龍珠Z
(此處應(yīng)有圖片)
?
·還沒瞎但是已經(jīng)沒手了的星際選手
?

?

(那個時候的鉑金相當(dāng)于現(xiàn)在的接近大師?(段位分布重新調(diào)整過))
?在課堂上打開有道精品課


?
?

?

?

我爸是李剛

(有一說一,jush可能不知道這個是什么梗)
?
?
碎碎念,
他雖然說自己是個無政府主義者但是聽他的描述真的有點(diǎn)像馬克思主義者
他和John?Nero(61A很經(jīng)典的那個版本)?關(guān)系蠻好的(他自己說的,順便提了一句自己和很多老師都很熟)
他自己不是很喜歡gitlet(壓力太大了(讓他))但是數(shù)據(jù)上來看gitlet很好,因?yàn)閿?shù)據(jù)驅(qū)動,他把gitlet留下來了。
順便,jush的本科學(xué)的是EE,他面試工作的時候才第一次學(xué)數(shù)據(jù)結(jié)構(gòu)(可怕=_=)
?
?最后
感謝這兩個月來的陪伴,這段時間真的非常的有價值。
最后的最后,就像summary里面大家說的那樣吧?
Bye?Jush!
Thank you.