摘要:阿里開始招實習,同學問我要不要去申請阿里的實習,我說不去,個人對阿里的印象不好。記得去年阿里給我發了郵件,我很認真地回復,然后他不理我了。
引言
最近好久沒有遇到技術瓶頸了,思考得自然少了,每天都是重復性的工作。
阿里開始招實習,同學問我要不要去申請阿里的實習,我說不去,個人對阿里的印象不好。
記得去年阿里給我發了郵件,我很認真地回復,然后他不理我了。(最起碼的尊重都沒有,就算我菜你起碼回復我一下啊?)
這種不尊重人的公司感覺去了也不快樂,當程序員最重要的就是快樂,不快樂寫什么代碼?
電話面同學很友好地分享了他的阿里電話面經驗。
問的都是看功底的問題,和開發經驗無關(估計寫上個幾年代碼不寫框架應該也不知道這個)。
Java中的HashMap、transient、volatile、HTTP301/302、生產者消費者算法。
HashMap都問爛了,問的是HashMap的底層原理,我知道你們自己寫過JDK,請不要再問我HashMap里的put操作是怎么實現的了!
問源碼的真的很討厭,有什么意義嗎?看過的就能答上,沒看過的就答不上。
基礎學習 transient這并不是第一次聽到transient這個詞了,之前也用過,當我們使用YunzhiService進行綜合查詢時,我們會在實體中構造不映射到數據表的屬性用于查詢。
對于這些不映射為數據表字段的屬性,我們使用@Transient注解。
那Java中被transient修飾又是什么意思呢?
為什么要有transient?StackOverflow的解釋通俗易懂。
The transient keyword in Java is used to indicate that a field should not be part of the serialization (which means saved, like to a file) process.
Java中的transient關鍵字,意味著該字段不參與序列化,意味著不被保存,例如輸出到文件中。
序列化?fastjson應該用到了這個關鍵字。
厲害厲害,fastjson開發團隊基本功扎實。
volatile這個關鍵字也不知道怎么能給大家通俗的講出來,還是從實際的小例子出發吧?
大家回憶一下我們之前的單例模式,單例模式很常用,這個是必須要會的。
這是有問題的懶漢模式,多線程的時候就不能保持單例了。
public class Singleton { private static Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }修正之前的問題
糾正一下之前博客中的一個問題,之前這樣寫雖然也能實現,但是效率極低,因為每次getInstance的時候都會被synchronized阻塞。
public class Singleton { private static Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }
為了效率,不能在方法上加鎖,所以需要在新建單例的時候加鎖,保證只要只有一個單例被new出來。
看起來是沒問題的,因為我們想當然的以為,一個線程new出來的Singleton,賦值給instance,然后另一個線程獲取到的instance就一定不是空。實際上呢?
CPU結構讓我們來看Youtube上的一張圖:
在CPU內部結構中,thread-1和thread-2運行在不同的核心上,每個核心有一個local cache,兩個線程執行時,會將變量從shared cache讀取到local cache。
所以thread-1把flag內容改變了,但是thread-2獲取的flag還是從local cache中獲取的,所以還是true。
直到,thread-1的flag更新到shared cache,然后再更新到thread-2的local cache,thread-2才知道flag變了。
所以我們的單例也一樣,線程A新建了單例,然后其他線程再獲取的時候,不一定是線程A所創建的單例對象。
拯救世界volatile來拯救世界了。
private static volatile Singleton instance;
volatile做了兩件事,強制將local cache寫入到shared cache,同時使其他核心中的local cache對該數據的緩存無效。
所以,完整的單例應該是這樣:
public class Singleton { private static volatile Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }真正的單例
上面的講解只是為了讓大家了解Java中volatile的作用,實際的單例并不這樣實現,而是使用私有靜態內部類實現懶漢模式,當訪問getInstance方法時,才加載Holder類,實例化單例。
public class Singleton { private static class Holder { private static Singleton instance = new Singleton(); } private Singleton() { } public static Singleton getInstance() { return Holder.instance; } }
呼,長出了一口氣,兩個晚上了,總算把volatile自己學會然后講明白了,這個應該是發生的概率很小很小,我為了讓volatile的驗證讓大家都看到,使用JDK自帶的線程池,模擬實際的多線程環境,分別執行自己的測試代碼,但還是沒出現問題。
HTTP 301/302去火狐開發者文檔看看:
301 Moved Permanently
永久重定向,請求的資源已經被移動到了由Location頭部指定的url上,搜索引擎會根據該響應修正。
HTTP升級到HTTPS時應該能用到。
302 Found
臨時重定向,請求的資源被暫時的移動到了由Location頭部指定的url上。瀏覽器會重定向到這個url,但是搜索引擎不會對該資源的鏈接進行更新。
可能會在某個后臺服務癱瘓的時候再轉給別的后臺服務器時用到?
生產者消費者至于最后的生產者消費者算法問題,我覺得意義不大,畢竟操作系統的課本出自七位河北工業大學操作系統教師之手。
JDK中有阻塞隊列,用的就是生產者消費者模型。用到的時候再說吧。
總結每個人都是優秀的人,每個人都值得尊敬。
軟件生而自由,不受世俗污染,不受凡塵打擾,我祝愿每一位軟件工程師都能生活在自由、快樂之中。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/73963.html
摘要:探究系統登錄驗證碼的實現后端掘金驗證碼生成類手把手教程后端博客系統第一章掘金轉眼間時間就從月份到現在的十一月份了。提供了與標準不同的工作方式我的后端書架后端掘金我的后端書架月前本書架主要針對后端開發與架構。 Spring Boot干貨系列總綱 | 掘金技術征文 - 掘金原本地址:Spring Boot干貨系列總綱博客地址:http://tengj.top/ 前言 博主16年認識Spin...
摘要:框架具有輕便,開源的優點,所以本譯見構建用戶管理微服務五使用令牌和來實現身份驗證往期譯見系列文章在賬號分享中持續連載,敬請查看在往期譯見系列的文章中,我們已經建立了業務邏輯數據訪問層和前端控制器但是忽略了對身份進行驗證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護REST API 重拾后端之Spring Boot(一):REST API的搭建...
摘要:前言今天,我將梳理在網絡編程中很重要的一個類以及其相關的類。這類主機通常不需要外部互聯網服務,僅有主機間相互通訊的需求。可以通過該接口獲取所有本地地址,并根據這些地址創建。在這里我們使用阻塞隊列實現主線程和打印線程之間的通信。 前言 今天,我將梳理在Java網絡編程中很重要的一個類InetAddress以及其相關的類NetworkInterface。在這篇文章中將會涉及: InetA...
摘要:也就是說我們操作的幾何公式中的未知變量,而具體的畫圖操作則由渲染引擎處理,而不是我們苦苦哀求設計師幫忙。 前言 ?當CSS3推出border-radius屬性時我們是那么欣喜若狂啊,一想到終于不用再添加額外元素來模擬圓角了,但發現border-radius還分水平半徑和垂直半徑,然后又發現border-top-left/right-radius的水平半徑之和大于元素寬度時,實際值會按比...
閱讀 2408·2021-11-23 09:51
閱讀 1219·2021-11-22 13:54
閱讀 3428·2021-09-24 10:31
閱讀 1095·2021-08-16 10:46
閱讀 3629·2019-08-30 15:54
閱讀 710·2019-08-30 15:54
閱讀 2892·2019-08-29 17:17
閱讀 3163·2019-08-29 15:08