序文
最近、多くの人がバックグラウンドでプライベートメッセージで私に尋ねてきました:私は数年Androidエンジニアでしたが、今は非常に混乱しています。辞めたいのですが、目標がありません。どちらの方向かわかりません。次に向かうべきです。
確かに、春節の後、それが転職であろうとエネルギーの蓄積を学ぶことであろうと、誰もが新年の始まりの準備をしています、すべてが新しい始まりです。最大のプログラミング言語であるAndroidは、ユーザー数が最も多く、成熟度が最も高いです。もちろん、競争のプレッシャーは比較的大きくなります。
一般に「ゴールデンスリーシルバーフォー」として知られているこの転職シーズンでは、多くの人々が引っ越す準備ができており、より高い給料を手に入れたい、より大きなプラットフォームに行きたいと思っています...
しかし実際には、ほとんどのAndroidエンジニアにとって、体系的で包括的な知識システムは実際にはありません。したがって、それらの90%は技術面接になります。
次に、多くの大きな工場との古いドライバーのインタビューの波のインタビュー知識ポイントの要約を共有しましょう、そして行きましょう!
大廠インタビューの質問の要約
要約:
「Androidの基本的な知識は優れており、学習能力も優れています。しかし、基本的な知識は比較的弱く、一部の概念と論理は明確ではありません。」この文をありがとうChunlin。
大きな工場に入りたいですか?これらの知識ポイントを補ってください!
Java
Javaの基本
- ポリモーフィズム(JD)を構成する要素
- オーバーロードと書き換え(JD)の違い
- 抽象クラスとインターフェースの違い
- 一般的なワイルドカードスーパーの役割と違いは
- Javaメモリモデル(Xiaomi)
- 文字列を最終的に設計する必要があるのはなぜですか(バイトビート)
- String StringBuffer StringBuilderの文字列操作の効率。ここでは、主にStringがメモリ内でどのように作成されるかを調べます(バイトビート)。
マルチスレッド関連
- ロックの種類は何ですか
- CASロックフリープログラミングの原理
- ReentrantLockの実現原理
- AQSの原則(Xiaomi、Jingdong)
- Synchronizedの原理とReentrantLock(360)との違い
- JDK1.8(JD)の後に同期された最適化は何をしましたか
- 同期された静的ロックと非静的ロックの違いと範囲(Xiaomi)
- 揮発性の役割と同期との違い(Xiaomi、Jingdong)
- 睡眠と待機の違い
- 睡眠は中断可能ですか(Xiaomi)
- スレッド間の通信方法(Xiaomi)
- スレッドのライフサイクル
- スレッドプールの関連原則
- メインメモリとワーキングメモリの違い
仮想マシン関連
- JVM DVM ART(360)の違い
- クラスの読み込みプロセス
- 親の委任モデル
デザインパターン
- 一般的に使用されるデザインパターンについて話す
- 手書きオブザーバーモード(多くの企業は手書きが必要です)
その他
- GCプロセスとGCアルゴリズムを理解していますか?
- Java参照型と違い
- HashMapの原則(Jingdong)
- HashMap1.7と1.8の違い
- ConcurrentHashMapの原則
Androidの基本
アクティビティ
- アクティビティ開始モード、違い
- アクティビティが状態を保存する方法
放送
- 放送分類
- 放送のしくみ
- onReceiveでスレッドを開始できますか?どうなりますか?
サービス
- IntentServiceの動作原理
ContentProvider
- 動作原理
AndroidVIew関連
ビューをカスタマイズするプロセス
- ビューの測量およびマッピングプロセス
- 幅と高さはonResumeで測定できますか
ビューのイベント配信メカニズム(58 Jingdongには他にもいくつかの一般的な質問があります)
- onTouchListener onTouchEventonClick実行順序
- イベントonTouchEventがfalseを返した場合にインターセプトする方法、onClickは引き続き実行されます。
- onTouchはtrueを返しますが、onClickは実行されますか?
アニメーション(車と家)
- アニメーションの分類と違い
- プロパティアニメーションの原理
- 属性アニメーションと通常のアニメーションの違いは何ですか
- 内挿推定量の違い
統合フレームワーク部分
- RxJavaの原則
- subscribeOnとObserveOnの複数の操作は成功しますか?
- マップフラットマップなどの違い。
- 一部の演算子の使用について質問します
- 画像読み込みフレーム
- グライドとピカソの違い
- グライドの仕組み、キャッシュの実装方法など。
Android関連コンポーネントの原則
ハンドラー(インタビュー、バイトビート、Xiaomiなどにたくさんの質問があります)
- ハンドラーの基本原則
- メッセージ処理がない場合のハンドラーは、ブロッキングまたは非ブロッキングです
- handler.post(Runnable)runnableの実行方法
- ハンドラーのコールバックとhandlemessageは存在しますが、コールバックがtrueを返した場合、handleMessageは実行されますか?
- ルーパーの原理
- 子スレッドでLooperが作成される方法
- ルーパー、ハンドラー、およびスレッド間の関係。たとえば、スレッドには、複数のハンドラーに対応できる複数のルーパーを含めることができます。
- ルーパーは無限ループですが、なぜANRが発生しないのですか?
- ThreadLocalの原理とそれがLooperでどのように適用されるか
AsyncTask
- AsyncTaskの原則
- AsyncTaskのタスクはシリアルまたはパラレルですか
- HandlerThreadの原則
Androidの最適化関連
- メモリリークルックアップ
- ANRルックアップ
- CPU変動
- メモリスラッシング
- 現在のプロジェクトでパフォーマンス最適化分析がどのように実行されるかを尋ねます
Androidその他
- プロセス通信にどのような原則を使用しましたか(Xiaomi、バイトビート)
- バインダーの原理(さらに質問があります)
- アクティビティプロセス分析を開始します
- ビットマップ関連、メモリ最適化など(コウオウミュージック)
- MVP MVVMMVCとMVPの長所と短所について話すプロジェクトの違い
- コールドスタートとホットスタートのコンセプト(コウオウミュージック)
インターネット
- TCPスリーウェイハンドシェイク
- ソケットの使用
プログラマーの道-学習経験の要約共有
プログラマー業界は日々変化しています。テクノロジーシステムは急速に更新されています。新しいテクノロジーと新しいフレームワークは無限の流れの中で出現しています。すべてのテクノロジーは底なしの穴のようなものです。学べば学ぶほど、理解できなくなります。もっとあなたが理解していない、そして必要性もっと学ぶ。
したがって、この業界を選択すると、すべての人の足跡をたどることを学び続ける必要があり、優れたプログラマーになるには、適切な方法を継続し、適切な目標を設定する必要があります。
以下は、私が数年間の私の仕事から要約した学習方法のいくつかです:
1.公式文書を読む
文書を読んで、文書を読んで、文書を読んで、重要なことを3回言ってください!!!
ある程度の開発経験を持つプログラマーの方は、公式ドキュメントを読むことを強くお勧めします。!!
初心者の方は、この段階でドキュメントを読むのは非常に面倒ですが、公式ドキュメントを読むことを強くお勧めしますが、ビデオチュートリアルや本で学ぶことができます。始めてからゆっくり読んでください。 。
2.公式文書が完成しました、詳細を学ぶ方法について話しましょう
1.体系的な学習のためのビデオを見る
過去数年間のCrudの経験から、私は本当に新人の戦闘機であることがわかりました。また、Crudのおかげで、私の技術は比較的断片化されており、体系化するのに十分な深さではないため、もう一度勉強する必要があります。 。私に欠けているのは、システムの知識、貧弱な構造フレームワークとアイデアです。そのため、ビデオを通じて学ぶことは、より良く、より包括的です。ビデオ学習に関しては、個人がステーションBでの学習を推奨できます。ステーションBには多くの学習ビデオがあります。唯一の欠点は、無料で簡単に古くなることです。
また、私は自分でいくつかのビデオを集めました。必要に応じてそれらをあなたと共有することができます。
2.知識を体系的に整理し、準備金を改善する
クライアント開発には非常に多くの知識ポイントがあり、インタビューにはまだほとんど何もありません。したがって、これらの知識ポイントにどれだけ準備しているかを確認するためだけに、面接のための他のトリックはありません。したがって、面接に出かけるときは、レビューでどの段階に到達したかを確認することをお勧めします。
- アーキテクトに不可欠なスキル:詳細なJavaジェネリック+単純な言語でのアノテーション+並行プログラミング+データ送信とシリアル化+ Java仮想マシンの原則+リフレクションとクラスの読み込み+動的プロキシ+効率的なIO
- Androidの高度なUIとFrameWorkのソースコード:高度なUIプロモーション+フレームワークカーネル分析+ Androidコンポーネントカーネル+データの永続性
- 360°の全体的なパフォーマンスチューニング:設計アイデアとコード品質の最適化+プログラムパフォーマンスの最適化+開発効率の最適化
- オープンソースフレームワーク設計アイデアの解釈:ホットリペア設計+プラグインフレームワーク解釈+コンポーネントフレームワーク設計+画像読み込みフレームワーク+ネットワークアクセスフレームワーク設計+ RXJavaレスポンシブプログラミングフレームワーク設計+ IOCアーキテクチャ設計+ AndroidアーキテクチャコンポーネントJetpack
- NDKモジュール開発: NDK基本知識システム+基礎となる画像処理+オーディオおよびビデオ開発
- WeChatミニプログラム:ミニプログラムの紹介+ UI開発+ API操作+ WeChatドッキング
- ハイブリッド開発とFlutter: Html5プロジェクトの戦闘+ Flutter Advanced
知識が整理されたら、空席を確認して記入する必要があるので、これらの知識ポイントについては、手元にたくさんの電子書籍やメモを用意しました。これらのメモは、各知識ポイントの完全な要約を提供します。
メインコンテンツ:
Javaの基本(★★)
- オブジェクト指向思考
- ポリモーフィズム
- 例外処理
- データの種類
- Java IO
- セットする
- Javaマルチスレッド
Java Advanced(★★)
- Javaでのリフレクション
- Javaの動的プロキシ
- Javaのデザインパターンとリサイクルメカニズム
- Javaのクラスローダー
Androidの基本(★★★)
- Androidの基礎知識
- アクティビティ
- サービス
- BroadCastReceiver
- ContentProvider&Database
- Androidでのレイアウト
- リストビュー
- JNI&NDK
- Androidでのネットワークアクセス
- 意図
- 断片
Android Advanced(★★★)
- Androidのパフォーマンスの最適化
- Android画面の適応
- AIDL
- カスタムコントロール
- Androidでのイベント処理
- Androidの署名
- Androidのアニメーション
- ネットワークプロトコル
- その他
3.ソースコードを読み、実際の戦闘ノートを読み、神の考えを学びます
「プログラミング言語はプログラマーが表現する方法であり、アーキテクチャーはプログラマーの世界に対する認識です。」したがって、プログラマーがアーキテクチャーをすばやく理解して学習したい場合は、ソースコードを読むことが不可欠です。ソースコードを読むことは、問題を解決し、物事を理解することであり、さらに重要なことは、ソースコードの背後にあるアイデアを参照することです。プログラマーは、何千行ものソースコードを読み、何千もの方法を練習します。
主にWeChatMMKVソースコード、AsyncTaskソースコード、Volleyソースコード、Retrofitソースコード、OkHttpソースコードなどが含まれます。
4.面接の前夜に、スプリントの質問
面接前1週間以内に全力疾走を開始できます。質問をブラッシングするときは、テクノロジーが最優先であり、アルゴリズムは並べ替えなどの基本であり、知的質問は、学校の新入生でない限り、通常は質問されないことに注意してください。
面接の質問に関して、私はあなたがお互いから学ぶのを助けるために一連の体系的な面接の質問を個人的に準備しました:
ドキュメントの読み方がわかったので、たくさんの学習資料を読んだ後、他の方法で学ぶ必要はありませんか?
答えは間違いなくノーです!!!
上記の教材と比較して、私たち自身の状況に応じて、追加の本やチュートリアルも勉強する必要があります。
いつも本を読みたくないと感じる人もいますが、私の方法は、毎日20ページ以上の本を読むなど、特定の本を読むときに自分自身に小さな目標を設定して、あなたも学ばないようにすることです。毎日たくさん。不安になりやすいです。もちろん、自分の状況に合わせて1日あたりの読書量を設定することもできます。1日あたりの読書量を20ページで計算すると、500ページの本は1日未満で完成します。月。
以下は、最も主流の中級および上級上級の本をまとめたものです。興味のある方はブックマークして参考にしてください〜
中級から上級者は、次の本を読むことをお勧めします。
「AndroidfromBeginner to Master(with CD)」、
「First Line of Code 2 Android(Second Edition)」、Tomorrow Science and Technology編、「
Advanced Android Development from Little Worker to Expert」、He Honghui、
「The Light of Advanced Android 「LiuWangshu
」「Androidの開発を探求するアート」、RenYugang
「Androidヒーロー
」XuYisheng 「クレイジーなAndroid配布物」ギャング
Android Advanced Advanced
Advanced Advancedには、主にデザインパターン、Java言語、パフォーマンスチューニング、データ構造アルゴリズム、アーキテクチャ、NDK、その他の関連書籍が含まれます。大きな工場に入る予定の友達にもオススメ!
デザインパターンに関する本:
「Androidソースコードデザインパターンの分析と実際の戦い第2版」
「O'Reilly:ヘッドファーストデザインパターン(中国版)」
「デザインパターン-再利用可能なオブジェクト指向ソフトウェアの基盤」
Androidに密接に関連する言語の本:
「Java仮想マシンの詳細な理解」
「AndroidGradle権限ガイド」
「実用的なGradle」
「Kotlinプログラム開発の概要」
関連するパフォーマンスの最適化:
「モバイルAPPパフォーマンスの評価と最適化」
「Androidアプリケーションパフォーマンス最適化のベストプラクティス」
「TencentAndroid自動テストプラクティス」
「Androidモバイルパフォーマンスプラクティス」
「高性能Androidアプリケーション開発」
データ構造はアルゴリズムに関連しています。
「プログラミングパール(第2版改訂版)」
「プログラマーコードインタビューガイド:IT有名企業のアルゴリズムとデータ構造の問題のベストソリューション」
「アルゴリズムの美しさ」
関連する構造:
「クリーンコード」
「クリーンコード」「プログラマーのプロフェッショナル品質クリーンコーダー」
「既存のコードの設計を改善するためのリファクタリング」
NDK開発に関連する書籍:
「AndroidC ++ Advanced Programming:Using NDK」
面接関連の本:
「TechnicalEye:Alibaba Technical Written TestExperience」
「TheBeautyof Programming:Microsoft Technical Interview Experience」
「SwordFinger Offer:Famous Enterprise Interviewer Explains Common Programming Questions(Second Edition)」
「HRが教えてくれない面接スキル」
プログラマーを傷つけるわけにはいかない」
最後に、上記のコンテンツは、フルバージョンが必要なすべての人、友人と無料で共有できます。すべてのコンテンツを表示するには、ここをクリックしてください。
いくつかの言葉:
トピックはランダムであり、知識は無限であるため、面接は本当に迷惑です。多くの答えが出るまで基準はありません。上記のMV *と同様に、上記の理解にはまだ問題があるかもしれませんが、アーキテクチャは死んでいると思います。最適なものが最適です。
しかし、1つは、面接も一種の学習であり、少なくとも自分の弱点がどこにあるかを知ることができるということです。