hashcode相等兩個(gè)類一定相等嗎?equals呢?相反呢?

1、hashcode相等兩個(gè)類一定相等嗎?equals呢?相反呢?

結(jié)論:equals 相等的 hashcode一定相等全闷,反之不一定幅聘。

原因:在java中捺疼,equals和hashcode是有設(shè)計(jì)要求的,equals相等怎爵,則hashcode一定相等特石,反之則不然。?

為何會(huì)有這樣的要求鳖链??

在集合中姆蘸,比如HashSet中,要求放入的對(duì)象不能重復(fù)芙委,怎么判定呢逞敷??

首先會(huì)調(diào)用hashcode,如果hashcode相等灌侣,則繼續(xù)調(diào)用equals推捐,也相等,則認(rèn)為重復(fù)侧啼。如果重寫equals后牛柒,如果不重寫hashcode堪簿,則hashcode就是繼承自O(shè)bject的,返回內(nèi)存編碼焰络,這時(shí)候可能出現(xiàn)equals相等戴甩,而hashcode不等,你的對(duì)象使用集合時(shí)闪彼,就會(huì)等不到正確的結(jié)果甜孤。

2、介紹一下集合框架?

3畏腕、hashmap hastable 底層實(shí)現(xiàn)什么區(qū)別?hashtable和concurrenthashtable呢?

hashmap 和hashtable基本上一樣缴川,只不過hashtable是線程安全的,而hashmap 是線程不安全的描馅。而concurrenthashtable跟hashtable的區(qū)別在于把夸,concurrenthashtable是基于用了分段鎖的設(shè)計(jì),只有在同一個(gè)分段內(nèi)才存在競態(tài)關(guān)系铭污,不同的分段鎖之間沒有鎖競爭恋日。相比于對(duì)整個(gè)Map加鎖的設(shè)計(jì),分段鎖大大的提高了高并發(fā)環(huán)境下的處理能力嘹狞。但同時(shí)岂膳,由于不是對(duì)整個(gè)Map加鎖,導(dǎo)致一些需要掃描整個(gè)Map的方法(如size(), containsValue())需要使用特殊的實(shí)現(xiàn)磅网,另外一些方法(如clear())甚至放棄了對(duì)一致性的要求(ConcurrentHashMap是弱一致性的谈截,具體請查看ConcurrentHashMap能完全替代HashTable嗎?)涧偷。

4簸喂、hashmap和treemap什么區(qū)別?低層數(shù)據(jù)結(jié)構(gòu)是什么?

hashmap底層是數(shù)組加鏈表結(jié)構(gòu),數(shù)組用來根據(jù)key的hashcode值來定位一個(gè)對(duì)象應(yīng)該屬于哪一個(gè)index燎潮,而鏈表結(jié)構(gòu)可以解決當(dāng)key的hashcode值相等而equals方法值不相等的問題喻鳄。,而treemap底層是紅黑樹結(jié)構(gòu)跟啤,紅黑樹的結(jié)構(gòu)是為了兼顧增刪改查的多維度性能而設(shè)計(jì)的诽表。

5、線程池用過嗎都有什么參數(shù)?底層如何實(shí)現(xiàn)的?

publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TimeUnit unit,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BlockingQueue workQueue) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,? ? ? ? ? ? Executors.defaultThreadFactory(), defaultHandler);? ? }

1.corePoolSize:線程池中默認(rèn)保留線程數(shù)量隅肥,即便是線程是空閑線程。

2.maximumPoolSize:線程池中保留的最大數(shù)量的線程袄简。

3.keepAliveTime:當(dāng)線程數(shù)量大于corePoolSize 之后腥放,線程在空閑情況下最長保留時(shí)間。

4.unit:keepAliveTime的時(shí)間單位绿语,包括天秃症、小時(shí)候址,分鐘,秒种柑,微妙岗仑,毫秒,納秒聚请。

5.workQueue:一個(gè)阻塞隊(duì)列荠雕,用來存儲(chǔ)等待執(zhí)行的任務(wù),包括:ArrayBlockingQueue(有界阻塞隊(duì)列驶赏,在隊(duì)列達(dá)到一定)炸卑,LinkedBlockingQueue,SynchronousQueue煤傍,其中LinkedBlockingQueue(鏈表阻塞隊(duì)列盖文,包括了讀鎖和寫鎖,而ArrayBlockingQueue只有一個(gè)鎖蚯姆,所以效率相對(duì)LinkedBlockingQueue會(huì)慢一些)和SynchronousQueue(同步阻塞隊(duì)列五续,它沒有容器,生產(chǎn)之后就需要有消費(fèi)者來消費(fèi))比較常用龄恋。

