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.
3.920/20.114 câuCòn 16.194
3901SELECT name FROM Users WHERE id=2
Make sure that there is always a user with ID = 2, what does the SQL query return?4 lựa chọn
AName of user 2
BID of user 2
CFull recordset of user 2
DAn error occurred
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Name of user 2". Câu truy vấn chỉ liệt kê đúng một cột sau SELECT là name, nên kết quả chỉ chứa giá trị của cột name; mệnh đề WHERE id=2 lọc ra dòng có id bằng 2, và vì đã bảo đảm có người dùng này, kết quả là một dòng chứa tên của người dùng số 2. Trong Python với sqlite3, gọi fetchone() sẽ nhận một tuple một phần tử như ('Chuck',). Phương án "ID of user 2" sai vì id chỉ dùng để lọc trong WHERE chứ không nằm trong danh sách cột được chọn. Phương án "Full recordset of user 2" chỉ đúng nếu viết SELECT * FROM Users WHERE id=2, khi đó mọi cột mới được trả về. Phương án "An error occurred" sai vì câu lệnh đúng cú pháp và dòng cần tìm chắc chắn tồn tại; kể cả khi không có dòng nào khớp, SQL cũng chỉ trả về tập rỗng chứ không báo lỗi.
A**
B//
Cis
Dnot in
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "not in". not in là toán tử thành viên (membership operator): biểu thức x not in s cho True khi x không có mặt trong dãy s và False khi có, tức phủ định của toán tử in; ví dụ 'z' not in 'abc' cho True, còn 2 not in [1, 2, 3] cho False. "**" là toán tử luỹ thừa: 2 ** 3 cho 8, không liên quan việc tìm phần tử. "//" là phép chia lấy phần nguyên (floor division): 7 // 2 cho 3. "is" là toán tử định danh (identity operator), cho True khi hai biến cùng trỏ tới một đối tượng trong bộ nhớ, ví dụ x is None; nó không kiểm tra phần tử có nằm trong dãy hay không, và dạng phủ định của nó là is not chứ không liên quan tới dãy.
3903In database terminology, another word for table is4 lựa chọn
Afield
Brow
Cattribute
Drelation
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "relation". Trong mô hình quan hệ (relational model) do Edgar F. Codd đề xuất, một bảng được gọi là quan hệ (relation): tập các bộ (tuple) có cùng cấu trúc thuộc tính; chính từ đó mà có tên cơ sở dữ liệu quan hệ. "field" sai vì trường (field) là một cột, tức một ô dữ liệu trong mỗi dòng, không phải cả bảng. "row" sai vì dòng tương ứng với bộ (tuple) hay bản ghi (record), là một phần tử của bảng. "attribute" sai vì thuộc tính (attribute) là tên gọi khác của cột hay trường. Nhóm tương ứng cần nhớ: relation ứng với table, tuple ứng với row, attribute ứng với column.
AUsing a dictionary with characters as keys and counters as values
BUsing a list with 26 elements, one for each letter of the alphabet
CUsing a set to store characters
DUsing 26 variables, one for each letter of the alphabet
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Using a set to store characters". Đếm tần suất ký tự nghĩa là với mỗi ký tự phải nhớ nó xuất hiện bao nhiêu lần. Set (tập hợp) chỉ lưu mỗi phần tử một lần và không gắn kèm con số nào, nên thêm 'a' lần thứ hai cũng không thay đổi gì; set chỉ cho biết những ký tự nào có mặt chứ không cho biết số lần, vì vậy đây là cách KHÔNG đếm được. "Using a dictionary with characters as keys and counters as values" đếm được và là cách gọn nhất, như counts[c] = counts.get(c, 0) + 1. "Using a list with 26 elements, one for each letter of the alphabet" cũng đếm được: đổi chữ cái thành vị trí bằng ord(c) - ord('a') rồi tăng phần tử tương ứng. "Using 26 variables, one for each letter of the alphabet" đếm được nhưng rất vụng, cần một chuỗi if dài để chọn biến cần tăng; cách dùng list và cách dùng biến chỉ áp cho 26 chữ cái tiếng Anh, còn dict áp cho mọi ký tự. Ba cách này đều đếm được nên không được chọn ở câu hỏi phủ định.
A
bB
aC
nD
IndexErrorLời giải
Mở trang câu hỏi này →Đáp án đúng: "a". Chuỗi trong Python hỗ trợ chỉ số âm (negative index) đếm từ cuối: fruit[-1] là ký tự cuối cùng, fruit[-2] là ký tự áp cuối, và cứ thế. Chuỗi banana gồm sáu ký tự b, a, n, a, n, a ở các chỉ số 0 tới 5, nên fruit[-1] tương đương fruit[len(fruit) - 1], tức fruit[5], là chữ a cuối chuỗi. Phương án "b" là ký tự đầu tiên, lấy bằng fruit[0] hoặc fruit[-6]. Phương án "n" là ký tự ở fruit[-2] hoặc fruit[4], áp cuối chứ không phải cuối. Phương án "IndexError" sai vì -1 luôn là chỉ số hợp lệ với một chuỗi không rỗng; IndexError chỉ xảy ra khi chỉ số vượt ra ngoài độ dài, như fruit[6] hoặc fruit[-7].
AGROUP BY
BORDER BY
CWHERE
DSORT
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "ORDER BY". Mệnh đề ORDER BY đứng cuối câu SELECT để sắp xếp tập kết quả theo một hay nhiều cột, tăng dần với ASC (mặc định) hoặc giảm dần với DESC, ví dụ SELECT title FROM Album ORDER BY title; thiếu nó thì cơ sở dữ liệu không bảo đảm thứ tự dòng trả về. "GROUP BY" gom các dòng có cùng giá trị thành nhóm để tính hàm tổng hợp như COUNT, SUM, AVG; chuẩn SQL không cam kết kết quả nhóm có thứ tự, nên muốn sắp xếp vẫn phải thêm ORDER BY. "WHERE" lọc dòng theo điều kiện, chỉ quyết định dòng nào được lấy chứ không đổi thứ tự. "SORT" không phải từ khoá SQL; nó gợi nhớ phương thức sort() của list hay hàm sorted() trong Python, dùng để sắp xếp dữ liệu sau khi đã lấy về.
AJOIN
BCONNECT
CBETWEEN
DAND
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "JOIN". Từ khoá JOIN ghép các dòng của hai (hoặc nhiều) bảng thành dòng kết quả, thường kèm mệnh đề ON để chỉ điều kiện nối, ví dụ khoá ngoại của bảng này bằng khoá chính của bảng kia: SELECT Track.title, Album.title FROM Track JOIN Album ON Track.album_id = Album.id. Thiếu ON thì JOIN tạo mọi cặp dòng có thể (tích Descartes). "CONNECT" sai vì SQL chuẩn không có từ khoá ghép bảng tên này; kết nối tới cơ sở dữ liệu là việc của hàm như sqlite3.connect phía Python. "BETWEEN" sai vì nó lọc giá trị nằm trong một khoảng ở mệnh đề WHERE. "AND" sai vì nó chỉ nối hai điều kiện logic, không tự ghép dòng của hai bảng.
AThe rows of the left table are connected to the rows in the right table when their primary key matches
BYou get no rows at all
CYou get all of the rows of the left table in the JOIN and NULLs in all of the columns of the right table
DThe number of rows you get is the number of rows in the first table times the number of rows in the second table
ELeaving out the ON clause when joining two tables in SQLite is a syntax error
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "The number of rows you get is the number of rows in the first table times the number of rows in the second table". JOIN không có ON thì không có điều kiện ghép, nên SQLite ghép mọi dòng bảng trái với mọi dòng bảng phải, tạo tích Đề-các (Cartesian product), tương đương CROSS JOIN: bảng 3 dòng ghép bảng 4 dòng cho 12 dòng. Mệnh đề ON chính là bộ lọc giữ lại những cặp có khoá ngoại khớp khoá chính. "The rows of the left table are connected to the rows in the right table when their primary key matches" mô tả JOIN có ON, ví dụ ON Track.album_id = Album.id. "You get no rows at all" sai vì thiếu điều kiện thì mọi cặp đều được giữ chứ không cặp nào bị loại. "You get all of the rows of the left table in the JOIN and NULLs in all of the columns of the right table" gần với kết quả của LEFT JOIN khi không có dòng nào khớp, không phải trường hợp này. "Leaving out the ON clause when joining two tables in SQLite is a syntax error" sai vì SQLite cho phép JOIN không ON và coi như CROSS JOIN.
A
SQLiteB
PostgreSQLC
PySQLD
MySQLLời giải
Mở trang câu hỏi này →Đáp án đúng: "SQLite". SQLite là hệ quản trị cơ sở dữ liệu nhỏ gọn, lưu toàn bộ cơ sở dữ liệu trong một tệp duy nhất và không cần máy chủ riêng; Python đi kèm sẵn mô-đun sqlite3 trong thư viện chuẩn, nên chỉ cần import sqlite3 rồi gọi sqlite3.connect('music.sqlite') là dùng được ngay. Phương án "PostgreSQL" là hệ quản trị mạnh theo mô hình máy khách và máy chủ, phải cài riêng và kết nối qua thư viện bên ngoài như psycopg2. Phương án "PySQL" không phải hệ cơ sở dữ liệu phổ biến nào đi kèm Python, chỉ là cái tên ghép Py với SQL. Phương án "MySQL" cũng là hệ quản trị máy khách và máy chủ, cần cài máy chủ riêng cùng thư viện kết nối riêng, không có sẵn trong bản cài Python.
A
send()B
socket()C
execute()D
run()Lời giải
Mở trang câu hỏi này →Đáp án đúng: "execute()". Với module sqlite3, ta mở kết nối bằng sqlite3.connect, lấy con trỏ bằng conn.cursor(), rồi gọi cur.execute với câu lệnh SQL và tuple tham số để chạy lệnh đó; với SELECT thì lặp trên cursor hoặc gọi fetchall() lấy kết quả, với lệnh thay đổi dữ liệu thì gọi conn.commit() để lưu. Đây là mẫu chuẩn của DB-API trong Python. "send()" là phương thức của đối tượng socket dùng để gửi bytes qua kết nối mạng, không có trên cursor. "socket()" là hàm tạo đối tượng socket trong module socket, thuộc lập trình mạng chứ không thuộc sqlite3. "run()" không có trên cursor của sqlite3; tên này gợi nhớ subprocess.run dùng để chạy một chương trình bên ngoài.
3911In Python, what is a database "cursor" most like?4 lựa chọn
AA function
BA method within a class
CA Python dictionary
DA file handle
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "A file handle". Con trỏ (cursor) lấy từ conn.cursor() trong sqlite3 đóng vai trò giống tay cầm tệp (file handle) trả về từ open(): ta gửi thao tác qua nó bằng cur.execute(...) giống như ghi vào tệp, rồi đọc kết quả qua nó bằng cách duyệt for row in cur hoặc gọi fetchone, fetchall giống như đọc từng dòng tệp; bản thân nó không chứa dữ liệu mà là cổng để truy cập cơ sở dữ liệu. "A function" sai vì cursor là một đối tượng có trạng thái, không phải hàm; ta gọi phương thức của nó chứ không gọi chính nó. "A method within a class" sai vì cursor() mới là phương thức của đối tượng kết nối, còn thứ nó trả về là một đối tượng. "A Python dictionary" sai vì cursor không lưu cặp khoá giá trị và không truy cập được bằng cur['ten'].
A
SERIALB
ASSERT_UNIQUEC
AUTOINCREMENTD
AUTO_INCREMENTLời giải
Mở trang câu hỏi này →Đáp án đúng: "AUTOINCREMENT". Trong SQLite, khai báo id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE cho cột khoá chính khiến cơ sở dữ liệu tự cấp một số nguyên mới, lớn hơn các số đã dùng, mỗi khi ta INSERT mà không ghi giá trị cho cột đó; đây là mẫu tạo bảng quen thuộc trong PY4E. "AUTO_INCREMENT" có dấu gạch dưới là cú pháp của MySQL, SQLite không nhận từ này. "SERIAL" là kiểu cột tự tăng của PostgreSQL, không phải từ khoá của SQLite. "ASSERT_UNIQUE" không tồn tại trong SQL; muốn ràng buộc không trùng thì dùng UNIQUE, nhưng UNIQUE chỉ kiểm tra chứ không tự sinh giá trị. Lưu ý thêm: trong SQLite một cột INTEGER PRIMARY KEY vốn đã tự nhận giá trị khi bỏ trống; AUTOINCREMENT bảo đảm thêm rằng số đã cấp không bao giờ bị dùng lại.
3913What protocol is primarily used to retrieve web pages?4 lựa chọn
A
FTPB
SMTPC
HTTPD
POP3Lời giải
Mở trang câu hỏi này →Đáp án đúng: "HTTP". HTTP (HyperText Transfer Protocol, giao thức truyền siêu văn bản) là giao thức tầng ứng dụng mà trình duyệt và máy chủ web dùng để yêu cầu và trả trang web: trình duyệt gửi một yêu cầu như GET /page.htm HTTP/1.0, máy chủ trả về các header rồi tới nội dung; phiên bản mã hoá của nó là HTTPS. Phương án "FTP" (File Transfer Protocol) dùng để truyền tệp giữa máy khách và máy chủ, không phải giao thức chính để lấy trang web. Phương án "SMTP" (Simple Mail Transfer Protocol) dùng để gửi thư điện tử giữa các máy chủ thư. Phương án "POP3" (Post Office Protocol phiên bản 3) dùng để tải thư điện tử từ hộp thư trên máy chủ về máy người dùng. Những giao thức này đều chạy trên TCP giống HTTP nhưng phục vụ mục đích khác.
A
encode()B
rstrip()C
internal()D
decode()E
split()Lời giải
Mở trang câu hỏi này →Đáp án đúng: "decode()". Dữ liệu đọc từ mạng, chẳng hạn kết quả read() của urlopen hay recv() của socket, có kiểu bytes: một dãy byte đã được mã hoá, thường theo UTF-8; còn str của Python 3 lưu ký tự Unicode ở dạng nội bộ, nên phải gọi decode() để chuyển bytes thành str trước khi xử lý như chuỗi. "encode()" làm chiều ngược lại, biến str thành bytes, dùng trước khi gửi dữ liệu đi qua mạng. "rstrip()" chỉ cắt khoảng trắng và ký tự xuống dòng ở bên phải, kiểu dữ liệu không đổi; gọi trên bytes vẫn trả về bytes. "internal()" không tồn tại trên bytes hay str; tên này chỉ mượn chữ internal trong câu hỏi. "split()" tách thành list các phần, và bytes.split vẫn trả về các phần tử kiểu bytes, nên không đổi sang dạng chuỗi.
3915Looking at the code below, what would this line do to the table Cats?
cur.execute('DROP TABLE IF EXISTS Cats ')4 lựa chọn
AIt will remove the row "Cats".
BIt will move "Cats" to the end of the database.
CIt will remove the column "Cats".
DIt will remove the table "Cats".
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "It will remove the table "Cats".". Lệnh DROP TABLE trong SQL xoá hẳn một bảng khỏi cơ sở dữ liệu, gồm cả cấu trúc lẫn mọi dòng dữ liệu; phần IF EXISTS giúp lệnh không báo lỗi khi bảng chưa tồn tại, nên hay dùng ở đầu chương trình trước CREATE TABLE để tạo lại bảng sạch mỗi lần chạy. cur.execute chỉ là cách gửi câu SQL qua con trỏ của sqlite3. "It will remove the row "Cats"." sai vì xoá dòng dùng DELETE FROM ... WHERE, còn Cats ở đây là tên bảng. "It will move "Cats" to the end of the database." sai vì SQL không có khái niệm dời bảng về cuối cơ sở dữ liệu. "It will remove the column "Cats"." sai vì xoá cột phải dùng ALTER TABLE ... DROP COLUMN trên một bảng cụ thể.
AHow much memory does the server need to serve requests?
BWhat is the IP address for a domain like www.dr-chuck.com?
CHow long do we wait before packets are retransmitted?
DWhich application talks first? The client or server?
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Which application talks first? The client or server?". Giao thức tầng ứng dụng (application layer protocol) như HTTP là bộ quy tắc hai chương trình thống nhất để nói chuyện qua một kết nối đã có sẵn: ai nói trước, nói gì, theo định dạng nào và khi nào kết thúc. Với HTTP, trình khách nói trước bằng một yêu cầu như GET kèm đường dẫn, máy chủ đáp lại bằng dòng trạng thái, các header và nội dung. "How much memory does the server need to serve requests?" là chuyện cấu hình phần cứng của máy chủ, giao thức không quy định. "What is the IP address for a domain like www.dr-chuck.com?" là việc của DNS, hệ thống phân giải tên miền, diễn ra trước khi HTTP bắt đầu. "How long do we wait before packets are retransmitted?" thuộc tầng giao vận: TCP lo việc gửi lại gói tin bị mất, nhờ vậy tầng ứng dụng không phải bận tâm.
3917When you click on an anchor tag in a web page like below, what HTTP request is sent to the server?5 lựa chọn
AGET
BPOST
CPUT
DDELETE
EINFO
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "GET". Khi người dùng bấm vào một thẻ neo (anchor tag), tức thẻ a có thuộc tính href, trình duyệt gửi một yêu cầu HTTP GET tới URL ghi trong href để lấy trang hoặc tài nguyên đó về hiển thị; GET là phương thức dùng để đọc, lấy dữ liệu từ máy chủ. Đề nhắc "like below" nhưng bản in thiếu đoạn thẻ ví dụ; câu vẫn trả lời được vì mọi liên kết thường đều dẫn tới yêu cầu GET. Phương án "POST" dùng để gửi dữ liệu lên máy chủ, điển hình khi nộp một biểu mẫu khai báo method là post, không phải khi bấm một liên kết thường. Phương án "PUT" dùng để tạo hoặc thay thế tài nguyên tại một URL, hay gặp trong API, trình duyệt không dùng nó khi mở liên kết. Phương án "DELETE" yêu cầu máy chủ xoá tài nguyên, cũng chỉ dùng trong API. Phương án "INFO" không phải phương thức HTTP chuẩn; các phương thức có thật gồm GET, POST, PUT, DELETE, HEAD, OPTIONS và PATCH.
3918What happens if newline is not added when writing lines?4 lựa chọn
ALine merges with next
BFile is deleted
CData is lost
DNothing special
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Line merges with next". Phương thức write() ghi đúng những gì được truyền vào, không tự thêm ký tự xuống dòng như print; vì vậy nếu gọi write hai lần với hai chuỗi mà không tự thêm ký tự xuống dòng vào cuối chuỗi thứ nhất, hai chuỗi sẽ nằm liền nhau trên cùng một dòng trong tệp. "File is deleted" sai vì thiếu ký tự xuống dòng không làm mất tệp; tệp chỉ bị làm rỗng khi mở lại bằng chế độ 'w'. "Data is lost" sai vì mọi ký tự vẫn được ghi đầy đủ, chỉ là dính liền nhau, không mất byte nào. "Nothing special" sai vì có hậu quả thực tế: khi đọc lại bằng vòng lặp for line in f, những đoạn định ghi thành nhiều dòng riêng sẽ chỉ trả về một dòng duy nhất, làm sai việc đếm hay xử lý theo dòng.
3919What is the purpose of the BeautifulSoup Python library?5 lựa chọn
AIt optimizes files that are retrieved many times
BIt builds word clouds from web pages
CIt repairs and parses HTML to make it easier for a program to understand
DIt allows a web site to choose an attractive skin
EIt animates web operations to make them more attractive
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "It repairs and parses HTML to make it easier for a program to understand". BeautifulSoup là thư viện phân tích (parse) HTML và XML: nó chịu được mã HTML viết cẩu thả, thiếu thẻ đóng, lồng sai, tự sửa thành một cây hợp lệ, rồi cho chương trình tìm thẻ và đọc thuộc tính dễ dàng, nên rất hay dùng để thu thập dữ liệu web (web scraping). "It optimizes files that are retrieved many times" sai vì nó không lưu đệm (cache) hay tối ưu tệp tải nhiều lần. "It builds word clouds from web pages" sai vì đám mây từ là việc của thư viện khác như wordcloud, BeautifulSoup chỉ có thể là bước lấy chữ đầu vào. "It allows a web site to choose an attractive skin" sai vì giao diện trang do CSS và mã phía trang quyết định. "It animates web operations to make them more attractive" sai vì nó không tạo hiệu ứng động, chỉ đọc và phân tích tài liệu.
AThe local time zone of the sending computer without daylight savings time
BThe local time zone of the sending computer
CUniversal Time / GMT
DThe local time zone of the receiving computer
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Universal Time / GMT". Khi các máy trao đổi dữ liệu qua API, bên gửi và bên nhận có thể ở bất kỳ múi giờ nào, mỗi nơi lại có quy tắc giờ mùa hè (daylight saving time) riêng. Dùng giờ quốc tế UTC, gần như trùng GMT, làm chuẩn chung, thường ghi theo dạng ISO 8601 có hậu tố Z, giúp mọi bên hiểu cùng một thời điểm mà không phải đoán; mỗi ứng dụng tự đổi sang giờ địa phương khi hiển thị. "The local time zone of the sending computer" buộc bên nhận phải biết múi giờ của bên gửi, và giờ mùa hè còn làm một số mốc bị lặp hoặc bị nhảy cóc. "The local time zone of the sending computer without daylight savings time" bớt được chuyện giờ mùa hè nhưng vẫn phụ thuộc vị trí bên gửi, mỗi nguồn dữ liệu một múi giờ khác nhau. "The local time zone of the receiving computer" không khả thi khi một API phục vụ nhiều bên nhận ở nhiều nơi, bên gửi không thể đổi theo từng người.