回忆版:
1.continue和break在循环中的区别?
continue是跳出当前循环,break是结束循环
2.finally和catch?
无论是否catch都会走向finally
3.HashMap和ConcurrentHashMap
底层源码:
JDK1.8都是由数组+链表+红黑树构成,底层将<key,value>封装成一个Node,然后计算key的哈希值,ConcurrentHashMap包含一个table数组,类型是node数组,用了volitale关键词修饰,保证了多线程哈希表的可见性,是线程安全的。
4.Spring全家桶
4.1 SpringMVC的模式?
SpringMVC分为三部分,Model层放dao、service、entity等,主要处理业务逻辑。View层负责前端页面的展示,包括jsp、html等。Controller层负责调用业务、接受请求。运行模式:把web包丢入tomcat,启动tomcat会加载web.xml文件,后面解析请求。
4.2 SpringBoot是什么?为什么要用SpringBoot?
SpringBoot是一套开源的框架,为了简化Spring应用的开发,可以自动配置,快速开发,并且可以嵌入微服务。
4.3Spring的两大核心,IOC和AOP?
IOC是控制反转,在没有IOC之前,要想得到一个已经定义的对象,需要new一个新的对象而用了IOC之后,把这个对象放到一个容器里,比如@Service,@Controller,@Component就是IOC。然后通过DI注入,也就说@AutoWired。
AOP是面向切面编程,就是不改变源码的情况下,通过预编译和动态代理来对业务进行隔离,降低耦合度。比如日志,性能检测等。
5.SpringCloud组件?
5.1什么是注册中心?nacos,euraka
在微服务中,一个大型服务有很多微服务,那么多服务的实例,消费者如何知道每一个的地址?或者当一个服务宕机之后,别的服务万一还在调用,不是出现问题了吗?为了解决这个问题,要用到注册中心。服务启动时把ip、端口号注册到注册中心中,服务调用者去注册中心调用这个微服务。
5.1.1nacos的服务注册与发现机制?
服务的消费者要去nacos订阅服务,就是发现。他可以通过轮询,负载均衡,挑选一个实例进行订阅。
5.2什么是负载均衡?Ribbon
负载均衡就是把用户发送的注册中心的请求在服务列表中轮询,选择响应时间小的一个,避免服务器崩溃
5.3什么是远程调用?feign
封装服务的接口,然后进行跨服务调用。
5.4什么是服务保护?
如果一个服务出现了超过50%的接口失败率或者更多,就会触发服务降级或熔断,禁止使用这个服务直到修好。
5.5什么是网关? Spring Cloud Gateway
application.yml
spring:
cloud:
gateway:
routes:
- id: my_route
uri: http://localhost:8081
predicates:
- Path=/myservice/**
- id: my_route2
uri: http://localhost:8082
predicates:
- Path=/myservice2/**
在这个配置中,我们定义了两条路由规则:
-
当请求路径匹配
/myservice/**
时,转发到http://localhost:8081
-
当请求路径匹配
/myservice2/**
时,转发到http://localhost:8082
6.项目中主要用redis做了什么?为什么不用mysql
用redis存储登录信息或临时信息,还用了延时队列解决订单超时问题。首先无需占用数据库资源,其次因为不存在磁盘上,读写速度快。而且,redis是单线程模型,在处理高并发问题时性能更出色,如果用mysql要加锁。
6.1说一下redis的延时队列?
redis延时队列不是专门的MQ,可以处理简单的超时任务,使用方法是创建一个阻塞队列和延时队列,有延时任务就添加到延时队列里,当消息到期后,会从延时队列转到阻塞队列被消费者接收。
7.项目中的难点?
1.商城中用户同时下单导致的商品超卖,库存被扣成负数。而且会重复生产订单,导致后续的业务有问题,比如重复发货。
解决方法是:使用redis的分布式锁senNx解决这个问题,获取到锁之后处理订单,如果没有锁就不处理,处理完订单后删除锁。
重复产生订单的解决方法是建一个唯一的订单索引,并结合RabbitMQ,解决同时下单带来的并发问题对后台进行冲击,用户下单后,先不处理业务逻辑,而是把请求封装成消息发送到队列中,消费者MQ取出信息,处理逻辑前先获取redis锁,只有获取到锁的才会执行请求。
2.合同管理:业务员同时修改合同导致的数据库死锁,出现卡死。
解决方法:使用乐观锁,对于更新的数据更新乐观锁字段。
8.用过什么数据库?
MySql和Oracle。
区别:MySql主要用于中小项目,Oracle用于大项目且安全性高的项目。
从费用来看:Mysql费用低,Oracle费用高。
从选型上看:项目是否存在高并发情况?mysql以表级锁为主,加了索引之后才是行级锁。而oracle是行级锁,且加锁在数据库的数据行上,并发的兼容性好得多。
从类型来看:Oracle是面型对象数据库管理系统,而Mysql是关系数据库管理系统。
9.Mybatis和Mybatis-plus区别?
mybatis是写sql在mapper里然后调用,而mp的功能更多,例如代码生成器,分页插件等。并且可以继承basemapper实现简单的crud。
10.SQL题
1.统计商品购买额最多的前五个
SELECT 商品名,(购买量*购买数) AS BUY from 商品表 order by buy desc group by 商品名 limit 5