アリBixuan:次のあなたのJavaプログラミングのスキルをテストします

パートは、後者の考えを進んで、多くの学生はすべてを感じるだろう単語の内部を見ている場合にのみ、Javaプログラミングで書かれた、より体系的な準備をコンパイルしたが、私は本当に多くの人が本当に理解してないと思う、それは簡単な考えがあります学生に興味のあるいくつかのトピックはどのように彼らのJavaプログラミングレベルを参照して、本題にすることができます。

小さなプログラムを行うにはあまりにも怠惰なので、私たちはあなたに戻って取得します直接それに答える、私はフレンドリーリマインダー、いくつかの問題はほとんどピットの下で、1件のコメントずつ降りてくるだろう。

  1. どのように多くのスレッドが、100個の接続を確立するとき、サーバーベースのBIOは、実現しましたか?NIOベースの場合、それはどのように多くのスレッドになりますか?なぜ?
  2. 一般的には、サーバー側に基づくNIOは、IOイベントを処理するためのスレッドが使用されますどのように多くの実現、そしてなぜ?
  3. 典型的なクライアントクラスタ - >この構造LB->など発生することがありますが、この設計上の問題を考えて何をすべきか、接続プーリング、長い道のり接続を使用して、クライアントとしてサーバークラスタ、?クライアントは、それに接続された単一の長い道のりを使用している場合は?ご質問がある場合は、解決する方法を考えなければなりませんか?
  4. CGLIBとJavaの動的プロキシ比較は、特に違いは何ですか?
  5. ネッティーに基づいて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);

}复制代码

第2

private void callDecode(...) {

   int oldReaderIndex = cumulation.readerIndex();
   Object frame = decode(context, channel, cumulation);
   if (frame != null)
          fireMessageReceived(context, remoteAddress, frame);

}复制代码
  1. スレッドプールを作成Executors.newCachedThreadPool、リスクを実行する過程で生成することが可能でしょうか?
  2. 新しいThreadPoolExecutor(10,100,10、TimeUnit.MILLISECONDS、新しいLinkedBlockingQueue(10));すでに10個のタスクがあるスレッドプールを作成するには、この時間は、何が起こるかを実行するために、このスレッドプールに提出最初の11個のタスクを実行していますなぜ?
  3. 通常、カスタムの役割ThreadFactoryを実装しますか?
  4. スレッド間の相互作用を達成するためにはObject.waitとObject.notifyAllを使用することに加えて、しかし、何を達成するために使用されるのですか?
  5. なぜConcurrentHashMapのは、HashMapのより高い同時実行の場合は、より効率的になることができますか?
  6. AtomicInteger、高い同時実行効率の一般的な理由で、これらのクラスのAtomicBoolean理由は?
  7. コアにいくつかのコードスニペット、非常に同時生産/消費のシナリオを実現するために合理的なキューを使用してください。
  8. 、10個のタスクが同時に同時スタートを達成できるように、いくつかのコードスニペットをお願いします。
  9. 段階的に実行するJavaプログラムは、あなたは何なので、上のヒープサイズとなどのJavaプログラムのいくつかのスタートアップ現在のパラメータ値を表示するためのコマンドラインツールを使用することができます。
  10. 実行中のGC Javaプログラムの状態を表示するにはどのようなコマンドラインツール、特定のコマンドライン形式を記入してください。
  11. どのようなツールは、実行、リクエストパラメータやその他の情報の方法の時間を実行しているJavaプログラムの場合には、追跡、および実装の下にツールの原理を説明してくださいすることができます。
  12. Javaプログラムは、長い時間のための要求を受信したとき、私は通常、あなたがこの問題を解決するだろうか、その後、応答しませんでしたか?
  13. Javaプロセスが突然、あなたはどのようにこの問題を解決するだろう、消えますか?
  14. 次のコードの考え方、あなたはリスクが生じて実行するかもしれないと思う改善する方法ですか?
List getUsers(String[] userIds){

   // 从数据库查找符合userIds的user记录
  //  将返回的记录组装为User对象,放入List并返回

}复制代码
  1. 以下の2つのコード、実行時間の違いは何ですか?なぜ?

最初の

private static final boolean isLoggerDebugEnabled = log.isDebugEnabled();
public void xx(User user){

 if(isLoggerDebugEnabled){
      log.debug("enter xx method, user id is: " + user.getId());
 }

}复制代码

第2

public void xx(User user){

 log.debug("enter xx method, user id is: " + user.getId());

}复制代码
  1. なぜJavaプログラムは、通常は実行の開始が遅くなりますが、プロセスは、いくつかの要求の後に高速になります、AOTは、任意の助けをもたらすことができますか?
  2. パラレルGC、CMS GC、ZGC、アズールPauseless GCの主な違いはありますか?また、単に下の説明の根拠?
  3. その後、FGCたら、コードだけでなく、起動パラメータを与えてください、その後、3回YGC、その後、3回FGC、YGC 5回をトリガするために、実行時に表示されるように許可されるプログラムを作成してください。
  4. コルーチン行くとJavaスレッドメカニズムの主な違いは?Java言語は、透明なコルーチンを達成する場合は、メインの難しさがあると思いますか?


著者:Bixuan  

説明リンク

この記事ではYunqiコミュニティパートナー「から来ているHelloJava転載について原作者に連絡してください」。


おすすめ

転載: juejin.im/post/5d5518eaf265da03e4675912