国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

重拾 Java 基礎

ideaa / 2795人閱讀

摘要:阿里開始招實習,同學問我要不要去申請阿里的實習,我說不去,個人對阿里的印象不好。記得去年阿里給我發(fā)了郵件,我很認真地回復,然后他不理我了。

引言

最近好久沒有遇到技術瓶頸了,思考得自然少了,每天都是重復性的工作。

阿里開始招實習,同學問我要不要去申請阿里的實習,我說不去,個人對阿里的印象不好。

記得去年阿里給我發(fā)了郵件,我很認真地回復,然后他不理我了。(最起碼的尊重都沒有,就算我菜你起碼回復我一下啊?)

這種不尊重人的公司感覺去了也不快樂,當程序員最重要的就是快樂,不快樂寫什么代碼?

電話面

同學很友好地分享了他的阿里電話面經(jīng)驗。

問的都是看功底的問題,和開發(fā)經(jīng)驗無關(估計寫上個幾年代碼不寫框架應該也不知道這個)。

Java中的HashMaptransientvolatileHTTP301/302、生產(chǎn)者消費者算法。

HashMap都問爛了,問的是HashMap的底層原理,我知道你們自己寫過JDK,請不要再問我HashMap里的put操作是怎么實現(xiàn)的了!

問源碼的真的很討厭,有什么意義嗎?看過的就能答上,沒看過的就答不上。

基礎學習 transient

這并不是第一次聽到transient這個詞了,之前也用過,當我們使用YunzhiService進行綜合查詢時,我們會在實體中構(gòu)造不映射到數(shù)據(jù)表的屬性用于查詢。

對于這些不映射為數(shù)據(jù)表字段的屬性,我們使用@Transient注解。

Java中被transient修飾又是什么意思呢?

為什么要有transientStackOverflow的解釋通俗易懂。

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開發(fā)團隊基本功扎實。

volatile

這個關鍵字也不知道怎么能給大家通俗的講出來,還是從實際的小例子出發(fā)吧?

大家回憶一下我們之前的單例模式,單例模式很常用,這個是必須要會的。

這是有問題的懶漢模式,多線程的時候就不能保持單例了。

public class Singleton {

    private static Singleton instance;

    private Singleton() {

    }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
修正之前的問題

糾正一下之前博客中的一個問題,之前這樣寫雖然也能實現(xiàn),但是效率極低,因為每次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結(jié)構(gòu)

讓我們來看Youtube上的一張圖:

CPU內(nèi)部結(jié)構(gòu)中,thread-1thread-2運行在不同的核心上,每個核心有一個local cache,兩個線程執(zhí)行時,會將變量從shared cache讀取到local cache

所以thread-1flag內(nèi)容改變了,但是thread-2獲取的flag還是從local cache中獲取的,所以還是true

直到,thread-1flag更新到shared cache,然后再更新到thread-2local cachethread-2才知道flag變了。

所以我們的單例也一樣,線程A新建了單例,然后其他線程再獲取的時候,不一定是線程A所創(chuàng)建的單例對象。

拯救世界

volatile來拯救世界了。

private static volatile Singleton instance;

volatile做了兩件事,強制將local cache寫入到shared cache,同時使其他核心中的local cache對該數(shù)據(jù)的緩存無效。

所以,完整的單例應該是這樣:

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;
    }
}
真正的單例

上面的講解只是為了讓大家了解Javavolatile的作用,實際的單例并不這樣實現(xiàn),而是使用私有靜態(tài)內(nèi)部類實現(xiàn)懶漢模式,當訪問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自己學會然后講明白了,這個應該是發(fā)生的概率很小很小,我為了讓volatile的驗證讓大家都看到,使用JDK自帶的線程池,模擬實際的多線程環(huán)境,分別執(zhí)行自己的測試代碼,但還是沒出現(xiàn)問題。

HTTP 301/302

去火狐開發(fā)者文檔看看:

301 Moved Permanently

永久重定向,請求的資源已經(jīng)被移動到了由Location頭部指定的url上,搜索引擎會根據(jù)該響應修正。

HTTP升級到HTTPS時應該能用到。

