面接:完全な面接の準備をしなければ、時間の無駄になり、自分自身に無責任になります!
優秀になりたいのなら、優秀な人々が何を学んでいるのか、何をしているのかを見て、彼らとコミュニケーションをとるために可能な限りのことをしてください。外に出て世界をもっと見てから、死ぬまで学ぶように強制してください。
今はゴールデン9位とシルバー10位の面接のピークシーズンです。多くの卒業した失業者のプログラマーが就職の面接の激しい段階に入っています。ここでは、長年のAndroidとの面接の経験を共有します。
このガイドは、開発中の7〜8年間のインタビューと他の人へのインタビューの私の経験の要約です。大企業の面接でよく聞かれる質問が多いので、チェックして空席を埋めることができます。もちろん、ここのリストではすべての方法を網羅しているわけではありませんので、皆様のお役に立てれば幸いです。 !!
記事の最後に、私がまとめたAndroidインタビューのトピックと回答を紹介します。インタビューの質問をいくつか示します。
注:実際の開発と参照の回答が異なるため、回答は下部にあります。また、すべての人の理解を誤解させることを恐れているため、これらの面接の質問に対する回答は自分で理解する必要があります。面接官は履歴書に記載されている知識のポイントについて、浅いものから深いものへと質問しますので、答えを覚えて理解しないでください。
アクティビティの基本
- アクティビティのライフサイクルについて話しますか?
- アクティビティAが別のアクティビティBを開始すると、どのメソッドが呼び出されますか?Bが透過的なテーマであるか、それともDialogActivityであるか。
- onSaveInstanceState()メソッドの役割について話しますか?いつ呼び出されますか?
- アクティビティの4つの起動モードとアプリケーションシナリオは何ですか?
- アクティビティで一般的に使用されるフラグを知っていますか?
- アクティビティとウィンドウ、ビューの関係について教えてください。
- 水平画面と垂直画面を切り替えると、アクティビティのライフサイクルが変わりますか?
- 他のアプリケーションのアクティビティを開始するにはどうすればよいですか?
- アクティビティ開始プロセス?(強調)
フラグメント基本関連
- フラグメントのライフサイクルについて話しますか?アクティビティのライフサイクルとは異なりますか?
- アクティビティとフラグメントの違いについて話しますか?
- フラグメントの追加と置換の違い(フラグメントのオーバーラップ)
- getFragmentManager、getSupportFragmentManager、およびgetChildFragmentManagerの違いは何ですか?
- FragmentPagerAdapterとFragmentStatePagerAdapterの違いと使用シナリオ
サービスの基本
- サービスのライフサイクルについて話しますか?
- サービスを開始する2つの方法は?違いは何ですか?
- サービスが強制終了されないようにするにはどうすればよいですか?
- サービスで時間のかかる操作を開始できますか?どうやるか?
- どのシステムサービスを使用しましたか?
- ActivityManagerServiceを知っていますか?それはどのような役割を果たしますか(強調)
放送受信機の基本
- 放送の形態はいくつですか?その特徴は何ですか?
- 放送に登録する2つの方法は?
- 放送の送受信の原理を理解していますか?(バインダーメカニズム、AMS)
ContentProvider基本関連
- ContentProviderはどのくらい知っていますか?
- ContentProvider権限管理?
- ContentProvider、ContentResolver、ContentObserverの関係について話しますか?
データストレージ関連
- Androidデータの永続ストレージ方法について説明してください。
- SharedPreferencesのアプリケーションシナリオ?予防?
- SharedPrefrencesのapplyとcommitの違いは何ですか?
- SQLiteのトランザクション操作を理解していますか?それはどのように行われますか
- バッチ操作にSQLiteを使用する良い方法はありますか?
- SQLiteでテーブルの個々のフィールドを削除するにはどうすればよいですか?
- SQLiteを使用する場合の最適化操作とは何ですか?
IPC(強調)
- Androidのプロセスとスレッドの関係は?違い?
- マルチプロセスを開始するにはどうすればよいですか?アプリケーションはN個のプロセスを開始できますか?
- なぜIPCが必要なのですか?マルチプロセス通信で起こりうる問題?
- IPCとAndroidのさまざまな方法の長所と短所、なぜバインダーを選択するのですか?
- バインダーメカニズムの役割と原理は?
- バインダーフレームワークにおけるServiceManagerの役割は?
- バンドル転送オブジェクトをシリアル化する必要があるのはなぜですか?SerialzableとParcelableの違いは何ですか?
- AIDLについて話しますか?原則は何ですか?複数のモジュールでAIDLの使用を最適化する方法は?
関連するビュー
- ビューの描画プロセスについて教えてください。
- MotionEventとは何ですか?イベントはいくつ含まれていますか?どのような条件下で発生しますか?
- ビューイベントの配信と配信のメカニズムについて説明してください。
- ビューのイベントの競合を解決するにはどうすればよいですか?開発で遭遇した例を挙げてください。
- scrollTo()とscollBy()の違いは何ですか?
- ScrollerはどのようにしてViewの弾性スライドを実現しますか?
- invalidate()とpostInvalidate()の違いは何ですか?
- SurfaceViewとViewの違いは?
- カスタムビューはモデルの適応をどのように考慮しますか?
ハンドラー関連
- メッセージメカニズムハンドラーについて話しますか?何ですか?要素は何ですか?プロセスはどのようなものですか?
- スレッドは複数のハンドラー、およびハンドラーとルーパー間の対応を作成できますか?
- ソフト参照と弱参照の違い
- ハンドラーによるメモリリークの原因と最善の解決策
- システムが子スレッドのUIへのアクセスを推奨しない理由
- Looperの無限ループによってアプリケーションがフリーズしない理由
- HandlerのpostDealyを使用した後、メッセージキューはどうなりますか?
- ハンドラーは子スレッドで直接作成できますか?どうやるか?
- メッセージはどのように作成できますか?どちらが良いですか?どうして?
スレッド(強調)関連
- スレッドプールの利点は?スレッドプールのいくつかのパラメーター、4つのスレッドプールの使用シナリオの理解
- Androidでスレッドの切り替えを容易にするクラスは何ですか?
- AsyncTaskの原理について話します
- IntentServiceの用途は何ですか?
- アクティビティで直接スレッドを作成することと、サービスでスレッドを作成することの違い
- ThreadPoolExecutorの作業戦略?
- Handler、Thread、HandlerThreadの違いは何ですか?
- ThreadLocalの原理
- マルチスレッドは効率的ですか(長所と短所)
- マルチスレッドでは、シングルトンを実行させます。どうしますか
- 通知に加えて、スレッドをウェイクアップする方法はありますか
- ANRとは何ですか?どのような状況でANRが発生しますか?それを回避する方法は?コードを見ずにANRの問題をすばやく見つける方法は?
ビットマップ関連
- ビットマップを使用する際に注意すべき問題は何ですか?
- Bitmap.recycle()はすぐにリサイクルされますか?いつリサイクルされますか?このビットマップを使用する場所がない場合、ガベージコレクションが直接リサイクルされないのはなぜですか?
- ビットマップが占有するメモリとメモリ占有の計算
- Androidのキャッシュ更新戦略?
- LRUの原理は?
パフォーマンスの最適化(フォーカス)
- 画像の3レベルのキャッシュで、画像がメモリにロードされます。メモリがバーストしようとすると、どうなりますか?どのように対処しますか?
- 500 * 500 pngの高解像度画像がメモリにロードされている場合、どのくらいのメモリを占有する必要がありますか?
- WebViewのパフォーマンスの最適化
- ビットマップは30Mの大きな画像などの大きな画像をどのように処理し、OOMを防ぐ方法
- メモリ回復メカニズムとGCアルゴリズム(さまざまなアルゴリズムとアプリケーションシナリオの長所と短所); GCの原理とタイミングおよびGCオブジェクト
- メモリリークとメモリオーバーフローの違いは?ASがメモリリークを検出するために必要なツール
- パフォーマンスの最適化、アプリケーションの起動がフリーズしないようにする方法?白黒画面に対処する方法?
- 強い参照がnullに設定されている場合、それはリサイクルされますか?
- ListViewとRecyclerViewの違い
- ListViewのアダプターとは何ですか?
- LinearLayout、FrameLayout、RelativeLayoutのパフォーマンス比較、なぜですか?
JNI関連
- JNIを知っていますか
- NDKライブラリをロードする方法は?JNIにネイティブ関数を登録する方法、登録する方法はいくつありますか?
- JNIでどのような機能を実装しましたか?どうやってそうなった?(暗号化処理、視聴覚的側面、グラフィックスおよび画像処理)
デザインパターン関連
- どのようなデザインパターンを知っていますか?
- MVC、MVP、MVVMについて言えば、良い点と悪い点は何ですか?
- p層をカプセル化した後。p層のデータが大きすぎる場合、それを解決する方法
- 使用されているデザインパターンを説明するために、Androidの例をいくつか挙げてください。
- デコレーションモードとエージェンシーモードの違いは何ですか?
- シングルトンモードを実装する方法はいくつありますか?怠惰なスタイルのダブルロックの目的は何ですか?2つの空の仲裁の目的は何ですか?
- 使用されているいくつかのオープンソースフレームワークは、ソースコードを見た内部実装プロセスを導入しています。
- アダプタで使用する場合、フラグメントはどのように分離する必要がありますか?
Androidの高度な拡張ポイント
- 単体テストを実行する方法とアプリの安定性を確保する方法
- Androidでオブジェクトのリサイクルを確認する方法
- APKのサイズを圧縮する方法は?
- Gradleを介してマルチチャネルパッケージを構成するにはどうすればよいですか?
- プラグイン原理の分析
- 形成の原理
- クロスコンポーネント通信
- コンポーネント化におけるルーティングと埋め込みポイントの実装
- フックと計装技術
- Androidの署名メカニズム
- v3署名キーとv2およびv1の違いは何ですか
- Android5.0〜10.0の大きな違いは何ですか?
- Measurepecクラスについて話す
- Androidの一般的なレイアウトタイプの例を挙げ、その使用法と植字効率について簡単に説明してください
- アニメーションとアニメーターの使用法を区別し、原則を概説します
- どの画像読み込みライブラリを使用しましたか?Glideのソースコードデザインはどれほど微妙ですか?
- 9.0の制限を回避する方法は?
- どのネットワーク負荷ライブラリを使用しましたか?OkHttpとRetrofitの実現原理?
- アプリケーションの更新はどのように行われますか?(グレースケール、必須の更新、サブリージョンの更新)
- KotlinとFultterを使用しますか?あなたの理解について話してください
回答
1.アクティビティのライフサイクルについて話しますか?
-
参照回答:通常の状況では、アクティビティの一般的なライフサイクルは次のように7つだけです。
-
onCreate():アクティビティが作成されていることを示し、setContentViewを呼び出してインターフェイスレイアウトリソースをロードしたり、アクティビティに必要なデータを初期化したりするなど、作業の初期化によく使用されます。
-
onRestart():アクティビティが再開されていることを示します。通常、現在のAcitivtyが非表示から再び表示に変わると、OnRestartが呼び出されます。
-
onStart():アクティビティが開始されていることを示します。この時点では、アクティビティは表示されていますが、フォアグラウンドには表示されていません。まだバックグラウンドにあり、ユーザーと対話できません。
-
onResume():アクティビティがフォーカスを取得することを示します。この時点で、アクティビティはフォアグラウンドで表示され、アクティビティを開始します。これはonStartとの違いです。
-
onPause():アクティビティが停止していることを示します。この時点で、データの保存やアニメーションの停止などの作業を行うことができますが、新しいアクティビティの表示に影響するため、それほど時間はかかりません。OnPause新しいアクティビティのonResumeを実行する前に、最初に実行する必要があります。
-
onStop():アクティビティが停止しようとしていることを示します。ブロードキャストレシーバーからログオフしたり、ネットワーク接続を閉じたりするなど、重いリサイクル作業を行うことができます。時間はかかりすぎないようにしてください。
-
onDestroy():アクティビティが破棄されようとしていることを示します。これはアクティビティのライフサイクルの最後のコールバックであり、多くの場合、リサイクルとリソースの解放を行います。
-
拡張:ライフサイクル全体の観点から、onCreateとonDestroyはペアになっており、それぞれアクティビティの作成と破棄をマークします。呼び出しは1つだけです。
-
アクティビティが表示されているかどうかから、onStartとonStopがペアになり、これら2つのメソッドが複数回呼び出される場合があります。
-
Activityがフォアグラウンドにあるかどうかの観点から、onResumeとonPauseはペアになっており、これら2つのメソッドは複数回呼び出される可能性があります。
-
この違いを除いて、実際の使用には他の明らかな違いはありません。
2.フラグメントのライフサイクルについて話しますか?
-
参照回答:
-
フラグメントの作成から破棄までのライフサイクル全体に関係するメソッドは、onAttach()→onCreate()→onCreateView()→onActivityCreated()→onStart()→onResume()→onPause()→onStop()→onDestroyView( )→onDestroy()→onDetach()。その中には、Activityと同じ名前で同様の関数を持つ多くのメソッドがあり、さまざまなメソッドは次のとおりです。
-
onAttach():フラグメントとアクティビティが関連付けられているときに呼び出されます。
-
onCreateView():onCreateの後、フラグメントがビューを作成するときに呼び出されます。
-
onActivityCreated():フラグメントに関連付けられたアクティビティがonCreate();を完了したときに呼び出されます。
-
onDestroyView():フラグメントのレイアウトが削除されたときに呼び出されます。
-
onDetach():フラグメントとアクティビティの関連付けが解除されたときに呼び出されます。
3.サービスのライフサイクルについて話しますか?
-
参照回答:サービスライフサイクルには、6つの主要な方法が含まれます
-
onCreate():サービスが作成されていない場合、startService()を呼び出した後にonCreate()コールバックが実行されます。サービスがすでに実行されている場合、startService()を呼び出してもonCreate()メソッドは実行されません。つまり、onCreate()は、サービスが初めて作成されたときにのみ呼び出され、startService()を複数回実行してもonCreate()が繰り返し呼び出されることはありません。このメソッドは、一部の初期化作業に適しています。
-
onStartComand():サービスの開始時に呼び出されるこのメソッドは、一部のデータ読み込みタスクを完了するのに適しています。たとえば、データをダウンロードしたり音楽を再生したりするためのスレッドがここに作成されます。
-
onBind():サービスがバインドされたときに呼び出されます。
-
onUnBind():サービスがバインドされていないときに呼び出されます;
-
onDestroy():サービスが停止したときに呼び出されます。
4.放送の形態はいくつですか?その特徴は何ですか?
-
参照回答:
-
通常のブロードキャスト:開発者はインテントのブロードキャストを定義します(最も一般的に使用されます)。すべてのブロードキャストレシーバーは、ランダムな順序でほぼ同時にブロードキャスト情報を受信します。
-
整然とした放送:送信された放送は、放送受信機によって順番に受信されます。同時に放送メッセージを受信できるのは、1つの放送受信機だけです。放送受信機のロジックが実行された後も放送は続行されます。優先度の高い放送受信機は最初にブロードキャストメッセージを受信します。順序付けられたブロードキャストは、後続の受信者が受信できないように、受信者によって傍受される可能性があります。
-
ローカルブロードキャスト:独自のアプリケーション内でのみブロードキャストを送受信します。つまり、独自のアプリケーションのみがブロードキャストを受信でき、データはより安全で効率的ですが、動的に登録することしかできません。
-
スティッキーブロードキャスト:この種のブロードキャストはスタックしたままになります。ブロードキャストに一致する受信者が登録されると、受信者はこのブロードキャストを受信します。
5. ContentProviderについてどのくらい知っていますか?
参照回答:
4つの主要コンポーネントの1つとして、ContentProviderは主にデータの保存と共有を担当します。ファイルストレージ、SharedPreferencesストレージ、SQLiteデータベースストレージとは異なり、これらのデータストレージ方法は、後者によって保存されたデータはアプリケーションでのみ使用でき、前者は異なるアプリケーション間でのデータ共有を許可し、どの部分のみを選択することもできます。プログラム内の個人データの漏洩のリスクがないことを保証するために、共有するデータの。
最近のAndroid市場について話す
最近、クールな言葉を時々目にします。Androidは寒いといつも言っています。いくつか提案したいと思います。まず、孤独に耐え、外の世界に邪魔されないようにする必要があります。次に、長期的な体系的な学習計画と忍耐力;最後に、学習方法に注意を払います。、気軽に勉強しないでください。多くの人は本やブログを読むだけで、決して実践しようとはしません。理解は間違いなく深すぎず、時間が経つと忘れがちになります。
総括する
テクノロジーを学ぶことは、遅く、長く、困難な道です。情熱の瞬間に頼ることも、数日夜起きて上手に学ぶこともできません。平常時は一生懸命勉強する習慣を身につける必要があります。だから:永続性!
では、どうすれば面接で良い答えを出すことができるでしょうか。
もちろん、その答えは仕事や勉強で自分自身を向上させることです。
また、面接の技術的なポイントはあまり知られていないので、もっと学ぶ必要があります。実際、面接の規模に関係なく、面接官に虐待されないようにするには、面接の質問を最大限に活用し、包括的な準備をする必要があります。もちろん、これに加えて、平時の確固たる基盤。だから、面接官が自分の知識をどのように掘り下げても、それに対処することができます〜
これが私のAndroid学習インタビュードキュメントに関するビデオのコレクションです。興味のある友達は見てみることができます〜
最後に、皆さんが良い仕事を見つけて、ゴールデンナインとシルバーテンでお気に入りのオファーを手に入れてください!