国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【字節(jié)面試】Fail-fast知識(shí)點(diǎn)相關(guān)知識(shí)點(diǎn)

這篇具有很好參考價(jià)值的文章主要介紹了【字節(jié)面試】Fail-fast知識(shí)點(diǎn)相關(guān)知識(shí)點(diǎn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

字節(jié)面試,問到的一個(gè)小知識(shí)點(diǎn),這里做一下總結(jié),其實(shí)小編之前有一篇文章,已經(jīng)對(duì)此有過涉及,不過這里知識(shí)專項(xiàng)針對(duì)于問題,把這個(gè)知識(shí)點(diǎn)拎出來說一下。

1.問題

什么是Fail-fast機(jī)制?
Hashmap是否擁有Fail-fast機(jī)制?
ConcurrentModificationException異常原因和解決方法是什么?
哪些你常用的數(shù)據(jù)結(jié)構(gòu)是Fail-fast的,哪些不是?舉例說明一下
Enumeration與Iterator的異同?

面試被問failfast,Java隨筆,Android隨筆,面試,java,字節(jié),fail-fast,Enumeration

2.探索、解答

2.1 Fail-fast機(jī)制

從字面意思,很好理解,就是快速失敗機(jī)制。映射到j(luò)ava設(shè)計(jì)中,fail-fast 機(jī)制是java集合(Collection)中的一種錯(cuò)誤機(jī)制。當(dāng)多個(gè)線程對(duì)同一個(gè)集合的內(nèi)容進(jìn)行操作時(shí),就可能會(huì)產(chǎn)生fail-fast事件。例如:當(dāng)某一個(gè)線程A通過iterator去遍歷某集合的過程中,若該集合的內(nèi)容被其他線程所改變了;那么線程A訪問集合時(shí),就會(huì)拋出ConcurrentModificationException異常,產(chǎn)生fail-fast事件。

2.2 ConcurrentModificationException

List在for、while正常遍歷過程中,如果remove元素,容易出現(xiàn)ConcurrentModificationException 異常,根本原因的話,之前ArrayList源碼分析文章已經(jīng)講過,各位有興趣可以移步閱讀。

ConcurrentModificationException發(fā)生是因?yàn)槲覀冊(cè)谑褂玫鞅闅vList的同時(shí),還使用了List相應(yīng)的remove、add進(jìn)行元素增加或刪除,導(dǎo)致不一。

2.3 Enumeration與Iterator的異同

2.3.1 Iterator

java中迭代器接口的源碼很簡單,我們看下面


package java.util;

import java.util.function.Consumer;


public interface Iterator<E> {

    boolean hasNext();

    E next();


    default void remove() {
        throw new UnsupportedOperationException("remove");
    }

    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

就是遍歷、移除的接口定義,這塊知識(shí)我們?cè)贏ndroid源碼設(shè)計(jì)模式探索與實(shí)戰(zhàn)【迭代器模式】一文中,對(duì)于迭代器設(shè)計(jì)模式,做過深入剖析,迭代器模式重在容器類集合提供順序遍歷的方式,其實(shí)從上面Demo、實(shí)踐案例、源碼中,大家都可以看到,迭代器模式,實(shí)際上就是把不同類型的集合的遍歷進(jìn)行了封裝, 這樣針對(duì)于客戶端來說,只需關(guān)注迭代器接口,不再需要關(guān)心內(nèi)部使用了什么類型的集合。

2.3.2 Enumeration

我們看一下這個(gè)接口的源碼

package java.util;

/**

 * @see     java.util.Iterator
 * @see     java.io.SequenceInputStream
 * @see     java.util.Enumeration#nextElement()
 * @see     java.util.Hashtable
 * @see     java.util.Hashtable#elements()
 * @see     java.util.Hashtable#keys()
 * @see     java.util.Vector
 * @see     java.util.Vector#elements()
 *
 * @author  Lee Boynton
 * @since   JDK1.0
 */
public interface Enumeration<E> {

    boolean hasMoreElements();

    E nextElement();
}

只有是否還有元素的判斷接口、遍歷下一個(gè)元素的兩個(gè)方法定義,并沒有移除方法,所以這個(gè)玩意,自然而然就不存在Fail-fast和ConcurrentModificationException了。

