おすすめ: 「2020 Android 面接質問まとめ [集]」
##はじめに
多くの人は、面接を受けるまでインターネット企業で働いたことがない、またはインターネット企業で短期間働いたことがあるかもしれません。インターネット企業の面接は?また、私の準備が十分ではなかったのか、数回の面接で面接官の質問に戸惑い、惨めな不合格に終わりました。
以下は、私がまとめた Android の面接の質問の概要です。スペースの都合上、注目のテクノロジー部分の質問のみをリストします。他の面接の質問の内容は後で更新されます。知識ポイントを更新しましたが、このインタビュー集を編集するのにも多くの時間がかかりました。
1. コンポーネント化
(1) 概念:
コンポーネント化: APP を複数のモジュールに分割し、各モジュールはコンポーネントであるか、コンポーネントである可能性があります 基本的なライブラリが提供されます依存するコンポーネント。開発中、一部のコンポーネントは個別にデバッグできます。コンポーネントは相互に依存する必要はありませんが、相互に呼び出すことができます。最終的にリリースされると、すべてのコンポーネントは、メイン APP プロジェクトの依存関係。
(2) 起源:
アプリのバージョンが繰り返され、新しい機能が常に追加され、ビジネスが複雑になり、保守コストが高くなります - ビジネスの結合が高く、コードが肥大化しているため、チーム内で複数人で共同開発することが困難です
- Android のコンパイル コードがスタックしており、単一プロジェクト内のコード結合が深刻です。一部の変更には再コンパイルと再コンパイルが必要です。梱包には時間と労力がかかります。
- 単体テストに便利で、他のモジュールに注目することなく 1 つのビジネス モジュールだけを変更できます。
-
(3) 利点:
コンポーネント化により、共通モジュールを分離して均一に管理することで再利用性が向上し、ページをより細かい粒度のコンポーネントに分割できます。コンポーネントには UI 実装が含まれており、また、データ層とロジック層を含めることもできます。- 各コンポーネントは個別にコンパイルできるため、コンパイルが高速化され、個別にパッケージ化できます。
- 各プロジェクト内の変更は他のプロジェクトには影響しません。
- ビジネス ライブラリ プロジェクトは、すぐに分離して他のアプリに統合できます。
- 頻繁に反復されるビジネス モジュールはコンポーネント アプローチを採用しており、ビジネス ラインの研究開発が相互に干渉することがなく、コラボレーションの効率が向上し、製品の品質が管理され、安定性が向上します。
- 並行開発では、チーム メンバーは自分たちで開発した小さなモジュールのみに集中するため、結合が減り、後のメンテナンスが容易になります。
-
(4) 検討課題:
モード切り替え: APP で個別デバッグと全体デバッグを自由に切り替える方法
部品化後の各業務モジュールで可能別の APP である必要があります (isModuleRun=false)。パッケージをリリースするとき、各ビジネス モジュールは lib 依存関係として使用されます。これは変数によって完全に制御されます。ルート プロジェクト gradle.properties では、isModuleRun=true。 isModuleRunステータスが異なり、独立したAPKかライブラリかを区別するためにロードするアプリケーションとAndroidManifestが異なります。
build.grade での設定:
リソースの競合
複数のモジュールを作成するときに同じリソースを解決する方法 ファイル名の競合ビジネス モジュールと BaseModule のリソース ファイルの名前が重複すると、競合が発生します。解決策は次のとおりです:
各モジュールには app_name があります。リソース名の重複を防ぐために、各コンポーネントのビルドに resourcePrefix "xxx_ を追加します。 Gradleのリソース名の接頭辞を強制的に確認する 各コンポーネントのリソース接頭辞を修正する ただし、resourcePrefix値で制限できるのはxml内のリソースのみであり、画像リソースを制限することはできません。複数のモジュール間で共通のライブラリとツール クラスを参照するには
コンポーネント通信
コンポーネント化後、モジュールは相互に分離され、UI ジャンプとメソッドの呼び出しを実行する方法、ルーティング フレームワークを使用できます。 Alibaba ARouter や Meituan の WMRouter など
各ビジネス モジュールは事前の依存関係を必要とせず、ルーティングを介してジャンプできるため、ビジネス間の結合を完全に解決できます。 #コンポーネントが関連していることはわかっているので、単独でデバッグする場合に他のモジュールから渡されるパラメータを取得する方法
Application
コンポーネントが単独の場合実行時、各モジュールは独自の APK を形成します。これは、複数のアプリケーションが存在することを意味します。明らかに、あまり多くのコードを繰り返し書きたくないので、BaseApplication を 1 つ定義するだけでよく、他のアプリケーションはこの BaseApplication を直接継承します。それで問題ありません。BaseApplication でパブリック パラメーターを定義することもできます。
2. プラグイン化
(1) 概要
プラグイン化というとメソッド数が65535を超えるという問題がありますが、これは解決できます。 Dex の外注を通じて、同時にプラグイン開発を使用することでこれを解決できます。プラグインの概念は、ホスト APP がプラグイン APP をロードして実行するというものです。
(2 つの利点)
大規模なプロジェクトでは、明確な分業を行うために、異なるチームが異なるプラグイン APP を担当することがよくあります。より明確に。各モジュールは異なるプラグイン APK にカプセル化されており、異なるモジュールを個別にコンパイルできるため、開発効率が向上します。上記のメソッド数が制限を超える問題を解決しました。オンラインのバグは、新しいプラグインを起動して「ホットフィックス」効果を実現することで解決できます。ホスト APK のサイズを削減しました。
(3 つのデメリット)
プラグインとして開発されたアプリは Google Play で公開できないため、海外市場が存在しません。
以上がAndroid に関するホットな技術面接の質問のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。