CSI106Chưa đoKỳ 1Cơ sở ngành Cập nhật 2 ngày trước

Introduction to Computer Science - CSI106

Khoa học máy tính bắt đầu từ một câu hỏi đơn giản đến bất ngờ: làm sao một cỗ máy chỉ phân biệt được hai trạng thái lại xử lý nổi văn bản, hình ảnh, âm thanh và cả những suy luận phức tạp? CSI106 trả lời bằng cách đi dọc chiều sâu của một hệ máy tính, từ tầng bit lên tới tầng ứng dụng, để thấy rõ mỗi tầng được dựng trên tầng dưới nó ra sao. Chặng đầu là chuyện biểu diễn: quy số, chữ, ảnh và âm thanh về những dãy bit, các quy ước xử lý số âm và số có phần lẻ, rồi những phép toán logic tác động lên từng bit một. Chặng giữa bước vào cỗ máy thật — bộ xử lý, phân cấp bộ nhớ, đường truyền nối chúng — và vào lớp phần mềm điều phối tất cả, nơi hệ điều hành chia bộ nhớ, sắp lịch cho tiến trình và tạo ra ảo giác rằng nhiều chương trình đang chạy cùng lúc. Chặng sau mở ra ngoài phạm vi một máy đơn lẻ: nhiều máy nối nhau thành mạng theo lối phân tầng, khối dữ liệu lớn được tổ chức thành cơ sở dữ liệu quan hệ, và thông tin trên đường truyền được che bằng mã hoá. Xen giữa là bộ công cụ để viết phần mềm: cấu trúc dữ liệu, giải thuật cùng cách ước lượng chi phí chạy, các hệ hình ngôn ngữ lập trình, và quy trình làm phần mềm như một nghề có kỷ luật. Chặng cuối chạm tới trí tuệ nhân tạo cùng những ràng buộc pháp lý và đạo đức đi kèm. Cái môn này để lại là một tấm bản đồ, có trước khi người học đi sâu vào bất kỳ hướng nào. Sau đó, một dãy bit lạ, một thông báo lỗi mạng, một truy vấn chạy ì ạch hay một đoạn mã khó sửa đều thôi còn là hộp đen: người học biết hiện tượng nằm ở tầng nào, chịu ràng buộc gì, và nên tra tiếp ở đâu. Đó cũng là nền để bước tiếp vào những môn hẹp hơn về lập trình, hệ thống, mạng hay dữ liệu mà không phải quay lại học lại các khái niệm gốc.

359Câu hỏi
8Bộ đề
13Chủ đề

Câu hỏi của môn

