面试笔记

1.自我介绍和技术背景
2.问项目,问聚合支付项目是否做过压力测试,能支持多少QPS。问了项目中的熔断做了什么,怎么实现的
   熔断那里用Hystrix实现,返回保底数据。压力测试我不清楚说多少合适,就说没做过压力测试
3.系统困难点和收获
   困难点我就回答的在一些逻辑设计方面不太完善,有一些设计缺陷导致给后面的开发挖坑需要花时间弥补。
4.是否考虑到高并发的场景,怎么优化
    后续可通过加锁和多级缓存来优化
5.如果系统突然变慢了,应该怎么去排查问题出在哪里  (这里答的不太好因为没考虑过这个问题)
   我回答去分层排查,先看dao层是不是因为某些sql查询时间过长,然后如果是就看情况加索引、优化sql语句。如果是因  为受到攻击导致系统不稳定可进行请求的监控。
6.如果程序运行时,进程突然挂掉,应该怎么排查( 这里也没答上来)
7.说下AOP原理
 通过动态代理,jdk或cglib,我讲了讲我看过源码,讲了讲动态代理实现以及AOP的应用(日志、方法运行时间记录)
8.线程池的参数和工作原理,应用场景
9.做过哪些mysql优化  (我答完后他问我还有吗?可能他想听的我没说出来)
  慢查询、explain分析、选合适的字段加索引(非空、使用频繁且更新不频繁)、避免索引失效(违反最左前缀、使用模糊查询、隐式类型转换、使用函数等)、批量插入代替单个插入,顺序代替乱序,手动控制事务+批处理,更新时where的条件应匹配索引防止行锁升级为表锁等。    
10.如何解决redis和数据库数据不一致(答得不够好)
 我答的更新时先更新数据库再删redis,如果先删除redis的话需要在更新数据库后再删一次。 
11.缓存雪崩或穿透等解决方案
  防止大量数据集中过期(增加随机过期时间),使用布隆过滤器防止大量请求访问数据库,防止缓存穿透可缓存空值,对访问数据库加锁(使用信号量进行配额),使用多级缓存,进行数据预热并监控。
12.未来学习方向,学习新技术是怎么学的
全部评论

相关推荐

