Java題庫

從 qingwei personal wiki
跳到: 導覽搜尋

基於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,你覺得主要的難點是?