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

          杭州-螞蟻金服最新面試題匯總

          共 6983字,需瀏覽 14分鐘

           ·

          2021-10-03 19:29


          走過路過不要錯(cuò)過

          點(diǎn)擊藍(lán)字關(guān)注我們



          螞蟻金服面試題


          1.jdk1.7 到 jdk1.8 Map 發(fā)生了什么變化(底層)?


          1.8 之后 hashMap 的數(shù)據(jù)結(jié)構(gòu)發(fā)生了變化,從之前的單純的數(shù)組+鏈表結(jié)構(gòu)變成數(shù)組+鏈 表+紅黑樹。也就是說在 JVM 存儲(chǔ) hashMap 的 K-V 時(shí)僅僅通過 key 來決定每一個(gè) entry 的存 儲(chǔ)槽位(Node[]中的 index)。并且 Value 以鏈表的形式掛在到對(duì)應(yīng)槽位上(1.8 以后如果 value 長度大于 8 則轉(zhuǎn)為紅黑樹)。但是 hashmap1.7 跟 1.8 中都沒有任何同步操作,容易出現(xiàn)并發(fā)問題,甚至出現(xiàn)死循環(huán) 導(dǎo)致系統(tǒng)不可用。解決方案是 jdk 的 ConcurrentHashMap,位于 java.util.concurrent 下,專門 解決并發(fā)問題。


          2. ConcurrentHashMap 思路與 hashMap 差不多,但是支持并發(fā)操作,要復(fù)雜很多?


          3. 并行跟并發(fā)有什么區(qū)別??


          并發(fā):指應(yīng)用交替執(zhí)行不同的任務(wù),多線程原理?

          并行:指應(yīng)用同時(shí)執(zhí)行不用的任務(wù)?

          區(qū)別:一個(gè)是交替執(zhí)行,一個(gè)是同時(shí)執(zhí)行。


          4. jdk1.7 到 jdk1.8 java 虛擬機(jī)發(fā)生了什么變化?


          JVM 中內(nèi)存份為堆、棧內(nèi)存,及方法區(qū)。

          棧內(nèi)存主要用途:執(zhí)行線程方法,存放本地臨時(shí)變量與線程方法執(zhí)行是需要的引用對(duì)象 的地址。

          堆內(nèi)存主要用途:JVM 中所有對(duì)象信息都存放在堆內(nèi)存中,相比棧內(nèi)存,堆內(nèi)存大很多 所以 JVM 一直通過對(duì)堆內(nèi)存劃分不同功能區(qū)塊實(shí)現(xiàn)對(duì)堆內(nèi)存中對(duì)象管理。?

          堆內(nèi)存不夠常見錯(cuò)誤:OutOfMemoryError?

          棧內(nèi)存溢出常見錯(cuò)誤:StackOverFlowError?


          在 JDK7 以及其前期的 JDK 版本中,堆內(nèi)存通常被分為三塊區(qū)域 Nursery 內(nèi)存(young generation)、長時(shí)內(nèi)存(old generation)、永久內(nèi)存(Permanent Generation for VM Matedata), 顯示如下圖:

          在最上面一層是 Nursery 內(nèi)存,一個(gè)對(duì)象被創(chuàng)建以后首先被房到 Nuersery 中的 Eden 內(nèi) 存中,如果存活周期超過兩個(gè) Survivor(生存周期)之后會(huì)被轉(zhuǎn)移到 Old Generation 中。?


          永久內(nèi)存中存放對(duì)象的方法、變量等元數(shù)據(jù)信息。永久內(nèi)存不夠就會(huì)出現(xiàn) 以下錯(cuò)誤:java.lang.OutOfMemoryError:PermGen?


          但是在 JDK1.8 中一般都不會(huì)得到這個(gè)錯(cuò)誤,原因在于:1.8 中把存放元數(shù)據(jù)的永久內(nèi)存 從堆內(nèi)存中已到了本地內(nèi)存(native Memory)中,1.8 中 JVM 內(nèi)存結(jié)構(gòu)變成了如下圖:

          ????

          這樣永久內(nèi)存就不占用堆內(nèi)存,可以通過自增長來避免永久內(nèi)存錯(cuò)誤。


          -XX:MaxMetaspaceSize=128m 這只最大的遠(yuǎn)內(nèi)存空間 128 兆?


          JDK1.8 移除 PermGen,取而代之的是 MetaSpace 源空間?


          MetaSpace 垃圾回收:對(duì)僵死的類及類加載器的垃圾回收機(jī)制昂在元數(shù)據(jù)使用達(dá)到 “MaxMetaSpaceSize”參數(shù)的設(shè)定值時(shí)運(yùn)行。?


          MetaSpace 監(jiān)控:元空間的使用情況可以在 HotSpot1.8 的詳細(xì) GC 日志輸出中得到。?


          更新 JDK1.8 的原因:


          1. 字符串存在永久代當(dāng)中,容易出現(xiàn)性能問題和內(nèi)存溢出

          2. 類及方法的信息比較難確定其大小,因此對(duì)永久代的大小制定比較困難,太小容易出 現(xiàn)永久代溢出,太大則容易導(dǎo)致老年代溢出。

          3. 永久代會(huì)為 GC 帶來不必要的復(fù)雜度,并且回收效率偏低

          4. Oracle 可能會(huì)想 HotSpot 與 JRockit 合并。


          5. 如果叫你自己設(shè)計(jì)一個(gè)中間件,你會(huì)如何設(shè)計(jì)??


          我會(huì)從以下幾點(diǎn)方面考慮開發(fā):?


          1) 遠(yuǎn)程過程調(diào)用?


          2) 面向消息:利用搞笑的消息傳遞機(jī)制進(jìn)行平臺(tái)無關(guān)的數(shù)據(jù)交流,并給予數(shù)據(jù)通信來 進(jìn)行分布式系統(tǒng)的集成,有一下三個(gè)特點(diǎn):


          i) 通訊程序可以在不同的時(shí)間運(yùn)行

          ii) 通訊晨旭之家可以一對(duì)一、一對(duì)多、多對(duì)一甚至是 上述多種方式的混合?

          iii) 程序?qū)⑾⒎湃胂㈥?duì)列會(huì)從小吸毒列中取出消 息來進(jìn)行通訊?


          3) 對(duì)象請(qǐng)求代理:提供不同形式的通訊服務(wù)包括同步、排隊(duì)、訂閱發(fā)布、廣播等。可構(gòu)筑各種框架如:事物處理監(jiān)控器、分布數(shù)據(jù)訪問、對(duì)象事務(wù)管理器 OTM 等。?


          4) 事物處理監(jiān)控有一下功能:


          a) 進(jìn)程管理,包括啟動(dòng) server 進(jìn)程、分配任務(wù)、監(jiān)控其執(zhí)行并對(duì)負(fù)載進(jìn)行平衡

          b) 事務(wù)管理,保證在其監(jiān)控下的事務(wù)處理的原子性、一致性、獨(dú)立性和持久性?

          c) 通訊管理,為 client 和 server 之間提供多種通訊機(jī)制,包括請(qǐng)求響應(yīng)、會(huì)話、 排隊(duì)、訂閱發(fā)布和廣播等


          6. 什么是中間件?


          中間件是處于操作系統(tǒng)和應(yīng)用程序之間軟件,使用時(shí)旺旺是一組中間件集成在一起,構(gòu) 成一個(gè)平臺(tái)(開發(fā)平臺(tái)+運(yùn)行平臺(tái)),在這組中間件中必須要有一個(gè)通信中間件,即中間件= 平臺(tái)+通信。該定義也限定了只有勇于分布式系統(tǒng)中才能稱為中間件?


          主要分類:遠(yuǎn)程過程調(diào)用、面向消息的中間件、對(duì)象請(qǐng)求代理、事物處理監(jiān)控。


          7. ThreadLock 用過沒有,說說它的作用??


          ThreadLock 為本地線程,為每一個(gè)線程提供一個(gè)局部變量,也就是說只有當(dāng)前線層可以 訪問,是線程安全的。原理:為每一個(gè)線程分配一個(gè)對(duì)象來工作,并不是由 ThreadLock 來 完成的,而是需要在應(yīng)用層面保證的,ThreadLock 只是起到了一個(gè)容器的作用。原理為 ThreadLock 的 set()跟 get()方法。?


          實(shí)現(xiàn)原理:

          public void set(T value) {Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t);if (map != null)map.set(this, value);elsecreateMap(t, value);}public T get() {Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t);if (map != null) {ThreadLocalMap.Entry e = map.getEntry(this);if (e != null)return (T)e.value;}return setInitialValue();}

          8. Hashcode()和 equals()和==區(qū)別??


          (1) hashcode()方法跟 equals()在 java 中都是判斷兩個(gè)對(duì)象是否相等?

          (2) 兩個(gè)對(duì)象相同,則 hashcode 至一定要相同,即對(duì)象相同 ---->成員變量相同 ---->hashcode 值一定相同?

          (3) 兩個(gè)對(duì)象的 hashcode 值相同,對(duì)象不一定相等。總結(jié):equals 相等則 hashcode 一 定相等,hashcode 相等,equals 不一定相等。?

          (4) ==比較的是兩個(gè)引用在內(nèi)存中指向的是不是同一對(duì)象(即同一內(nèi)存空間)


          9. mysql 數(shù)據(jù)庫中,什么情況下設(shè)置了索引但無法使用??


          (1) 索引的作用:在數(shù)據(jù)庫表中對(duì)字段建立索引可以大大提高查詢速度。


          (2) Mysql 索引類型:


          a) 普通索引

          b) 唯一索引:唯一索引列的值必須唯一允許有空值,如果是組合索 引,則列值的組合必須唯一:CREATE UNIQUE INDEX indexName ON mytable(username(length)) -- 修改表結(jié)構(gòu) ALTER mytable ADD UNIQUE [indexName] ON (username(length)) -- 創(chuàng)建表的時(shí)候直接指定 CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );?

          c) 主鍵索引:一種特殊的唯一索引,不允許有空值,一般在創(chuàng)建表 的時(shí)候創(chuàng)建主鍵索引:CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) );?

          d) 組合索引:CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL ); 為了進(jìn)一步榨取 MySQL 的效率,就要考慮建立組合索引。就是 將 name, city, age 建到一個(gè)索引里:代碼如下: ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);?


          (3) 什么情況下有索引,但用不上??


          a) 如果條件中有 OR,即使其中有部分條件帶索引也不會(huì)使用。注 意:要想使用 or,又想讓索引生效,只能將 or 條件中的每個(gè)列 都加上索引。?

          b) 對(duì)于多了索引,不是使用的第一部分,則不會(huì)使用索引。?

          c) Like 查詢以%開頭,不使用索引

          d) 存在索引列的數(shù)據(jù)類型隱形轉(zhuǎn)換,則用不上索引,比如列類型是 字符串,那一定要在條件中將數(shù)據(jù)使用引號(hào)引用起來,否則不使 用索引?

          e) Where 子句里對(duì)索引列上有數(shù)學(xué)運(yùn)算,用不上索引?

          f) Where 子句中對(duì)索引列使用函數(shù),用不上索引?

          g) Mysql 估計(jì)使用全表掃描要比用索引快,不使用索引?


          (4) 什么情況下不推薦使用索引??


          a) 數(shù)據(jù)唯一性差的字段不要使用索引?

          b) 頻繁更新的字段不要使用索引?

          c) 字段不在 where 語句中出現(xiàn)時(shí)不要添加索引,如果 where 后含 IS NULL/IS NOT NULL/LIKE ‘%輸入符%’等條件,不要使用索引?

          d) Where 子句里對(duì)索引使用不等于(<>),不建議使用索引,效果 一般


          10. mysql 優(yōu)化會(huì)不會(huì),mycat 分庫,垂直分庫,水平分庫??


          (1) 為查詢緩存優(yōu)化你的查詢?

          (2) EXPLAIN select 查詢:explain 的查詢結(jié)果會(huì)告訴你索引主鍵是如何被利用的?

          (3) 只需要一行數(shù)據(jù)時(shí)使用 limit1?

          (4) 為搜索字段添加索引?

          (5) 在關(guān)聯(lián)表的時(shí)候使用相當(dāng)類型的例,并將其索引?

          (6) 千萬不要 ORDER BY RAND()?

          (7) 避免 select*?

          (8) 永遠(yuǎn)為每張表設(shè)置一個(gè) ID?

          (9) 使用 ENUM 而不是 VARCHAR?

          (10) 從 PROCEDURE ANALYS()提取建議?

          (11) 盡可能的使用 NOT NULL?

          (12) Java 中使用 Prepared Statements?

          (13) 無緩沖的查詢?

          (14) 把 IP 地址存成 UNSIGNED INT?

          (15) 固定表的長度?

          (16) 垂直分庫:“垂直分割”是一種把數(shù)據(jù)庫中的表按列變成幾張表的方法,這樣可以 降低表的復(fù)雜度和字段的數(shù)目,從而達(dá)到優(yōu)化的目的。?

          (17) 水平分庫:“水平分割”是一種把數(shù)據(jù)庫中的表按行變成幾張表的方法,這樣可以 降低表的復(fù)雜度和字段的數(shù)目,從而達(dá)到優(yōu)化的目的。?

          (18) 越小的列會(huì)越快?

          (19) 選擇正確的存儲(chǔ)引擎?

          (20) 使用一個(gè)對(duì)象關(guān)系映射器?

          (21) 小心永久鏈接?

          (22) 拆分大的 DELETE 活 INSERT 語句


          11. 分布式事務(wù)解決方案??


          (1) 什么是分布式事務(wù)?


          a. 什么情況下需要用到分布式事務(wù)?


          a) 當(dāng)本地?cái)?shù)據(jù)庫斷電、機(jī)器宕機(jī)、網(wǎng)絡(luò)異常、消息丟失、消息亂序、 數(shù)據(jù)錯(cuò)誤、不可靠 TCP、存儲(chǔ)數(shù)據(jù)丟失、其他異常等需要用到分 布式事務(wù)。?


          b) 例如:當(dāng)本地事務(wù)數(shù)據(jù)庫斷電的這種秦光,如何保證數(shù)據(jù)一致 性?數(shù)據(jù)庫由連個(gè)文件組成的,一個(gè)數(shù)據(jù)庫文件和一個(gè)日志文 件,數(shù)據(jù)庫任何寫入操作都要先寫日志,在操作前會(huì)吧日志文件 寫入磁盤,那么斷電的時(shí)候及時(shí)才做沒有完成,在重啟數(shù)據(jù)庫的 時(shí)候,數(shù)據(jù)庫會(huì)根據(jù)當(dāng)前數(shù)據(jù)情況進(jìn)行 undo 回滾活 redo 前滾, 保證了數(shù)據(jù)的強(qiáng)一致性。?


          c) 分布式理論:當(dāng)單個(gè)數(shù)據(jù)庫性能產(chǎn)生瓶頸的時(shí)候,可能會(huì)對(duì)數(shù)據(jù) 庫進(jìn)行分區(qū)(物理分區(qū)),分區(qū)之后不同的數(shù)據(jù)庫不同的服務(wù)器 上 ,此時(shí)單個(gè)數(shù)據(jù)庫的 ACID 不適應(yīng)這種清苦啊,在此集群環(huán) 境下很難達(dá)到集群的 ACID,甚至效率性能大幅度下降,重要的 是再很難擴(kuò)展新的分區(qū)了。此時(shí)就需要引用一個(gè)新的理論來使用 這種集群情況:CAP 定理?


          d) CAP定理:由加州肚餓伯克利分銷Eric Brewer教授提出,指出WEB 服務(wù)無法同時(shí)滿足 3 個(gè)屬性:?

          a. 一致性:客戶端知道一系列的操作都會(huì)同時(shí)發(fā)生 (生效)

          b. 可用性:每個(gè)操作都必須以可預(yù)期的響應(yīng)結(jié)束?

          c. 分區(qū)容錯(cuò)性:及時(shí)出現(xiàn)單組件無法可用,操作依然 可以完成。具體的將在分布式系統(tǒng)中,在任何數(shù)據(jù)庫設(shè)計(jì)中,一個(gè) WEB 應(yīng) 至多只能同時(shí)支持上面兩個(gè)屬性。設(shè)計(jì)人員必須在一致性和可用 性之間做出選擇。?


          e) BASE 理論:分布式系統(tǒng)中追求的是可用性,比一致性更加重要, BASE 理論來實(shí)現(xiàn)高可用性。核心思想是:我們無法做到羥乙酯, 單每個(gè)應(yīng)用都可以根據(jù)自身的業(yè)務(wù)特點(diǎn),采用適當(dāng)?shù)姆绞绞瓜?統(tǒng)達(dá)到最終一致性。?


          f) 數(shù)據(jù)庫事務(wù)特性:ACID i. 原子性 ii. 一致性 iii. 獨(dú)立性或隔離性 iv. 持久性?


          (2) 分布式系統(tǒng)中,實(shí)現(xiàn)分布式事務(wù)的解決方案:?

          a. 兩階段提交 2PC?

          b. 補(bǔ)償事務(wù) TCC?

          c. 本地消息表(異步確保)?

          d. MQ 事務(wù)消息?

          e. Sagas 事務(wù)模型


          12. sql 語句優(yōu)化會(huì)不會(huì),說出你知道的??


          (1) 避免在列上做運(yùn)算,可能會(huì)導(dǎo)致索引失敗?

          (2) 使用 join 時(shí)應(yīng)該小結(jié)果集驅(qū)動(dòng)大結(jié)果集,同時(shí)把復(fù)雜的 join 查詢拆分成多個(gè) query, 不然 join 越多表,會(huì)導(dǎo)致越多的鎖定和堵塞。?

          (3) 注意 like 模糊查詢的使用,避免使用%%?

          (4) 不要使用 select * 節(jié)省內(nèi)存?

          (5) 使用批量插入語句,節(jié)省交互?

          (6) Limit 基數(shù)比較大時(shí),使用 between and?

          (7) 不要使用 rand 函數(shù)隨機(jī)獲取記錄?

          (8) 避免使用 null,建表時(shí),盡量設(shè)置 not nul,提高查詢性能?

          (9) 不要使用 count(id),應(yīng)該使用 count(*)?

          (10) 不要做無謂的排序,盡可能在索引中完成排序?

          (11) From 語句中一定不要使用子查詢?

          (12) 使用更多的 where 加以限制,縮小查找范圍?

          (13) 合理運(yùn)用索引?

          (14) 使用 explain 查看 sql 性能


          13. mysql 的存儲(chǔ)引擎了解過沒有??


          (1) MySQL 存儲(chǔ)引擎種類:?

          (2) https://blog.csdn.net/m0_37888031/article/details/80704344?

          (3) https://blog.csdn.net/m0_37888031/article/details/80664138?

          (4) 事務(wù)處理:在整個(gè)流程中出現(xiàn)任何問題,都能讓數(shù)據(jù)回滾到最開始的狀態(tài),這種處 理方式稱之為事務(wù)處理。也就是說事務(wù)處理要么都成功,要么的失敗


          14. 紅黑樹原理??


          (1) 紅黑樹的性質(zhì):紅黑樹是一個(gè)二叉搜索樹。在每個(gè)節(jié)點(diǎn)增加了一個(gè)存儲(chǔ)位記錄節(jié)點(diǎn) 的顏色,可以是 RED,也可以是 BLACK,通過任意一條從根到葉子簡單路徑上顏色 的約束,紅黑樹保證最長路徑不超過最短路徑的兩倍,加以平衡。性質(zhì)如下:

          i. 每個(gè)節(jié)點(diǎn)顏色不是黑色就是紅色

          ii. 根節(jié)點(diǎn)的顏色是黑色的?

          iii. 如果一個(gè)節(jié)點(diǎn)是紅色,那么他的兩個(gè)子節(jié)點(diǎn)就是黑色的, 沒有持續(xù)的紅節(jié)點(diǎn)?

          iv. 對(duì)于每個(gè)節(jié)點(diǎn),從該節(jié)點(diǎn)到其后代葉節(jié)點(diǎn)的簡單路徑上, 均包含相同數(shù)目的黑色節(jié)點(diǎn)

          以上便是螞蟻金服的面試題,如果說想獲取往期最新的面試資料,點(diǎn)贊+在看,關(guān)注我之后領(lǐng)取資料請(qǐng)添加這個(gè)微信號(hào):tulingQY??添加備注【02】 記得一定要備注【02】不然領(lǐng)不到資料!

          以下是往期部分面試資料截圖







          往期精彩推薦



          騰訊、阿里、滴滴后臺(tái)面試題匯總總結(jié) — (含答案)

          面試:史上最全多線程面試題 !

          最新阿里內(nèi)推Java后端面試題

          JVM難學(xué)?那是因?yàn)槟銢]認(rèn)真看完這篇文章


          END


          關(guān)注作者微信公眾號(hào) —《JAVA爛豬皮》


          了解更多java后端架構(gòu)知識(shí)以及最新面試寶典


          你點(diǎn)的每個(gè)好看,我都認(rèn)真當(dāng)成了


          看完本文記得給作者點(diǎn)贊+在看哦~~~大家的支持,是作者源源不斷出文的動(dòng)力


          瀏覽 45
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  色婷婷色婷婷色婷婷视频 | 男女无码视频 | 亚洲天堂视频在线 | 久久久久熟女 | 国产精品女人久久久 |