302 Found

臨時重定向,請求的資源被暫時的移動到了由Location頭部指定的url上。瀏覽器會重定向到這個url,但是搜索引擎不會對該資源的鏈接進行更新。

可能會在某個后臺服務癱瘓的時候再轉(zhuǎn)給別的后臺服務器時用到?

生產(chǎn)者消費者

至于最后的生產(chǎn)者消費者算法問題,我覺得意義不大,畢竟操作系統(tǒng)的課本出自位河北工業(yè)大學操作系統(tǒng)教師之手。

JDK中有阻塞隊列,用的就是生產(chǎn)者消費者模型。用到的時候再說吧。

總結(jié)

每個人都是優(yōu)秀的人,每個人都值得尊敬。

軟件生而自由,不受世俗污染,不受凡塵打擾,我祝愿每一位軟件工程師都能生活在自由、快樂之中。

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/73963.html

相關文章

  • 后臺 - 收藏集 - 掘金

    摘要:探究系統(tǒng)登錄驗證碼的實現(xiàn)后端掘金驗證碼生成類手把手教程后端博客系統(tǒng)第一章掘金轉(zhuǎn)眼間時間就從月份到現(xiàn)在的十一月份了。提供了與標準不同的工作方式我的后端書架后端掘金我的后端書架月前本書架主要針對后端開發(fā)與架構(gòu)。 Spring Boot干貨系列總綱 | 掘金技術征文 - 掘金原本地址:Spring Boot干貨系列總綱博客地址:http://tengj.top/ 前言 博主16年認識Spin...

    CrazyCodes 評論0 收藏0
  • Spring Security

    摘要:框架具有輕便,開源的優(yōu)點,所以本譯見構(gòu)建用戶管理微服務五使用令牌和來實現(xiàn)身份驗證往期譯見系列文章在賬號分享中持續(xù)連載,敬請查看在往期譯見系列的文章中,我們已經(jīng)建立了業(yè)務邏輯數(shù)據(jù)訪問層和前端控制器但是忽略了對身份進行驗證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護REST API 重拾后端之Spring Boot(一):REST API的搭建...

    keelii 評論0 收藏0
  • 重拾Java Network Programming(二)InetAddress

    摘要:前言今天,我將梳理在網(wǎng)絡編程中很重要的一個類以及其相關的類。這類主機通常不需要外部互聯(lián)網(wǎng)服務,僅有主機間相互通訊的需求。可以通過該接口獲取所有本地地址,并根據(jù)這些地址創(chuàng)建。在這里我們使用阻塞隊列實現(xiàn)主線程和打印線程之間的通信。 前言 今天,我將梳理在Java網(wǎng)絡編程中很重要的一個類InetAddress以及其相關的類NetworkInterface。在這篇文章中將會涉及: InetA...

    daryl 評論0 收藏0
  • CSS魔法堂:重拾Border之——更廣闊的遐想

    摘要:也就是說我們操作的幾何公式中的未知變量,而具體的畫圖操作則由渲染引擎處理,而不是我們苦苦哀求設計師幫忙。 前言 ?當CSS3推出border-radius屬性時我們是那么欣喜若狂啊,一想到終于不用再添加額外元素來模擬圓角了,但發(fā)現(xiàn)border-radius還分水平半徑和垂直半徑,然后又發(fā)現(xiàn)border-top-left/right-radius的水平半徑之和大于元素寬度時,實際值會按比...

    lily_wang 評論0 收藏0
  • 架構(gòu)~微服務

    摘要:接下來繼續(xù)介紹三種架構(gòu)模式,分別是查詢分離模式微服務模式多級緩存模式。分布式應用程序可以基于實現(xiàn)諸如數(shù)據(jù)發(fā)布訂閱負載均衡命名服務分布式協(xié)調(diào)通知集群管理選舉分布式鎖和分布式隊列等功能。 SpringCloud 分布式配置 SpringCloud 分布式配置 史上最簡單的 SpringCloud 教程 | 第九篇: 服務鏈路追蹤 (Spring Cloud Sleuth) 史上最簡單的 S...

    xinhaip 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<