JavaとAndroidの基本
- JVM仮想マシン
- messageQueueはUIスレッドをブロックしますか
- オブジェクトロックとクラスロック
- ジグザグプリントツリー
- 他にも覚えていないことがいくつかあります。それは、主に両面に感銘を受けたからです。
フラッターとダーツ
- dartは値または参照によって渡されます
- ウィジェットと要素およびRenderObjectの関係
- ウィジェットのルートノード
- mixin extends implementの関係(extends以外は、私は使用していません...)
- jvmメモリモデル(これは私を同情したインタビュアーであると感じ、私は何も尋ねないことを確認する=。=)
- 将来およびマイクロタスクの実行順序
- dartでの使用方法(基本的に使用されない...)
- 待つ(決して使用されない...)
正直言って、1、3、6番目に準備したものは答えるべきですが、1か月以上Flutterに触れていなかったので、忘れていました。。。後の世代に役立つことを期待して、両面の回答を後で書き留めます。また、GitHubやブログのメンテナンスも非常に重要で、私のようなデモは手書きで、削除した人は直接GGです。。
1. dartが値で渡されるか、参照で最初に渡されるかに関係なく、dartは参照によるものです。最初にコードを見てください
main(){
Test a = new Test(5);
print("a的初始值为:${a.value}");
setValue(a);
print("修改后a的值为: ${a.value}");
}
class Test{
int value = 1;
Test(int newValue){
this.value = newValue;
}
}
setValue(Test s){
print("修改value为100");
s.value = 100;
}
出力は次のとおりです。
a的初始值为:5
修改value为100
修改后a的值为:100
ここから、参照が渡されていることがわかります。オブジェクトのみをコピーした場合、main関数のaの値は変化しません。
一部の人々は次のコードで私に反論するかもしれません:
main(){
int s = 6;
setValue(s);
print(s); //输出6,而不是7
}
class Test{
int value = 1;
Test(int newValue){
this.value = newValue;
}
}
setValue(int s){
s += 1;
}
ご覧のとおり、出力は6ではなく、dartのすべてがオブジェクトです。参照で渡されたのに、なぜ6なのですか?
答えはこれです。setValue()メソッドでは、パラメーターsは実際には初期化したsを持つオブジェクトではなく、int s = 6ですが、それらは同じメモリ領域を参照し、次にs + = in setValue()を呼び出します。 1の場合、このメモリ領域のオブジェクトは+1演算を実行し、ヒープ(アナログJava)に新しいオブジェクトが生成され、sはこのオブジェクトを指します。したがって、sパラメータは、Javaのように、メイン関数でsのメモリアドレスをコピーするだけです。
public class Test {
public static void main(String[] args) {
Test a = new Test();
Test b = a;
b = new Test();
}
}
このパラメータはメモリアドレスを渡すことだけを忘れないでください。このメモリアドレスのオブジェクトが変更されると、他の場所のメモリアドレスを参照する変数の値も変更されます。dartのすべてがオブジェクトであることを忘れないでください。
密かに言うと、インタビュアーはこの領域が得意ではないと思います。この種の詳細な問題は、バグではなく、ビジネスが忙しいときにこれに注意する時間がない場合、インタビュアーはこれら2つの状況を表示できます。理由を面接官に尋ねてください。。その後、私は答えることができます。。泣くわ。。
2.ウィジェットと要素およびRenderObjectの関係
まず、その時の状況について詳しく説明します。インタビュアーから、ウィジェットと要素の間に1対多の関係があるかどうか尋ねられました。ウィジェットが追加された場合、その関係はどうなりますか?
この部分についてはまだ良い答えはありません。今ではそれは単なる推測です。ウィジェットが追加されると、要素ツリーは後続のすべての要素をたどってタイプが変更されたかどうかを確認し、RenderObjectを再構築します。
各ウィジェットのコンテキストは一意であるため、要素とウィジェットの間には1対1の関係があるはずです。考えてから書きなさい。
3.ウィジェットツリーのルートノード
それでもインタビュアーの意味が理解できません。。理解できたらコメントして教えてください。理解したところで、インタビュアーはrunApp()メソッドでウィジェットを参照する必要があります。当時は言いたかったのですが、メソッド名が何なのか忘れてしまいました。。。
4. mixin間の関係は実装を拡張します
この部分では、ナゲッツの小さなドイツ語の記事を参照できます。高収量はそのように見えます。。Flutter Dartミックスインは、Flutter Dart構文(1)を探索します。拡張、実装、使用の違い
6. Futureとマイクロタスクの実行順序は、Xiaodeの記事Flutterの分離に関する詳細な理解(1)を参照----イベントループ(イベントループ)とコード実行シーケンスFlutterの分離に関する詳細な理解(2)-独自の分離に関する詳細な理解の作成Flutterの分離(3)— Flutterの分離(4)についてのFlutterのスレッドモデル(スレッドモデル)の詳細な理解— Computeを使用して分離を書き込む
7. dartのカスケードシンボルとは...同じオブジェクトを継続的に操作できるようにします。関数を継続的に呼び出すだけでなく、メソッドに継続的にアクセスできるため、一時変数の作成を避け、よりスムーズなコードを記述できます。ストリーミングプログラミングは、最新のプログラミングの習慣とプログラミングスタイルに沿ったものです。
main(){
Tree tree = new Tree(1);
tree..test1 = 1..test2 =5;
print(tree.test1);
print(tree.test2);
}
class Tree{
int value;
int test1 = 2;
int test2 = 3;
Tree(int a){
this.value = a;
}
}
8.最初の公式文書の使用を待つ
すべてのDartプログラマーが知っているように、for-inループはイテラブルでうまく機能します。同様に、await-forループは、ストリームでうまく機能するように設計されています。ストリームを指定すると、その値をループできます。要素がストリームに追加されるたびに、ループ本体が実行されます。各反復の後、ループを囲む関数は、次の要素が利用可能になるか、ストリームが完了するまで中断されます。await式と同様に、await-forループは非同期関数内でのみ使用できます。
これはおそらく、ストリーム内のデータを継続的に取得し、ループ本体で操作を実行することを待つことを意味します。
Stream<String> stream = new Stream<String>.fromIterable(['不开心', '面试', '没', '过']);
main() async{
print('上午被开水烫了脚');
await for(String s in stream){
print(s);
}
print('晚上还没吃饭');
}
出力は
上午被开水烫了脚
不开心
面试
没
过
晚上还没吃饭
Await forとlistenの機能は非常に似ています。どちらもストリームでデータを取得してから出力することですが、await for showのように、ストリームが渡されない場合、ストリームは常にこの位置でブロックされ、最後の出力は食べられません。こちらが聞く例ですが、ひと目でわかります。
Stream<String> stream = new Stream<String>.fromIterable(['不开心', '面试', '没', '过']);
main(){
print('上午被开水烫了脚');
stream.listen((s) { print(s); });
print('晚上还没吃饭');
}
出力は
上午被开水烫了脚
晚上还没吃饭
不开心
面试
没
过
そのため、await forは通常、ストリームが完了するまで使用され、転送が完了するのを待ってから使用する必要があります。そうしないと、常にブロックされ、Android ANRと同様の問題が発生します。
まとめ
実際、インタビュアーは、私がライブ上司に初めて会ったときも、とても親切です。。大物がフラッターとダーツを研究しているのは本当に詳細であり、APIを調整することしかできない私のような人々に匹敵するものではありません。
主な理由は、フラッターを1か月半使用しなかったことです。次に、他のビッグウィッグにフラッターを準備するかどうか尋ねました。
ねえ、まだ十分な準備ができていません、または私に質問し始めたとき、私は答えるのを忘れて、合格することができるはずです。
この記事は簡単ではありません。この記事が気に入った場合や、参考になった場合は、皆が気に入って転送してくれることを期待しています。記事は継続的に更新されます。