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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何去閱讀源碼,我總結(jié)了18條心法

jf_ro2CN3Fa ? 來(lái)源:三友的java日記 ? 2023-07-17 16:00 ? 次閱讀

這篇文章我準(zhǔn)備來(lái)聊一聊如何去閱讀開(kāi)源項(xiàng)目的源碼。

在聊如何去閱讀源碼之前,先來(lái)簡(jiǎn)單說(shuō)一下為什么要去閱讀源碼,大致可分為以下幾點(diǎn)原因:

最直接的原因,就是面試需要,面試喜歡問(wèn)源碼,讀完源碼才可以跟面試官battle

提升自己的編程水平,學(xué)習(xí)編程思想和和代碼技巧

熟悉技術(shù)實(shí)現(xiàn)細(xì)節(jié),提高設(shè)計(jì)能力

...

那么到底該如何去閱讀源碼呢?這里我總結(jié)了18條心法,助你修煉神功

61cf2db4-2442-11ee-962d-dac502259ad0.png

學(xué)好JDK

身為一個(gè)Javaer,不論要不要閱讀開(kāi)源項(xiàng)目源碼,都要學(xué)好JDK相關(guān)的技術(shù)。

所有的Java類開(kāi)源項(xiàng)目,本質(zhì)上其實(shí)就是利用JDK已有的類庫(kù)和關(guān)鍵字實(shí)現(xiàn)一種業(yè)務(wù)功能,所以學(xué)會(huì)了JDK相關(guān)的類庫(kù)是看其它的源碼基礎(chǔ)。

如果你不懂JDK,你去閱讀源碼會(huì)發(fā)現(xiàn)有太多看不懂的地方,會(huì)影響讀源碼的心情和信心。

學(xué)習(xí)JDK主要包括使用和原理兩部分。內(nèi)容大致包括以下幾部分:

集合相關(guān),比如常見(jiàn)的Map,List,Queue的實(shí)現(xiàn),包括線程安全與不安全

并發(fā)相關(guān),比如synchronized、volatile、CAS、AQS、鎖、線程池、原子類等等

io相關(guān),包括bio和nio等等

反射相關(guān)

網(wǎng)絡(luò)編程相關(guān)

...

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

了解設(shè)計(jì)模式

在一個(gè)優(yōu)秀的開(kāi)源項(xiàng)目中,設(shè)計(jì)模式處處存在,所以在你開(kāi)始閱讀源碼之前最好先了解一下常見(jiàn)的一些設(shè)計(jì)模式。當(dāng)你了解了一些設(shè)計(jì)模式以后,在源碼中遇到了相關(guān)的設(shè)計(jì)模式,你就可以快速明白代碼結(jié)構(gòu)的設(shè)計(jì),從而以整體的視角去閱讀相關(guān)代碼。

同時(shí),學(xué)習(xí)設(shè)計(jì)模式不僅可以幫助我們閱讀源碼,在日常開(kāi)發(fā)中也可以幫助我們?cè)O(shè)計(jì)出更易于擴(kuò)展的程序。

學(xué)習(xí)設(shè)計(jì)模式的話可以看看《大話設(shè)計(jì)模式》這本書,如果不想看書也可以找一些視頻或者專欄。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://github.com/YunaiV/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/

先從官網(wǎng)入手

官網(wǎng)是介紹開(kāi)源項(xiàng)目的地方,同時(shí)也是學(xué)習(xí)一個(gè)開(kāi)源項(xiàng)目最開(kāi)始的地方,通過(guò)官網(wǎng)我們可以快速的了解項(xiàng)目,比如:

項(xiàng)目的定位

一些核心概念

功能

使用教程

整體的架構(gòu)和設(shè)計(jì)

常見(jiàn)的問(wèn)題及解答

...

61f47736-2442-11ee-962d-dac502259ad0.png

RokcetMQ官網(wǎng)

當(dāng)你了解了項(xiàng)目的一些概念、功能等信息之后,如果你在讀源碼一旦發(fā)現(xiàn)了代碼是實(shí)現(xiàn)這些概念或者功能的足跡,那么能夠幫助你更好的理解代碼。

熟悉源碼模塊結(jié)構(gòu)

