Tất cả câu hỏi

Ngân hàng câu hỏi trắc nghiệm có giải thích chi tiết.

6.260/20.347 câuCòn 14.087
ALeads to perfect products with no defects
BShortens the length of time it takes to deliver products to market
CAllows you deliver an ongoing stream of good news about new features to customers
DResults in less feedback from customers and other stakeholders about your products
Lời giải
Đáp án đúng: "Allows you deliver an ongoing stream of good news about new features to customers". Prototyping (làm mẫu thử) là cách dựng nhanh một phiên bản thô của sản phẩm hay tính năng để thử với người dùng, sửa theo phản hồi rồi lặp lại; vì mỗi vòng lặp ngắn, doanh nghiệp có thể liên tục tung ra cải tiến nhỏ, và chính dòng tin vui đều đặn về tính năng mới này nâng CX (customer experience, trải nghiệm khách hàng) vì khách thấy sản phẩm luôn được làm tốt hơn theo điều họ góp ý. Cần nói thẳng rằng "Shortens the length of time it takes to deliver products to market" cũng là một lợi ích có thật của prototyping, nhưng đó là lợi ích về tốc độ vận hành của doanh nghiệp, còn câu hỏi nhấn vào tác động lên trải nghiệm mà khách hàng cảm nhận được. "Leads to perfect products with no defects" sai vì mẫu thử chỉ giúp phát hiện lỗi sớm, không có quy trình nào bảo đảm sản phẩm hoàn hảo không khuyết tật. "Results in less feedback from customers" đi ngược bản chất của prototyping, vốn sinh ra để thu được nhiều phản hồi hơn từ khách hàng và các bên liên quan.
Mở trang câu hỏi này →
Đề bài
LinkedList<T> class?
AIList<T>
BISet<T>
CIDictionary<TKey, TValue>
DIEnumerable<T>
Lời giải

Đáp án đúng: "IEnumerable<T>". Trong .NET, LinkedList<T> thuộc System.Collections.Generic là danh sách liên kết đôi, mỗi nút LinkedListNode<T> trỏ tới nút trước và nút sau; lớp này cài đặt ICollection<T>, IReadOnlyCollection<T> và IEnumerable<T>, nhờ IEnumerable<T> mà ta duyệt được nó bằng foreach và dùng được LINQ. "IList<T>" sai vì giao diện này đòi truy cập theo chỉ số như list[i], Insert và RemoveAt tại vị trí; danh sách liên kết muốn tới phần tử thứ i phải đi lần từ đầu, nên .NET cố ý không cho LinkedList<T> cài IList<T>, thay vào đó là AddFirst, AddLast, AddBefore, AddAfter. "ISet<T>"là giao diện của tập hợp không cho phần tử trùng, như HashSet<T> hay SortedSet<T>, trong khi danh sách liên kết chứa trùng thoải mái. "IDictionary<TKey, TValue>" dành cho cấu trúc ánh xạ khoá sang giá trị như Dictionary<TKey, TValue>, không phải một dãy phần tử có thứ tự như

