Androidプログラマーの必需品!アリババAndroidのインタビューは何を尋ねますか?フルバージョンはダウンロード可能です

バックグラウンド

広州でのコーディネート、5年のiOS開発経験。

私は最近、12年間働いているプログラマーにインタビューしました。

この老人は、3年のJava開発経験、2年のH5、7年の iOS開発経験を持っており、彼の履歴書には、Java、iOSに精通しており、H5開発に精通していると書かれています。特定の技術的ポイントはありません。

正直、このおじいさんのインタビューを楽しみにしていたので、招待されました。

兄のインタビューのオーラはとても充実していて、私も彼をとても尊敬しています。自己紹介の波の後、私たちはトピックに入りました。

Runloopについて聞いたところ、Runloopはほとんど使ったことがないとのことで、ちょっとした例を挙げました。兄からの答えは、Baiduで解決できるというものでした。

それで彼にKVCについて聞いたのですが、兄はまだ何を言えばいいのかわからなかったので、最も基本的なコピー、弱い、その他のキーワードを尋ねましたが、それでも明確に説明できませんでした。兄はまだとても横暴で、彼は与えました私は「なぜあなたはすべてをするのか、これらを役に立たないように頼まないでください」という気持ちを持っています。

それに書かれた彼の履歴書を見て、AndroidとiOSの開発に精通し、クロスプラットフォーム開発、jsインタラクションに精通しているので、Flutterを知っているかどうか尋ねました。聞いたことがないことを知らなかったとのことで、ついに25kの予想給与について聞いたところ、何を聞いたらいいのかわからなかったので、急いで面接を終えた。