當(dāng)你對(duì)項(xiàng)目有大致的了解之后,就可以從Github上把代碼clone下來(lái),官網(wǎng)有項(xiàng)目源碼的Github地址。

當(dāng)成功拉下來(lái)代碼之后,就可以對(duì)項(xiàng)目源碼模塊進(jìn)行簡(jiǎn)單的分析,熟悉模塊結(jié)構(gòu),分析模塊功能,混個(gè)眼熟。

62170bd4-2442-11ee-962d-dac502259ad0.png

如上是RocketMQ源碼,如果前面閱讀過(guò)官網(wǎng)相關(guān)的一些概念介紹,就大致可以知道這些模塊有什么功能。

622a0f40-2442-11ee-962d-dac502259ad0.png

RocketMQ概念介紹

比如說(shuō),源碼中的broker模塊,官網(wǎng)說(shuō)broker主要是負(fù)責(zé)消息存儲(chǔ),那么broker模塊代碼塊肯定就主要實(shí)現(xiàn)了消息存儲(chǔ)的功能。

還有些模塊可以根據(jù)單詞的意思進(jìn)行判斷,比如common模塊,一看就是存儲(chǔ)一些公共類的模塊,example模塊,就是RocketMQ使用代碼示例的模塊等等。

順著demo開(kāi)始讀

有的小伙伴在讀源碼的時(shí)候不知道從哪里開(kāi)始讀比較合適,最后隨便從源碼中的某個(gè)模塊就開(kāi)始讀,讀讀越來(lái)越發(fā)現(xiàn)讀不下去。

讀源碼正確的姿勢(shì)應(yīng)該是從demo開(kāi)始讀。

比如說(shuō),現(xiàn)在我想要閱讀一下RocketMQ生產(chǎn)者是如何發(fā)送消息的,整個(gè)過(guò)程是什么樣的,那么我首先至少得寫個(gè)發(fā)送消息的demo,看看代碼是如何寫的。

demo一般可以從官網(wǎng)中查看

625251a8-2442-11ee-962d-dac502259ad0.png

RocketMQ官網(wǎng)發(fā)送消息代碼示例

除了官網(wǎng),一般開(kāi)源項(xiàng)目在源碼中也會(huì)有相應(yīng)的demo,代碼放在示例模塊,就比如上面提到的RocketMQ的example模塊。

最后還可以通過(guò)谷歌搜索一下demo。

DefaultMQProducerproducer=newDefaultMQProducer("sanyouProducer"); //指定NameServer的地址 producer.setNamesrvAddr("localhost:9876"); //啟動(dòng)生產(chǎn)者 producer.start(); //省略代碼。。 Messagemsg=newMessage("sanyouTopic","TagA","三友的java日記".getBytes(RemotingHelper.DEFAULT_CHARSET)); //發(fā)送消息并得到消息的發(fā)送結(jié)果,然后打印 SendResultsendResult=producer.send(msg);

如上是RocketMQ生產(chǎn)者發(fā)送消息的一個(gè)demo,消息發(fā)送源碼閱讀就從這塊代碼開(kāi)始入手,一步一步進(jìn)入源碼中,這就算開(kāi)始閱讀源碼了。

帶著目的去讀

帶著目的去讀其實(shí)很好理解,就拿上面生產(chǎn)者發(fā)送消息流程源碼來(lái)說(shuō),讀源碼的第一個(gè)目的其實(shí)就是弄懂生產(chǎn)者發(fā)送消息的流程。

除了弄懂生產(chǎn)者發(fā)送消息,你還可以帶著其它目的去讀。

比如說(shuō),消息發(fā)送的核心邏輯是send方法實(shí)現(xiàn)的,那么除了消息發(fā)送,是不是可以去弄懂生產(chǎn)者在啟動(dòng)的過(guò)程做了哪些事,也就是start方法的作用。

再比如生產(chǎn)者發(fā)送消息肯定涉及到網(wǎng)絡(luò)通信相關(guān)的內(nèi)容,那么了解RocketMQ底層網(wǎng)絡(luò)通信模型是不是也可以算一個(gè)目的。