6.threadFactory:線程工廠疙驾,主要用來創(chuàng)建線程的工廠。

7.handler:表示當(dāng)拒絕任務(wù)處理時(shí)的策略篙挽。有四種取值:?

1.ThreadPoolExecutor.AbortPolicy:丟棄任務(wù)并拋出RejectedExecutionException異常荆萤。

2.ThreadPoolExecutor.DiscardPolicy:也是丟棄任務(wù),但是不拋出異常铣卡。

3.ThreadPoolExecutor.DiscardOldestPolicy:丟棄隊(duì)列最前面的任務(wù)链韭,然后重新嘗試執(zhí)行任務(wù)(重復(fù)此過程)

4.ThreadPoolExecutor.CallerRunsPolicy:由調(diào)用線程處理該任務(wù)

6、sychnized和Lock什么區(qū)別?sychnize 什么情況情況是對(duì)象鎖? 什么時(shí)候是全局鎖為什么?

1.synchnized 是關(guān)鍵字煮落,在方法出錯(cuò)之后由java虛擬機(jī)自動(dòng)解除鎖定敞峭,而 Lock屬于Api級(jí)別的鎖,它需要自己在 finally方法后面保證鎖的釋放蝉仇。

2.synchnized 不能實(shí)現(xiàn)公平鎖旋讹,而 Lock可以,Lock還可以添加多個(gè)監(jiān)聽條件來對(duì)鎖進(jìn)行控制轿衔,可以中斷沉迹。

3.synchronized 作用在普通方法上屬于對(duì)象鎖,作用在靜態(tài)方法害驹,類.class 上面鞭呕,屬于全局鎖。對(duì)象鎖只對(duì)同一個(gè)對(duì)象加鎖宛官,作用對(duì)象是同一個(gè)對(duì)象葫松。而類鎖是對(duì)類加鎖瓦糕,對(duì)整個(gè)類都有效。?

如果鎖住的是一般方法就是對(duì)象鎖腋么,對(duì)象鎖只會(huì)對(duì)同一個(gè)對(duì)象起作用咕娄,如果是鎖住了static 方法則是全局鎖,會(huì)對(duì)全局對(duì)象都管用珊擂,如果想在普通方法中使用全局鎖需要鎖住class對(duì)象圣勒。

7、ThreadLocal 是什么底層如何實(shí)現(xiàn)?寫一個(gè)例子唄?

ThreadLocal 底層是存儲(chǔ)在 線程本地Map里面的一個(gè)對(duì)象未玻,它跟當(dāng)前線程綁定灾而,以 ThreadLocal 對(duì)象本身為 key,以ThreadLocal里面存的值為值扳剿,目的是為了實(shí)現(xiàn)線程之間的數(shù)據(jù)的隔離旁趟。

publicstaticfinal ThreadLocal session =newThreadLocal();publicstaticSessiongetCurrentSession() {? ? ? ? ? Session s = (Session)session.get();if(s ==null){? ? ? ? ? ? ? s = sessionFactory.openSession();? ? ? ? ? ? ? session.set(s);? ? ? ? ? }returns;? ? ? }


8、volatile的工作原理?

線程安全需要3步驟:?

1.操作的原子性(要么全部成功庇绽,要不全部失斘选)?

2.操作的可見性(所有線程都可見)?

3.操作的有序性。而對(duì)于volatile的只能保證可見性瞧掺,所以對(duì)于 i=i++這種操作是不具有原子性的耕餐,所以這類的操作無法使用 volatile關(guān)鍵字進(jìn)行修飾。

使用場景:

1.狀態(tài)標(biāo)記

