導航:首頁 > 源碼編譯 > 閱讀源碼技巧

閱讀源碼技巧

發布時間:2022-10-23 11:58:41

⑴ 學習java的同學都是怎麼讀源碼

剛參加工作那會,沒想過去讀源碼,更沒想過去改框架的源碼;總想著別人的框架應該是完美的、萬能的,應該不需要改;另外即使我改了源碼,怎麼樣讓我的改動生效了?項目中引用的不還是沒改的jar包嗎。回想起來覺得那時候的想法確實挺??

工作了一年多之後准備跳槽了,開始了一輪的面試,其中有幾個面試官就問到了相關的源碼問題:ArrayList、HashMap的底層實現,spring、mybatis的相關源碼。問源碼的面試一般就是回去等消息,然後就沒然後了。

那時候開始意識到,源碼這東西在之前的工作的中感受不到,但是在面試中好像面的還挺頻繁的,從此有意識的開始了jdk部分源碼的閱讀(主要是集合)。一開始看源碼,看的特別糙,知道個大概,知道ArrayList的底層實現是數組,HashMap的底層是散列表(數組+鏈表);更深入一點的擴容、hash碰撞等等就不知道了。

讀spring源碼起於工作中遇到了一個問題(spring jdbcTemplate事務,各種詭異,包你醍醐灌頂!),排查一段時間最終是解決了,但過程讓我非常難受,各種上網查資料、各種嘗試,感覺就像大海撈針一樣,遙遙無期。我下定決心,我要看一看spring的源碼,於是我買了一本《spring源碼深度解析》,結合著這本書、打開著eclipse,開始了spring的源碼閱讀之旅。至此,讀源碼成了習慣,源碼已經進入了我的心裡。

後來,springboot的火熱,讓我也想蹭上一蹭,於是有了springboot的啟動源碼系列,雖然還在進行中,但是我相信我能將其完成;工作中用到了shiro,我又結合著《跟我學shiro》將shiro的源碼看了個大概,有了shiro源碼系列博文,還差一篇認證與授權(應該很快就能面世),shiro源碼系列就封筆了。最近在搭建自己的後台管理系統,用到了quartz,集成的過程也遇到了一些問題,因此有了quartz的兩篇文章。

慢慢的,從一味的網上找資料變成了很多時候會從源碼中找答案。不求能讀太多的源碼,但願自己接觸的技術都能讀上一讀,路漫漫其修遠兮,吾將上下而求索!

大家為什麼要讀源碼?

很多人一定和我一樣的感受:源碼在工作中有用嗎?用處大嗎?很長一段時間內我也有這樣的疑問,認為哪些有事沒事扯源碼的人就是在裝,只是為了提高他們的逼格而已。

那為什麼我還要讀源碼呢?一剛開始為了面試,後來為了解決工作中的問題,再後來就是個人喜好了。說的好聽點是有匠人精神;說的委婉點是好奇(底層是怎麼實現的);說的不自信點是對黑盒的東西我用的沒底,怕用錯;說的簡單直白點是提升自我價值,為了更高的薪資待遇(這里對真正的技術迷說聲抱歉)。

源碼中我們可以學到很多東西,學習別人高效的代碼書寫、學習別人對設計模式的熟練使用、學習別人對整個架構的布局,等等。如果你還能找出其中的不足,那麼恭喜你,你要飛升了!會使用固然重要,但知道為什麼這么使用同樣重要。從模仿中學習,從模仿中創新。

讀源碼不像圍城(外面的人想進來,裡面的人想出去),它是外面的人不想進來,裡面的人不想出去;當我們跨進城內,你會發現(還是城外好,皮!)城內風光無限,源碼的海洋任我們遨遊!

首先我們要對我們的目標有所了解,知道她有什麼特點,有些什麼功能。對對方都還不了解,就想著進入別人的內心世界,那不是臭不要臉嘛,我們要做一個有著流氓心的紳士;對她有個大致的了解了,就可以發起攻勢,一舉拿下。

那麼怎麼樣了解了,方式有很多,我這里提供幾種,僅供參考

最好的方式就是官方參考指南,親生父母往往對孩子是最了解的,對孩子的描述也是最詳細的;比如Spring Boot Reference Guide就是對springboot最詳細的描述,怎麼樣使用springboot、springboot特性等等,通過此指南,springboot在你面前一覽無遺;