當(dāng)你帶著這些目的,你讀源碼就有很強(qiáng)的目的性,讀完印象會(huì)很深刻。當(dāng)然如果你最開(kāi)始想不到這些目的,也沒(méi)有什么關(guān)系,你可以先往下讀,在讀的過(guò)程中再去嘗試發(fā)現(xiàn)一些其它的目的。

先抓主線,再抓分支

有的小伙伴在讀源碼的時(shí)候,每個(gè)方法都使勁一直往下點(diǎn),最后都不知道代碼進(jìn)入到哪了,這其實(shí)是非常不可取的。

正確的方法應(yīng)該是先抓住主線流程,分支流程先大致看看,知道大概是什么作用,等讀完主線之后,再回過(guò)頭仔細(xì)讀一下分支代碼。

舉個(gè)例子來(lái)說(shuō),在Spring中,ApplicationContext在使用之前需要調(diào)用一下refresh方法,而refresh方法就定義了整個(gè)容器刷新的執(zhí)行流程代碼。

627af1c6-2442-11ee-962d-dac502259ad0.png

refresh方法部分截圖

當(dāng)在讀這段代碼,你可以先讀一讀refresh中各個(gè)方法大致都做了什么,等讀完之后,你可以具體的去讀每個(gè)代碼的具體實(shí)現(xiàn),比如說(shuō)prepareRefresh干了什么,obtainFreshBeanFactory是如何獲取到BeanFactory的,prepareBeanFactory又在對(duì)BeanFactory做了什么事等等。

不要過(guò)度摳實(shí)現(xiàn)細(xì)節(jié)

有的小伙伴在閱讀的時(shí)候特別喜歡深究,想要弄清每行代碼是如何實(shí)現(xiàn)的,這不僅非常難而且也是不可取的。

就比如說(shuō),我們都知道,在Spring Bean的生命周期中,當(dāng)存在基于xml的方式來(lái)聲明Bean的方式,Spring會(huì)去解析xml,生成BeanDefinition。當(dāng)你想要了解Bean的生命周期過(guò)程的時(shí)候,其實(shí)是沒(méi)有太大的必要去過(guò)度扣Spring是如何解析xml生成BeanDefinition的細(xì)節(jié),這對(duì)你整體了解Bean的生命周期沒(méi)有太大的意義,只需要知道最終會(huì)轉(zhuǎn)換成BeanDefinition就可以了。

那什么時(shí)候去扣實(shí)現(xiàn)細(xì)節(jié)呢?

當(dāng)你需要使用到的時(shí)候,比如說(shuō)你遇到了一個(gè)bug或者是需要擴(kuò)展

阻礙你理解功能實(shí)現(xiàn)的時(shí)候

大膽猜

讀源碼的時(shí)候也需要我們發(fā)揮一點(diǎn)想象力,去猜一猜功能是如何實(shí)現(xiàn)的。猜不是瞎猜,而是基于目前了解的一些知識(shí)、技術(shù)或者是思想合理地去猜。

就比如說(shuō),當(dāng)你已經(jīng)知道了OpenFeign最終會(huì)對(duì)每一個(gè)FeignClient接口生成動(dòng)態(tài)代理對(duì)象,之后注入的對(duì)象都是代理對(duì)象,代理對(duì)象中實(shí)現(xiàn)了RPC的請(qǐng)求之后,那么當(dāng)你在學(xué)習(xí)dubbo的時(shí)候,是不是就可以去猜測(cè)注入的dubbo接口最終也是一個(gè)動(dòng)態(tài)代理對(duì)象,并且這個(gè)代理對(duì)象也實(shí)現(xiàn)了RPC的請(qǐng)求?

之后你在讀代碼的時(shí)候就需要著重注意發(fā)現(xiàn)是否有動(dòng)態(tài)代理生成的代碼,這就算是一個(gè)目的,一旦發(fā)現(xiàn)了動(dòng)態(tài)代理相關(guān)的代碼,那么這塊代碼很可能就是dubbo RPC實(shí)現(xiàn)的核心。

學(xué)會(huì)看類名

不要小看類名,優(yōu)秀的代碼命名都是見(jiàn)名知意的,所以從類名也可能窺探出這個(gè)類的一些蛛絲馬跡。

