以下はすべて比較的高度な質問であり、インタビュアーを引き離す可能性があるため、インタビュー中に通常はめったに尋ねられません。しかし、自分で練習する時間を見つけることができます。
1。System.Exit(0)は、最終的にブロックの実行をスキップします
System.SetseCurityManager(new SecurityManager(){@Override public void checkexit(int status){throw new StreadDeath();}}); try {System.Exit(0); }最後に{system.out.println( "最終的なブロックで"); }最終的なブロックにこのコードが出力されるのはなぜですか?スタックトレース情報が印刷されていないのはなぜですか?
2。stringstr = "hello";ここで、strは文字列オブジェクトです
C ++とは異なり、Javaの変数は基本的なタイプまたは参照です。変数はオブジェクトにすることはできません。これは、次のような表現を意味します。
文字列str = "hello";文字列text = "bye"; str ==テキスト; // content str = textの代わりに2つの参照を比較します。 //テキストの参照をstrに割り当てます
ほとんどの場合、実際には大きな違いはありませんが、このように書くことは簡単に混乱を引き起こす可能性があります。
final stringbuilder sb = new StringBuilder(); sb.append( "hello"); //この参照は、このインスタンスではなく、最終タイプのものです。メソッド(SB); //このインスタンスはメソッドを介して変更できますが、この変数は変更できません
3.JavaメモリリークはC ++プログラマーが理解しているのと同じです
ウィキペディアのメモリリークの定義は、「コンピューターサイエンスにおいて、プログラムがメモリの割り当てを正しく管理しない場合、メモリリークが発生します。オブジェクト指向プログラミングでは、コード内のオブジェクトにアクセスできない場合、これはメモリリークです。」ただし、Javaでは、オブジェクトは常に到達可能であり、強い参照のないオブジェクトがクリアされます。メモリリークという用語はJavaで意味します。メモリに存在するものではないオブジェクトがあり、通常は使用されなくなったリソースはまだコレクションに保存されています。
4.マルチスレッドプログラミングは困難です
経験がない場合、マルチスレッドプログラミングは実際に困難です。大量のコードをたくさんのスレッドに投げて実行するだけで、問題はまったく解決できません。それは混乱になります。ただし、オンデマンドでスレッド割り当てを実行し、スレッド間の相互作用を制御し、チームの一部のメンバーも理解できる単純なパターンを使用できる場合、問題ははるかに簡単になります。もちろん、チームの全員にあなたのルールに従うようにする必要がある別の課題があります
5。異なる操作間の異なるパフォーマンスを気にしないでください
私は最近、問題があると聞きました。これには、整数、メモリアクセス、モジュラス、およびコンソールへの出力の追加が含まれます。これらの各操作は前の操作よりも1桁遅いですが、この男は最速の操作、追加を最適化し、より高価な操作に置き換えたいだけです。パフォーマンスを最適化したい場合は、これらの高価な操作を安価な操作に置き換える方が良いでしょう。たとえば、ボトルネックがハードウェアに含まれている場合、ハードディスクから多数のファイルを読み取る必要があります。問題はまったくないため、ソフトウェアのコードを変更する必要がありません。
6。乱数はランダムです
乱数の特定のセットは、いくつかのパターンの数に似ています。この記事では、この問題についてすでに話しました。多くの人々は、乱数ジェネレーターによって生成された数値が実際にはランダムではないと考えていません。
7。ランダムエラーが発生するため、浮動ポイントを避ける必要があります
同じ操作の場合、フローティングポイント数は毎回同じエラーを生成します。エラーは予測可能であるため、制御可能です。あなたが何をしようとしているのかを知っていて、結果の丸めなど、いくつかの簡単なルールに固執する場合、浮動小数点数はBigDecimalよりも多くの間違いを犯しません。さらに、読みやすく、100倍以上高速になります(同時に生成されるごみのオブジェクトが少ない)。
8。タイムゾーンは永遠です
この誤解の理由は、時間が変わるとタイムゾーンが変化しているためです。これは、ヨーロッパ/ロンドンが00:00ではなく1970/1/1 01:00だったことを意味します。なぜ?ロンドンは1968年から1971年までの2年間で夏時間を使用していたからです。
過去数年間で、多くのタイムゾーンも変更されました。モスクワは以前は東の第3地区(GMT+3)でしたが、現在は東の第4地区(GMT+4)です(2011年3月27日から)。 2010年の時点で見ると、イースト3とイースト4であることがわかります。
驚いたように聞こえるかもしれないことがいくつかあります:
1721年のスウェーデンの2月には30日間があります。
1751年のイギリスでの最初の日は3月25日で、フランスから11日後でした。
米国がグレゴリオカレンダーを採用した後、数百年前にさかのぼるため、当初記録された日付は2つのカレンダーで表現できます(通常、2つの日付が同時により精度のために提供されます)。たとえば、ジョージワシントンの誕生日は1731年2月11日から1732年2月22日まで変更されました。
9.スレッドで不揮発性変数を読むと、最終的に更新された値を読むことができます。
この問題は、数日前にStackoverFlowで2回登場しました。一般的に、JITコンパイラがコードを最適化すると、このスレッドに変更されていない不揮発性タイプのフィールドがインラインになります。このコードがコンパイルされたら(-XX:+PrintCompilateで表示できます)、このフィールドを別のスレッドで変更しても表示されない可能性があります。ランダムな同期ブロックまたは印刷ステートメントを追加すると、この最適化の実行を遅らせるか、JITコンパイラを破壊して、この最適化を実行しないようにします。
10.Javaインタビューの質問は正しいです
時代遅れ(10年以上更新されず、現在のJavaバージョンとは接触していない)またはそれらが誤解を招くか、間違っている可能性のある多くのJavaインタビューの質問があります。残念ながら、これらの答えはどれもチェックせずに渡されませんでした。
ここのピアレビューは答えをレビューするより良い仕事をしているので、上記のStackoverflowの回答を参照してください。一般的に、ローズインドのようなウェブサイトにアクセスしないでください。上記の回答はばかげた品質です。その一番下に到達したい場合は、上記の記事には、スペルエラー(クラス名と専門用語)または間違った発言の数を確認できます。これらの問題の理由の1つは、これらのエラーを修正する効果的なフィードバックメカニズムがないことです。
Javaインタビューの質問をお勧めします。
50の最も貴重なJavaインタビューの質問は、Javaプログラマーへの入場に適しています
10クラシックJavaメインメソッドインタビューの質問
Java(Super Classic)で最も一般的なインタビューの質問について話し合う
Javaプログラマーに関する10 XMLインタビューの質問がリリースされました
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。