闪送一面凉经

💼公司岗位
Java开发工程师

1.自我介绍
2.项目问题:
对订单库存是怎样设计的?
答:(当时比较紧张第一遍说错了)当用户下单并且成功扣款时,会对库存进行修改,根据用户订单减少库存。不对...是用户提交订单会对减少库存,根据定时任务对用户是否完成付款进行判断,用户规定时间未完成付款则会回填库存。

怎么防止库存超卖?
答:在提交订单接口首先做了令牌桶算法进行限流,防止高并发情况的问题,然后添加了锁机制,将用户的主键加锁,保证一个用户只能同时提交一次订单,提交完订单会对库存进行修改,每次提交订单都会对库存进行判断,若有库存就可以提交没有则返回失败信息。

怎么保证高并发的时候订单不会被超卖,假如我现在就1个库存,但是100个人同时请求这一个,怎么保证没有2个人抢到同1个库存的情况?
答:(当时一脸懵)我在接口加了令牌桶算法进行限流,保证不会有多人都请求到这个商品,而且对用户主键进行加锁,让他们的操作是串行的,不会产生一个多次请求的情况。可能没有考虑的很全面,大概就是这么设计的(当时没有底气)

3.谈一谈Java的反射
答:我认为反射是框架的灵魂,很多现在的框架都是通过反射机制实现的,比如Spring,在SpringIoC中就用到了反射机制,Spring对Bean对象的管理和注册就是通过反射机制实现的。

这是Spring中的反射,那你有用到过Java反射么?
答:我平常项目中可能会调取一些private的类或者一些私有的方法可能用到反射,但是使用反射一定会有安全性问题,有的private本身就不是想被调用到的,我们可以使用:类class、new类.getClass()和Class.forName("类全路径")来获取到这个类。

4.讲一下Spirng MVC的请求流程
答:SpringMVC核心是DispatcherServlet,前端发送请求到DispatcherServlet,然后DispatcherServlet根据请求信息调用HandlerMapping,HandlerMapping解析请求找到对应的controller这里叫做Hander,并会将请求涉及到的拦截器和 Handler 一起封装,然后调用 HandlerAdapter适配器执行 Handler ,请求处理后,会返回一个 ModelAndView 对象给DispatcherServlet,数据模型以及相应的视图的信息,现在的前后端分离的项目其实就已经结束了,会把数据返回到前端进行处理,以前的JSP等前后端不分离的会对view进行渲染等操作。

5.讲一下MySQL数据库优化
答:数据库优化可以从多个方面考虑,首先是物理层面对于数据库部署的服务器可选择内存较大的服务器,可以使用更好的存储引擎,比如现在MySQL的InnoDB,其次可以根据数据库是使用情况进行分库分表、读写分离等集群部署,然后可以对编写的SQL进行优化比如减少SELECT *,连表操作等SQL的编写,合理的使用索引等。

我想问的是对数据库的优化,比如怎么加索引?
答:对于数据库的索引是为了加速对表中数据行的检索而创建的一种分散的存储结构,数据库没有索引就会走表进行全表扫描,我们去优化一条SQL并添加索引的时候,可以先去找到慢SQL,根据SQL编写进行分析添加合适的索引,在MySQL的日志中使用show variables like ‘%slow_query_log%定位慢SQL,并使用explain关键字进行分析,可以SQL中是否用到索引。我们添加索引可以根据主键ID进行添加主键索引,因为主键一般是连续且唯一的。若SQL列中有长字符串或者是文本可以为这列添加上全文索引。对于用的比较多的列或者是查询速度很慢的SQL可以对他们where条件里面的列添复合索引,但是要把比较常用的列放到最左侧,因为复合索引有最左匹配原则,若查询的列不在最左侧可能不会使用索引。

