数字马力 测开 测试开发 长沙 二面

10.23号二面,流程大概30多分钟。全程疯狂拷打我项目

1. 自我介绍。
2. 介绍一下项目,说说为什么要写这个项目,采用了哪些技术架构?
3. 说说项目的难点,选择一个介绍一下这个难点的基本流程,为什么要这么设计?
4. 你说你用到了线程池,为什么使用线程池?与不使用相比有多少优化?
5. 说说多线程下的线程安全问题?
6. 你这个模块的性能瓶颈在哪里?
7. 针对于性能瓶颈,你做出了哪些优化?
8. 你觉得还能有什么优化的地方?
9. 你说你使用到了分库分表,自定义的分片算法,为什么要自定义?使用默认的会有什么问题?
10. char和varchar的区别?char(10)表示什么意思?一个字符等于一个字节吗?
11. 系统的具体性能你有进行测试过吗?重要模块分别有多少的吞吐量?响应时间大概是多少?
12. 对于XX功能,你怎么进行设计测试用例?
13. 说说SpringBoot中的常用注解?
14. 你提到了AOP相关的注解,说说AOP在你项目中是怎么使用的?除了日志记录,AOP还有其他的什么作用?
15. 你觉得你有什么优点和缺点?
16. 反问?

#数字马力长沙# #数字马力# #数字马力测开#
全部评论
是校招吗,怎么问这么难啊
点赞 回复 分享
发布于 昨天 21:46 河南
13. Spring Boot 中的常用注解: -  @SpringBootApplication :这是一个组合注解,用于标记一个主 Spring Boot 应用类。它包含了 @Configuration (表明这是一个配置类)、 @EnableAutoConfiguration (开启自动配置)和 @ComponentScan (组件扫描)。 -  @RestController :用于标注一个控制器类,该类中的方法默认返回的是 JSON 格式的数据响应。 -  @RequestMapping :用于映射请求的 URL 到特定的处理方法。可以在类级别和方法级别使用。 -  @GetMapping 、 @PostMapping 、 @PutMapping 、 @DeleteMapping :分别对应 HTTP 的 GET、POST、PUT、DELETE 请求方法的映射。 -  @Autowired :自动装配依赖,将一个 Bean 注入到另一个 Bean 中。 -  @Service :标注一个服务层的类,表示该类是一个业务逻辑组件。 -  @Repository :标注一个数据访问层的类,表示该类是一个数据存储相关的组件,如数据库访问层。 -  @Component :通用的组件标注,可以用于标注任何 Spring 组件。 -  @Value :用于将外部配置的值注入到 Bean 中。 -  @ConfigurationProperties :将一组配置属性绑定到一个 Bean 上。 - AOP 在项目中的使用: - 在项目中,可以使用 AOP 实现日志记录。例如,通过定义一个切面,使用 @Pointcut 指定要拦截的方法,然后在 @Before 、 @AfterReturning 等通知中实现日志记录逻辑。比如在方法执行前记录请求参数,方法执行后记录响应结果和执行时间等。 - AOP 的其他作用: - 事务管理:可以使用 AOP 在方法级别上管理事务。通过定义一个事务切面,在需要事务的方法上添加特定的注解(如 @Transactional ),AOP 会在方法执行前开启事务,在方法正常执行完成后提交事务,若方法执行过程中出现异常则回滚事务。 - 安全控制:可以实现权限验证、身份认证等安全功能。例如,在方法执行前检查用户是否具有执行该方法的权限。 - 性能监控:可以记录方法的执行时间,统计系统的性能指标,以便进行性能优化。 - 优点: - 快速学习能力:能够迅速掌握新的技术和知识,适应不同的项目需求。例如,在接触新的编程语言或框架时,通过阅读文档、参考示例代码和实践操作,能在较短时间内理解其核心概念和使用方法,并应用到实际项目中。 - 良好的问题解决能力:在面对复杂的问题时,能够冷静分析,通过查阅资料、尝试不同的解决方案,最终找到有效的解决办法。比如在调试代码时,会逐步排查问题,从错误信息、日志记录等方面入手,定位问题所在并进行修复。 - 团队合作精神:善于与团队成员沟通协作,能够倾听他人的意见和建议,共同完成项目任务。在团队中,积极分享自己的知识和经验,帮助其他成员解决问题,同时也从他人那里学习新的技能和思路。 - 缺点: - 有时候过于追求完美:在某些情况下,可能会花费过多的时间在细节上,导致项目进度受到一定影响。例如,在编写代码时,可能会不断优化代码结构和性能,而忽略了时间成本。 - 压力下可能会焦虑:在面临高强度的工作压力和紧迫的项目期限时,可能会感到焦虑。这种焦虑可能会影响工作效率和决策能力。不过,正在努力通过学习放松技巧和时间管理方法来改善这一问题。
点赞 回复 分享
发布于 今天 10:06 广东
1. 为什么使用线程池 - 资源管理:线程的创建和销毁是有成本的。每次创建一个新线程,都需要分配系统资源,如内存空间用于线程栈等。当线程结束后,这些资源需要回收。使用线程池可以预先创建一定数量的线程,这些线程可以被重复利用,避免了频繁创建和销毁线程带来的资源开销。 - 提高响应速度:对于频繁需要多线程处理的任务,如果不使用线程池,每次都要创建新线程,这会有一定的延迟。而线程池中的线程已经创建好,当有任务到来时,可以立即执行任务,从而提高系统的响应速度。 - 控制并发数量:线程池可以限制同时执行的线程数量,防止因为创建过多线程导致系统资源耗尽。例如,如果有大量并发任务,如果不加以控制,可能会创建大量线程,使系统内存占用过高,甚至出现“Out of Memory”错误。通过线程池可以合理设置最大线程数,保证系统的稳定性。 2. 与不使用相比的优化 - 性能提升:在高并发场景下,不使用线程池频繁创建和销毁线程会消耗大量时间和资源。假设创建一个线程需要10毫秒,销毁一个线程需要5毫秒,对于100个任务,每个任务都创建和销毁线程,总共花费在创建和销毁线程上的时间为       毫秒。而使用线程池,假设预先创建了10个线程,这些线程可以复用,这部分时间开销就可以节省下来,任务可以更快地得到处理。 - 资源利用优化:不使用线程池可能会因为大量线程同时运行而导致系统资源紧张。例如,每个线程可能需要1MB的栈空间,大量创建线程可能会耗尽内存。线程池通过合理配置线程数量,能够更好地利用系统资源,避免资源浪费。在一个应用中,如果不使用线程池,可能会因为线程过多导致系统卡顿,而使用线程池可以让系统在合理的资源消耗下高效运行。
点赞 回复 分享
发布于 今天 10:56 广东

相关推荐

点赞 2 评论
分享
牛客网
牛客企业服务