如下列舉了幾個(gè)比較常用的命名習(xí)慣

以Registry結(jié)尾的一般都是存儲(chǔ)功能,比如Spring中的SingletonBeanRegistry就是用來(lái)保存單例Bean的;Mybatis中的MapperRegistry就是用來(lái)保存Mapper接口的

以Support、Helper、s、Util(s)結(jié)尾的一般都是工具類

以Filter,Interceptor結(jié)尾的一般都是攔截作用,一般會(huì)配合責(zé)任鏈模式(Chain)使用

以Event、Listener結(jié)尾的一般都是基于觀察者模式實(shí)現(xiàn)的事件發(fā)布訂閱模型

...

除了一些比較通用的命名習(xí)慣,也有一些項(xiàng)目獨(dú)有的一些命名習(xí)慣。

比如說(shuō)Spring中常見(jiàn)的以PostProcessor結(jié)尾的都是擴(kuò)展接口,實(shí)現(xiàn)這些接口可以拿到某個(gè)比較核心的組件,從而實(shí)現(xiàn)對(duì)Spring的擴(kuò)展。

其實(shí)很多開(kāi)源項(xiàng)目的命名都比較偏向Spring的命名風(fēng)格,當(dāng)你遇到了跟Spring的命名比較像的時(shí)候,那么可以大膽猜測(cè)類的作用。

學(xué)會(huì)看類結(jié)構(gòu)

類結(jié)構(gòu)也非常重要,他也能夠幫助我們窺探類的大致功能。

6290d766-2442-11ee-962d-dac502259ad0.png

ApplicationContext

如上圖,是Spring中ApplicationContext的繼承體系,當(dāng)你需要了解ApplicationContext的時(shí)候,可以先去熟悉一下它的父接口的作用,當(dāng)你大致弄明白了每個(gè)接口的作用,那么ApplicationContext有啥作用就大致就清楚了。

除了可以看類繼承體系,還可以瀏覽一下類大致提供了哪些方法,了解對(duì)外提供的功能。

類方法通過(guò)快捷鍵 ctrl+F12(mac:fn+command+F12)查看,并且還支持模糊搜索方法名,我本人就非常喜歡這個(gè)快捷鍵

62aacab8-2442-11ee-962d-dac502259ad0.png

ApplicationContext

總結(jié)類的職責(zé)

當(dāng)我們?cè)谧x完一個(gè)類的代碼的時(shí)候,一定要總結(jié)這個(gè)類的職責(zé),明白這個(gè)類存在的意義。一般情況下一個(gè)類核心職責(zé)只有一個(gè),遵循單一職責(zé)的設(shè)計(jì)原則。

舉個(gè)例子,在RocketMQ中有一個(gè)類MQClientAPIImpl

62cfee9c-2442-11ee-962d-dac502259ad0.png

MQClientAPIImpl

其實(shí)從名字大概看不出這個(gè)類主要是有什么功能,但是當(dāng)我讀代碼的時(shí)候發(fā)現(xiàn)每個(gè)方法最終都調(diào)用RemotingClient方法,而RemotingClient只有一個(gè)實(shí)現(xiàn)NettyRemotingClient,所以從這個(gè)實(shí)現(xiàn)和類名可以猜出來(lái)RemotingClient是發(fā)送網(wǎng)絡(luò)請(qǐng)求的客戶端,所以當(dāng)讀完MQClientAPIImpl源碼之后,我就知道了MQClientAPIImpl這個(gè)類的職責(zé)大致是封裝參數(shù),然后通過(guò)RemotingClient向MQ發(fā)送消息的。

當(dāng)知道這個(gè)類的職責(zé)的時(shí)候,那么其它地方在調(diào)用這個(gè)類的方法的時(shí)候,就知道大概在做什么事了。

習(xí)慣閱讀注釋

當(dāng)你在讀源碼的時(shí)候,如果有注釋,最好能先讀一下注釋,這樣能幫助你厘清類或者方法的功能,先知道功能,再去讀源碼就容易多了。

注釋一般都是英文,如果看不懂,可以裝個(gè)插件

62effa0c-2442-11ee-962d-dac502259ad0.png

