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

分享原因:迄今爲止看到最通俗易懂的一篇介紹線程安全的文章。

原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。

如果本文對你有幫助,請點個贊吧,謝謝

更多精彩內容,請關注個人公衆號。

相關文章