Androidインタビューの質問体験記事

序文

秋の新入社員が間もなく登場します。JiMengは、国民の日の休暇が終了する前に、Androidの主要なインタビューの質問のセットを準備します。


ヒント:この記事の内容は次のとおりです

経験

1.開発で使用されたフレームワークとプラットフォーム

1.1。EventBus(イベント処理)
2。xUtils(ネットワーク、画像、ORM)
3。JPush(プッシュプラットフォーム)
4。Youmi(Youmi)、Youlianghui、Pangolin(広告プラットフォーム)
5。Youmeng(統計プラットフォーム)
6。Baiduマップ
7。bmob(サーバープラットフォーム、SMS検証、電子メール検証、サードパーティの支払い)
8。アリババクラウドOSS(クラウドストレージ)
9。ShareSDK(共有プラットフォーム、サードパーティのログイン)
10。Gson(jsonデータフレームの解析)
11。zxing(QRコードのスキャン)
12。imageLoader、Fresco、Glide、Picasso(画像処理フレームワーク)


2. 3レベルキャッシュの原則:

  • 1.キャッシュからロードします。

  • 2.ローカルファイル(データベース、SD)からロードします

  • 3.ネットワークからロードします。


3.キャッシュをクリアする方法は?

(1)メモリキャッシュをクリアします。

(2)データベース、SD。


4.プッシュの利点:

タイムリーなイニシアチブ、的を絞った、便利で効率的な。


5.データをjson形式で送信する必要があるのはなぜですか?

読みやすさ、高効率


6.プロジェクトプロセス

プロジェクトの確立:プロジェクト、担当者、開発サイクル、コスト、人員、および材料リソースを決定します。
要件:ドキュメント、プロトタイプ図面。
開発:コーディング。
テスト:テスター
。オンライン:製品部門。
メンテナンス:新しいバグの修正。
アップグレード:改訂および新機能の追加


7.カスタムビューキーワード

基本:座標系、角度ラジアン、色
詳細:キャンバスパスベジエ曲線マトリックスイベント分布処理測定..


8.カスタムビューの実現アイデア

組み合わせコントロール、自己描画コントロール、継承コントロール


9.レトロフィットの使用

1.レトロフィットのhttpリクエストのapiインターフェイスとしてインターフェイスを使用します

public interface NetApi {
    
    
    @GET("repos/{owner}/{repo}/contributors")
    Call<ResponseBody> contributorsBySimpleGetCall(@Path("owner") String owner, @Path("repo") String repo);
}

2.Retrofitインスタンスを作成します

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.github.com/")
        .build();

3.apiインターフェイスを呼び出します

NetApi repo = retrofit.create(NetApi.class);

//第三步:调用网络请求的接口获取网络请求
retrofit2.Call<ResponseBody> call = repo.contributorsBySimpleGetCall("username", "path");
call.enqueue(new Callback<ResponseBody>() {
    
     //进行异步请求
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    
    
        //进行异步操作
    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
    
    
        //执行错误回调方法
    }
});

10.コンポーネント化の利点

  • コンポーネント化により、共通モジュールが分離され、統一された方法で管理されて再利用が向上します。ページはより小さな詳細コンポーネントに分割されます。内部コンポーネントにはUI実装が含まれ、データレイヤーやロジックレイヤーも含めることができます。
  • 各コンポーネントは個別にコンパイルでき、コンパイルを高速化し、個別にパッケージ化できます。
  • 各プロジェクト内の変更は、他のプロジェクトには影響しません。
  • ビジネスライブラリプロジェクトは、すばやく分割して他のアプリに統合できます。
  • 頻繁に繰り返されるビジネスモジュールはコンポーネントアプローチを採用しており、ビジネスラインのR&Dは相互に干渉せず、コラボレーションの効率を向上させ、製品の品質を制御し、安定性を強化します。
  • 並行開発では、チームメンバーは小さなモジュールの独自の開発にのみ注意を払い、結合を減らし、メンテナンスを容易にします。

11.プラグインの利点

  • 大規模なプロジェクトでは、明確な分業を実現するために、さまざまなチームがさまざまなプラグインアプリを担当することが多く、その結果、分業がより明確になります。各モジュールは異なるプラグインAPKにパッケージ化されており、異なるモジュールを個別にコンパイルできるため、開発効率が向上します。
  • 上記の方法の数が制限を超えているという問題を解決します。オンラインBUGは、「ホットフィックス」の効果を実現するために新しいプラグインを起動することで解決できます。
  • ホストAPKのサイズを小さくします。

プラグインによって開発されたアプリは、Google Playでは起動できません(海外市場はありません)。


12.パッキングの原則

  1. AAPTツールを使用してリソースファイル(AndroidManifest.xml、レイアウトファイル、さまざまなxmlリソースなどを含む)をパッケージ化し、R.javaファイルを生成します。
  2. AIDLツールを使用してAIDLファイルを処理し、対応するJavaファイルを生成します。
  3. Javacツールを使用してプロジェクトのソースコードをコンパイルし、クラスファイルを生成します。
  4. DXツールを使用してすべてのクラスファイルをDEXファイルに変換します。このプロセスは主に、JavaバイトコードからDalvikバイトコードへの変換、定数プールの圧縮、および冗長な情報の削除を完了します。
  5. ApkBuilderツールを使用してリソースファイルとDEXファイルをパッケージ化し、APKファイルを生成します。
  6. KeyStoreを使用して、生成されたAPKファイルに署名します。
  7. APKの公式バージョンの場合、位置合わせにはZipAlignツールが使用されます。位置合わせプロセスでは、APKファイル内のすべてのリソースファイルサンプルファイルの開始距離を4バイトの整数倍でオフセットし、メモリマッピングを介してAPKにアクセスできるようにします。ファイル速度が速くなります。

