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

264/359 câuCòn 95
AProcedural
BObject-oriented
CFunctional
DDatabase-driven
Lời giải
Đáp án đúng: "Database-driven". Bốn lối lập trình lớn mà môn này nêu là thủ tục, hướng đối tượng, hàm và khai báo; cách tổ chức công việc quanh một cơ sở dữ liệu không phải một lối tư duy lập trình riêng mà chỉ là một kiểu kiến trúc ứng dụng, có thể hiện thực bằng bất kỳ lối nào trong bốn lối kia. Phương án "Procedural" là lối thủ tục, chương trình là dãy lệnh thao tác trên dữ liệu, nên nằm trong bốn lối. Phương án "Object-oriented" là lối hướng đối tượng, gói dữ liệu cùng phương thức vào đối tượng, cũng là một lối chính thức. Phương án "Functional" là lối hàm, xây chương trình bằng cách ghép các hàm biến đổi dữ liệu, cũng thuộc bốn lối; lối còn lại là khai báo, và đây mới là chỗ trống mà phương án đúng không lấp được.
Mở trang câu hỏi này →
AManaging memory allocation for running processes
BInitializing the operating system into memory during startup
CScheduling processes for execution
DLoading device drivers
Lời giải
Đáp án đúng: "Initializing the operating system into memory during startup". Bootstrapping là giai đoạn mồi máy: một đoạn mã nhỏ nằm sẵn trong ROM chạy trước, kiểm tra phần cứng rồi nạp phần cốt lõi của hệ điều hành từ đĩa vào bộ nhớ chính và trao quyền điều khiển cho nó, nhờ vậy hệ điều hành tự dựng được chính mình dù lúc đầu chưa có gì trong bộ nhớ. Phương án "Managing memory allocation for running processes" là công việc thường xuyên của bộ quản lý bộ nhớ sau khi hệ đã chạy, không phải bước mồi máy. Phương án "Scheduling processes for execution" là việc của bộ định thời, cũng chỉ diễn ra khi hệ điều hành đã nằm trong bộ nhớ. Phương án "Loading device drivers" có xảy ra trong tiến trình khởi động nhưng chỉ là một bước con, quá hẹp để định nghĩa bootstrapping.
Mở trang câu hỏi này →
ASequence, decision, and repetition
BVariables, loops, and conditions
CFunctions, arrays, and pointers
DCompilation, execution, and debugging
Lời giải
Đáp án đúng: "Sequence, decision, and repetition". Lập trình có cấu trúc chứng minh rằng mọi thuật toán đều viết được bằng ba khối điều khiển: thực hiện tuần tự, rẽ nhánh theo điều kiện và lặp lại; chỉ cần ba khối này ghép lồng vào nhau là đủ, nhờ đó chương trình không cần lệnh nhảy tuỳ ý và luôn có một đường vào, một đường ra. Phương án "Variables, loops, and conditions" trộn lẫn hai thứ khác loại: biến là nơi chứa dữ liệu, không phải khối điều khiển, nên danh sách này không phải ba cấu trúc chuẩn. Phương án "Functions, arrays, and pointers" liệt kê các tiện ích của ngôn ngữ và cấu trúc dữ liệu, không phải cách điều khiển dòng thi hành. Phương án "Compilation, execution, and debugging" nói về các bước làm việc với chương trình, nằm ngoài bản thân cấu trúc chương trình.
Mở trang câu hỏi này →
ATo call Google's API efficiently.
BTo perform calculations on a set of data.
CTo locate a specific element within a data set.
DTo create new data elements based on existing ones.
Lời giải
Đáp án đúng: "To locate a specific element within a data set.". Thuật toán tìm kiếm nhận vào một danh sách và một khoá cần tìm, rồi trả lời khoá đó có nằm trong danh sách hay không và nếu có thì ở vị trí nào; bản chất của nó là định vị, chứ không làm thay đổi dữ liệu. Phương án "To call Google's API efficiently." nhầm khái niệm thuật toán với một ứng dụng cụ thể của việc tìm kiếm trên web, và việc gọi giao diện lập trình của một dịch vụ không phải nội dung môn học này bàn tới. Phương án "To perform calculations on a set of data." mô tả thuật toán tính toán hay tổng hợp số liệu, một nhóm việc khác. Phương án "To create new data elements based on existing ones." nói về sinh thêm dữ liệu, trong khi tìm kiếm chỉ đọc danh sách và không thêm phần tử nào.
Mở trang câu hỏi này →
AALU
Binput/output
Cmemory
Dcontrol unit
Lời giải
Đáp án đúng: "control unit". Trong mô hình von Neumann, máy tính gồm bốn phân hệ và phân hệ đóng vai người quản lý chính là khối điều khiển: nó lấy lệnh, giải mã rồi phát tín hiệu điều khiển để các phân hệ còn lại làm việc đúng thứ tự và đúng lúc, bản thân nó không tính toán cũng không lưu dữ liệu. Phương án "ALU" là khối số học và luận lý, nó chỉ thực hiện phép cộng, phép so sánh hay phép luận lý khi được yêu cầu, nên là nơi bị điều khiển. Phương án "input/output" là phân hệ vào ra, nhận lệnh để đưa dữ liệu vào hay đẩy kết quả ra, cũng chịu sự điều phối. Phương án "memory" chỉ lưu lệnh và dữ liệu rồi trả về khi được đọc, hoàn toàn thụ động nên không thể là bộ phận quản lý.
Mở trang câu hỏi này →
ADevelopers can test and add functionality in steps.
BIt requires all requirements up front before development.
CIt involves minimal testing.
DIt completes design and implementation simultaneously.
Lời giải
Đáp án đúng: "Developers can test and add functionality in steps.". Khi hệ thống được dựng dần theo từng phần rồi tích hợp, mỗi phần vừa xong là đã chạy và kiểm thử được, nên lỗi và sai lệch yêu cầu lộ ra sớm, người dùng thấy sản phẩm chạy thật từ giai đoạn đầu và việc thêm chức năng về sau dựa trên nền đã được kiểm chứng. Phương án "It requires all requirements up front before development." mô tả đòi hỏi của mô hình thác nước, hơn nữa đây là một ràng buộc bất lợi chứ không phải lợi ích. Phương án "It involves minimal testing." sai ngược chiều: cách làm từng phần kiểm thử nhiều lần hơn vì mỗi lần tích hợp đều phải kiểm lại. Phương án "It completes design and implementation simultaneously." không phải đặc trưng của cách làm này, và gộp thiết kế với hiện thực cũng chẳng phải điều đáng coi là ưu điểm.
Mở trang câu hỏi này →
AA stack follows FIFO, and a queue follows LIFO
BA stack is a hierarchical data structure, and a queue is not
CA stack is LIFO, and a queue is FIFO
DThere is no difference between a stack and a queue
Lời giải
Đáp án đúng: "A stack is LIFO, and a queue is FIFO". Ngăn xếp chỉ cho thêm và lấy ở cùng một đầu nên phần tử vào sau ra trước, giống chồng đĩa; hàng đợi thêm ở một đầu và lấy ở đầu kia nên phần tử vào trước ra trước, giống dòng người xếp hàng. Phương án "A stack follows FIFO, and a queue follows LIFO" đảo ngược đúng hai quy tắc đó, nên sai hoàn toàn. Phương án "A stack is a hierarchical data structure, and a queue is not" gán sai bản chất: cả hai đều là cấu trúc tuyến tính, phần tử nối nhau thành dãy; cấu trúc phân cấp là cây, nơi một nút có nhiều nút con. Phương án "There is no difference between a stack and a queue" bỏ qua đúng điểm phân biệt cốt lõi, trong khi thứ tự lấy phần tử ra là lý do người ta chọn cấu trúc này thay cho cấu trúc kia.
Mở trang câu hỏi này →
ADiscrete Filter Transform
BADC
CDAC
DQuantization filtering circuits
Lời giải
Đáp án đúng: "ADC". Bộ chuyển đổi tương tự sang số lấy tín hiệu liên tục theo thời gian, lấy mẫu tại những mốc cách nhau đều đặn rồi lượng tử hoá mỗi mẫu thành một số nguyên và mã hoá thành chuỗi bit, nhờ đó âm thanh hay điện áp ngoài đời trở thành dữ liệu máy tính xử lý được. Phương án "DAC" làm đúng chiều ngược lại, dựng tín hiệu tương tự từ dữ liệu số để đưa ra loa hay màn hình, nên không đáp ứng yêu cầu của câu dẫn. Phương án "Quantization filtering circuits" gộp hai thứ khác nhau: lượng tử hoá chỉ là một bước bên trong quá trình chuyển đổi, không phải khối phần cứng đảm nhiệm cả phép chuyển đổi. Phương án "Discrete Filter Transform" không phải tên một khối phần cứng chuẩn nào; nó gợi tới các phép biến đổi dùng để phân tích phổ tín hiệu, một việc khác hẳn.
Mở trang câu hỏi này →
AFirst Normal Form (1NF)
BSecond Normal Form (2NF)
CThird Normal Form (3NF)
DBoyce-Codd Normal Form (BCNF)
Lời giải
Đáp án đúng: "Second Normal Form (2NF)". Dạng chuẩn hai yêu cầu quan hệ đã ở dạng chuẩn một và mọi thuộc tính không thuộc khoá phải phụ thuộc hàm đầy đủ vào khoá chính, nghĩa là không được phụ thuộc vào chỉ một phần của khoá; điều này chỉ thành vấn đề khi khoá chính gồm nhiều thuộc tính. Phương án "First Normal Form (1NF)" chỉ đòi mỗi ô chứa một giá trị nguyên tử, không nói gì về phụ thuộc hàm. Phương án "Third Normal Form (3NF)" đi xa hơn bằng cách loại bỏ phụ thuộc bắc cầu giữa các thuộc tính không khoá, nên nó bao hàm yêu cầu trên nhưng không phải định nghĩa của yêu cầu đang hỏi. Phương án "Boyce-Codd Normal Form (BCNF)" còn chặt hơn nữa, buộc mọi định thức đều phải là siêu khoá, vượt quá điều câu dẫn nêu.
Mở trang câu hỏi này →
ARecursive algorithms are harder to implement.
BRecursive algorithms always have higher time complexity.
CRecursive algorithms use more memory due to stack calls.
DRecursive algorithms cannot solve sorting problems.
Lời giải
Đáp án đúng: "Recursive algorithms use more memory due to stack calls.". Mỗi lần gọi đệ quy, máy phải đẩy một bản ghi kích hoạt chứa tham số, biến cục bộ và địa chỉ trở về lên ngăn xếp; độ sâu đệ quy càng lớn thì ngăn xếp càng phình, và nếu quá sâu thì chương trình tràn ngăn xếp, trong khi vòng lặp chỉ dùng một khung duy nhất. Phương án "Recursive algorithms are harder to implement." không đúng nói chung: với bài toán có cấu trúc tự lặp như duyệt cây hay tháp Hà Nội thì bản đệ quy ngắn và sáng hơn bản vòng lặp. Phương án "Recursive algorithms always have higher time complexity." sai ở chữ luôn luôn, vì cùng một thuật toán viết đệ quy hay vòng lặp đều cho cùng độ phức tạp. Phương án "Recursive algorithms cannot solve sorting problems." trái thực tế, bởi sắp xếp trộn và sắp xếp nhanh đều là thuật toán đệ quy.
Mở trang câu hỏi này →
AIt is efficient when searching small or unsorted datasets
BIt is the fastest search method for large datasets
CIt can only be used on sorted lists
DIt requires dividing the dataset into halves at every step
Lời giải
Đáp án đúng: "It is efficient when searching small or unsorted datasets". Tìm kiếm tuần tự quét lần lượt từng phần tử nên không đòi hỏi dữ liệu phải sắp xếp trước và cũng không cần chuẩn bị gì; với danh sách ngắn hoặc danh sách chưa có thứ tự, chi phí sắp xếp để dùng cách nhanh hơn còn đắt hơn chính việc quét, nên cách này lại là lựa chọn hợp lý. Phương án "It is the fastest search method for large datasets" sai vì số phép so sánh tăng tỉ lệ với số phần tử, chậm hơn hẳn tìm kiếm nhị phân với dữ liệu lớn đã sắp xếp. Phương án "It can only be used on sorted lists" nói ngược đúng ưu thế của nó: không cần sắp xếp mới là điều kiện tự do của tìm kiếm tuần tự. Phương án "It requires dividing the dataset into halves at every step" mô tả tìm kiếm nhị phân, một cách làm khác hẳn.
Mở trang câu hỏi này →
A100
B111
C011
D101
Lời giải
Đáp án đúng: "100". Viết hai số bằng ba bit, 7 là 111 và 3 là 011, rồi lấy phép hoặc loại trừ theo từng cặp bit cùng vị trí: bit trái 1 với 0 cho 1, bit giữa 1 với 1 cho 0, bit phải 1 với 1 cho 0, nên kết quả là 100, tức số 4 trong hệ mười. Phương án "111" là chính số 7 và cũng là kết quả của phép hoặc giữa hai số này, nhưng phép hoặc loại trừ phải cho 0 ở những vị trí hai bit giống nhau. Phương án "011" là chính số 3 và là kết quả của phép và theo bit, không phải phép đang hỏi. Phương án "101" bằng 5, không ứng với phép toán bit nào giữa 7 và 3; nhìn vào từng vị trí bit cũng thấy không thể có bit 1 ở vị trí phải, vì hai số đều mang bit 1 ở đó.
Mở trang câu hỏi này →
ADivision
BMultiplication
CAddition
DSubtraction
Lời giải
Đáp án đúng: "Division". Để chuyển một số nguyên hệ mười sang hệ hai, ta chia liên tiếp cho 2, ghi lại số dư mỗi lần rồi đọc dãy số dư theo chiều ngược từ lần chia cuối về lần đầu; mỗi số dư chính là một bit, và phép chia là thao tác sinh ra chúng. Phương án "Multiplication" là thủ tục dành cho phần lẻ sau dấu phẩy, nơi ta nhân liên tiếp với 2 và lấy phần nguyên, nên không phải phép dùng cho phần nguyên mà câu dẫn nhắm tới. Phương án "Addition" chỉ xuất hiện khi ta kiểm tra lại kết quả bằng cách cộng các luỹ thừa của 2, chứ không sinh ra chữ số nhị phân nào. Phương án "Subtraction" là thao tác phụ nằm bên trong phép chia; tự nó không cho ra dãy số dư, nên không phải phép toán đặc trưng của việc chuyển đổi này.
Mở trang câu hỏi này →
AThey are loaded into memory simultaneously and executed concurrently.
BThey are loaded one after another sequentially.
CThey run sequentially, with each program completing before the next one starts.
DThey are stored in secondary storage until needed for execution.
Lời giải
Đáp án đúng: "They are loaded into memory simultaneously and executed concurrently.". Đa chương nghĩa là nhiều chương trình cùng tồn tại trong bộ nhớ chính một lúc, mỗi chương trình chiếm một vùng riêng; khi một chương trình phải chờ thao tác vào ra, bộ xử lý chuyển ngay sang chương trình khác, nên tính theo thời gian người dùng cảm nhận thì chúng chạy xen kẽ và đồng hành. Phương án "They are loaded one after another sequentially." chỉ nói về thứ tự nạp và hàm ý mỗi lúc bộ nhớ chỉ giữ một chương trình, đánh mất đúng điểm cốt lõi. Phương án "They run sequentially, with each program completing before the next one starts." là mô tả của đơn chương, cách làm mà đa chương ra đời để thay thế. Phương án "They are stored in secondary storage until needed for execution." nói về chương trình còn nằm trên đĩa, chưa được nạp, nên không trả lời câu hỏi về cách quản lý trong bộ nhớ.
Mở trang câu hỏi này →
ATesting
BDesign
CAnalysis
DImplementation
Lời giải
Đáp án đúng: "Analysis". Lược đồ luồng dữ liệu là công cụ của pha phân tích theo lối hướng thủ tục: nó mô tả dữ liệu đi vào hệ thống từ đâu, bị những tiến trình nào biến đổi, lưu ở kho nào và đi ra đâu, tức trả lời hệ thống phải làm gì chứ chưa nói làm bằng cách nào. Phương án "Testing" là pha kiểm thử, dùng ca kiểm thử và dữ liệu thử để đối chiếu sản phẩm với yêu cầu, không phải nơi vẽ lược đồ này. Phương án "Design" là pha thiết kế, nơi người ta chuyển kết quả phân tích thành cấu trúc module, lược đồ cấu trúc hay thiết kế dữ liệu chi tiết, đi sau lược đồ luồng dữ liệu. Phương án "Implementation" là pha viết mã, chỉ hiện thực những gì đã phân tích và thiết kế xong.
Mở trang câu hỏi này →
ATo improve the quality of the sound
BTo convert audio into a format suitable for storage or transmission
CTo increase the speed of audio playback
DTo reduce the number of channels used in the audio
Lời giải
Đáp án đúng: "To convert audio into a format suitable for storage or transmission". Sau khi lấy mẫu và lượng tử hoá, mỗi mẫu âm thanh là một số; bước mã hoá biến dãy số đó thành chuỗi bit theo một khuôn dạng xác định, có thể kèm nén, để máy lưu được thành tệp và truyền được trên đường truyền. Phương án "To improve the quality of the sound" sai vì mã hoá không làm âm thanh hay hơn; chất lượng do tần số lấy mẫu và số bit lượng tử quyết định, còn nén có mất thậm chí làm giảm chất lượng. Phương án "To increase the speed of audio playback" nhầm sang tốc độ phát lại, thứ phụ thuộc vào nhịp đọc mẫu khi tái tạo. Phương án "To reduce the number of channels used in the audio" chỉ là một lựa chọn riêng khi muốn giảm dung lượng, không phải mục đích của bước mã hoá.
Mở trang câu hỏi này →
AMemory
BCPU
CALU
DControl unit
ENone of the above
Lời giải
Đáp án đúng: "CPU". Thiết bị hoạt động ngoại tuyến là thiết bị làm việc mà không chịu sự điều khiển của bộ xử lý trung tâm: dữ liệu được ghi hay đọc độc lập, rồi mới chuyển vào hệ thống sau, nên bộ xử lý không cần đợi và không tham gia vào thao tác đó. Phương án "Memory" không phải cái đang thiếu, vì thiết bị ngoại tuyến vẫn có thể dùng vùng nhớ đệm riêng của chính nó. Phương án "ALU" chỉ là khối tính toán nằm bên trong bộ xử lý, bản thân nó chưa bao giờ trực tiếp điều khiển thiết bị ngoại vi nên nói không chịu sự điều khiển của nó là vô nghĩa. Phương án "Control unit" nêu một phần của bộ xử lý, hẹp hơn mức khái niệm mà định nghĩa ngoại tuyến nhắm tới. Phương án "None of the above" không dùng được vì đã có một lựa chọn đúng.
Mở trang câu hỏi này →
AThey represent values using symbols only.
BThe position of a digit determines its value.
CThey use Roman numerals.
DThey are limited to base 10.
Lời giải
Đáp án đúng: "The position of a digit determines its value.". Trong hệ đếm theo vị trí, giá trị của một chữ số bằng chính chữ số đó nhân với luỹ thừa của cơ số tương ứng với vị trí nó đứng, nên cùng chữ số 2 trong 20 và 200 mang hai giá trị khác nhau; hệ không theo vị trí thì mỗi ký hiệu luôn giữ một giá trị cố định dù đứng ở đâu. Phương án "They represent values using symbols only." không nêu được điểm phân biệt nào, bởi mọi hệ đếm đều biểu diễn giá trị bằng ký hiệu. Phương án "They use Roman numerals." chỉ sai đối tượng: số La Mã chính là ví dụ tiêu biểu của hệ không theo vị trí. Phương án "They are limited to base 10." bó hẹp sai, vì hệ theo vị trí hoạt động với mọi cơ số, từ hệ hai, hệ tám đến hệ mười sáu.
Mở trang câu hỏi này →
AEAR
BFAN
CDAY
DCAR
Lời giải
Đáp án đúng: "DAY". Mật mã đơn bảng kiểu dịch vòng với khoá 19 nghĩa là mỗi chữ bản rõ bị đẩy tiến 19 bước trong bảng chữ cái, nên giải mã là lùi lại 19 bước theo phép modulo 26. Chữ thứ nhất ở vị trí 22 lùi 19 còn 3, cho chữ cái thứ tư; chữ thứ hai ở vị trí 19 lùi 19 còn 0, cho chữ cái đầu bảng; chữ thứ ba ở vị trí 17 lùi 19 cho số âm, cộng thêm 26 thành 24, cho chữ cái gần cuối bảng; ghép lại thành "DAY". Phương án "EAR" không khớp, vì mã hoá chuỗi này với cùng khoá sẽ ra ba chữ X, T, K. Phương án "FAN" cũng vậy, mã hoá lên sẽ ra Y, T, G chứ không phải chuỗi mã đã cho. Phương án "CAR" mã hoá lên thành V, T, K, lệch ở chữ đầu và chữ cuối nên bị loại.
Mở trang câu hỏi này →
AControlling the execution of a program
BPerforming arithmetic and logic operations
CManaging input and output operations
DStoring data and programs
Lời giải
Đáp án đúng: "Performing arithmetic and logic operations". Khối số học và luận lý là nơi thực sự tính toán trên dữ liệu: nó làm các phép cộng, trừ, so sánh và các phép luận lý theo bit như và, hoặc, phủ định, rồi trả kết quả về thanh ghi. Phương án "Controlling the execution of a program" là việc của khối điều khiển, bộ phận lấy lệnh, giải mã và ra tín hiệu cho khối số học làm việc, nên hai vai trò này tách rời nhau trong mô hình von Neumann. Phương án "Managing input and output operations" thuộc phân hệ vào ra cùng các bộ điều khiển thiết bị. Phương án "Storing data and programs" là chức năng của bộ nhớ, nơi lệnh và dữ liệu cùng nằm chung theo đúng ý tưởng chương trình lưu trong bộ nhớ; khối số học chỉ giữ dữ liệu tạm thời trong thanh ghi khi đang tính.
Mở trang câu hỏi này →