数字马力 测开 测试开发 长沙 一面
10.18号面的,流程30~40分钟左右,面试官小姐姐人很好。我的技术栈是Java。
1.自我介绍。
2.项目是什么时间做的?分别介绍一下项目。
3.说说你项目中的MySQL数据库使用了哪种存储引擎?
4.考察一下你的sql语句吧,说说向表中插入数据的语句。
5.看到你简历上写了sql优化,谈谈你的sql优化经验。
6.你刚刚提到了索引,说说你的项目中索引是怎么使用的。
7.索引分为哪几种?底层数据结构的优点?
8.我看你项目中使用了Redis,具体是怎么使用的?
9.你说你对项目进行了单元测试,具体是怎么测试的?
10.你还进行了压测,具体测试内容和结果?
11.你说你使用过postman,你除了进行接口测试还用它做过其他的什么吗?
12.接口和抽象类的区别?
13.说说Java中的集合?
14.看你项目使用到了aop,你怎么理解aop?那你说说项目中具体是怎么使用的?
15.看你项目中使用了cas机制,说说什么是cas?你项目中具体是怎么使用的?为什么要选择乐观锁?乐观锁和悲观锁的优缺点?
16.说说osi网络模型?tcp,ip分别在哪一层?
17.说说http报文格式?你刚才提到了状态码,204状态码表示什么意思?404?5xx是表示哪里错误?502什么意思?
18.http请求类型有哪些?说说post和put类型的区别?
19.http和https的区别?
20.看到你简历中写了分布式事务,说说分布式事务的原理?
21.给你一个百度查询框,如何编写测试用例?
22.平时怎么进行测试相关的学习?
23.说说你对自动化测试的理解?
24.测试和开发,你更加偏向于哪个?
25.反问环节?
总体流程下来问的八股不难,项目也没咋深挖。你简历上写的东西一定要搞懂,面试官会问的。
面试完了当天我就显示进入复试了,不知道啥时候给我发邮件约二面。
#数字马力# #数字马力面经# #数字马力测开# #数字马力测试长沙#
1.自我介绍。
2.项目是什么时间做的?分别介绍一下项目。
3.说说你项目中的MySQL数据库使用了哪种存储引擎?
4.考察一下你的sql语句吧,说说向表中插入数据的语句。
5.看到你简历上写了sql优化,谈谈你的sql优化经验。
6.你刚刚提到了索引,说说你的项目中索引是怎么使用的。
7.索引分为哪几种?底层数据结构的优点?
8.我看你项目中使用了Redis,具体是怎么使用的?
9.你说你对项目进行了单元测试,具体是怎么测试的?
10.你还进行了压测,具体测试内容和结果?
11.你说你使用过postman,你除了进行接口测试还用它做过其他的什么吗?
12.接口和抽象类的区别?
13.说说Java中的集合?
14.看你项目使用到了aop,你怎么理解aop?那你说说项目中具体是怎么使用的?
15.看你项目中使用了cas机制,说说什么是cas?你项目中具体是怎么使用的?为什么要选择乐观锁?乐观锁和悲观锁的优缺点?
16.说说osi网络模型?tcp,ip分别在哪一层?
17.说说http报文格式?你刚才提到了状态码,204状态码表示什么意思?404?5xx是表示哪里错误?502什么意思?
18.http请求类型有哪些?说说post和put类型的区别?
19.http和https的区别?
20.看到你简历中写了分布式事务,说说分布式事务的原理?
21.给你一个百度查询框,如何编写测试用例?
22.平时怎么进行测试相关的学习?
23.说说你对自动化测试的理解?
24.测试和开发,你更加偏向于哪个?
25.反问环节?
总体流程下来问的八股不难,项目也没咋深挖。你简历上写的东西一定要搞懂,面试官会问的。
面试完了当天我就显示进入复试了,不知道啥时候给我发邮件约二面。
#数字马力# #数字马力面经# #数字马力测开# #数字马力测试长沙#
全部评论
请问你这边啥时候AI面试过的呀?
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。
其原理主要涉及到多个部分。首先是事务协调器,它就像一个总指挥,负责整个分布式事务的执行过程。当一个分布式事务开始时,事务协调器会向各个参与者发送事务开始的指令。
以经典的两阶段提交(2PC)为例:
- 准备阶段:协调器要求每个参与者准备提交事务,也就是执行事务中的操作,但不提交。参与者会检查自身是否可以完成这个事务操作,比如检查资源是否足够等。如果可以执行,就会将执行结果(通常是“同意提交”或“中止事务”)反馈给协调器。
- 提交阶段:协调器收到所有参与者的反馈后,如果所有参与者都同意提交,协调器就会发送提交指令,让所有参与者真正提交事务;只要有一个参与者反馈不能提交,协调器就会发送中止指令,让所有参与者回滚事务。
还有三阶段提交(3PC),它是在2PC的基础上进行改进,把准备阶段再次细分,多了一个预提交阶段,目的是降低参与者在等待协调器指令时的不确定性,减少阻塞时间,不过实现起来更加复杂。
选择乐观锁是因为它在多读场景下能有更好的并发性能。乐观锁优点是高并发下性能好、不会阻塞事务;缺点是更新冲突时要回滚重试。悲观锁优点是能保证数据一致性,缺点是并发性能差,容易造成阻塞。
1. 基本搜索功能:
- 不同类型内容搜索:
- 中文搜索:输入常见的中文词语,如“美食”“旅游景点”等,检查是否能返回准确且相关度高的搜索结果。例如,搜索“美食”后,页面应展示各类美食相关的网页链接、图片、资讯等。
- 英文搜索:输入英文单词或短语,如“Technology”“Best movies in 2023”,验证搜索结果是否符合预期,是否是与输入的英文内容相关的网页信息。
- 数字搜索:输入数字,如“2024”“10086”(可代表中国移动客服电话等具有特定意义的数字),查看返回的结果是否与该数字相关,比如关于 2024 年的新闻事件、10086 相关的移动业务信息等。
- 搜索长度测试:
- 在允许长度内:输入长度适中的搜索内容,比如 20 个字符左右的一句话,确认能够正常搜索并返回相关结果。
- 接近最大长度:输入接近百度搜索框允许的最大长度(通常为 38 个字)的内容,检查系统是否可以正确处理并给出搜索结果。
2. 搜索建议功能:
- 输入部分内容:在搜索框中输入部分关键词,如“篮球比”,检查是否会自动显示相关的搜索建议,如“篮球比赛”“篮球比分”“篮球比赛规则”等,并且这些建议应与输入的内容相关度较高。
- 选择搜索建议:点击搜索建议中的某一项,验证是否能够正确跳转到该建议的搜索结果页面,且页面内容与所选择的建议相符合。
3. 快捷键操作:
- 回车键搜索:在输入搜索内容后,按下回车键,检查是否能够正常进行搜索并显示搜索结果,其结果应与点击搜索按钮后的结果一致。
- 复制粘贴搜索:复制一段文本,然后粘贴到百度搜索框中,点击搜索,检查是否能正确搜索到与复制内容相关的信息。
4. 历史记录功能:
- 查看历史记录:多次进行不同的搜索操作后,点击搜索框,检查是否能够显示之前的搜索历史记录,且记录的顺序应符合搜索的时间先后。
- 清除历史记录:点击搜索框设置中的清除历史记录选项,确认历史记录是否被成功清除,再次点击搜索框时不应再显示之前的搜索内容。
5. 页面链接与结果显示:
- 搜索结果链接:点击搜索结果页面中的各个链接,检查是否能够正确跳转到相应的网页,且网页内容应与搜索关键词相关。
- 结果分页功能:如果搜索结果较多,检查分页功能是否正常,点击不同的页码是否能够正确切换到对应的搜索结果页面。
- 结果排序:验证搜索结果的排序是否合理,例如按照相关性、时间等因素进行排序,且排序方式应符合用户的搜索需求。
6. 输入框交互功能:
- 光标显示:点击搜索框,检查是否会出现光标,且光标位置应正确,输入的字符应在光标位置显示。
- 鼠标操作:在搜索框中进行左键单击、双击、三击等操作,检查是否符合预期的输入框选中效果,如单击插入光标、双击选中部分内容、三击选中全部内容等。
- 右键菜单:在搜索框中点击鼠标右键,检查是否会弹出菜单栏,并且菜单栏中的选项如“复制”“粘贴”“删除”等是否可用(具体菜单选项可能因浏览器和操作系统而异)。
CREATE FULLTEXT INDEX idx_fulltext ON my_table (column3);
CREATE TABLE hash_index_table (
column1 INT,
column2 CHAR(10),
INDEX USING HASH (column1)
) ENGINE=MEMORY;
CREATE TABLE my_table (
id INT NOT NULL,
column1 VARCHAR(100),
PRIMARY KEY (id)
);
CREATE TABLE spatial_table (
id INT NOT NULL AUTO_INCREMENT,
geom GEOMETRY NOT NULL,
SPATIAL INDEX(geom)
);
TCP(传输控制协议)位于传输层,它主要负责在不同主机间提供可靠的、基于字节流的通信服务。例如,当你使用浏览器访问网页时,TCP协议保证数据能准确无误地从服务器传输到你的设备上。
IP(互联网协议)位于网络层,它的主要任务是将数据包从源地址发送到目的地址,进行寻址和路由选择。就像是一个快递员,负责把包裹(数据包)送到正确的地方。
CAS(Compare - And - Swap)即比较并交换。
它是一种用于实现多线程同步的机制。在多线程环境中,当一个线程要修改共享变量时,它会先比较该变量的当前值与预期值是否相同,如果相同就进行交换(修改)操作。例如,假设共享变量的值为5,线程A想要将它修改为10。线程A首先会检查变量当前值是否为5(预期值),如果是,就将其修改为10;如果不是,就说明有其他线程已经修改了这个变量,此次修改操作就可能需要重新尝试。
CAS操作是原子性的,它在硬件层面保证了比较和交换这两个步骤的不可分割,从而避免了使用锁机制带来的线程阻塞和性能损耗,在高并发场景下能有效提高程序性能。
在项目中,Redis有多种用途。
一是用作缓存。比如将频繁访问的数据库查询结果存储在Redis中。当需要数据时,先从Redis查找,如果存在就直接使用,避免了频繁查询数据库的开销。例如,对于商品信息的查询,热门商品的详情可以缓存起来,下次用户查询时快速返回。
二是实现分布式锁。在分布式系统里,当多个进程需要互斥访问共享资源时,通过Redis的SETNX命令(SET if Not eXists)设置一个键值对来实现锁机制。如果设置成功,说明获取锁;否则,说明锁已被其他进程获取。
三是用于消息队列。可以使用Redis的List数据结构,将消息按照先进先出的顺序存储。生产者将消息LPUSH到列表头部,消费者从列表尾部RPOP消息进行消费,以此来实现简单的消息队列功能。
相关推荐
点赞 评论 收藏
分享
10-11 22:22
CVTE_软件测试(实习员工) 一笑而过2222:一、百度页面测试
1. 功能测试:
- 除了确保基本的链接、搜索框和按钮功能正常,还可以测试搜索框的自动提示功能、搜索结果的分页功能、高级搜索选项等。
- 对搜索结果的准确性进行深入测试,可以选择一些特定领域的关键词,检查结果是否与预期相符。
- 测试百度的其他功能模块,如百度地图、百度百科、百度学术等的入口链接和功能完整性。
2. 兼容性测试:
- 不仅要在不同的主流浏览器和操作系统上测试,还可以考虑在不同版本的浏览器上进行测试,以确保兼容性。
- 测试在移动设备上的兼容性,包括不同尺寸的手机和平板,以及不同的移动操作系统。
3. 响应式设计测试:
- 检查页面在不同分辨率下的布局变化是否合理,文字和图片是否显示清晰,功能是否正常。
- 测试在不同设备方向(如横屏和竖屏)下的显示效果。
4. 性能测试:
- 除了评估页面加载速度,还可以测试搜索结果的返回速度,以及在高并发情况下的性能表现。
- 使用性能测试工具模拟大量用户同时访问百度页面,检查系统的响应时间和资源利用率。
5. 安全性测试:
- 除了检查常见的 XSS、CSRF 漏洞,还可以进行 SQL 注入测试、权限管理测试等,确保用户数据的安全。
- 测试百度的账号登录和注册功能的安全性,防止密码泄露和账号被盗。
6. 用户体验测试:
- 进行用户行为分析,了解用户在使用百度页面时的常见操作路径和痛点,针对性地进行优化。
- 测试页面的易用性,包括导航的清晰性、搜索框的易用性、结果的展示方式等。
- 进行 A/B 测试,比较不同的页面设计和功能方案,选择用户体验更好的方案。
二、IOC(控制反转)和 AOP(面向切面编程)原理
1. IOC(控制反转):
- 优势:通过将对象的创建和管理交给容器,实现了代码的解耦,提高了代码的可维护性和可扩展性。开发人员只需要关注业务逻辑的实现,而不需要关心对象的创建和依赖关系的管理。
- 举例:在一个电商系统中,订单服务需要依赖用户服务和商品服务。如果没有 IOC,订单服务需要自己创建用户服务和商品服务的实例,这样会导致订单服务和用户服务、商品服务之间的耦合度很高。而有了 IOC,订单服务只需要声明对用户服务和商品服务的依赖,容器会自动创建用户服务和商品服务的实例,并注入到订单服务中。
2. AOP(面向切面编程):
- 优势:将横切关注点(如日志、事务管理、安全检查等)从业务逻辑中分离出来,提高了代码的可维护性和可重用性。可以在不修改原有业务逻辑代码的情况下,动态地添加新的功能。
- 举例:在一个银行系统中,所有的转账操作都需要记录日志和进行事务管理。如果没有 AOP,每个转账方法都需要重复编写日志记录和事务管理的代码。而有了 AOP,可以将日志记录和事务管理定义为切面,在不修改转账方法代码的情况下,动态地将这些切面应用到转账方法上。
三、Spring Boot 常用注解及其作用
1. @SpringBootApplication:
- 除了启动 Spring Boot 应用,还可以通过设置参数来定制应用的行为。例如,可以设置 scanBasePackages 参数来指定扫描的包路径,设置 exclude 参数来排除某些自动配置类。
2. @Controller和**@RestController**:
- 可以结合 @RequestMapping 注解来实现更细粒度的请求映射。例如,可以使用 @RequestMapping("/api") 来定义一个 API 的根路径,然后在方法上使用 @RequestMapping("/users") 来定义具体的用户资源路径。
3. @RequestMapping:
- 可以设置请求方法(如 method = RequestMethod.GET )、请求参数(如 params = "id=1" )、请求头(如 headers = "Content-Type=application/json" )等条件来进一步限定请求的匹配。
4. @Autowired:
- 可以结合构造函数注入、 setter 方法注入等方式来实现更灵活的依赖注入。例如,可以在构造函数上使用 @Autowired 注解来实现构造函数注入,这样可以保证依赖的对象在对象创建时就被注入,提高代码的可靠性。
5. @Service、@Repository和**@Configuration**:
- 可以结合 @Profile 注解来实现多环境配置。例如,可以定义一个开发环境的配置类和一个生产环境的配置类,然后在不同的环境下激活相应的配置类。
6. @Value:
- 可以从环境变量、系统属性、配置文件等多个来源获取属性值。例如,可以使用 @Value("${my.property}") 来获取配置文件中的属性值,也可以使用 @Value("${ENV_VAR_NAME}") 来获取环境变量的值。
7. @EnableAspectJ***:
- 可以设置 proxyTargetClass 参数来指定使用 CGLIB 代理还是 JDK 动态代理。如果代理的目标类没有实现接口,需要设置 proxyTargetClass = true 来使用 CGLIB 代理。
四、Spring Boot 的优点
1. 简化配置:
- Spring Boot 的自动配置不仅减少了 XML 配置,还可以通过属性文件和 YAML 文件来进行配置,使得配置更加灵活和易于管理。
- 可以使用 @ConfigurationProperties 注解来将配置文件中的属性绑定到 Java 对象上,方便在代码中使用配置值。
2. 快速开发:
- 除了提供开箱即用的功能,Spring Boot 还支持快速启动和热部署,可以大大提高开发效率。
- 可以使用 Spring Boot 的开发者工具(Spring Boot DevTools)来实现自动重启和实时加载,无需手动重启服务器。
3. 微服务友好:
- Spring Boot 可以轻松地构建独立的、可部署的微服务,并且支持服务注册与发现、负载均衡、断路器等微服务架构所需的功能。
- 可以结合 Spring Cloud 等框架来构建完整的微服务架构,实现微服务的治理和管理。
4. 社区活跃:
- Spring Boot 拥有庞大的社区支持,有大量的开发者和贡献者,这意味着可以很容易地找到问题的解决方案和学习资源。
- 社区不断地推出新的功能和改进,使得 Spring Boot 始终保持着先进性和活力。
5. 模块化设计:
- Spring Boot 的模块化设计使得可以根据项目的需求选择引入相应的模块,避免了不必要的依赖和复杂性。
- 可以使用 Spring Boot 的 Starter 依赖来快速引入特定的功能模块,如 spring-boot-starter-web 用于构建 Web 应用, spring-boot-starter-data-jpa 用于数据库访问等。
6. 易于测试:
- Spring Boot 提供了多种测试工具和注解,如 @SpringBootTest 、 @MockBean 、 @WebMvcTest 等,可以方便地进行单元测试、集成测试和端到端测试。
- 可以结合测试框架如 JUnit、Mockito 等进行更强大的测试,提高代码的质量和可靠性。
点赞 评论 收藏
分享
点赞 评论 收藏
分享