总结:面了一个小时,一道手撕,几个八股,几道业务,还有场景行测题。手撕环节1.实现rm -rf path命令。已知3个方法 1.file.isFile()判断是否是文件 2.file.delete()删除文件或目录 3.listFiles()返回这个目录下的所有文件或目录import java.io.File;import java.util.List;public class FileDeleter {// 方法1: 判断是否是文件public boolean isFile(String path) {return new File(path).isFile();}// 方法2: 删除文件或目录public void delete(String path) {File file = new File(path);if (file.isDirectory()) {// 如果是目录,递归删除其内容deleteDirectory(file);} else {// 如果是文件,直接删除file.delete();}}// 方法3: 返回目录下的所有文件和目录public List<String> listFiles(String path) {File directory = new File(path);File[] files = directory.listFiles();return Arrays.stream(files).map(File::getAbsolutePath).collect(Collectors.toList());}// 实现rm -rf功能public void rmrf(String path) {if (isFile(path)) {// 如果是文件,直接删除delete(path);} else {// 如果是目录,递归删除deleteDirectory(new File(path));}}// 递归删除目录及其内容private void deleteDirectory(File directory) {// 获取目录下所有文件和子目录File[] files = directory.listFiles();if (files != null) {for (File file : files) {if (file.isDirectory()) {// 递归删除子目录deleteDirectory(file);} else {// 删除文件file.delete();}}}// 删除空目录directory.delete();}}2.追问:针对这个功能,请设计测试用例1.判断命令行是否为空2.判断关键字是否正确3.判断path是否为空4.判断path是否合法(无效,超过长度)5.判断path是绝对路径还是相对路径6.判断是否具有删除权限7.判断删除的是文件还是路径8.判断删除的文件类型(二进制,普通)场景题1.找出一个10w个元素的数组中,最大的1000个数使用最小堆,只保留最大的1000个数(原来思路是对整个数组排序,排成最大堆,这样的方案空间占用很多)2.请你列出支付宝的转账功能的测试点(系统层级)八股部分1.SpringBoot的注解1.1.启动类注解●@SpringBootApplication 组合注解,包含以下三个注解:●@SpringBootConfiguration:标记为配置类●@EnableAutoConfiguration:启用自动配置(扫描META-INF 的spring.factories,如果有对应的组件,就加载对应的Bean文件)●@ComponentScan:组件扫描1.2.条件注解●@ConditionalOnClass 当类路径下有指定类时生效●@ConditionalOnMissingBean 当容器中没有指定Bean时生效●@ConditionalOnProperty 当配置属性满足条件时生效2.Spring如何管理依赖?Spring Boot 通过其独特的依赖管理机制,极大地简化了项目依赖配置,解决了传统Spring项目中常见的依赖冲突和版本管理问题。父项目继承(spring-boot-starter-parent)Spring Boot 提供了starter-parent作为推荐的基础父POM:<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.0</version> <!-- 使用最新版本 --></parent>优势 :●自动管理依赖版本(无需指定版本号)●默认的Maven配置(资源过滤、插件配置等)●合理的默认配置(Java版本、编码等)3.SpringBoot依赖注入如何使用@Autowired,@Resource,@Injected4.三种注入的方式了解吗常用方式:a. 构造器注入(Constructor Injection) - 官方推荐: 通过类的构造方法注入依赖项。i.优点:依赖项不可变(final),确保在使用对象之前所有依赖都已准备好,完全初始化后的对象是线程安全的(如果依赖项也是线程安全的),强制要求依赖项,便于测试(测试时可以直接传入mock对象)。b. Setter注入(Setter Injection): 通过类的setter方法注入依赖项。i.优点:可选依赖项(可以没有Setter调用,依赖可能为null),允许在对象创建后重新配置依赖(但通常不建议)。c. 字段注入(Field Injection) - 尽量避免: 直接在字段上使用@Autowired注解。i. 虽然使用简单,但通常不推荐,原因:破坏了封装性(字段变成public或通过反射可访问),难测试(需要反射或启动完整Spring上下文才能设置依赖),可能使类的依赖关系不明确(没有构造器或setter明确声明依赖),不利于声明final字段。5.Spring如何管理事务?使用AOP,使用try catchtry:开始事务执行方法提交事务catch:回滚事务项目提问1.你的项目输入输出是什么?2.有应用场景嘛?3.有应用大模型吗?4.除了实验室课题,你还做过什么项目?5.这两个学校项目占用了你多少时间?课余时间一般在做什么?(觉得我没有额外学习编程呜呜行测部分1.你遇到问题会怎么解决?2.假如领导交给你一个不能实现,或者你觉得没必要实现的任务,你会怎么做?3.你人生中最大的困难是什么?4.你选择测试开发岗位的原因是什么?对未来的职业规划是什么?反问环节1.是否可以了解一下目前测试业务范围?测试业务范围主要是负责饿了么APP点外卖、淘宝闪购以及用户能看到的所有页面和用户使用场景的测试工作。2.对于实习生来说,可能会负责哪些工作内容?实习生负责的工作内容取决于所在部门,可能涉及客户端测试或底层算法层的测试,具体要求根据实习生的分配部门和能力所在进行安排。3.平时的工作节奏是怎样的?正常上班时间为早上九点半,下班时间为下午六点半,但实际工作时间可以根据项目进度自行调整,周末通常为双休日。工作中会有临时高强度的情况,但并非常态。4.工作地点是上海吗?上海和杭州都有,建议实习地点和工作地点一致。
查看18道真题和解析
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务