ARTS挑戰打卡第十二週
Algorithm-一週至少一道算法題
Review-閱讀並點評至少一篇英文技術文章
Tip-學習至少一個技術技巧,總結和歸納在日常工作中所遇到的知識點
Share-分享一篇有觀點和思考的技術文章
01-Algorthm
— — — — — — —
https://leetcode.com/problems/construct-binary-search-tree-from-preorder-traversal
使用先序遍歷的順序構建二叉搜索樹。
先用第一個元素做根節點,然後遞歸創建左右子節點。
02-Review
——————
https://blog.pragmaticengineer.com/the-product-minded-engineer
講述如何成爲一名更有產品思維的工程師,程序員還是不能鎖死自己在一個領域,多方面探索新技能,有產品意識的工程師對開發工作和產品討論需求都有好處。
總結幾點:
1、關注業務數據
2、多問爲什麼,爲什麼做這個產品,爲什麼做這個需求?
3、多與非工程師職位的同事交流,開拓思維
4、在技術和產品上做折中,可以是產品配合技術,也可以技術配合產品
5、快速迭代,快速從用戶身上獲得反饋,改進產品
6、與產品經理維持友好的關係
7、學習所做產品或所在公司的商業模式
03-Tip
——————
1、Java的類庫的屬性大多數都是final的,final的作用是什麼?
當final用來修飾類時,表示類不可以被繼承;
當final用來修飾方法時,表示方法不可以被繼承的類修改
當final用來修飾變量時,表示變量不可以被修改。
注:如果是基本數據類型的變量,那麼變量在初始化之後不可以被修改,如果是引用類型的變量,那麼變量在初始化後不可以再指向另一個對象,但是它指向的對象的內容是可變的。
2、線程安全是什麼?怎麼解決線程安全問題?
在每個進程的內存空間中都會有一塊特殊的公共區域,通常稱爲堆(內存)。進程內的所有線程都可以訪問到該區域,這就是引起線程安全的潛在原因。
線程安全指的是,在堆內存中的數據可以被任何線程訪問到,在沒有限制的情況下存在被意外修改的風險。即堆內存空間在沒有保護機制的情況下,對多線程來說是不安全的地方,因爲放進去的數據,可能被其他線程“破壞”。
當多個線程訪問某個方法時,不管你通過怎樣的調用方式或者說這些線程如何交替的執行,在主程序中不需要去做任何的同步,這個類的結果行爲都是我們設想的正確行爲,那麼我們就可以說這個類是線程安全的。
線程安全的數據-局部變量,因爲局部變量是定義在方法內,數據是保存在線程的棧內存中,只屬於線程自己,是不共享的,所以其他內存無法訪問。
可能線程不安全的數據-類成員變量,因爲類成員變量不是定義在方法內,數據被分配到公共的堆內存中,堆在多個線程間是共享的,因此有潛在的安全風險。
解決線程安全的方法有哪些?
1、要讓公共區域堆內存中的數據對於每個線程都是安全的,那就每個線程都拷貝它一份,每個線程只處理自己的這一份拷貝而不去影響別的線程,那就是ThreadLocal類。
2、數據只能讀取,不能修改。其實就是常量或只讀變量,它們對於多線程是安全的,想改也改不了。
3、加鎖,鎖住數據,不讓其他線程訪問,而加鎖的方式有:悲觀鎖、樂觀鎖(CAS)
04-Share
—————
【面試】如果你這樣回答“什麼是線程安全”,面試官都會對你刮目相看-https://www.cnblogs.com/lixinjie/p/a-answer-about-thread-safety-in-a-interview.html
分享原因:迄今爲止看到最通俗易懂的一篇介紹線程安全的文章。
原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。
如果本文對你有幫助,請點個贊吧,謝謝
更多精彩內容,請關注個人公衆號。