但是,springboot畢竟是外國人的孩子,如果英語不好,估計讀起來有點頭疼了,不過我們有google翻譯呀,咬咬牙也是能看的。源碼世界的丈母娘、老岳丈是非常慷慨的!

其次是書籍,國外優秀的有很多,國內也不乏好書,比較推薦此方式,自成體系,讓我們掌握的知識點不至於太散。這就是好比是源碼的閨蜜,對源碼非常了解,重點是挺大方,會盡全力幫助我們了解源碼。

再次就是博客,雖然可能覺得知識點比較散,但是針對某個知識點卻特別的細,對徹底掌握非常有幫助,園子內就有很多技術大牛,寫的博客自然也是非常棒,非常具有學習價值。當然還有社區、論壇、github、碼雲等等。這就是源碼的朋友圈,我們從中也能獲取到非常多關於源碼的信息。

設計模式的了解

優秀的框架、技術從不乏設計模式;jdk源碼中就應用了很多設計模式,比如IO流中的適配器模式與裝飾模式、GUI的觀察者模式、集合中的迭代器模式等等;spring源碼中也是用到了大量的設計模式。設計模式有什麼優點、各適用於什麼場景,不是本文的內容,需要我們大家自行去了解。

我們只需要對一些常用的設計模式有個大致了解,再去讀源碼是比較好的;不需要將23種設計模式都通讀,也不需要將常用設計模式完全理解透;對於全部通讀,我們時間有限,另外有些模式確實不太好理解、用的少,性價比不高,沒必要全部都讀。

推薦書籍:《Head First Design Patterns》(中文版:《Head First 設計模式》)、《Java與模式》;

另外我比較推薦的一種學習設計模式的方式是讀別人博客:java_my_life,劉偉技術博客,chenssy的設計模式;

設計模式之於源碼,就好比逛街購物之於女人,想順利勾搭源碼,我們需要好好掌握設計模式這個套路。

配合ide進行斷點追蹤

我們通過源碼的圈子對源碼的了解終究只是停在表面,終究還是沒有走進她的內心,接下來我就和大家分享下,我是如何走進她的內心的!

相信看過我的源碼博客的小夥伴都知道,我非常喜歡通過idea斷點來進行源碼追蹤,斷點追蹤源碼是我非常推薦的一種方式。斷點不僅可以用來調試我們的代碼,也可以用來調試我們用到的框架源碼。

面對未知的、茫茫多的源碼,我們往往沒有足夠的時間、經歷和耐心去通讀所有源碼,我們只需要去讀我們關注的部分即可(有人可能會說我都不關心,這?)。那為什麼要用斷掉調試的方式來跟源碼,而不是直接從源代碼入手去跟我們關注的部分呢?

嘗試過的小夥伴應該知道,如果我們對源碼不熟悉,直接通過源碼的方式去跟,一方面很容易迷路(多態,會有很多子類實現),不知道接下來跟哪一個,另一方面也很容易跟丟,當我們跟入的很深的時候,很有可能就忘記上一步跟到哪了。所以讀源碼的重要性淺顯易懂了。

⑵ 怎樣閱讀linux源代碼