寫好注釋

俗話說(shuō)的好記性不如爛筆頭,寫好注釋也是閱讀源碼中很重要的一個(gè)環(huán)節(jié),好的注釋可以幫助快速回憶起實(shí)現(xiàn)細(xì)節(jié)和功能。

注釋并不需要對(duì)每行代碼都注釋,當(dāng)然如果你愿意也沒(méi)多大問(wèn)題,但是注釋應(yīng)包括以下幾點(diǎn)內(nèi)容:

核心類和方法實(shí)現(xiàn)的核心功能

核心功能大致的實(shí)現(xiàn)邏輯

核心的成員變量的作用

方法中不易讀懂的代碼實(shí)現(xiàn)細(xì)節(jié)

6308e8aa-2442-11ee-962d-dac502259ad0.png

DefaultMessageStore

如圖,是我讀RocketMQ中對(duì)于DefaultMessageStore類閱讀的注釋,這個(gè)類是RocketMQ中一個(gè)非常核心的類,從名字可以看出來(lái)跟消息的存儲(chǔ)有關(guān)。這個(gè)類的功能非常多,所以我寫了很多注釋,列舉了這個(gè)類主要有哪些功能和這些功能實(shí)現(xiàn)的一些細(xì)節(jié)。

總結(jié)思想,及時(shí)輸出

當(dāng)你讀完某個(gè)功能模塊的時(shí)候,就可以嘗試對(duì)這塊功能實(shí)現(xiàn)邏輯或者思想進(jìn)行總結(jié)。

比如說(shuō),當(dāng)你了解了CAS思想的時(shí)候,你會(huì)發(fā)現(xiàn),原來(lái)保證線程安全不僅僅可以通過(guò)加鎖的方式,還可以基于樂(lè)觀鎖的方式來(lái)實(shí)現(xiàn)。

在總結(jié)之后可以輸出成一個(gè)文檔,又或者是流程圖。我個(gè)人比較喜歡畫圖,這里推薦兩個(gè)在線畫圖工具:

processon

draw.io

processon我平時(shí)就在用,功能多,但是需要收費(fèi);draw.io的話免費(fèi),圖標(biāo)和顏色感覺(jué)比processon好看,平時(shí)文章中的貼圖就是用draw.io畫的。

這里多說(shuō)一句,總結(jié)思想還是非常重要的,在我閱讀了很多源碼之后,我發(fā)現(xiàn)很多技術(shù)或者功能的實(shí)現(xiàn)原理最終都是殊途同歸。

提前了解依賴的技術(shù)

一般一個(gè)開(kāi)源項(xiàng)目不是所有的技術(shù)都是自己實(shí)現(xiàn)的,它也會(huì)依賴一些其它的框架或者是思想,提前了解這些框架或者是思想,可以幫助你更好地閱讀和理清代碼。

比如說(shuō),RocketMQ底層是基于Netty框架實(shí)現(xiàn)網(wǎng)絡(luò)通信的,當(dāng)你對(duì)Netty有所了解,知道Netty在啟動(dòng)的時(shí)候需要注冊(cè)一堆ChannelHandler用來(lái)處理網(wǎng)絡(luò)請(qǐng)求,那么在讀RocketMQ底層網(wǎng)絡(luò)通信功能的時(shí)候你就可以去找一下Netty啟動(dòng)的代碼,看看都注冊(cè)了哪些ChannelHandler,然后就知道RocketMQ是如何處理和發(fā)送請(qǐng)求的。

查閱相關(guān)資料

當(dāng)在閱讀源碼的時(shí)候,對(duì)某一塊代碼功能實(shí)現(xiàn)不太清楚的時(shí)候,可以通過(guò)查閱相關(guān)資料來(lái)輔助閱讀,包括但不限于以下幾種通道:

官網(wǎng)

書籍

Github

文章

視頻

堅(jiān)持

最后一點(diǎn)也是最核心的一點(diǎn)就是堅(jiān)持。只有你長(zhǎng)期堅(jiān)持讀源碼,不停地思考,總結(jié),不斷提升自身技術(shù)的廣度和深度,找到適合自己的閱讀方式,閱讀源碼才會(huì)是越來(lái)越容易的一件事。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2707

    瀏覽量

    47474
  • 網(wǎng)絡(luò)通信
    +關(guān)注

    關(guān)注

    4

    文章

    800

    瀏覽量

    29812
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    641

    瀏覽量

    29213