volatilebooleanshutdownRequested;? ...publicvoidshutdown() {? ? ? shutdownRequested =true;? }publicvoiddoWork() {while(!shutdownRequested) {// do stuff? }? }

2.一次性安全發(fā)布(one-time safe publication):單例模式的雙重檢查

packagecom.masterslave.singleton;/**

* 雙重檢查

*/publicclassDoubleCheck{/**

? ? * 因?yàn)閕nstance被聲明成了 volatile 所以辟狈,

? ? * 每次得到的對(duì)象都是主內(nèi)存中最新的對(duì)象狀態(tài)肠缔,所以保證了實(shí)例的可見性

? ? */privatevolatilestaticDoubleCheck instance;privateDoubleCheck() {? ? }/**? ? * 雙重檢查保證線程安全? ? * @return*/publicstaticDoubleCheckgetInstance() {if(instance ==null) {synchronized(instance) {if(instance ==null) {? ? ? ? ? ? ? ? ? instance =newDoubleCheck();? ? ? ? ? ? ? }? ? ? ? ? }? ? ? }returninstance;? ? }}

3.獨(dú)立觀察(independent observation)?

如下代碼展示了身份驗(yàn)證機(jī)制如何記憶最近一次登錄的用戶的名字。將反復(fù)使用lastUser 引用來發(fā)布值哼转,以供程序的其他部分使用明未。

publicclassUserManager{publicvolatileString lastUser;//發(fā)布的信息? publicbooleanauthenticate(String user, String password) {booleanvalid = passwordIsValid(user, password);if(valid) {? ? ? ? ? ? ? User u =newUser();? ? ? ? ? ? ? activeUsers.add(u);? ? ? ? ? ? ? lastUser = user;? ? ? ? ? }returnvalid;? ? ? }? }

4.開銷較低的“讀-寫鎖”策略?

如果讀操作遠(yuǎn)遠(yuǎn)超過寫操作,您可以結(jié)合使用內(nèi)部鎖和 volatile 變量來減少公共代碼路徑的開銷壹蔓。

@ThreadSafepublicclassCheesyCounter {// Employs the cheap read-write lock trick? // All mutative operations MUST be done with the 'this' lock held? @GuardedBy("this")privatevolatileintvalue;//讀操作趟妥,沒有synchronized,提高性能? publicintgetValue() {returnvalue;? ? ? }//寫操作佣蓉,必須synchronized披摄。因?yàn)閤++不是原子操作? publicsynchronizedintincrement() {returnvalue++;? ? ? }

15

9、cas知道嗎如何實(shí)現(xiàn)的?

Compare and Swap 比較并刷新到緩存勇凭。通過比較線程舊值跟內(nèi)存中的值是否相等來判斷當(dāng)前的值能否刷新到緩存中疚膊。

10、請用至少四種寫法寫一個(gè)單例模式?

餓漢模式:

packagecom.masterslave.singleton;/**

* 餓漢模式

*/publicclassHungry{privatestaticHungry instance =newHungry();privateHungry() {? ? }publicstaticHungrygetInstance() {returninstance;? ? }}

懶漢模式

packagecom.masterslave.singleton;/**

* 懶漢模式

*/publicclassLazy{privatestaticLazy instance;privateLazy() {? ? }/**? ? * 使用 synchronized 解決線程安全問題? ? * @return*/synchronizedpublicstaticLazygetInstance() {if(instance ==null) {? ? ? ? ? ? instance =newLazy();? ? ? ? }returninstance;? ? }}

雙重檢查

packagecom.masterslave.singleton;/**

* 雙重檢查

*/publicclassDoubleCheck{/**

? ? * 因?yàn)閕nstance被聲明成了 volatile 所以虾标,

? ? * 每次得到的對(duì)象都是主內(nèi)存中最新的對(duì)象狀態(tài)酿联,所以保證了實(shí)例的可見性

? ? */privatevolatilestaticDoubleCheck instance;privateDoubleCheck() {? ? }/**? ? * 雙重檢查保證線程安全? ? * @return*/publicstaticDoubleCheckgetInstance() {if(instance ==null) {synchronized(instance) {if(instance ==null) {? ? ? ? ? ? ? ? ? instance =newDoubleCheck();? ? ? ? ? ? ? }? ? ? ? ? }? ? ? }returninstance;? ? }}

靜態(tài)內(nèi)部類

packagecom.masterslave.singleton;/**

* 靜態(tài)內(nèi)部類

*/publicclassInnerStaticClass{staticclass InnerClass{/**

? ? ? ? * 由于靜態(tài)單例對(duì)象沒有作為 InnerStaticClass 的成員變量直接實(shí)例化,

? ? ? ? * 因此類加載時(shí)不會(huì)實(shí)例化 instance 對(duì)象夺巩,

? ? ? ? * 第一次調(diào)用 getInstance 時(shí)將加載內(nèi)部類 InnerClass贞让,

? ? ? ? * 在該類內(nèi)部定義了一個(gè) instance 變量,此時(shí)首先會(huì)初始化這個(gè)變量柳譬,

? ? ? ? * 由java虛擬機(jī)來保證線程安全性喳张,確保改成員變量只能實(shí)例化一次,

? ? ? ? * 由于沒有任何鎖定美澳,所以其性能不會(huì)受到任何影響销部。

? ? ? ? */privatefinalstaticInnerStaticClass instance =newInnerStaticClass();? ? }privateInnerStaticClass() {? ? }publicstaticInnerStaticClassgetInstance() {returnInnerClass.instance;? ? }}

幾種模式性能比較:?

- 1.餓漢模式不論使用不使用都會(huì)初始化。?

- 2.懶漢模式存在鎖制跟,對(duì)性能有影響舅桩。?

- 3.雙重檢查也存在鎖,對(duì)性能有影響雨膨。?

- 4.靜態(tài)內(nèi)部類性能最好擂涛。

JVM

1、請介紹一下JVM內(nèi)存模型??用過什么垃圾回收器都說說唄

jvm包括2方面:?

1.1.線程私有區(qū):?

1.程序計(jì)數(shù)器聊记,記錄正在執(zhí)行的虛擬機(jī)字節(jié)碼的地址撒妈。?

2.虛擬機(jī)棧:方法執(zhí)行的內(nèi)存區(qū),每個(gè)方法執(zhí)行時(shí)會(huì)在虛擬機(jī)棧中創(chuàng)建棧幀排监。?

3.本地方法棧:虛擬機(jī)的Native方法執(zhí)行的內(nèi)存區(qū)狰右。?

1.2.線程共享區(qū):?

1.Java堆:對(duì)象分配內(nèi)存的區(qū)域;?

2.方法區(qū):也稱為持久代?

3.常量池:存放編譯器生成的各種字面量和符號(hào)引用舆床,是方法區(qū)的一部分棋蚌。

2、線上發(fā)送頻繁full gc如何處理? CPU 使用率過高怎么辦?

Partial GC:并不收集整個(gè)GC堆的模式Y(jié)oung GC:只收集young gen的GC

Old GC:只收集old gen的GC挨队。只有CMS的concurrent collection是這個(gè)模式

Mixed GC:收集整個(gè)young gen以及部分old gen的GC谷暮。只有G1有這個(gè)模式

Full GC:收集整個(gè)堆,包括young gen瞒瘸、old gen坷备、perm gen(如果存在的話)等所有部分的模式。

full gc 需要先定位然后找出問題之后再具體解決情臭,比如使用visualvm 工具先定位出現(xiàn)問題的原因省撑,在jvm參數(shù)上配置如下參數(shù),在發(fā)生full GC之前先把堆內(nèi)容給備份一下俯在。

-Xmx2g-XX:+HeapDumpBeforeFullGC-XX:HeapDumpPath=. -Xloggc:gc.log-XX:+PrintGC-XX:+PrintGCDetails-XX:+PrintGCDateStamps-XX:+UseGCLogFileRotation-XX:NumberOfGCLogFiles=10-XX:GCLogFileSize=100m-XX:HeapDumpOnOutOfMemoryError

3竟秫、知道字節(jié)碼嗎?字節(jié)碼都有哪些?Integer x =5,int y =5,比較x =y 都經(jīng)過哪些步驟?

4跷乐、講講類加載機(jī)制唄都有哪些類加載器肥败,這些類加載器都加載哪些文件?

1.啟動(dòng)類加載器

2.擴(kuò)展類加載器

3.應(yīng)用類加載器

4.自定義加載器?

手寫一下類加載Demo

importjava.io.ByteArrayOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.nio.ByteBuffer;importjava.nio.channels.Channels;importjava.nio.channels.FileChannel;importjava.nio.channels.WritableByteChannel;publicclassMyClassLoaderextendsClassLoader{publicMyClassLoader()? ? ? {? ? ? }publicMyClassLoader(ClassLoader parent)? ? ? {super(parent);? ? ? }protectedClassfindClass(String name)throwsClassNotFoundException? ? ? {? ? ? ? ? File file =newFile("D:/People.class");try{byte[] bytes = getClassBytes(file);//defineClass方法可以把二進(jìn)制流字節(jié)組成的文件轉(zhuǎn)換為一個(gè)java.lang.Class? Class c =this.defineClass(name, bytes,0, bytes.length);returnc;? ? ? ? ? }catch(Exception e)? ? ? ? ? {? ? ? ? ? ? ? e.printStackTrace();? ? ? ? ? }returnsuper.findClass(name);? ? ? }privatebyte[]getClassBytes(File file)throwsException? ? ? {// 這里要讀入.class的字節(jié),因此要使用字節(jié)流? FileInputStream fis =newFileInputStream(file);? ? ? ? ? FileChannel fc = fis.getChannel();? ? ? ? ? ByteArrayOutputStream baos =newByteArrayOutputStream();? ? ? ? ? WritableByteChannel wbc = Channels.newChannel(baos);? ? ? ? ? ByteBuffer by = ByteBuffer.allocate(1024);while(true){inti = fc.read(by);if(i ==0|| i == -1)break;? ? ? ? ? ? ? by.flip();? ? ? ? ? ? ? wbc.write(by);? ? ? ? ? ? ? by.clear();? ? ? ? ? }? ? ? ? ? fis.close();returnbaos.toByteArray();? ? ? }? }

5、知道osgi嗎? 他是如何實(shí)現(xiàn)的?

你可以動(dòng)態(tài)地安裝馒稍、卸載皿哨、啟動(dòng)、停止不同的應(yīng)用模塊纽谒,而不需要重啟容器证膨。

6、請問你做過哪些JVM優(yōu)化?使用什么方法達(dá)到什么效果?

7鼓黔、classforName(“java.lang.String”)和String classgetClassLoader() LoadClass(“java.lang.String”) 什么區(qū)別啊?

Class.forName() 會(huì)初始化對(duì)象央勒,而String.class.getClassLoader 不會(huì)。?

Class.forName(className)方法澳化,內(nèi)部實(shí)際調(diào)用的方法是Class.forName(className,true,classloader);?

第2個(gè)boolean參數(shù)表示類是否需要初始化崔步,?Class.forName(className)默認(rèn)是需要初始化。?

一旦初始化缎谷,就會(huì)觸發(fā)目標(biāo)對(duì)象的 static塊代碼執(zhí)行井濒,static參數(shù)也也會(huì)被再次初始化。?

ClassLoader.loadClass(className)方法慎陵,內(nèi)部實(shí)際調(diào)用的方法是 ClassLoader.loadClass(className,false);?

第2個(gè) boolean參數(shù)眼虱,表示目標(biāo)對(duì)象是否進(jìn)行鏈接,false表示不進(jìn)行鏈接席纽,由上面介紹可以捏悬,不進(jìn)行鏈接意味著不進(jìn)行包括初始化等一些列步驟,那么靜態(tài)塊和靜態(tài)對(duì)象就不會(huì)得到執(zhí)行润梯。

Spring

1过牙、spring都有哪些機(jī)制啊AOP底層如何實(shí)現(xiàn)的啊IOC呢?

1.IOC、AOP

2.IOC的實(shí)現(xiàn)方式就是就是反射和CGLIB纺铭。

2寇钉、cgLib知道嗎?他和jdk動(dòng)態(tài)代理什么區(qū)別?手寫一個(gè)jdk動(dòng)態(tài)代理唄?

cglib 代理的是普通的類,而jdk代理的是接口舶赔。jdk 只能代理接口扫倡,而cglib只能代理普通類,可以在spring配置中強(qiáng)制使用cglib代理竟纳。

<aop:aspectj-autoproxyproxy-target-class="true"/>)撵溃。

1、使用mysq索引都有哪些原則? 索引什么數(shù)據(jù)結(jié)構(gòu)?

1.選擇維度高

2.選擇 where锥累、on缘挑、group by、order by中出現(xiàn)的列桶略。

3.選擇較小的數(shù)據(jù)列语淘。

4.為較長的字符串使用前綴索引

5.組合索引能夠減小索引文件大小诲宇,使用速度也優(yōu)于單列索引

6.勿濫用索引,因?yàn)樗饕苏敬疟P空間意外惶翻,在進(jìn)行增姑蓝、刪、改操作的時(shí)候维贺,每次都要重新建立索引它掂。

7.索引不會(huì)包含有 NULL值得列,若組合索引包含有NULL值得列溯泣,整個(gè)索引無效

8.使用索引盡量避免使用 OR,否定查詢榕茧,模糊查詢垃沦,NOT IN,“<>”操作用押。

9.組合索引的最左前綴原則

2肢簿、mysq有哪些存儲(chǔ)引擎啊?都有啥區(qū)別? 要詳細(xì)!

1.MyISAM存儲(chǔ)引擎:不支持事務(wù)、也不支持外鍵蜻拨,優(yōu)勢是訪問速度快池充,對(duì)事務(wù)完整性沒有 要求或者以select,insert為主的應(yīng)用基本上可以用這個(gè)引擎來創(chuàng)建表?

2.該存儲(chǔ)引擎提供了具有提交缎讼、回滾和崩潰恢復(fù)能力的事務(wù)安全收夸。但是對(duì)比MyISAM引擎,寫的處理效率會(huì)差一些血崭,并且會(huì)占用更多的磁盤空間以保留數(shù)據(jù)和索引卧惜。?

InnoDB存儲(chǔ)引擎的特點(diǎn):支持自動(dòng)增長列,支持外鍵約束

3夹纫、設(shè)計(jì)高并發(fā)系統(tǒng)數(shù)據(jù)庫層面該怎么設(shè)計(jì)?數(shù)據(jù)庫鎖有哪些類型?如何實(shí)現(xiàn)呀?

1.垂直拆分咽瓷,根據(jù)業(yè)務(wù)拆分表。

2.水平拆分舰讹,根據(jù)id進(jìn)行取模放入到不同數(shù)據(jù)庫中茅姜。

3.垂直拆分+水平拆分。

4月匣、數(shù)據(jù)庫事務(wù)有哪些?

原子性(Atomicity):事務(wù)作為一個(gè)整體被執(zhí)行钻洒,包含在其中的對(duì)數(shù)據(jù)庫的操作要么全部被執(zhí)行,要么都不執(zhí)行桶错。?

一致性(Consistency):事務(wù)應(yīng)確保數(shù)據(jù)庫的狀態(tài)從一個(gè)一致狀態(tài)轉(zhuǎn)變?yōu)榱硪粋€(gè)一致狀態(tài)航唆。一致狀態(tài)的含義是數(shù)據(jù)庫中的數(shù)據(jù)應(yīng)滿足完整性約束。?

隔離性(Isolation):多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)院刁,一個(gè)事務(wù)的執(zhí)行不應(yīng)影響其他事務(wù)的執(zhí)行糯钙。?

持久性(Durability):一個(gè)事務(wù)一旦提交,他對(duì)數(shù)據(jù)庫的修改應(yīng)該永久保存在數(shù)據(jù)庫中。

分庫分表

1任岸、如何設(shè)計(jì)可以動(dòng)態(tài)擴(kuò)容縮容的分庫分表方案?

2再榄、用過哪些分庫分表中間件,有啥優(yōu)點(diǎn)和缺點(diǎn)?講一下你了解的分庫分表中間件的底層實(shí)現(xiàn)原理?

3享潜、我現(xiàn)在有一個(gè)未分庫分表的系統(tǒng)困鸥,以后系統(tǒng)需分庫分表,如何設(shè)計(jì)剑按,讓未分庫分表的系統(tǒng)動(dòng)態(tài)切換到分庫分表的系統(tǒng)上? 那若出現(xiàn)網(wǎng)絡(luò)原因疾就,網(wǎng)絡(luò)連不通怎么辦啊?

4、分布式事務(wù)知道嗎? 你們怎么解決的?

5艺蝴、為什么要分庫分表啊???

6猬腰、分布式尋址方式都有哪些算法知道一致性hash嗎?手寫一下java實(shí)現(xiàn)代碼??你若userId取摸分片,那我要查一段連續(xù)時(shí)間里的數(shù)據(jù)怎么辦???

7猜敢、如何解決分庫分表主鍵問題有什么實(shí)現(xiàn)方案??

主鍵不采用自增策略姑荷,而采用統(tǒng)一主鍵生成規(guī)則。

分布式緩存

1缩擂、redis和memcheched 什么區(qū)別為什么單線程的redis比多線程的memched效率要高啊?

相同點(diǎn):都是使用的多路io復(fù)用的方式鼠冕,減少了阻塞,充分的利用cpu和內(nèi)存性能胯盯。?

不同點(diǎn):redis單進(jìn)程單線程懈费,Memcache 多進(jìn)程單線程,redis自己寫了一套epoll的實(shí)現(xiàn)陨闹,而Memcache 使用的是Libevent楞捂,這個(gè)組件本身比較大,有很多無用代碼趋厉,對(duì)Memcache性能有影響寨闹,還有就是Memcache采用的CAS這種方式也會(huì)對(duì)性能造成影響。

2君账、redis有什么數(shù)據(jù)類型都在哪些場景下使用啊?

3繁堡、reids的主從復(fù)制是怎么實(shí)現(xiàn)的redis的集群模式是如何實(shí)現(xiàn)的呢redis的key是如何尋址的啊?

1.全量同步

Redis全量復(fù)制一般發(fā)生在Slave初始化階段,這時(shí)Slave需要將Master上的所有數(shù)據(jù)都復(fù)制一份乡数。具體步驟如下:?

1)從服務(wù)器連接主服務(wù)器椭蹄,發(fā)送SYNC命令;?

2)主服務(wù)器接收到SYNC命名后净赴,開始執(zhí)行BGSAVE命令生成RDB文件并使用緩沖區(qū)記錄此后執(zhí)行的所有寫命令绳矩;?

3)主服務(wù)器BGSAVE執(zhí)行完后,向所有從服務(wù)器發(fā)送快照文件玖翅,并在發(fā)送期間繼續(xù)記錄被執(zhí)行的寫命令翼馆;?