2.3.3 Enumeration與Iterator異同總結(jié)

其實(shí)一看源碼,相信大家就立馬明白了,Enumeration與Iterator都是java定義的集合遍歷接口,不同的是Iterator提供了移除接口。
有了移除操作,自然而然就是涉及到多線程安全性,那么就引入了可能存在的ConcurrentModificationException。

2.4 Fail-fast舉例

哪些你常用的數(shù)據(jù)結(jié)構(gòu)是Fail-fast的,哪些不是?上面源碼的時(shí)候,其實(shí)大家已經(jīng)看到了答案。
Arraylist、HashMap(LinkedHashmap、HashSet本身就是繼承與Hashmap的)是有Fail-fast機(jī)制的,因?yàn)樗麄兌加械鱅terator。而HashTable、Vector的某些遍歷方式是沒有的,因?yàn)樗鼘?shí)現(xiàn)與Enumeration。文章來源地址http://www.zghlxwxcb.cn/news/detail-816003.html

 * @see     java.util.Iterator
 * @see     java.io.SequenceInputStream
 * @see     java.util.Enumeration#nextElement()
 * @see     java.util.Hashtable
 * @see     java.util.Hashtable#elements()
 * @see     java.util.Hashtable#keys()
 * @see     java.util.Vector
 * @see     java.util.Vector#elements()

public class Itbird{
public static void main(String[] args){
        Vector v = new Vector();
        v.addElement("my");
        v.addElement("you");
        Enumeration e = v.elements();//返回Enumeration對(duì)象
        while(e.hasMoreElements()){
            String value = (String)e.nextElement();//調(diào)用nextElement方法獲得元素
            System.out.print(value);
        }
    }
}