Lời giải
LinkedList<T>.
Mở trang câu hỏi này →
AFileStream
BMemoryStream
CStreamReader
DXmlReader
Lời giải
Đáp án đúng gồm hai ý: "FileStream" và "MemoryStream". Trong .NET, lớp XmlSerializer thuộc System.Xml.Serialization chuyển một đối tượng thành văn bản XML, và phương thức Serialize nhận một luồng đích kiểu Stream để ghi kết quả vào; hai lớp con của Stream hay dùng nhất là FileStream, khi muốn ghi XML thẳng ra tệp trên đĩa, và MemoryStream, khi muốn giữ XML trong bộ nhớ để gửi qua mạng, lưu vào cơ sở dữ liệu hay đọc lại ngay. "StreamReader" là lớp đọc văn bản từ một luồng, dùng để đọc chứ không phải để ghi, nên không thể làm đích cho việc tuần tự hoá; nếu muốn đi qua lớp văn bản thì Serialize cũng có bản nhận TextWriter, chẳng hạn StreamWriter, chứ không phải StreamReader. "XmlReader" là bộ đọc XML tuần tự, đi cùng phương thức Deserialize để dựng lại đối tượng từ XML, tức chiều ngược lại của câu hỏi, và nó cũng không phải một luồng.
Mở trang câu hỏi này →
AcomponentShouldMount()
BcomponentWillUpdate()
CshouldComponentUpdate()
DcomponentUpdate()
Lời giải
Đáp án đúng: "shouldComponentUpdate()". Câu dẫn là bản dịch máy của một câu trong tài liệu React, cần đọc lại như sau: dedication là rendering (lúc render), buildings or circuits là props or state, adopted là received; tức câu gốc hỏi phương thức nào được gọi trước khi render khi component nhận props hoặc state mới. Đó là shouldComponentUpdate(nextProps, nextState) trong component dạng class: nó trả về true để React tiếp tục render, hoặc false để bỏ qua lần cập nhật này, nhờ vậy dùng để tối ưu hiệu năng. "componentShouldMount()" không tồn tại trong vòng đời React; giai đoạn gắn chỉ có constructor, render và componentDidMount. "componentWillUpdate()" có thật nhưng chỉ chạy sau khi shouldComponentUpdate đã trả về true, ngay trước render, và nay đã đổi tên thành UNSAFE_componentWillUpdate vì không còn được khuyên dùng. "componentUpdate()" không phải phương thức vòng đời nào; tên gần nhất là componentDidUpdate, chạy sau khi render xong chứ không phải trước đó.
Mở trang câu hỏi này →
AStack Navigator
BTab Navigator
CDrawer Navigator
DBottom Sheet Navigator
Lời giải
Đáp án đúng: "Stack Navigator". Stack Navigator của React Navigation quản lý màn hình như một chồng: mỗi lần navigate thì đẩy màn mới lên, quay lại thì gỡ màn trên cùng xuống, và màn chỉ được dựng khi cần; vì không có thanh điều hướng nào phải hiển thị cùng lúc mọi màn, số màn có thể tăng lên 10 hay nhiều hơn mà giao diện không rối, nên đây là lựa chọn dễ mở rộng nhất. "Tab Navigator" hợp với ba đến năm mục chính luôn hiện trên thanh tab; nhồi 10 tab thì thanh quá chật và người dùng khó chọn. "Drawer Navigator" hợp làm menu cho các khu vực cấp cao, nhưng 10 mục đã thành một danh sách dài, và nó không có sẵn lối đi tiến lùi giữa các màn chi tiết. "Bottom Sheet Navigator" không phải bộ điều hướng dựng sẵn của React Navigation; bottom sheet là tấm trượt từ đáy dùng cho thao tác phụ, không phải nơi tổ chức cả chục màn hình. Trong thực tế, app nhiều màn thường kết hợp: drawer hoặc tab cho vài khu vực chính, mỗi khu vực lồng một stack chứa các màn bên trong.
Mở trang câu hỏi này →
ATouchableNativeFeedback is implemented by replacing the original View with an RCTView (React Native's native view) with additional properties to create the ripple effect.
BYou can use TouchableNativeFeedback on both iOS and Android if you add a platform check to only use it on Android.
CTouchableNativeFeedback allows you to place multiple child Views, as long as they are all wrapped inside a single parent View.
DTouchableNativeFeedback only supports a single child View inside it. You cannot place multiple child Views directly inside TouchableNativeFeedback.
Lời giải
Đáp án đúng gồm hai ý: "TouchableNativeFeedback allows you to place multiple child Views, as long as they are all wrapped inside a single parent View." và "TouchableNativeFeedback only supports a single child View inside it. You cannot place multiple child Views directly inside TouchableNativeFeedback.". TouchableNativeFeedback là component chạm của Android tạo hiệu ứng ripple (gợn sóng) bằng drawable gốc của hệ điều hành; nó không tự vẽ một View bao ngoài mà gắn thuộc tính ripple vào chính View con, nên chỉ nhận đúng một View con. Muốn đặt nhiều thành phần, ta bọc chúng trong một View cha rồi đưa View cha đó vào làm con duy nhất; hai phát biểu này là hai mặt của cùng một giới hạn khi dùng. Phát biểu "is implemented by replacing the original View with an RCTView" mô tả cách component được cài đặt bên trong, nội dung không sai, nhưng đó là chi tiết hiện thực chứ không phải một giới hạn người dùng gặp khi viết mã, nên không trả lời câu hỏi. Phát biểu "on both iOS and Android if you add a platform check" sai vì TouchableNativeFeedback chỉ có trên Android; thêm kiểm tra Platform.OS chỉ giúp tránh dùng nó trên iOS, ở iOS phải thay bằng TouchableOpacity hay TouchableHighlight, nghĩa là component này không hề dùng được trên cả hai nền tảng.
Mở trang câu hỏi này →
ACall setTheme with an integer representing the theme.
BUse SharedPreferences.edit().putString("theme", value) and commit the changes.
CUse ReactContext.getTheme() and update it directly.
DCall setTheme and pass in a String.
Lời giải
Đáp án đúng gồm hai ý: "Call setTheme with an integer representing the theme." và "Use SharedPreferences.edit().putString("theme", value) and commit the changes.". Trên Android, theme là một style khai báo trong tài nguyên, và Activity.setTheme nhận một số nguyên chính là ID tài nguyên style dạng R.style.TenTheme; vì vậy native module (mô-đun gốc viết bằng Java hoặc Kotlin, phơi ra cho JavaScript qua phương thức gắn @ReactMethod) lấy Activity hiện tại rồi gọi setTheme với số nguyên đó, thường kèm recreate để giao diện vẽ lại. Còn để nhớ lựa chọn của người dùng qua các lần mở app, module lưu giá trị theme vào SharedPreferences (kho khoá–giá trị nhỏ của Android) bằng edit().putString rồi commit để ghi xuống. "Use ReactContext.getTheme() and update it directly." sai vì ReactContext không cung cấp getTheme để sửa theme trực tiếp; theme gắn với Activity chứ không phải với ngữ cảnh của cầu nối React. "Call setTheme and pass in a String." không khớp chữ ký của Activity.setTheme vốn chỉ nhận ID nguyên; nó chỉ đúng trong trường hợp bạn tự viết một hàm @ReactMethod nhận chuỗi từ JavaScript rồi tự quy chuỗi đó về ID style trước khi gọi setTheme, tức cuối cùng vẫn phải truyền số nguyên.
Mở trang câu hỏi này →
Anavigate and push are the same and interchangeable
Bnavigate will navigate to the route if it is already in the stack, otherwise push a new one, while push will always add a new screen to the stack
Cnavigate can only be used for the initial route, and push is used for subsequent routes
Dpush will remove the previous screen from the stack
Lời giải
Đáp án đúng: "navigate will navigate to the route if it is already in the stack, otherwise push a new one, while push will always add a new screen to the stack". Trong Stack Navigator, navigate xử lý theo tên route: nếu màn hình đó đã có trong ngăn xếp thì quay về nó (cập nhật params) thay vì tạo bản mới, nếu chưa có thì mới đẩy thêm; push luôn đẩy một bản mới lên đỉnh ngăn xếp, nên có thể mở cùng một màn hình chi tiết nhiều lần chồng lên nhau. "navigate and push are the same and interchangeable" sai vì hai hàm khác nhau đúng ở điểm trên. "navigate can only be used for the initial route" sai vì navigate dùng được mọi lúc, route ban đầu do initialRouteName quyết định. "push will remove the previous screen from the stack" mô tả hành vi của replace, còn push giữ nguyên màn hình trước nằm bên dưới.
Mở trang câu hỏi này →
AWhen the application needs to store more than 10,000 records.
BWhen the application becomes more complex (e.g., multiple components need to access and modify the same data).
CWhen you want to reduce the load on the backend API.
DWhen you need to synchronize data between multiple devices.
Lời giải
Đáp án đúng: "When the application becomes more complex (e.g., multiple components need to access and modify the same data).". Biến JavaScript thường không khiến giao diện render lại khi đổi giá trị và khó chia sẻ an toàn giữa nhiều component; khi ứng dụng phức tạp lên và nhiều component cùng đọc, cùng sửa một dữ liệu, ta cần giải pháp quản lý state như Context, Redux, Zustand hay MobX để có một nguồn dữ liệu duy nhất và cập nhật giao diện đồng bộ. "When the application needs to store more than 10,000 records." không phải tiêu chí: lưu số lượng lớn bản ghi là việc của cơ sở dữ liệu cục bộ như SQLite, Realm, không phụ thuộc một ngưỡng cố định. "When you want to reduce the load on the backend API." liên quan tới cache, phân trang hay gộp yêu cầu nhiều hơn là tổ chức dữ liệu trong app. "When you need to synchronize data between multiple devices." đòi hỏi backend hoặc dịch vụ đồng bộ như Firebase, vì giải pháp quản lý state cục bộ không tự đồng bộ dữ liệu giữa các thiết bị.
Mở trang câu hỏi này →
AIncreased reusability
BManual merging errors
CImproved performance
DBetter type checking
Lời giải
Đáp án đúng: "Manual merging errors". StyleSheet.compose nhận hai style và gộp theo đúng quy tắc của React Native: khi cả hai đều có thì trả về mảng hai style để style sau đè style trước, khi một bên rỗng thì trả nguyên bên kia, giữ được tham chiếu tới style đã tạo bằng StyleSheet.create. Nếu không dùng nó mà tự gộp bằng toán tử trải đối tượng hay Object.assign, lập trình viên dễ sai thứ tự ưu tiên, làm mất thuộc tính hoặc tạo đối tượng mới mỗi lần render. "Increased reusability" sai vì đó là lợi ích, không phải rủi ro. "Improved performance" sai vì đây cũng là lợi ích, và gộp tay mỗi lần render thường làm hiệu năng kém đi chứ không tốt hơn. "Better type checking" sai vì đây là lợi ích chứ không phải rủi ro, và gộp tay không giúp kiểm tra kiểu tốt hơn.
Mở trang câu hỏi này →
ACameraRoll
BGeolocation
CAsyncStorage
DNetInfo
Lời giải
Đáp án đúng: "Geolocation". Geolocation API cho phép lấy vị trí thiết bị qua getCurrentPosition (lấy một lần) và watchPosition (theo dõi liên tục), trả về vĩ độ, kinh độ và độ chính xác; nay nó được tách ra gói cộng đồng @react-native-community/geolocation và cần xin quyền vị trí trên Android lẫn iOS. "CameraRoll" truy cập thư viện ảnh và video trên máy. "AsyncStorage" lưu dữ liệu khoá–giá trị bền vững, không biết gì về vị trí. "NetInfo" cho biết trạng thái kết nối mạng như Wi-Fi hay di động và có mạng hay không, không cung cấp toạ độ.
Mở trang câu hỏi này →
ASequential setItem calls
BmultiSet
CbatchSave
DAsyncStorage.saveAll()
Lời giải
Đáp án đúng: "multiSet". AsyncStorage.multiSet nhận một mảng các cặp khoá và giá trị rồi ghi tất cả trong một lời gọi, giảm số lần đi qua cầu nối giữa JavaScript và native cũng như số thao tác ghi xuống bộ nhớ, nên nhanh hơn khi cần lưu nhiều mục cùng lúc; tương tự có multiGet và multiRemove cho đọc và xoá hàng loạt. "Sequential setItem calls" vẫn đúng chức năng nhưng mỗi lần ghi một mục là một lời gọi bất đồng bộ riêng, tốn thời gian hơn. "batchSave" không phải phương thức của AsyncStorage, chỉ là tên đoán. "AsyncStorage.saveAll()" cũng không tồn tại trong API; tên đúng cho việc ghi hàng loạt là multiSet.
Mở trang câu hỏi này →
AStack Navigator
BBottom Tab Navigator
CDrawer Navigator
DInline Navigator
Lời giải
Đáp án đúng: "Drawer Navigator". Cài đặt, hồ sơ và trung tâm trợ giúp là những khu vực toàn cục, ít dùng nhưng phải với tới được từ bất kỳ màn hình nào; Drawer Navigator đặt chúng trong một menu trượt từ cạnh màn hình, luôn mở được bằng thao tác vuốt hoặc nút menu mà không chiếm chỗ cố định. "Bottom Tab Navigator" hợp với vài khu vực chính dùng thường xuyên, thanh tab chiếm chỗ cố định ở đáy và không hợp cho các mục phụ như trợ giúp. "Stack Navigator" chỉ quản lý chuỗi màn hình đi tới và quay lại, không cho truy cập trực tiếp từ mọi nơi. "Inline Navigator" không phải navigator có trong React Navigation.
Mở trang câu hỏi này →
AuseEffect
BuseState
CuseContext
DuseReducer
Lời giải
Đáp án đúng: "useState". useState là hook cơ bản để thêm state cục bộ vào component hàm: gọi useState(0) trả về cặp gồm giá trị hiện tại và hàm cập nhật; gọi hàm cập nhật làm component render lại với giá trị mới. "useEffect" sai vì hook này chạy tác dụng phụ sau khi render như gọi API, đăng ký sự kiện hay hẹn giờ, nó không giữ state. "useContext" sai vì nó đọc giá trị từ một Context do Provider phía trên cung cấp, dùng để chia sẻ dữ liệu qua nhiều tầng chứ không phải khai báo state riêng. "useReducer" cũng quản lý state được và hợp khi state phức tạp với nhiều kiểu hành động, nhưng câu hỏi hỏi hook thường dùng nhất, và đó là useState; useReducer là lựa chọn nâng cao hơn cho trường hợp đặc thù.
Mở trang câu hỏi này →
ATo set the initial size of a component before any space distribution
BTo determine the maximum size of a component
CTo set the minimum size of a component
DTo determine the final size of a component
Lời giải
Đáp án đúng: "To set the initial size of a component before any space distribution". flexBasis xác định kích thước ban đầu của phần tử theo trục chính, trước khi Flexbox chia phần không gian dư bằng flexGrow hoặc co bớt phần thiếu bằng flexShrink; nó là điểm xuất phát của phép tính bố cục chứ chưa phải kết quả. "To determine the maximum size of a component" là việc của maxWidth hoặc maxHeight, đặt trần mà phần tử không được vượt. "To set the minimum size of a component" là việc của minWidth hoặc minHeight, đặt sàn mà phần tử không được co nhỏ hơn. "To determine the final size of a component" không đúng, vì kích thước cuối cùng là kết quả sau khi flexGrow, flexShrink tính toán từ flexBasis cùng các ràng buộc min và max, chứ không do một thuộc tính nào quyết định trực tiếp.
Mở trang câu hỏi này →
AThe native module must be pre-compiled in the JavaScript Thread to be compatible with the bridge.
BThe native module needs to be integrated into the startup of the Native Thread to ensure it is always packaged and ready.
CThe native module must have its layout calculated first by the Shadow Thread to ensure an accurate interface.
DThe native module only needs to be added without requiring integration with any thread.
Lời giải
Đáp án đúng: "The native module needs to be integrated into the startup of the Native Thread to ensure it is always packaged and ready.". Native Module là mã native nên sống ở phía native: nó phải được đóng gói vào ứng dụng và đăng ký lúc ứng dụng khởi động (Android thêm Package vào getPackages trong MainApplication, iOS dùng RCT_EXPORT_MODULE), để khi JavaScript gọi thì phía native đã có sẵn module đó. Đây chính là ý tích hợp vào quá trình khởi động phía native. "The native module must be pre-compiled in the JavaScript Thread to be compatible with the bridge." sai vì JavaScript Thread chỉ chạy mã JavaScript, không biên dịch mã Java hay Objective-C; mã native được biên dịch lúc build bằng Gradle hoặc Xcode. "The native module must have its layout calculated first by the Shadow Thread to ensure an accurate interface." sai vì Shadow Thread chỉ tính bố cục cho thành phần giao diện; module không có giao diện thì không cần bố cục. "The native module only needs to be added without requiring integration with any thread." sai vì module không được đăng ký thì React Native không biết nó tồn tại và lời gọi từ JavaScript sẽ thất bại.
Mở trang câu hỏi này →
AflexDirection: 'row', justifyContent: 'space-around', alignItems: 'center'
BflexDirection: 'column', justifyContent: 'center'
CflexDirection: 'row', justifyContent: 'flex-start', alignItems: 'flex-start'
DflexDirection: 'column', justifyContent: 'space-between'
Lời giải
Đáp án đúng: "flexDirection: 'row', justifyContent: 'space-around', alignItems: 'center'". Ba ô vuông xếp ngang cần trục chính nằm ngang nên đặt hướng hàng; justifyContent điều khiển trục chính, giá trị space-around chia khoảng đều quanh mỗi ô; alignItems điều khiển trục phụ, lúc này là chiều dọc, giá trị center đưa các ô vào giữa màn hình theo chiều dọc (container cần flex: 1 để chiếm hết chiều cao). "flexDirection: 'column', justifyContent: 'center'" xếp các ô thành cột dọc và dồn vào giữa, không phải hàng ngang. "flexDirection: 'row', justifyContent: 'flex-start', alignItems: 'flex-start'" xếp ngang nhưng dồn về góc trên bên trái, không cách đều, không căn giữa dọc. "flexDirection: 'column', justifyContent: 'space-between'" xếp dọc và đẩy các ô ra hai đầu.
Mở trang câu hỏi này →
ARCT_CREATE_METHOD
BRCT_DEFINE_METHOD
CRCT_EXPORT_METHOD
DRCT_NATIVE_METHOD
Lời giải
Đáp án đúng: "RCT_EXPORT_METHOD". Trong native module iOS viết bằng Objective-C, lớp tuân thủ giao thức RCTBridgeModule dùng macro RCT_EXPORT_MODULE() để đăng ký module với React Native, rồi dùng macro RCT_EXPORT_METHOD để xuất từng phương thức cho JavaScript gọi qua NativeModules; phương thức xuất ra chạy bất đồng bộ và trả kết quả qua callback hoặc Promise. "RCT_CREATE_METHOD" không tồn tại trong bộ macro của React Native, chỉ là tên đoán. "RCT_DEFINE_METHOD" cũng không có; React Native không dùng động từ define cho việc này. "RCT_NATIVE_METHOD" không tồn tại; macro đúng dùng chữ EXPORT để nói rằng phương thức được phơi ra cho phía JS.
Mở trang câu hỏi này →
ANative performance
BCode sharing between iOS and Android
CLimited community support
DComplex debugging process
Lời giải
Đáp án đúng: "Code sharing between iOS and Android". Với React Native, phần lớn mã (giao diện bằng component, logic, gọi API, quản lý state) viết một lần bằng JavaScript và chạy trên cả iOS lẫn Android, nên chỉ cần một nhóm phát triển thay vì hai nhóm Swift và Kotlin, giảm chi phí xây dựng và bảo trì; đây là điểm thuyết phục khách hàng về chi phí. "Native performance" là ưu điểm thật vì giao diện dùng thành phần native, nhưng nó nói về trải nghiệm người dùng chứ không trực tiếp về tiết kiệm chi phí. "Limited community support" sai vì đây là điểm yếu chứ không phải ưu điểm, và thực tế cộng đồng React Native rất lớn. "Complex debugging process" sai vì gỡ lỗi phức tạp làm tăng chi phí, không thể đem ra làm điểm mạnh khi chào khách.
Mở trang câu hỏi này →
ASwift
BJava
CJavaScript
DKotlin
Lời giải
Đáp án đúng: "JavaScript". React Native cho phép viết logic và giao diện bằng JavaScript (hoặc TypeScript, vốn biên dịch về JavaScript) với cú pháp React và JSX; mã chạy trên engine JavaScript như Hermes rồi điều khiển component native của từng nền tảng. "Swift" là ngôn ngữ native của iOS, chỉ dùng khi viết native module hay tuỳ biến phần iOS của dự án. "Java" là ngôn ngữ native truyền thống của Android, cũng chỉ xuất hiện trong phần mã native. "Kotlin" là ngôn ngữ Android hiện đại, nay là mặc định trong thư mục android của dự án mới, nhưng vẫn không phải ngôn ngữ chính để viết ứng dụng React Native.
Mở trang câu hỏi này →