聽我的就是,問那麼多幹嘛,我在你身邊,你還走錯路!跟著我!不能給你幸福是我的錯,但誰讓你不幸福,我TMD去砍了他 查看文章
如何閱讀linux源代碼2007-09-01 14:04著linux的逐步普及,現在有不少人對於Linux的安裝及設置已經比較熟悉了。與Linux 的蓬勃發展相適應,想深入了解Linux的也越來越多。而要想深入了解Linux,就需要閱讀和分析linux內核的源代碼。
Linux的內核源代碼可以從很多途徑得到。一般來講,在安裝的linux系統下,/usr/src/linux目錄下的東西就是內核源代碼。另外還可以從互連網上下載,解壓縮後文件一般也都位於linux目錄下。內核源代碼有很多版本,目前最新的穩定版是2.2.14。
許多人對於閱讀Linux內核有一種恐懼感,其實大可不必。當然,象Linux內核這樣大而復雜的系統代碼,閱讀起來確實有很多困難,但是也不象想像的那麼高不可攀。只要有恆心,困難都是可以克服的。也不用擔心水平不夠的問題,事實上,有很多事情我們不都是從不會到會,邊干邊學的嗎?
任何事情做起來都需要有方法和工具。正確的方法可以指導工作,良好的工具可以事半功倍。對於Linux 內核源代碼的閱讀也同樣如此。下面我就把自己閱讀內核源代碼的一點經驗介紹一下,最後介紹Window平台下的一種閱讀工具。
對於源代碼的閱讀,要想比較順利,事先最好對源代碼的知識背景有一定的了解。對於linux內核源代碼來講,我認為,基本要求是:1、操作系統的基本知識;2、對C語言比較熟悉,最好要有匯編語言的知識和GNU C對標准C的擴展的知識的了解。另外在閱讀之前,還應該知道Linux內核源代碼的整體分布情況。我們知道現代的操作系統一般由進程管理、內存管理、文件系統、驅動程序、網路等組成。看一下Linux內 核源代碼就可看出,各個目錄大致對應了這些方面。Linux內核源代碼的組成如下(假設相對於linux目錄):
arch 這個子目錄包含了此核心源代碼所支持的硬體體系結構相關的核心代碼。如對於X86平台就是i386。
include 這個目錄包括了核心的大多數include文件。另外對於每種支持的體系結構分別有一個子目錄。
init 此目錄包含核心啟動代碼。
mm 此目錄包含了所有的內存管理代碼。與具體硬體體系結構相關的內存管理代碼位於arch/*/mm目錄下,如對應於X86的就是arch/i386/mm/fault.c 。
drivers 系統中所有的設備驅動都位於此目錄中。它又進一步劃分成幾類設備驅動,每一種也有對應的子目錄,如音效卡的驅動對應於drivers/sound。
ipc 此目錄包含了核心的進程間通訊代碼。
moles 此目錄包含已建好可動態載入的模塊。

void function(e,t){for(var n=t.getElementsByTagName("img"),a=+new Date,i=[],o=function(){this.removeEventListener&&this.removeEventListener("load",o,!1),i.push({img:this,time:+new Date})},s=0;s< n.length;s++)!function(){var e=n[s];e.addEventListener?!e.complete&&e.addEventListener("load",o,!1):e.attachEvent&&e.attachEvent("onreadystatechange",function(){"complete"==e.readyState&&o.call(e,o)})}();alog("speed.set",{fsItems:i,fs:a})}(window,document);

fs Linux支持的文件系統代碼。不同的文件系統有不同的子目錄對應,如ext2文件系統對應的就是ext2子目錄。
kernel 主要核心代碼。同時與處理器結構相關代碼都放在arch/*/kernel目錄下。
net 核心的網路部分代碼。裡面的每個子目錄對應於網路的一個方面。
lib 此目錄包含了核心的庫代碼。與處理器結構相關庫代碼被放在arch/*/lib/目錄下。
scripts此目錄包含用於配置核心的腳本文件。
Documentation 此目錄是一些文檔,起參考作用。
清楚了源代碼的結構組成後就可以著手閱讀。對於閱讀方法或者說順序,有所謂的縱向與橫向之分。所謂縱向就是順著程序的執行順序逐步進行;所謂橫向,就是分模塊進行。其實他們之間不是絕對的,而是經常結合在一起進行。對於Linux源代碼來講,啟動的代碼就可以順著linux的啟動順序一步一步來,它的大致流程如下(以X86平台為例):
./larch/i386/boot/bootSect.S-->./larch/i386/boot/setup.S-->./larch/i386/kernel/head.S-->./init/main.c中的start_kernel()。而對於象內存管理等部分,則可以單獨拿出來進行閱讀分析。我的體會是:開始最好按順序閱讀啟動代碼,然後進行專題閱讀,如進程部分,內存管理部分等。在每個功能函數內部應該一步步來。實際上這是一個反復的過程,不可能讀一遍就理解。
俗話說:「工欲善其事,必先利其器」。 閱讀象Linux核心代碼這樣的復雜程序令人望而生畏。它象一個越滾越大的雪球,閱讀核心某個部分經常要用到好幾個其他的相關文件,不久你將會忘記你原來在干什麼。所以沒有一個好的工具是不行的。由於大部分愛好者對於Window平台比較熟悉,並且還是常用Window系列平台,所以在此我介紹一個Window下的一個工具軟體:Source Insight。這是一個有30天免費期的軟體,可以從www.sourcedyn.com下載。安裝非常簡單,和別的安裝一樣,雙擊安裝文件名,然後按提示進行就可以了。安裝完成後,就可啟動該程序。這個軟體使用起來非常簡單,是一個閱讀源代碼的好工具。它的使用簡單介紹如下:先選擇Project菜單下的new,新建一個工程,輸入工程名,接著要求你把欲讀的源代碼加入(可以整個目錄加)後,該軟體就分析你所加的源代碼。分析完後,就可以進行閱讀了。對於打開的閱讀文件,如果想看某一變數的定義,先把游標定位於該變數,然後點擊工具條上的相應選項,該變數的定義就顯示出來。對於函數的定義與實現也可以同樣操作。別的功能在這里就不說了,有興趣的朋友可以裝一個Source Insight,那樣你閱讀源代碼的效率會有很大提高的。怎麼樣,試試吧!

⑶ 拿到一個php源碼怎麼分析它用的是什麼框架

如果是單一入口模式的在index.php里的都會有簡介
/**
*
**/
如果是自己,或團隊開發的自己框架,有的會註明

