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个线程进来会出现什么效果
效果可能是所有线程都在工作,剩下的任务放在工作队列里,放不下的就会执行对应的拒绝策略。

3265





