10月收獲與體會(huì)

平時(shí)都會(huì)在印象筆記寫日報(bào)和周報(bào)弥臼,現(xiàn)在嘗試寫一寫月報(bào),總結(jié)10月份的收獲與體會(huì)朝群,具體的內(nèi)容如下:

自我學(xué)習(xí): 本月在工作之余燕耿,學(xué)習(xí)了什么知識(shí)

收獲體會(huì): 本月在工作學(xué)習(xí)過程中,有哪些收獲或者感悟體會(huì)姜胖,有哪些優(yōu)秀點(diǎn)誉帅,繼續(xù)堅(jiān)持。

待改進(jìn)的地方: 本月工作學(xué)習(xí)過程中谭期,有哪些地方做的不好堵第,以后需要改進(jìn)。

自我學(xué)習(xí)

學(xué)習(xí)清單

  • 1隧出、Glide學(xué)習(xí)
  • 2、完成《第一代碼》(第2版)的重溫阀捅,用Kotlin寫書中例子
  • 3胀瞪、JAVA多線程——線程安全之原子性,有序性和可見性
  • 4饲鄙、實(shí)現(xiàn)勻速加載的進(jìn)度條的方法
  • 5凄诞、學(xué)習(xí)單元測試
  • 6、學(xué)習(xí)Flutter

1忍级、 Glide學(xué)習(xí)

主要跟著郭霖的Glide專欄系列學(xué)習(xí)帆谍,最后自己總結(jié)輸出一篇博客

Glide的使用與解析

2、 完成《第一代碼》(第2版)的重溫轴咱,用Kotlin寫書中例子

在寫kotlin時(shí)印象較深的地方有

  • 沒有Java的switch汛蝙,Kotlin用when代替

例如

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
    when (item?.itemId) {
        android.R.id.home -> {
            mDrawerLayout?.openDrawer(GravityCompat.START)
        }
        R.id.backup -> {
            Toast.makeText(this, "You clicked Backup", Toast.LENGTH_SHORT).show()
        }
        R.id.delete -> {
            Toast.makeText(this, "You clicked Delete", Toast.LENGTH_SHORT).show()
        }
        R.id.setting -> {
            Toast.makeText(this, "You clicked Setting", Toast.LENGTH_SHORT).show()
        }
    }
    return true
}
  • 多用Kotlin的內(nèi)聯(lián)函數(shù)美化代碼烈涮,如letrun窖剑、apply等等

let:函數(shù)塊用it指代該對象坚洽,返回值是函數(shù)塊的最后一行

run: 函數(shù)塊不需要it,返回值是函數(shù)塊的最后一行

apply: 函數(shù)塊不需要it西土,返回值是傳入對象的本身 (多用于初始化實(shí)例賦值)

推薦閱讀: Kotlin系列之let讶舰、with、run需了、apply跳昼、also函數(shù)的使用

  • Kotlin的數(shù)組表示
val fruits: Array<Fruit> = arrayOf(
      Fruit("Apple", R.drawable.apple),
      Fruit("Banana", R.drawable.banana))
      
或者

var fruitList = ArrayList<Fruit>()      

3、JAVA多線程——線程安全之原子性肋乍,有序性和可見性

  • 原子性:指操作是不可分的鹅颊,如a++操作,實(shí)際是取a住拭、++挪略、賦值a三個(gè)操作,這三個(gè)操作要不可分滔岳。

  • 可見性:指一個(gè)操作執(zhí)行的結(jié)果需要對另一個(gè)操作可見杠娱,即緩存连锯、主內(nèi)存同時(shí)改變(參考下面推薦文章的內(nèi)存模型圖)胚迫。使用volatile關(guān)鍵字實(shí)現(xiàn)

  • 有序性:指程序的代碼執(zhí)行順序和語句的順序是一致的。
    這是因?yàn)樵贘ava內(nèi)存模型中索守,允許編譯器和處理器對指令進(jìn)行重排序刘离,
    但是重排序過程不會(huì)影響到單線程程序的執(zhí)行室叉,卻會(huì)影響到多線程并發(fā)執(zhí)行的正確性。

推薦閱讀: JAVA多線程——線程安全之原子性硫惕,有序性和可見性

4茧痕、實(shí)現(xiàn)勻速加載的進(jìn)度條的方法