⑷ 如何學習sqlite源碼

先來說說sqlite的資料.
首先sqlite的資料其實是不多不少的.
不少的原因是因為這些資料確實能夠讓你明白sqlite的設計原理.
說它不多的原因是也就讓你明白其原理, 僅此而已.

sqlite的資料主要來自四個地方, 從簡到深依次為:
1.<>, 這是一本介紹sqlite"基本原理"的小書, 只有80頁左右, 介紹了sqlite的"後端"原理. 這本書在網路有下載, 純英文版的, 鏈接:inside sqlite_網路知道. 在上面的github上, 我們項目的同伴對這本書做了翻譯, 不過還沒完成, 建議直接掃原版.

2.官方文檔, 連接:SQLite Documentation. 但是裡面的文檔對於學習者來說也有輕重之分, 建議主要閱讀 "SQLite Technical/Design Documentation" 這一欄的技術文檔.

3.<<SQLite Database System: Design and Implementation>>. 這也是一本說sqlite的小書, 不到200頁. 這本書的內容其實和<<inside sqlite>>有重疊, 甚至不少地方的段落是直接復制過來的... 不過這本書比<<inside sqlite>>詳細很多, 也建議掃描一遍. 這本書我目前在做翻譯, 做了3,4,5,6四章的翻譯了. 不過是很粗翻譯, 不建議直接看...

4.源碼注釋. sqlite的源碼注釋非常詳細, 詳細到比上面兩本書說的還多... sqlite的每份.c代碼內的注釋差不多快比代碼還多了, 而且除了將基本架構外, 很多上述資料沒有提到的細節, 也在源碼注釋中被提了出來.

================================================================

接下來說一下本人推薦的學習方法~~

================================================================

下面是認真學習的方法, 如果想快速暴力的學習, 直接看下一段.

想要認真點學習的話.
應該先去看"Architecture of SQLite"這篇文檔, 該文檔詳細的介紹了sqlite的7層結構, 總體被分為了"前段", "中層VM", "後端".

看完arch.html那文過後, 你就知道"前端"主要做的是語法分析, "後端"主要實現了資料庫性質(ACID, 增刪查改).
個人建議從後端開始學習, 畢竟學習sqlite是學習怎麼實現資料庫.

後端的tree, pager, os三層, 其實都不難(起碼理解起來不難),
我建議OS->PAGER->TREE這樣邊學習, 邊寫demo.
簡要說一下我在學習這三層過程中遇到的一些點, 希望能幫到樓主.

OS:
os是很薄的一層, 主要是為了提高可移植性而被設計出來的.
學習這一層的方法很粗暴:看"The OS Backend (VFS) To SQLite", 然後去看源碼中的"test_demovfs.c".
主要搞清下面三個結構體.
sqlite3_vfs
sqlite3_io_methods
sqlite3_file
在我github中的demo1.1中, 有一個更簡單的demo, 可以參考看下裡面的os.c, os.h, unix_os.c三份代碼.

-------------------------------------------------

Pager:
Pager主要實現了三段功能: ACID, log, cache.
先說ACID:
ACID的這部分我只看了最最基本的方法, 然後選擇跳過的, sqlite實現ACID的方法可以看"Atomic Commit In SQLite",
這里是我翻譯的, 能看,
"how-to-implement-a-DB-like-sqlite/SQLite怎樣實現原子性.md at master · qw4990/how-to-implement-a-DB-like-sqlite · GitHub".
除了這篇最基本的文檔, 推薦看<<SQLite Database System: Design and Implementation>>的3章和4章, 看完能理解sqlite實現ACID的基本方法.