4)從服務(wù)器收到快照文件后丟棄所有舊數(shù)據(jù)割以,載入收到的快照;?

5)主服務(wù)器快照發(fā)送完畢后開始向從服務(wù)器發(fā)送緩沖區(qū)中的寫命令应媚;?

6)從服務(wù)器完成對(duì)快照的載入严沥,開始接收命令請求,并執(zhí)行來自主服務(wù)器緩沖區(qū)的寫命令中姜;

2.增量同步

RedisSlave初始化后開始正常工作時(shí)主服務(wù)器發(fā)生的寫操作同步到從服務(wù)器的過程消玄。?

增量復(fù)制的過程主要是主服務(wù)器每執(zhí)行一個(gè)寫命令就會(huì)向從服務(wù)器發(fā)送相同的寫命令,從服務(wù)器接收并執(zhí)行收到的寫命令丢胚。

3.同步策略

主從剛剛連接的時(shí)候翩瓜,進(jìn)行全量同步;全同步結(jié)束后嗜桌,進(jìn)行增量同步奥溺。當(dāng)然,如果有需要骨宠,slave 在任何時(shí)候都可以發(fā)起全is 策略是,無論如何相满,首先會(huì)嘗試進(jìn)行增量同步层亿,如不成功,要求從機(jī)進(jìn)行全量同步立美。