方法(1):使用Timer實(shí)現(xiàn)網(wǎng)頁勻速加載的進(jìn)度條

參考 https://blog.csdn.net/qq_33589836/article/details/54616262

方法(2):使用Timer實(shí)現(xiàn)網(wǎng)頁勻速加載的進(jìn)度條

private static final int DURATION_TIME = 2000;
private int mCurrentProcess = 0;

private void startFakeProgress() {
    ValueAnimator anim = ValueAnimator.ofInt(0, 90);
    anim.setDuration(DURATION_TIME);
    anim.setInterpolator(new AccelerateInterpolator());
    anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            int progress = (int) animation.getAnimatedValue();
            if (progress > mCurrentProcess) {
                mCurrentProcess = progress;
                getView().updateDownloadDialog(progress);
            }
        }
    });
    anim.start();
}

5、學(xué)習(xí)單元測試

  • 如何創(chuàng)建測試類

可以自己手動(dòng)在相應(yīng)目錄創(chuàng)建測試類恼除,AS也提供了一種快捷方式:

選擇對應(yīng)的類->將光標(biāo)停留在類名上->按下ALT + ENTER->在彈出的彈窗中選擇Create Test

  • 如何在測試類中獲取Context

如果要獲取Context踪旷,那么需要加儀器化測試,可以采用常用單元測試開源庫Robolectric 配置如下

(1)在app model添加配置

android { 
    ... 
    testOptions { 
        unitTests { 
            includeAndroidResources = true 
        } 
    } 
}

dependencies { 
    ... 
    testImplementation "org.robolectric:robolectric:3.8” 
}

(2)在app/src/test/java/添加這個(gè)類豁辉,后續(xù)類可以繼承這個(gè)類令野,然后調(diào)用getContext

@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE, application = Application.class)
public abstract class RoboBase {
    protected Context getContext() {
        return RuntimeEnvironment.application;
    }
}

推薦閱讀: Android單元測試只看這一篇就夠了

6、學(xué)習(xí)Flutter

跟著Flutter官網(wǎng)學(xué)習(xí)

官網(wǎng):https://flutter.io/get-started/install/

自己輸出一篇博客:Flutter的安裝與使用

收獲體會(huì)

1徽级、完成項(xiàng)目先保證整體流程的完成气破。怎么算整體流程?即大部分用戶餐抢、大部分機(jī)型的可用性现使。

為什么呢低匙?因?yàn)锳ndroid的版本很多、各個(gè)廠商偶爾還有定制朴下,所以如果糾結(jié)太多細(xì)節(jié)努咐,忽略整個(gè)流程的完整度,那么會(huì)導(dǎo)致自己完成項(xiàng)目的效率變慢(直觀看殴胧,就是做需求太慢)渗稍。

以前自己為了追求完美,每個(gè)細(xì)節(jié)都追究团滥,結(jié)果費(fèi)力不討好竿屹,甚至深陷泥潭,需求開發(fā)慢灸姊,還加班很晚拱燃。這種情況就本末倒置了,只見樹葉不見森林力惯。

因此碗誉,以后自己先把握整體進(jìn)度,完成整體需求框架父晶。如果有細(xì)節(jié)問題哮缺,先記錄下來,等開發(fā)完整體流程甲喝,再解決細(xì)節(jié)問題尝苇。

2、一個(gè)人精力是有限的埠胖,晚上很晚回家糠溜,就沒有太多精力做其他事情,即便想做直撤,注意力也不集中非竿,還不如早早休息,或者簡單看書谋竖。

3汽馋、做好一件事件需要時(shí)間,比如寫博客圈盔,需要一點(diǎn)點(diǎn)完善補(bǔ)充,急不來悄雅。也需要自己平時(shí)一點(diǎn)點(diǎn)寫驱敲。

4、某晚又加班太晚宽闲,主要是因?yàn)榘l(fā)版前排查一個(gè)問題众眨,最終也沒有什么結(jié)論握牧,停止發(fā)版,第二天再發(fā)版娩梨。

很多事情都無法預(yù)測沿腰,計(jì)劃趕不上變化,想做什么事情都需要提前做狈定,遇到突發(fā)情況就要推遲了颂龙。