接著是cache, sqlite提供了插件式的cache結構, 所以你或許會驚訝為什麼sqlite裡面同時有pager.c, pcache.c, pcache1.c:
cache這個部分比較簡單, <<inside sqlite>>第三章, <<SQLite Database System>>第五章都有詳細的介紹, 主要講解了pager實現cache的方法.
在我github中的demo1.1中, cache的功能也已經完成了, 1 可以參考看下裡面的pager.h, pager.c, pcache.c, pcahce1這四份代碼.

最後是log:
這部分我現在直接選擇了忽視...

----------------------------------------------------

Tree層:
sqlite的tree層就是用B+/B-樹維護數據, 以達到快速"增刪查改"的目的.
這一層在官方文檔里沒多少資料.
先是演算法本身, 也就是B+/B-/B樹, 沒什麼好說的, 很多演算法書都有.
接下來重點是sqlite怎麼將B樹應用到自身的資料庫中的.
這一點可以看<<inside sqlite>>的第5章, <<SQLite Database System>>的第6章, 都有很詳細的介紹.
<<SQLite Database System>>講得更為仔細, 除了說原理外, 還說了sqlite里btree大致被分為了幾個結構體在工作.

以上就是我學習後端遇到的一些點吧.

=============================================================

如果嫌棄上面的學習方法麻煩的話,
可以先掃一下"Architecture of SQLite",
接著再看一下"Atomic Commit In SQLite",
最後簡單粗暴的把推薦的那兩本書掃完,
也大致知道sqlite是怎麼設計的了.

不過個人認為sqlite是一個"大師級的精緻的工藝品", 光看完兩本書就說自己學完了它, 未免有點"暴殄天物".
除了基本的資料庫設計方法(也就是那兩本書的內容), sqlite的源代碼中所蘊含的編程技巧, 工程設計, 以及各種小考慮, 也是非常值得吸收學習的.

=============================================================

最後總結一下
如果想簡單粗暴快捷的學習, 直接掃arch.html, atomiccommit.html和那兩本書, 就能明白sqlite是怎樣被設計的了.
如果想深入學習, 建議從7層開始向前學, 邊翻文檔邊看源碼邊寫demo.

⑸ 如何快速看懂別人的代碼

1.要養成一個習慣, 經常花時間閱讀別人編寫的高品質代碼.

2.要有選擇地閱讀代碼, 同時, 還要有自己的目標. 您是想學習新的模式|編碼風格|還是滿足某些需求的方法.

3.要注意並重視代碼中特殊的非功能性需求, 這些需求也許會導致特殊的實現風格.

4.在現有的代碼上工作時, 請與作者和維護人員進行必要的協調, 以避免重復勞動或產生厭惡情緒.

5.請將從開放源碼軟體中得到的益處看作是一項貸款, 盡可能地尋找各種方式來回報開放源碼社團.

6.多數情況下, 如果您想要了解"別人會如何完成這個功能呢?", 除了閱讀代碼以外, 沒有更好的方法.

7.在尋找bug時, 請從問題的表現形式到問題的根源來分析代碼. 不要沿著不相關的路徑(誤入歧途).

8.我們要充分利用調試器|編譯器給出的警告或輸出的符號代碼|系統調用跟蹤器|資料庫結構化查詢語言的日誌機制|包轉儲工具和Windows的消息偵查程序, 定出的bug的位置.

9.對於那些大型且組織良好的系統, 您只需要最低限度地了解它的全部功能, 就能夠對它做出修改.

10.當向系統中增加新功能時, 首先的任務就是找到實現類似特性的代碼, 將它作為待實現功能的模板.

11.從特性的功能描述到代碼的實現, 可以按照字元串消息, 或使用關鍵詞來搜索代碼.

12.在移植代碼或修改介面時, 您可以通過編譯器直接定位出問題涉及的范圍, 從而減少代碼閱讀的工作量.

13.進行重構時, 您從一個能夠正常工作的系統開始做起, 希望確保結束時系統能夠正常工作. 一套恰當的測試用例(test case)可以幫助您滿足此項約束.

14.閱讀代碼尋找重構機會時, 先從系統的構架開始, 然後逐步細化, 能夠獲得最大的效益.

15.代碼的可重用性是一個很誘人, 但難以理解與分離, 可以試著尋找粒度更大一些的包, 甚至其他代碼.

16.在復查軟體系統時, 要注意, 系統是由很多部分組成的, 不僅僅只是執行語句. 還要注意分析以下內容: 文件和目錄結構|生成和配置過程|用戶界面和系統的文檔.

⑹ 你在閱讀源代碼或設計文檔時,看到哪些驚艷的技巧

