それは9月中旬であり、ほとんどのプログラマーは現時点で仕事を変更したり仕事を見つけたりする準備ができています。。。
優秀になりたい場合は、優秀な人々が何を学んでいるか、何をしているのかを見て、コミュニケーションをとるためにできる限りのことを行ってください。外に出て世界を見て、強制的に死を学ぶようにしてください。
このガイドは、開発作業における7年または8年の面接および他の人への面接における私の経験の要約です。それらのほとんどは、大企業向けのよくあるインタビューの質問です。空室を確認して記入できます。もちろん、ここのリストでは、すべての方法を網羅することはできません。今後の皆さんのお役に立てれば幸いです。
1.パフォーマンスの最適化
アプリの安定性の最適化
- どのような安定性の最適化を行いましたか?
- パフォーマンスの安定性はどのように機能しますか
- ビジネスの安定性を確保するには?
- 異常な状況が発生した場合、損失を迅速に止めるにはどうすればよいですか?
アプリの起動速度の最適化
- スタートアップの最適化はどのように行われますか?
- 非同期ですか?非同期で問題が発生しましたか?
- 最適化を開始するときに見落としやすい注意点は何ですか?
- バージョンの反復によって引き起こされる遅い起動への良い解決策はありますか?
- 未解決の問題:起動速度を上げる場合は、フレームワークまたはSDKの読み込みを遅延させる方法と、注意する問題を設計します
アプリのメモリ最適化
- メモリ最適化プロジェクトのプロセスは何ですか?
- メモリ最適化についてのあなたの最大の気持ちは何ですか?
- すべての不合理な場所を検出する方法は?
アプリ描画の最適化
- レイアウトの最適化のプロセスでどのツールを使用しましたか?
- レイアウトが遅れを引き起こしたのはなぜですか、そしてどのようにそれを最適化しましたか?
- レイアウト最適化後の結果はどうですか?
- 遅延最適化をどのように行いましたか?
- どのようにして遅延情報を自動的に取得しますか?
- Catonの完全なソリューションはどのように機能しますか?
- TextView setTextの時間のかかる理由と、TextView描画レイヤーのソースコードの理解は何ですか?
- 未解決の問題:リストページのオープン速度と流暢さを最適化する
アプリスリム
ネットワーク最適化
- モバイル端末がネットワークデータを取得するためのいくつかの最適化ポイント
- クライアントネットワークセキュリティの実装
- 弱いモバイルネットワーク環境向けのネットワーク最適化計画を設計する
アプリのバッテリーの最適化
Androidのセキュリティの最適化
- アプリのセキュリティを向上させる方法は?
- Androidアプリを強化する方法は?
- Androidの難読化の原則は何ですか?
- Androidの署名についての理解について話す
WebViewの読み込みが遅いのはなぜですか?
カスタムビュー
FC(強制終了)が表示されるタイミングを最適化するにはどうすればよいですか?
Javaマルチスレッドによって引き起こされるパフォーマンスの問題を解決する方法
、TraceViewの実装原理を解決する方法、データエラーの原因を分析する方法、
SysTraceを使用して、原理を理解したことはありますか?
mmap +ネイティブログの最適化?
2、Androidフレームワーク関連
Androidシステムアーキテクチャ
- 応用
- Java APIフレームワーク
- システムランタイム
- ハードウェアアブストラクションレイヤー(HAL)
- Linuxカーネル
イベント配信メカニズムを表示しますか?スライディング競合を解決するにはどうすればよいですか?
- 活動の構成を理解する
- タッチイベントのタイプ
- イベント配布プロセス
- ACTION_CANCELはいつトリガーされますか?ボタンがタッチされてから外側にスワイプしてそれを持ち上げると、クリックイベントがトリガーされますか?それとも後ろにスワイプして持ち上げられますか?
- Viewでイベントの競合を解決するにはどうすればよいですか?開発中に遭遇した例を挙げてください。
描画プロセスを表示しますか?
- 描画の全体的なプロセスを理解する
- 理解MeasureSpec
- MeasureSpecに基づくウォーターフォールフローでカスタムViewGroupを実装する方法は?
- ビュー描画プロセスのレイアウト
- Drawの描画プロセスを見る
- Requestlayout、onlayout、onDraw、DrawChildの違いと接続は何ですか?
プロセス間通信
- Androidにおけるプロセスとスレッドの関係は?違い?
- マルチプロセスを開始するには?アプリケーションはNプロセスを開始できますか?
- なぜIPCが必要なのですか?マルチプロセス通信で起こりうる問題?
- AndroidのIPCメソッドとさまざまなメソッドの長所と短所は何ですか?
- AIDLについて話しますか?複数のモジュールでAIDLの使用を最適化する方法は?
- なぜバインダーを選ぶのですか?
- バインダーメカニズムの役割と原理は?
- バインダーフレームワークでのServiceManagerの役割は何ですか?
- バインダーの完全な定義
- AMSの手書き実装簡易バージョン(AIDL実装)
- バインダードライバーについて簡単に説明しますか?
- プロセス間で大容量メモリデータを転送する方法は?
Androidシステムの起動プロセスとは何ですか?(ヒント:initプロセス-> Zygoteプロセス-> SystemServerプロセス->さまざまなシステムサービス->アプリケーションプロセス)
- システムはデスクトップアプリケーションの起動と検索にどのように役立ちますか?
プログラムを開始するには、メインインターフェイスのアイコンをクリックして入力するか、プログラムからジャンプします。この2つの違いは何ですか?
AMSファミリの
アプリ起動プロセス(
Activityのコールドスタートプロセス)の重要な用語の説明ActivityThread の動作原理
は、4つの主要コンポーネントの起動プロセス、および4つの主要コンポーネントがどのように起動および破棄されるかを説明
しています。ブロードキャストの送受信の原理を理解していますか?
AMSはどのようにアクティビティを管理しますか?
WindowとWindowManager
WMSがWindowを管理する方法を理解しますか?
一般に、アプリケーションが電話にインストールされるとどうなりますか?
Androidパッケージプロセス?(つまり、Android Studioのビルドボタンをクリックした後に何が起こるか説明しますか?)apkには何がありますか?署名アルゴリズムの原理は?
- APKパッケージプロセス
- APK構成
- なぜ署名するのですか?
- 署名とは何ですか?
- 署名と検証のメインプロセス
- キーストアと証明書の形式
- jarsignerとapksignerの違い
- 署名するときは、キーストアファイルとパスワードを指定するだけでなく、エイリアスとキーパスワードも指定する必要があります。
- Android Apk V1署名の原則
Android仮想マシンとJava仮想マシンの原理と違いについて教えてください(JVM、Davilk、ARTの原理と違い)
- JVMとDalvik仮想マシンの違い
- Android 2仮想マシンの違い(1つは5.0以前、1つは5.0以降)
- ARTとDavlikのガベージコレクションの違いは何ですか?
Androidは自動ガベージコレクションメカニズムを使用しています。Androidメモリ管理の原則を教えてください。
- 未解決の質問:ガベージコレクションアルゴリズムの設計方法は?
アプリはどのようにAndroidでサンドボックス化されていますか?なぜこれを行うのですか?
アプリでR.idを呼び出した後に画像を見つける方法は?
JNI
- JavaがC ++を呼び出す
- C ++はJavaを呼び出します
- jniでネイティブ関数を登録する方法、登録するにはいくつかの方法がありますか?
- そのロードプロセスとは何ですか?そのライフサイクルは何ですか?
NDKを紹介してください。
3、Androidの優れた三者ライブラリのソースコード
プロジェクトで使用されているオープンソースライブラリはどれですか?その実現原理について話しますか?
- 基盤となるネットワークフレームワーク:OkHttp実装の原則
- このライブラリは何に使用されますか?
- プロジェクトでこのライブラリを使用する理由
- このライブラリの用途は何ですか?どのような使用シナリオに対応していますか?
- 同じタイプのライブラリと比較して、このライブラリの利点と欠点は何ですか?
- このライブラリの中心的な実装原理は何ですか?このライブラリの特定のコア機能を実装するように求められた場合、それを実装する方法をどのように検討しますか?
- このライブラリから学んだ貴重で有用なデザインのアイデアは何ですか?
- OKhttpはネットワーク層に対してどのような最適化を行っていますか?
- ネットワーク要求のキャッシュ、okhttpはネットワークキャッシュをどのように処理しますか?
- HttpUrlConnectionとokhttpの関係は何ですか?
- VolleyとOkHttpの比較
- 自分でネットワークリクエストフレームワークを設計する方法は?
- ネットワークから10Mの画像をロードします。予防策は何ですか?
- httpはファイルが大きすぎるかどうかをどのようにして知るのですか?
- WebSocketの理解について話してください。
- WebSocketとソケットの違いは?
- ネットワークパッケージフレームワーク:レトロフィット実装の原則
- このライブラリは何に使用されますか?
- プロジェクトでこのライブラリを使用する理由
- このライブラリの用途は何ですか?どのような使用シナリオに対応していますか?
- 同じタイプのライブラリと比較して、このライブラリの利点と欠点は何ですか?
- このライブラリの中心的な実装原理は何ですか?このライブラリの特定のコア機能を実装するように求められた場合、それを実装する方法をどのように検討しますか?
- このライブラリから学んだ貴重で有用なデザインのアイデアは何ですか?
- Android:メインストリームネットワークリクエスト用のオープンソースライブラリの比較(Android-Async-Http、Volley、OkHttp、Retrofit)
- レスポンシブプログラミングフレームワーク:RxJava実装の原則
- RxJava変換オペレーターマップflatMap concatMapバッファー?
- Rxjavaのスレッドプールと独自のタスク管理フレームワークの違いは何だと思いますか?
- 画像読み込みフレームワーク:Glide実装の原則
- このライブラリは何に使用されますか?
- プロジェクトでこのライブラリを使用する理由
- このライブラリの用途は何ですか?どのような使用シナリオに対応していますか?
- 同じタイプのライブラリと比較して、このライブラリの利点と欠点は何ですか?
- このライブラリの中心的な実装原理は何ですか?このライブラリの特定のコア機能を実装するように求められた場合、それを実装する方法をどのように検討しますか?
- グライドソースコードメカニズムの中核となるアイデア
- このライブラリから学んだ貴重で有用なデザインのアイデアは何ですか?
- Glideは画像が読み込まれたことをどのように判断しますか?
- Glideはどのキャッシュを使用しますか?
- Glideメモリキャッシュのサイズを制御するには?
- 画像のサイズを計算する
- ビットマッププロセスのロード(メモリオーバーフローが発生しないようにする方法)
- Androidでメモリキャッシュとディスクキャッシュを実現する方法
- LruCacheの原則
- LruCache putメソッドのコアロジック
- LruCache getメソッドのコアロジック
- LinkedHashMapの原則
- DisLruCacheの原則
- ビットマップ圧縮戦略
- ビットマップ処理
- ImageLoaderプロセスを実装する
- ビットマップのデコード時と解放時のメモリを再利用する方法
- 画像ライブラリの比較
- フレスコとグライドの比較
- ビットマップは、30Mの大きな画像などの大きな画像をどのように処理し、OOMを防ぐ方法を教えてください。
- ビットマップオブジェクトの理解。
- inBitmapの理解。
- 自分で画像ライブラリを実装する方法は?(拡張機能の開発については、独立性を維持しながら、変更に近づきます。実際の画像読み込みライブラリのケースを分析するには、Androidソースコードのデザインパターンを参照してください)
- 画像ブラウザを書いて、考えを教えてください。
- イベントバスフレームワーク:EventBus実装の原則
- メモリリーク検出フレームワーク:LeakCanary実装の原則
- このライブラリは何のためのものですか?
- プロジェクトでこのライブラリを使用する理由
- このライブラリの用途は何ですか?どのような使用シナリオに対応していますか?
- 同じタイプのライブラリと比較して、このライブラリの利点と欠点は何ですか?
- このライブラリの中心的な実装原理は何ですか?このライブラリの特定のコア機能を実装するように求められた場合、それを実装する方法をどのように検討しますか?
- このライブラリから学んだ貴重で有用なデザインのアイデアは何ですか?
- オブジェクトがleakCannaryでリサイクルされているかどうかを判断する方法は?手動GCをトリガーする方法は?Cレイヤーの実装?
- 依存性注入フレームワーク:ButterKnife実装の原則
- グローバル管理フレームワークに依存:Dagger2実装の原則
- データベースフレームワーク:GreenDao実現原理
- データベースフレームワークの比較?
- データベースの最適化
- データベースデータの移行の問題
- データベースインデックスのデータ構造
- 平衡二分木
- Bツリー
- B +ツリー
- B *ツリー
第4に、ホットリペア、プラグイン、モジュール化、コンポーネント化、Gradle、コンパイルインストルメンテーションテクノロジー
1.ホットリペアとプラグイン
- AndroidのClassLoaderのタイプと特性
- ホットパッチ技術はどのようにして実現され、それとプラグインの違いは何ですか?
- ホットリペアの原理
- なぜプラグインを選ぶのですか?
- プラグインのアイデア
- プラグインの定義
- プラグインの利点
- プラグインフレームワークの比較
- プラグインの原理
2.モジュール化とコンポーネント化
- モジュール性の利点
- 既存のコンポーネント化されたソリューションを分析する
- コンポーネント化された開発の利点
- コンポーネント間の通信
- コンポーネント間の通信スキームの分析
- あまりにも多くのルーティングテーブルを管理する方法は?
- ARouterルーティングの原則
- マルチモジュール開発では、担当者が異なれば、重複したリソース、同じ文字列、同じアイコンなどが導入される可能性がありますが、ファイル名は異なります。重複を削除するにはどうすればよいですか?
3、gradle
- あなたはgradleに精通していますか、自動パッケージングについて知っていますか?
- Gradleのコンパイル速度を上げる方法は?
- Gradleのフレーバーでソースセットを構成できますか?
- Gradleのライフサイクル
4.インストルメンテーションをコンパイルする
- AOPテクノロジーの理解についてお聞かせください。
- 知っているコンパイラインスツルメンテーションテクノロジーについて教えてください。
5、建築設計
- MVC MVP MVVMの原理と違い?
- MVCの場合にアクティビティのCとVを分離するにはどうすればよいですか?
- PresenterをMVPアーキテクチャのインターフェイスとして定義するメリットは何ですか。
- MVPはPresenterのライフサイクルをどのように管理し、ネットワーク要求はいつキャンセルされますか?
- AOP思考
- アダプターで使用する場合、フラグメントをどのように分離する必要がありますか?
- プロジェクトフレームワークにBaseクラス、BaseActivity、BaseFragmentカプセル化の問題、および解決策はありますか?
- 音楽再生インターフェースの設計、実装方法、使用するクラス、設計方法、インターフェースの定義方法、バックグラウンドとの対話方法、キャッシュとダウンロードの方法、最適化の方法(15分)
- アプリの全体的なアーキテクチャを0から設計する方法は?
- 現在人気があると思われるアプリケーションについて話し、それを設計します(例:ライブストリーミングAPP、P2Pファイナンス、小さなビデオなど)。
- ライブラリを実装してログのリアルタイムレポートと遅延レポートを完了するには、どの側面を検討する必要がありますか?
- 最高のエンジニアリング設計プロジェクトをどのように設計および実装しますか?それをプラットフォームレベルの製品に拡張する方法は?
6.その他の頻繁なインタビューの質問
- バックグラウンドサービスが強制終了されないようにする方法を教えてください。(同じ質問:サービスがバックグラウンドで強制終了されないようにするにはどうすればよいですか?)より省電力な方法は何ですか?
- Androidアニメーションフレームワークの実装原理
- Activity-Window-Viewの違いは何ですか?
- 低バージョンのSDKは高バージョンのAPIをどのように実装しますか?
- コンテキストの理解について教えてください。
- Androidのライフサイクルと起動モード
- ListViewおよびRecyclerViewシリーズ
- リストビューの高さを変更するには?
- listviewとrecyclerviewがプルアップされてロードされたときに何をすべきですか?
- RecyclerViewのスライド削除を自分で実装する方法は?
- RecyclerViewのItemTouchHelperの実現原理
- プッシュ、メッセージプッシュの原則を実装する方法?プッシュ到着率の問題?
- 動的許可シリーズ
- カスタムビューシリーズ
- Canvas、描画フレームワーク、ハードウェアアクセラレーションの基本的なメカニズムは何ですか?Canvas Lockのバッファーは何ですか?
- 2本の指で大きな画像をズームしてドラッグ
- 現在のタブを常にTabLayoutの画面の中央に配置する方法
- TabLayoutはどのようにインジケーターの幅を設定してコンテンツをラップしますか?
- カスタムビューはモデルの適応をどのように考慮しますか?
- Googleの新しくリリースされたRoomアーキテクチャ用。
- 許可なしに特定する方法、特定のモデルが特定できない、解決する方法は?
- デバッグAPKとリリースAPKの違いは何ですか?
- Androidファイルストレージ、各バージョンの保存場所、外部ストレージ、内部ストレージの権限制御の進化
- コンパイル速度を改善する方法はありますか?
- スクローラーの原理。
- ハイブリッドシリーズ
- Handler postdelayed 2つのメッセージが現在のスレッドで使用されている場合、一方が5秒間遅延し、もう一方が10秒間遅延し、現在のスレッドが5秒間スリープする場合、上記のメッセージの実行時間はどのように変化しますか?
- Androidでのプロセスメモリの割り当ては、自分で一定量のメモリを割り当てることはできますか?
- ドロップダウンステータスバーはアクティビティのライフサイクルに影響しますか?onStop中にネットワーク要求が行われた場合、onResume中に再開する方法
- Androidの長い接続、ハートビートメカニズムの処理方法
- CrashHandler実装の原則?
- SurfaceViewとViewの最も重要な違いは?
- Androidプログラムのランタイム権限とファイルシステム権限
- 湾曲したスクリーンの適応。
- setTextメソッドを呼び出すTextViewの内部実行フロー。
- 別のプロセスのビュー表示(RemoteView)を制御する方法は?
- 適切なスライド仕上げアクティビティを実現するにはどうすればよいですか?
- システムレベル全体でインターフェースの角丸効果を実現する方法。(つまり、すべてのAPP開始インターフェイスは角が丸くなります)
- 非UIスレッドはUIを更新できます
か?gitの競合を解決するには? - 単体テストを実行しましたか、おなじみの単体テストフレームワークについて話しましたか?
Jenkinsの継続的な統合。 - 仕事でツールを使用または作成しましたか?スクリプト、プラグインなど。例:複数人による共同開発には、同じリソースの一部のコピーがある場合があります。この種の重複を自動的に検出する方法はありますか?
- 9.0の制限を回避する方法は?
- ファイル記述子を理解するには?
- ファイルを安全に書き込むためのプロセスを実装する方法は?
終わり
テクノロジーの学習は、ゆっくりと長く困難な道です。情熱の瞬間に頼ることはできません。また、数日と夜を過ごすことによって、上手に学ぶこともできません。一生懸命勉強する習慣を身に付ける必要があります。だから:持続!
最後に、この期間に友人や上司から収集された2019年から2020年のBATインタビューの実際の質問の分析をお伝えします。多くのコンテンツAndroid 基础、Java 基础、Android 源码相关分析、常见的一些原理性问题
とシステムを含む多くのコンテンツとシステムがあります。ちょっと待ってください。Androidを深く理解するのに役立ちます。関連知識ポイントと面接関連知識の原則。
このドキュメントは、知識と多くの詳細を含む、大規模な工場とのインタビューでよく尋ねられる技術的ポイントをPDFにまとめたものです。また、高度なアーキテクチャテクノロジーの高度な脳マップがあり、学習と進歩に役立ち、インターネットで情報を検索するすべての人を救います。学ぶ時間です。周りの友達と共有して一緒に学ぶこともできます。
上記のコンテンツはオープンソースプロジェクトに配置されています。私のgithubが含まれています。これには、さまざまな方向での自習用Androidルート、インタビューの質問集/顔の経典、一連の技術記事などが含まれています。リソースは継続的に更新されます...
最後に、転職して良い仕事を見つける準備ができている皆さんに願っています!