原文標(biāo)題:如何去閱讀源碼,我總結(jié)了18條心法

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【收藏】268PCB Layout及電路設(shè)計(jì)規(guī)范

    本文總結(jié)了PCB布線與布局和電路設(shè)計(jì)總共268設(shè)計(jì)規(guī)范,下面與大家一起分享。
    發(fā)表于 09-08 14:26 ?5179次閱讀

    基于DS18B20和LabVIEW的多點(diǎn)溫度測(cè)量系統(tǒng)

    今天我們一起完成一個(gè)比較完整的作品,基于DS18B20和LabVIEW的多點(diǎn)溫度測(cè)量系統(tǒng)。重點(diǎn)介紹實(shí)現(xiàn)多點(diǎn)DS18B20溫度驅(qū)動(dòng)模塊的思路,具體實(shí)現(xiàn)大家可以閱讀
    發(fā)表于 09-26 10:28 ?1774次閱讀

    Always過(guò)程塊語(yǔ)法總結(jié)

    Always過(guò)程塊是FPGA編程的很頻繁的語(yǔ)句,有時(shí)很可能出錯(cuò),本人總結(jié)了一下供大家參考.
    發(fā)表于 01-19 19:49

    質(zhì)心法

    有誰(shuí)知道質(zhì)心法定義啊,還有它的優(yōu)缺點(diǎn),謝謝啦。
    發(fā)表于 12-01 23:59

    總結(jié)了EXTI的定義、相關(guān)配置和配置方法

    本文主要總結(jié)了EXTI的定義、相關(guān)配置和配置方法。
    發(fā)表于 08-13 06:16

    下載編譯源碼的要點(diǎn)和搭建源碼閱讀環(huán)境的方法

    下載編譯源碼的要點(diǎn)和搭建源碼閱讀環(huán)境的方法。下載編譯源碼,一方面是為了搭建源碼閱讀環(huán)境,另一方面
    發(fā)表于 01-10 06:49

    總結(jié)模擬電路設(shè)計(jì)經(jīng)驗(yàn)12

    模擬電子的相關(guān)知識(shí)學(xué)習(xí)教材資料——總結(jié)模擬電路設(shè)計(jì)經(jīng)驗(yàn)12
    發(fā)表于 09-20 16:10 ?6次下載

    總結(jié)了PCB設(shè)計(jì)疊層算阻抗的4大注意事項(xiàng) 幫助提高計(jì)算效率

    在高速PCB設(shè)計(jì)流程里,疊層設(shè)計(jì)和阻抗計(jì)算是登頂?shù)牡谝惶?。下面我?b class='flag-5'>總結(jié)了一些設(shè)計(jì)疊層算阻抗是的注意事項(xiàng),幫助大家提高計(jì)算效率。
    的頭像 發(fā)表于 01-22 14:00 ?5884次閱讀
    <b class='flag-5'>總結(jié)了</b>PCB設(shè)計(jì)疊層算阻抗的4大注意事項(xiàng) 幫助提高計(jì)算效率

    總結(jié)了區(qū)塊鏈技術(shù)的四個(gè)方面來(lái)了解區(qū)塊鏈

    是的,區(qū)塊鏈?zhǔn)钦?jīng)技術(shù),對(duì)于這個(gè)技術(shù),頗多贊美之詞。但是,在贊美之余,還是想潑幾杯冷水。區(qū)塊鏈很美,但也有美中不足之處,大致總結(jié)了四個(gè)方面。
    的頭像 發(fā)表于 01-22 15:48 ?6132次閱讀

    工程師跨度13年、回顧194個(gè)bug總結(jié)18編碼、測(cè)試和調(diào)試經(jīng)驗(yàn)教訓(xùn)

    工程師跨度13年、回顧194個(gè)bug總結(jié)18編碼、測(cè)試和調(diào)試經(jīng)驗(yàn)教訓(xùn)。
    發(fā)表于 02-27 16:50 ?1076次閱讀

    搞AI,在不斷精進(jìn)自己代碼的同時(shí),更應(yīng)該閱讀大量論文

    熱點(diǎn)。這也是優(yōu)秀工程師和普通工程師的本質(zhì)區(qū)別。 就連硅谷大佬吳恩達(dá),都會(huì)利用碎片化的時(shí)間讀AI論文,吳恩達(dá)老師不僅經(jīng)常讀AI論文,還給我們總結(jié)了讀論文的方法。 他認(rèn)為,我們?cè)谧x論文時(shí),要帶著4個(gè)問(wèn)題讀: 作者試圖解決什么
    的頭像 發(fā)表于 12-16 11:41 ?1425次閱讀

    分享一個(gè)超級(jí)實(shí)用的源碼閱讀小技巧

    工欲善其事必先利其器; 發(fā)現(xiàn)函數(shù)調(diào)用圖可以讓我們更加直觀地了解到源碼函數(shù)直接的調(diào)用和層次關(guān)系,提高閱讀源碼的效率 。 1 前言 看源碼的時(shí)
    的頭像 發(fā)表于 05-29 11:50 ?2064次閱讀
    分享一個(gè)超級(jí)實(shí)用的<b class='flag-5'>源碼</b><b class='flag-5'>閱讀</b>小技巧

    如何提高閱讀源碼的效率

    另外還需要gcc編譯源碼生成dumpfile文件,如果想要方便一些,可能還需要自己寫腳本實(shí)現(xiàn)自動(dòng)化,如果大佬有更好的辦法,歡迎留言區(qū)討論。
    的頭像 發(fā)表于 07-06 10:01 ?680次閱讀

    基于DS18B20多點(diǎn)測(cè)溫源碼

    DS18B20 單線數(shù)字溫度傳感器,多個(gè) DS18B20 可以并聯(lián)在惟一的單線上,實(shí)現(xiàn)多點(diǎn)測(cè)溫。里面包含源碼和文章詳解。致力于開(kāi)源項(xiàng)目的分享!
    發(fā)表于 01-05 16:28 ?25次下載

    閱讀開(kāi)源項(xiàng)目源碼的實(shí)用技巧(上)

    本文分享一下在使用或者學(xué)習(xí)開(kāi)源項(xiàng)目源碼的過(guò)程中的一些經(jīng)驗(yàn)技巧。 因?yàn)?b class='flag-5'>我最近在研究 Apache Pulsar 這款消息隊(duì)列,所以就以這個(gè)項(xiàng)目為例, **不過(guò)本文介紹的都是通用的技巧,完全可以用在其他大型開(kāi)源項(xiàng)目中** 。
    的頭像 發(fā)表于 04-12 11:34 ?1140次閱讀
    <b class='flag-5'>閱讀</b>開(kāi)源項(xiàng)目<b class='flag-5'>源碼</b>的實(shí)用技巧(上)
    主站蜘蛛池模板: 欧美黄色免费大片| 亚洲综合色dddd26| 国产操视频| 性久久久久久| 噜噜噜色| 免费在线观看的视频| 免费无码看av的网站| 日本写真高清视频免费网站网| av2021天堂网手机版| 在线观看黄色x视频| 香蕉视频在线免费播放| 丁香六月五月婷婷| 91操碰| 无人区理论片手机看片| 国产精品资源网| 51视频在线观看免费国产| 五月婷婷久久综合| 91桃色国产线观看免费| 国产在线黄| 日本黄色片在线观看| 天天综合天天综合色在线| 午夜男人天堂| 久久精品成人免费网站| 国产精品影视| 五月激情婷婷综合| 成人国产日本亚洲精品| 国产精品任我爽爆在线播放6080| 四虎最新影院| 五月深爱婷婷| xxx性xxx乱| 国产哺乳期奶水avav | 羞羞色院91精品网站| 四虎影院最新| 天天干视频网| 亚洲天堂三级| 永久免费影视在线观看| 久久久婷婷| 国产成年女一区二区三区| 91亚洲国产成人久久精品网站| 欧美人与牲动交xxxxbbbb| 国产小视频在线免费观看|