最近、会社で Android プログラマーを募集しています。2015 年にチームリーダーとして働いて以来、私は普段遭遇する Android の技術的な問題や、周りの友人が見た面接の質問を習慣的に収集してきました。継続的なスクリーニングを経て、最終的に実践的な小さな質問バンクのセットに凝縮しました。(質問バンクのすべての質問については、以下を参照してください。自分のレベルをテストしてみましょう。)
会社の人材採用のためである一方で、Android 技術スタックの技術的な盲点を掘り起こし、修正し改善することで技術レベルを向上させるために使用したいと考えています。
2009年からプログラミングに携わるようになり、今でも学ぶことがたくさんあると感じていますが、その学習過程で得られる達成感も大きく、より専門的な知識を習得する原動力となっています。
私がまとめた200問以上の質問はほぼすべて「必須の質問」なので、理解できれば面接に行けば間違いありません。最初は、これを行うと他の人の「不正行為」を手助けするのではないかと疑問に思いましたが、最終的には、これは行う価値のあることだと理解しました。
-
第一に、より多くの人がより多くの知識を学ぶことは素晴らしいことです。
-
2 つ目: これは、テクノロジーを習得しても自分を表現する方法がわからない人が、面接で自分を表現する方法を学ぶことができるように、経験を高度に洗練したものです。
-
第三に、これらの面接の質問を丸暗記するだけであれば、面接官がより踏み込んだ質問をしてくれさえすれば、その人のことを正確に理解することができ、前述の「人の浮気を助ける」という行為は存在しなくなります。
-
4 番目: 学ぶ方法はたくさんありますが、プールから学ぶのは優秀な学者だけです。学びたくない人であれば、どれだけ最高の情報を目の前に提供されても、見て見ぬふりをしてしまうでしょう。
Android の質問を例に挙げると、ほとんどの答えを覚えている場合、まず、あなたは頭が良く、記憶力が良いと言えます。
ですから、もしあなたが面接官で、このような光景を再び目にしたのであれば、状況が許せば、学ぶ意欲のあるそのような賢い若者たちにもっとチャンスを与えてください。
ここまで述べたところで、いきなり本題に入りますが、インタビューの質問には 13 のモジュールが含まれています:データ構造とアルゴリズム、Java の基礎、詳細なジェネリックスとアノテーション、同時プログラミング、仮想マシンの原則、リフレクション クラス、ネットワーク プログラミング、Kotlin、高度な UI、フレームワーク カーネルのソース コード、コンポーネント カーネル、パフォーマンスの最適化、オープン ソース フレームワーク。以下に示すように:
おそらく初心者にとっては、フレームワークやその背後にあるフレームワーク モジュールの知識を見る必要はなく、読者や友人が自分の状況に応じて、対応するモジュールを選択して読むことができます。
読書に最適
-
面接が必要な初心者/中級/上級 Android プログラマー
-
隙間を埋めたい方
-
Android テクノロジー スタックを継続的に改善および拡張したい人
-
アンドロイドのインタビュアー
Weixin は QR コードを直接スキャンして取得します
面接での具体的な質問
第 1 章 アルゴリズムとデータ構造 インタビューの質問
- HashMap と SparseArrary の原理、HashMap と比較した SparseArrary の利点、ConcurrentHashMap がスレッド セーフをどのように実現するかについて話してください。
- HashMapの原理、アクセスプロセス、赤黒ツリーが使用される理由、赤黒ツリーと完全なバイナリツリーの比較、HashTab、concurrentHashMap、concurrentパッケージの内容について話してください。
- ハッシュマップ put() の基本的な原理について教えてください。競合が発生した場合、それを追加する方法 (リンクされたリストに沿ってトラバースし、キーの値を 1 つずつ比較して整合性があるかどうかを確認します。整合性がある場合は上書きして置き換えます。矛盾したトラバース後に位置を挿入します)。
- キーワードの追加を除いて、ArrayList がスレッドの安全性をどのように確保するかを教えてください。
- ArrayList、HashMap、LinkedHashMap について話してください。
- HashMapの実装原理や拡張条件、リンクリストを赤黒ツリーに変換する条件について教えてください。
- …
第 2 章 Java コアの基本的な面接の質問
- Java には抽象クラスとインターフェイスが用意されていますが、開発中にどのように選択すればよいでしょうか?
- オーバーロードとオーバーライドとは何を意味し、その違いは何ですか?
- 静的内部クラスとは何ですか? 非静的内部クラスと非静的内部クラスの違いは何ですか?
- Java でパラメータを渡すとき、値によって渡されますか、それとも参照によって渡されますか?
- 比較に等号と == を使用する場合の違い
- String s = new String("xxx"); String オブジェクトはいくつ作成されますか?
- …
第 3 章 Java の詳細なジェネリックスとアノテーションに関するインタビューの質問
- ジェネリックとは何ですか? ジェネリックの消去についてはどうですか?
- List<String> を List<Object> に変換できますか?
- Java ジェネリックの super と extends の違いは何ですか?
- 注釈とは何ですか? どのような使用シナリオがありますか?
- …
第 4 章 Java 同時プログラミングに関する面接の質問
- CPU、シングルコアが 1 つしかない場合でも、マルチスレッドは役に立ちますか?
- 同期して変更された通常のメソッドと静的メソッドの違いは何ですか? 可視性とは何ですか?
- JDK1.6 以降に Synchronized が行った最適化
- CASロックフリープログラミングの原理
- AQSの原理
- ReentrantLockの実装原理
- …
…
…
…
第 10 章 フレームワーク カーネル分析 面接での質問
- Android でのマルチプロセス通信にはどのような方法がありますか?
- バインダー機構の原理を説明してください。
- Android が IPC メカニズムとして Binder を採用するのはなぜですか?
- バインダースレッドプールの動作プロセスは何ですか?
- AIDLの正式名称は何ですか? どのように動作します?どのような種類のデータを処理できますか?
- AndroidにおけるPidとUidの違いと関係
- …
第 11 章 Android コンポーネント カーネルの面接の質問
- Activity のライフサイクル、Activity を破棄するにはどうすればよいですか?
- Activity の 4 つの主要な起動モードと、onNewIntent() の呼び出しなど、開発時に注意が必要な問題
- インテント表示ジャンプと暗黙ジャンプ、使い方は?
- アクティビティ A は B にジャンプし、B は C にジャンプします。A は C に直接ジャンプできません。A はどのようにして C にメッセージを送信しますか?
- アクティビティはどのように状態を保存しますか?
- アイコンのクリックから始まるアクティビティの起動処理を記述してください。
- …
第 12 章 プログラムのパフォーマンスの最適化とデータの永続性に関する面接の質問
- メモリ内の画像のサイズは 100x100 ですか?
- メモリの最適化、メモリのスラッシング、メモリ リーク。
- メモリリークはいつ起こるのでしょうか? いくつか例を挙げてください
- ビットマップ圧縮、100% と 90% の品質の違いは?
- TraceView を使用して CPU 使用率を確認する
- メモリリークの発見
- …
第 13 章 オープンソース フレームワークの面接での質問
- プロジェクトにおけるコンポーネント化の意義
- ARouter のコンポーネント化の原理
- APT テクノロジーについての理解について話す
- Glide フレームワークのキャッシュ メカニズムの設計について話す
- Glide のライフサイクルについての理解について話す
- プロジェクトで Glide フレームワークを使用するときにメモリ オーバーフローが発生する原因は何ですか?
- …