5、讀完《碼農(nóng)翻身》纽什,受益匪淺措嵌,做了一些摘錄

教訓(xùn):讀書太多,而實(shí)踐太少

吸取教訓(xùn):不僅看書芦缰,還去讀JUnit源碼企巢、Spring源碼、Hsqldb源碼让蕾、Jive源碼浪规,再加上工作寫的大量代碼

凡事必先騎上虎背,勇敢地邁出去探孝,努力地爭取一下笋婿,你就會(huì)發(fā)現(xiàn)自己登上了更高一層的臺(tái)階。逼著自己趕緊進(jìn)入未知領(lǐng)域再姑,拼命地去學(xué)萌抵。

養(yǎng)成計(jì)算機(jī)的思維方式,這個(gè)基本功的訓(xùn)練就是數(shù)據(jù)結(jié)構(gòu)和算法元镀,劉欣老師的經(jīng)驗(yàn)是多做習(xí)題绍填,讓這種思維在腦子里固化,以后的編程就可以信手拈來栖疑。

計(jì)算機(jī)的組成原理讨永、操作系統(tǒng)、編譯原理遇革、計(jì)算機(jī)網(wǎng)絡(luò)卿闹、數(shù)據(jù)庫、匯編語言等等萝快,融會(huì)貫通

停下來锻霎,思考,才是進(jìn)步的本質(zhì)揪漩。

寫出漂亮代碼并不容易旋恼,需要思路清晰,有良好的編程基礎(chǔ)奄容,有優(yōu)秀的抽象能力冰更,以及對一門語言的熟練掌握产徊。

每一個(gè)季度定一個(gè)小目標(biāo),努力達(dá)成蜀细,獲得成就感舟铜,就能刺激自己更進(jìn)一步。

6奠衔、看生老板的優(yōu)化分支谆刨,體會(huì)良多,這就是跟老板的差距涣觉,老板嘗試不少實(shí)踐痴荐,想必老板的技能又提升不少,實(shí)踐見真理官册。

7生兆、終于把以前遺留的一個(gè)問題解決了。

出現(xiàn)問題還是一樣解決方式膝宁,先分析問題鸦难,比如這次是加載慢的問題,那么需要找出耗時(shí)的地方员淫。

剛開始不確定哪里比較耗時(shí)合蔽,那么只能打log來定位。然后不斷縮小范圍介返,找到最耗時(shí)的地方拴事,比如這次是獲取錢包數(shù)據(jù)時(shí)的Json解析耗時(shí)。

這個(gè)操作大概20ms圣蝎,而且是在循環(huán)里刃宵,有近1000次循環(huán),意味20秒徘公。找到根源牲证,可以把耗時(shí)操作放在循環(huán)外,減少不必要的耗時(shí)操作关面。

8坦袍、堅(jiān)持解決問題的方法論,避免焦躁等太,分析問題捂齐,找出可能的原因,逐一驗(yàn)證缩抡。

9辛燥、主動(dòng)性,主動(dòng)跟蹤問題,雖然有些問題不是自己造成挎塌,但是自己主動(dòng)去查找,從錯(cuò)誤中學(xué)習(xí)内边。

10榴都、問題跟到底,針對問題打破砂鍋問到底漠其,跟蹤問題的根本原因嘴高,從中學(xué)到不少東西。

例如和屎,有一個(gè)空指針問題拴驮,正常加個(gè)判null就行,但是需要找原因柴信,為什么會(huì)產(chǎn)生null指針套啤,如下最后一行token.getData()空指針

List<Token> tokenList = coinInfo.getTokens()

if(tokenList == null) {
    return;
}

for(Token token: tokenList) {
   TokenData data = token.getData();
}

正常token不為null,除非list add一個(gè)空對象随常,或者什么場景導(dǎo)致tokenList有數(shù)據(jù)潜沦,但讀取其中一個(gè)數(shù)據(jù)時(shí)token為空

經(jīng)排查,發(fā)現(xiàn)存在多線程操作绪氛,在另外一個(gè)線程中存在CoinInfo.addToken唆鸡,而且沒有加鎖。
在并發(fā)情況枣察,可能導(dǎo)致tokenList的size+1争占,但是數(shù)據(jù)還沒有添加進(jìn)去,這時(shí)候線程切換時(shí)就獲取token為空序目。
因此根本解決方法不是加判null處理臂痕,而是在addToken時(shí)加鎖同步

