<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          第一次面滴滴,沒想到?jīng)鐾噶耍?/h1>

          共 7493字,需瀏覽 15分鐘

           ·

          2024-05-21 14:04

          大家好,我是二哥呀。

          滴滴這兩年低調(diào)多了,原因大家都知道,但滴滴這家互聯(lián)網(wǎng)公司本身的技術(shù)還是非常不錯的,尤其是網(wǎng)約車這塊的核心業(yè)務(wù),能進(jìn)組基本上以后再跳槽就很有含金量了。

          我去滴滴的官網(wǎng)看了一眼,好家伙,25 屆秋招儲備實習(xí)生已經(jīng)開招了,我滴媽呀,互聯(lián)網(wǎng)的招聘時間線真的是越來越靠前了,招聘的花樣是真的越來越多了。

          叫暑期實習(xí)或者秋招提前批我都能理解,這來一個秋招儲備實習(xí)生,確實有點難繃。只能說和秋招無縫銜接了,只能說兄弟姐妹們早點準(zhǔn)備吧,只能說有坑早點占吧。

          這次我們以《Java 面試指南-滴滴面經(jīng)》同學(xué) 1 為例, 來看看滴滴的面試官都喜歡問哪些問題,好做到知彼知己百戰(zhàn)不殆~

          讓天下所有的面渣都能逆襲 ??

          能看得出,仍然是圍繞著二哥一直強調(diào)的 Java 后端四大件展開,所以大家在學(xué)習(xí)的時候一定要有的放矢,效率就會高很多。

          滴滴面經(jīng)(八股吟唱開始)

          列表的底層實現(xiàn)

          • ArrayList 基于數(shù)組實現(xiàn)
          • LinkedList 基于鏈表實現(xiàn)
          三分惡面渣逆襲:ArrayList和LinkedList的數(shù)據(jù)結(jié)構(gòu)

          多數(shù)情況下,ArrayList 更利于查找,LinkedList 更利于增刪

          ①、由于 ArrayList 是基于數(shù)組實現(xiàn)的,所以 get(int index) 可以直接通過數(shù)組下標(biāo)獲取,時間復(fù)雜度是 O(1);LinkedList 是基于鏈表實現(xiàn)的,get(int index) 需要遍歷鏈表,時間復(fù)雜度是 O(n)。

          當(dāng)然,get(E element) 這種查找,兩種集合都需要遍歷通過 equals 比較獲取元素,所以時間復(fù)雜度都是 O(n)。

          ②、ArrayList 如果增刪的是數(shù)組的尾部,直接插入或者刪除就可以了,時間復(fù)雜度是 O(1);如果 add 的時候涉及到擴容,時間復(fù)雜度會提升到 O(n)。

          但如果插入的是中間的位置,就需要把插入位置后的元素向前或者向后移動,甚至還有可能觸發(fā)擴容,效率就會低很多,O(n)。

          LinkedList 因為是鏈表結(jié)構(gòu),插入和刪除只需要改變前置節(jié)點、后置節(jié)點和插入節(jié)點的引用就行了,不需要移動元素。

          如果是在鏈表的頭部插入或者刪除,時間復(fù)雜度是 O(1);如果是在鏈表的中間插入或者刪除,時間復(fù)雜度是 O(n),因為需要遍歷鏈表找到插入位置;如果是在鏈表的尾部插入或者刪除,時間復(fù)雜度是 O(1)。

          三分惡面渣逆襲:ArrayList和LinkedList中間插入
          三分惡面渣逆襲:ArrayList和LinkedList中間刪除

          注意,這里有個陷阱,LinkedList 更利于增刪不是體現(xiàn)在時間復(fù)雜度上,因為二者增刪的時間復(fù)雜度都是 O(n),都需要遍歷列表;而是體現(xiàn)在增刪的效率上,因為 LinkedList 的增刪只需要改變引用,而 ArrayList 的增刪可能需要移動元素。

          單例的底層實現(xiàn)

          單例模式(Singleton Pattern)是一種創(chuàng)建型設(shè)計模式,它確保一個類只有一個實例,并提供一個全局訪問點來獲取該實例。單例模式主要用于控制對某些共享資源的訪問,例如配置管理器、連接池、線程池、日志對象等。

          refactoringguru.cn:單例模式

          01、餓漢式如何實現(xiàn)單例?

          餓漢式單例(Eager Initialization)在類加載時就急切地創(chuàng)建實例,不管你后續(xù)用不用得到,這也是餓漢式的來源,簡單但不支持延遲加載實例。

          public class Singleton {
              private static final Singleton instance = new Singleton();

              private Singleton() {}

              public static Singleton getInstance() {
                  return instance;
              }
          }

          02、懶漢式如何實現(xiàn)單例?

          懶漢式單例(Lazy Initialization)在實際使用時才創(chuàng)建實例,“確實懶”(??)。這種實現(xiàn)方式需要考慮線程安全問題,因此一般會帶上 synchronized 關(guān)鍵字。

          public class Singleton {
              private static Singleton instance;

              private Singleton() {}

              public static synchronized Singleton getInstance() {
                  if (instance == null) {
                      instance = new Singleton();
                  }
                  return instance;
              }
          }

          03、雙重檢查鎖定如何實現(xiàn)單例?

          雙重檢查鎖定(Double-Checked Locking)結(jié)合了懶漢式的延遲加載和線程安全,同時又減少了同步的開銷,主要是用 synchronized 同步代碼塊來替代同步方法。

          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;
              }
          }

          當(dāng) instance 創(chuàng)建后,再次調(diào)用 getInstance 方法時,不會進(jìn)入同步代碼塊,從而提高了性能。

          在 instance 前加上 volatile 關(guān)鍵字,可以防止指令重排,因為 instance = new Singleton() 并不是一個原子操作,可能會被重排序,導(dǎo)致其他線程獲取到未初始化完成的實例。

          04、靜態(tài)內(nèi)部類如何實現(xiàn)單例?

          利用 Java 的靜態(tài)內(nèi)部類(Static Nested Class)和類加載機制來實現(xiàn)線程安全的延遲初始化。

          public class Singleton {
              private Singleton() {}

              private static class SingletonHolder {
                  private static final Singleton INSTANCE = new Singleton();
              }

              public static Singleton getInstance() {
                  return SingletonHolder.INSTANCE;
              }
          }

          當(dāng)?shù)谝淮渭虞d Singleton 類時并不會初始化 SingletonHolder,只有在第一次調(diào)用 getInstance 方法時才會導(dǎo)致 SingletonHolder 被加載,從而實例化 instance。

          05、枚舉如何實現(xiàn)單例?

          使用枚舉(Enum)實現(xiàn)單例是最簡單的方式,不僅不需要考慮線程同步問題,還能防止反射攻擊和序列化問題。

          public enum Singleton {
              INSTANCE;
              // 可以添加實例方法
          }

          redis消息隊列

          可以使用 Redis 的 zset(有序集合)來實現(xiàn)延時隊列。

          三分惡面渣逆襲:zset實現(xiàn)延時隊列

          第一步,將任務(wù)添加到 zset 中,score 為任務(wù)的執(zhí)行時間戳,value 為任務(wù)的內(nèi)容。

          ZADD delay_queue 1617024000 task1

          第二步,定期(例如每秒)從 zset 中獲取 score 小于當(dāng)前時間戳的任務(wù),然后執(zhí)行任務(wù)。

          ZREMRANGEBYSCORE delay_queue -inf 1617024000

          第三步,任務(wù)執(zhí)行后,從 zset 中刪除任務(wù)。

          ZREM delay_queue task1

          mysql事務(wù)

          事務(wù)是一個或多個 SQL 語句組成的一個執(zhí)行單元,這些 SQL 語句要么全部執(zhí)行成功,要么全部不執(zhí)行,不會出現(xiàn)部分執(zhí)行的情況。事務(wù)是數(shù)據(jù)庫管理系統(tǒng)執(zhí)行過程中的一個邏輯單位,由一個有限的數(shù)據(jù)庫操作序列構(gòu)成。

          事務(wù)的主要作用是保證數(shù)據(jù)庫操作的一致性,即事務(wù)內(nèi)的操作,要么全部成功,要么全部失敗回滾,不會出現(xiàn)中間狀態(tài)。這對于維護(hù)數(shù)據(jù)庫的完整性和一致性非常重要。

          事務(wù)具有四個基本特性,也就是通常所說的 ACID 特性,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。

          三分惡面渣逆襲:事務(wù)四大特性

          什么是原子性?

          原子性子性意味著事務(wù)中的所有操作要么全部完成,要么全部不完成,它是不可分割的單位。如果事務(wù)中的任何一個操作失敗了,整個事務(wù)都會回滾到事務(wù)開始之前的狀態(tài),如同這些操作從未被執(zhí)行過一樣。

          什么是一致性?

          一致性確保事務(wù)從一個一致的狀態(tài)轉(zhuǎn)換到另一個一致的狀態(tài)。

          比如在銀行轉(zhuǎn)賬事務(wù)中,無論發(fā)生什么,轉(zhuǎn)賬前后兩個賬戶的總金額應(yīng)保持不變。假如 A 賬戶(100 塊)給 B 賬戶(10 塊)轉(zhuǎn)了 10 塊錢,不管成功與否,A 和 B 的總金額都是 110 塊。

          什么是隔離性?

          隔離性意味著并發(fā)執(zhí)行的事務(wù)是彼此隔離的,一個事務(wù)的執(zhí)行不會被其他事務(wù)干擾。就是事務(wù)之間是井水不犯河水的。

          隔離性主要是為了解決事務(wù)并發(fā)執(zhí)行時可能出現(xiàn)的問題,如臟讀、不可重復(fù)讀、幻讀等。

          數(shù)據(jù)庫系統(tǒng)通過事務(wù)隔離級別(如讀未提交、讀已提交、可重復(fù)讀、串行化)來實現(xiàn)事務(wù)的隔離性。

          什么是持久性?

          持久性確保事務(wù)一旦提交,它對數(shù)據(jù)庫所做的更改就是永久性的,即使發(fā)生系統(tǒng)崩潰,數(shù)據(jù)庫也能恢復(fù)到最近一次提交的狀態(tài)。通常,持久性是通過數(shù)據(jù)庫的恢復(fù)和日志機制來實現(xiàn)的,確保提交的事務(wù)更改不會丟失。

          簡短一點的回答可以是:

          • 原子性:事務(wù)的所有操作要么全部提交成功,要么全部失敗回滾,對于一個事務(wù)中的操作不能只執(zhí)行其中一部分。
          • 一致性:事務(wù)應(yīng)確保數(shù)據(jù)庫的狀態(tài)從一個一致狀態(tài)轉(zhuǎn)變?yōu)榱硪粋€一致狀態(tài)。一致性與業(yè)務(wù)規(guī)則有關(guān),比如銀行轉(zhuǎn)賬,不論事務(wù)成功還是失敗,轉(zhuǎn)賬雙方的總金額應(yīng)該是不變的。
          • 隔離性:多個并發(fā)事務(wù)之間需要相互隔離,即一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾。
          • 持久性:一旦事務(wù)提交,則其所做的修改將永久保存到數(shù)據(jù)庫中。即使發(fā)生系統(tǒng)崩潰,修改的數(shù)據(jù)也不會丟失。

          內(nèi)容來源

          • 星球嘉賓三分惡的面渣逆襲:https://javabetter.cn/sidebar/sanfene/nixi.html
          • 二哥的 Java 進(jìn)階之路(GitHub 已有 12000+star):https://javabetter.cn

          ending

          一個人可以走得很快,但一群人才能走得更遠(yuǎn)。二哥的編程星球已經(jīng)有 5300 多名球友加入了,如果你也需要一個良好的學(xué)習(xí)環(huán)境,戳鏈接 ?? 加入我們吧。這是一個編程學(xué)習(xí)指南 + Java 項目實戰(zhàn) + LeetCode 刷題的私密圈子,你可以閱讀星球?qū)?、向二哥提問、幫你制定學(xué)習(xí)計劃、和球友一起打卡成長。

          兩個置頂帖「球友必看」和「知識圖譜」里已經(jīng)沉淀了非常多優(yōu)質(zhì)的學(xué)習(xí)資源,相信能幫助你走的更快、更穩(wěn)、更遠(yuǎn)。

          歡迎點擊左下角閱讀原文了解二哥的編程星球,這可能是你學(xué)習(xí)求職路上最有含金量的一次點擊。

          最后,把二哥的座右銘送給大家:沒有什么使我停留——除了目的,縱然岸旁有玫瑰、有綠蔭、有寧靜的港灣,我是不系之舟。共勉 ??。

          瀏覽 625
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報

          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产一级a毛一级a毛片视频黑人 | 色婷婷精品无码 | 激情动态视频 | 天天撸天天操 | 日本黄色视频在线免费观看 |