実務経験3年のJavaプログラマーが持つべきスキル これはJavaプログラマーの方が気になるところかもしれません。ここで説明したいのは、以下に挙げるすべての人が知っているものではありませんが、それをマスターすればするほど、最終的にはより高い評価と給与が得られるということです。
1.基本構文
これには、static、final、transientなどのキーワードの機能、foreachループの原理などが含まれます。今日のインタビューでは、static キーワードの役割は何かと質問しました。static に変更された変数と変更されたメソッドと答えた場合、static と答えた場合は資格があると思います。内部クラス、私はあなたが良いと思います。あなたがテクノロジーの研究に非常に熱心であることがわかるので、静的ガイドパッケージに対するあなたの答えに非常に満足します。
最も詳細な質問だったのは、Volatile キーワードの根本的な実装原則についてインタビュアーが直接私に質問したことを覚えています (ちなみに、インタビューすることとインタビューされること自体は相対的なものです。インタビュアーはこの質問をすることができ、またインタビュアーに質問させることもできます) (面接官はテクノロジーを学ぶのが好きな人でもあると感じます。それが面接官の会社に対する良い印象を高めます) 、人のレベルをよりよく見ることができます。あなたのテクノロジーに対する他の人の考慮の大部分は、まず深さ、次に幅に基づいていることを覚えておいてください。
2. コレクション
は非常に重要であり、必ず尋ねる必要があります。基本的には、List、Map、Set について、さまざまな実装クラスの基本的な実装原理と、実装クラスの長所と短所について質問します。
コレクションについてマスターする必要があるのは、ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、および HashSet の実装原則です。質問にスラスラ答えることができれば、CopyOnWrite コンテナーと Queue をマスターできると素晴らしいでしょう。さらに、このクラスは多くの質問を生成する可能性があるため、インタビューで ConcurrentHashMap の質問がよく聞かれます。ConcurrentHashMap に関して、私はネチズンに 3 つの答えまたは研究の方向性を提供します:
(1 )ConcurrentHashMap のロック セグメンテーション テクノロジ。
(2) ConcurrentHashMap の読み取りをロックする必要があるかどうか、およびその理由。
(3) ConcurrentHashMap のイテレータは、強い一貫性のあるイテレータか、弱い一貫性のあるイテレータですか。
3. フレームワーク
面接で必ず聞かれる決まり文句。一般的に、プロジェクトで使用されているフレームワークについて質問され、次にそのフレームワークの使用方法を尋ねるいくつかのシナリオが示されます。たとえば、Spring が Bean を初期化するときに何かをしたい場合はどうすればよいでしょうか。 Beanを破棄したい場合や、その方法、MyBatisの$と#の違いなど、しっかりとフレームワークの内容を覚えていれば比較的実践的な内容です。
上記の質問にうまく答えられれば、面接官はフレームワークの実装原則について詳細な質問をすることがよくあります。最もよくある質問は、Spring AOP の実装原理です。もちろん、これは、準備方法がわからなくても、2 つの文で完了できます。私が遭遇した最もひねくれた事は、Spring の Bean ファクトリ実装の UML 図を描くように要求したことです。おそらくデータベースについて尋ねられるでしょう。すべての違い、左結合、いくつかのインデックスとそれらの違いなどの基本的なことについては説明しません。データベースのパフォーマンスの最適化について何も知らない場合は、それよりも重要なことです。時間があれば、面接の前に 1 ~ 2 日かけて SQL と SQL 最適化の基礎を準備することをお勧めします。
しかし、データベースについては心配する必要はありません。多くの場合、データベースに精通しておらず、非常に優れた基本スキルを持っている場合、企業の 90% はあなたを最初に採用するでしょう。データベースの使用に関してはそれほど高い要件はありません。部門にトレーニングを行ってください。
5. Web に関するいくつかの質問
Java は主に Web 側を対象としているため、Web に関するいくつかの質問も行う必要があります。
私がこれまでに遭遇した最もよくある 2 つの質問は次のとおりです:
分散セッションのいくつかの実装方法について話しましょう。
よく使われる 4 つの質問に答えることができれば、当然面接官は非常に満足します。
もう 1 つのよくある質問は、「セッションと Cookie の違いと関係、およびセッションの実装原理について話しましょう」です。これら 2 つの質問に加えて、Web のコンテンツ。さらに、get/post、forward/redirect の違い、HTTPS の実装原理などの詳細についても検討する可能性があります。
6. データ構造とアルゴリズム分析
プログラマーにとって、データ構造とアルゴリズム分析はやらないよりは良いし、仕事で間違いなく役立ちます。配列とリンク リストはより詳細ですが、ツリーはそれほど重要ではありません。ただし、それらの具体的な実装を知る必要はありません。二分探索ツリーとは何か、バランス ツリーとは何か、AVL ツリーと赤黒ツリーの違いを知る必要があります。面接中、面接官がデータベースのインデックスについて話し、「インデックスの実装にどのデータ構造が使用されているか知っていますか?
」と尋ねたのを覚えています。使用したハッシュテーブルについて回答しましたが、間違えてしまいました。彼はもう一度尋ねました、なぜツリーが使われるのか知っていますか? 私は、ハッシュ テーブル内でより多くの競合が発生する可能性があり、数千万、さらには数億に直面した場合に検索の時間が大幅に増加するためであると答えました。データの。ツリーは比較的安定しており、基本的には最大 20 ~ 30 回で必要なデータを見つけることができます。最終的に、私たちはこの問題について意見交換し、なぜ私たちが を使用する必要があるのかを理解しました。ここでは説明しませんが、ネチズンの皆さん、なぜインデックスをツリーを使用して実装する必要があると思いますか?
アルゴリズム分析については、知らない場合や勉強したくない場合は忘れてください。面接官が私に、Collections.sort メソッドがどのような並べ替え方法を使用しているかを尋ねたのを覚えています。私は 3 リットルの血を吐きました。もちろん、私が知識が豊富で、アルゴリズム分析についてある程度の研究を行っていることを示すために (⊙﹏⊙)b、私はまだ弾丸を噛んで、それがバブルソートである可能性があると言います。もちろん、答えは間違いなくそうではありません。興味のあるネットユーザーは、拡張されたマージ ソート メソッドである TimSort と呼ばれるソート メソッドを使用する Collections.sort メソッドのソース コードを参照してください。
7. Java 仮想マシン
驚いたことに、Java 仮想マシンは非常に重要なコンテンツであるはずなので、これらの企業でそれについて質問される可能性はほぼ 0 です。ご存知のとおり、私は昨年、Java 仮想マシンの研究に多くの時間を費やし、Guang Zhou Zhiming 先生の『Java 仮想マシンの詳細な理解: JVM の高度な機能とベスト プラクティス』を 5 回以上読みました。
本題に戻りますが、Java 仮想マシンについては質問されていませんでしたが、まだ勉強する必要があると思います。簡単に概要を説明し、Java 仮想マシンのより重要な内容について話します。
(1) Java 仮想マシンのメモリ レイアウト
(2) GC アルゴリズムといくつかのガベージ コレクター
(3) 親委任モデルであるクラス ロード メカニズム
(4) Java メモリ モデル
(5) 発生前ルール
(6 )不安定なキーワードの使用ルール
面接では役に立たないかもしれませんが、素晴らしい人になるためには必須です。
8. デザインパターン
もともととても重要な内容だと思っていたのですが、アリババB2B部門の面接で一度だけ聞かれたことがあり、デコレータパターンについての質問でした。
もちろん、それほど実用的で面接のために学ぶことはできませんが、デザイン パターンは依然として非常に重要であり、仕事で役立ちます。インタビューは主に 3 つの方向性があります:
(1) プロジェクトでどのデザインパターンが使用されているか、そしてそれらをどのように使用するか。
(2) よく使われるデザインパターンの長所と短所を知る。
(3) 一般的なデザインパターンのUML図を描くことができる。
9. マルチスレッド
これも必須の質問です。 3年の実務経験があるため、マルチスレッドの実装方法については基本的には質問しません。ThreadとRunnableの違いや関係、スレッドを開始するとどうなるかなど、より深い質問をします。複数回、スレッドのステータスを確認します。もちろん、これは最も基本的なことですが、予想外なことに、私はいくつかの面接で、異なる質問方法で、ほぼ同時に同じ質問をされました。
要約すると、これは次のことを意味します:
4 つのスレッド、Thread1、Thread2、ThreaD3、および Thread4 があり、それぞれ 4 つのディスク C、D、E、および F のサイズをカウントしているとします。すべてのスレッドがカウントされて処理されます。概要については Thread5 のスレッドを参照してください。どのように実装すればよいでしょうか?
賢明なネチズンはこの質問に対する答えを持っていますか? それは難しいことではありません。java.util.concurrent の下に使用できる既製のクラスがあります。
さらに、スレッド プールについてもよく聞かれる質問です。一般的に使用されるスレッド プールはいくつありますか? これらのタイプのスレッド プールの実装原理は何ですか?いくつかの具体的なシナリオが提供され、このシナリオで使用するのにどの種類のスレッド プールがより適切であるかを回答できます。
最後に、このインタビューではあまり質問されませんでしたが、マルチスレッドの同期とロックにも焦点が当てられています。同期ロックとリエントラントロックの違い、同期ロックと静的ロックの一般的な方式、デッドロックの原理とトラブルシューティング方法など。
10. JDK ソースコード
高い給料をもらいたいなら、JDK ソースコードを読まなければなりません。上記の内容は、特定のシナリオに関連する場合もあります。詳しく知りたい場合は、JDK ソース コードを参照してください。インタビュー中、私は JDK のソース コードについて多くの質問を受けました。最も厄介な質問は、String の hashCode() メソッドがどのように実装されているかというものでした。幸いなことに、私は普段 String のソース コードをよく読んでいて、大まかに答えました。
JDK のソース コードについては実際に要約する必要はありません。純粋に個人に依存します。より重要なソース コードを要約しましょう:
(1) List、Map、および Set 実装クラスのソース コード
(2) ReentrantLockとAQSのソースコード
( 3) AtomicIntegerの実装原理では、主にCASの仕組みと、CASの仕組みを使ってAtomicIntegerがどのように実装されるかを説明します
(4) スレッドプールの実装原理
(5) のメソッドオブジェクト クラスと各メソッドの役割
これらは実際には非常に要求が厳しく、私は基本的に JDK のソース コードを勉強しましたが、振り返ってみると、その価値はありました。 - 面接に対処するだけではありません。
最後に、興味と時間があれば、サービス指向システムであり、大規模な分散アーキテクチャに不可欠なSOAとRPCを勉強して勉強することをお勧めします。それらはすべての病気を治すことができる救命の処方箋です。そして試され、テストされてきました。