6.RabbitMQ和Rocket MQ的区别
答:RabbitMQ是开源的对于学生来说比较友好,RocketMQ是对于企业的性能更好。他们都是高可用的,相对来说RabbMQ的时效性更好延迟最低,RocketMQ的稳定性更好,吞吐量更大。

7.了解RocketMQ的架构实现吗?
答:RocketMQ不太了解,我知道RabbitMQ,RabbitMQ核心主要是个队列,消息生产者产生消息后会发送给RabbitMQ的交换机,交换机接收到消息,并将消息路由到队列中,队列存储消息,等待消费者处理,将交换机和队列连起来进行一个绑定,消费者订阅队列进行消费。

8.反问

面试官比较随意,面试的氛围还是很好的,但是感觉有些不想听,(可能是我个人理解),不知道这是KPI面还是什么原因,我回答的还算比较流畅,最后可惜没有通过,不知道现在该往什么方向准备了。

有大神帮我指点一下么,回答的问题望大家能指出

#牛客解忧铺##面试# #凉经##大厂##找工作#
全部评论
kpi吧,问的有点少
点赞 回复 分享
发布于 2024-08-01 12:26 浙江

相关推荐

09-10 15:17
已编辑
北京大学 产品经理
被面试官鉴定为和大一刚学java的水平差不多,彻底赢了这下,赢完了哈哈,出走半身回来还是大一1.springboot从一个请求进来到被处理的流程是怎么样的呢2.tomcat线程池3.提交一个jar包是怎么在tomcat跑起来的,详细展开讲讲4.一个请求进来,在springboot中要经过两个映射的过程,详细展开讲讲这两个映射过程,比如说uri是怎么知道被哪个处理器处理的5.你说handlermapping,那这个mapping到底是咋做的呢,详细讲讲6.@autwied @resource这些注解是在程序中通过什么样的方式被springboot发现呢7.@autwied注解原理,它是怎么取到对象的,从源码的角度讲讲8.@autwied通过构造方法注入该怎么注入呢,会不会有循环依赖的问题,怎么解决呢详细讲讲9.dispatcherServlet发生了什么过程,展开讲讲10.你对servlet有多少了解呢,这个也说说了解11.你写代码的时候 import java.util和import自己定义的类,中间发生了什么过程详细展开讲讲12.假设有两个除了版本不一样其他都一样的类,一个类版本是1.7,一个类版本是1.8,类加载器会加载哪个呢13.讲讲双亲委派机制,为什么有这东西14.除了自定义类加载器,我想要指定加载1.7还能怎么做呢15.你写了一个maven工程,很多个代码文件,每个代码文件都import了很多,那这些import的东西是什么时候加载呢,一次加载还是怎么样16.static 变量,构造方法,static代码块的加载顺序是怎么样17.我定义一个static变量,是什么时候被赋值的呢,定义一个static final变量,又是什么时候被赋值的呢,定义一个int变量但是不赋值,那值是多少呢18.wait notify sleep19.sleep和wait有啥区别,为什么20.notify能不能唤醒sleep,为什么21.notifyall能不能唤醒本线程,为什么22.sleep还占用cpu资源吗,为什么23.wait还占用cpu资源吗,为什么24.join是干什么,是怎么做到这个效果的呢,从原理角度讲讲25.start和run区别26.手撕一个生产者消费者模型27.while (count == 0/size) {lock.wait}count ++/--lock.notifyall这种写法是不合适的,请优化(example:为什么不能变成while (count == 0/size) {lock.notifyalllock.wait}count ++/--lock.notifyall呢)28.写的这个代码子线程会结束吗,不会结束的话线程是什么状态呢29.守护线程是什么30.加载jdbc驱动的时候class.forname(com.mysql.cj)发生了什么过程呢31.如果class.forname代码写了两次会发生什么呢
代码不跑我跑_秋招版:全是springboot源码拷打啊,真是唐到我了
你觉得今年秋招难吗
点赞 评论 收藏
分享
评论
点赞
20
分享

创作者周榜

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