作為一個寫Java c++的人,通過OOP進入骨頭,我真的很佩服別人寫的C代碼。無論它是使用函數指針作為結構的參數來復制OOP,還是純粹的程序化,都是書面的,所有函數都可以重入,它們不會相互影響,每次看到它們,你都會感到震驚。


上次偶然間看到的設計,本想和這位大神好好交流的,但是沒有見到真人。最近在寫一個RDB(Redis的mp文件)逆序列化的東西 看到一些作者節約存儲空間的方式 比如 大多數情況下 key或value的長度都能維持在60左右 所以作者用來存儲內容長度的位元組默認只用6bit 另外2bit做標記 如果超出6bit能表達的長度 則用14bit表達 如果14bit表達不了 則索性用32bit表達 佔用位元組分別是 1、2、5(第一個位元組用來標記接下來4個位元組是實際長度) 根據內容的不同 存儲的方式也不一樣 比如普通的String類型 如果裡面的字元全部都是數字 他會轉換成整型去存 內容有一定長度後 進行lzf壓縮 Redis的rdb還是相對簡單的 沒辦法想像寫mysql mp文件的逆序列化的人有多蛋疼。



⑺ 計算機二級C語言做題技巧

2017年計算機二級C語言做題技巧

C語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有匯編語言的特點。下面是我整理的關於計算機二級C語言做題技巧,歡迎大家參考!

1. 把C++當成一門新的語言學習(和C沒啥關系!真的。)

2. 看《Thinking In C++》,不要看《C++變成死相》;

3. 看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因為他們很難而我們自己是初學者所以就不看;

4. 不要被VC、BCB、BC、MC、TC等詞彙所迷惑——他們都是集成開發環境,而我們要學的是一門語言;

5. 不要放過任何一個看上去很簡單的我程問題——他們往往並不那麼簡單,或者可以引伸出很多知識點;

6. 會用Visual C++,並不說明你會C++;

7. 學class並不難,template、STL、generic programming也不過如此——難的是長期堅持實踐和不遺餘力的博覽群書;

8. 如果不是天才的話,想學編程就不要想玩游戲——你以為你做到了,其實你的C++水平並沒有和你通關的能力一起變高——其實可以時刻記住:學C++是為了編游戲的;

9. 看Visual C++的書,是學不了C++語言的;

10. 浮躁的人容易說:XX語言不行了,應該學YY;——是你自己不行了吧!?

11. 浮躁的人容易問:我到底該學什麼;——別問,學就對了;

12. 浮躁的人容易問:XX有錢途嗎;——建議你去搶銀行;

13. 浮躁的人容易說:我要中文版!我英文不行!——不行?學呀!

14. 浮躁的人容易問:XX和YY哪個好;——告訴你吧,都好——只要你學就行;

15. 浮躁的人分兩種:a)只觀望而不學的.人;b)只學而不堅持的人;

16. 把時髦的技術掛在嘴邊,還不如把過時的技術記在心裡;

17. C++不僅僅是支持面向對象的程序設計語言;

18. 學習編程最好的方法之一就是閱讀源代碼;

19. 在任何時刻都不要認為自己手中的書已經足夠了;

20. 請閱讀《The Standard C++ Bible》(中文版:標准C++寶典),掌握C++標准;

21. 看得懂的書,請仔細看;看不懂的書,請硬著頭皮看;

22. 別指望看第一遍書就能記住和掌握什麼——請看第二遍、第三遍;

23. 請看《Effective C++》和《More Effective C++》以及《Exceptional C++》;

24. 不要停留在集成開發環境的搖籃上,要學會控制集成開發環境,還要學會用命令行方式處理程序;

25. 和別人一起討論有意義的C++知識點,而不是爭吵XX行不行或者YY與ZZ哪個好;

26. 請看《程序設計實踐》,並嚴格的按照其要求去做;

27. 不要因為C和C++中有一些語法和關鍵字看上去相同,就認為它們的意義和作用完全一樣;

28. C++絕不是所謂的C的“擴充”——如果C++一開始就起名叫Z語言,你一定不會把C和Z語言聯系得那麼緊密;

29. 請不要認為學過XX語言再改學C++會有什麼問題——你只不過又在學一門全新的語言而已;

30. 讀完了《Inside The C++ Object Model》以後再來認定自己是不是已經學會了C++;

31. 學習編程的秘訣是:編程,編程,再編程;