面接部+役職:商品化​​-シニアAndroid開発エンジニア
面接感:顔全体が比較的疲れており、基本顔、クロス顔、ボス顔、6人の面接官(最初に言った3面から+ HR顔が見える少し悪化します(¬_¬)。アルゴリズムはまだ上司に書かれていますが、幸いインタビュアーは私を当惑させませんでした(私はアルゴリズムがあまり準備していなかったと正直に説明しました、ねえ...)、アルゴリズムはそれほど難しくありません。プロジェクト全体には、基本よりも多くの質問があります。
面接の提案:アルゴリズムと基盤は足がかりであり、プロジェクトは試金石であり、優れた面接画像はボーナスアイテムです。
履歴書に記載されている項目について考えてみてください。なぜこのプロジェクトを行ったのですか?このプロジェクトの目標は何ですか?私の計画は何ですか?他のプログラムに対する私の利点は何ですか?プロジェクトのメリットは何ですか?プロジェクトのアーキテクチャ図を描くことはできますか?プロジェクトで使用される主なフレームワークの原則は、前後で明確ですか?(私はおそらくプロジェクトから身を守ったでしょう、そして基本的な準備は少し急いでT ^ Tです)。
オンサイトまたはビデオインタビューの場合は、優れたインタビュー画像がさらに必要です。TL面接では、他の多くの面接官よりも、人全体のイメージが良く、疲れを感じさせないというのがいいとおっしゃいました。

[片面-基本面]

  1. Androidを開発したとき、UIドラフトのピクセルをどのように適応させましたか?
  • dpi:画面のピクセル密度。システムソフトウェアで指定された単位サイズあたりのピクセル数を指します。多くの場合、システムの工場出荷時の構成ファイルに書き込まれる固定値です。
  • ppi:これは画面のピクセル密度でもありますが、これは物理的な概念であり、客観的に存在し、変化することはありません。dpiは、物理ピクセル密度を参照した後にソフトウェアによって手動で指定された値です。これにより、特定の間隔の物理ピクセル密度がソフトウェアで同じ値を使用するようになります。
  • dpと適応レイアウトおよび重み比例レイアウトは、適応問題の90%を解決できますたとえば、すべての1080P携帯電話のdpiが480であるとは限らないため、GoogleのPixel2(1920 * 1080)のdpiは420です。
  • 幅と高さの修飾子の適応:市場に出回っているすべてのAndroidスマートフォンの幅と高さのピクセル値を使い果たし、参照解像度を設定し、他の解像度はこの参照解像度に基づいて計算されます。さまざまなサイズのフォルダーで、対応する寸法を書き込むこのサイズのファイル。ただし、致命的な欠陥があります。つまり、フィットするように正確にヒットする必要があり、アプリパッケージのサイズも大きくなります。
  1. 等しい値を持つ2つの整数オブジェクト==それらが等しいかどうかを判断するために比較しますか?

  2. アクティビティAはアクティビティBにジャンプし、アクティビティBは戻るキーを押して、2つのプロセスのライフサイクルに戻ります。

  • ActivityAがActivityBにジャンプするプロセスでは、それぞれのライフサイクルの実行順序。例:A.onCreate A.onStart A.onPause A.onStop B.onCreate B.onStart B.onPause B.onStop B.onDestroy?
    ActivityAおよびActivityBのライフサイクルの実行順序は次のとおりです。A.onPause-> B.onCreate -> B .onStart-> B.onResume-> A.onStop
  • ActivityB戻るボタンを押しますか?
    戻るキーを押した後:B.onPause-> A.onRestart-> A.onStart-> A.onResume-> B.onStop-> B.onDestory
  • ActivityBがウィンドウアクティビティである場合、1と2の結論はどうですか?
    ActivityBがウィンドウの場合、ActivityAがActivityBにジャンプすると、フォーカスを失ったActivityAの部分が表示されるため、onStopは呼び出されません。このとき、ライフサイクルシーケンス:A.onPause-> B.onCreate-> B。 onStart-> B.onResumeが
    押された後戻るキー:B.onPause-> A.onResume-> B.onStop-> B.onDestory
  • 水平画面と垂直画面を切り替えるときにonCreateが呼び出されますか?数回?
    プログラムの実行中、水平画面と垂直画面の切り替え、キーボードの可用性、言語の切り替えなど、一部のデバイスの構成が変更される場合があります。この時点で、アクティビティが再開されます。プロセスは次のとおりです。破棄する前に、onSaveInstancestate()を呼び出してアプリケーションにデータを保存し、次にonDestory()を呼び出し、最後にonCreate()またはonRestoreInstanceStateを呼び出してActiviyを再起動します。画面を切り替えると、各ライフサイクルが再度呼び出されます。水平画面に切り替えるとOnCreateが1回実行され、垂直画面に切り替えるとonCreateが2回実行されます。
  1. 子スレッドをcontext.startActivity()(ApplicationContextなど)にすることはできますか?問題はありますか?

デモを書いて試すことができます。しかし、私は何が問題になるのか理解していません...

  1. ハンドラメカニズムの全体的なプロセス; Looper.loop()がメインスレッドをブロックしない理由; IdHandler(アイドル時間メカニズム); postDelay(()の特定の実装); post()とsendMessage()の違い;どのような問題ハンドラーを使用するときとそれを解決する方法に注意を払う必要がありますか?

質問は非常に詳細なので、できる限り準備することができます。メモリリークを回避するために、一連のハンドラーをカプセル化しました。

  1. ネイティブ、H5、およびRNページが混在してジャンプする場合、ページクリアリングブリッジはどのように機能しますか?

自分で作ったプロジェクトの場合は、原則を明確に説明し、明確に説明していない場合は絵を描いてください。

  1. 画面上のビューの表示部分のパーセンテージを計算するにはどうすればよいですか?

  2. ClassLoaderの親委任メカニズム

  3. Httpsの原則を簡単に紹介します

  4. メモリリークの原因とその修正方法を教えてください。

  5. どうすれば、大きな画像をoomなしでダウンロードできるようになりますか?

  6. UIの最適化を行いましたか?また、何をしましたか?

  • GPUオーバードローをデバッグし、オーバードローを適切な範囲に減らします。
  • ネストレベルとコントロールの数を減らし、ビューのツリー構造をできるだけフラットに保ち(見やすいように階層ビューアーを使用)、レンダリングする必要のないすべてのビューを削除します。
  • GPUを使用してレンダリングツールを構成し、問題が発生した特定のステップを特定し、TraceViewを使用してコードを正確に特定します。
  • タグの使用、ネストレベルを下げるためのマージ、viewStubの遅延初期化、インクルードレイアウトの再利用(マージで使用)
  1. WebViewとJSの相互作用の違いは何ですか、shouldOverrideUrlLoading、onJsPrompt use

  2. FlutterとKotlinと連絡を取りましたか?

  3. その他のプロジェクト関連の問題

  4. アルゴリズム-二分木はレベルkでノード要素を出力します

2面-プロジェクトスペシャル

  1. ネイティブページ、H5ページ、およびRNページが混在してジャンプする場合、ページクリアリングブリッジが実装されます。

  2. ページハイブリッドフレームワークの設計と難しさ

  3. RNユニバーサルコンテナの設計

  4. ユーザー行動監視プログラムの設計

  5. JSエラー管理プログラム

  6. RNページは、ユーザーの行動とJSエラー管理を監視します。問題発見の利点と最適化ポイントは何ですか?

  7. ネイティブRNに対するMeituanRNの利点は何ですか

3面深みのあるファンデーション

  1. あなたの会社でピカソを使ったことがありますか?紹介させてください

  2. ピカソ単一エンジン、複数のバンドルの場合にデータ分離を確実にする方法は?

  3. 美団RNとピカソの違い

4.プロジェクト関連の問題をいくつか省略します。

  1. RNのページ追跡の実装方法

  2. MeituanホームページはRNページですか?MTFlexBoxの原則

  3. 同期された変更された静的メソッド、通常のメソッド、クラス、メソッドブロックの違い

  4. 同期された基本的な実装原則

  5. 揮発性の役割と原理

  6. int変数は、i ++を操作するために、volatileおよびマルチスレッドで変更されています。スレッドセーフですか?i ++スレッドセーフを確保する方法は?AtomicIntegerの根底にある実現原理?

AtomicIntegerを使用してi ++スレッドセーフにします

  1. スレッドプールの理解、およびスレッドプールを作成するためのいくつかの重要なパラメーターについて話します

  2. ハンドラーメカニズムが再度要求します...

  3. バインダーメカニズムとメモリ共有メカニズムの違いは何ですか?

  4. Javaコレクション、ArrayListとHashMapの使用シナリオ、および基礎となる実装原則を紹介します

  5. ArrayListとLinkedListの違い

  6. アルゴリズム-2つの順序付けられたリンクリストのマージ

  7. アルゴリズム-文字列(*と。を除く)、通常(文字、*と。の任意の組み合わせ)を入力し、文字列が有効かどうかを判断します

  8. プロジェクトで遭遇したいくつかの技術的な問題を簡単に紹介します

4面-交差面

  1. 次のコードでは、strの最終的な値は何ですか?整数の値は何ですか?変更されますか?
  • テストサイト:Java値の転送(質問2でも同じ)。コードテストを記述し、changeValue()メソッドの入力パラメーターを変更すると、以前の値は変更されません
  • 原則:メソッドはすべてのパラメーター値のコピーを取得します。つまり、メソッド渡されたパラメーター変数の内容を変更できません基本型パラメーターにはパラメーターのコピーが渡され、オブジェクト型パラメーターはオブジェクトアドレスのコピーです。
  • 解決策:changeValue()で、オブジェクトタイプパラメーターの場合オブジェクトアドレスコピーのを直接変更するため、変数のアドレスは以前に変更されていません。オブジェクトインスタンスの値を変更すると、前の変数が変更されます
public void test() {
    String str = "123";
    changeValue(str); 
    System.out.println("str值为: " + str);  // str未被改变,str = "123"
}

public changeValue(String str) {
    str = "abc";
}

  1. 次のコードでは、オブジェクトstudentを再度使用するときにnullにする必要がありますか?

Javaでのメソッドパラメータの使用法の概要:

  • メソッドは、基本データ型(つまり、数値またはブール値)のパラメーターを変更できません。
  • メソッドは、オブジェクトパラメータの状態を変更できます。
  • メソッドは、オブジェクトパラメータに新しいオブジェクトを参照させることはできません
public void test()  {
    Student student = new Student("Bobo", 15);
    changeValue1(student);   // student值未改变,不为null! 输出结果 student值为 name:Bobo、age:15
    // changeValue2(student);  // student值被改变,输出结果 student值为 name:Lily、age:20
    System.out.println("student值为 name: " + student.name + "、age:" + student.age);
}

public changeValue1(Student student) {
    student = null;
}

public static void changeValue2(Student student)  {    
     student.name = "Lily";    
     student.age = 20;
}

  1. Javaでのいくつかのタイプの参照、および弱い参照の使用シナリオ?

  2. スレッドプールの分類、いくつかのコアパラメータを説明しますか?

  3. APKのパッケージングプロセスは何ですか?

  • aaptツールはリソースファイルをパックし、R.javaファイルを生成します
  • aidlツールはAIDLファイルを処理し、対応する.javaファイルを生成します
  • javacツールはJavaファイルをコンパイルし、対応する.classファイルを生成します
  • .classファイルをDavikVMでサポートされている.dexファイルに変換します
  • apkbuilderツールは、署名されていない.apkファイルを生成するためにパッケージ化されています
  • jarsignerは署名されていない.apkファイルに署名します
  • zipalignツールは署名された.apkファイルを整列します
  1. APKに署名する必要があるのはなぜですか?特定の署名メカニズムについて学びましたか?

apk開発者の身元を確認し、コンテンツの改ざんを防ぐために、Androidはapkのセキュリティを確保するために、一連のapk署名スキームを設計しました。つまり、開発者はパッケージ化時にapkに署名し、Androidシステムはapkのインストール時に対応する開発がありますユーザーのIDとコンテンツの正確さを検証するために、apkは検証に合格した後にのみインストールできます。署名プロセスと検証の設計は、非対称暗号化の概念に基づいています。
7.0より前のAndroidで使用されていた一連の署名スキーム:apkのルートディレクトリのMETA-INF /フォルダーに署名ファイルを生成し、インストール中にシステムのPackageManagerServiceで署名ファイルを確認します。
7.0以降、Androidは新しいV2署名スキームを提供します。apk(zip)圧縮ファイル形式を使用して、署名情報を保存するためのデータ領域が元のコンテンツ領域に追加され、インストール中にシステムに同じものが追加されます。署名の検証はPackageManagerServiceで実行されます。V2ソリューションはより安全になり、検証のインストールがますます速くなります。
もちろん、V2署名スキームには下位互換性があります。V2署名が使用されていない場合、デフォルトでV1署名スキームの検証プロセスになります。

  1. なぜdexを分割するのですか?SDK 21はdexを分割しませんが、すべてを直接ロードすることに問題はありますか?

通りすがりの神々から正しい答えを求めてください...

  1. 一般的なデザインパターンは何ですか?提供するJSエラー管理ソリューションで使用されているデザインパターンは何ですか?

  2. アルゴリズム-二分木層の次数トラバーサル、ノードの奇数層逆次トラバーサル、偶数層正次トラバーサル

  3. 今後3〜5年の計画は?

  4. あなたの強みは何だと思いますか?欠点は何ですか?

  5. 現在のランクと最近のパフォーマンスは何ですか

5面-部門TL

  1. 商品化部門に関連する事業紹介(商品化部門は障壁が高く、人材育成のコストが高く、他の事業よりも価値があり、事業戦略の知識を多く蓄積できることがコアとなるでしょう)、それから彼に質問をするように頼む

  2. 今後数年間の計画はありますか?人生の計画は何ですか?

  3. あなたの強みは何だと思いますか?欠点は何ですか?

  4. 現在のランクと最近のパフォーマンスは何ですか

  5. なぜあなたにそのような良いパフォーマンスを与えるのですか?

  6. 他に機会はありますか?アリインタビューの状況

6面-ビッグボス

  1. アルゴリズム-配列の挿入、拡張を検討

  2. プロジェクトで遭遇するより困難なことは何ですか?

  3. 美団でのあなたのビジネスは何ですか?

  4. 今後数年間の計画は?

  5. あなたの強みは何だと思いますか?欠点は何ですか?

  6. 現在のランクと最近のパフォーマンスは何ですか

【HR面】

  1. 学部と大学院の専攻はどちらもハードウェアに偏っていますが、関連するソフトウェアの経験はありますか?

  2. 大学院生は学部生ですか、それとも自分で試験を受けますか?

  3. Meituanに行く前にAndroid開発の経験はありますか?

  4. なぜ美団に行くことにしたのですか?なぜ北京に来ることを選ぶのですか?

  5. なぜ転職するのですか?今後の仕事に期待することは何ですか?

ゴールデンセンテンス:今、私はテクノロジーの成長のボトルネックに遭遇しました、そして私はいつもあなたの会社を賞賛してきました。

  1. あなたの現在のランクの最近のパフォーマンスは何ですか?

  2. こんなに良いパフォーマンスで、機会を見るために部門を変えるために美団を選んでみませんか?

  3. いくつかのプロモーションでのパフォーマンスのハイライトは何でしたか?

  4. 家はどこにありますか?家に帰ってそこで開発する計画はありますか?

  5. 快手のような就職の機会をもう一度見たいですか?

  6. アリの現在のインタビューの進捗状況と状況について質問する

  7. 希望給与

良い面接の驚きを行い、学習の方向性を計画する方法は?

面接の質問セットは、欠員を見つけて埋め、方向性と的を絞った学習を行い、将来の大規模な工場への参入に備えるのに役立ちます。しかし、もう一度読んだだけの場合は、勉強したり掘り下げたりしないでください。次に、この面接の質問はあなたにとって限られた助けになります。結局、私たちは話すために上級技術レベルに頼らなければなりません。

インターネット上にはAndroidを学ぶための資料がたくさんありますが、学んだ知識が構造化されておらず、問題が発生した場合は、味わって徹底的に勉強するのをやめるだけでは、真の技​​術向上を実現することは困難です。最初に学習計画を作成し、学習計画に従って知識ポイントを関連付けて、体系的な知識システムを形成することをお勧めします。

学習の方向性は簡単に計画できますが、断片的な学習だけでは、自分自身を向上させるのは非常に遅くなります。

同時に、2020年にByteDanceを収集して整理し、Tencent、Ali、Huawei、Xiaomiなどの企業からのインタビューの質問を整理し、インタビューの要件と技術的なポイントを大規模な知識のコンテキストとブランチの詳細を含む、包括的な「Androidアーキテクト」インタビューXmind(実際、多くのエネルギーを費やすことが予想よりも優れています)

画像

これらの技術フレームワークを構築するときに、システムの高度な高度なチュートリアルも整理しました。これは、私自身の断片化された学習効果よりもはるかに優れています。

画像

クリック:「Androidアーキテクチャビデオ+ BATインタビュースペシャルPDF +スタディノート」は無料で入手できます〜

インターネット上にはAndroidを学ぶための資料がたくさんありますが、学んだ知識が構造化されておらず、問題が発生した場合は、味わって徹底的に勉強するのをやめるだけでは、真の技​​術向上を実現することは困難です。この体系的な技術システムが方向性の参考になることを願っています。

+スタディノート "**)(https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC% 9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF% E9%AB%98%E8%96%AA%EF%BC%81.md)は無料で入手できます〜

インターネット上にはAndroidを学ぶための資料がたくさんありますが、学んだ知識が構造化されておらず、問題が発生した場合は、味わって徹底的に勉強するのをやめるだけでは、真の技​​術向上を実現することは困難です。この体系的な技術システムが方向性の参考になることを願っています。

おすすめ

転載: blog.csdn.net/fjfdhduuffududu/article/details/112783009