4.注意點(diǎn)

如果多個(gè)Slave斷線了匿又,需要重啟的時(shí)候,因?yàn)橹灰猄lave啟動(dòng)建蹄,就會(huì)發(fā)送sync請求和主機(jī)全量同步碌更,當(dāng)多個(gè)同時(shí)出現(xiàn)的時(shí)候,可能會(huì)導(dǎo)致Master IO劇增宕機(jī)洞慎。

4痛单、使用redis如何設(shè)計(jì)分布式鎖?使用zk可以嗎?如何實(shí)現(xiàn)啊這兩種哪個(gè)效率更高啊??

5、知道redis的持久化嗎都有什么缺點(diǎn)優(yōu)點(diǎn)啊? ?具體底層實(shí)現(xiàn)呢?

6劲腿、redis過期策略都有哪些LRU 寫一下java版本的代碼吧??

分布式服務(wù)框架

1旭绒、說一下dubbo的實(shí)現(xiàn)過程注冊中心掛了可以繼續(xù)通信嗎??

2、zk原理知道嗎zk都可以干什么Paxos算法知道嗎?說一下原理和實(shí)現(xiàn)??

3焦人、dubbo支持哪些序列化協(xié)議?hessian 說一下hessian的數(shù)據(jù)結(jié)構(gòu)PB知道嗎為啥PB效率是最高的啊??