32. 請留意下列書籍:《C++面向對象高效編程(C++ Effective Object-Oriented Software Construction)》

《面向對象軟體構造(Object-Oriented Software Construction)》《設計模式(Design Patterns)》《The Art of Computer Programming》;

33. 記住:面向對象技術不只是C++專有的;

34. 請把書上的程序例子親手輸入到電腦上實踐,即使配套光碟中有源代碼;

35. 把在書中看到的有意義的例子擴充;

36. 請重視C++中的異常處理技術,並將其切實的運用到自己的程序中;

37. 經常回顧自己以前寫過的程序,並嘗試重寫,把自己學到的新知識運用進去;

38. 不要漏掉書中任何一個練習題——請全部做完並記錄下解題思路;

39. C++語言和C++的集成開發環境要同時學習和掌握;

40. 既然決定了學C++,就請堅持學下去,因為學習程序設計語言的目的是掌握程序設計技術,而程序設計技術是跨語言的;

41. 就讓C++語言的各種平台和開發環境去激烈的競爭吧,我們要以學習C++語言本身為主;

42. 當你寫C++程序寫到一半卻發現自己用的方法很拙劣時,請不要馬上停手;請盡快將餘下的部分粗略的完成以保證這個設計的完整性,然後分析自己的錯誤並重新設計和編寫(參見43);

43. 別心急,設計C++的class確實不容易;自己程序中的class和自己的class設計水平是在不斷的編程實踐中完善和發展的;

44. 決不要因為程序“很小”就不遵循某些你不熟練的規則——好習慣是培養出來的,而不是一次記住的;(勿以善小而不為)

45. 每學到一個C++難點的時候,嘗試著對別人講解這個知識點並讓他理解——你能講清楚才說明你真的理解了;

46. 記錄下在和別人交流時發現的自己忽視或不理解的知識點;

47. 請不斷的對自己寫的程序提出更高的要求,哪怕你的程序版本號會變成Version 100.XX;

48. 保存好你寫過的所有的程序——那是你最好的積累之一;

49. 請不要做浮躁的人;

50. 請熱愛C++! ;

⑻ 如何去閱讀並學習一些優秀的開源框架的源碼

