Java高級

HashMap簡介
HashMap 是一個散列表,它存儲的內容是鍵值對(key-value)映射。
HashMap 繼承於AbstractMap,實現了Map、Cloneable、java.io.Serializable接口。
HashMap 的實現不是同步的,這意味着它不是線程安全的,但能夠用 Collections的synchronizedMap方法使HashMap具備線程安全的能力。它的key、value均可覺得null。此外,HashMap中的映射不是有序的。
HashMap 的實例有兩個參數影響其性能:「初始容量」 和 「加載因子」。初始容量默認是16。默認加載因子是 0.75, 這是在時間和空間成本上尋求一種折衷。加載因子太高雖然減小了空間開銷,但同時也增長了查詢成本.
HashMap是數組+鏈表+紅黑樹(JDK1.8增長了紅黑樹部分)實現的,當鏈表長度太長(默認超過8)時,鏈表就轉換爲紅黑樹.java

 

jvm 原理 程序運行區域劃分

Java運行時數據區域?
包括程序計數器、JVM棧、本地方法棧、方法區、堆
方法區裏存放什麼?
本地方法棧:和jvm棧所發揮的做用相似,區別是jvm棧爲jvm執行java方法(字節碼)服務,而本地方法棧爲jvm使用的native方法服務。
JVM棧:局部變量表、操做數棧、動態連接、方法出口。
方法區:用於存儲已被虛擬機加載的類信息,常量、靜態變量、即時編譯器編譯後的代碼等。
堆:存放對象實例。redis

Full GC觸發條件:算法

(1)調用System.gc時,系統建議執行Full GC,可是沒必要然執行數組

(2)老年代空間不足緩存

(3)方法去空間不足安全

 

concurrentMap 和 HashMap 區別

1.hashMap能夠有null的鍵,concurrentMap不能夠有
2.hashMap是線程不安全的,在多線程的時候須要Collections.synchronizedMap(hashMap),ConcurrentMap使用了重入鎖保證線程安全。
3.在刪除元素時候,二者的算法不同。
ConcurrentHashMapHashtable主要區別就是圍繞着鎖的粒度以及如何鎖,能夠簡單理解成把一個大的HashTable分解成多個,造成了鎖分離。數據結構

類加載機制是怎樣的

JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。
類加載的五個過程:加載、驗證、準備、解析、初始化。多線程

 

分佈式 CAP 瞭解嗎?

一致性(Consistency)
可用性(Availability)
分區容忍性(Partition tolerance)併發

線程池用過嗎?

線程池(Thread Pool)對於限制應用程序中同一時刻運行的線程數頗有用。由於每啓動一個新線程都會有相應的性能開銷,每一個線程都須要給棧分配一些內存等等。負載均衡

咱們能夠把併發執行的任務傳遞給一個線程池,來替代爲每一個併發執行的任務都啓動一個新的線程。只要池裏有空閒的線程,任務就會分配給一個線程執行。在線程池的內部,任務被插入一個阻塞隊列(Blocking Queue ),線程池裏的線程會去取這個隊列裏的任務。當一個新任務插入隊列時,一個空閒線程就會成功的從隊列中取出任務而且執行它。

LinkedHashMap

LinkedHashMap是經過哈希表和鏈表實現的,它經過維護一個鏈表來保證對哈希表迭代時的有序性,而這個有序是指鍵值對插入的順序。

RPC的詳細過程

RPC主要的重點有:
動態代理,主要是invoke反射原理
序列化,使用Thrift的效率高
通訊方式,使用NettyNIO能提升效率
服務發現,使用zookeeper能夠實現

 

Eureka遵照AP  zookeeper

 

ACID 原子性 一致性 獨立性 持久性

CAP 強一致性 可用性 分區容錯

 

Zookeeper保證CP

Eureka則是AP

 

 

HashMap和Hashtable的區別

HashMap是非線程安全的,Hashtable是線程安全的。

HashMap的鍵值均可覺得null,Hashtable的鍵值都不能夠爲null值。

HashMap繼承自AbstractMap類,Hashtable繼承自Dictionary類。

ps : Properties類繼承自Hashtable類。

JVM虛擬機

GC算法有哪些

引用計數

複製

標記-清除

標記-壓縮

分代(新生代、老年代、永久代)

垃圾回收器有哪些

串行回收器:新生代串行回收器、老年代串行回收器

並行回收器:新生代ParNew回收器、新生代ParallelGC回收器、老年代ParallelGC回收器

CMS回收器:(Concurrent Mark Sweep、併發標記清除)

G1回收器(1.7之後代替CMS回收器)

如何調優JVM

標準參數:

-client -server模式

-Xmn、-Xms、-Xmx

監控:jps、jstat、jinfo、jmap、jhat、jstack

Java 中堆和棧有什麼區別?

JVM 中堆和棧屬於不一樣的內存區域,使用目的也不一樣。

棧經常使用於保存方法幀和局部變量,而對象老是在堆上分配。

棧一般都比堆小,也不會在多個線程之間共享,而堆被整個 JVM 的全部線程共享。

緩存和NoSQL

Memcache與Redis的區別

memcache把數據存在內存之中,斷電後會掛掉;Redis部分數據持久化在硬盤上,斷電不會丟失。

memcache存的是key-value對,redis支持更多的數據結構和數據類型

memcache可使用一致性hash作分佈式,redis能夠作主從同步

redis單線程,只使用1個cpu

如何實現Redis的分片

使用一致性哈希對數據進行映射

實現方式:客戶端分片(每一個客戶端對應一個分片)、代理協助分片、查詢路由分片;

使用redis集羣,如codis(豌豆莢,依賴zookeeper);

分佈式

zookeeper的用途

zookeeper做爲分佈式應用協調系統,已經用到不少分佈式項目中。

能夠用來完成統一命名服務、狀態同步服務、集羣管理、分佈式應用配置項等管理工做。

zookeeper的主要操做分一下幾種:

建立節點

讀取節點數據

更新節點數據

刪除節點

監控節點變化

應用場景:

統一命名服務,使用create自動建立節點編號;

配置管理,多個節點的共享配置,當配置發生變化時,可利用zookeeper讓使用這些配置的節點得到通知,進行從新加載等操做。如dubbo服務。

集羣管理:集羣選舉主節點,資源定位。

共享鎖

負載均衡

應用項目:

dubbo服務集羣、redis集羣、Hadoop集羣等

dubbo的用途以及優勢

Dubbo是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。

相關文章
相關標籤/搜索