13.インストールプロセス

  1. APKを/ data / appディレクトリにコピーし、インストールパッケージを解凍してスキャンします。
  2. リソースマネージャーは、APK内のリソースファイルを解析します。
  3. AndroidManifestファイルを解析し、対応するアプリケーションデータディレクトリを/ data / data /ディレクトリの下に作成します。
  4. 次に、dexファイルを最適化し、dalvik-cacheディレクトリに保存します。
  5. AndroidManifestファイルによって解析された4つの主要なコンポーネント情報をPackageManagerServiceに登録します。
  6. インストールが完了したら、ブロードキャストを送信します。

14.デコンパイルを防ぐ方法(デコンパイルの難しさを改善する)

apkはAndroid仮想マシンによってロードされるため、特定の仕様があり、Dalvikはapkを暗号化した後にapkを認識できません。
完全に回避することは不可能です。誰かがいつでもあなたのコードを解読することができます。ただし、コードの逆コンパイルの難易度を上げる方法はいくつかあります。
1キーコードはjniを使用してCまたはC ++で記述されたローカルコードを呼び出すため、逆コンパイルするのは比較的困難です。2javaコードをわかりにくくします。3。サードパーティの拡張機能を使用し
ます


15.v1、v2署名の結果

  • v1:v1では、圧縮されていないファイルの内容のみが検証されるため、APKの署名後に多くの変更を加えることができます。ファイルを移動したり、再圧縮したりすることもできます。つまり、署名されたファイルを処理できます
  • v2:v2署名は、個々のZIPエントリではなく、アーカイブ内のすべてのバイトを検証します。APKファイルの改ざんや処理など、ビルドプロセス中にカスタムタスクがある場合は、必ず無効にしてください。無効にしないと、v2署名が作成される可能性があります。無効であるため、APKはAndroid7.0以降と互換性がありません

16. Androidがサーバーと対話する方法における対称暗号化と非対称暗号化とは何ですか?

対称暗号化とは、データの暗号化と復号化の両方で同じキーを使用することを意味します。この領域のアルゴリズムはDESです。

非対称暗号化、暗号化、および復号化は異なるキーを使用します。データを送信する前に、まずサーバーに同意して公開鍵と秘密鍵を生成する必要があります。公開鍵で暗号化されたデータは秘密鍵で復号化でき、その逆も可能です。この領域のアルゴリズムはRSAです。sshとsslはどちらも典型的な非対称暗号化です。


17.プロセスキープアライブプログラム

1.システムブロードキャストを使用してライブをプルします(明らかな欠陥)
2。システムサービスメカニズムを使用してライブをプルします
3.ネイティブプロセスを使用してライブをプルします(
Android 5.0以降は少し難しい)4。JobSchedulerメカニズムを使用してライブをプルし
ます5.アカウント同期メカニズムを使用してライブをプルします住む


18.バインダーメカニズムの利点

Linuxでは、通信メカニズムには1.パイプ、ファイル共有3.ソケット4.セマフォがあります。
利点:

  • 1.パフォーマンス:1回コピーする必要があります(共有メモリに2番目のみ)

  • 2.機能:csアーキテクチャに基づいており、使いやすさが高い(aidlを構成するだけ)

  • 3.セキュリティ:UIDは各APPに割り当てられ、実名と匿名性が同時にサポートされます(従来、上位層のプロトコルに依存する必要があり、アクセスポイントはオープンで安全ではありません)


19.URIとURLの違い

URI:リソースを一意に識別するために使用されるUniform ResourceIdentifier。3
つのコンポーネント:
1。リソースにアクセスするための命名メカニズム
。2 。リソースを格納するためのホスト名。3
リソースに重点を置いた、パスで表されるリソース自体の名前

URL:Uniform Resource Locator。これは特定のURIです。つまり、URLを使用してリソースを識別でき、リソースの検索方法も指定します。
3つのコンポーネント
1.プロトコル
2.リソースが格納されているホストIPアドレス
3.ホストリソースの特定のアドレス


20.TLS / SSLハンドシェイク

暗号化の原則(アルゴリズム、秘密鍵)
対称暗号化、非対称暗号化。SSLで使用される非対称暗号化
対称暗号化:データの暗号化に使用される
秘密鍵は、復号化に使用される秘密鍵と同じです。非対称秘密鍵:秘密秘密鍵と公開秘密鍵。
デジタル証明書
は、インターネット通信の通信当事者のID情報の1つです。シリアル番号(ファイル)
ハンドシェイクプロセス
1.クライアントが要求を開始します2.サーバーが応答します3.クライアントが証明書を検証します4.秘密鍵を生成します5.クライアントがデータを生成します


整理について

すべてが整理されると、読みやすいようにpdf形式に整理されます。ファイルは以下のように取得されます(10月8日以降)!


ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/qq_42761395/article/details/108909161