反思:以后在List add數(shù)據(jù)時(shí),注意有沒有多線程問題宛琅,如有記得加同步刻蟹,因?yàn)锳rrayList的add方法不是線程安全

待改進(jìn)的地方

1、提高晚上工作的效率嘿辟。

后續(xù)改進(jìn):晚上加班很晚的時(shí)候舆瘪,需要評(píng)估工作量,不要做太多無所謂的工作红伦,晚上多留些時(shí)間給自己充電英古。

2、提前完成任務(wù)昙读,提高計(jì)劃執(zhí)行力召调。周末因?yàn)橐恍┡R時(shí)突發(fā)事情,導(dǎo)致事情沒有完成,要推遲唠叛。

后續(xù)改進(jìn):把一些任務(wù)提前完成只嚣,避免突然情況。

3艺沼、某周學(xué)習(xí)內(nèi)容比較雜册舞,還是一件一件來好。

后續(xù)改進(jìn):先專心完成一件事件障般,再去做另一件事件调鲸。

4、時(shí)間安排不夠合理挽荡,比如周五調(diào)休藐石,出去拍景后回家修圖太久,而且晚上只學(xué)習(xí)了一會(huì)(看漫威電影了)定拟。前幾天一直在學(xué)習(xí)于微,到周五就放松過頭了。

后續(xù)改進(jìn):以后安排好時(shí)間办素,持續(xù)學(xué)習(xí)角雷,延遲滿足感。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末性穿,一起剝皮案震驚了整個(gè)濱河市勺三,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌需曾,老刑警劉巖吗坚,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異呆万,居然都是意外死亡商源,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門谋减,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牡彻,“玉大人,你說我怎么就攤上這事出爹∽穑” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵严就,是天一觀的道長总寻。 經(jīng)常有香客問我,道長梢为,這世上最難降的妖魔是什么渐行? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任轰坊,我火速辦了婚禮,結(jié)果婚禮上祟印,老公的妹妹穿的比我還像新娘肴沫。我一直安慰自己,他們只是感情好旁理,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布樊零。 她就那樣靜靜地躺著,像睡著了一般孽文。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夺艰,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天芋哭,我揣著相機(jī)與錄音,去河邊找鬼郁副。 笑死减牺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的存谎。 我是一名探鬼主播拔疚,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼既荚!你這毒婦竟也來了稚失?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對情侶失蹤恰聘,失蹤者是張志新(化名)和其女友劉穎句各,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晴叨,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凿宾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兼蕊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片初厚。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖孙技,靈堂內(nèi)的尸體忽然破棺而出产禾,到底是詐尸還是另有隱情,我是刑警寧澤绪杏,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布下愈,位于F島的核電站,受9級(jí)特大地震影響蕾久,放射性物質(zhì)發(fā)生泄漏势似。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望履因。 院中可真熱鬧障簿,春花似錦、人聲如沸栅迄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毅舆。三九已至西篓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間憋活,已是汗流浹背岂津。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悦即,地道東北人吮成。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像辜梳,于是被迫代替她去往敵國和親粱甫。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,499評(píng)論 25 707
  • 用兩張圖告訴你作瞄,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料茶宵? 從這篇文章中你...
    hw1212閱讀 12,693評(píng)論 2 59
  • 最近氣溫在漸漸上升,感覺夏天快要到了粉洼,小草也開始茂盛起來了节预,突然很讓我想念小時(shí)候在鄉(xiāng)下的夏日生活。 夏天的日子...
    花花夫人閱讀 334評(píng)論 0 0
  • 這是這一期寫作訓(xùn)練營的最后一篇文章属韧,可以蓋棺定論了安拟,就是這一期70天我寫的都是垃圾,或者用廣東話說就是嘞蔎宵喂。 在寫...
    新生的新生活閱讀 318評(píng)論 0 0
  • 題記:從生活中發(fā)現(xiàn)美糠赦,帶著一雙不再挑剔的眼睛和一顆寧靜的心靈,出去尋找生活的美锅棕。 01 突然有一天拙泽,27號(hào)樓門前多...
    寧靜的夏天001閱讀 166評(píng)論 0 3