4挥吵、知道netty嗎’netty可以干嘛呀NIO,BIO,AIO 都是什么啊有什么區(qū)別啊?

5、dubbo復(fù)制均衡策略和高可用策略都有哪些啊動(dòng)態(tài)代理策略呢?

6花椭、為什么要進(jìn)行系統(tǒng)拆分啊拆分不用dubbo可以嗎’dubbo和thrift什么區(qū)別啊?

分布式消息隊(duì)列

1忽匈、為什么使用消息隊(duì)列啊消息隊(duì)列有什么優(yōu)點(diǎn)和缺點(diǎn)啊?

2、如何保證消息隊(duì)列的高可用啊如何保證消息不被重復(fù)消費(fèi)啊

3矿辽、kafka 丹允,activemq,rabbitmq 郭厌,rocketmq都有什么優(yōu)點(diǎn),缺點(diǎn)啊???

4嫌松、如果讓你寫一個(gè)消息隊(duì)列沪曙,該如何進(jìn)行架構(gòu)設(shè)計(jì)啊?說一下你的思路

分布式搜索引擎

1、es的工作過程實(shí)現(xiàn)是如何的?如何實(shí)現(xiàn)分布式的啊

2萎羔、es在數(shù)據(jù)量很大的情況下( 數(shù)十億級(jí)別)如何提高查詢效率啊?

