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

124/359 câuCòn 235
105Which is not a high-level language?4 lựa chọn
ARuby
BC
CAssembly
DPascal
Lời giải
Đáp án đúng: "Assembly". Hợp ngữ là ngôn ngữ bậc thấp: mỗi câu lệnh gần như tương ứng một lệnh máy, người viết phải biết thanh ghi và tập lệnh của bộ xử lý, và mã viết cho kiến trúc này không chạy trên kiến trúc khác. Mục "Ruby" là ngôn ngữ bậc cao, cú pháp gần ngôn ngữ tự nhiên và che hết chi tiết phần cứng. Mục ghi tên ngôn ngữ «C» cũng là ngôn ngữ bậc cao, có kiểu dữ liệu, hàm và cấu trúc điều khiển; nó cho phép làm việc sát hệ thống hơn nhiều ngôn ngữ khác nhưng vẫn độc lập với kiến trúc máy và cần trình biên dịch. Mục "Pascal" là ngôn ngữ bậc cao có cấu trúc, lâu nay dùng để dạy lập trình. Dấu hiệu chung của ba mục đó là một câu lệnh sinh ra nhiều lệnh máy.
Mở trang câu hỏi này →
A325.6
B225.7
C235.6
D322.5
Lời giải
Đáp án đúng: "325.6". Phần nguyên đổi bằng cách chia liên tiếp cho 8 và lấy số dư từ dưới lên: 213 chia 8 bằng 26 dư 5, 26 chia 8 bằng 3 dư 2, 3 chia 8 bằng 0 dư 3, đọc ngược được 325. Phần lẻ đổi bằng cách nhân liên tiếp với 8 và lấy phần nguyên: 0,75 nhân 8 bằng 6,0 nên được chữ số 6 và dừng. Kiểm lại 3 nhân 64 cộng 2 nhân 8 cộng 5 bằng 213, còn 6 chia 8 bằng 0,75. Mục "225.7" cho 2 nhân 64 cộng 2 nhân 8 cộng 5 bằng 181 và phần lẻ 0,875. Mục "235.6" cho 2 nhân 64 cộng 3 nhân 8 cộng 5 bằng 157. Mục "322.5" cho 3 nhân 64 cộng 2 nhân 8 cộng 2 bằng 210 và phần lẻ 0,625.
Mở trang câu hỏi này →
ANTFS
BFAT32
Cext4
DHFS+
Lời giải
Đáp án đúng: "ext4". Đây là hệ tệp mặc định của hầu hết bản phân phối Linux hiện nay, phát triển tiếp từ hai thế hệ trước, có ghi nhật ký để phục hồi nhanh sau sự cố và quản lý vùng dữ liệu theo khoảng liên tục nên ít phân mảnh. Mục "NTFS" là hệ tệp của Windows; Linux đọc ghi được nó nhưng không dùng làm hệ tệp gốc. Mục "FAT32" là hệ tệp cũ, nay chủ yếu dùng cho thẻ nhớ và ổ USB vì nhiều thiết bị hiểu được, nó không ghi nhật ký và giới hạn mỗi tệp dưới 4 GB. Mục "HFS+" là hệ tệp của máy Mac, về sau được thay bằng một hệ tệp mới hơn của chính hãng đó. Mỗi hệ điều hành gắn với hệ tệp riêng, và lựa chọn đúng là hệ tệp sinh ra cùng dòng Linux.
Mở trang câu hỏi này →
ATo store data as character sequences
BTo reduce the file size for storage efficiency
CTo enable random access to the data
DTo prevent collisions during retrieval
Lời giải
Đáp án đúng: "To store data as character sequences". Tệp văn bản chỉ chứa các ký tự được mã hoá theo một bảng mã như ASCII hay Unicode, nên một số thực đang nằm trong bộ nhớ dưới dạng dấu phẩy động nhị phân phải được dịch thành dãy ký tự chữ số, dấu phân cách và dấu, nếu không thì mở tệp ra chỉ thấy rác. Mục "To reduce the file size for storage efficiency" ngược thực tế, dạng ký tự thường tốn nhiều byte hơn bản nhị phân gọn của cùng con số đó. Mục "To enable random access to the data" không đúng, truy cập ngẫu nhiên dựa vào việc các bản ghi dài bằng nhau, còn chuỗi ký tự dài ngắn khác nhau lại làm việc này khó hơn. Mục "To prevent collisions during retrieval" nói về đụng độ khi băm khoá thành địa chỉ, chuyện của tệp băm chứ không phải của việc ghi văn bản.
Mở trang câu hỏi này →
ABlack-box testing
BIntegration testing
CWhite-box testing
DUser acceptance testing
Lời giải
Đáp án đúng: "White-box testing". Kỹ thuật kiểm thử này mở mã nguồn ra để xem, dựa vào cấu trúc bên trong và luồng điều khiển để chọn ca kiểm thử, mục tiêu là đi qua hết câu lệnh, hết nhánh rẽ và hết các đường thực thi đáng kể. Mục "Black-box testing" làm ngược lại, nó chỉ dựa vào đặc tả và quan sát cặp dữ liệu vào ra, coi phần bên trong là kín. Mục "Integration testing" là một mức kiểm thử, lo việc ghép các mô-đun lại xem giao diện giữa chúng có khớp không, và mức này có thể thực hiện theo cả hai kỹ thuật nói trên. Mục "User acceptance testing" do người dùng tiến hành để nghiệm thu theo yêu cầu nghiệp vụ, càng không nhìn vào mã.
Mở trang câu hỏi này →
APhysical layer
BTransport layer
CApplication layer
DData link layer
Lời giải
Đáp án đúng: "Transport layer". Tầng vận tải chịu trách nhiệm giao dữ liệu tin cậy giữa hai tiến trình ở hai đầu, nhờ giao thức đánh số thứ tự, chờ báo nhận, truyền lại phần bị mất, sắp lại đúng thứ tự và kiểm soát luồng. Mục "Physical layer" chỉ lo biến bit thành tín hiệu trên môi trường truyền, nó không biết gói nào mất. Mục "Data link layer" có kiểm soát lỗi nhưng chỉ trên từng chặng giữa hai thiết bị kề nhau, qua chặng sau là trách nhiệm hết, nên không bảo đảm được đường đi xuyên nhiều mạng. Mục "Application layer" lo nội dung và định dạng của dịch vụ như thư hay web, nó dựa vào tầng dưới để có dữ liệu đủ và đúng chứ không tự bảo đảm.
Mở trang câu hỏi này →
AIt represents the two characters 'A' and 'C'
BIt represents the two characters 'A' and 'b'
CIt represents the two characters 'a' and 'c'
DIt represents the decimal number 24903
Lời giải
Đáp án đúng: "It represents the two characters 'a' and 'c'". Chuỗi 16 bit chia thành hai byte: 01100001 và 01100011, đổi sang thập phân là 97 và 99, tra bảng mã ASCII thì đó là hai chữ cái thường. Mục "It represents the two characters 'A' and 'C'" sai vì chữ hoa có mã 65 và 67, viết nhị phân là 01000001 và 01000011, bit thứ ba từ trái bằng 0 chứ không bằng 1 như chuỗi đã cho. Mục "It represents the two characters 'A' and 'b'" trộn một chữ hoa với một chữ thường, cho mã 65 và 98, tức 01000001 và 01100010, cả hai byte đều lệch. Mục "It represents the decimal number 24903" cũng không khớp: đọc cả 16 bit như một số nguyên không dấu thì giá trị là 24931. Khoảng cách 32 giữa mã chữ hoa và chữ thường chính là bit thứ ba từ trái trong mỗi byte.
Mở trang câu hỏi này →
A300.168.0.1
B192.168.1.256
C172.16.254.1
D123.456.78.90
Lời giải
Đáp án đúng: "172.16.254.1". Địa chỉ IPv4 gồm bốn byte viết cách nhau bằng dấu chấm, nên mỗi nhóm chỉ nhận giá trị từ 0 đến 255; lựa chọn đúng có cả bốn nhóm nằm trong khoảng đó nên là địa chỉ hợp lệ. Mục "300.168.0.1" có nhóm đầu bằng 300, vượt mức tối đa 255 mà một byte biểu diễn được. Mục "192.168.1.256" sai ở nhóm cuối, 256 cần tới chín bit nên không nằm trong một byte, giá trị lớn nhất chỉ là 255. Mục "123.456.78.90" có nhóm thứ hai bằng 456, càng vượt xa giới hạn. Lưu ý là giá trị nằm trong khoảng cho phép chỉ bảo đảm địa chỉ viết đúng dạng, còn việc địa chỉ đó thuộc mạng riêng hay mạng công cộng lại là chuyện khác.
Mở trang câu hỏi này →
ADividing the list into two parts and inserting elements from unsorted to sorted
BFinding the smallest element and swapping it to the correct position
CRepeatedly comparing adjacent elements and swapping them if they are in the wrong order.
DDividing the list in half and searching
Lời giải
Đáp án đúng: "Repeatedly comparing adjacent elements and swapping them if they are in the wrong order." Thuật toán này đi dọc danh sách, so sánh từng cặp phần tử đứng cạnh nhau và đổi chỗ chúng nếu thứ tự sai; sau mỗi lượt phần tử lớn nhất trong phần chưa sắp sẽ nổi về cuối, lặp đủ số lượt thì cả danh sách có thứ tự. Mục "Dividing the list into two parts and inserting elements from unsorted to sorted" là cơ chế của sắp xếp chèn, nó lấy một phần tử rồi tìm chỗ đặt vào phần đã sắp. Mục "Finding the smallest element and swapping it to the correct position" là cơ chế của sắp xếp chọn, mỗi lượt chỉ có một phép đổi chỗ sau khi đã tìm ra phần tử nhỏ nhất. Mục "Dividing the list in half and searching" không phải thuật toán sắp xếp, đó là tìm nhị phân, nó còn đòi danh sách phải sắp xếp sẵn.
Mở trang câu hỏi này →
A521
B531
C505
D515
Lời giải
Đáp án đúng: "531". Đổi sang hệ tám bằng cách chia liên tiếp cho 8 rồi đọc các số dư từ dưới lên: 345 chia 8 bằng 43 dư 1, 43 chia 8 bằng 5 dư 3, 5 chia 8 bằng 0 dư 5, ghép lại được 531. Kiểm ngược theo trọng số: 5 nhân 64 cộng 3 nhân 8 cộng 1 bằng 320 cộng 24 cộng 1, đúng bằng 345, nên kết quả này khép kín về số học. Mục "521" cho 5 nhân 64 cộng 2 nhân 8 cộng 1 bằng 337, thiếu 8 so với yêu cầu. Mục "505" cho 5 nhân 64 cộng 0 cộng 5 bằng 325. Mục "515" cho 5 nhân 64 cộng 1 nhân 8 cộng 5 bằng 333. Cách kiểm nhanh là nhân ngược lại theo trọng số 64, 8 và 1 rồi so với số thập phân ban đầu.
Mở trang câu hỏi này →
AFiber optic cables
BCoaxial cables
CWi-Fi signals
DUDP packets
Lời giải
Đáp án đúng: "UDP packets". Môi trường truyền ở tầng vật lý là vật chất dẫn được tín hiệu, gồm loại có dây và loại không dây; còn datagram của giao thức nhẹ ở tầng vận tải là dữ liệu chạy trên môi trường đó chứ không phải bản thân môi trường, nên nó là thứ bị loại. Mục "Fiber optic cables" là môi trường có dây, dẫn tín hiệu ánh sáng trong lõi thuỷ tinh, băng thông lớn và không bị nhiễu điện từ. Mục "Coaxial cables" cũng là môi trường có dây, dẫn tín hiệu điện trên lõi đồng có lớp chắn bọc ngoài. Mục "Wi-Fi signals" là môi trường không dây, dùng sóng vô tuyến lan trong không khí. Ba thứ đó đều ở tầng dưới cùng, nơi người ta chỉ quan tâm tới bit và tín hiệu.
Mở trang câu hỏi này →
AFor very large, sorted lists.
BWhen the list is organized hierarchically
COnly for small lists, or lists that are not searched often, and are not ordered.
DWhen the exact position of the target is known
Lời giải
Đáp án đúng: "Only for small lists, or lists that are not searched often, and are not ordered." Tìm tuần tự duyệt lần lượt từng phần tử cho tới khi gặp giá trị cần tìm hoặc hết danh sách, trung bình phải so sánh khoảng một nửa số phần tử, nên nó chỉ đáng dùng khi danh sách nhỏ, ít phải tìm, hoặc chưa được sắp xếp, vì lúc đó cách nhanh hơn không áp dụng được. Mục "For very large, sorted lists." là trường hợp nên dùng tìm nhị phân, thứ chỉ cần số phép so sánh theo logarit. Mục "When the list is organized hierarchically" ứng với dữ liệu dạng cây, ở đó người ta đi theo đường từ gốc xuống. Mục "When the exact position of the target is known" tự loại mình, biết sẵn vị trí thì truy cập trực tiếp vào chỗ đó, không phải tìm kiếm gì nữa.
Mở trang câu hỏi này →
AThey must have different primary keys
BThey must be sorted in the same order
CThey must have the same attributes (columns).
DThey must contain unique data
Lời giải
Đáp án đúng: "They must have the same attributes (columns)." Phép hợp ghép các dòng của hai quan hệ thành một quan hệ mới, nên hai quan hệ đầu vào phải tương thích về cấu trúc: cùng số cột, các cột tương ứng cùng tên và cùng miền giá trị, nếu không thì không rõ dòng kết quả có những thuộc tính nào. Mục "They must have different primary keys" đặt ra điều kiện không liên quan, khoá chính chỉ ràng buộc trong từng bảng. Mục "They must be sorted in the same order" quên rằng quan hệ là một tập hợp các dòng, thứ tự dòng không mang nghĩa và phép hợp không phụ thuộc thứ tự. Mục "They must contain unique data" lẫn điều kiện với kết quả, các dòng trùng nhau được loại bỏ trong quan hệ kết quả chứ không bị cấm ở đầu vào.
Mở trang câu hỏi này →
AHardware and software
BDatabase and operations
CData structure and algorithms
DData structure and operations
Lời giải
Đáp án đúng: "Data structure and operations". Kiểu dữ liệu trừu tượng đóng gói hai thứ vào một khối: cách tổ chức dữ liệu bên trong, và tập các phép toán hợp lệ được công bố ra ngoài. Người dùng chỉ gọi các phép toán đó mà không cần và không được phụ thuộc vào cách hiện thực, nhờ vậy đổi cách lưu bên trong không làm vỡ chương trình đang dùng. Mục "Hardware and software" không thuộc phạm vi của mô hình dữ liệu này. Mục "Database and operations" đưa vào cơ sở dữ liệu, vốn là một hệ lưu trữ lớn chứ không phải thành phần bên trong một kiểu dữ liệu. Mục "Data structure and algorithms" gần đúng nhưng lệch một bước: thuật toán là cách hiện thực các phép toán và thuộc phần bị che đi, còn thứ được công bố cho người dùng chính là tập phép toán.
Mở trang câu hỏi này →
APaging
BSegmentation
CVirtual memory
DSwapping
Lời giải
Đáp án đúng: "Segmentation". Phân đoạn chia không gian địa chỉ của chương trình theo đơn vị logic do chính chương trình gợi ra, chẳng hạn đoạn mã, đoạn dữ liệu, đoạn ngăn xếp hay từng hàm, và những phần này dài ngắn khác nhau nên các đoạn có kích thước thay đổi, mỗi đoạn được ghi địa chỉ đầu cùng độ dài trong bảng đoạn. Mục "Paging" chia bộ nhớ thành các trang bằng nhau và cố định, chính sự bằng nhau đó làm việc cấp phát đơn giản nhưng không theo cấu trúc logic của chương trình. Mục "Virtual memory" là kỹ thuật cho chương trình lớn hơn bộ nhớ thật vẫn chạy được, nó dựa trên phân trang hoặc phân đoạn theo yêu cầu chứ không tự quy định cỡ khối. Mục "Swapping" chuyển cả tiến trình giữa bộ nhớ và đĩa, không phải cách chia bộ nhớ.
Mở trang câu hỏi này →
ABubble sort
BInsertion sort
CSelection sort
DBinary sort
Lời giải
Đáp án đúng: "Selection sort". Thuật toán này coi danh sách gồm hai phần, phần đầu đã có thứ tự và phần sau chưa; mỗi lượt nó quét phần chưa sắp để tìm phần tử nhỏ nhất rồi đổi chỗ phần tử đó với phần tử đứng đầu phần chưa sắp, nhờ vậy ranh giới giữa hai phần dịch sang một ô và mỗi lượt chỉ cần đúng một phép đổi chỗ. Mục "Bubble sort" không tìm phần tử nhỏ nhất, nó đổi chỗ liên tục các cặp kề nhau nên một lượt có thể sinh rất nhiều phép đổi. Mục "Insertion sort" cũng chia hai phần nhưng làm ngược chiều: lấy phần tử đầu của phần chưa sắp rồi chèn vào đúng vị trí trong phần đã sắp, phải dịch các phần tử lớn hơn sang chỗ khác. Mục "Binary sort" không phải tên của một thuật toán sắp xếp, cách chia đôi vốn thuộc về tìm kiếm.
Mở trang câu hỏi này →
ARewriting code from scratch to improve performance
BAdding new features to existing software without changing its external behavior
COptimizing code to reduce memory usage
DRestructuring existing code to improve readability, maintainability, and efficiency
Lời giải
Đáp án đúng: "Restructuring existing code to improve readability, maintainability, and efficiency". Refactoring là việc sắp xếp lại cấu trúc bên trong của mã đã có — tách hàm, đổi tên định danh, gỡ đoạn trùng lặp — sao cho mã dễ đọc và dễ bảo trì hơn, trong khi hành vi quan sát được từ bên ngoài vẫn y nguyên. "Rewriting code from scratch to improve performance" là viết lại từ đầu, tức bỏ mã cũ chứ không cải tổ nó, và chỉ nhắm vào hiệu năng. "Adding new features to existing software without changing its external behavior" tự mâu thuẫn, bởi thêm tính năng chính là làm đổi hành vi bên ngoài, còn refactoring thì không thêm chức năng nào. "Optimizing code to reduce memory usage" chỉ tối ưu một chỉ số tài nguyên và nhiều khi làm mã khó đọc hơn, nên không phải mục đích của refactoring.
Mở trang câu hỏi này →
AWaterfall
BSpiral
CAgile
DPrototype
Lời giải
Đáp án đúng: "Waterfall". Mô hình thác nước chạy một chiều: phân tích xong mới sang thiết kế, thiết kế xong mới cài đặt, mỗi pha chỉ bắt đầu khi pha trước đã kết thúc trọn vẹn và không quay lui. "Spiral" lặp lại cả chuỗi pha qua nhiều vòng, mỗi vòng mở rộng sản phẩm và đánh giá rủi ro, nên các pha được làm lại nhiều lần. "Agile" chia việc thành nhiều chu kỳ ngắn, trong một chu kỳ vẫn vừa phân tích vừa viết mã vừa kiểm thử và chấp nhận yêu cầu thay đổi giữa đường. "Prototype" cố ý dựng bản mẫu nhanh cho người dùng xem rồi dựa vào phản hồi mà làm lại, tức quay về pha trước thay vì khoá pha đó lại.
Mở trang câu hỏi này →
Aanalysis
Bdesign
Cimplementation
Dtesting
Lời giải
Đáp án đúng: "design". Pha thiết kế là nơi trả lời câu hỏi làm thế nào: hệ thống được chia thành các module, từng thành phần được xác định rõ cùng giao diện giữa chúng và cấu trúc dữ liệu kèm theo, thường diễn đạt bằng sơ đồ cấu trúc và lưu đồ dữ liệu. "analysis" đi trước và chỉ xác định hệ thống phải làm gì — yêu cầu của người dùng, dữ liệu vào và ra — chứ chưa chỉ ra những thành phần nào tạo nên hệ thống. "implementation" nhận bản thiết kế đã có rồi viết mã cho từng thành phần, nên các thành phần buộc phải được định nghĩa từ trước. "testing" chỉ kiểm chứng rằng những thành phần đã dựng hoạt động đúng, không phải nơi khai sinh ra chúng.
Mở trang câu hỏi này →
AThe internal logical structure of a module
BThe reusability of a module in different projects.
CThe dependency between different modules, which should be minimized
DThe efficiency of a module's execution.
Lời giải
Đáp án đúng: "The dependency between different modules, which should be minimized". Coupling đo mức ràng buộc giữa các module với nhau: càng phụ thuộc nhiều thì sửa một chỗ càng dễ làm vỡ chỗ khác, vì vậy thiết kế tốt hướng tới coupling thấp đi kèm cohesion cao. "The internal logical structure of a module" nói về bên trong một module, đó là phạm vi của cohesion chứ không phải quan hệ giữa các module. "The reusability of a module in different projects." là kết quả thu được khi coupling đã thấp, không phải định nghĩa của chính coupling. "The efficiency of a module's execution." thuộc về hiệu năng lúc chạy, một chỉ số hoàn toàn khác với mức lệ thuộc trong thiết kế.
Mở trang câu hỏi này →