我在康奈爾學(xué)CS,這學(xué)期的CS2110這門課學(xué)得不是很好,對考試把握不是很大,想提前準(zhǔn)備復(fù)習(xí),請問期末考試有哪些考點?老師能輔導(dǎo)嗎?
康奈爾大學(xué)的CS2110(面向?qū)ο缶幊毯蛿?shù)據(jù)結(jié)構(gòu))課程探討了軟件工程概念。同時,通過主要編程語言Java,介紹了面向?qū)ο缶幊痰幕A(chǔ)理念,包括對象、類、子類型、封裝和多態(tài)性。此外,還研究了各類算法(排序、搜索、遍歷)及數(shù)據(jù)結(jié)構(gòu)(包括列表、棧、隊列、樹、堆、哈希表和圖)的性能表現(xiàn)。最后,引入了并發(fā)編程與事件驅(qū)動編程等替代性編程范式。針對CS2110考試,我們總結(jié)了可能會出現(xiàn)的考點,希望能幫助你更有針對性的進(jìn)行考前復(fù)習(xí)。
一、CS2110課程目標(biāo)
1、運(yùn)用遞歸與面向?qū)ο缶幊谈拍睿ㄈ珙?、接口、多態(tài)性、繼承)解決計算問題。
2、基于英文規(guī)格說明書設(shè)計、實現(xiàn)并驗證非簡單Java程序,運(yùn)用封裝與單元測試等特性提升可維護(hù)性。
3、分析算法與程序的漸近復(fù)雜度,評估其運(yùn)行時間與內(nèi)存需求。
4、實現(xiàn)基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)(動態(tài)數(shù)組、鏈表、二叉搜索樹、堆、哈希表、鄰接表)并在程序中應(yīng)用。
5、構(gòu)建并修改基于Java的事件驅(qū)動圖形用戶界面(GUI)。