144/359 câuCòn 215
ARectangle
BEllipse
CDiamond
DLine
Lời giải
Đáp án đúng: "Rectangle". Trong sơ đồ thực thể - quan hệ, mỗi tập thực thể, tức nhóm đối tượng cùng loại mà ta cần lưu dữ liệu về chúng, được vẽ bằng một hình chữ nhật có tên tập thực thể đặt bên trong. "Ellipse" dành cho thuộc tính của thực thể hoặc của quan hệ, chẳng hạn tên hay ngày sinh. "Diamond" dành cho tập quan hệ, tức mối liên kết giữa các tập thực thể như quan hệ dạy giữa giảng viên và môn học. "Line" không phải khung chứa đối tượng nào mà chỉ là đoạn nối, dùng gắn thuộc tính vào thực thể hoặc gắn thực thể vào quan hệ, kèm ký hiệu ràng buộc lực lượng ở hai đầu.
Mở trang câu hỏi này →
AA column that can store null values
BA column or combination of columns that uniquely identify each row in the table
CA column used for indexing
DA foreign key reference in another table
Lời giải
Đáp án đúng: "A column or combination of columns that uniquely identify each row in the table". Khoá chính là thuộc tính hoặc tổ hợp thuộc tính mà giá trị của nó không trùng ở hai dòng nào, nhờ đó mỗi bản ghi được chỉ đích danh duy nhất; kéo theo là nó không được để rỗng. "A column that can store null values" trái hẳn với yêu cầu đó, vì giá trị rỗng nghĩa là không nhận dạng được dòng. "A column used for indexing" lẫn khoá với chỉ mục: chỉ mục chỉ là cơ chế tăng tốc tìm kiếm và có thể dựng trên cột có giá trị trùng nhau. "A foreign key reference in another table" mô tả khoá ngoại nằm ở bảng khác, thứ dùng để liên kết hai bảng chứ không phải khoá nhận dạng của bảng này.
Mở trang câu hỏi này →
ARelational model
BHierarchical model
CNetwork model
DDistributed model
Lời giải
Đáp án đúng: "Relational model". Mô hình quan hệ nhìn dữ liệu như một tập các bảng hai chiều: mỗi dòng là một bản ghi, mỗi cột là một thuộc tính, và liên hệ giữa các bảng thể hiện qua giá trị chung của cột chứ không qua con trỏ. "Hierarchical model" tổ chức dữ liệu thành cây lộn ngược, bản ghi con treo dưới bản ghi cha. "Network model" cho một bản ghi nối tới nhiều bản ghi khác thành đồ thị, các liên kết hiện thực bằng con trỏ. "Distributed model" nói về chỗ đặt dữ liệu, tức chia nhau trên nhiều máy, chứ không quy định dữ liệu được cấu trúc theo hình thức nào.
Mở trang câu hỏi này →
Aunion
Bjoin
Cproject
Dall of these above
Lời giải
Đáp án đúng: "project". Phép chiếu là phép toán một ngôi: nó nhận đúng một quan hệ làm đầu vào và sinh ra quan hệ mới chỉ gồm những cột được chọn, số dòng không đổi. "union" cần hai quan hệ có cùng cấu trúc để gộp các dòng của chúng lại, nên là phép hai ngôi. "join" cũng lấy hai quan hệ rồi ghép từng cặp dòng theo điều kiện trên thuộc tính chung, tức hai ngôi. "all of these above" chỉ đúng nếu mọi phép được liệt kê đều một ngôi, nhưng phép gộp và phép ghép vừa nêu đều đòi hai bảng đầu vào.
Mở trang câu hỏi này →
ARelational database model
BObject-oriented database model
CNetwork database model
DHierarchical database model
Lời giải
Đáp án đúng: "Hierarchical database model". Mô hình phân cấp xếp dữ liệu thành cây lộn ngược: một bản ghi gốc ở trên, mỗi bản ghi cha có thể có nhiều con nhưng mỗi con chỉ thuộc một cha, nên đường truy cập luôn đi từ gốc xuống. "Relational database model" dựng dữ liệu thành các bảng hai chiều, không có quan hệ cha con cố định nào. "Object-oriented database model" lưu dữ liệu dưới dạng đối tượng mang theo cả phương thức, tổ chức theo lớp và kế thừa. "Network database model" cũng nối bản ghi bằng con trỏ nhưng cho phép một bản ghi có nhiều cha, vì thế hình dạng của nó là đồ thị chứ không còn là cây.
Mở trang câu hỏi này →
AWhen the data is sorted
BWhen the data is unsorted
CWhen the data is in an array
DWhen the data is in a linked list
Lời giải
Đáp án đúng: "When the data is unsorted". Tìm nhị phân sống nhờ một tiền đề: dữ liệu đã sắp thứ tự, nhờ đó một phép so sánh với phần tử giữa đủ để biết nên bỏ nửa trước hay nửa sau. Dữ liệu chưa sắp xếp thì phép loại nửa đó mất căn cứ, thuật toán có thể bỏ qua đúng phần tử cần tìm. "When the data is sorted" lại chính là điều kiện để thuật toán chạy được. "When the data is in an array" là hoàn cảnh thuận lợi nhất, vì mảng cho nhảy thẳng tới chỉ số giữa trong một bước. "When the data is in a linked list" làm thuật toán chậm đi do phải đi tuần tự mới tới được phần tử giữa, nhưng nếu danh sách đã sắp thứ tự thì kết quả vẫn đúng.
Mở trang câu hỏi này →
AAssigning a value to a variable
BEvaluating a condition once
CUsing a for loop to iterate over a list
DBreaking out of a loop
Lời giải
Đáp án đúng: "Using a for loop to iterate over a list". Cấu trúc lặp nghĩa là một nhóm lệnh được thực hiện lại nhiều lần dưới sự kiểm soát của một điều kiện hoặc một dãy giá trị; vòng for đi qua từng phần tử của danh sách đúng là hình ảnh đó. "Assigning a value to a variable" là một lệnh đơn chạy một lần, thuộc cấu trúc tuần tự. "Evaluating a condition once" là cấu trúc quyết định: xét điều kiện rồi rẽ nhánh, không có chuyện quay lại thực hiện tiếp. "Breaking out of a loop" là lệnh thoát khỏi vòng lặp, nó rút bớt số lần lặp đang có chứ bản thân không sinh ra sự lặp nào.
Mở trang câu hỏi này →
AWhen solving problems that require backtracking
BWhen stack overflow is a concern
CWhen the problem involves tree traversal
DWhen solving problems with divide-and-conquer techniques
Lời giải
Đáp án đúng: "When stack overflow is a concern". Mỗi lời gọi đệ quy đều đẩy một khung vào ngăn xếp lời gọi để giữ tham số và chỗ quay về; độ sâu lớn làm ngăn xếp cạn và chương trình chết, trong khi bản lặp chỉ giữ trạng thái trong vài biến nên không tốn ngăn xếp. "When solving problems that require backtracking" là chỗ đệ quy có lợi, vì việc quay lui khớp tự nhiên với việc trả về khung gọi trước đó. "When the problem involves tree traversal" cũng vậy: cây vốn được định nghĩa đệ quy nên duyệt bằng đệ quy ngắn và rõ hơn. "When solving problems with divide-and-conquer techniques" chia bài toán thành bài toán con cùng dạng, đúng khuôn mẫu mà đệ quy diễn đạt gọn nhất.
Mở trang câu hỏi này →
ASequential search requires the data to be sorted in ascending order, while binary search can work on unsorted data as well
BBinary search divides the search space into halves, while sequential search checks elements one by one
CSequential search exhibits greater efficiency and speed compared to binary search when applied to large datasets containing a significant number of elements
DBinary search is a versatile algorithm that can be applied to various types of data structures, including arrays, linked lists, and trees, while sequential search is specifically designed to work only with arrays
Lời giải
Đáp án đúng: "Binary search divides the search space into halves, while sequential search checks elements one by one". Khác biệt gốc nằm ở cách thu hẹp vùng tìm: mỗi bước của tìm nhị phân loại bỏ một nửa số phần tử còn lại nên số phép so sánh tỉ lệ với logarit kích thước dữ liệu, còn tìm tuần tự xét lần lượt từng phần tử nên chi phí tỉ lệ với số phần tử. Khẳng định "Sequential search requires the data to be sorted in ascending order" nói ngược vấn đề, bởi chính tìm nhị phân mới đòi dữ liệu đã sắp thứ tự, còn tìm tuần tự chạy trên dữ liệu bất kỳ. Khẳng định "Sequential search exhibits greater efficiency and speed compared to binary search" sai vì dữ liệu càng lớn thì lợi thế càng nghiêng về phía chia nửa. Còn "sequential search is specifically designed to work only with arrays" cũng sai: tìm tuần tự dùng được cho cả danh sách liên kết, trong khi tìm nhị phân mới là thuật toán cần truy cập ngẫu nhiên.
Mở trang câu hỏi này →
Afor
Bif else
Cswitch case
Dreturn
Lời giải
Đáp án đúng: "for". Lệnh for là cấu trúc lặp với số lần xác định: nó lần lượt lấy từng phần tử hoặc từng chỉ số của mảng rồi chạy lại thân lệnh cho tới khi đi hết mảng. "if else" chỉ xét một điều kiện rồi chọn một trong hai nhánh và chạy đúng một lần, nên không đi qua được toàn bộ mảng. "switch case" cũng là cấu trúc rẽ nhánh, chỉ chọn nhánh khớp với giá trị của biểu thức rồi kết thúc. "return" kết thúc hàm hiện tại và trả giá trị về nơi gọi, thậm chí làm vòng lặp dừng sớm, chứ không tạo ra sự lặp.
Mở trang câu hỏi này →
AA linear list; First In, First Out (FIFO).
BA restricted linear list; Last In, First Out (LIFO).
CA collection of related elements of different types.
DA sorted collection of elements accessed by index.
Lời giải
Đáp án đúng: "A restricted linear list; Last In, First Out (LIFO)." Ngăn xếp là danh sách tuyến tính bị hạn chế: mọi phép thêm và lấy chỉ diễn ra ở một đầu duy nhất gọi là đỉnh, vì thế phần tử vào sau cùng lại là phần tử ra trước tiên. "A linear list; First In, First Out (FIFO)." mô tả hàng đợi, nơi thêm ở một đầu và lấy ở đầu kia. "A collection of related elements of different types." là mô tả bản ghi gồm nhiều trường khác kiểu, không nói gì tới thứ tự vào ra. "A sorted collection of elements accessed by index." mô tả mảng đã sắp thứ tự và truy cập theo chỉ số, trong khi ngăn xếp không cho với tay vào phần tử nằm giữa.
Mở trang câu hỏi này →
A20, 10, 15, 5
B5, 10, 15, 20
C10, 15, 20, 5
D15, 10, 5, 20
Lời giải
Đáp án đúng: "20, 10, 15, 5". Dãy đẩy vào theo thứ tự 5, 15, 10, 20 và ngăn xếp chỉ cho lấy ở đỉnh, nên trình tự lấy ra là nghịch đảo trình tự đẩy vào: 20 ra trước, kế đó 10, rồi 15, cuối cùng là 5. "5, 10, 15, 20" là thứ tự tăng dần, mà ngăn xếp không sắp xếp gì và cũng không trả phần tử theo thứ tự đẩy vào. "10, 15, 20, 5" đòi lấy một phần tử nằm giữa trước khi lấy phần tử đang ở đỉnh, điều mà cấu trúc này không cho phép. "15, 10, 5, 20" bỏ qua phần tử đang ở đỉnh để lấy phần tử bên dưới trước rồi mới lấy đỉnh ở bước cuối, vi phạm đúng luật chỉ thao tác ở đỉnh.
Mở trang câu hỏi này →
AData and a pointer to the next node
BData and an index of the current node
CData and the next node's value
DData and the size of the list
Lời giải
Đáp án đúng: "Data and a pointer to the next node". Mỗi nút của danh sách liên kết gồm hai phần: phần dữ liệu mang nội dung cần lưu, và phần liên kết chứa địa chỉ của nút kế tiếp; chính chuỗi địa chỉ này nối các nút nằm rải rác trong bộ nhớ thành một danh sách, nút cuối mang liên kết rỗng. "Data and an index of the current node" gán cho nút một chỉ số như phần tử mảng, nhưng danh sách liên kết không nằm liền khối nên chỉ số chẳng dẫn tới đâu. "Data and the next node's value" chỉ sao lại giá trị của nút sau: biết giá trị mà không biết địa chỉ thì không đi tiếp được, lại còn nhân đôi dữ liệu. "Data and the size of the list" nhồi một thuộc tính của toàn danh sách vào từng nút, vừa trùng lặp vừa không giúp tìm nút kế tiếp.
Mở trang câu hỏi này →
138What is Queue used for?4 lựa chọn
AKeep the same order
BReverse the order of elements
CRandom elements
DSort the elements
Lời giải
Đáp án đúng: "Keep the same order". Hàng đợi chỉ cho thêm ở cuối và lấy ở đầu, nên phần tử nào vào trước sẽ ra trước; nhờ tính chất vào trước ra trước đó mà hàng đợi được dùng để giữ nguyên trật tự của dòng dữ liệu hoặc dòng yêu cầu đang chờ xử lý. "Reverse the order of elements" là việc của ngăn xếp, nơi phần tử vào sau lại ra trước nên trật tự bị đảo. "Random elements" trái với cấu trúc hàng đợi, vì không có phép lấy ở vị trí tuỳ ý, mọi phần tử phải chờ tới lượt mình. "Sort the elements" cũng không đúng: hàng đợi không so sánh giá trị, muốn phần tử ra theo độ ưu tiên thì phải dùng hàng đợi ưu tiên, một cấu trúc khác.
Mở trang câu hỏi này →
AData value and the address of the next element
BData value and the index of the element
CIndex of the previous and next element
DOnly the data value
ENone of the others
Lời giải
Đáp án đúng: "Data value and the address of the next element". Một phần tử của danh sách liên kết luôn có hai phần, giá trị dữ liệu và trường liên kết giữ địa chỉ của phần tử đứng sau, bởi các phần tử nằm rời rạc trong bộ nhớ nên chỉ có địa chỉ mới cho biết đi tiếp đến đâu. "Data value and the index of the element" dùng chỉ số kiểu mảng, thứ chỉ có nghĩa khi các phần tử nằm liên tiếp nhau. "Index of the previous and next element" bỏ mất chính giá trị dữ liệu, mà thiếu dữ liệu thì phần tử không lưu được gì. "Only the data value" thiếu trường liên kết nên các phần tử rời nhau, không tạo thành danh sách. "None of the others" không dùng được vì mô tả gồm giá trị dữ liệu kèm địa chỉ phần tử kế tiếp đã hoàn toàn đúng.
Mở trang câu hỏi này →
Amake a mask of all 0s and then AND the bit pattern and the mask.
Bmake a mask exactly the same as the bit pattern and then XOR the bit pattern and the mask.
CBoth a and b are correct
DBoth a and b are incorrect
Lời giải
Đáp án đúng: "Both a and b are correct". Mặt nạ toàn 0 đem AND với mẫu bit cho kết quả toàn 0, vì bit nào AND với 0 cũng ra 0; còn lấy mặt nạ y hệt mẫu bit rồi XOR thì mỗi cặp bit giống nhau cho 0, nên kết quả cũng toàn 0. Hai cách đều xoá sạch mọi bit, đó là lý do phương án gộp mới là đáp án thật chứ không phải phỏng đoán. "make a mask of all 0s and then AND the bit pattern and the mask." tự nó là một cách làm đúng, nhưng chọn riêng nó thì bỏ sót cách còn lại cũng cho kết quả như vậy. "make a mask exactly the same as the bit pattern and then XOR the bit pattern and the mask." cũng đúng và cũng không đầy đủ nếu chọn một mình. "Both a and b are incorrect" trái hẳn với hai phép tính vừa kiểm chứng ở trên.
Mở trang câu hỏi này →
A(0, 0, 0)
B(255, 255, 255)
C(0, 255, 0)
D(0, 0, 255)
Lời giải
Đáp án đúng: "(255, 255, 255)". Trong mô hình True-Color, mỗi điểm ảnh lưu ba thành phần đỏ, lục, lam, mỗi thành phần chiếm một byte nên nhận giá trị từ 0 tới 255 để chỉ cường độ. Đỏ thuần là (255, 0, 0) nghĩa là bật hết kênh đỏ và tắt hai kênh kia; trắng là lúc cả ba kênh đều ở cường độ cực đại, nên bộ ba phải là (255, 255, 255). "(0, 0, 0)" tắt cả ba kênh, cho ra màu đen. "(0, 255, 0)" chỉ bật cực đại kênh lục nên cho màu lục thuần. "(0, 0, 255)" bật riêng kênh lam, cho màu lam thuần.
Mở trang câu hỏi này →
A00001111
B00001110
C11110000
D11111111
Lời giải
Đáp án đúng: "00001111". Số 15 phân tích thành 8 + 4 + 2 + 1, nghĩa là bốn bit trọng số thấp đều phải bằng 1; ô nhớ rộng 8 bit mà số lại không dấu nên bốn bit cao chỉ việc bù 0, cho mẫu 00001111. "00001110" tắt bit trọng số 1 nên chỉ bằng 8 + 4 + 2 = 14, hụt đúng một đơn vị. "11110000" đặt bốn bit 1 vào nửa cao, nơi trọng số lần lượt là 128, 64, 32 và 16, nên giá trị thành 240; đây là lỗi hay gặp khi viết các bit theo chiều ngược lại. "11111111" bật cả tám bit nên bằng 255, tức giá trị lớn nhất mà một byte không dấu chứa được chứ không phải 15.
Mở trang câu hỏi này →
A(0001 1111)2
B(301)8
C(E1)16
D(32)10
Lời giải
Đáp án đúng: "(E1)16". Đổi -31 sang bù hai 8 bit theo ba bước: viết 31 thành 0001 1111, đảo mọi bit được 1110 0000, cộng thêm 1 được 1110 0001; tách thành hai nhóm bốn bit 1110 và 0001 rồi đọc theo hệ mười sáu được E1. "(0001 1111)2" chính là 31 ở dạng dương, chưa qua phép đảo bit và cộng 1 nên mang dấu dương. "(301)8" quy ra thập phân là 193, tức mẫu bit 1100 0001, đọc theo bù hai thì bằng -63 chứ không phải -31. "(32)10" là số dương 32, không liên quan gì tới cách biểu diễn số âm.
Mở trang câu hỏi này →
AOR, then AND
BAND, then OR
CBoth at the same time
DDepends on the hardware
Lời giải
Đáp án đúng: "OR, then AND". Theo quy tắc ưu tiên thông thường của biểu thức logic thì AND có độ ưu tiên cao hơn OR, nhưng ở đây cặp ngoặc đã bao quanh phép OR nên nó buộc phải được tính trước, rồi kết quả của nó mới đem AND với toán hạng còn lại; đặt ngoặc chính là cách đảo lại thứ tự mặc định. "AND, then OR" đúng là thứ tự khi không có ngoặc, nhưng dấu ngoặc trong câu dẫn đã vô hiệu hoá thứ tự đó. "Both at the same time" không khớp với cách biểu thức được định giá: mỗi phép toán cần đầu vào đã có giá trị nên phải thực hiện tuần tự. "Depends on the hardware" sai vì thứ tự do cú pháp và dấu ngoặc quy định, không do mạch thực hiện phép toán quyết định.
Mở trang câu hỏi này →