3液走、es的查詢是一個(gè)怎么的工作過程?底層的lucence介紹一下唄倒排索引知道嗎?es和mongdb什么區(qū)別啊都在什么場景下使用啊?

高并發(fā)高可用架構(gòu)設(shè)計(jì)

1、如何設(shè)計(jì)一個(gè)高并發(fā)高可用系統(tǒng)

2贾陷、如何限流?工程中怎么做的缘眶,說一下具體實(shí)現(xiàn)

3、緩存如何使用的緩存使用不當(dāng)會(huì)造成什么后果?

4髓废、如何熔斷啊?熔斷框架都有哪些?具體實(shí)現(xiàn)原理知道嗎?

5巷懈、如何降級(jí)如何進(jìn)行系統(tǒng)拆分,如何數(shù)據(jù)庫拆分????

分布式專題架構(gòu)

通信協(xié)議

1慌洪、說一下TCP ‘IP四層?

2顶燕、http的工作流程?? ?http1.0 http1.1http2.0 具體哪些區(qū)別啊?

3、TCP三次握手冈爹,四層分手的工作流程畫一下流程圖為什么不是四次五次或者二次啊?

4涌攻、畫一下https的工作流程?具體如何實(shí)現(xiàn)啊?如何防止被抓包啊??

算法