二、CS2110考試重點
1、基礎(chǔ)知識
闡釋靜態(tài)類型與動態(tài)類型編程語言的差異。
確定包含一個或多個運(yùn)算符、方法調(diào)用及/或隱式/顯式類型轉(zhuǎn)換的表達(dá)式的靜態(tài)類型。
繪制內(nèi)存圖以可視化涉及多重方法調(diào)用及/或遞歸的程序執(zhí)行狀態(tài)。
闡述Java在內(nèi)存中存儲和引用對象的方式。
利用Java文檔定位實現(xiàn)特定功能的方法,并成功將其整合到程序中。
繪制對象圖以可視化引用類型。
編寫涉及數(shù)組的Java程序,運(yùn)用索引語法和數(shù)組字面量。
編寫并執(zhí)行使用程序參數(shù)的Java代碼。
根據(jù)方法規(guī)范開發(fā)Java方法,整合一種或多種(可能嵌套)控制結(jié)構(gòu),如if語句、循環(huán)、for循環(huán)、else循環(huán)、while循環(huán)。
根據(jù)規(guī)范開發(fā)Java遞歸方法。
識別并解釋含錯誤的Java代碼中的問題,無論是否借助計算機(jī)。
2、軟件開發(fā)
根據(jù)方法簽名及其行為的英文描述編寫詳細(xì)的JavaDoc規(guī)范。
闡述軟件開發(fā)中的客戶方與實現(xiàn)方角色。
根據(jù)方法規(guī)范和簽名識別其先決條件、后置條件及副作用。
將防御性編程實踐(如先決條件檢查和不變量斷言)融入代碼。
僅憑方法規(guī)范和簽名編寫全面的單元測試。
評估單元測試套件對方法或類的覆蓋率。
闡述測試驅(qū)動開發(fā)流程及其潛在優(yōu)勢。
說明黑盒測試與玻璃盒測試的差異。
描述涉及數(shù)組的迭代方法的循環(huán)不變式,并用圖示可視化呈現(xiàn)。
運(yùn)用數(shù)組圖開發(fā)迭代方法。
為使用范圍表示法的數(shù)組方法編寫精確規(guī)范。
闡釋異常機(jī)制及其與規(guī)格說明、防御性編程的關(guān)系。
編寫拋出、傳播及處理異常的代碼。
3、復(fù)雜度分析
說明采用漸近分析與性能測試評估代碼效率的優(yōu)勢差異。
確定包含一個或多個循環(huán)及/或方法調(diào)用的代碼段的漸近時間復(fù)雜度與空間復(fù)雜度。
判斷給定(數(shù)學(xué))函數(shù)是否屬于特定大O復(fù)雜度類。
比較線性搜索與二進(jìn)制搜索的異同。
確定遞歸方法的調(diào)用次數(shù)及調(diào)用棧最大深度,并據(jù)此計算其時間與空間復(fù)雜度。
比較插入排序、歸并排序和快速排序算法,討論時間/空間復(fù)雜度及穩(wěn)定性等特性。
4、面向?qū)ο缶幊?/strong>
根據(jù)類描述,識別其狀態(tài)與行為,并據(jù)此勾勒其字段與公共方法簽名。
識別類的恒定條件,編寫代碼以維持該恒定條件并/或驗證其成立。
比較靜態(tài)方法與實例方法的異同。
根據(jù)給定規(guī)范編寫實例方法,實現(xiàn)對對象字段值的訪問和/或修改。
繪制內(nèi)存圖以可視化涉及實例方法調(diào)用的代碼狀態(tài)。
確定變量的作用域與生命周期。
闡釋面向?qū)ο蠓庋b原則及其優(yōu)勢。在給定代碼中識別正確與錯誤封裝的實例。
比較接口、抽象類與(具體)類的異同。
根據(jù)給定狀態(tài)表示的規(guī)范實現(xiàn)接口。
比較靜態(tài)類型與動態(tài)類型的異同。
列舉三種允許子類型替換的情境。
闡述面向?qū)ο蟠a中運(yùn)用多態(tài)性的優(yōu)勢。
描述動態(tài)分派原理與編譯時引用規(guī)則。
解釋繼承關(guān)系及其相較于接口的優(yōu)劣勢。
基于父類,運(yùn)用繼承機(jī)制開發(fā)一個或多個子類。
為給定字段或方法確定正確的可見性修飾符(public/protected/private),并說明選擇依據(jù)。
追蹤包含以下任一元素的代碼片段執(zhí)行流程:繼承、重寫方法及super調(diào)用。
判斷類是否可變。
闡釋關(guān)鍵字的語義含義。final
描述運(yùn)算符與方法的語義差異,并根據(jù)具體場景確定適用方案。==equals()
識別類中定義的equals()方法要求,并在用戶自定義類中重寫該方法。Object
5、線性數(shù)據(jù)結(jié)構(gòu)
闡述數(shù)據(jù)結(jié)構(gòu)與抽象數(shù)據(jù)類型的區(qū)別。
實現(xiàn)包含一個或多個泛型參數(shù)的泛型類或方法。在客戶端代碼中使用泛型類。
描述自動裝箱與自動拆箱的語義,并在代碼片段中定位其發(fā)生位置。
利用模板方法模式為抽象數(shù)據(jù)類型實現(xiàn)抽象測試套件。
比較普通Java數(shù)組與動態(tài)數(shù)組類型(如Java的ArrayList)的行為差異。
比較基于動態(tài)數(shù)組實現(xiàn)的List與基于鏈表實現(xiàn)的List的性能表現(xiàn),判斷特定用例中更優(yōu)方案。
繪制對象(或節(jié)點)圖以可視化鏈表數(shù)據(jù)結(jié)構(gòu)。在鏈表數(shù)據(jù)結(jié)構(gòu)上實現(xiàn)方法。
描述Iterable和Iterator接口的應(yīng)用場景。
為指定數(shù)據(jù)結(jié)構(gòu)類實現(xiàn)Iterator接口,并以客戶端身份使用迭代器。
闡述迭代器模式及其與傳統(tǒng)迭代器的差異。
識別并定義函數(shù)接口,使用lambda表達(dá)式實現(xiàn)。
分析棧與隊列數(shù)據(jù)結(jié)構(gòu)的應(yīng)用場景。
闡述組合關(guān)系及其優(yōu)于繼承的適用情境。
6、樹數(shù)據(jù)結(jié)構(gòu)
識別樹中父節(jié)點、子節(jié)點、根節(jié)點、葉節(jié)點、祖先節(jié)點及后代節(jié)點。
給定一棵樹,確定其大小、高度、節(jié)點深度及元數(shù)。
編寫通用樹與二叉樹的遞歸方法。
根據(jù)二叉樹結(jié)構(gòu)圖,輸出其節(jié)點的前序遍歷、中序遍歷和后序遍歷結(jié)果,并反向推導(dǎo)。
在樹上實現(xiàn)迭代器。
描述二叉搜索樹不變式,判斷給定樹是否滿足該條件。
闡述Comparable與Comparator接口的應(yīng)用場景。
解釋泛型類型邊界的語義并編寫包含該特性的代碼。
編寫修改二叉搜索樹的方法,同時保持其不變式。
分析二叉搜索樹上給定方法的時間/空間復(fù)雜度。
描述堆的不變性,判斷給定二叉樹是否滿足這些條件。
在堆的樹形表示與數(shù)組表示間進(jìn)行轉(zhuǎn)換。
實現(xiàn)堆的操作并計算其時間/空間復(fù)雜度。
使用堆實現(xiàn)優(yōu)先隊列并分析其性能。
7、高級數(shù)據(jù)結(jié)構(gòu)
描述集合(Set)和映射(Map)抽象數(shù)據(jù)類型(ADT)的操作。
編寫使用集合和映射的程序。
比較基于數(shù)組、排序數(shù)組、(平衡)二叉搜索樹和哈希表實現(xiàn)的集合的效率。
使用函數(shù)式接口實現(xiàn)數(shù)據(jù)結(jié)構(gòu)上的操作。
使用映射實現(xiàn)動態(tài)優(yōu)先隊列,并分析其操作的空間/時間復(fù)雜度。
識別哈希算法的步驟,并描述優(yōu)質(zhì)哈希函數(shù)的特性。
可視化哈希表執(zhí)行特定操作序列后的狀態(tài)。
描述鏈表法與探測法處理沖突的哈希表差異,并指出各自適用場景。
實現(xiàn)基于鏈表或探測哈希表的數(shù)據(jù)結(jié)構(gòu)。
8、圖論
在形式描述(頂點邊列表)與(加權(quán))圖的示意圖之間進(jìn)行轉(zhuǎn)換。
描述圖的鄰接表與鄰接矩陣表示法,比較這兩種表示法中操作的空間/時間復(fù)雜度。
通過手動和編程方式對給定圖執(zhí)行廣度優(yōu)先遍歷(BFS)和深度優(yōu)先遍歷(DFS)。
可視化圖遍歷執(zhí)行過程中的狀態(tài),將節(jié)點狀態(tài)描述為未發(fā)現(xiàn)、已發(fā)現(xiàn)、已訪問和/或已確定。
闡述深度優(yōu)先遍歷與拓?fù)渑判虻年P(guān)系。
描述迪杰斯特拉最短路徑不變式,并利用其推導(dǎo)算法執(zhí)行過程中圖中未訪問部分的性質(zhì)。
實現(xiàn)迪杰斯特拉最短路徑算法,并分析其時間/空間復(fù)雜度。
9、事件驅(qū)動編程
將圖形用戶界面應(yīng)用程序的各個方面歸類為模型、視圖或控制器的一部分。
根據(jù)圖形應(yīng)用程序的設(shè)計草圖編寫代碼,設(shè)置其組件層次結(jié)構(gòu)。
描述布局管理器的工作原理及其與組件層次結(jié)構(gòu)中元素的交互。
利用Java文檔查找并集成新GUI控件至圖形應(yīng)用程序。
編寫對圖形組件執(zhí)行自定義繪制的代碼。
闡述事件驅(qū)動程序中的控制反轉(zhuǎn)機(jī)制。
在圖形應(yīng)用程序中編寫事件監(jiān)聽器。
解釋Swing應(yīng)用程序的執(zhí)行流程及其對事件分發(fā)線程的使用。
10、并發(fā)編程
闡述并發(fā)代碼的優(yōu)缺點。
使用Java的Thread類編寫并發(fā)代碼。
識別給定并發(fā)代碼中的競爭條件,并列舉程序執(zhí)行后可能出現(xiàn)的狀態(tài)。
闡釋Java鎖的語義并編寫涉及同步的代碼。
描述并發(fā)程序中可能導(dǎo)致死鎖的條件及規(guī)避方法。
說明如何使用條件變量同步共享資源的修改操作。
以上就是康奈爾大學(xué)CS2110期末考試可能會考察的重點內(nèi)容。如果你對考試沒有把握,考而思能夠為你提供一對一康奈爾大學(xué)考前輔導(dǎo)。你可以直接聯(lián)系考而思的課程顧問,及時在專業(yè)學(xué)術(shù)導(dǎo)師的指導(dǎo)下進(jìn)一步明確考試重點、全面查漏補(bǔ)缺、提升編程技能、掌握應(yīng)試技巧,從而為康奈爾大學(xué)考試做好準(zhǔn)備。