2020年BATアンドリュースのインタビューの焦点:Javaの+カスタムビュー+ + + NDKフラッターパフォーマンスの最適化

アンドリュースインタビューは何に焦点を当てましたか?

私はインタビューの質問を共有することにより、一緒にメーカーや中小企業の顔をもたらし、アンドリュースのインタビューに関するさまざまな情報を収集しました。

技術は常に更新します。大手企業の最新の分析を終えたことで質問、アンドリュース市場の需要をより良く把握に直面しています。

; Androidの最も頻繁に技術的なインタビュー尋ね
たJava関連インフラ、データ構造とアルゴリズム、パフォーマンスチューニング、デザインパターン、NDK、人工知能、オーディオやビデオなどのハイブリッド開発の開発を。

私は関与アンドリュースのインタビューとよく(答えを)表面を尋ねよく寄せられる質問の範囲だけでなく、高度なビデオシステム情報をまとめました。そして、それぞれの技術的なプレゼンテーションは、仕上げのスキルツリーを作りました。
そのうちのほとんどは、あなたがすべての方法をカバーすることはできません確かにここに記載され、当然のことながら、満たされたこのリークを制御することができ、顔のインタビューは、よくある質問、大企業であるが、ジョブすぐに友人を見つけるために、いくつかの助けを演じることを望んで!

A、Javaの章

1.マルチスレッド;

  • 睡眠と待ち時間の違い
  • 使い方に参加
  • スレッド同期:synchronizedキーワードなど
  • スレッド間通信
  • スレッドプール
  • 手書きのデッドロック

2.Javaの参照、およびそれぞれの使用シナリオの
のソース3.HashMap
何4.GC(ガベージコレクション)は?それがどのように動作しますか?どのような回復アルゴリズム
5.Error例外との違いは?
6.注意事項反射し、それを理解しますか?プロジェクトは、それを使用していますか?
7.ネットワーク関連:

  • HTTPステータスコード
  • HTTPとHTTPSの違いは?HTTPSそれがどのように動作しますか?

LRUCacheで8.Javaはそれを達成する方法(ソース角)とは?なぜのLinkedHashMap?
9.デザインパターン:

  • 原則volitateキーワード手書きシングルトン
  • 手書き生産者 - 消費者モデル
  • どのようなプロジェクトでは、デザインパターンを使用していますか?
  • 多くの場合、コーディング設計原理は、次のとおりです。シングル責任、開閉、リヒターの交換などの原則を

10.ArrayListとLinkedListの違いは?

第二に、カスタムビュー

1.ソース関連:

  • 起動時に活動
  • イベント配信元だけでなく、イベントはどのようにそこ傍受を導出しました
  • メッセージング:ハンドラのソース(ルーパー、メッセージキュー組み合わせ)、およびメッセージを取得していないときはどうなりますか?
  • なぜView.postは、幅と高さを得ることができますか?

2.表示のカスタマイズ。

  • プロセス:onMeasure、onLayout、onDraw
  • MeasureSpecでonMeasureはどのように計算するのですか?

3.Dalvikは.dexカスタマイズされたバイトコードのフォーマットを実行しています。
4.どのようにアプリケーションのグローバルな例外をキャプチャするには?
5.Serviceは、開始とバインドの間の差を使用することですか?
何のIPC機構6.Android?(そして、ダウン頼ま)
7.プロパティアニメーションソース?
図8.大きな負荷
9.ANR見つける方法を、どのように分析するには?(トレースログ)は、
その10件のプロジェクトのオープンソースライブラリで使用されていますか?ソースについての話を選びますか?
11.MVCとMVPの違いは?
12.Activity:

  • A開始Bは、ライフサイクルはどのように行くのですか?(なお、Bは明確に区別されている場合)
  • スタートモード

13.AsyncTask原理?

第三に、パフォーマンスの最適化

1.Android UI適応。

フォントは、DP、多目的match_parent、wrap_content、重量を使用して、SPを使用しました

画像リソース、異なる画像解像度は、対応するフォルダに代わり割合を用いることができます。

2.app :(最適化ツール:階層ビューアレイアウト解析ツール:TraceViewテスト分析と時間のかかる)
3.App最適化を開始
4.レイアウト最適化(,,あまりにも複雑にネストされた缶の使用ではないとしてみてください)。
5.応答の最適化;;

  • Androidシステムのすべての16msのは、私たちのVSYNCインタフェース(活動を)再描画するための信号を送信します
  • ページカトンの理由:(1)あまりにも複雑なレイアウト(2)複雑な計算UIスレッド(3)頻繁なGC
  • :二つの理由頻繁にGCが得られ
    (-1)、多数のオブジェクトが作成されているとすぐに短い時間(2)にリリースされると、即座に深刻なメモリ領域を占有することができます多数のオブジェクトを生成するメモリジッタ、。

6.メモリの最適化:基準メモリリークおよびメモリのオーバーフロー部

最適化された(ツール:Batterystats&バグレポート)を用いた電池。

  • ネットワーク要求の最適化

  • GPSを利用した測位、近くに覚えてください。

