在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

學會讀源碼特別重要

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2020-12-31 10:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

剛參加工作那會,沒想過去讀源碼,更沒想過去改框架的源碼;總想著別人的框架應該是完美的、萬能的,應該不需要改;另外即使我改了源碼,怎么樣讓我的改動生效了?項目中引用的不還是沒改的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斷點來進行源碼追蹤,斷點追蹤源碼是我非常推薦的一種方式。斷點不僅可以用來調試我們的代碼,也可以用來調試我們用到的框架源碼。面對未知的、茫茫多的源碼,我們往往沒有足夠的時間、經歷和耐心去通讀所有源碼,我們只需要去讀我們關注的部分即可(有人可能會說我都不關心,這...)。

那為什么要用斷掉調試的方式來跟源碼,而不是直接從源代碼入手去跟我們關注的部分呢?嘗試過的小伙伴應該知道,如果我們對源碼不熟悉,直接通過源碼的方式去跟,一方面很容易迷路(多態,會有很多子類實現),不知道接下來跟哪一個,另一方面也很容易跟丟,當我們跟入的很深的時候,很有可能就忘記上一步跟到哪了。

下面我會舉例來說明我是如何進行斷點追蹤的,以spring-boot-2.0.3之quartz集成,不是你想的那樣哦!和 spring-boot-2.0.3之quartz集成,數據源問題,源碼探究為背景來講,需要搞清楚兩個點:springboot是如何向quartz注入數據源的,quartz是如何操作數據庫的

springboot向quartz注入數據源

QuartzAutoConfiguration是springboot自動配置quartz的入口

quartz的配置屬性設置給SchedulerFactoryBean;將數據源設置給SchedulerFactoryBean:如果有@QuartzDataSource修飾的數據源,則將@QuartzDataSource修飾的數據源設置給SchedulerFactoryBean,否則將應用的數據源(druid數據源)設置給SchedulerFactoryBean,顯然我們的應用中沒有@QuartzDataSource修飾的數據源,那么SchedulerFactoryBean中的數據源就是應用的數據源;將事務管理器設置給SchedulerFactoryBean。SchedulerFactoryBean,負責創建和配置quartz Scheduler,并將其注冊到spring容器中。SchedulerFactoryBean實現InitializingBean的afterPropertiesSet方法,里面有可以設置數據源的過程。

可以看到通過org.quartz.jobStore.dataSource設置的dsName(值為quartzDs)最后會被替換成springTxDataSource.加scheduler實例名(我們的應用中是:springTxDataSource.quartzScheduler)。springboot會注冊兩個ConnectionProvider給quartz:一個dsName叫springTxDataSource.quartzScheduler,有事務;一個dsName叫springNonTxDataSource.quartzScheduler,沒事務。

quartz如何操作數據庫

我們通過停止定時任務來跟下quartz對數據庫的操作

發現quartz用如下方式獲取connection

conn = DBConnectionManager.getInstance().getConnection(getDataSource());

那么我們的job中就可以按如下方式操作數據庫了

View Code

明確我們的目的,找到合適的切入點,進入斷點調試追蹤也就容易了。

任我說的天花亂墜,你仍無動于衷,那也只是我一廂情愿,只有局中人才能體會到其中的奧妙!

總結與感悟

從上至下全部通讀的方式,個人不太推薦,這是建立在很熟悉的基礎上的,當我們對某個框架已經比較熟悉了,再從上至下進行通讀,徹底了解,這是我認為正確的方式;但是從不熟悉到熟悉這個過程,個人不推薦全部通讀,而是推薦上面我推薦的方式 - 斷點局部追蹤。

很多時候,我們的博文都只是授之以魚,而我們也只是從中得到魚;而這篇的目的則是授之以漁,我希望大家從中學到捕魚的方法,而不是一味的等待別人的魚;希望大家能夠自給自足,也能把魚和漁都授予其他人。

只要我們開始去讀源碼,慢慢的就會形成自己的一套讀源碼的方式;每個人的方式都不一樣,合適自己的才是最好的。行動起來,用合適的方式去俘獲你的的她吧!

責任編輯:xj

原文標題:學會讀源碼,很重要!

文章出處:【微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 源碼
    +關注

    關注

    8

    文章

    669

    瀏覽量

    30250
  • 程序員
    +關注

    關注

    4

    文章

    954

    瀏覽量

    30329

