Java題庫
基於BIO實現的Server端,當建立了100個連接時,會有多少個線程?如果基於NIO,又會是多少個線程? 為什麼?
通常來說基於NIO實現的Server端,會用多少個線程去處理IO事件,為什麼?
一個典型的客戶端集群->LB->服務端集群這樣的結構中,如客戶端採用連接池,長連接的方式,這種設計你覺得可能會出現什麼問題?如果客戶端採用的是單個長連接的方式呢?如果有問題,你覺得應該怎麼解決?
cglib和Java的動態代理相比,具體有什麼不同?
在基於Netty實現FrameDecoder時,下面兩種代碼的表現會有什麼不同?
第一種
private void callDecode(...) {
List<Object> results = new ArrayList<Object>();
while (cumulation.readable()) {
int oldReaderIndex = cumulation.readerIndex();
Object frame = decode(context, channel, cumulation);
if (frame == null) {
if (oldReaderIndex == cumulation.readerIndex())
break;
else
continue;
}
else if (oldReaderIndex == cumulation.readerIndex()) {
throw new IllegalStateException( ".....");
}
results.add(frame);
}
if(results.size() > 0)
fireMessageReceived(context, remoteAddress, results);
}
第二種
private void callDecode(...) {
int oldReaderIndex = cumulation.readerIndex();
Object frame = decode(context, channel, cumulation);
if (frame != null)
fireMessageReceived(context, remoteAddress, frame);
}
用Executors.newCachedThreadPool創建的線程池,在運行的過程中有可能產生的風險是?
new ThreadPoolExecutor(10,100,10,TimeUnit.MILLISECONDS,new LinkedBlockingQueue(10));一個這樣創建的線程池,當已經有10個任務在運行時,第11個任務提交到此線程池執行的時候會發生什麼,為什麼?
實現一個自定義的ThreadFactory的作用通常是?
除了用Object.wait和Object.notifyAll來實現線程間的交互外,你還會常用哪些來實現?
為什麼ConcurrentHashMap可以在高並發的情況下比HashMap更為高效?
AtomicInteger、AtomicBoolean這些類之所以在高並發時高效,共同的原因是?
請合理的使用Queue來實現一個高並發的生產/消費的場景,給些核心的代碼片段。
請實現讓10個任務同時並發啟動,給些代碼片段。
在Java程序運行階段,可以用什麼命令行工具來查看當前Java程序的一些啟動參數值,例如Heap Size等。
用什麼命令行工具可以查看運行的Java程序的GC狀況,請具體寫出命令行格式。
用什麼工具,可以在Java程序運行的情況下跟蹤某個方法的執行時間,請求參數信息等,並請解釋下工具實現的原理。
當一個Java程序接收請求,很長時間都沒響應的話,通常你會怎麼去排查這種問題?
Java進程突然消失了,你會怎麼去排查這種問題?
以下這段代碼思路,你覺得在運行時可能會產生的風險是,應該如何改進?
public List<User> getUsers(String[] userIds){
// 从数据库查找符合userIds的user记录
// 将返回的记录组装为User对象,放入List并返回
}
以下兩種代碼,在運行時有什麼不同?為什麼?
第一種
private static final boolean isLoggerDebugEnabled = log.isDebugEnabled();
public void xx(User user){
if(isLoggerDebugEnabled){
log.debug("enter xx method, user id is: " + user.getId());
}
}
第二種
public void xx(User user){
log.debug("enter xx method, user id is: " + user.getId());
}
Java程序為什麼通常在剛啟動的時候會執行的比較慢,而處理了一些請求後會變快,AOT能帶來什麼幫助?
Parallel GC、CMS GC、ZGC、Azul Pauseless GC最主要的不同是?背後的原理也請簡單描述下?
請寫一段程序,讓其運行時的表現為觸發5次ygc,然後3次fgc,然後3次ygc,然後1次fgc,請給出代碼以及啟動參數。
Go的Coroutine和Java的線程機制最主要的不同是?如果Java語言要透明的實現Coroutine,你覺得主要的難點是?