Android面接問題-校招-京東
1 Fragment宣言サイクル
OnCreateViewは、非静的ビューを初期化してビューを作成し、呼び出し元に戻すために使用されます.
OnActivity Createは、Fragment依存のActivityのonCreateが戻ってきたときに呼び出されます.
Fragment拡張説明:android.app.Fragmentは主にFragment androidの定義に用いる.app.FragmentManagerは主にActivityでFragment androidを操作するために使用する.app.FragmentTransactionはいくつかの列Fragment操作の原子性を保証して、事務という言葉を熟知して、きっと理解することができます~transaction.add()の後にActivityにFragmentを追加する
a、例えば:FragmentAのEditTextにいくつかのデータを記入しました.FragmentBに切り替えたとき、Aにデータが見えるようにしたいなら、hideとshowが似合います.つまり、ユーザー操作を保持したいパネルは、hideとshowを使用することができます.もちろん、newインスタンスでnull以外の判断をしないでください.b、例えば:私はユーザーの操作を保留したくないので、remove()を使ってadd()を使うことができます.あるいはreplace()とremoveを使用してaddは同じ効果です.c、remove、detachにはわずかな違いがあり、スタックのロールバックを考慮しない場合、removeはFragmentインスタンス全体を破棄しますが、detachはビュー構造を破棄するだけで、インスタンスは破棄されません.では、両者はどのように取捨選択して使うのでしょうか.現在のActivityがずっと存在する場合は、ユーザー操作を保持したくない場合はdetachを優先的に使用できます.
2、FragmentとActivityの通信すべてのFragmentがActivityに依存しているため、通信は複雑ではありません.a、Activityに自分が管理するFragmentの参照が含まれている場合は、すべてのFragmentのpublicメソッドbに直接アクセスし、ActivityにFragmentの参照が保存されていない場合は、大丈夫です.各Fragmentには一意のTAGまたはIDがあります.getFragmentManagerでfindFragmentByTag()またはfindFragmentById()は、任意のFragmentインスタンスを取得してから操作します.c.FragmentではgetActivityで現在バインドされているActivityのインスタンスを取得し、操作することができます.
3 Fragmentが持つ主な参照Animator Bundleシーケンス化Parcelableプロセス間でデータを転送するためのFragmentManagement Impl FragmentHostCallbackこの参照によりFに関連するActivityを取得できる
2 JAVAでの同期操作
1 Synchronized Synchrnized.クラスに鍵をかけたthisはこのクラスのインスタンスに対するロック単利モードの1回の判断であり,方法の前にstatic Synchronizedを加えることは2回の判断と同様である.
実はSynchronizedも同期方法と同期コードブロック2 volatileの強制値の変更に分けてメモリの中で発生します.しかし、自身の操作には原子性が備わっていない.
3 ReentrantLock再ロックReentrantLock=new ReentrantLock()Lockを作成する必要がある.lock(); lock.unLock(); 4 ThreadLocalの機能は同期操作も可能です
3強参照弱参照ソフト参照虚参照
String weak Soft
ソフトリファレンスの強度が弱いリファレンスよりも大きい場合は、リファレンスキューと組み合わせてソフトを使用してメモリが足りない場合に回収し、弱いスキャンで回収します.
OOMの予防とメモリリークの検出に役立ちます
4 OOMとメモリリーク
メモリリーク:使用しました.回収されるはずですが、ありません.例えば、単利長寿命サイクルを正しく使用していない場合は、短寿命サイクルを参照しています.convertViewを使用していません.カーソルを閉じていません.recycle()Bitmapを使用していません.
解決方法:Acgtivity漏洩はLeakCanaryコードの中のMATを通じて見ることができて、原理は新しくて、回収して、上昇していない分析の実戦を見ます:hprofを生成してフォーマットMatを回転して開けてSuspectを見てあるいは2つの図を生成して対比します
OOMには、自分のロードマップのサイズがアプリケーション割り当てのサイズを超えているものと、本来十分なものの2種類がありますが、メモリが漏れているため、残りのスペースが不足しています.
5 JAVAのGC JVMスタック:新生代:新たに生成された全ての対象旧世代を記憶する:新生代の数回のGC後、永久世代に移入する:記憶類と方法1.edenがいっぱいになるとyoung GCがトリガーされます.2.young GCは2つのことをします:1、一部の役に立たないobjectを取り除きます;二、古いものが引用されているobjectをsurviorに送り、次のGCを何回か待ってからsurvivorをoldに入れます.3.oldがいっぱいになるとfull GCがトリガーされます.full GCはメモリを消費し、old、youngのゴミの大部分を回収します.このときユーザスレッドはブロックされます.
6 ISO TCP/IPの7層アーキテクチャISOを上から下へ
PS:TCP/IPの信頼性の高い伝送も伝送層によって実現される
7ついでに3回の握手でACK FINなどのフィールドサーバデータのシーケンス番号とクライアントデータのシーケンス番号は関係ありません.8 Androidでよく使われるデザインモデル:1単利2工場BitmapFactoryは、パラメータに応じて異なるサブクラスインスタンス3アダプタAdapterを返し、1つのクラスのインタフェースをクライアントが期待する別のインタフェースに変換し、もともと一致せずに一緒に働けない2つのクラスを一緒に動作させる.
4オブザーバーモードonClickListener
9 JAVAマルチスレッドの実現方法:1 Thread 2実現Runnable 3実現Callable RunnableとCallableの違いは,(1)Callableで規定する方法はcall()であり,Runnableで規定する方法はrun()である.(2)Callableのタスクは実行後に値を返すことができ,Runnableのタスクは値を返すことができない(3)callメソッドは異常を投げ出すことができ,runメソッドは(4)Callableタスクを実行してFutureオブジェクトを得ることができ,非同期計算の結果を表す.計算が完了するかどうかを確認する方法を提供し、計算の完了を待機し、計算の結果を取得します.Futureオブジェクトでは、タスクの実行状況を把握したり、タスクの実行をキャンセルしたり、実行結果を取得したりできます.
4 ExecutorService手順1:スレッドプールの作成:
手順2:RunnableオブジェクトまたはCallableオブジェクトを使用して、ExecutorServiceオブジェクトにタスクをコミットします.
10 Handler:スレッド間通信はプロセス間通信はできません
10 WindowManager関連
1 Viewサブクラスを新規作成する場合はcontextパラメータを渡す必要があります.このパラメータはthisによってButton btn=new Button(AdminActivity.this)を取得できます.2 ActivityはgetWindowManager()でWindowManager 3 WindowManagementを取得できます.LayoutParamsは、ワイドハイトデータ4 LPを設定したり、FLAG、Type(Windowレベル、数字が大きいほど優先的に表示)などを設定したりすることができます.
5 addView update removeなど3つの方法はView Managerです.WindowManager extends ViewManager WindowManagerのサブクラスWMImplで実現され、メソッドはすべてWMGlobleで完了し、
11 Android 6.0重大な変更:動的に権限を取得します.インストール時にユーザーが同意しない場合は、使用時に弾枠もあります.
7.0 DayDreamマルチウィンドウマルチタスク同一タスクバンドル通知
12一時変数:i++
13 finalリファレンスは可変ではありませんが、リファレンスされたアドレスに格納されているものは可変です.Staticインスタンス共有クラス
定数:メソッド1インタフェース(Interface)を使用する中変数のデフォルトはstatic finalの特性です.
方法2 Java 5.0に導入されたEnumタイプを採用した.
方法3は,通常クラスでstatic finalを用いて変数を修飾する方法を採用した.
14スクリーン回転とデータストレージの関係をどのように処理しますか?
15 ClassLoader Class.forName javaのclass.forNameとclassLoaderは、クラスをロードするために使用できます.前者はクラスを除く.classファイルはjvmにロードされるほか、クラスを解釈し、クラスのstaticブロックを実行します.classLoaderはただ一つのことをします.classファイルはjvmにロードされ、staticの内容は実行されず、newInstanceでのみstaticブロックが実行されます.Class.forName(name,initialize,loader)パラメータ付き関数はstaticブロックをロードするかどうかを制御することもできます.またnewInstance()メソッドを呼び出した場合のみ呼び出し構造関数を使用してクラスのオブジェクトを作成します.
16ポリシー・モード
ポリシー・モードは、オブジェクトの動作モードに属します.各アルゴリズムは、共通のインタフェースを有する独立したクラスにカプセル化され、互いに置換できるようにするアルゴリズムのセットを意図している.ポリシー・モードにより、アルゴリズムはクライアントに影響を及ぼさずに変化することができる.
PriceはStrategyインタフェースの参照を含み、構造関数でこの参照を初期化します.Strategyインタフェースには3つの実装クラスがあり、A B Cクライアントの動作:Strategy a=new StrategyA()Price p=new Price(a);p.calCount()はStrategyのcalCountメソッドを呼び出し、このメソッドの具体的な実装はStrategyA()である.
上記の例から、ポリシー・モードはアルゴリズムのみをカプセル化し、新しいアルゴリズムを既存のシステムに挿入し、古いアルゴリズムがシステムから「退職」する方法を提供し、ポリシー・モードはいつどのアルゴリズムを使用するかを決定しないことがわかる.どのような場合にどのアルゴリズムを使用するかはクライアントによって決定される.
OnCreateViewは、非静的ビューを初期化してビューを作成し、呼び出し元に戻すために使用されます.
OnActivity Createは、Fragment依存のActivityのonCreateが戻ってきたときに呼び出されます.
Fragment拡張説明:android.app.Fragmentは主にFragment androidの定義に用いる.app.FragmentManagerは主にActivityでFragment androidを操作するために使用する.app.FragmentTransactionはいくつかの列Fragment操作の原子性を保証して、事務という言葉を熟知して、きっと理解することができます~transaction.add()の後にActivityにFragmentを追加する
a、例えば:FragmentAのEditTextにいくつかのデータを記入しました.FragmentBに切り替えたとき、Aにデータが見えるようにしたいなら、hideとshowが似合います.つまり、ユーザー操作を保持したいパネルは、hideとshowを使用することができます.もちろん、newインスタンスでnull以外の判断をしないでください.b、例えば:私はユーザーの操作を保留したくないので、remove()を使ってadd()を使うことができます.あるいはreplace()とremoveを使用してaddは同じ効果です.c、remove、detachにはわずかな違いがあり、スタックのロールバックを考慮しない場合、removeはFragmentインスタンス全体を破棄しますが、detachはビュー構造を破棄するだけで、インスタンスは破棄されません.では、両者はどのように取捨選択して使うのでしょうか.現在のActivityがずっと存在する場合は、ユーザー操作を保持したくない場合はdetachを優先的に使用できます.
2、FragmentとActivityの通信すべてのFragmentがActivityに依存しているため、通信は複雑ではありません.a、Activityに自分が管理するFragmentの参照が含まれている場合は、すべてのFragmentのpublicメソッドbに直接アクセスし、ActivityにFragmentの参照が保存されていない場合は、大丈夫です.各Fragmentには一意のTAGまたはIDがあります.getFragmentManagerでfindFragmentByTag()またはfindFragmentById()は、任意のFragmentインスタンスを取得してから操作します.c.FragmentではgetActivityで現在バインドされているActivityのインスタンスを取得し、操作することができます.
3 Fragmentが持つ主な参照Animator Bundleシーケンス化Parcelableプロセス間でデータを転送するためのFragmentManagement Impl FragmentHostCallbackこの参照によりFに関連するActivityを取得できる
2 JAVAでの同期操作
1 Synchronized Synchrnized.クラスに鍵をかけたthisはこのクラスのインスタンスに対するロック単利モードの1回の判断であり,方法の前にstatic Synchronizedを加えることは2回の判断と同様である.
実はSynchronizedも同期方法と同期コードブロック2 volatileの強制値の変更に分けてメモリの中で発生します.しかし、自身の操作には原子性が備わっていない.
3 ReentrantLock再ロックReentrantLock=new ReentrantLock()Lockを作成する必要がある.lock(); lock.unLock(); 4 ThreadLocalの機能は同期操作も可能です
3強参照弱参照ソフト参照虚参照
String weak Soft
ソフトリファレンスの強度が弱いリファレンスよりも大きい場合は、リファレンスキューと組み合わせてソフトを使用してメモリが足りない場合に回収し、弱いスキャンで回収します.
OOMの予防とメモリリークの検出に役立ちます
4 OOMとメモリリーク
メモリリーク:使用しました.回収されるはずですが、ありません.例えば、単利長寿命サイクルを正しく使用していない場合は、短寿命サイクルを参照しています.convertViewを使用していません.カーソルを閉じていません.recycle()Bitmapを使用していません.
解決方法:Acgtivity漏洩はLeakCanaryコードの中のMATを通じて見ることができて、原理は新しくて、回収して、上昇していない分析の実戦を見ます:hprofを生成してフォーマットMatを回転して開けてSuspectを見てあるいは2つの図を生成して対比します
OOMには、自分のロードマップのサイズがアプリケーション割り当てのサイズを超えているものと、本来十分なものの2種類がありますが、メモリが漏れているため、残りのスペースが不足しています.
5 JAVAのGC JVMスタック:新生代:新たに生成された全ての対象旧世代を記憶する:新生代の数回のGC後、永久世代に移入する:記憶類と方法1.edenがいっぱいになるとyoung GCがトリガーされます.2.young GCは2つのことをします:1、一部の役に立たないobjectを取り除きます;二、古いものが引用されているobjectをsurviorに送り、次のGCを何回か待ってからsurvivorをoldに入れます.3.oldがいっぱいになるとfull GCがトリガーされます.full GCはメモリを消費し、old、youngのゴミの大部分を回収します.このときユーザスレッドはブロックされます.
6 ISO TCP/IPの7層アーキテクチャISOを上から下へ
PS:TCP/IPの信頼性の高い伝送も伝送層によって実現される
7ついでに3回の握手でACK FINなどのフィールドサーバデータのシーケンス番号とクライアントデータのシーケンス番号は関係ありません.8 Androidでよく使われるデザインモデル:1単利2工場BitmapFactoryは、パラメータに応じて異なるサブクラスインスタンス3アダプタAdapterを返し、1つのクラスのインタフェースをクライアントが期待する別のインタフェースに変換し、もともと一致せずに一緒に働けない2つのクラスを一緒に動作させる.
4オブザーバーモードonClickListener
9 JAVAマルチスレッドの実現方法:1 Thread 2実現Runnable 3実現Callable RunnableとCallableの違いは,(1)Callableで規定する方法はcall()であり,Runnableで規定する方法はrun()である.(2)Callableのタスクは実行後に値を返すことができ,Runnableのタスクは値を返すことができない(3)callメソッドは異常を投げ出すことができ,runメソッドは(4)Callableタスクを実行してFutureオブジェクトを得ることができ,非同期計算の結果を表す.計算が完了するかどうかを確認する方法を提供し、計算の完了を待機し、計算の結果を取得します.Futureオブジェクトでは、タスクの実行状況を把握したり、タスクの実行をキャンセルしたり、実行結果を取得したりできます.
4 ExecutorService手順1:スレッドプールの作成:
ExecutorService pool = Executors.newCachedThreadPool();
手順2:RunnableオブジェクトまたはCallableオブジェクトを使用して、ExecutorServiceオブジェクトにタスクをコミットします.
Future submit(Callable task);
10 Handler:スレッド間通信はプロセス間通信はできません
10 WindowManager関連
1 Viewサブクラスを新規作成する場合はcontextパラメータを渡す必要があります.このパラメータはthisによってButton btn=new Button(AdminActivity.this)を取得できます.2 ActivityはgetWindowManager()でWindowManager 3 WindowManagementを取得できます.LayoutParamsは、ワイドハイトデータ4 LPを設定したり、FLAG、Type(Windowレベル、数字が大きいほど優先的に表示)などを設定したりすることができます.
5 addView update removeなど3つの方法はView Managerです.WindowManager extends ViewManager WindowManagerのサブクラスWMImplで実現され、メソッドはすべてWMGlobleで完了し、
11 Android 6.0重大な変更:動的に権限を取得します.インストール時にユーザーが同意しない場合は、使用時に弾枠もあります.
7.0 DayDreamマルチウィンドウマルチタスク同一タスクバンドル通知
12一時変数:i++
13 finalリファレンスは可変ではありませんが、リファレンスされたアドレスに格納されているものは可変です.Staticインスタンス共有クラス
定数:メソッド1インタフェース(Interface)を使用する中変数のデフォルトはstatic finalの特性です.
方法2 Java 5.0に導入されたEnumタイプを採用した.
方法3は,通常クラスでstatic finalを用いて変数を修飾する方法を採用した.
14スクリーン回転とデータストレージの関係をどのように処理しますか?
15 ClassLoader Class.forName javaのclass.forNameとclassLoaderは、クラスをロードするために使用できます.前者はクラスを除く.classファイルはjvmにロードされるほか、クラスを解釈し、クラスのstaticブロックを実行します.classLoaderはただ一つのことをします.classファイルはjvmにロードされ、staticの内容は実行されず、newInstanceでのみstaticブロックが実行されます.Class.forName(name,initialize,loader)パラメータ付き関数はstaticブロックをロードするかどうかを制御することもできます.またnewInstance()メソッドを呼び出した場合のみ呼び出し構造関数を使用してクラスのオブジェクトを作成します.
16ポリシー・モード
ポリシー・モードは、オブジェクトの動作モードに属します.各アルゴリズムは、共通のインタフェースを有する独立したクラスにカプセル化され、互いに置換できるようにするアルゴリズムのセットを意図している.ポリシー・モードにより、アルゴリズムはクライアントに影響を及ぼさずに変化することができる.
PriceはStrategyインタフェースの参照を含み、構造関数でこの参照を初期化します.Strategyインタフェースには3つの実装クラスがあり、A B Cクライアントの動作:Strategy a=new StrategyA()Price p=new Price(a);p.calCount()はStrategyのcalCountメソッドを呼び出し、このメソッドの具体的な実装はStrategyA()である.
上記の例から、ポリシー・モードはアルゴリズムのみをカプセル化し、新しいアルゴリズムを既存のシステムに挿入し、古いアルゴリズムがシステムから「退職」する方法を提供し、ポリシー・モードはいつどのアルゴリズムを使用するかを決定しないことがわかる.どのような場合にどのアルゴリズムを使用するかはクライアントによって決定される.