原文標題:學會讀源碼,很重要!

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    選購固定式碼器要看哪些核心參數

    的標簽,可能會出現讀取困難。2. 圖像處理技術:圖像碼器利用圖像傳感器捕捉條形碼圖像,并通過軟件解碼。其優勢在于能夠進行二維二維碼的讀取,因此特別適合于相對復雜的信息采集任務。圖像碼器在一定程度上也
    發表于 06-26 16:43

    工業碼器 康耐視流水線碼案例,快速動態識別,

    碼器
    深圳市遠景達物聯網技術有限公司
    發布于 :2025年03月14日 16:36:11

    條碼識設備在SMT產線中批量讀取PCB板條碼的應用

    的那一刻起,條碼識設備就開始發揮關鍵作用。在進料與物料管理環節,固定式碼器如同一位嚴謹的“把關者”,自動掃描原材料條碼,精準記錄下批次、規格等重要信息,并與ME
    的頭像 發表于 03-05 16:29 ?369次閱讀
    條碼識<b class='flag-5'>讀</b>設備在SMT產線中批量讀取PCB板條碼的應用

    固定式碼器一般多少錢才能夠買到質量好的?

    在探討固定式碼器價格與質量的關系時,我們首先需要明確的是,固定式碼器作為自動化識別領域的重要設備,其價格受多種因素影響,包括但不限于品牌、型號、功能、性能以及市場供需狀況等。因此,要買到質量好
    的頭像 發表于 02-14 13:51 ?404次閱讀
    固定式<b class='flag-5'>讀</b>碼器一般多少錢才能夠買到質量好的?

    新大陸工業碼器使用場景

    ,新大陸工業碼器以其卓越的性能和廣泛的應用場景,成為了提升效率、確保準確性的重要工具。在工業自動化領域,新大陸工業碼器是智能制造不可或缺的一環。在電子設備制造流
    的頭像 發表于 01-14 15:18 ?395次閱讀
    新大陸工業<b class='flag-5'>讀</b>碼器使用場景

    一維/二維條碼識器可以應用于哪些行業?

    一維/二維條碼識器,作為現代信息技術的重要組成部分,其應用范圍極為廣泛,幾乎涵蓋了所有需要高效、準確信息處理的行業。以下是一維/二維條碼識器在幾個關鍵行業中的應用概覽。零售業:在零售業中,一維
    的頭像 發表于 01-10 00:00 ?442次閱讀
    一維/二維條碼識<b class='flag-5'>讀</b>器可以應用于哪些行業?

    DSD1793緩存器是怎么寫和的?

    看了很久,看不懂DSD1793緩存器是怎么寫和的。一般的I2C都是8bit的地址,它這個好像是16bit的地址, 暈死我了。 煩請幫忙啊。。。特別是怎么緩存器 謝謝!!!
    發表于 12-25 06:09

    SMT產線固定碼器的應用效果

    在當今高度自動化的制造業中,SMT(表面貼裝技術)產線作為電子組裝的核心環節,其效率與精度直接影響著產品的質量與成本。而SMT產線固定碼器的應用,無疑是這一領域內的一次重要技術革新,為生產流程帶來
    的頭像 發表于 12-10 15:48 ?475次閱讀
    SMT產線固定<b class='flag-5'>讀</b>碼器的應用效果

    工業級碼器用固定焦距還是變焦好?

    工業級碼器在工業自動化領域扮演著至關重要的角色,其性能優劣直接影響到生產線的效率和產品質量。而在選擇工業級碼器時,固定焦距和變焦焦距之間的選擇常常成為討論的焦點。本文將深入探討這兩種焦距類型
    的頭像 發表于 11-21 15:40 ?493次閱讀
    工業級<b class='flag-5'>讀</b>碼器用固定焦距還是變焦好?

    基于無操作系統的STM32單片機開發附源碼

    現在非常多的的MCU性能都還不錯,同時用戶也會去擴展一些外部RAM,這樣如果高效便捷的管理這些內存是一個重要話題。 今天給大家分享一份源碼:基于無操作系統的STM32單片機開發,功能強大,可申請
    的頭像 發表于 11-15 11:24 ?1374次閱讀

    二維碼識設備有哪些類型

    隨著二維碼應用的日益普及,各類二維碼識設備也應運而生。這些設備不僅極大地方便了我們的日常生活,也為企業提供了更加高效便捷的服務。那么,你知道二維碼識設備都有哪些類型嗎?讓我們一起來了解一下。據
    的頭像 發表于 11-05 16:10 ?872次閱讀
    二維碼識<b class='flag-5'>讀</b>設備有哪些類型

    生產線用條碼碼器介紹

    工業碼器是一種專門用于讀取各種條碼信息的工業設備。在工業應用中,碼器經常用于自動識別產品、包裝和配件上的編碼信息,以支持物料管理、生產計劃、物流和配送的自動化。常見的工業條碼閱讀器包括激光讀碼器
    的頭像 發表于 08-29 15:50 ?519次閱讀
    生產線用條碼<b class='flag-5'>讀</b>碼器介紹

    ESP32 崩潰后調試信息定位到源碼方法

    arduino 通過調試信息定位出錯源碼
    的頭像 發表于 08-27 14:29 ?1673次閱讀

    UCGUI單片機源碼

    UCGUI單片機源碼
    發表于 07-04 17:11 ?1次下載
    主站蜘蛛池模板: 日本理论在线观看被窝网 | 亚洲成av人片在线观看无码 | 黄黄视频免费看 | 日本免费黄网站 | 久久综合一 | 欧美人与物另类 | 日本在线黄色网址 | 四虎影在永久地址在线观看 | 精品色| 国产精品久久久久久久免费大片 | 一区在线观看视频 | 成人丁香婷婷 | 亚洲乱码卡一卡二卡三 | 黄色视屏在线免费观看 | 我想看一级播放片一级的 | 米奇影院777 | 天天狠狠弄夜夜狠狠躁·太爽了 | 亚洲va中文字幕 | 5278欧美一区 | 九色在线播放 | 放荡女同老师和女同学生 | bt天堂在线www最新版资源网 | 91精品久久久久含羞草 | 国产成人a毛片 | 视频网站免费 | 国产精品三级在线 | 韩国精品videosex性韩国 | 色妹子在线 | 免费观看理论片毛片 | 天天干天天摸 | 黄色1级视频 | 欧美成人性动漫在线观看 | 天堂资源在线最新版 | 涩涩97在线观看视频 | 亚洲人成影网站~色 | 中日韩精品视频在线观看 | 亚洲小younv另类 | 伊人久久大香线蕉综合影 | 欧美性猛交xxxx黑人喷水 | 最新日韩中文字幕 | 国产骚b|