1、前言
首先,我認(rèn)為學(xué)習(xí)總結(jié),要有所總,所結(jié),就是有歸納后,能用自己的話告訴別人!有所結(jié),就是有所收獲輸出,一般我認(rèn)為是思維導(dǎo)圖,所以,每篇文章前,我都會先給出文章的腦圖:

2、正文
學(xué)習(xí)任何文章之前,一定要有可行的方法論,否則很難有所突破。上面腦圖中,我列出了一些個人認(rèn)為非常好的方法論,所以,在學(xué)習(xí)課程前,先了解一下,對后續(xù)自學(xué)或其它的學(xué)習(xí)都會有益處。
一個知識點
- 為什么需要
XXX - 什么是
XXX - 怎么使用
XXX - 使用
XXX時注意的問題 -
XXX的應(yīng)用領(lǐng)域 -
XXX的優(yōu)缺點 -
XXX觸類旁通
這個理論是在郝斌老師所錄制的計算機(編程)教學(xué)視頻里提到的,很適合初學(xué)者,有興趣的大家可以自行搜索。
為什么這個很受用?因為簡單的套用一下,你就知道自己是否掌握了一個知識點!
舉例:
- 為什么需要
單例模式 - 什么是
單例模式 - 怎么使用
單例模式 - 使用
單例模式時注意的問題 -
單例模式的應(yīng)用領(lǐng)域 -
單例模式的優(yōu)缺點 -
單例模式觸類旁通
當(dāng)我們在談?wù)撔阅軆?yōu)化時,我們在說什么?
- CPU
- 內(nèi)存
- 網(wǎng)絡(luò)
- I/O
大家有沒有發(fā)現(xiàn),以上4點對應(yīng)計算機的基本組成原理,在談?wù)撔阅軆?yōu)化時,其實就是在說計算機的瓶頸!,所以,當(dāng)在談?wù)撔阅軆?yōu)化時,我們可以做的,就是把計算機的瓶頸提高或轉(zhuǎn)化。
單一 CPU 處理不過來,我們新加 GPU;一個 CPU 處理不來,我們8核、16核心!多核 CPU 處理不過來,我們可以集群!分布式!云化!
當(dāng)內(nèi)存不足時,我們加內(nèi)存!內(nèi)存壓縮!內(nèi)存置換!
當(dāng)網(wǎng)絡(luò)帶寬不夠時,我們加帶寬!我們加服務(wù)器!我們加異地多端!
當(dāng)I/O過高時,我們取舍I或O!我們把I和O拆分!
在深入到程序、代碼中,所有的優(yōu)化,是不是也一樣,你要減少計算和循環(huán)次數(shù),你要節(jié)省內(nèi)存開銷!你要網(wǎng)絡(luò)數(shù)據(jù)緩存!你要定量定時入庫!
所有的性能優(yōu)化,不過如此!大家明白了嗎?
移動設(shè)備時代,性能問題還有一個就是在小的空間里沒有大的電池,其實就是電池的瓶頸!但是一般開發(fā)者并不關(guān)心,因為他們感覺自己只是開發(fā)App,使用App的是用戶和他們的手機設(shè)備!電池的瓶頸有消耗和損耗2個問題,消耗是我們寫的程序在實現(xiàn)功能的同時能不能減少計算量,損耗是我們寫了一些我們并不需要的代碼導(dǎo)致了不必要的計算量。如果平時有注意的,2015年時三星手機針對那么功耗過大的App 直接強制退出,這可能也是大家說的對中國本地化做不好的原因?qū)е率“??因為?yōu)化是不是真的為了解決卡頓或性能,就一定要為所欲為呢?這也是開發(fā)者需要思考的問題。電池技術(shù)當(dāng)下沒有突破的時候,電量依然是非常值得關(guān)注的事情。現(xiàn)在iOS 和 Android 都開始統(tǒng)計App的電量使用情況,所以不從現(xiàn)在開始節(jié)能,你的App可能就被用戶刪除。當(dāng)然,針對這些問題,iOS/macOS 系統(tǒng)蘋果做了很多系統(tǒng)層級的優(yōu)化,這也許也是很少開發(fā)者關(guān)心的原因,感興趣的可以看看歷年 WWDC - Apple Developer,蘋果很多關(guān)于電量節(jié)能有很多策略可以借鑒。
換空間
- 壓縮
- 分片
- 索引
上面說到的性能優(yōu)化,從大方向時如此,然后細(xì)化到具體,會有非常多的算法或技巧,其中換空間就是一個經(jīng)典的問題。
大家一定聽說過類似:
- “20張100MB的圖片,怎么顯示在1G內(nèi)存的設(shè)備上”
- “在2.5億個整數(shù)中找出不重復(fù)的整數(shù),注,內(nèi)存不足以容納這2.5億個整數(shù)。”
- “給定a、b兩個文件,各存放50億個url,每個url各占64字節(jié),內(nèi)存限制是4G,讓你找出a、b文件共同的url?”
這些問題,其實解法,基本上可以用上面3個方法!
大家明白了嗎?建立你自己的開發(fā)知識體系!其實并不難,學(xué)習(xí)是沒有捷徑,但有方法!,所以,了解和掌握更多的方法論,構(gòu)建自己的知識體系樹,這樣,才是不用被動的每天在各種各樣的文章中,人浮于事!
學(xué)什么
- 不要被難倒 —— 分治思想
- 不要想太簡單
- 學(xué)習(xí)曲線陡峭度,跳過原則
- 多疑問,多思考,多總結(jié)
- 學(xué)習(xí)不僅僅是知識,還有過程
- 授人以魚不如授人以漁
我個人推崇 授人以魚不如授人以漁,學(xué)習(xí)不是給你知識,而是學(xué)會如果獲取知識,如何知識點串聯(lián)起來,如何快速有效的掌握知識!
學(xué)習(xí)技巧
- 先實踐再學(xué)理論更有感覺
- 按工作需要來,工作畢竟是實踐,最容易有成就感的
- 實踐&思考
- 經(jīng)驗&總結(jié)
- 方向很重要,堅持方向更重要
- 不斷深入,理解和認(rèn)知都在更新
- 把邏輯和流程整理出來,更清晰
- 嘗試作為一個提供 api 的人
- 并不是樣樣精通,而是有擅長的領(lǐng)域。
- 融會貫通
很多人可能迷戀/迷信學(xué)習(xí)的快捷方式,每次學(xué)習(xí)一個知識點時,總時想找到捷徑在學(xué)習(xí),往往不得其道!有需要,大家可以看看我之前的年終總結(jié) 2020,愛你愛你 | iHTCboy's blog,這里我就不多說了。關(guān)于學(xué)習(xí),先深挖某一領(lǐng)域,經(jīng)過大量的學(xué)習(xí)和實踐后理解了編程的本質(zhì),從而可以靈活調(diào)配和運用自己已經(jīng)積累的知識。切記!切記!切記!學(xué)習(xí)是沒有捷徑!但有方法!
知識點
- 組件化是將上層業(yè)務(wù)隔離開,下層提供通用能力的一種架構(gòu)模式
- 組件化、熱修復(fù)、動態(tài)化、大前端、Flutter、小程序
- 提高編譯速度,內(nèi)存優(yōu)化,性能優(yōu)化,電量優(yōu)化,測試驅(qū)動開發(fā),架構(gòu)設(shè)計模式和iOS中算法數(shù)據(jù)結(jié)構(gòu)的使用
雖然大家都是程序員,工程師,但是,所在行業(yè)不同,現(xiàn)實是千差萬別的!了解和熟悉的知識也是不盡不同!如何把計算機的萬千技術(shù)用到自己所在的行業(yè)?每個人的精力有限,但是無極限,當(dāng)別人告訴你不可能時,那一定是他度量的尺子與你不同!我們度量一件事,要盡量放長線,放大眼光,放高視角!,對于知識點,有太多的東西,選擇自己感興趣和工作需要的,不用太關(guān)心別人的評論,絕大多數(shù)事件,不是做不來,而是需要長期做!
面試
- 被別人問底層原理答不出所以然
- 1.業(yè)務(wù)代碼誰都會寫,你還會什么?
- 2.我覺得iOS開發(fā)不值這個價,我們公司這個價的也不是沒有都是后臺,前端不需要。
- 公司不考慮員工的成長,多待無益
- 成體系地提升自己的內(nèi)功,完善自己,然后反哺到工作上,讓工作效率和質(zhì)量達(dá)到質(zhì)的提升,進(jìn)而從容應(yīng)對技術(shù)的更新迭代
- 面試應(yīng)聘者的時候,通常都會問他所負(fù)責(zé)項目的整體架構(gòu)是怎樣的。
- 只對自己負(fù)責(zé)的那攤子事兒說的溜,而回答所在項目整體情況時卻支支吾吾,面試不會成功。
如果不是自由工作者,我想大多數(shù)的國內(nèi)同學(xué)都沒有機會選擇,所以,面試是一個總是要面對的問題,每次辭職、被辭職,大家就重新拿起試題集來刷,刷題目!刷算法!刷刷刷!
所有的問題不能簡單的一刀切!,經(jīng)過這么多年,我的理解里,問題沒有對與錯,好與壞。刷題目也是一樣。我想說的是內(nèi)力是不能一天倆天就長成,所以為面試,建立自己的開發(fā)知識體系,面試題就是西天取經(jīng),每一道題目就是一個怪獸,你不可能一天打敗所有怪獸,所以,不要忽視七七四十九日的輪回。
書籍
- 《代碼整潔之道》
- 《人月神話》
書籍很多,好書也很多!這里暫時不列出所有值得看的技術(shù)書,因為,我害怕大家一下子又回到原點,買了一堆書,然后不知道從那里開始!,所以,我是不建議買書!買書是自己要系統(tǒng)學(xué)習(xí)的時候買!怕傷害眼睛時買,但不能因為別人推薦或感覺不錯就買!要從自身出發(fā),從自己工作,從自己從事的行業(yè),從自己的規(guī)劃發(fā)展,從自己的興趣,任何事情的起點,都是初心,不要忘了初心!
3、總結(jié)
關(guān)于如何建立自己的開發(fā)知識體系,以上就是我認(rèn)為比較重要的點(還有很多方法論,但是多并一定是好事,以后有機會在歸納吧),貫穿到開發(fā)的每一個細(xì)節(jié),需要大家長期長時間的學(xué)習(xí)、研究和經(jīng)歷,才能打造一套屬于自己的知識樹,任何告訴你可以復(fù)制的知識,你可以復(fù)制!但永遠(yuǎn)無法粘貼到自己腦心中!
更多關(guān)于 iOS 開發(fā)和程序開發(fā)相關(guān)的內(nèi)容,可以查看系列,目前還在連載中 【學(xué)習(xí)總結(jié)】iOS開發(fā)高手課 -- (連載中) | iHTCboy's blog,以上,希望對你有用!
參考
- 《iOS開發(fā)高手課 - 極客時間》
- iOS開發(fā)高手課 -- 學(xué)習(xí)總結(jié)(連載) | iHTCboy's blog
- 2020,愛你愛你 (年終總結(jié))| iHTCboy's blog
- (面試)Hash表算法十道海量數(shù)據(jù)處理面試題 - CJZhaoSimons - 博客園
- 如有侵權(quán),聯(lián)系必刪!
- 如有不正確的地方,歡迎指導(dǎo)!
- 如有疑問,歡迎在評論區(qū)一起討論!
注:本文首發(fā)于 iHTCboy's blog,如若轉(zhuǎn)載,請注來源