Java常问面试题

1.假如你的项目上线了,用户点击前端出错了,此时你怎么解决?

如果前端项目是用浏览器打开的,那就先按F12,查看网络中请求的响应码和响应结果,再根据它们去查看后端项目的错误日志信息。

2、springboot和springcloud的区别

我认为谈不上区别吧,springcloud是基于springboot的,单体项目的开发用springboot,微服务架构项目的开发用springcloud,主要是用它其中的一些组件来完成微服务之间的通信。

3、空指针异常怎么处理

在自己预知的情况下我们一般就把它放到try-catch里并在catch中手动处理;
对于意料之外的,就直接走统一异常处理器。

4、值传递和引用传递的区别

Java的设计严格遵循值传递机制,没有真正的引用传递。值传递相当于创建一个对象副本把值复制了一份传递过去了,对副本修改不会影响原对象;而引用传递传递的是原对象的地址值,无论是修改原来的还是修改转递过去的都会影响另一个。

5、在Java中springboot有写了一个接口,怎么授权?

使用 SpringSecurity提供的一个注解@PreAuthorize

6、Rabbitmq怎么做延迟队列

我们是使用了RabbitMQ提供的一个插件来实现的,它允许我们声明一个delay类型的交换机,并在发送消息时设置一个延迟时间参数。
其原理就是是使用了死信消息相关的技术,死信就是放入消息时设置了一个超时时间,到达时间消息未被消费就变成了死信。

7、sql语句的执行顺序

select username,count(username) c  from biao  where time = 今天 group by username  
having c>10  order by c desc   limit 0,3
from--->where-->group by--->select---->having--->order by--->limit

8、A方法调用B方法,然后B方法不管成功失败不能影响A方法的事务,这个怎么弄啊?

第一种就是使用异步调用B方法,这样A方法就可以在调用B方法后直接向下执行,从而不用等待B方法执行完成;
第二种就是将调用B方法的代码放到try-catch里;
第三种就是利用事务的传播行为:就是把B方法的事务传播行为设置为必须新事物。

9、jdk用的哪个版本,有什么新特性

我们用的是JDK11,主要新特性我印象最深的就是:
首先是var 关键字,它允许开发者在声明局部变量时省略显式类型,由编译器根据给的值自动推断类型。主要作用就是让代码显得规整。
其次就是JDK11默认使用的G1垃圾回收器,它的效率高且垃圾回收线程可以与应用线程并行;还有它的分阶段回收策略可以避免full GC,也就是内存满了再回收。


10、平常在用java的时候有没有做过深拷贝和浅拷贝

浅拷贝经常在用,一般用于复制对象的工具类用的都是浅拷贝,比如BeanUtil里的copyProperties方法;
深拷贝: 就是在复制过程中现将原对象转成json字符串,再由json字符串转成复制对象。

11、如果nacos宕机了服务之间的调用会立刻中断吗

不会,因为服务调用者在启动服务时会从Nacos上拉取服务地址并缓存,当缓存消失或服务提供者的地址发生改变时服务才会中断。

12、现在有一个应用场景,比如说是学生选课,就是比如说他可以选语文、选英语、选历史,然后你要数据库,要存储每个学生他的选课情况,以及前端要展示。如果你为了更高效率的一个查询,这个存储的数据表应该怎么设计?

在学生表中添加一个字段,这个字段存的是选择课程的集合转成的json字符串。

13、怎么保证创建订单的时候不会出现多条订单呢?

一方面是,页面的下单按钮在点击后变为禁用状态;
还有就是,创建订单时携带一个key,后端判断这个key是否使用,如果没有使用就是第一次创建订单,如果已使用就不是第一创建订单

14、并发 

并发就是多个任务在同一时间段内交替执行,它可以提高资源利用率和响应速度。并发量就是每秒向后台发送的请求数。

15、JVM内存快满了,就是频繁的进行垃圾回收,是如何解决的呢?比如如何优化?

一方面可以调整堆内存大小,另一方面可以在老年代中创建对象。

16、千万级的订单表新增字段,怎么做?

第一种方法,可以在从表中新增字段,再进行主从角色切换,再补充缺失的数据
第二种方法就是,我们在设计表时都会有两个备用字段。

17、设计一个对外跟第三方集成的接口,那设计这个接口时候我们应该要考虑哪些?

首先就是接口方法的4要素:请求方式、请求路径、请求参数和响应结果。
还有就是接口的安全性:
       1、访问时需要携带我们发放的key 
       2、用sentinel组件来做请求限流
       3、在Redis中记录同一个IP在一个时间段的访问次数

18、当你访问一个网页时比如"admin.sl-express.com"时,这个流程是怎么实现的

1、会检查你自己电脑的hosts文件 查看这个域名有没有对应一个IP
2、如果没有进入到DNS服务器中获取IP
3、有了IP 通过3次握手创建链接
4、开始传输数据
5、数据传输完毕后 通过4次挥手断开链接

19、有没有出现过用@Autowired注入一个对象后它没注入进去的情况,如果没注入进去你会做什么操作?

这种情况一般是要注入的类并不在启动类所在的包或子包下,也就是包没有扫描到。

20、表的id是怎么生成的

1、主键自增  2、雪花算法  3、UUID(生成的是字符串,一般不用)

21、都写什么过什么文档

1、API接口
2、给客户写过操作手册
3、为了应付客户 也写过详细设计文档

22、说一下报错吧,你实际开发中遇到的报错?你实际有啥判断,有啥报错,有研究半天的没?

我记得在做项目时向前端浏览器发送了一个Long类型的数据,前端根据它查找相关内容就是查不出来,而且前后端都不报错,我找了半天发现是Long类型数据的长度超过16后在JS中有精度丢失的情况,后面改用字符串传递才解决。

23、你们公司是外包吗

纯外包  中科软
半外包  给别的公司做项目
自研    有自己的产品

24、mysql 一个订单表,数据量亿级别,如果查询一个用户的在某个时间段下的所有订单,该怎么做查询优化

1、加一个组合索引 user_id和order_time
2、根据条件先查询id,再根据id回表查询
select * from order o ,  
(select  id  from  order where user_id=?? and order_time between ?? and ??) t where o.id = t.id

25、接口突然响应时间变长什么原因

1、并发量大,带宽不够
2、CPU的使用情况
3、Sql   使用慢日志定位时间比较长的SQL语句

26、http和https区别

https在http的基础上加密了,所以安全
http默认的端口号80  https默认的端口号443

27、跨域问题以及解决

异步访问时协议 IP 端口号不一致就会有跨域问题
解决方式:CORS(跨域资源共享)
具体:项目中写了一个过滤器

28、mysql的字符集

utf8mb4和utf8的区别   
utf8mb4支持emoji表情

29、线程池最大线程数100,有200个线程进来会出现什么效果

效果可能是所有线程都在工作,剩下的任务放在工作队列里,放不下的就会执行对应的拒绝策略。

内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值