2023-08-31 16:54:06
得物测试开发工程师一面答案回顾
1. Python是什么类型的语言?
2. Python中常见的内建的数据结构有哪些?
3. 列表和元组有什么区别?
列表(list)像队列一样,支持先进先出,对象可以修改,且长度可变。
元组(tuple)的元素不可修改,且长度不可变。
4. 取列表倒数第三个元素的方法是什么?
5. Python异常处理有哪些关键字?如果需要无论是否有异常,都触发的语句呢?
Python异常处理的关键字有try、except、else。
如果需要无论是否有异常都触发的语句,应放在finally块中。
6. 封装异常类,怎么实现?
7. Python支持多继承吗?
8. Python内存管理机制是什么?
9. Python装饰器是什么?
10. 多表查询,有哪些连接方式?
11. MySQL里面的char和varchar有什么区别?
char是定长字符串,会占用固定长度的空间,即使实际存储的字符串长度小于定义长度,也会占用整个定义长度的空间。
varchar是变长字符串,只占用实际字符串长度加上一个额外的字节(用于记录字符串长度)的空间,更加节省空间。
12. MySQL的事务特性是什么?
13. MySQL里面InnoDB是怎么实现的?
14. 哪些字段需要设置索引?
非NULL字段:因为NULL值不会包含在索引中。
频繁查询的字段:通过索引可以加快查询速度。
用于连接的字段:在JOIN操作中,连接字段上的索引可以显著提高性能。
作为条件查询的字段:在WHERE子句中经常使用的字段。
15. 哪些情况下索引会失效?
未遵循最左匹配原则:在复合索引中,查询条件没有按照索引的最左前缀进行匹配。
使用了函数、计算操作:在索引字段上进行了函数计算或表达式计算。
LIKE包含%前缀:在LIKE查询中,如果通配符%出现在开头,则索引无法被有效利用。
使用了OR、IN或ORDER BY使用不当:在某些情况下,这些操作可能导致索引失效或无法被充分利用。
16. Redis里面有哪些数据类型?为啥查询效率比MySQL高?
Redis支持的数据类型包括string(字符串)、hash(哈希)、list(列表)、set(集合)和zset(有序集合)。
Redis查询效率比MySQL高的原因主要是:Redis是基于内存的数据库,而MySQL是基于磁盘的数据库。内存访问速度远远快于磁盘访问速度,因此Redis能够提供更快的查询性能。
17. 进程和线程有什么区别?
进程是资源分配的最小单位,它拥有独立的内存空间和系统资源。
线程是CPU调用的最小单元,它是进程中的一个执行单元,共享进程的资源(如内存和文件句柄)。
18. 线程有哪些状态?
19. Python中怎么实现多线程?用哪个包?线程锁是什么?
在Python中,可以使用threading包来实现多线程。
线程锁(GIL,Global Interpreter Lock)是Python中的一个机制,用于确保在任何时候只有一个Python线程能够执行Python字节码。这是为了简化内存管理并避免竞争条件。虽然GIL限制了多线程在某些情况下的性能,但对于I/O密集型任务,多线程仍然可以带来性能提升。
除了GIL,还有其他线程同步机制,如Lock、RLock(可重入锁)、Semaphore(信号量)等,它们可以在需要时提供额外的线程同步功能。
20. 测试工具有哪些?http接口的请求报文结构体包含哪些内容?
常用的测试工具包括Postman、Solopi、Fiddler等。
HTTP接口的请求报文结构体通常包含以下内容:
报文协议及版本:包括请求方法(如GET、POST)、协议版本(如HTTP/1.1)。
请求头:包含编码格式、数据类型、存活时间、数据长度等信息。
请求体:包含实际发送的数据(对于GET请求,通常没有请求体)。
21. token存储在哪了?是body里面还是head里面?JWT的结构是什么?
Token通常存储在HTTP请求的Header中,而不是Body中。常见的做法是将Token作为Authorization头的一部分发送。
JWT(JSON Web Token)的结构包括Header(头部)、Payload(负载)和Signature(签名)三部分。Header部分包含令牌的类型和使用的哈希算法;Payload部分包含声明(如用户信息、权限等);Signature部分是对Header和Payload的签名,用于验证令牌的完整性和真实性。
22. 用postman请求接口,登录信息,身份验证过程是怎样的?
使用Postman请求接口进行登录和身份验证的过程通常如下:
发送登录请求:用户通过Postman向服务器发送登录请求,请求中通常包含用户名和密码等登录信息。
系统验证:服务器接收到登录请求后,对用户名和密码进行验证。
返回Token:如果验证成功,服务器会生成一个Token并返回给客户端。这个Token通常是一个JWT或类似的加密字符串,用于后续的身份验证。
客户端存储Token:客户端接收到Token后,通常会将其存储在本地(如浏览器的Cookie或LocalStorage中),以便在后续请求中使用。
服务端验证Token:在后续的请求中,客户端会在请求头中携带Token。服务器接收到请求后,会对Token进行验证,以确认请求者的身份和权限。
返回数据:如果Token验证成功,服务器会返回相应的数据或执行相应的操作。
23. 为啥选测试开发?
对软件测试和开发的结合感兴趣,希望能够在保证软件质量的同时,也参与到软件的开发过程中。
看好测试开发在软件开发流程中的重要性和发展前景,认为这是一个有挑战性和成长空间的职业方向。
具备相关的技术背景和技能,如编程能力、测试技能等,适合从事测试开发工作。
以上是对得物测试开发工程师一面问题的详细回顾和解答。希望这些内容能够帮助你更好地准备面试,祝你面试成功!