Futterの面接の凉経と言えるでしょう。

7587 ワード

一方の質問のJavaとAndroidの基礎
  • Jvm仮想マシン
  • message Queはuiスレッド
  • をブロックしますか?
  • オブジェクトロックとクラスロック
  • の字形印刷ツリー
  • 他にもよく覚えていません。主に二面に対する印象が深いです。
  • 二面質問のFutterとDart
  • dartは値伝達ですか?それとも引用伝達ですか?
  • WidgetとelementとRenderObjectとの関係
  • widgetのrootノード
  • mixin extens implement間の関係(extens以外はあまり使われていません。)
  • jvmメモリモデル(これは面接官がかわいそうだと思います。私は何も聞いていません。=)
  • Futureとmicrotaskの実行順序
  • ダントの中で.の使い方(ほとんど使っていません。)
  • await for(使ったことがありません。)
  • 正直に言うと、一番目、三つ目、六番目は答えられるはずですが、一ヶ月以上Futterに触れていないので、忘れてしまいました。後で二面の答えを書いて、後進の人を助けてほしいです。またGitHubとブログのメンテナンスがとても重要です。私のようなdemoは手書きで、簡単に削除する人は直接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
    
    ここからは、1つのオブジェクトだけをコピーした場合、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は、実際には、int s = 6を初期化したsとは対象ではないが、彼らは同じブロックのメモリ領域を指すだけで、setValue()s += 1を呼び出したときに、このメモリ領域のオブジェクトは+1を実行し、その後、スタック内に新たなオブジェクトを生成した。sはこのオブジェクトを再び指します。したがって、sパラメータは、javaのようなmain関数の中のsのメモリアドレスをコピーしただけです。
    public class Test {
        public static void main(String[] args) {
            //   dart main     
            Test a = new Test();
            //   setValue()  s,              b
            Test b = a;    
            //s       ,  dart  s += 1
            b = new Test();
        }
    }
    
    私たちは覚えている限り、パラメータはメモリアドレスを転送します。このメモリアドレスのオブジェクトを変更すると、他の場所の参照メモリアドレスの変数値も修正されます。ダートの中では全てが対象ということを忘れないでください。
    こっそりと一言を言って、面接官というところは面接がよくないと思います。このような細かい問題は、もし何かのバグがあったのではないなら、業務が忙しい時はこれに注意する時間がないです。そして私は答えられます。泣き声で話す
    2.WidgetとelementとRenderObjectの関係
    まず、その時の様子を詳しく話してみます。面接官からWidgetElementの間にはペアが多いのではないかと聞かれました。Widgetを追加したら、この関係は何ですか?この部分はまだよく答えられていません。今はただの予想です。もしwidgetを追加したら、Elementは全部の木を巡回して、タイプが変わるかどうかを見て、あるならば、Elementを再構築します。RenderObjectElementの間は、それぞれWidgetWidgetがユニークであるため、まだ一対の関係であるべきである。考えてから書きましょう。
    3.widgetツリーのrootノード
    やはり面接官の意味が分かりませんでした。理解できる方がいますので、コメントをお願いします。面接官の意味はrunApp()方法の中のそれのWidgetを指すべきだと理解しました。私もその時言いたかったですが、この方法の名前を忘れました。
    4.mixin extens implement間の関係
    この部分は金を掘った小徳大人の文章を参考にしてもいいです。高産は何ですか?
  • Futter Dart mixins探究
  • Futter Dart文法(1):extens、implements、withの使い方と違い
  • 6.Futureとmicrotaskの実行手順
    同じドイツの文章を参考にします。
  • Futterのisolate(1)----イベントサイクル(event loop)とコードの運行順序を深く理解する
  • Futterのisolate(2)を深く理解する---自分のisolate
  • を創建する。
  • Futterのisolate(3)---Futterのthread model(スレッドモデル)
  • を深く理解する。
  • Futterのisolate(4)---Computteを使ってisolatesを書く
  • 7.ダントの中。何ですか?
    カスケード記号.同じオブジェクトを連続的に操作することができます。関数を連続的に呼び出すだけでなく、連続的に方法にアクセスすることもできます。このようにすると、一時的な変数の作成を避けることができます。より滑らかなコードを書くことができます。式プログラミングはより現代的なプログラミング習慣とプログラミングスタイルに適合します。
    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.await for使用
    まずオフィシャル文書をください。
    await-for
    As everry Dart programmer knows,the for-i n loop plays well with iterables.Simillarly,the await-for loop is designed to Playwell with strems.Give a stream,one can loop over its values:Every time an element is added to the stream,the loop body.After each iteration,the function enclosing the lovent op spence the lovent op spence the op spence the op op op op spence the op spence the spence strement。 await expressions await-for loops can only appar inside asynchronous functions.contextは、await forストリーム中のデータを継続的に取得し、循環体内の動作を実行することを意味する。
    Stream stream = new Stream.fromIterable(['   ', '  ', ' ', ' ']);
    main() async{
      print('        ');
      await for(String s in stream){
        print(s);
      }
      print('      ');
    }
    
    出力
            
       
      
     
     
          
    
    streamawait forの役割は似ています。ストリーム中のデータを取得して出力しますが、listenawait forに示されているように、awaitが伝達が完了していないと、この位置にずっと閉塞してしまいます。食事をしていないのは最後の出力です。
    Stream stream = new Stream.fromIterable(['   ', '  ', ' ', ' ']);
    main(){
      print('        ');
      stream.listen((s) { print(s); });
      print('      ');
    }
    
    出力
            
          
       
      
     
     
    
    したがって、streamは、一般的にlistenがいつ完成するかまで使用され、そして転送が完了するまで待たなければ使用できない。そうでなければ、ずっとブロックされ、await forと同様の問題を引き起こす。
    締め括りをつける
    実は面接官はニコニコしています。オーディエンスはflunterとdartの研究に対して本当に深くて、私のようなアプリしか作れない人とは比べものにならないです。主に私は一ヶ月半flunterを使ったことがありません。他のオーディエンスにFutterを用意しますか?えっと、やはり自分で準備が十分ではないですか?それとも、オーディエンスが私に聞いた時、直接に答えて忘れました。もう大丈夫ですか?
    もう一つはAndroid実習をお願いします。大工場の方がいいです。。
    転載先:https://juejin.im/post/5c67d621518825620a7f133e