對於開發者來說,社區里豐富的開源代碼其實是筆極為寶貴的財富。如果能充分利用好開放源代碼的資源,不僅可以掌握多種編程方法,提高實踐能力,還能獲得好的思想,激發編程靈感。開源代碼怎麼學以及怎樣才能學好是大家經常關注的話題,日前,在問答網站知乎上,有人拋出了「如何更有效地學習開源項目的代碼?」的話題,眾技術好手各抒己見,CSDN軟體研發頻道對本文內容進行了整理,方便大家學習與參考。盛大創新研究院研究員 庄表偉:學習開源 盡可能在代碼里找答案 庄表偉提供了以下9個建議:1.在下載源代碼之後,首先要跑起來,編譯通過、正常運行;2.在你覺得最有可能運行到的地方,設置斷點或者拋出異常,這樣,就能夠找到一個項目在正常運行時的入口點;3.從入口點所在的那個源文件開始閱讀,逐步把握整個項目是如何啟動起來;4.隨便改點代碼,看看會不會報錯,如果報錯,會從哪裡報錯;5.試著把報錯屏蔽、修復、或者繞開;6.嘗試理解一個系統的內部結構,多少組成部分,主線模塊是哪些?輔助模塊是哪些?7.從實際需要出發,修改這個項目,滿足自己的某一個小的需求。(注意在此之前,盡量不要在網路上找答案);8.看看相關的討論與心得,是否與自己的理解相一致;9.提交bug fix或者某個新的功能代碼。在學習開源的過程中,有幾個方面會獲得大量收獲,1.架構與模式;2.開源社區常見的一些慣用法;3.相關領域的結構與演算法。總結一點:學習開源,盡可能在代碼里找答案,而不是在代碼之外找答案,那些都是二手的,而且很可能不準確。互聯網評論員 朱曉陽:從簡單做起 理論聯系實踐朱曉陽對此發表了兩點看法:首先,從簡單做起。剛開始的時候學習一些領域內基礎理論,然後找一些簡單的東西去實現,不能一開始就去找開源項目。建議大家經常動手寫一些小程序,如改進宿舍網路登錄客戶端等。積小成多,能顯著提高自己的編程能力。其次,學習的知識一定要和自己生活或工作有聯系,這樣才會有樂趣或動力。互聯網評論員孫竟:先構想一個想做的項目首先,構想一個想做的項目(比如論壇、博客、微博等);然後,思考需要什麼功能,應該怎麼去實現,盡可能包括各種細節,有必要時記錄下來;最後,去找個類似的開源應用,看看它是怎麼實現的,和你的想法有什麼差異,有什麼可以學習或需要改進的地方。互聯網草根hqman:我的5個建議:1.反復地使用軟體,熟釋軟體的組成文件和軟體功能,注意IE地址欄內的地址變化;2.打開資料庫文件或存放數據的XML文件,參照數據字典了解各個表和欄位的數據含意;如果沒有數據字典,就運行軟體輸入數據,參照所輸入的數據,了解各個表和欄位的數據含義;3.利用Visio進行反向工程,將類圖抽出來;4.研究類之間的關系,注釋各個類的屬性和方法,弄清程序的整體框架;5.另開一個項目,按照軟體開發的流程,將代碼分段復制進新的項目,進行編譯調試,關注一些實現細節,學習一些編程的技巧。在讀研究生張偉:在校學生空閑時間多參加一下比賽張偉的建議是大家在空閑時間多參加一些比賽。一個完整的項目,不管再小,只要做完了,就會有收獲。多看一些比較大的開源項目源代碼,每次看完後都會受益匪淺。從網上成熟的開源代碼里,可以學到很多的設計思想。他認為,從項目入手,以項目為驅動,可激勵自己進步。當然,是否一定需要看開源代碼,這將取決於個人的興趣和需要。畫出程序流程圖 理解程序流程思想CSDN博客專家i_like_cpp:曾在CSDN分享了《如何將源代碼學好》的博文,對此,他給出了四點建議:1. 畫出整個程序的流程圖,理解整個程序流程的思想。畫流程圖的方式更讓人很直接的理解程序的整體流程,而不會被代碼所干擾,讓程序員總體上把握整個程序;2. 對流程各節點(函數或過程)的理解,流程的每一節點是構成整個流程的不可缺少的部份;3.再把流程和流程各節點串起來理解整個程序,可能的話最好寫出讀書筆記;4. 如果想深刻的學習到源代碼的精髓所在,請寫一個相近的程序進行操練。理解了這個程序並不表明掌握了這個程序,只有在操練一個相近的程序時,才知道你到底理解了多少,掌握了多少。編後語:源代碼的學習是一個從整體到不斷細化的過程,是一個極為繁瑣的過程同時也是一個不斷認清事物本源的過程。本文總結的源代碼的學習經驗,希望對您有所幫助。那麼,CSDN的網友們,你們是如何對待開源項目源代碼的呢?

⑼ 哪一個框架的源碼適合拿來閱讀學習

不要看框架源碼,最好先打好基礎,比如反射,代理等。因為很多框架的功能已經十分繁多,光是功能(英文)你都難以弄懂,更何況是參合了很多中間變數、邏輯功能的源碼,越看越難以理解。即使要學習框架,也要先從javadoc注釋,即API幫助文檔開始,了解數據流的流入和流出。用源碼反向猜測設計邏輯是吃力不討好的事,一沒完整注釋,二不是本人,三反射的應用最傷腦細胞,你壓根不知道在哪裡被插了一腳。如果框架適合用來學習,那麼改別人的代碼也就不是個事了。問題來了,為何程序員都不喜歡改別人的代碼bug?

閱讀全文

與閱讀源碼技巧相關的資料

熱點內容
不能修改的pdf 瀏覽:736
同城公眾源碼 瀏覽:474
一個伺服器2個埠怎麼映射 瀏覽:282
java字元串ascii碼 瀏覽:61
台灣雲伺服器怎麼租伺服器 瀏覽:461
旅遊手機網站源碼 瀏覽:316
android關聯表 瀏覽:929
安卓導航無聲音怎麼維修 瀏覽:322
app怎麼裝視頻 瀏覽:423
安卓系統下的軟體怎麼移到桌面 瀏覽:80
windows拷貝到linux 瀏覽:755
mdr軟體解壓和別人不一樣 瀏覽:888
單片機串列通信有什麼好處 瀏覽:324
游戲開發程序員書籍 瀏覽:848
pdf中圖片修改 瀏覽:275
匯編編譯後 瀏覽:480
php和java整合 瀏覽:835
js中執行php代碼 瀏覽:447
國產單片機廠商 瀏覽:62
蘋果手機怎麼設置不更新app軟體 瀏覽:289