來測試下你的JAVA編程能力


上篇整理了下后面准備更系統化寫的Java編程進階的思路,如果僅看里面的詞,很多同學會覺得都懂,但我真心覺得沒有多少人是真懂的,所以簡單的想了一些題目,感興趣的同學們可以來做做看,看看自己的Java編程水平怎么樣。

 

懶得去做小程序了,所以大家就直接回復你的答案吧,我會來一一點評下,友情提醒下,有些題目有點坑。

 

  1. 基於BIO實現的Server端,當建立了100個連接時,會有多少個線程?如果基於NIO,又會是多少個線程? 為什么?

  2. 通常來說基於NIO實現的Server端,會用多少個線程去處理IO事件,為什么?

  3. 一個典型的客戶端集群->LB->服務端集群這樣的結構中,如客戶端采用連接池,長連接的方式,這種設計你覺得可能會出現什么問題?如果客戶端采用的是單個長連接的方式呢?如果有問題,你覺得應該怎么解決?

  4. cglib和Java的動態代理相比,具體有什么不同?

  5. 在基於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);

    }

  6. 用Executors.newCachedThreadPool創建的線程池,在運行的過程中有可能產生的風險是?

  7. new ThreadPoolExecutor(10,100,10,TimeUnit.MILLISECONDS,new LinkedBlockingQueue(10));一個這樣創建的線程池,當已經有10個任務在運行時,第11個任務提交到此線程池執行的時候會發生什么,為什么?

  8. 實現一個自定義的ThreadFactory的作用通常是?

  9. 除了用Object.wait和Object.notifyAll來實現線程間的交互外,你還會常用哪些來實現?

  10. 為什么ConcurrentHashMap可以在高並發的情況下比HashMap更為高效?

  11. AtomicInteger、AtomicBoolean這些類之所以在高並發時高效,共同的原因是?

  12. 請合理的使用Queue來實現一個高並發的生產/消費的場景,給些核心的代碼片段。

  13. 請實現讓10個任務同時並發啟動,給些代碼片段。

  14. 在Java程序運行階段,可以用什么命令行工具來查看當前Java程序的一些啟動參數值,例如Heap Size等。

  15. 用什么命令行工具可以查看運行的Java程序的GC狀況,請具體寫出命令行格式。

  16. 用什么工具,可以在Java程序運行的情況下跟蹤某個方法的執行時間,請求參數信息等,並請解釋下工具實現的原理。

  17. 當一個Java程序接收請求,很長時間都沒響應的話,通常你會怎么去排查這種問題?

  18. Java進程突然消失了,你會怎么去排查這種問題?

  19. 以下這段代碼思路,你覺得在運行時可能會產生的風險是,應該如何改進?

    public List<User> getUsers(String[] userIds){

           // 從數據庫查找符合userIds的user記錄

          //  將返回的記錄組裝為User對象,放入List並返回

     

    }

  20. 以下兩種代碼,在運行時有什么不同?為什么?

    第一種

    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());

    }

  21. Java程序為什么通常在剛啟動的時候會執行的比較慢,而處理了一些請求后會變快,AOT能帶來什么幫助?

  22. Parallel GC、CMS GC、ZGC、Azul Pauseless GC最主要的不同是?背后的原理也請簡單描述下?

  23. 請寫一段程序,讓其運行時的表現為觸發5次ygc,然后3次fgc,然后3次ygc,然后1次fgc,請給出代碼以及啟動參數。

  24. Go的Coroutine和Java的線程機制最主要的不同是?如果Java語言要透明的實現Coroutine,你覺得主要的難點是?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM