Tag: phỏng vấn

  • Các câu hỏi phỏng vấn Flutter

    Các câu hỏi phỏng vấn Flutter

    Các câu hỏi phỏng vấn Flutter

    Flutter ngày càng được nhiều người quan tâm nhờ khả năng phát triển app đa nền tảng. Dưới đây, chúng tôi giới thiệu Các câu hỏi phỏng vấn Flutter để bạn đọc tham khảo. Bạn có thể xem thêm KINH NGHIỆM PHỎNG VẤN FLUTTER.

    Flutter là gì?

    Flutter là một bộ công cụ giao diện người dùng để tạo các ứng dụng di động nhanh, đẹp, được biên dịch nguyên bản với một ngôn ngữ lập trình và một cơ sở code duy nhất. Nó là một framework phát triển code nguồn mở được phát triển bởi Google. Nói chung, Flutter không phải là một ngôn ngữ; nó là một SDK. Ứng dụng Flutter sử dụng ngôn ngữ lập trình Dart để tạo ứng dụng. Phiên bản alpha đầu tiên của Flutter được phát hành vào tháng 5 năm 2017.

    Flutter chủ yếu được tối ưu hóa cho các ứng dụng di động 2D có thể chạy trên cả nền tảng Android và iOS. Chúng tôi cũng có thể sử dụng nó để tạo các ứng dụng đầy đủ tính năng, bao gồm máy ảnh, bộ nhớ, vị trí địa lý, mạng, SDK của bên thứ ba, v.v.

    Mời bạn xem giới thiệu chi tiết hơn tại bài Flutter là gì?

    Dart là gì?

    Dart là một ngôn ngữ lập trình hướng đối tượng, có mục đích chung với cú pháp kiểu C. Nó là code nguồn mở và được phát triển bởi Google vào năm 2011. Mục đích của lập trình Dart là tạo giao diện người dùng frontend cho web và ứng dụng di động. Nó là một ngôn ngữ quan trọng để tạo ứng dụng Flutter. Ngôn ngữ Dart có thể được biên dịch cả AOT (Ahead-of-Time) và JIT (Just-in-Time.

    Học Flutter có cần học Dart không?

    Có, việc học ngôn ngữ Dart để xây dựng ứng dụng Flutter là rất cần thiết. Vì Flutter chỉ là một bộ khung (framework) sử dụng ngôn ngữ Dart để tạo nên ứng dụng.

    Flutter có miễn phí không?

    Có. Flutter hoàn toàn miễn phí và mã nguồn mở.

    Widget trong Flutter là gì?

    Một ứng dụng Flutter luôn được coi là một cây các material. Bất cứ khi nào bạn định viết code để xây dựng bất cứ thứ gì trong Flutter, nó sẽ nằm bên trong một widget. Các widget mô tả chế độ xem ứng dụng của bạn trông như thế nào với cấu hình và trạng thái hiện tại của chúng. Khi bạn thực hiện bất kỳ thay đổi nào trong code, widget con sẽ xây dựng lại mô tả của nó bằng cách tính toán sự khác biệt của widget con hiện tại và trước đó để xác định những thay đổi tối thiểu đối với việc hiển thị trong giao diện người dùng của ứng dụng.

    Các widget được lồng vào nhau để xây dựng ứng dụng. Nó có nghĩa là thư mục gốc của ứng dụng của bạn tự nó là một widget và tất cả các cách nhìn xuống cũng là một widget. Ví dụ: một widget có thể hiển thị một cái gì đó, có thể xác định thiết kế, có thể xử lý tương tác, v.v.

    Sự khác nhau giữa Stateful Widget và Stateless Widget?

    Một widget Stateful có thông tin state. Nó được gọi là động vì nó có thể thay đổi dữ liệu bên trong trong suốt thời gian tồn tại của widget. Một widget cho phép chúng ta làm mới màn hình được gọi là Stateful widget. widget con này không có phương thức build(). Nó có phương thức createState(), trả về một lớp mở rộng Lớp state Flutters. Các ví dụ về widget Stateful là Checkbox, Radio, Slider, InkWell, Form và TextField.

    widget không trạng thái(Stateless) không có bất kỳ thông tin trạng thái nào. Nó vẫn tĩnh trong suốt vòng đời của nó. Ví dụ về widget không trạng thái là Văn bản, Hàng, Cột, Vùng chứa, v.v. Nếu màn hình hoặc widget chứa nội dung tĩnh, nó phải là widget Stateless, nhưng nếu bạn muốn thay đổi nội dung, nó cần phải là widget Stateful.

    Các trình soạn thảo tốt nhất để phát triển Flutter là gì?

    Các công cụ phát triển Flutter cho phép phát triển Flutter nhanh hơn và do đó thúc đẩy quy trình làm việc của nhà phát triển. Flutter IDE và các công cụ cần một số plugin để phát triển các ứng dụng di động. Các plugin giúp chúng tôi biên dịch, phân tích code và phát triển Flutter. IDE phổ biến cho sự phát triển của Flutter như sau:

    • Android Studio
    • Visual Studio
    • IntelliJ IDEA
    • Xcode

    Tệp pubspec.yaml là gì?

    Đó là tệp cấu hình của dự án sẽ sử dụng rất nhiều trong quá trình làm việc với dự án Flutter. Nó cho phép bạn cách ứng dụng của bạn hoạt động. Nó cũng cho phép chúng tôi thiết lập các ràng buộc cho ứng dụng. Tệp này chứa:

    • Cài đặt chung của dự án như tên, mô tả và phiên bản của dự án.
    • Sự phụ thuộc của dự án.
    • Nội dung dự án (ví dụ: hình ảnh, âm thanh, v.v.).

    Các gói và plugin trong Flutter là gì?

    Gói là một nhóm các loại lớp, giao diện và gói con tương tự nhau. Các gói và plugin giúp chúng tôi xây dựng ứng dụng mà không cần phải phát triển mọi thứ từ các gói. Trong Flutter, nó cho phép bạn nhập các widget hoặc chức năng mới vào ứng dụng. Các gói và plugin có một sự khác biệt rất nhỏ. Nói chung, các gói là các thành phần mới hoặc code được viết bằng ngôn ngữ Dart, trong khi các plugin cho phép nhiều chức năng hơn trên thiết bị bằng cách sử dụng code gốc. Trong DartPub, cả gói và plugin đều được gọi là gói.

    Ưu điểm của Flutter là gì?

    Các câu hỏi phỏng vấn Flutter 1

    Các ưu điểm phổ biến của Flutter framework như sau:

    • Phát triển đa nền tảng: Tính năng này cho phép Flutter viết code một lần, duy trì và có thể chạy trên các nền tảng khác nhau. Nó tiết kiệm thời gian, công sức và tiền bạc của các nhà phát triển.
    • Phát triển nhanh hơn: Hiệu suất của ứng dụng Flutter rất nhanh. Flutter biên dịch ứng dụng bằng cách sử dụng thư viện nhánh C / C ++ giúp ứng dụng gần với code máy hơn và mang lại cho ứng dụng hiệu suất gốc tốt hơn.
    • Cộng đồng tốt: Flutter có hỗ trợ cộng đồng tốt, nơi các nhà phát triển có thể hỏi các vấn đề và nhận được kết quả nhanh chóng.
    • Tải lại trực tiếp và nóng: Nó làm cho quá trình phát triển ứng dụng cực kỳ nhanh chóng. Tính năng này cho phép chúng tôi thay đổi hoặc cập nhật code được phản ánh ngay sau khi các thay đổi được thực hiện.
    • code tối thiểu: Ứng dụng Flutter được phát triển bởi ngôn ngữ lập trình Dart, sử dụng biên dịch JIT và AOT để cải thiện thời gian khởi động tổng thể, hoạt động và tăng tốc hiệu suất. JIT nâng cao hệ thống phát triển và làm mới giao diện người dùng mà không cần nỗ lực thêm vào việc xây dựng hệ thống mới.
    • Tập trung vào giao diện người dùng: Nó có giao diện người dùng tuyệt vời vì nó sử dụng widget tập trung vào thiết kế, các công cụ phát triển cao, API nâng cao và nhiều tính năng khác.
    • Tài liệu: Flutter có hỗ trợ tài liệu rất tốt. Nó được tổ chức và nhiều thông tin hơn. Chúng ta có thể lấy mọi thứ mà chúng ta muốn viết ở một nơi.

    Bạn có thể cài đặt Flutter bằng cách nào?

    Để cài đặt và chạy Flutter trên hệ thống Windows, MacOS trước tiên bạn cần đáp ứng các yêu cầu này đối với môi trường phát triển của mình.

    Hệ điều hành Windows 7 trở lên (Tôi là Windows 10. Bạn cũng có thể sử dụng Mac hoặc Linux OS.).
    Dung lượng đĩa 400 MB (Nó không bao gồm không gian đĩa cho IDE / công cụ).
    Công cụ 1. Windows PowerShell2. Git dành cho Windows 2.x (Tại đây, Sử dụng Git từ tùy chọn Dấu nhắc Lệnh của Windows).
    SDK Flutter SDK dành cho Windows
    IDE Android Studio (Chính thức)

    Mời bạn tham khảo thêm Cài đặt Flutter với Visual Studio Code

    So sánh Flutter và React Native?

    • Flutter và React Native đều được sử dụng để phát triển ứng dụng kết hợp gốc từ một cơ sở code duy nhất. Các ứng dụng này có thể chạy trên nền tảng iOS và Android.
    • React Native do Facebook phát triển, trong khi framework công tác Flutter lần đầu tiên được giới thiệu bởi Google. Vì vậy, cả hai framework đều có tính năng và tính cộng đồng rất tốt.
    • Flutter sử dụng ngôn ngữ Dart để tạo ứng dụng, trong khi React Native sử dụng JavaScript để xây dựng ứng dụng.
    • Theo quan điểm của nhà phát triển, rất khó để lựa chọn trong số chúng. Do đó, rất khó để chọn ra người chiến thắng giữa Flutter và React Native.

    Tại sao build app Flutter lần đầu tiên mất nhiều thời gian?

    Khi bạn dựng ứng dụng Flutter lần đầu tiên, sẽ mất nhiều thời gian hơn. Đó là do Flutter đã xây dựng tệp APK hoặc IPA dành riêng cho thiết bị. Do đó, Gradle và Xcode được sử dụng để xây dựng tệp, mất nhiều thời gian.

    Tại sao thư mục Android và iOS lại nằm trong dự án Flutter?

    • Android: Thư mục này chứa một dự án Android hoàn chỉnh. Nó được sử dụng khi bạn tạo ứng dụng Flutter cho Android. Khi code Flutter được biên dịch thành code gốc, nó sẽ được đưa vào dự án Android này, do đó kết quả là một ứng dụng Android gốc. Ví dụ : Khi bạn đang sử dụng trình giả lập Android, dự án Android này được sử dụng để xây dựng ứng dụng Android, được triển khai thêm cho Thiết bị ảo Android.
    • iOS: Thư mục này chứa một dự án Mac hoàn chỉnh. Nó được sử dụng khi bạn xây dựng ứng dụng Flutter cho iOS. Nó tương tự như thư mục Android, được sử dụng khi phát triển ứng dụng cho Android. Khi code Flutter được biên dịch thành code gốc, nó sẽ được đưa vào dự án iOS này, để kết quả là một ứng dụng iOS gốc. Chỉ có thể xây dựng ứng dụng Flutter cho iOS khi bạn đang làm việc trên macOS và Xcode IDE.

    Tween Animation là gì?

    Đây là hình thức rút gọn của in-betweening. Trong hoạt ảnh tween, bắt buộc phải xác định điểm đầu và điểm cuối của hoạt ảnh. Nó có nghĩa là hoạt ảnh bắt đầu với giá trị bắt đầu, sau đó đi qua một loạt các giá trị trung gian và cuối cùng đạt đến giá trị kết thúc. Nó cũng cung cấp dòng thời gian và đường cong, xác định thời gian và tốc độ của quá trình chuyển đổi. framework công cụ cung cấp tính toán về cách chuyển đổi từ điểm đầu và điểm cuối.

    Giải thích Hot Reload trong Flutter?

    Tính năng tải lại nóng cho phép bạn nhanh chóng và dễ dàng thực hiện một thử nghiệm trong dự án. Nó giúp xây dựng giao diện người dùng, thêm các tính năng mới, sửa lỗi và phát triển ứng dụng nhanh chóng. Để thực hiện tải lại nóng ứng dụng Flutter, hãy làm theo các bước sau:

    Chạy ứng dụng trong trình chỉnh sửa Flutter hoặc cửa sổ dòng lệnh được hỗ trợ.

    Sửa đổi bất kỳ tệp Dart nào trong dự án.

    Nếu bạn sử dụng IDE hỗ trợ Flutter, hãy chọn Lưu tất cả hoặc nhấp vào nút Tải lại nóng trên thanh công cụ. Ngay lập tức, bạn có thể xem kết quả trong trình mô phỏng hoặc thiết bị thực của mình.

    Kể tên một số ứng dụng phổ biến sử dụng Flutter?

    Ngày nay, nhiều tổ chức sử dụng Flutter để xây dựng ứng dụng. Một số ứng dụng phổ biến nhất được xây dựng trên Flutter như sau:

    • Google Ads
    • Reflectly
    • Alibaba
    • Birch Finance
    • Coach Yourself
    • Tencent
    • Watermaniac

    Kể tên gói cơ sở dữ liệu phổ biến được sử dụng trong Flutter?

    Các gói cơ sở dữ liệu phổ biến và được sử dụng nhiều nhất được sử dụng trong Flutter như sau:

    • Cơ sở dữ liệu sqflite: Nó cho phép truy cập và thao tác với cơ sở dữ liệu SQLite.
    • Cơ sở dữ liệu Firebase: Nó sẽ cho phép bạn truy cập và thao tác với cơ sở dữ liệu đám mây.

    Animation nào cho phép bạn thể hiện hành vi trong thế giới thực?

    Animation dựa trên Vật lý cho phép bạn thể hiện hành vi trong thế giới thực trong Flutter.

    Sự khác biệt giữa Khởi động lại Nóng và Tải lại Nóng là gì?

    Sau đây là những điểm khác biệt cơ bản giữa Khởi động lại nóng và Tải lại nóng:

    Tải lại nóng (Hot reload) Khởi động lại nóng
    Nó hoạt động với một phím r nhỏ trên thiết bị đầu cuối hoặc dấu nhắc lệnh. Nó chủ yếu hoạt động bằng tay
    Tính năng tải lại nóng cho phép chúng tôi nhanh chóng biên dịch mã mới được thêm vào tệp và gửi chúng đến Máy ảo Dart (DVM). Sau khi hoàn tất cập nhật DVM, nó sẽ cập nhật ngay giao diện người dùng của ứng dụng. Nó cho phép các nhà phát triển có được một ứng dụng được biên dịch đầy đủ vì nó phá hủy các giá trị Trạng thái đã có và đặt chúng thành mặc định. Trên mỗi lần Khởi động lại nóng, cây widget ứng dụng của chúng ta được xây dựng lại hoàn toàn với code đã nhập mới.
    Nó giúp xây dựng giao diện người dùng, thêm các tính năng mới, sửa lỗi và phát triển ứng dụng nhanh chóng. Mất nhiều thời gian hơn Tải lại nóng để biên dịch và cập nhật ứng dụng.

    22. Trong đoạn mã dưới đây, hãy chuyển makeMangoShake() thành getter có tên là mangoshake bằng cách sử dụng cú pháp viết tắt “fat arrow”: 

    class Recipe {  
      int mango;  
      int milk;  
      int sugar;  
      Recipe(this.mango, this.milk, this.sugar);   
      int makeMangoShake() {  
        return mango+milk+sugar;  
      }  
    }

    Fat Arrow (=>) được sử dụng khi phương thức chứa một dòng code. Chúng ta có thể sử dụng nó bằng cú pháp sau:

    methodName(parameters) => statement;

    Cần lưu ý rằng chúng ta không thể sử dụng từ khóa return có mũi tên béo (=>). Sau khi chuyển makeMangoShake() thành một mũi tên, nó sẽ giống như đoạn mã dưới đây:

    int get mangoshake => mango + milk + sugar;

    Sự khác biệt giữa các hàm “main()” và “runApp()” trong Flutter là gì?

    Chúng ta có thể phân biệt các hàm chính và hàm runApp trong Flutter như sau:

    • Hàm main() chịu trách nhiệm khởi động chương trình. Nếu không có hàm main(), chúng ta không thể viết bất kỳ chương trình nào trên Flutter.
    • Hàm runApp() có nhiệm vụ trả về các widget được gắn vào màn hình dưới dạng gốc của cây widget và sẽ được hiển thị trên màn hình.

    Khi nào bạn nên sử dụng mainAxisAlignment và crossAxisAlignment?

    Chúng ta có thể sử dụng crossAxisAlignment và mainAxisAlignment để kiểm soát cách các widget hàng và cột sắp xếp các con của nó dựa trên sự lựa chọn của chúng ta.

    Trục chéo của hàng sẽ chạy theo chiều dọc và trục chính sẽ chạy theo chiều ngang. Xem hình ảnh minh họa bên dưới để hiểu rõ hơn.

    Các câu hỏi phỏng vấn Flutter 2

    Trục chéo của cột sẽ chạy theo chiều ngang và trục chính sẽ chạy theo chiều dọc. Hình ảnh minh họa dưới đây giải thích rõ ràng hơn.

    Các câu hỏi phỏng vấn Flutter 3

    Sự khác biệt giữa SizedBox và Container là gì?

    • Container trong Flutter là một widget có thể chứa nhiều widget và quản lý chúng một cách hiệu quả thông qua chiều rộng, chiều cao, phần đệm, màu nền, v.v. Nếu chúng ta có một widget cần một số kiểu nền có thể là hạn chế về màu sắc, hình dạng hoặc kích thước , chúng tôi có thể bọc nó trong một widget vùng chứa.
    • SizedBox trong Flutter là một hộp đi kèm với kích thước được chỉ định. Không giống như Container, nó không cho phép chúng ta thiết lập màu sắc hoặc trang trí cho widget. Chúng tôi chỉ có thể sử dụng nó để xác định kích thước của tiện ích được truyền khi còn nhỏ. Nó có nghĩa là nó buộc widget con của nó phải có chiều rộng hoặc chiều cao cụ thể.

    Stream trong Flutter là gì?

    Luồng là một chuỗi các sự kiện không đồng bộ. Nó cung cấp một chuỗi dữ liệu không đồng bộ. Nó cũng giống như một đường ống mà chúng ta đặt một số giá trị vào một đầu và nếu chúng ta có một người nghe ở đầu kia, nó sẽ nhận được giá trị đó. Chúng tôi có thể giữ nhiều người nghe trong một luồng và tất cả những người nghe đó sẽ nhận được cùng một giá trị khi được đưa vào đường dẫn.

    Chúng tôi có thể xử lý luồng bằng cách sử dụng hàm chờ hoặc nghe từ API luồng. Nó có một cách để phản hồi các lỗi. Chúng ta có thể tạo luồng theo nhiều cách, nhưng chúng có thể được sử dụng theo cách giống nhau. Xem ví dụ dưới đây:

    Future<int> sumStream(Stream<int> stream) async {  
        var sum = 0;  
        await for (var value in stream) {  
          sum = sum + value;  
        }  
        return sum;  
      }

    Các loại Stream trong Flutter?

    Stream có thể có hai loại, đó là:

    • Single subscription streams (Các luồng đăng ký đơn lẻ) Đây là loại luồng phổ biến nhất chứa một chuỗi các sự kiện, là các phần của một tổng thể lớn hơn. Nó sẽ cung cấp các sự kiện theo đúng thứ tự và không bỏ sót bất kỳ sự kiện nào. Nếu thiếu bất kỳ sự kiện nào, thì phần còn lại của luồng sẽ không có ý nghĩa gì. Luồng này chủ yếu được sử dụng để đọc tệp hoặc nhận yêu cầu web. Nó sẽ nghe một lần, và nếu nó đang nghe lại, điều đó có nghĩa là đã bỏ lỡ một sự kiện ban đầu. Khi nó bắt đầu nghe, dữ liệu sẽ được tìm nạp và cung cấp theo từng phần.
    • Broadcast streams (Các luồng phát sóng) Đây là một loại luồng được sử dụng cho các thư riêng lẻ có thể được xử lý từng thư một mà không cần biết về các sự kiện trước đó. Nó có thể có nhiều người nghe để nghe đồng thời và chúng ta có thể nghe lại sau khi hủy đăng ký trước đó. Sự kiện chuột này trong trình duyệt là một loại luồng này.

    Tại sao phương thức build() trên State mà không phải StatefulWidgets?

    Lý do chính đằng sau điều này là StatefulWidget sử dụng một lớp State riêng biệt mà không xây dựng một phương thức bên trong phần thân của nó. Nó có nghĩa là tất cả các trường bên trong Widget là bất biến và bao gồm tất cả các lớp con của nó.

    Mặt khác, StatelessWidget có các phương thức xây dựng và liên kết bên trong cơ thể của nó. Đó là do bản chất của StatelessWidget, được hiển thị hoàn toàn trên màn hình bằng cách sử dụng thông tin được cung cấp. Nó cũng không cho phép bất kỳ thay đổi nào trong tương lai đối với thông tin State của nó.

    StatefulWidget cho phép chúng tôi thay đổi thông tin State trong quá trình sử dụng ứng dụng. Do đó, nó không phù hợp để lưu trữ trong một phương thức xây dựng để thỏa mãn các điều kiện lớp Widget nơi tất cả các trường là bất biến. Đây là lý do chính để giới thiệu State . Ở đây, chúng ta chỉ cần ghi đè hàm createState () để đính kèm Trạng thái đã xác định với StatefulWidget, và sau đó tất cả các thay đổi dự kiến ​​sẽ xảy ra trong một lớp riêng biệt.

    Các chế độ build khác nhau trong Flutter là gì?

    Công cụ Flutter hỗ trợ ba chế độ trong khi biên dịch ứng dụng. Các chế độ biên dịch này có thể được chọn tùy thuộc vào vị trí của chúng ta trong chu trình phát triển. Tên của các chế độ là:

    • Debug
    • Profile
    • Release

    Tại sao chúng ta cần mixin?

    Dart không hỗ trợ nhiều thừa kế. Vì vậy, để triển khai nhiều kế thừa trong Flutter / Dart, chúng ta cần các mixin. Mixins cung cấp một cách để viết code của lớp có thể sử dụng lại trong nhiều phân cấp lớp.

    Tại sao chúng ta sử dụngTicker trong Flutter?

    Ticker trong Flutter là tốc độ làm mới hình ảnh động của chúng ta. Nó là một lớp gửi tín hiệu ở một khoảng thời gian đều đặn, tức là khoảng 60 lần mỗi giây. Chúng ta có thể hiểu điều đó bằng đồng hồ của mình, đồng hồ này hoạt động đều đặn. Tại mỗi lần đánh dấu, Ticker cung cấp một phương thức gọi lại với khoảng thời gian kể từ lần đánh dấu đầu tiên vào mỗi giây, sau khi nó được bắt đầu. Ngay cả khi các code bắt đầu vào các thời điểm khác nhau, nó luôn được đồng bộ hóa tự động.

    Key trong Flutter là gì?

    • Các Key trong Flutter được sử dụng làm code định danh cho Widget, Elements và SemanticsNodes. Chúng ta có thể sử dụng nó khi một widget mới cố gắng cập nhật một phần tử hiện có; sau đó, khóa của nó phải giống với khóa widget hiện tại được liên kết với phần tử.
    • Các khóa không được khác nhau giữa các Phần tử trong cùng một gốc.
    • Các lớp con của Key phải là GlobalKey hoặc LocalKey.
    • Key rất hữu ích khi chúng ta cố gắng thao tác (chẳng hạn như thêm, xóa hoặc sắp xếp lại thứ tự) một tập hợp các widget cùng loại có trạng thái nào đó.

    Làm thế nào bạn sẽ thực thi code chỉ trong chế độ gỡ lỗi?

    Để thực thi code chỉ trong chế độ gỡ lỗi, trước tiên chúng ta cần nhập nền tảng phi tiêu như bên dưới:

    import 'package:flutter/foundation.dart' as Foundation;

    Tiếp theo, chúng ta cần sử dụng kReleaseMode như bên dưới:

    if (Foundation.kReleaseMode){ // is Release Mode ??
    print('release mode');
    } else {
    print('debug mode');
    }

    Chế độ profile là gì, và bạn sử dụng nó khi nào?

    Chế độ hồ sơ(Profile) được sử dụng để đo hiệu suất của các ứng dụng của chúng ta. Trong chế độ này, một số khả năng gỡ lỗi được duy trì để xác định hiệu suất ứng dụng của bạn. Chế độ này bị tắt trên trình giả lập và trình mô phỏng vì chúng không đại diện cho hiệu suất thực.

    Chúng ta có thể sử dụng lệnh dưới đây để biên dịch chế độ cấu hình:

    Chế độ release là gì và bạn sử dụng nó khi nào?

    • Chế độ phát hành (release) cho phép chúng ta tối ưu hóa code và tạo chúng mà không có bất kỳ dữ liệu gỡ lỗi nào ở dạng được tối ưu hóa hoàn toàn. Trong chế độ này, nhiều code của ứng dụng sẽ bị xóa hoặc viết lại hoàn toàn.
    • Chúng ta sử dụng chế độ này khi chúng ta sẵn sàng phát hành ứng dụng. Nó cho phép tối ưu hóa tối đa và kích thước dấu chân tối thiểu của ứng dụng.
    • Chúng ta có thể sử dụng lệnh dưới đây để biên dịch chế độ phát hành:

    flutter run --release

    Sự khác biệt giữa WidgetsApp và MaterialApp là gì?

    Biểu đồ so sánh dưới đây giải thích sự khác biệt cơ bản giữa WidgesApp và MaterialApp:

    WidgetsApp MaterialApp
    WidgetsApp được sử dụng để điều hướng cơ bản. Nó bao gồm nhiều widget nền tảng cùng với thư viện widget mà Flutter sử dụng để tạo giao diện người dùng của ứng dụng của chúng ta. MaterialApp, cùng với thư viện material, là một lớp được xây dựng trên đầu WidgetsApp và thư viện của nó. Nó triển khai thiết kế Material Design cung cấp giao diện thống nhất cho ứng dụng của chúng ta trên bất kỳ nền tảng nào.
    Lớp WidgetsApp là lớp cơ sở cho lớp MaterialApp. Nó cung cấp nhiều công cụ thú vị như Bộ điều hướng hoặc Chủ đề để phát triển ứng dụng.
    Nó bao bọc một số widget cần thiết để xây dựng ứng dụng. Nó bao gồm một số widget cần thiết cho các ứng dụng thiết kế vật liệu xây dựng.

    BuildContext là gì?

    BuildContext trong Flutter là một phần của các widget trong cây Element để mỗi widget có BuildContext của riêng mình. Chúng ta chủ yếu sử dụng nó để tham chiếu đến một widget hoặc chủ đề khác. Ví dụ, nếu chúng ta muốn sử dụng một yếu tố thiết kế material design, thì nó bắt buộc phải tham chiếu nó đến Scaffold. Chúng ta có thể lấy nó bằng phương thức Scaffold.of (context).

    Bạn có thể thực hiện những loại kiểm tra nào trong Flutter?

    Kiểm tra là một hoạt động được sử dụng để xác minh và xác thực ứng dụng, không có lỗi và đáp ứng các yêu cầu của người dùng. Nói chung, chúng ta có thể sử dụng ba loại kiểm tra này trong Flutter:

    • Unit Tests: Nó kiểm tra một chức năng, phương thức hoặc lớp. Mục tiêu của nó là đảm bảo tính đúng đắn của code trong nhiều điều kiện khác nhau. Thử nghiệm này được sử dụng để kiểm tra tính hợp lệ của logic kinh doanh của chúng ta.
    • Widget Tests: Nó kiểm tra một widget duy nhất. Mục tiêu của nó là đảm bảo rằng giao diện người dùng của widget trông và tương tác với các widget khác như mong đợi.
    • Integration Tests: Nó xác thực một ứng dụng hoàn chỉnh hoặc một phần lớn của ứng dụng. Mục tiêu của nó là đảm bảo rằng tất cả các widget và dịch vụ cùng hoạt động như mong đợi.

    Toán tử kiểm tra Null là gì?

    Dart cung cấp một số thông tin hữu ích để xử lý các giá trị null.

    1. Toán tử gán “?? =” chỉ gán giá trị cho một biến khi biến đó đang rỗng (null).

    int a; // Initial value of a is null.  
    a ??= 5;  
    print(a); // It will print 5.

    2. Toán tử “??” được sử dụng để đánh giá và trả về giá trị giữa hai biểu thức. Đầu tiên, nó thực thi và kiểm tra biểu thức bên trái nếu khác rỗng thì trả về giá trị của biểu thức đó; nếu không, nó sẽ thực thi và trả về giá trị của biểu thức bên phải:

    print(3 ?? 5); // It will print 3.  
    print(null ?? 5); // It will print 5.

    Sự khác nhau giữa toán tử “??” và “?”

    Toán tử ??  Toán tử ? 
    Các “??” toán tử được sử dụng để đánh giá và trả về giá trị giữa hai biểu thức.

    Nó có thể được sử dụng như sau:expr1 ?? expr2Toán tử này đầu tiên kiểm tra biểu thức 1 và nếu nó không phải là null, trả về giá trị của nó; nếu không, nó sẽ đánh giá và trả về giá trị của biểu thức 2.

    Các “?” toán tử được sử dụng để đánh giá và trả về giá trị giữa hai biểu thức dựa trên điều kiện đã cho.

    Nó có thể được sử dụng như sau:điều kiện? expr1: expr2Toán tử này đầu tiên kiểm tra điều kiện và nếu nó đúng, nó sẽ đánh giá expr1 và trả về giá trị của nó (nếu điều kiện được khớp). Nếu không, nó sẽ đánh giá và trả về giá trị của expr2.

  • CEO AXIE INFINITY: 80% KIẾN THỨC CỦA TÔI LÀ DO ĐỌC

    CEO AXIE INFINITY: 80% KIẾN THỨC CỦA TÔI LÀ DO ĐỌC

    CEO AXIE INFINITY: 80% KIẾN THỨC CỦA TÔI LÀ DO ĐỌC

    TRUNG NGUYỄN AXIE INFINITY: 80% KIẾN THỨC CỦA TÔI LÀ DO ĐỌC, VÀ THỨ TÔI ĐỌC NHIỀU NHẤT LÀ CODE CỦA NGƯỜI KHÁC

    TRUNG NGUYỄN AXIE INFINITY: 80% KIẾN THỨC CỦA TÔI LÀ DO ĐỌC, VÀ THỨ TÔI ĐỌC NHIỀU NHẤT LÀ CODE CỦA NGƯỜI KHÁC
    CEO Sky Mavis Nguyễn Thành Trung (Trung Nguyen). Ảnh: Viet Nam Finance

    Chân tình và cởi mở, Trung Nguyễn, CEO công ty tỷ đô Sky Mavis, chia sẻ về quá trình học tập, khởi nghiệp và làm sản phẩm của mình. Anh cũng đưa ra những lời khuyên gần gũi, dễ thực hiện dành cho các bạn nhỏ muốn học lập trình. Bài này tóm tắt nội dung cuộc nói chuyện của anh với các học viên và cộng đồng của CLB Tài năng lập trình FPT Software (FCT Club), tháng 10/2021.

    1. QUÁ TRÌNH HỌC TẬP CỦA CEO AXIE INFINITY

    Q: Anh đã học lập trình như thế nào?

    A: Tôi bắt đầu tiếp xúc với máy tính từ năm 8 tuổi. Thời gian đầu chắc không gọi là học lập trình, mà là gõ lại các bài giảng Pascal. Gõ các câu lệnh và chạy thử. Hồi đó tôi chưa biết gì, nên gõ cả số thứ tự các dòng lệnh vào, vì vậy chương trình không chạy. Phải đi hỏi mới biết. Lúc đầu cứ gõ như thế, sau mới suy ngược lại xem các dòng lệnh đó để làm gì.

    Việc này có liên quan đến chơi game, vì chơi game cho ta cảm giác điều khiển một vật gì đó. Lập trình là điều khiển máy tính thông qua các dòng lệnh. Đầu tiên là lập trình các bài toán đơn giản như tính chu vi đường tròn, rồi “đồ sộ” hơn như chương trình trắc nghiệm. Cứ thế hình thành đam mê, cả trong lập trình thi đấu lẫn làm sản phẩm thi tin học trẻ.

    Q: Theo anh, bây giờ các bạn trẻ nên bắt đầu như thế nào? Nên phân bổ thời gian thế nào để tự học lập trình?

    A: Tôi thường không gặp khó khăn với việc học ở trường, nên có nhiều thời gian để làm các thứ khác và không gặp vấn đề phân bổ thời gian. Lên cấp 3 chuyên tin thì các thầy cô tạo điều kiện, không phải học các môn khác nhiều. Chọn Đại học FPT cũng là để không mất quá nhiều thời gian lên lớp, nên có thể đi làm sớm ở các đơn vị trong FPT.

    Tôi nghĩ, các bạn nhỏ cần cố gắng hoàn thành nhiệm vụ ở trường hiệu quả nhất. Sử dụng thời gian hợp lý mà vẫn có kết quả tốt. Nếu muốn đi theo lập trình, cần nhiều kiến thức khác như toán hay tiếng Anh. Các kỹ năng làm việc nhóm. Cả văn học. Do đó kiểu gì cũng cần học đầy đủ.

    Các bạn ở CLB may mắn được tiếp xúc với tin học sớm, có thể tận dụng để tạo đà sớm, có lợi thế sau này. Tóm lại vẫn cần hoàn thành xuất sắc chương trình ở trường.

    Q: Hồi học phổ thông, anh dành bao nhiêu tiếng mỗi tuần để học lập trình? Và bây giờ các bạn nhỏ nên dành bao nhiêu thời gian?

    A: Hồi lớp 6 lên 7, hè, tôi phải làm phần mềm đi thi tin học trẻ, nên đã thức trắng đêm để hoàn thành. Tất nhiên, nói chung thì không nên thế, nên kiểm soát thời gian để không bị dồn việc. Các bạn nhỏ không nên thức đêm.

    Theo tôi, để học hiệu quả, trong tuần thì mỗi ngày 1-2h, cuối tuần thì nhiều hơn.

    Học lập trình không nhất thiết ngồi máy tính quá lâu, vì thời gian các bạn không ngồi máy tính vẫn có thể bổ sung kiến thức tin học, ví dụ đọc sách. Đọc những lúc phù hợp. Sách dạy ngôn ngữ lập trình.

    Q: Để giỏi lập trình, cần học Toán đến mức nào?

    A: Toán rất rộng, có những phần liên quan đến lập trình. Nếu là đi thi đấu – toán rời rạc, lý thuyết đồ thị… Lý thuyết xác suất, thống kê, ma trận. Machine learning, AI network. Nếu một lập trình viên không hiểu sâu toán thì vẫn có thể sử dụng thư viện của người khác. Nhưng để đào sâu, có thể tùy biến cho mình, thì cần hiểu đến mức có thể thay đổi. Không giỏi toán thì không hiểu được bản chất vấn đề. Tuy nhiên, một người không hiểu sâu về toán thì vẫn có thể phát huy thế mạnh khác như hiểu thị trường, v.v. và vẫn thành công.

    Các em còn trẻ, do đó nên chuẩn bị hành trang đầy đủ, để có thể đối mặt với các vấn đề khác nhau trong tương lai. Không nên để hổng chỗ nào mà mình không biết, vì như vậy sẽ bị giới hạn. Đang còn nhỏ thì nên chuẩn bị foundation tốt.

    Q: Chương trình của FCT Club thiên về học nền tảng, trong khi một số bạn muốn học nhiều thuật toán để đi thi. Vậy nên dung hòa thế nào giữa việc học nền tảng, học các môn lý thuyết của Khoa học Máy tính (CS) với việc học nhiều thuật toán, dạng bài để đi thi đấu?

    A: CS là nền, nhưng cũng cần nhiều skill nếu muốn lập trình thi đấu. Còn làm sản phẩm lại cần rộng hơn. Sẽ có những người đi đến level cực cao của lập trình thi đấu hay ngược lại. Có những LTV làm trong công ty nhưng vẫn tham gia các website thi đấu. Theo tôi mọi thứ đều hội tụ lại. Các bạn nhỏ nên coi các môn học bây giờ là thử nghiệm, vì sau này sẽ có nhiều hướng đi. Nên mài giũa kiến thức kỹ năng cơ bản.

    Q: Ngày nay có nhiều công nghệ mới hấp dẫn, nên nhảy vào học ngay, hay nên học tuần tự từ nền tảng lý thuyết trước?

    A: Có lẽ nên kết hợp kiến thức nền tảng với việc sử dụng công nghệ mới. Nếu không có kiến thức nền tảng, thì đến một lúc sẽ phải quay trở lại bổ sung. Nên duy trì đam mê bằng cách có thành công nho nhỏ, sản phẩm nho nhỏ, rồi sẽ thấy hổng và quay lại bổ sung kiến thức. Cũng rất khó nếu yêu cầu cứ nghiền ngẫm nền tảng đi.

    Muốn giỏi hơn, tiến bộ hơn, thì bắt buộc phải học liên tục. Nếu không sẽ đứng lại ở đó.

    Thói quen đọc rất quan trọng. Với cá nhân tôi, khoảng 70-80% kiến thức là có từ việc đọc.

    Lúc lập trình thì thứ mà tôi đọc nhiều nhất là code của ng khác. Tôi có thói quen như vậy và thấy rất có ích. Thử nghĩ xem người ta nghĩ như thế nào. Code đẹp là thế nào, cấu trúc nên làm ra sao. Giống như tham khảo từ một tác phẩm đẹp. Tiếp sau là đọc bài viết, blog. Ít xem video vì đọc nhanh hơn.

    Bây giờ thì nên học python, và các hình thức học lập trình qua video.

    Tại sao nên đọc code? Vì có nhiều kiến thức mới trong lập trình mà ko được thể hiện trong sách, nên đọc code thì học được những cách xử lý tài tình. Trong code có vô vàn cách xử lý tinh tế.

    2. KHỞI NGHIỆP VỚI AXIE INFINITY

    Q: Mọi người rất quan tâm câu chuyện tạm dừng học ĐH để đi khởi nghiệp. Liệu anh có thể chia sẻ?

    A: Thật ra lúc đó tôi đã quyết định là bỏ luôn chứ không phải tạm dừng, sau này quay trở lại học nốt mới gọi là tạm dừng. Khi đó đã phải tranh đấu với gia đình. Cũng vì lúc đó tôi đã tự chủ về tài chính, nên gia đình cũng ít gây sức ép hơn. Sau này thì tôi quay lại học nốt, để hoàn thành lới hứa.

    Các bạn nên chọn một trong hai. Nên học cho xong và có bằng, dễ xin visa, có mối quan hệ với các bạn, có thể đồng hành sau này.

    Còn nếu bỏ thì bỏ luôn để tập trung vào việc. Quay lại học nốt rất khó, rất dễ bỏ lần 2.

    Lúc đó tôi rất muốn làm Lozi, và nếu vẫn đi học thì không tập trung được, nên bỏ. Có một bạn rủ tôi, tôi thì tâm đắc với ý tưởng. Tiền do bạn kia đầu tư. Đó là câu chuyện một hành trình, khởi nghiệp của tuổi trẻ, học hỏi.

    Nếu các bạn trẻ muốn khởi nghiệp, thì theo tôi có hai thứ. Trước tiên phải chứng minh, thuyết phục gia đình, để gia đình không phản đối được. Thứ hai là phải tự chủ về tài chính, không phụ thuộc, nếu không gia đình ngưng chi tiền là sẽ không làm gì được.

    Theo tôi thì các bạn cứ nên học xong, vì lúc đang học thì có thể kết hợp mềm dẻo, vừa đi học vừa vẫn thử nghiệm gì đó được. Đi kiểu này vững chắc hơn.

    Q: Trong quá trình khới nghiệp với Lozi, anh có gì vui và có gì nhức đầu?

    A: Các vấn đề vừa làm nhức đầu nhưng đồng thời cũng tạo ra niềm vui khi giải quyết. Chỉ có những mâu thuẫn cá nhân là không đáng có. Đã đành không tránh được mâu thuẫn, nhưng có những quan hệ độc hại, toxic, không dẫn đến lợi ích gì.

    Bây giờ tôi chú ý chọn người cho phù hợp, có những điểm chung về chuẩn cư xử. Mâu thuẫn chỉ về quan điểm, dễ giải quyết. Chuẩn chung về tính cách, đạo đức. Khi đó có thể dùng lý để giải thích, ôn tồn.

    game axie infinity

    3. THÀNH CÔNG VỚI BLOCKCHAIN

    Q: Anh có thể chia sẻ về quá trình làm sản phẩm với các bạn nhỏ?

    A: Quan trọng nhất là phải trả lời câu hỏi, làm sản phẩm cho ai, hay đang làm cho một nhu cầu không có thật, mà do mình tưởng tượng ra. Nếu vậy thì có thể vẫn có sản phẩm, nhưng chả để làm gì cả.

    Để bắt đầu, các bạn hãy làm sản phẩm mà bản thân mình cần, và cho những người giống mình, có cùng painpoint. Các khâu đoạn khác thì giải quyết dần khi gặp: tìm cộng sự, mktg.

    Lỗi hay mắc phải là làm sản phẩm mà ko ai cần.

    Q: Thường khi làm sản phẩm thì mình bị cuốn vào và khăng khăng là sản phẩm sẽ được đón nhận. Lỗi này làm sao tự kiểm tra?

    A: Đúng là đang ở trong trạng thái thích thú thì khó thuyết phục. Do đó, có lẽ cứ để họ làm, rồi đem ra xem có ai cần không. Làm gì đó nhỏ nhất, nhanh nhất có thể rồi đem thử xem có ai cần hay không. Đó là cách để ngăn ngừa việc làm sai sản phẩm.

    Q: Anh hãy chia sẻ ý tưởng, cảm hứng xây dựng Axie? Tại sao game này thành công?

    A: Chúng tôi bắt đầu bằng phiên bản nhỏ, chứa đựng cách chơi chính. Rồi đưa ra thử. Có lợi thế là Axie đã có inspiration từ những game khác, ví dụ pokemon. Ý tưởng là các con thú trong game vừa có đặc điểm từ thế giới thực, lại vừa cổ tích.

    Vấn đề không phải là ý tưởng, mà là làm tốt được đến đâu. Lúc đầu cũng ít người đón nhận. Phải cải thiện liên tục. Phải mất một thời gian khá dài mới được mọi ng đón nhận. Nhìn lại thì thấy mạo hiểm, vì chúng tôi đã phải mất nhiều thời gian cho đến lúc có câu trả lời thành công hay ko. Khá mạo hiểm.

    Q: Tại sao anh chọn blockchain cho game này?

    A: Từ góc độ kỹ thuật, blockchain là một giải pháp kỹ thuật, có thể coi nó như internet hoặc một nền tảng lập trình khác.

    Tôi chọn blockchain vì ngày xưa chơi game thấy hạn chế vì người chơi không trao đổi mua bán lẫn nhau được. Có game có trao đổi mua bán thì nhà phát hành lại can thiệp, điều khiển, có thể tạo thêm những đồ hiếm làm ảnh hưởng người chơi cũ. Đó là vấn đề lớn. Blockchain có thể giải quyết chuyện này, đưa quyền sở hữu đến tay người chơi. Người phát hành không có quyền tối thượng nữa.

    Các bạn nhỏ nên tìm hiểu, vì blockchain có kiến thức thường thức, về lập trình và tài chính. Học lập trình là học tư duy giải quyết vấn đề. Tài chính là cách thức thế giới vận hành. Quản lý tài chính cá nhân, phục vụ cho cuộc sống của mình. Hai thứ này gộp lại có thể coi là blockchain.

    Vậy muốn học blockchain thì nên bắt đầu từ đâu? Nên bắt đầu bằng việc thử làm những thứ đơn giản, thử lập trình.

    Q: Theo anh, cần có kỹ năng gì để phát triển game?

    A: Làm game cần cả các kỹ năng bên ngoài công nghệ. Ví dụ yếu tố mỹ thuật, tạo phong cách của game. Phải tìm đồng đội để giúp về mỹ thuật. Ngoài học lập trình, cần học chuyên sâu hơn về phát triển game. Ví dụ ngày trước tôi dùng Game Maker 4. Công cụ kiểu như vậy, giúp làm game đơn giản, giúp tập trung vào lập trình. Bắt đầu bước đầu tiên.

    Q: Theo anh, nên làm marketing cho game như thế nào?

    A: Ở lứa tuổi các bạn, nên bắt đầu từ những người xung quanh mình trước. Đem khoe với bạn bè, những người có cùng nhu cầu. Tận dụng internet, đưa lên website. Post lên facebook, tìm hội nhóm liên quan. Các việc như chi tiền quảng cáo, v.v. thì là về sau.

    Xin cám ơn anh rất nhiều!

    Bài viết của fct-club.com

  • Đề thi đầu vào của công ty MDC

    Đề thi đầu vào của công ty MDC

    Đề thi đầu vào của công ty MDC

    Công ty cổ phần Tập đoàn MDC (MDC Group) hoạt động trong các lĩnh vực công nghệ thông tin, sản xuất, y tế, phòng cháy – chữa cháy, phân phối & bán lẻ.

    Trong các công ty liên kết với viện CNTT&TT của BKHN thì MDC chọn cách phỏng vấn ứng viên bằng một bài test nhỏ. Thường khi các công ty test ứng viên bằng bài test thì sẽ là thuật toán là chủ yếu nha, là những thứ như cấu trúc dữ liệu & thuật toán, thuật toán ứng dụng, những kiến thức về đồ thị,…

    Xem thêm KINH NGHIỆM PHỎNG VẤN FLUTTER

    Vệ tinh

    Tập đoàn viễn thông đa quốc gia UltraCom hiện sở hữu một hệ thống truyền tin gồm N trung tâm truyền nhận dữ liệu (gọi tắt là trung tâm) nằm rải rác khắp địa cầu (các trung tâm này được đánh số từ 1 đến N) và M vệ tinh (gọi tắt là vệ tinh) cũng được phân bố đều khắp trên bầu trời quanh địa cầu (các vệ tinh này được đánh số từ 1 đến M).

    Mỗi trung tâm i đều có thể thiết lập kết nối trực tiếp (để khai thác) với mỗi vệ tinh j với chi phí xác định Cij nào đó.

    Hai trung tâm được xem là thông băng với nhau nếu chúng cùng được kết nối với một vệ tinh hoặc chúng cùng thông băng với một số trung tâm khác.

    Toàn hệ thống của UltraCom đương nhiên vốn là thông băng hoàn toàn, tức là bất kỳ hai trung tâm nào cũng đều thông băng với nhau.

    Một sự cố bí ẩn vừa diễn ra trong thời gian gần đây đã khiến một số kết nối bị hư hỏng hoàn toàn và hệ thống của UltraCom bị rơi vào tình trạng không thông băng hoàn toàn được, đặt ra nhiệm vụ cấp bách cho UltraCom phải khẩn trương khắc phục hậu quả này.

    Sau sự cố, bộ phận phụ trách kỹ thuật của UltraCom đã tiến hành khảo sát toàn hệ thống và nhận thấy rằng:

    1. Mỗi trung tâm đều vẫn còn đang kết nối bình thường với một số các vệ tinh đồng thời mỗi vệ tinh đều còn đang được kết nối bởi một số trung tâm nào đó.
    2. Một số kết nối vừa bị hỏng sẽ không thuộc diện xem xét khắc phục nữa, do chi phí quá lớn.
    3. Hoàn toàn có phương án khả thi để khắc phục hệ thống thông băng hoàn toàn.

    Để tiết kiệm chi phí tại thời điểm nhạy cảm của nền kinh tế toàn cầu, ban lãnh đạo tập đoàn quyết định sẽ chỉ thiết lập lại một số kết nối đã bị hư hỏng sao cho tổng chi phí khắc phục là nhỏ nhất có thể.

    Yêu cầu: Xác lập phương án cụ thể và tổng chi phí nhỏ nhất để UltraCom khắc phục sự cố

    Dữ liệu vào: Cho trong file văn bản REPAIR.INP, gồm:

    • Dòng đầu ghi tuần tự 2 số nguyên dương N, M (2 ≤ M, N ≤ 1000)
    • Dòng thứ i trong N dòng tiếp theo ghi M số nguyên Ci1, …, CiM (-1 ≤ Cij ≤10000; i = 1, …, N; j = 1, 2,…, M) với ý nghĩa: Cij là chi phí để kết nối trung tâm i với vệ tinh j cùng sự lưu ý đặc biệt: Cij = 0 nếu trung tâm i vẫn đang kết nối bình thường được với vệ tinh j, Cij = -1 nếu bỏ qua việc tái lập sự kết nối giữa trung tâm i với vệ tinh j (do chi phí quá lớn).
    • Tất cảc các số nguyên trên cùng dòng đều cách nhau bởi khoảng trống. Dữ liệu luôn đảm bảo tính đúng đắn để có lời giải, tức là luôn có phương án để UltraCom khắc phục sự cố.

    Kết quả: Ghi ra file văn bản REPAIR.OUT các thông tin sau:

    • Dòng đầu ghi một số nguyên, là tổng chi phí nhỏ nhất tìm được. Thông tin này chiếm 50% số điểm của test.
    • Dòng thứ 2 ghi số nguyên dương K, với K là số kết nối cần khắc phục. Thông tin này chiếm 25% số điểm của test.
    • K dòng tiếp theo, mỗi dòng ghi hai số nguyên c, s (cách nhau bởi khoảng trống) cho biết cần tái lập kết nối giữa trung tâm c với vệ tinh s. Nếu có nhiều kết quả (phương án), chỉ cần chỉ ra một trong chúng. Thông tin trên K dòng này chiếm 25% số điểm của test.

    Ví dụ:

    REPAIR.INP
    4 3
    0 -1 5
    0 4 4
    -1 0 -1
    1 2 0
    
    REPAIR.OUT
    3 2
    4 1
    4 2
    
    REPAIR.INP
    4 4
    0 -1 5 3
    -1 4 5 -1
    -1 0 -1 0
    6 7 0 -1
    

    Ràng buộc:

    • 60% số test ứng với 60% số điểm của bài ứng với N, M ≤ 200.
    • Giới hạn thời gian cho mỗi test: 01 giây.

    Hướng dẫn: Sử dụng thuật toán tham lam, xác định tập lớn nhất các trung tâm đang thông băng (S) , sắp xếp các kết nối theo thứ tự chi phí từ nhỏ đến lớn, sau đó thực hiện kết nối mới (C) vào tập với điều kiện trung tâm X chưa nằm trong tập (S).

    Cây và Rừng

    Một cấu trúc dạng cây được tổ chức trong CSDL quan hệ dưới dạng các dòng của bảng như sau.

    Đề thi đầu vào của công ty MDC 4

    Trong đó, node gốc trong cây sẽ có mã node cha là 0. Có thể có nhiều cây khác nhau trong rừng. Số dòng tối đa có thể lên đến 1.000.000

    Yêu cầu:

    1. Đọc từ tệp tin tree.txt các node của cây vào bộ nhớ, tệp tin gồm nhiều dòng, mỗi dòng là một node chứa 3 trường thông tin: Mã của node, mã node cha, tên của node.
    2. Nhập vào một cặp mã node XY, trả lời xem X có phải là node cha (ông, cụ…) của Y hay không. Hiển thị ra màn hình mối quan hệ của XY (ví dụ: X=>A=>B=>Y)
    3. Nhập vào một mã node X, in ra màn hình tất cả các node con, cháu, chắt….của X (bao gồm mã node, tên node, mỗi cái trên một dòng).
    4. Hiện thời gian thực hiện thuật toán cho ý 2 và 3, tính theo ms (milisecond)

    Đề thi tham khảo từ https://www.tailieubkhn.com/2021/06/de-thi-dau-vao-mdc.html