すべての良い.Net開発者が答えられるべき質問 を通過し、この質問の内容とアプローチに非常に感銘を受けたので、同じ精神で、この質問をJava/Java EE開発者。
どんな質問良いJava/Java EEプログラマーが答えられると思いますか?
この質問はユーザー固有ではなく、プログラミングコミュニティ全体に役立つことを目的としているため、コミュニティWikiとしてマークしています。
素晴らしい反応を楽しみにしています。
EDIT:コメントで示唆されているように、質問にも答えてください。そうすれば、人々は言語に関して何か新しいことを学ぶことができます。
HashCode()とequals()の関係は何ですか?これらの方法の重要性は何ですか?それらを実装するための要件は何ですか?
セット、マップ、リストの違いは何ですか?
電話インタビューで、これを知らない人がどれだけいるのか、まだ驚いています。
インターフェースは複数のインターフェースを拡張できますか?
Javaには多重継承がないことを知っているため、ほとんどの人は「いいえ」と答えます。ただし、インターフェイスは引き続き複数のインターフェイスを拡張できます(ただし、クラスは複数のクラスを拡張できません)。これはダイヤモンドの問題にはつながりません。
答えが「いいえ」の場合、インタビュアーは「なぜwould禁止されているのか?」と尋ねるべきです。それからあなたはそれについて考え始め、あなたはそれに問題がないことを認識する必要があります。
そのため、インタビューで(自分で)何かを学び、クラス、オブジェクト、継承、ポリモーフィズムなどについて推論できることをインタビュアーに示しました。理由を理解する
の使用法 最後の メソッド呼び出しのキーワード。たとえば、なぜメソッドは テスト 以下のコードでは、使用してもコンパイルエラーは発生しません 最後の メソッドパラメータの修飾子。
class Name {
private String name;
public Name (String s) {
this.name = s;
}
public void setName(String s) {
this.name = s;
}
}
private void test (final Name n) {
n.setName("test");
}
</ code>
確かなのは、文字列の比較です。との差
文字列helloWorld = "Hello World";
helloWorld == "Hello World";
"Hello World" .equals(helloWorld);
あなたは「良い」、「開発者」と言った。こちらも私の2セントです。
J2EEの場合:
私は多くの、多くの、より多くの「em」を考えることができますが、これは今のところそうするでしょう:)
トリックの質問:Javaではどのような種類のパラメーターが参照渡しされますか?
「プリミティブは値で渡され、オブジェクトは参照で渡される」というマントラをまだ多くの人がオウムしているのは驚くべきことです。
String、StringBuffer、StringBuilderの違いは何ですか?
「デプロイメント記述子とは?」
候補者が思わず身震いする場合は、3.0より前のEJBでの作業経験があります。
多くの質問とインタビューは http://www.techinterviews.com/interview-questions/Java で利用できます。それらの選択をコピー/貼り付けても実際には価値がありません。
いいえ、自分のものを編集するのはあなた次第ですyouは重要だと思います。個人的に、私は常に2つのステップに進みます。まず、経験とスキルの基本的なアイデアを得るためのいくつかの質問、次に問題解決の状況です。確かに、既知の質問に答えることができると、あなたは良い(または悪い)未知の問題解決者になると確信していません。だから、私は人々に与えられた問題を解決し、彼らにいくつかの要件を与え、コードを書くように頼むことを好む(しかし紙の上ではない)。彼らに戻って、彼らがそれをどのようにしたか、彼らのコーディングスタイル、彼らが提案されたAPIをどのように使用したかなどをチェックする時間を与えます。
以上のことを言っても、私の好きな質問は「Javaが好きではないですか」です。 ( this one )の精神で。これは本当に素晴らしい質問です。候補者がJavaをどれだけ使用してAPIを調査したか、そして彼が(OPが書いたように)それについてただ宗教的であるかどうかを即座にフィードバックします。
Update:CPerkinsが提案したように、上記の質問に対するより良い言い回しは、「Javaで何が変わりたいと思いますか?」です。そして確かに、私はこの方法を好みます。
System.out.printlnの「System」、「out」、「println」とは何ですか? HashMapで「put」を呼び出すとどうなりますか?
Java "experience"で卒業生を採用している場合、NullPointerExceptionがスローされるコードを書くのような単純な質問で、Javaを使用した候補を区別できます。 _最近、彼らがユニット/コースを終了したときに停止しませんでした。
何が印刷されますか?
public void testFinally(){
System.out.println(setOne().toString());
}
protected StringBuilder setOne(){
StringBuilder builder=new StringBuilder();
try{
builder.append("Cool");
return builder.append("Return");
}finally{
builder.append("+1");
}
}
回答:CoolReturn + 1
もう少し難しい:
public void testFinally(){
System.out.println(setOne().toString());
}
protected StringBuilder setOne(){
StringBuilder builder=new StringBuilder();
try{
builder.append("Cool");
return builder.append("Return");
}finally{
builder=null; /* ;) */
}
}
回答:CoolReturn
次のような簡単な質問、
これらは非常に基本的なものですが、多くの開発者は答えを知りません。コード関連のクエリの前にこれらを尋ねることをお勧めします。
抽象クラスとインターフェースの違いは何ですか?それぞれをいつ使用しますか?
多くのJava開発者はこれを知らないので、大学のコンピューターサイエンスコースのほとんどの人に尋ねたところ、ほとんどの人が答えられませんでした。
私が直面したJ2EE/JEEミドルウェアの質問のリストは非常に長いですが、ここに私が尋ねられた上位5つがあり、良い議論につながっています。
javax.naming.Context
質問まで、さまざまな方法で提起されます。私が厄介な問題を見つけたが、何度も直面している別のトリッキーな質問は、依存ライブラリがアーカイブにどのようにパッケージ化されていますか?
またはバンドルされたアーカイブ内のさまざまなクラスの可視性
議論が、異なるアプリケーションサーバー、リソースアーカイブなどのクラスローダー階層につながらない場合は、辞任して先に進むことが最善です。
Set
、List
、Map
、およびObject.equals()
およびObject.hashCode()
の重要性を必ず確認してください。Javaの何が一番好きですか、何が一番好きですか?
WebサーバーとWebコンテナーの違い
なぜtoString()メソッドをオーバーライドしますか?
より純粋なJava質問:
Sleepとwaitはどう違いますか?待機がどのように機能するかを実際に理解している人は多くありません。
InterruptedExceptionsをどのように処理する必要がありますか?
これは私のインタビューで直面した質問です。
なぜJavaのmainメソッドがpublic static void main(String [] args)として呼び出されるのですか?
回答:
1 .main()はpublicとして宣言する必要がありますこれは、プログラムの実行が開始されるたびにJVMによって呼び出されるためです。JVMはプログラムパッケージに属していません。
パッケージ外のメインにアクセスするには、パブリックとして宣言する必要があります。パブリック以外として宣言すると、Runtime Errorではなくコンパイル時間エラー
2 .main()はstaticとして宣言する必要がありますメソッドがstaticとして宣言されている場合、ClassName.methodName();を使用してクラス外でそのメソッドを呼び出すことができるため
class Sample
{
static void fun()
{
System.out.println("Hello");
}
}
class Test
{
public static void main(String[] args)
{
Sample.fun();
}
}
JVMは最初にTestクラスをロードし、コマンドライン引数をチェックして、メインメソッドをTest.main()として呼び出します。
3 .main()はvoid main()として宣言する必要があります。これは、JVMがmain()からの値を予期していないためです。したがって、voidとして宣言する必要があります。
他の戻り値の型が提供されている場合、それはRunTimeError i.e; NoSuchMethodFoundErrorです。
4 .main()は文字列引数を配列として持つ必要があります JVMはコマンドライン引数を渡すことでmainメソッドを呼び出すため、文字列配列オブジェクトに格納されているため、main()への引数として渡されます。
J2SEとJ2EE(またはJSEとJEE)の違いは何ですか?
開発者は、エンタープライズエディションが基本的にベンダーが実装できるインターフェイス定義(つまり仕様)であることを指摘できるはずです。一方、標準版はそれ自体が実装です
volatile
はコンパイラによるコード最適化にどのように影響しますか?
2つの整数を受け入れ、最大の2つの数値を選択した場所のファイルに出力するプログラムを作成します。次に、各ステートメントの機能を説明します。
Importステートメントの重要性から異常終了まで、かなり深く掘り下げることができます。
セッションBeanとは何か、ステートレスセッションBeanとステートフルセッションBeanの違いについて説明します。
コア:1.チェック済みおよび未チェックの例外とは何ですか? 2.コードに新しい例外を追加するときに、どのタイプ(チェック済み/チェックなし)を使用するか?
サーブレット:1. response.sendRedirect()とrequest.forward()の違いは何ですか?
多くのJavaプログラマーが知らないことの1つは、ストリングが不変であるため、StringBuilderまたはStringBufferを使用することです。
String s = "";
for(int i = 0; i < 100; i++) {
s += "Strings " + "are " + "immutable, " + " so use StringBuilder/StringBuffer to reduce memory footprint";
}
threads
はどのように機能しますか? synchronized
とは何ですか?クラスに2つのsynchronized
メソッドがある場合、2つのスレッドで同時に実行できます。多くの人がyesと答えると聞いて驚くでしょう。次に、すべてのスレッド関連の質問、例えばデッドロック、飢vなど.
セッションBeanまたはメッセージ駆動型Beanはいつ使用しますか?
セッションBeanではトランザクションはどのように処理されますか?
ローカルセッションBeanとリモートセッションBeanの違いは何ですか?この質問は、ローカルまたはリモートの両方として公開されているメソッドの動作が異なる可能性があるため、RPCが見えないかどうかを知ることに関するものです(ローカルではパラメーターに対する副作用が可能ですが、リモートでは不可能です)。
良いテストは、同じ順序で質問をしないでください。オフショアリングの経験がありましたが、実際には間違った順序で実際に応答を返していました:-)。その結果、質問している人を実際に見ることができることを確認する必要があります。
Q. HttpServletではなくGenericServletを使用する実際のシナリオ例を挙げてください。
内部クラスの「4」(3つではなく)タイプの違いを説明してください。
スレッドセーフクラスと明示的に同期されたコードの長所と短所、および両方の優れたアプリケーションの例。多くの場合、マルチスレッドアプリケーションでのデータの一貫性を保証するスレッドセーフクラスを信頼することは正しくありません。