到了這里,關(guān)于【字節(jié)面試】Fail-fast知識(shí)點(diǎn)相關(guān)知識(shí)點(diǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Hadoop相關(guān)知識(shí)點(diǎn)

    Hadoop相關(guān)知識(shí)點(diǎn)

    開啟防火墻 sudo ufw enable 關(guān)閉防火墻 sudo ufw disable 查看防火墻狀態(tài) sudo ufw status 修改主機(jī)名 sudo vi /etc/hostname 修改映射 sudo vi /etc/hosts (考題) 建立文件夾 mkdir 文件夾名字 刪除文件夾 rm -rf 遞歸刪除文件夾向下穿透,其下所有文件、文件夾都會(huì)被刪除 rm -f 強(qiáng)制刪除文件 rm -r 遞歸

    2024年02月06日
    瀏覽(20)
  • ThreadLocal相關(guān)知識(shí)點(diǎn)

    ThreadLocal是Java中的一個(gè)類,它提供了一種線程局部變量的機(jī)制。它的作用是,為每個(gè)線程創(chuàng)建一個(gè)獨(dú)立的變量副本,各個(gè)線程之間互不干擾。簡單來說,ThreadLocal為多線程環(huán)境下的線程提供了一種線程私有的數(shù)據(jù)存儲(chǔ)方式。 使用ThreadLocal可以避免多線程中的數(shù)據(jù)共享和競爭條

    2024年02月11日
    瀏覽(26)
  • http相關(guān)知識(shí)點(diǎn)

    http相關(guān)知識(shí)點(diǎn)

    一張網(wǎng)頁實(shí)際上可能會(huì)有多種元素組成,這也就說明了網(wǎng)頁需要多次的http請(qǐng)求。 可由于http是基于TCP的,而TCP創(chuàng)建鏈接是有代價(jià)的,因此頻繁的創(chuàng)建鏈接會(huì)導(dǎo)致效率降低 為了防止這種情況,就需要兩端主機(jī)都具備支持長連接的功能,將大份的資源使用一條鏈接就包含,也就是

    2024年02月13日
    瀏覽(23)
  • SpringMVC相關(guān)知識(shí)點(diǎn)

    傳統(tǒng)開發(fā)中的控制層: 接收請(qǐng)求參數(shù) request.getParameter 封裝實(shí)體 new 實(shí)體類調(diào)用其set方法 訪問業(yè)務(wù)層 接收訪問結(jié)果 指派頁面 通過request和response對(duì)象進(jìn)行頁面跳轉(zhuǎn) 將共有行為進(jìn)行抽取成DispatcherServlet【SpringMVC內(nèi)部集成】,通過Spring-MVC.xml配置文件去配置。 Spring: 獲取請(qǐng)求參數(shù)

    2024年02月16日
    瀏覽(17)
  • Linux相關(guān)知識(shí)點(diǎn)

    Linux是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),是一個(gè)基于POSIX和UNIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。它能運(yùn)行主要的UNIX工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。 Linux內(nèi)核 是一個(gè)Linux系統(tǒng)的內(nèi)核,而不是一個(gè)操作系統(tǒng) Linux操作系統(tǒng) 紅帽操

    2024年02月11日
    瀏覽(22)
  • MicroBlaZe 相關(guān)知識(shí)點(diǎn)

    1.DDR3——存儲(chǔ).c的應(yīng)用程序。需要兩個(gè)時(shí)鐘(200MHZ輸入,還有一個(gè)是特權(quán)同學(xué)的166.6m) 2.QSPI FLASH——對(duì)flash進(jìn)行固化(1.需要50M外部時(shí)鐘輸入2.在SDK里面需要修改值為5)。 3.MicroBlaZe的輸入時(shí)鐘(mig輸出的時(shí)鐘頻率一般小于200MHZ)。 5.SDK里面會(huì)有個(gè)串口terminal可以顯示打印信息。

    2024年02月13日
    瀏覽(27)
  • DAC相關(guān)知識(shí)點(diǎn)

    1.回放數(shù)據(jù)64bit的數(shù)據(jù)來源有兩個(gè)地方: A——ROM波形數(shù)據(jù)表(數(shù)據(jù)來源可由dds產(chǎn)生或者matlab產(chǎn)生,本實(shí)際項(xiàng)目選擇由dds產(chǎn)生的數(shù)據(jù):通過寫地址出來相應(yīng)頻率的波形)。 B——預(yù)留的接口給客戶用來回訪他們的I/Q數(shù)據(jù) (64bit數(shù)據(jù)一般是4組16bit的IQ拼接的{i0,q0,i1,q1})。 2.6

    2024年02月12日
    瀏覽(17)
  • java相關(guān)知識(shí)點(diǎn)

    1.String和StringBuffer如何互相轉(zhuǎn)化 StringBuffer buffer = new StringBuffer(string); String string = buffer.toString(); ?2.如何實(shí)現(xiàn)兩個(gè)數(shù)組內(nèi)容的拷貝 ?3.如何去除字符串首尾空格 str.trim() ?4.字符串和字符數(shù)組如何相互轉(zhuǎn)換 字符串轉(zhuǎn)字符數(shù)組:str.toCharArray(); 字符數(shù)組轉(zhuǎn)字符串:strs.valueOf(char[] ch) ?

    2023年04月23日
    瀏覽(32)
  • Redis相關(guān)知識(shí)點(diǎn)

    Redis (REmote DIctionary Server) 是用 C 語言開發(fā)的一個(gè)開源的高性能鍵值對(duì)(key-value)數(shù)據(jù)庫,它支持網(wǎng)絡(luò),可基于內(nèi)存亦可持久化,并提供多種語言的API。Redis具有高效性、原子性、支持多種數(shù)據(jù)結(jié)構(gòu)、持久化、高并發(fā)讀寫等特點(diǎn)。 特征: 1.數(shù)據(jù)間沒有必然的關(guān)聯(lián)關(guān)系 2.內(nèi)部采用

    2024年01月23日
    瀏覽(74)
  • 深度學(xué)習(xí)相關(guān)知識(shí)點(diǎn)概念

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN) 是一種專門用于處理和分析具有網(wǎng)格結(jié)構(gòu)數(shù)據(jù)的人工神經(jīng)網(wǎng)絡(luò)。CNN主要應(yīng)用于計(jì)算機(jī)視覺領(lǐng)域,用于圖像識(shí)別、物體檢測、圖像分割等任務(wù)。 CNN的設(shè)計(jì)受到了生物視覺系統(tǒng)的啟發(fā),其主要特點(diǎn)是在網(wǎng)絡(luò)中引入了卷積層(convolutiona

    2024年04月16日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包