8.ネットワークの最適化(ユーザの接続上のネットワーク効果:交通、電力、使用者のための待ち時間)ネットワークモニタツールlogcat下の次のAndroidのスタジオで検出することができます

  • APIデザイン:APIのアプリケーションサーバー間の設計および周波数を考慮することは、そのようなアプリケーションへのネットワーク要求などの状態のリソースが少ないリクエストで実現することができ、ビジネス要件およびインタフェースを示しています。
  • gzip圧縮:GZIPは圧縮要求および応答に使用される、それによって消費流量を低減すること、データの量を減らします。
  • 画像サイズ:サーバーが浪費を避けるために、サーバが右の絵を与えているように、画像の幅と高さの写真を撮るために必要があるときにあなたが言うことができます。
  • ネットワークキャッシュ:キャッシュは速く我々のアプリケーションの外観を作るために、だけでなく、不要なトラフィックの消費を避けるために、両方の、適切な。

9.画像の最適化。

  • 絵自体は動作します。デコードが完了した後に、これらのメソッドので、最終的にはより多くのメモリを消費するための完全な、必要にcreateBitmap javaの層によって、大きな画像を設定するために使用していないのsetImageBitmap、setImageResource、BitmapFactory.decodeResourceしてみてください。
  • ズームインする比画像、SDK推奨値は、画像が得られ、2のインデックス値、総会の値であり、明確ではありません。
  • 写真は絵リサイクル()メソッドを呼び出すことを覚えていません

四、NDKと最先端の技術
NDKとJNIのご理解約1での話。

  • JNIはJava Native Interface(JNI)およびJavaネイティブインタフェースの頭文字です。
  • 目的は、Javaと対話する(たとえば、C / C ++のような)他のローカル言語を作ることです。
  • JavaのJNIはの一部であり、直接のAndroidに関連していません。
  • NDKは、ネイティブ開発キットとAndroid SDKツールの頭文字です。
  • 役割は、C / C ++ DLLのより便利かつ急速な発展で、自動的にアプリケーションと一緒に動的ライブラリのAPKにパッケージ化。
  • AndroidのNDKはの一部であり、直接のJavaに関連していません。
    概要:
    JNI目的が達成され、NDK Androidのは、JNIを達成するための手段です。

JNIEnvのとJavaVMののご理解約2での話。

  • JavaVMのは、JNI層における仮想マシンの代表であります
  • プロセスは一つだけのJavaVMを持っています。(重要!)
  • すべてのスレッドは、JavaVMのを共有しています。(重要!)
  • JNIEnvの環境を呼び出すJavaのネイティブ言語は、ほぼすべてのJNIポインタ方法をカプセル化することを示しています。
  • それが発効作成したスレッドだけJNIEnvのは、それは、スレッド間で互いの異なるスレッドJNIEnvの独立したを渡すことはできません。(!重要)
    注:
    通信するために、ネイティブな環境の下で作成されたスレッド、およびJava、JNIEnvのオブジェクトを取得する必要があります。私たちは、AttachCurrentThreadとネイティブスレッドのJavaVMと解離に関連するメソッドをDetachCurrentThread。

NDKの問題やエラーをどのように配置するかを3。

  • 一般的には開発段階で、我々はログで​​問題を見つけ、分析することができます
  • それは(すなわち、基本的なログを閉じ)オンライン状態であれば、我々はツールを使用し、NDKはエラーを見つけるためのツールを提供してobjdumpのaddr2lineにすることができます
  • また、他のC / C ++分析ツールの一部を使用することができます
  1. 静的登録と動的登録。
  • 静的登録;による  JNIEXPORT と、  JNICALL 2つのマクロ定義文、Java + 包名 + 类名 + 方法名 関数名の形態です。良い場所は、メソッド名が長すぎです。
  • 動的登録、通常RegisterNativesを方法JNI_OnLoadを法によって登録、もはや固定された名前に適合するように書くことができる(もちろん、容易にそのコード、名前、または可能とJavaのような一貫性のために理解されます)

5.API

いくつかの異常な被験者が、まだ、このようなJNIの内部で例外をスローするか、JavaのJNIの内部でメソッドを呼び出す、というようにする方法として、あなたのAPIの一部を使用します。いくつかは、まだAPIを理解する必要があるので、それは大体Shaya、これはあまりにも多く、詳細に説明していない名前を特徴とするものおおよそです。

五、フラッター。

  • ビルドにフラッター開発環境

  • 言語ダーツ理解をコーディングフラッター?
    オブジェクト指向の原則は、DART
    変数、類似点と相違点関数、演算子、構文Java例外原則ダーツ
    のメカニズムのクラス
    初期化子ルール
    という名前のコンストラクタ
    のmixinを

  • フラッター原則の枠組み、および技術の使用(ビューをカスタマイズする方法、レイアウト解析、?アニメーション/ジェスチャーの相互作用、マルチスレッド開発の原則、戦闘はそのフラッタライブラリを掲載するかどうか)

最後に、私たちは生涯学習の習慣を開発することを願って、技術は決して終わることのないです。

公開された56元の記事 ウォンの賞賛1 ビュー2909

おすすめ

転載: blog.csdn.net/chuhe1989/article/details/104622541