本练习包含知识点:计算机网络、SQL语句、Python基础、软件测试基础。
目录
一、选择题
1. 以下哪种HTTP状态码表示客户端错误?(B)
a. 200
b. 404
c. 500
d. 302
- 200:表示请求成功(OK)。
- 404:表示客户端错误,具体含义是“未找到”(Not Found),即请求的资源不存在。
- 500:表示服务器错误(Internal Server Error)。
- 302:表示重定向(Found),并非客户端错误。
2. 当一个页面从HTTP迁移到HTTPS,但其中一些资源仍然使用HTTP链接时,这种情况叫什么?(A)
a. Mixed Content
b. Resource Fallback
c. SSL Renewal
d. Protocol Mismatch
- Mixed Content(混合内容):指的是在HTTPS页面上仍然使用HTTP加载部分资源(如图片、脚本、CSS),可能导致安全风险。
- Resource Fallback:指的是资源无法加载时回退到备用资源,并非指HTTP和HTTPS混用。
- SSL Renewal:指SSL证书的续期,与资源加载无关。
- Protocol Mismatch:一般指通信协议不匹配,未特指HTTP和HTTPS混用。
3. 哪一个是Python中的无效变量名?(C)
a. _myVar
b. myVar1
c. 1myVar
d. my_Var
- 变量名必须以字母(a-z, A-Z)或下划线(_)开头,不能以数字开头。
- _myVar:合法,以下划线开头的变量在Python中是有效的。
- myVar1:合法,变量名可以包含字母和数字。
- 1myVar:非法,变量名不能以数字开头。
- my_Var:合法,Python允许使用下划线。
4. 在Python中,哪个关键字用于定义类方法?(C)
a. func
b. def
c. class
d. static
- func:不是Python的关键字,Python使用
def
来定义函数和方法。- def:用于定义函数或方法。
- class:用于定义类,而非类方法。
- static:
@staticmethod
是Python中的装饰器,用于定义静态方法,但不是定义方法的关键字。
5. 要从数据库表中选取所有唯一的城市名称,你会使用哪个SQL关键字?(B)
a. UNIQUE
b. DISTINCT
c. SINGLE
d. ONE
- UNIQUE:用于定义列的约束(constraint),防止重复值,但不能用于查询去重。
- DISTINCT:用于SQL查询,返回唯一值,即去掉重复的城市名称。
- SINGLE 和 ONE:不是SQL关键字。
示例查询:
SELECT DISTINCT city FROM table_name;
6. 哪一个SQL语句用于返回表中记录的数量?(B)
a. RETURN
b. COUNT
c. SUM
d. NUMBER
- RETURN:SQL中没有此关键字用于计数。
- COUNT:用于统计查询结果的行数,例如:
SELECT COUNT(*) FROM table_name;
- SUM:用于计算数值列的总和,不是用于计数的。
- NUMBER:SQL中没有这个关键字。
二、简答题
7.什么是HTTP的无状态性?这有什么缺点?
HTTP的无状态性是指HTTP协议本身不会保存任何关于客户端状态的信息。每个请求都是独立的,服务器不会记住之前的请求或会话状态。这意味着服务器不能根据之前的请求来了解客户端的上下文或状态。缺点是无法跟踪会话状态,以及服务器在每个请求中重新获取客户端的状态信息,这可能会导致额外的性能开销,特别是在处理大量并发请求时。
8. 描述HTTP和HTTPS的主要区别。
HTTPS = HTTP+完整性保护+身份认证+加密。
- https有ssl加密机制,比http更加安全。
- http传输是明文传输,https是密文。
- https需要用到CA,CA一般是收费的。但http是免费的。
- http响应速度更快,因为它只需要3次tcp握手,交换3个包,但是https除了3次tcp握手外还要和ssl握手,一共交换3+9=12个包。
- http端口80,https端口443
- 浏览器显示不一样。http会显示不安全,https会显示安全。
9. 什么是跨域资源共享(CORS)?为什么它是重要的?
跨域资源共享是一种机制,用于在浏览器和服务器之间进行跨源(即不同源)HTTP请求时控制对资源的访问权限。跨域拦截的初衷是保护用户,使用户不受到恶意网站的侵害,但这个机制也阻碍了正常的跨域调用。CORS是重要的因为它允许Web应用程序从不同的域中获取所需的资源,而不必牺牲安全性。没有CORS,浏览器会阻止这些跨域请求。
10. 当你找到一个bug时,应该如何记录和报告它,以使开发人员能够有效地理解并修复它?
详细描述问题,提供复现步骤,提供环境信息,附加截图或录像,提供错误信息或日志,分配优先级和严重程度,持续跟进。
11. 如果你正在测试一个Web API,并收到了一个500的HTTP响应,你会如何进一步诊断该问题?
检查错误消息,查看服务器日志,重现问题,使用调试工具,与开发团队沟通。
12. 假设你正在使用一个bug追踪工具,开发团队频繁地将bug标记为“不能重现”。你会如何解决这个问题?
持续跟进,有时候,bug只在特定条件下才会出现,持续跟进可以帮助找到这些条件。
与开发团队保持良好的沟通和协作。
13. 在Web应用中,为什么重要要考虑到SQL注入和XSS攻击?这两者有何不同?
SQL注入是一种利用Web应用程序中未经过滤的用户输入来执行恶意SQL语句的攻击。攻击者通过在输入字段中注入恶意的SQL代码,可以绕过身份验证、获取敏感数据、修改数据库内容等。
XSS攻击是一种将恶意脚本注入到Web页面中,然后在用户的浏览器上执行的攻击。攻击者可以利用XSS漏洞窃取用户会话信息、篡改页面内容、重定向用户浏览器等。
14.描述Python的装饰器,并给出一个简单的示例。
装饰器是Python中一种用于修改函数或方法行为的函数。它们可以接受函数作为参数,并返回一个新的函数,通常用于添加额外的功能或修改原始函数的行为。
def my_decorator(func): def wrapper(): print("A.") func() print("B.") return wrapper @my_decorator def say_hello(): print("Hello!") say_hello()
15. 什么是Python中的列表推导式(list comprehension)?请给出一个例子。
生成1到10的平方列表:squares = [x**2 for x in range(1, 11)]
16. 写一个Python函数,用于计算并返回一个字符串中每个字符的出现频率。
def char_frequency(string): frequency = {} for char in string: if char in frequency: frequency[char] += 1 else: frequency[char] = 1 return frequency result = char_frequency("hello") print(result)
17. 何时应该使用INNER JOIN,何时应该使用LEFT JOIN?
当只需要返回两个表中共有的记录时使用INNER JOIN。INNER JOIN会返回两个表中满足连接条件的记录,如果没有匹配的记录,则不返回任何结果。
当需要返回左表中的所有记录以及右表中与之匹配的记录时使用LEFT JOIN。即使右表中没有匹配的记录,左表中的记录也会被返回,右表中的字段值为NULL。
18. 设有一个员工表employees和一个部门表departments。employees表有一个department_id字段来标识每个员工所在的部门。编写一个SQL查询,列出每个部门及其员工数量。
SELECT departments.department_id, COUNT(*)
FROM departments, employees
WHERE employees.department_id = departments.department_id
GROUP BY departments.department_id;