對象
拷貝(clone)
如何實(shí)現(xiàn)對象克隆
深拷貝和淺拷貝區(qū)別
深拷貝和淺拷貝如何實(shí)現(xiàn)激活機(jī)制
寫clone()方法時肌索,通常都有一行代碼,是什么
比較
在比較對象時蛀蜜,”==” 運(yùn)算符和 equals 運(yùn)算有何區(qū)別
如果要重寫一個對象的equals方法刻两,還要考慮什么
兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code滴某,這句話對不對
構(gòu)造器
構(gòu)造器鏈?zhǔn)鞘裁?/p>
創(chuàng)建對象時構(gòu)造器的調(diào)用順序
不可變對象
什么是不可變象(immutable object)
為什么 Java 中的 String 是不可變的(Immutable)
如何構(gòu)建不可變的類結(jié)構(gòu)磅摹?關(guān)鍵點(diǎn)在哪里
能創(chuàng)建一個包含可變對象的不可變對象嗎
如何對一組對象進(jìn)行排序
方法
構(gòu)造器(constructor)是否可被重寫(override)
方法可以同時即是 static 又是 synchronized 的嗎
abstract 的 method是否可同時是 static,是否可同時是 native霎奢,是否可同時是synchronized 答案:都不可以户誓,因?yàn)閍bstract申明的方法是要求子類去實(shí)現(xiàn)的,abstract只是告訴你有這樣一個接口幕侠,你要去實(shí)現(xiàn)帝美,至于你的具體實(shí)現(xiàn)可以是native和synchronized,也可以不是晤硕,抽象方法是不關(guān)心這些事的证舟,所以寫這兩個是沒有意義的。然后窗骑,static方法是不會被覆蓋的,而abstract方法正是要子類去覆蓋它漆枚,所以也是沒有意義的创译。所以,總的來說墙基,就是java語法不允許你這樣做软族,事實(shí)上,也沒有意義這樣做残制。
abstract需要重載,static為類方法,沒有重載一說 abstract為沒有實(shí)現(xiàn)的方法,native為本機(jī)實(shí)現(xiàn)的方法,自相矛盾 abstract方法沒有實(shí)現(xiàn),也不可能實(shí)際調(diào)用抽象方法,沒有必要synchronized修飾,當(dāng)然子類可以根據(jù)需要同步該方法.所以 都不能立砸。
Java支持哪種參數(shù)傳遞類型 答案:Java 應(yīng)用程序有且僅有的一種參數(shù)傳遞機(jī)制,即按值傳遞初茶。
對象是按引用傳遞的颗祝;
Java 應(yīng)用程序有且僅有的一種參數(shù)傳遞機(jī)制,即按值傳遞;
按值傳遞意味著當(dāng)將一個參數(shù)傳遞給一個函數(shù)時螺戳,函數(shù)接收的是原始值的一個副本搁宾;
按引用傳遞意味著當(dāng)將一個參數(shù)傳遞給一個函數(shù)時,函數(shù)接收的是原始值的內(nèi)存地址倔幼,而不是值的副本盖腿。
一個對象被當(dāng)作參數(shù)傳遞到一個方法,是值傳遞還是引用傳遞 答案:是值傳遞损同。Java編程語言中只有由值傳遞參數(shù)的翩腐。當(dāng)一個對象實(shí)例作為一個參數(shù)被傳遞到方法中時,參數(shù)的值就是該對象的引用膏燃。對象的內(nèi)容可以在被調(diào)用的方法中改變茂卦,但對象的引用是永遠(yuǎn)不會改變的。
當(dāng)一個對象被當(dāng)作參數(shù)傳遞到一個方法后蹄梢,此方法可改變這個對象的屬性疙筹,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞
我們能否重載main()方法
如果main方法被聲明為private會怎樣
GC
概念
GC是什么禁炒?為什么要有GC
什么時候會導(dǎo)致垃圾回收
GC是怎么樣運(yùn)行的
新老以及永久區(qū)是什么
GC 有幾種方式而咆?怎么配置
什么時候一個對象會被GC? 如何判斷一個對象是否存活 答案:參考文章對象是否存活
System.gc() Runtime.gc()會做什么事情幕袱? 能保證 GC 執(zhí)行嗎
垃圾回收器可以馬上回收內(nèi)存嗎暴备?有什么辦法主動通知虛擬機(jī)進(jìn)行垃圾回收? 答案:可以们豌。程序員可以手動執(zhí)行System.gc()涯捻,通知GC運(yùn)行,但是Java語言規(guī)范并不保證GC一定會執(zhí)行望迎。
Minor GC 障癌、Major GC、Young GC 與 Full GC分別在什么時候發(fā)生 答案:Minor GC
從年輕代空間(包括 Eden 和 Survivor 區(qū)域)回收內(nèi)存被稱為 Minor GC辩尊。
當(dāng) JVM 無法為一個新的對象分配空間時會觸發(fā) Minor GC涛浙,比如當(dāng) Eden 區(qū)滿了。所以分配率越高摄欲,越頻繁執(zhí)行 Minor GC轿亮。
內(nèi)存池被填滿的時候,其中的內(nèi)容全部會被復(fù)制胸墙,指針會從0開始跟蹤空閑內(nèi)存我注。Eden 和 Survivor 區(qū)進(jìn)行了標(biāo)記和復(fù)制操作,
取代了經(jīng)典的標(biāo)記迟隅、掃描但骨、壓縮励七、清理操作。所以 Eden 和 Survivor 區(qū)不存在內(nèi)存碎片嗽冒。寫指針總是停留在所使用內(nèi)存池的頂部呀伙。
執(zhí)行 Minor GC 操作時,不會影響到永久代添坊。從永久代到年輕代的引用被當(dāng)成 GC roots剿另,從年輕代到永久代的引用在標(biāo)記階段被直接忽略掉。
質(zhì)疑常規(guī)的認(rèn)知贬蛙,所有的 Minor GC 都會觸發(fā)“全世界的暫停(stop-the-world)”雨女,停止應(yīng)用程序的線程。對于大部分應(yīng)用程序阳准,停頓導(dǎo)致的延遲都是可以忽略不計(jì)的氛堕。
其中的真相就 是,大部分 Eden 區(qū)中的對象都能被認(rèn)為是垃圾野蝇,永遠(yuǎn)也不會被復(fù)制到 Survivor 區(qū)或者老年代空間讼稚。如果正好相反,Eden 區(qū)大部分新生對象不符合 GC 條件绕沈,Minor GC 執(zhí)行時暫停的時間將會長很多锐想。
Major GC 是清理永久代。
Full GC 是清理整個堆空間—包括年輕代和永久代乍狐。
垃圾回收算法的實(shí)現(xiàn)原理
如果對象的引用被置為null赠摇,垃圾收集器是否會立即釋放對象占用的內(nèi)存? 答案:垃圾收集器不會立即釋放對象占用的內(nèi)存浅蚪,在下一個垃圾回收周期中藕帜,這個對象將是可被回收的。
垃圾回收的最佳做法是什么 答案:1惜傲、標(biāo)記-清除算法:
首先標(biāo)記出所有需要回收的對象洽故,在標(biāo)記完成后統(tǒng)一回收掉所有被標(biāo)記的對象。標(biāo)記過程中 實(shí)際上即時上面說的finaLize()的過程盗誊。主要缺點(diǎn)一個是效率問題时甚。另外一個是空間問題,標(biāo)記清除后會產(chǎn)生大量不連續(xù)的內(nèi)存碎片浊伙。
2、復(fù)制算法:
這種算法將可用內(nèi)存按容量劃分為大小相等的兩塊长捧,每次只使用其中的一塊嚣鄙,當(dāng)這一塊的內(nèi)存用完了。就將還存活著的對象復(fù)制到另外一塊上面串结,然后再把已經(jīng)使用過的內(nèi)存空間一次清理掉哑子。
3舅列、標(biāo)記-整理算法:
復(fù)制收集算法在對象存活率較高時就要執(zhí)行較多的復(fù)制操作,效率將會遍低卧蜓。更關(guān)鍵的是帐要,如果不想浪費(fèi)50%的空間,就需要有額外的空間進(jìn)行分配擔(dān)保弥奸,以對應(yīng)被使用的內(nèi)存中所有對象都100%存活的極端情況榨惠,所以在老年代一般不能直接選用這種算法。
標(biāo)記過程仍然與標(biāo)記-清除算法一樣盛霎,但是后續(xù)步驟不是直接將對可回收對象進(jìn)行清理赠橙,而是讓所有存活的對象都向領(lǐng)一端移動,然后直接清理掉端邊界以外的內(nèi)存愤炸。
4期揪、分代收集算法:
當(dāng)代商業(yè)虛擬機(jī)的垃圾收集都采用的是“分代收集算法” ,根據(jù)對象的存活周期的不同规个,將內(nèi)存化為幾塊凤薛,一般是把java堆分為新生代和老年代。這樣就可以根據(jù)各個年代的特點(diǎn)采用最合適的收集算法诞仓。
新生代選用復(fù)制算法缤苫,老年代使用標(biāo)記-清理算法 或者 標(biāo)記-整理算法。
GC收集器有哪些
垃圾回收器的基本原理是什么狂芋?
串行(serial)收集器和吞吐量(throughput)收集器的區(qū)別是什么
Serial 與 Parallel GC之間的不同之處
CMS 收集器 與 G1 收集器的特點(diǎn)與區(qū)別
CMS垃圾回收器的工作過程
JVM 中一次完整的 GC 流程是怎樣的榨馁? 對象如何晉升到老年代
吞吐量優(yōu)先和響應(yīng)優(yōu)先的垃圾收集器選擇
GC策略
舉個實(shí)際的場景,選擇一個GC策略
JVM的永久代中會發(fā)生垃圾回收嗎
收集方法
標(biāo)記清除帜矾、標(biāo)記整理翼虫、復(fù)制算法的原理與特點(diǎn)?分別用在什么地方
如果讓你優(yōu)化收集方法屡萤,有什么思路
JVM
參數(shù)
說說你知道的幾種主要的jvm 參數(shù) 答案:參考幾個文章(JVM重要參數(shù)配置) 點(diǎn)擊打開鏈接 點(diǎn)擊打開鏈接 點(diǎn)擊打開鏈接
-XX:+UseCompressedOops 有什么作用
類加載器(ClassLoader)
Java 類加載器都有哪些 答案:1)Bootstrap ClassLoader
負(fù)責(zé)加載JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目錄下的jar包
3)App ClassLoader
負(fù)責(zé)記載classpath中指定的jar包及目錄中class
4)Custom ClassLoader
屬于應(yīng)用程序根據(jù)自身需要自定義的ClassLoader招拙,如tomcat、jboss都會根據(jù)j2ee規(guī)范自行實(shí)現(xiàn)ClassLoader
加載過程中會先檢查類是否被已加載措译,檢查順序是自底向上别凤,從Custom ClassLoader到BootStrap ClassLoader逐層檢查,只要某個classloader已加載就視為已加載此類领虹,保證此類只所有ClassLoader加載一次规哪。而加載的順序是自頂向下,也就是由上層來逐層嘗試加載此類塌衰。
JVM如何加載字節(jié)碼文件 答案:JVM主要完成三件事:
1诉稍、通過一個類的全限定名(包名與類名)來獲取定義此類的二進(jìn)制字節(jié)流(Class文件)蝠嘉。而獲取的方式,可以通過jar包杯巨、war包蚤告、網(wǎng)絡(luò)中獲取、JSP文件生成等方式服爷。
2杜恰、將這個字節(jié)流所代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運(yùn)行時數(shù)據(jù)結(jié)構(gòu)。這里只是轉(zhuǎn)化了數(shù)據(jù)結(jié)構(gòu)层扶,并未合并數(shù)據(jù)箫章。(方法區(qū)就是用來存放已被加載的類信息,常量镜会,靜態(tài)變量檬寂,編譯后的代碼的運(yùn)行時內(nèi)存區(qū)域)
3、在內(nèi)存中生成一個代表這個類的java.lang.Class對象戳表,作為方法區(qū)這個類的各種數(shù)據(jù)的訪問入口桶至。這個Class對象并沒有規(guī)定是在Java堆內(nèi)存中,它比較特殊匾旭,雖為對象镣屹,但存放在方法區(qū)中。
內(nèi)存管理
JVM內(nèi)存分哪幾個區(qū)价涝,每個區(qū)的作用是什么
一個對象從創(chuàng)建到銷毀都是怎么在這些部分里存活和轉(zhuǎn)移的
解釋內(nèi)存中的棧(stack)女蜈、堆(heap)和方法區(qū)(method area)的用法
JVM中哪個參數(shù)是用來控制線程的棧堆棧小
簡述內(nèi)存分配與回收策略
簡述重排序,內(nèi)存屏障色瘩,happen-before伪窖,主內(nèi)存,工作內(nèi)存
Java中存在內(nèi)存泄漏問題嗎居兆?請舉例說明
簡述 Java 中軟引用(SoftReferenc)覆山、弱引用(WeakReference)和虛引用
內(nèi)存映射緩存區(qū)是什么
jstack,jstat泥栖,jmap簇宽,jconsole怎么用
32 位 JVM 和 64 位 JVM 的最大堆內(nèi)存分別是多數(shù)?32 位和 64 位的 JVM吧享,int 類型變量的長度是多數(shù)魏割?
怎樣通過 Java 程序來判斷 JVM 是 32 位 還是 64 位
JVM自身會維護(hù)緩存嗎?是不是在堆中進(jìn)行對象分配钢颂,操作系統(tǒng)的堆還是JVM自己管理堆
什么情況下會發(fā)生棧內(nèi)存溢出
雙親委派模型是什么
多線程
基本概念
什么是線程
多線程的優(yōu)點(diǎn)
多線程的幾種實(shí)現(xiàn)方式
用 Runnable 還是 Thread
什么是線程安全
Vector, SimpleDateFormat 是線程安全類嗎
什么 Java 原型不是線程安全的
哪些集合類是線程安全的
多線程中的忙循環(huán)是什么
如何創(chuàng)建一個線程
編寫多線程程序有幾種實(shí)現(xiàn)方式
什么是線程局部變量
線程和進(jìn)程有什么區(qū)別钞它?進(jìn)程間如何通訊,線程間如何通訊
什么是多線程環(huán)境下的偽共享(false sharing)
同步和異步有何異同,在什么情況下分別使用他們须揣?舉例說明
Current
ConcurrentHashMap 和 Hashtable的區(qū)別
ArrayBlockingQueue, CountDownLatch的用法
ConcurrentHashMap的并發(fā)度是什么
CyclicBarrier 和 CountDownLatch有什么不同?各自的內(nèi)部原理和用法是什么
Semaphore的用法
Thread
啟動一個線程是調(diào)用 run() 還是 start() 方法钱豁?start() 和 run() 方法有什么區(qū)別
調(diào)用start()方法時會執(zhí)行run()方法耻卡,為什么不能直接調(diào)用run()方法
sleep() 方法和對象的 wait() 方法都可以讓線程暫停執(zhí)行,它們有什么區(qū)別
yield方法有什么作用牲尺?sleep() 方法和 yield() 方法有什么區(qū)別
Java 中如何停止一個線程
stop() 和 suspend() 方法為何不推薦使用
如何在兩個線程間共享數(shù)據(jù)
如何強(qiáng)制啟動一個線程
如何讓正在運(yùn)行的線程暫停一段時間
什么是線程組卵酪,為什么在Java中不推薦使用
你是如何調(diào)用 wait(方法的)?使用 if 塊還是循環(huán)谤碳?為什么
生命周期
有哪些不同的線程生命周期
線程狀態(tài)溃卡,BLOCKED 和 WAITING 有什么區(qū)別
畫一個線程的生命周期狀態(tài)圖
ThreadLocal 用途是什么,原理是什么蜒简,用的時候要注意什么
ThreadPool
線程池是什么瘸羡?為什么要使用它
如何創(chuàng)建一個Java線程池
ThreadPool用法與優(yōu)勢
提交任務(wù)時,線程池隊(duì)列已滿時會發(fā)會生什么
newCache 和 newFixed 有什么區(qū)別搓茬?簡述原理犹赖。構(gòu)造函數(shù)的各個參數(shù)的含義是什么,比如 coreSize, maxsize 等
線程池的實(shí)現(xiàn)策略
線程池的關(guān)閉方式有幾種卷仑,各自的區(qū)別是什么
線程池中submit() 和 execute()方法有什么區(qū)別峻村?
線程調(diào)度
Java中用到的線程調(diào)度算法是什么
什么是多線程中的上下文切換
你對線程優(yōu)先級的理解是什么
什么是線程調(diào)度器 (Thread Scheduler) 和時間分片 (Time Slicing)
線程同步
請說出你所知的線程同步的方法
synchronized 的原理是什么
synchronized 和 ReentrantLock 有什么不同
什么場景下可以使用 volatile 替換 synchronized
有T1,T2锡凝,T3三個線程粘昨,怎么確保它們按順序執(zhí)行?怎樣保證T2在T1執(zhí)行完后執(zhí)行窜锯,T3在T2執(zhí)行完后執(zhí)行
同步塊內(nèi)的線程拋出異常會發(fā)生什么
當(dāng)一個線程進(jìn)入一個對象的 synchronized 方法A 之后张肾,其它線程是否可進(jìn)入此對象的 synchronized 方法B
使用 synchronized 修飾靜態(tài)方法和非靜態(tài)方法有什么區(qū)別
如何從給定集合那里創(chuàng)建一個 synchronized 的集合
鎖
Java Concurrency API 中 的 Lock 接口是什么?對比同步它有什么優(yōu)勢
Lock 與 Synchronized 的區(qū)別衬浑?Lock 接口比 synchronized 塊的優(yōu)勢是什么
ReadWriteLock是什么捌浩?
鎖機(jī)制有什么用
什么是樂觀鎖(Optimistic Locking)?如何實(shí)現(xiàn)樂觀鎖工秩?如何避免ABA問題
解釋以下名詞:重排序尸饺,自旋鎖,偏向鎖助币,輕量級鎖浪听,可重入鎖,公平鎖眉菱,非公平鎖迹栓,樂觀鎖,悲觀鎖 答案查看文章
什么時候應(yīng)該使用可重入鎖
簡述鎖的等級方法鎖俭缓、對象鎖克伊、類鎖 答案:
對象鎖(方法鎖)酥郭,是針對一個對象的,它只在該對象的某個內(nèi)存位置聲明一個標(biāo)識該對象是否擁有鎖愿吹,所有它只會鎖住當(dāng)前的對象不从,一般一個對象鎖是對一個非靜態(tài)成員變量進(jìn)行synchronized修飾,或者對一個非靜態(tài)成員方法進(jìn)行synchronized進(jìn)行修飾犁跪,對于對象鎖椿息,不同對象訪問同一個被synchronized修飾的方法的時候不會阻塞
java的內(nèi)置鎖:每個java對象都可以用做一個實(shí)現(xiàn)同步的鎖,這些鎖成為內(nèi)置鎖坷衍。線程進(jìn)入同步代碼塊或方法的時候會自動獲得該鎖寝优,在退出同步代碼塊或方法時會釋放該鎖。獲得內(nèi)置鎖的唯一途徑就是進(jìn)入這個鎖的保護(hù)的同步代碼塊或方法枫耳。
java內(nèi)置鎖是一個互斥鎖乏矾,這就是意味著最多只有一個線程能夠獲得該鎖,當(dāng)線程A嘗試去獲得線程B持有的內(nèi)置鎖時迁杨,線程A必須等待或者阻塞妻熊,知道線程B釋放這個鎖,如果B線程不釋放這個鎖仑最,那么A線程將永遠(yuǎn)等待下去扔役。
java的對象鎖和類鎖:java的對象鎖和類鎖在鎖的概念上基本上和內(nèi)置鎖是一致的,但是警医,兩個鎖實(shí)際是有很大的區(qū)別的亿胸,對象鎖是用于對象實(shí)例方法,或者一個對象實(shí)例上的预皇,類鎖是用于類的靜態(tài)方法或者一個類的class對象上的侈玄。我們知道,類的對象實(shí)例可以有很多個吟温,但是每個類只有一個class對象序仙,所以不同對象實(shí)例的對象鎖是互不干擾的,但是每個類只有一個類鎖鲁豪。但是有一點(diǎn)必須注意的是潘悼,其實(shí)類鎖只是一個概念上的東西,并不是真實(shí)存在的爬橡,它只是用來幫助我們理解鎖定實(shí)例方法和靜態(tài)方法的區(qū)別的
上面已經(jīng)對鎖的一些概念有了一點(diǎn)了解治唤,下面探討synchronized關(guān)鍵字的用法。
synchronized的用法:synchronized修飾方法和synchronized修飾代碼塊糙申。
其實(shí)宾添,類鎖修飾方法和代碼塊的效果和對象鎖是一樣的,因?yàn)轭愭i只是一個抽象出來的概念,只是為了區(qū)別靜態(tài)方法的特點(diǎn)缕陕,因?yàn)殪o態(tài)方法是所有對象實(shí)例共用的粱锐,所以對應(yīng)著synchronized修飾的靜態(tài)方法的鎖也是唯一的,所以抽象出來個類鎖扛邑。其實(shí)這里的重點(diǎn)在下面這塊代碼卜范,synchronized同時修飾靜態(tài)和非靜態(tài)方法
synchronized的缺陷:當(dāng)某個線程進(jìn)入同步方法獲得對象鎖,那么其他線程訪問這里對象的同步方法時鹿榜,必須等待或者阻塞,這對高并發(fā)的系統(tǒng)是致命的锦爵,這很容易導(dǎo)致系統(tǒng)的崩潰舱殿。如果某個線程在同步方法里面發(fā)生了死循環(huán),那么它就永遠(yuǎn)不會釋放這個對象鎖险掀,那么其他線程就要永遠(yuǎn)的等待沪袭。這是一個致命的問題。
一個類的對象鎖和另一個類的對象鎖是沒有關(guān)聯(lián)的樟氢,當(dāng)一個線程獲得A類的對象鎖時冈绊,它同時也可以獲得B類的對象鎖。
Java中活鎖和死鎖有什么區(qū)別埠啃?
什么是死鎖(Deadlock)死宣?導(dǎo)致線程死鎖的原因?如何確保 N 個線程可以訪問 N 個資源同時又不導(dǎo)致死鎖
死鎖與活鎖的區(qū)別碴开,死鎖與饑餓的區(qū)別 答案:死鎖:是指兩個或兩個以上的進(jìn)程(或線程)在執(zhí)行過程中毅该,因爭奪資源而造成的一種互相等待的現(xiàn)象,若無外力作用潦牛,它們都將無法推進(jìn)下去眶掌。此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程巴碗。死鎖發(fā)生的四個條件
1朴爬、互斥條件:線程對資源的訪問是排他性的,如果一個線程對占用了某資源橡淆,那么其他線程必須處于等待狀態(tài)召噩,直到資源被釋放。
2逸爵、請求和保持條件:線程T1至少已經(jīng)保持了一個資源R1占用,但又提出對另一個資源R2請求蚣常,而此時,資源R2被其他線程T2占用痊银,于是該線程T1也必須等待抵蚊,但又對自己保持的資源R1不釋放。
3、不剝奪條件:線程已獲得的資源贞绳,在未使用完之前谷醉,不能被其他線程剝奪,只能在使用完以后由自己釋放冈闭。
4俱尼、環(huán)路等待條件:在死鎖發(fā)生時,必然存在一個“進(jìn)程-資源環(huán)形鏈”萎攒,即:{p0,p1,p2,...pn},進(jìn)程p0(或線程)等待p1占用的資源遇八,p1等待p2占用的資源,pn等待p0占用的資源耍休。(最直觀的理解是刃永,p0等待p1占用的資源,而p1而在等待p0占用的資源羊精,于是兩個進(jìn)程就相互等待)
活鎖:是指線程1可以使用資源斯够,但它很禮貌,讓其他線程先使用資源喧锦,線程2也可以使用資源读规,但它很紳士,也讓其他線程先使用資源燃少。這樣你讓我束亏,我讓你,最后兩個線程都無法使用資源阵具。
饑餓:是指如果線程T1占用了資源R枪汪,線程T2又請求封鎖R,于是T2等待怔昨。T3也請求資源R雀久,當(dāng)T1釋放了R上的封鎖后,系統(tǒng)首先批準(zhǔn)了T3的請求趁舀,T2仍然等待赖捌。然后T4又請求封鎖R,當(dāng)T3釋放了R上的封鎖之后矮烹,系統(tǒng)又批準(zhǔn)了T4的請求......越庇,T2可能永遠(yuǎn)等待。
怎么檢測一個線程是否擁有鎖
如何實(shí)現(xiàn)分布式鎖
有哪些無鎖數(shù)據(jù)結(jié)構(gòu)奉狈,他們實(shí)現(xiàn)的原理是什么
讀寫鎖可以用于什么應(yīng)用場景
Executors類是什么卤唉? Executor和Executors的區(qū)別 答案:
Executor 和 ExecutorService 這兩個接口主要的區(qū)別是:ExecutorService 接口繼承了 Executor 接口,是 Executor 的子接口
Executor 和 ExecutorService 第二個區(qū)別是:Executor 接口定義了 execute()方法用來接收一個Runnable接口的對象仁期,而 ExecutorService 接口中的 submit()方法可以接受Runnable和Callable接口的對象桑驱。
Executor 和 ExecutorService 接口第三個區(qū)別是 Executor 中的 execute() 方法不返回任何結(jié)果竭恬,而 ExecutorService 中的 submit()方法可以通過一個 Future 對象返回運(yùn)算結(jié)果。
Executor 和 ExecutorService 接口第四個區(qū)別是除了允許客戶端提交一個任務(wù)熬的,ExecutorService 還提供用來控制線程池的方法痊硕。比如:調(diào)用 shutDown() 方法終止線程池⊙嚎颍可以通過 《Java Concurrency in Practice》 一書了解更多關(guān)于關(guān)閉線程池和如何處理 pending 的任務(wù)的知識岔绸。
Executors 類提供工廠方法用來創(chuàng)建不同類型的線程池。比如: newSingleThreadExecutor() 創(chuàng)建一個只有一個線程的線程池橡伞,newFixedThreadPool(int numOfThreads)來創(chuàng)建固定線程數(shù)的線程池盒揉,newCachedThreadPool()可以根據(jù)需要創(chuàng)建新的線程,但如果已有線程是空閑的會重用已有線程兑徘。
什么是Java線程轉(zhuǎn)儲(Thread Dump)刚盈,如何得到它 答案:線程轉(zhuǎn)儲是一個JVM活動線程的列表,它對于分析系統(tǒng)瓶頸和死鎖非常有用道媚。有很多方法可以獲取線程轉(zhuǎn)儲——使用Profiler,Kill-3命令翘县,jstack工具等等最域。有的更喜歡jstack工具,因?yàn)樗菀资褂貌⑶沂荍DK自帶的锈麸。由于它是一個基于終端的工具镀脂,所以可以編寫一些腳本去定時的產(chǎn)生線程轉(zhuǎn)儲以待分析。
如何在Java中獲取線程堆棧
說出 3 條在 Java 中使用線程的最佳實(shí)踐
在線程中你怎么處理不可捕捉異常 答案:為了保證主線程不被阻塞忘伞,線程之間基本相互隔離薄翅,所以線程之間不論是異常還是通信都不共享。當(dāng)然氓奈,因?yàn)槟阕ギ惓J侵骶€程翘魄,而異常是在子線程出現(xiàn),可以用thread.setUncaughtExceptionHandler()去處理線程的異常舀奶。在Thread中暑竟,Java提供了一個setUncaughtExceptionHandler的方法來設(shè)置線程的異常處理函數(shù),你可以把異常處理函數(shù)傳進(jìn)去育勺,當(dāng)發(fā)生線程的未捕獲異常的時候但荤,由JVM來回調(diào)執(zhí)行。類似的功能就可以組成線程池自己的異常處理機(jī)制涧至,正常來說腹躁,你想在主線程異步執(zhí)行子線程的代碼并得知是否執(zhí)行成功,可以直接使用Promise模式南蓬,即Java中線程池返回的Future對象纺非。
實(shí)際項(xiàng)目中使用多線程舉例哑了。你在多線程環(huán)境中遇到的常見的問題是什么?你是怎么解決它的
請說出與線程同步以及線程調(diào)度相關(guān)的方法
程序中有3個 socket铐炫,需要多少個線程來處理
假如有一個第三方接口垒手,有很多個線程去調(diào)用獲取數(shù)據(jù)躺翻,現(xiàn)在規(guī)定每秒鐘最多有 10 個線程同時調(diào)用它讶泰,如何做到
如何在 Windows 和 Linux 上查找哪個線程使用的 CPU 時間最長
如何確保 main() 方法所在的線程是 Java 程序最后結(jié)束的線程
非常多個線程(可能是不同機(jī)器)叫胖,相互之間需要等待協(xié)調(diào)才能完成某種工作藐吮,問怎么設(shè)計(jì)這種協(xié)調(diào)方案
你需要實(shí)現(xiàn)一個高效的緩存勃黍,它允許多個用戶讀肺樟,但只允許一個用戶寫缴罗,以此來保持它的完整性宝恶,你會怎樣去實(shí)現(xiàn)它
異常
基本概念
Error 和 Exception有什么區(qū)別
UnsupportedOperationException是什么
NullPointerException 和 ArrayIndexOutOfBoundException 之間有什么相同之處
什么是受檢查的異常乘综,什么是運(yùn)行時異常 答案:
Java提供了兩類主要的異常 :runtime exception和checked exception憎账。 checked異常也就是我們經(jīng)常遇到的IO異常,以及SQL異常都是這種異常卡辰。 對于這種異常胞皱, JAVA編譯器強(qiáng)制要求我們必需對出現(xiàn)的這些異常進(jìn)行catch 。所以九妈,面對這種異常不管我們是否愿意反砌,只能自己去寫一大堆catch塊去處理可能的異常。 這類異常一般是外部錯誤,例如試圖從文件尾后讀取數(shù)據(jù)等,這并不是程序本身的錯誤,而是在應(yīng)用環(huán)境中出現(xiàn)的外部錯誤. 但是另外一種異常: runtime exception 萌朱,也稱運(yùn)行時異常宴树,我們可以不處理。當(dāng)出現(xiàn)這樣的異常時晶疼,總是由虛擬機(jī)接管酒贬。比如:我們從來沒有人去處理過 NullPointerException 異常,它就是運(yùn)行時異常翠霍,并且這種異常還是最常見的異常之一锭吨。
運(yùn)行時異常與一般異常有何異同
簡述一個你最常見到的runtime exception(運(yùn)行時異常)
finally
finally關(guān)鍵詞在異常處理中如何使用
如果執(zhí)行finally代碼塊之前方法返回了結(jié)果,或者JVM退出了寒匙,finally塊中的代碼還會執(zhí)行嗎
try里有return耐齐,finally還執(zhí)行么?那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行蒋情,什么時候被執(zhí)行埠况,在return前還是后
在什么情況下,finally語句不會執(zhí)行
throw 和 throws 有什么區(qū)別棵癣?
OOM你遇到過哪些情況辕翰?你是怎么搞定的?
SOF你遇到過哪些情況狈谊?
既然我們可以用RuntimeException來處理錯誤喜命,那么你認(rèn)為為什么Java中還存在檢查型異常
當(dāng)自己創(chuàng)建異常類的時候應(yīng)該注意什么
導(dǎo)致空指針異常的原因
異常處理 handle or declare 原則應(yīng)該如何理解
怎么利用 JUnit 來測試一個方法的異常
catch塊里別不寫代碼有什么問題
你曾經(jīng)自定義實(shí)現(xiàn)過異常嗎沟沙?怎么寫的
什么是 異常鏈
在try塊中可以拋出異常嗎
JDBC
通過 JDBC 連接數(shù)據(jù)庫有哪幾種方式
闡述 JDBC 操作數(shù)據(jù)庫的基本步驟
JDBC 中如何進(jìn)行事務(wù)處理
什么是 JdbcTemplate
什么是 DAO 模塊
使用 JDBC 操作數(shù)據(jù)庫時,如何提升讀取數(shù)據(jù)的性能壁榕?如何提升更新數(shù)據(jù)的性能
列出 5 個應(yīng)該遵循的 JDBC 最佳實(shí)踐
IO
File
File類型中定義了什么方法來創(chuàng)建一級目錄
File類型中定義了什么方法來判斷一個文件是否存在
流
為了提高讀寫性能矛紫,可以采用什么流
Java中有幾種類型的流
JDK 為每種類型的流提供了一些抽象類以供繼承,分別是哪些類
對文本文件操作用什么I/O流
對各種基本數(shù)據(jù)類型和String類型的讀寫牌里,采用什么流
能指定字符編碼的 I/O 流類型是什么
序列化
什么是序列化颊咬?如何實(shí)現(xiàn) Java 序列化及注意事項(xiàng)
Serializable 與 Externalizable 的區(qū)別
Socket
socket 選項(xiàng) TCP NO DELAY 是指什么
Socket 工作在 TCP/IP 協(xié)議棧是哪一層
TCP、UDP 區(qū)別及 Java 實(shí)現(xiàn)方式
說幾點(diǎn) IO 的最佳實(shí)踐
直接緩沖區(qū)與非直接緩沖器有什么區(qū)別牡辽?
怎么讀寫 ByteBuffer喳篇?ByteBuffer 中的字節(jié)序是什么
當(dāng)用System.in.read(buffer)從鍵盤輸入一行n個字符后,存儲在緩沖區(qū)buffer中的字節(jié)數(shù)是多少
如何使用掃描器類(Scanner Class)令牌化
面向?qū)ο缶幊蹋∣OP)
解釋下多態(tài)性(polymorphism)态辛,封裝性(encapsulation)麸澜,內(nèi)聚(cohesion)以及耦合(coupling)
多態(tài)的實(shí)現(xiàn)原理
封裝、繼承和多態(tài)是什么
對象封裝的原則是什么?
類
獲得一個類的類對象有哪些方式
重載(Overload)和重寫(Override)的區(qū)別奏黑。重載的方法能否根據(jù)返回類型進(jìn)行區(qū)分炊邦?
說出幾條 Java 中方法重載的最佳實(shí)踐
抽象類
抽象類和接口的區(qū)別
抽象類中是否可以有靜態(tài)的main方法
抽象類是否可實(shí)現(xiàn)(implements)接口
抽象類是否可繼承具體類(concrete class)
匿名類(Anonymous Inner Class)
匿名內(nèi)部類是否可以繼承其它類?是否可以實(shí)現(xiàn)接口
內(nèi)部類
內(nèi)部類分為幾種
內(nèi)部類可以引用它的包含類(外部類)的成員嗎
請說一下 Java 中為什么要引入內(nèi)部類熟史?還有匿名內(nèi)部類
繼承
繼承(Inheritance)與聚合(Aggregation)的區(qū)別在哪里
繼承和組合之間有什么不同
為什么類只能單繼承馁害,接口可以多繼承
存在兩個類,B 繼承 A以故,C 繼承 B蜗细,能將 B 轉(zhuǎn)換為 C 么裆操?如 C = (C) B
如果類 a 繼承類 b怒详,實(shí)現(xiàn)接口c,而類 b 和接口 c 中定義了同名變量踪区,請問會出現(xiàn)什么問題
接口
接口是什么
接口是否可繼承接口
為什么要使用接口而不是直接使用具體類昆烁?接口有什么優(yōu)點(diǎn)
泛型
泛型的存在是用來解決什么問題
泛型的常用特點(diǎn)
List能否轉(zhuǎn)為List
工具類
日歷
Calendar Class的用途
如何在Java中獲取日歷類的實(shí)例
解釋一些日歷類中的重要方法
GregorianCalendar 類是什么
SimpleTimeZone 類是什么
Locale類是什么
如何格式化日期對象
如何添加小時(hour)到一個日期對象(Date Objects)
如何將字符串 YYYYMMDD 轉(zhuǎn)換為日期
Math
Math.round()什么作用?Math.round(11.5) 等于多少缎岗?Math.round(-11.5)等于多少静尼?
XML
XML文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別传泊?解析XML文檔有哪幾種方式鼠渺?DOM 和 SAX 解析器有什么不同?
Java解析XML的方式
用 jdom 解析 xml 文件時如何解決中文問題眷细?如何解析
你在項(xiàng)目中用到了 XML 技術(shù)的哪些方面拦盹?如何實(shí)現(xiàn)
動態(tài)代理
描述動態(tài)代理的幾種實(shí)現(xiàn)方式,分別說出相應(yīng)的優(yōu)缺點(diǎn)
設(shè)計(jì)模式
什么是設(shè)計(jì)模式(Design Patterns)溪椎?你用過哪種設(shè)計(jì)模式普舆?用在什么場合
你知道哪些商業(yè)級設(shè)計(jì)模式恬口?
哪些設(shè)計(jì)模式可以增加系統(tǒng)的可擴(kuò)展性
單例模式
除了單例模式,你在生產(chǎn)環(huán)境中還用過什么設(shè)計(jì)模式沼侣?
寫 Singleton 單例模式
單例模式的雙檢鎖是什么
如何創(chuàng)建線程安全的 Singleton
什么是類的單例模式
寫出三種單例模式實(shí)現(xiàn)
適配器模式
適配器模式是什么祖能?什么時候使用
適配器模式和代理模式之前有什么不同
適配器模式和裝飾器模式有什么區(qū)別
什么時候使用享元模式
什么時候使用組合模式
什么時候使用訪問者模式
什么是模板方法模式
請給出1個符合開閉原則的設(shè)計(jì)模式的例子
開放問題
用一句話概括 Web 編程的特點(diǎn)
Google是如何在一秒內(nèi)把搜索結(jié)果返回給用戶
哪種依賴注入方式你建議使用,構(gòu)造器注入蛾洛,還是 Setter方法注入
樹(二叉或其他)形成許多普通數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)养铸。請描述一些這樣的數(shù)據(jù)結(jié)構(gòu)以及何時可以使用它們
某一項(xiàng)功能如何設(shè)計(jì)
線上系統(tǒng)突然變得異常緩慢,你如何查找問題
什么樣的項(xiàng)目不適合用框架
新浪微博是如何實(shí)現(xiàn)把微博推給訂閱者
簡要介紹下從瀏覽器輸入 URL 開始到獲取到請求界面之后 Java Web 應(yīng)用中發(fā)生了什么
請你談?wù)凷SH整合
高并發(fā)下雅潭,如何做到安全的修改同一行數(shù)據(jù)
12306網(wǎng)站的訂票系統(tǒng)如何實(shí)現(xiàn)揭厚,如何保證不會票不被超賣
網(wǎng)站性能優(yōu)化如何優(yōu)化的
聊了下曾經(jīng)參與設(shè)計(jì)的服務(wù)器架構(gòu)
請思考一個方案,實(shí)現(xiàn)分布式環(huán)境下的 countDownLatch
請思考一個方案扶供,設(shè)計(jì)一個可以控制緩存總體大小的自動適應(yīng)的本地緩存
在你的職業(yè)生涯中筛圆,算得上最困難的技術(shù)挑戰(zhàn)是什么
如何寫一篇設(shè)計(jì)文檔,目錄是什么
大寫的O是什么椿浓?舉幾個例子
編程中自己都怎么考慮一些設(shè)計(jì)原則的太援,比如開閉原則,以及在工作中的應(yīng)用
解釋一下網(wǎng)絡(luò)應(yīng)用的模式及其特點(diǎn)
設(shè)計(jì)一個在線文檔系統(tǒng)扳碍,文檔可以被編輯提岔,如何防止多人同時對同一份文檔進(jìn)行編輯更新
說出數(shù)據(jù)連接池的工作機(jī)制是什么
怎么獲取一個文件中單詞出現(xiàn)的最高頻率
描述一下你最常用的編程風(fēng)格
如果有機(jī)會重新設(shè)計(jì)你們的產(chǎn)品,你會怎么做
如何搭建一個高可用系統(tǒng)
如何啟動時不需輸入用戶名與密碼
如何在基于Java的Web項(xiàng)目中實(shí)現(xiàn)文件上傳和下載
如何實(shí)現(xiàn)一個秒殺系統(tǒng)笋敞,保證只有幾位用戶能買到某件商品碱蒙。
如何實(shí)現(xiàn)負(fù)載均衡,有哪些算法可以實(shí)現(xiàn)
如何設(shè)計(jì)一個購物車夯巷?想想淘寶的購物車如何實(shí)現(xiàn)的
如何設(shè)計(jì)一套高并發(fā)支付方案赛惩,架構(gòu)如何設(shè)計(jì)
如何設(shè)計(jì)建立和保持 100w 的長連接
如何避免瀏覽器緩存。
如何防止緩存雪崩
如果AB兩個系統(tǒng)互相依賴趁餐,如何解除依
如果有人惡意創(chuàng)建非法連接喷兼,怎么解決
如果有幾十億的白名單,每天白天需要高并發(fā)查詢后雷,晚上需要更新一次季惯,如何設(shè)計(jì)這個功能
如果系統(tǒng)要使用超大整數(shù)(超過long長度范圍),請你設(shè)計(jì)一個數(shù)據(jù)結(jié)構(gòu)來存儲這種超大型數(shù)字以及設(shè)計(jì)一種算法來實(shí)現(xiàn)超大整數(shù)加法運(yùn)算)
如果要設(shè)計(jì)一個圖形系統(tǒng)臀突,請你設(shè)計(jì)基本的圖形元件(Point,Line,Rectangle,Triangle)的簡單實(shí)現(xiàn)
如果讓你實(shí)現(xiàn)一個并發(fā)安全的鏈表勉抓,你會怎么做
應(yīng)用服務(wù)器與WEB 服務(wù)器的區(qū)別?應(yīng)用服務(wù)器怎么監(jiān)控性能候学,各種方式的區(qū)別藕筋?你使用過的應(yīng)用服務(wù)器優(yōu)化技術(shù)有哪些
大型網(wǎng)站在架構(gòu)上應(yīng)當(dāng)考慮哪些問題
有沒有處理過線上問題?出現(xiàn)內(nèi)存泄露盒齿,CPU利用率標(biāo)高念逞,應(yīng)用無響應(yīng)時如何處理的
最近看什么書困食,印象最深刻的是什么
描述下常用的重構(gòu)技巧
你使用什么版本管理工具?分支(Branch)與標(biāo)簽(Tag)之間的區(qū)別在哪里
你有了解過存在哪些反模式(Anti-Patterns)嗎
你用過的網(wǎng)站前端優(yōu)化的技術(shù)有哪些
如何分析Thread dump
你如何理解AOP中的連接點(diǎn)(Joinpoint)翎承、切點(diǎn)(Pointcut)硕盹、增強(qiáng)(Advice)、引介(Introduction)叨咖、織入(Weaving)瘩例、切面(Aspect)這些概念
你是如何處理內(nèi)存泄露或者棧溢出問題的
你們線上應(yīng)用的 JVM 參數(shù)有哪些
怎么提升系統(tǒng)的QPS和吞吐量
知識面
解釋什么是 MESI 協(xié)議(緩存一致性)
談?wù)?reactor 模型
Java 9 帶來了怎樣的新功能
Java 與 C++ 對比,C++ 或 Java 中的異常處理機(jī)制的簡單原理和應(yīng)用
簡單講講 Tomcat 結(jié)構(gòu)甸各,以及其類加載器流程
虛擬內(nèi)存是什么
闡述下 SOLID 原則
請簡要講一下你對測試驅(qū)動開發(fā)(TDD)的認(rèn)識
CDN實(shí)現(xiàn)原理
Maven 和 ANT 有什么區(qū)別
UML中有哪些常用的圖
Linux
Linux 下 IO 模型有幾種垛贤,各自的含義是什么。
Linux 系統(tǒng)下你關(guān)注過哪些內(nèi)核參數(shù)趣倾,說說你知道的
Linux 下用一行命令查看文件的最后五行
平時用到哪些 Linux 命令
用一行命令輸出正在運(yùn)行的 Java 進(jìn)程
使用什么命令來確定是否有 Tomcat 實(shí)例運(yùn)行在機(jī)器上
什么是 N+1 難題
什么是 paxos 算法
什么是 restful聘惦,講講你理解的 restful
什么是 zab 協(xié)議
什么是領(lǐng)域模型(domain model)?貧血模型(anaemic domain model) 和充血模型(rich domain model)有什么區(qū)別
什么是領(lǐng)域驅(qū)動開發(fā)(Domain Driven Development)
介紹一下了解的 Java 領(lǐng)域的 Web Service 框架
Web Server儒恋、Web Container 與 Application Server 的區(qū)別是什么
微服務(wù)(MicroServices)與巨石型應(yīng)用(Monolithic Applications)之間的區(qū)別在哪里
描述 Cookie 和 Session 的作用善绎,區(qū)別和各自的應(yīng)用范圍,Session工作原理
你常用的持續(xù)集成(Continuous Integration)诫尽、靜態(tài)代碼分析(Static Code Analysis)工具有哪些
簡述下數(shù)據(jù)庫正則化(Normalizations)
KISS,DRY,YAGNI 等原則是什么含義
分布式事務(wù)的原理禀酱,優(yōu)缺點(diǎn),如何使用分布式事務(wù)牧嫉?
布式集群下如何做到唯一序列號
網(wǎng)絡(luò)
HTTPS 的加密方式是什么剂跟,講講整個加密解密流程
HTTPS和HTTP的區(qū)別
HTTP連接池實(shí)現(xiàn)原理
HTTP集群方案
Nginx、lighttpd酣藻、Apache三大主流 Web服務(wù)器的區(qū)別
是否看過框架的一些代碼
持久層設(shè)計(jì)要考慮的問題有哪些曹洽?你用過的持久層框架有哪些
數(shù)值提升是什么
你能解釋一下里氏替換原則嗎
你是如何測試一個應(yīng)用的?知道哪些測試框架
傳輸層常見編程協(xié)議有哪些臊恋?并說出各自的特點(diǎn)
編程題
計(jì)算加班費(fèi)
加班10小時以下加班費(fèi)是時薪的1.5倍衣洁。加班10小時或以上墓捻,按4元/時算抖仅。提示:(一個月工作26天,一天正常工作8小時)
計(jì)算1000月薪砖第,加班9小時的加班費(fèi)
計(jì)算2500月薪撤卢,加班11小時的加班費(fèi)
計(jì)算1000月薪,加班15小時的加班費(fèi)
賣東西
一家商場有紅蘋果和青蘋果出售梧兼。(紅蘋果5元/個放吩,青蘋果4元/個)。
模擬一個進(jìn)貨羽杰。紅蘋果跟青蘋果各進(jìn)200個渡紫。
模擬一個出售到推。紅蘋果跟青蘋果各買出10個。每賣出一個蘋果需要進(jìn)行統(tǒng)計(jì)惕澎。
提示:一個蘋果是一個單獨(dú)的實(shí)體莉测。
日期提取
有這樣一個時間字符串:2008-8-8 20:08:08 , 請編寫能夠匹配它的正則表達(dá)式唧喉,并編寫Java代碼將日期后面的時分秒提取出來捣卤,即:20:08:08
線程
8設(shè)計(jì)4個線程,其中兩個線程每次對j增加1八孝,另外兩個線程對j每次減少1董朝。寫出程序。
用Java寫一個多線程程序干跛,如寫四個線程子姜,二個加1,二個對一個變量減一楼入,輸出
wait-notify 寫一段代碼來解決生產(chǎn)者-消費(fèi)者問題
數(shù)字
判斷101-200之間有多少個素?cái)?shù)闲询,并輸出所有素?cái)?shù)
用最有效率的方法算出2乘以17等于多少
有 1 億個數(shù)字,其中有 2 個是重復(fù)的浅辙,快速找到它扭弧,時間和空間要最優(yōu)
2 億個隨機(jī)生成的無序整數(shù),找出中間大小的值
10 億個數(shù)字里里面找最小的 10 個
1到1億的自然數(shù),求所有數(shù)的拆分后的數(shù)字之和记舆,如286 拆分成2鸽捻、8、6泽腮,如1到11拆分后的數(shù)字之和 => 1 + … + 9 + 1 + 0 + 1 + 1
一個數(shù)如果恰好等于它的因子之和御蒲,這個數(shù)就稱為 “完數(shù) “。例如6=1+2+3.編程 找出1000以內(nèi)的所有完數(shù)
一個數(shù)組中所有的元素都出現(xiàn)了三次诊赊,只有一個元素出現(xiàn)了一次找到這個元素
一球從100米高度自由落下厚满,每次落地后反跳回原高度的一半;再落下碧磅,求它在 第10次落地時碘箍,共經(jīng)過多少米?第10次反彈多高鲸郊?
求100-1000內(nèi)質(zhì)數(shù)的和
求1到100的和的平均數(shù)
求s=a+a+aaa+aaaa+aa…a的值丰榴,其中a是一個數(shù)字。例如2+22+222+2222+22222(此時共有5個數(shù)相加)秆撮,幾個數(shù)相加有鍵盤控制四濒。 求出1到100的和
算出1到40的質(zhì)數(shù),放進(jìn)數(shù)組里
顯示放組里的數(shù)
找出第[5]個數(shù)
刪除第[9]個數(shù),再顯示刪除后的第[9]個
有 3n+1 個數(shù)字盗蟆,其中 3n 個中是重復(fù)的戈二,只有 1 個是不重復(fù)的,怎么找出來喳资。
有一組數(shù)1.1.2.3.5.8.13.21.34挽拂。寫出程序隨便輸入一個數(shù)就能給出和前一組數(shù)字同規(guī)律的頭5個數(shù)
計(jì)算指定數(shù)字的階乘
開發(fā) Fizz Buzz
給定一個包含 N 個整數(shù)的數(shù)組,找出丟失的整數(shù)
一個排好序的數(shù)組骨饿,找出兩數(shù)之和為m的所有組合
將一個正整數(shù)分解質(zhì)因數(shù)亏栈。例如:輸入90,打印出90=233*5。
打印出所有的 “水仙花數(shù) “宏赘,所謂 “水仙花數(shù) “是指一個三位數(shù)绒北,其各位數(shù)字立方和等于該數(shù)本身。例如:153是一個 “水仙花數(shù) “察署,因?yàn)?53=1的三次方+5的三次方+3的三次方
原地交換兩個變量的值
找出4字節(jié)整數(shù)的中位數(shù)
找到整數(shù)的平方根
實(shí)現(xiàn)斐波那契
網(wǎng)絡(luò)
用Java Socket編程闷游,讀服務(wù)器幾個字符,再寫入本地顯示
反射
反射機(jī)制提供了什么功能贴汪?
反射是如何實(shí)現(xiàn)的
哪里用到反射機(jī)制
反射中 Class.forName 和 ClassLoader 區(qū)別
反射創(chuàng)建類實(shí)例的三種方式是什么
如何通過反射調(diào)用對象的方法
如何通過反射獲取和設(shè)置對象私有字段的值
反射機(jī)制的優(yōu)缺點(diǎn)
數(shù)據(jù)庫
寫一段 JDBC 連Oracle的程序,并實(shí)現(xiàn)數(shù)據(jù)查詢
算法
50個人圍坐一圈脐往,當(dāng)數(shù)到三或者三的倍數(shù)出圈,問剩下的人是誰扳埂,原來的位置是多少
實(shí)現(xiàn)一個電梯模擬器用
寫一個冒泡排序
寫一個折半查找
隨機(jī)產(chǎn)生20個不能重復(fù)的字符并排序
寫一個函數(shù)业簿,傳入 2 個有序的整數(shù)數(shù)組,返回一個有序的整數(shù)數(shù)組
寫一段代碼在遍歷 ArrayList 時移除一個元素
古典問題:有一對兔子阳懂,從出生后第3個月起每個月都生一對兔子梅尤,小兔子長到第四個月后每個月又生一對兔子,假如兔子都不死岩调,問每個月的兔子總數(shù)為多少
約瑟芬環(huán)游戲
正則
請編寫一段匹配IP地址的正則表達(dá)式
寫出一個正則表達(dá)式來判斷一個字符串是否是一個數(shù)字
字符串
寫一個方法巷燥,入一個文件名和一個字符串,統(tǒng)計(jì)這個字符串在這個文件中出現(xiàn)的次數(shù)号枕。
寫一個程序找出所有字符串的組合缰揪,并檢查它們是否是回文串
寫一個字符串反轉(zhuǎn)函數(shù),輸入abcde轉(zhuǎn)換成edcba代碼
小游戲葱淳,倒轉(zhuǎn)句子中的單詞
將GB2312編碼的字符串轉(zhuǎn)換為ISO-8859-1編碼的字符串
請寫一段代碼來計(jì)算給定文本內(nèi)字符“A”的個數(shù)钝腺。分別用迭代和遞歸兩種方式
編寫一個截取字符串的函數(shù),輸入為一個字符串和字節(jié)數(shù)蛙紫,輸出為按字節(jié)截取的字符串拍屑。 但是要保證漢字不被截半個途戒,如“我ABC”4坑傅,應(yīng)該截為“我AB”,輸入“我ABC漢DEF”喷斋,6唁毒,應(yīng)該輸出為“我ABC”而不是“我ABC+漢的半個”
給定 2 個包含單詞列表(每行一個)的文件蒜茴,編程列出交集
打印出一個字符串的所有排列
將一個鍵盤輸入的數(shù)字轉(zhuǎn)化成中文輸出(例如:輸入1234567,輸出:一百二拾三萬四千五百六拾七)
在Web應(yīng)用開發(fā)過程中經(jīng)常遇到輸出某種編碼的字符浆西,如從 GBK 到 ISO8859-1等粉私,如何輸出一個某種編碼的字符串
日期
計(jì)算兩個日期之間的差距