基礎(chǔ)篇
基本功
1、面向?qū)ο蟮奶卣?/p>
1、抽象
2.封裝
所謂封裝,就是將客觀(guān)事物封裝成抽象的類(lèi),并且類(lèi)可以把數(shù)據(jù)和方法讓可信的類(lèi)或者對(duì)象進(jìn)行操作,對(duì)不可信的類(lèi)或者對(duì)象進(jìn)行隱藏。類(lèi)就是封裝數(shù)據(jù)和操作這些數(shù)據(jù)代碼的邏輯實(shí)體。在一個(gè)類(lèi)的內(nèi)部,某些屬性和方法是私有的,不能被外界所訪(fǎng)問(wèn)。通過(guò)這種方式,對(duì)象對(duì)內(nèi)部數(shù)據(jù)進(jìn)行了不同級(jí)別的訪(fǎng)問(wèn)控制,就避免了程序中的無(wú)關(guān)部分的意外改變或錯(cuò)誤改變了對(duì)象的私有部分。
3.繼承
繼承有這樣一種能力,就是能使用現(xiàn)有的類(lèi)的所有功能,并無(wú)須重新編寫(xiě)原來(lái)的這些類(lèi)的基礎(chǔ)上對(duì)這些功能進(jìn)行擴(kuò)展。通過(guò)繼承創(chuàng)建的新類(lèi)稱(chēng)為子類(lèi)或派生類(lèi),被繼承的稱(chēng)為基類(lèi)。繼承有兩種,一種是實(shí)現(xiàn)繼承,另外一種是接口繼承。實(shí)現(xiàn)繼承可以直接使用基類(lèi)的屬性和方法而無(wú)需額外編碼,接口繼承是指使用屬性和方法的名稱(chēng),但是子必須提供實(shí)現(xiàn)的能力。
4.多態(tài)
所謂多態(tài)就是對(duì)一個(gè)實(shí)例的相同方法在不同的情形下有不同的表現(xiàn)形式。多態(tài)機(jī)制使得不同內(nèi)部結(jié)構(gòu)的對(duì)象可以共享相同的外部接口,這就意味著,雖然不同的類(lèi)的內(nèi)部操作不同,但可以通過(guò)一個(gè)公共的類(lèi),它們可以通過(guò)相同的方式予以調(diào)用。
2、final, finally, finalize 的區(qū)別
1、final—修飾符(關(guān)鍵字)如果一個(gè)類(lèi)被聲明為final,意味著它不能再派生出新的子類(lèi),不能作為父類(lèi)被繼承。因此一個(gè)類(lèi)不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們?cè)谑褂弥胁槐桓淖儭1宦暶鳛閒inal的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
2、finally—再異常處理時(shí)提供 finally 塊來(lái)執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊(如果有的話(huà))。
3、finalize—方法名。當(dāng)系統(tǒng)出現(xiàn)空閑的時(shí)候?qū)﹂L(zhǎng)時(shí)間不用的內(nèi)存進(jìn)行處理、刪除。
Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒(méi)有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。它是在 Object 類(lèi)中定義的,因此所有的類(lèi)都繼承了它。子類(lèi)覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的。
3、int 和 Integer 有什么區(qū)別
(1)Integer是int的包裝類(lèi);int是基本數(shù)據(jù)類(lèi)型;
(2)Integer變量必須實(shí)例化后才能使用;int變量不需要;
(3)Integer實(shí)際是對(duì)象的引用,指向此new的Integer對(duì)象;int是直接存儲(chǔ)數(shù)據(jù)值
(4)Integer的默認(rèn)值是null;int的默認(rèn)值是0。
4、重載和重寫(xiě)的區(qū)別
1.重寫(xiě)必須繼承,重載不用。
2.重寫(xiě)的方法名,參數(shù)數(shù)目相同,參數(shù)類(lèi)型兼容,重載的方法名相同,參數(shù)列表不同。
3.重寫(xiě)的方法修飾符大于等于父類(lèi)的方法,重載和修飾符無(wú)關(guān)。
4.重寫(xiě)不可以?huà)伋龈割?lèi)沒(méi)有拋出的一般異常,可以?huà)伋鲞\(yùn)行時(shí)異常
5、抽象類(lèi)和接口有什么區(qū)別
第一點(diǎn). 接口是抽象類(lèi)的變體,接口中所有的方法都是抽象的。而抽象類(lèi)是聲明方法的存在而不去實(shí)現(xiàn)它的類(lèi)。
第二點(diǎn). 接口可以多繼承,抽象類(lèi)不行
第三點(diǎn). 接口定義方法,不能實(shí)現(xiàn),而抽象類(lèi)可以實(shí)現(xiàn)部分方法。
第四點(diǎn). 接口中基本數(shù)據(jù)類(lèi)型為static 而抽類(lèi)象不是的
6、說(shuō)說(shuō)反射的用途及實(shí)現(xiàn)
(1)反射,使程序變得非常靈活,非常強(qiáng)大,可以不同加載該類(lèi)就可以完成實(shí)例化工作,并且提供動(dòng)態(tài)調(diào)用其屬性和方法的功能。
(2)缺點(diǎn)是通過(guò)反射是程序性能降低,再就是如果太多類(lèi)都是用反射這使得程序變得很臃腫,不利于后期的維護(hù)。
7、說(shuō)說(shuō)自定義注解的場(chǎng)景及實(shí)現(xiàn)
8、HTTP 請(qǐng)求的 GET 與 POST 方式的區(qū)別
9、session 與 cookie 區(qū)別
10、session 分布式處理
11、JDBC 流程
12、MVC 設(shè)計(jì)思想
13、equals 與 == 的區(qū)別
集合
1、List 和 Set 區(qū)別
2、List 和 Map 區(qū)別
3、Arraylist 與 LinkedList 區(qū)別
4、ArrayList 與 Vector 區(qū)別
5、HashMap 和 Hashtable 的區(qū)別
6、HashSet 和 HashMap 區(qū)別
7、HashMap 和 ConcurrentHashMap 的區(qū)別
8、HashMap 的工作原理及代碼實(shí)現(xiàn)
9、ConcurrentHashMap 的工作原理及代碼實(shí)現(xiàn)
線(xiàn)程
1、創(chuàng)建線(xiàn)程的方式及實(shí)現(xiàn)
2、sleep() 、join()、yield()有什么區(qū)別
3、說(shuō)說(shuō) CountDownLatch 原理
4、說(shuō)說(shuō) CyclicBarrier 原理
5、說(shuō)說(shuō) Semaphore 原理
6、說(shuō)說(shuō) Exchanger 原理
7、說(shuō)說(shuō) CountDownLatch 與 CyclicBarrier 區(qū)別
8、ThreadLocal 原理分析
9、講講線(xiàn)程池的實(shí)現(xiàn)原理
10、線(xiàn)程池的幾種方式
11、線(xiàn)程的生命周期
核心篇
數(shù)據(jù)存儲(chǔ)
1、MySQL 索引使用的注意事項(xiàng)
2、說(shuō)說(shuō)反模式設(shè)計(jì)
3、說(shuō)說(shuō)分庫(kù)與分表設(shè)計(jì)
4、分庫(kù)與分表帶來(lái)的分布式困境與應(yīng)對(duì)之策
5、說(shuō)說(shuō) SQL 優(yōu)化之道
6、MySQL 遇到的死鎖問(wèn)題
7、存儲(chǔ)引擎的 InnoDB 與 MyISAM
8、數(shù)據(jù)庫(kù)索引的原理
9、為什么要用 B-tree
10、聚集索引與非聚集索引的區(qū)別
11、limit 20000 加載很慢怎么解決
12、選擇合適的分布式主鍵方案
13、選擇合適的數(shù)據(jù)存儲(chǔ)方案
14、ObjectId 規(guī)則
15、聊聊 MongoDB 使用場(chǎng)景
16、倒排索引
17、聊聊 ElasticSearch 使用場(chǎng)景
緩存使用
1、Redis 有哪些類(lèi)型
2、Redis 內(nèi)部結(jié)構(gòu)
3、聊聊 Redis 使用場(chǎng)景
4、Redis 持久化機(jī)制
5、Redis 如何實(shí)現(xiàn)持久化
6、Redis 集群方案與實(shí)現(xiàn)
7、Redis 為什么是單線(xiàn)程的
8、緩存奔潰
9、緩存降級(jí)
10、使用緩存的合理性問(wèn)題
框架篇
Spring
1、BeanFactory 和 ApplicationContext 有什么區(qū)別
2、Spring Bean 的生命周期
3、Spring IOC 如何實(shí)現(xiàn)
4、說(shuō)說(shuō) Spring AOP
5、Spring AOP 實(shí)現(xiàn)原理
6、動(dòng)態(tài)代理(cglib 與 JDK)
7、Spring 事務(wù)實(shí)現(xiàn)方式
8、Spring 事務(wù)底層原理
9、如何自定義注解實(shí)現(xiàn)功能
10、Spring MVC 運(yùn)行流程
11、Spring MVC 啟動(dòng)流程
12、Spring 的單例實(shí)現(xiàn)原理
13、Spring 框架中用到了哪些設(shè)計(jì)模式
14、Spring 其他產(chǎn)品(Srping Boot、Spring Cloud、Spring Secuirity、Spring Data、Spring AMQP 等)