1、比較簡單频伤,我一個(gè)文件恳谎,有45億個(gè)阿拉伯?dāng)?shù)字,如何進(jìn)行去重啊如何找出最大的那個(gè)數(shù)啊?

數(shù)據(jù)結(jié)構(gòu)

1憋肖、二叉樹和紅黑樹等因痛。

源碼中所用到的經(jīng)典設(shè)計(jì)思想用設(shè)計(jì)模式

及常用設(shè)計(jì)模式

如果您Java學(xué)習(xí)的過程中遇到難題,歡迎關(guān)注微信公眾號(hào)【潭州筑夢Java】岸更,大家一起交流討論解決鸵膏!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市坐慰,隨后出現(xiàn)的幾起案子较性,更是在濱河造成了極大的恐慌,老刑警劉巖结胀,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赞咙,死亡現(xiàn)場離奇詭異,居然都是意外死亡糟港,警方通過查閱死者的電腦和手機(jī)攀操,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秸抚,“玉大人速和,你說我怎么就攤上這事歹垫。” “怎么了颠放?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵排惨,是天一觀的道長。 經(jīng)常有香客問我碰凶,道長暮芭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任欲低,我火速辦了婚禮辕宏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砾莱。我一直安慰自己瑞筐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布腊瑟。 她就那樣靜靜地躺著聚假,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闰非。 梳的紋絲不亂的頭發(fā)上魔策,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音河胎,去河邊找鬼。 笑死虎敦,一個(gè)胖子當(dāng)著我的面吹牛游岳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播其徙,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胚迫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了唾那?” 一聲冷哼從身側(cè)響起访锻,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闹获,沒想到半個(gè)月后期犬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡避诽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年龟虎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沙庐。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鲤妥,死狀恐怖佳吞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棉安,我是刑警寧澤底扳,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站贡耽,受9級(jí)特大地震影響衷模,放射性物質(zhì)發(fā)生泄漏贯底。R本人自食惡果不足惜橙垢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一怖亭、第九天 我趴在偏房一處隱蔽的房頂上張望挠羔。 院中可真熱鬧朽寞,春花似錦殴胧、人聲如沸订咸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽届囚。三九已至,卻和暖如春是尖,著一層夾襖步出監(jiān)牢的瞬間意系,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工饺汹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛔添,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓兜辞,卻偏偏與公主長得像迎瞧,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逸吵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容