女Java年底被裁努力面试第二天

本文描述了一个中级Java开发工程师的职位需求,包括职责范围、技术要求,如参与业务开发、使用SSM框架、处理分布式和缓存技术,以及对MySQL、Redis、分布式锁和微服务框架的熟悉。同时,文章还提及了面试问题和项目经验相关的内容。
摘要由CSDN通过智能技术生成

本来年前就该整理的,前公司项目忙不过来,办完离职被前领导喊着帮忙干了一周活,然后距离过年不到三周确实没啥岗位了,哈哈,摆烂到现在…

上海 中级Java开发工程师 13-20K

岗位职责:
1、参与业务流程分析并根据业务需求进行JAVA服务和应用程序开发、与前端同学协作实现业务模块设计与开发联调’
2、小组内负责开发规范的执行落地、团队工作任务协同和项目推进,当好技术带头人
3、 关键服务和模块的设计编写, 以及代码质量的review
4、 负责跟踪JAVA相关新技术并运用到程序开发中
5、 负责业务中台模块的开发和维护
任职要求:
1、全日制大学本科及以上学历(统招为硬性要求);计算机、通信等相关专业;三年以上工作经验;
2、精通Java编程,熟练掌握Java基础类库、设计模式、多线程、Socket等编程经验;
3、熟练掌握SSM、SpringMVC、 SpringCloud等常用开源框架;
4、熟悉分布式、缓存、异步等中间件使用,起码了解Redis、消息队列、RocketMQ,了解原理者优先;
5、精通SQL开发与优化,了解常用NoSql数据库;
6、了解设计原则与常用的设计模式;
7、具有模块设计能力和文档编写能力,并能带领小团队进行模块设计与开发。
8、较强的学习能力和积极向上的精神、工作积极主动勇于承担

视频面试 时长30分钟
1.自我介绍

2.你最近或最熟悉的项目是哪一个

3.你在里面的主要职责和详细设计能说下么

4.你可以说下商品缓存是怎么设计的么\

C端的菜单来说吧
首先需要做数据预热,也就是在项目启动或者低峰期时加载部分数据到redis缓存中,来提高缓存命中率
其次就是需要定期更新缓存,来保证缓存一致性

5.这里的缓存用到了几级

缓存层级一般是本地缓存>redis缓存>数据库缓存

6.商品缓存是把所有商品都缓存么

按门店级别缓存菜单商品,这样可以过滤掉大部分没用的商品

7.库存的并发有关注过么

用分布式锁控制,提示库存繁忙
或者用的rabbitmq异步更新数据库库存,可以削峰填谷

8.你们的库存是直接走库的是吧

有冻结库存、可售库存、安全库存这些设计,提交订单是更新redis缓存里面的冻结库存,支付成功时用mq异步更新数据库可售库存

9.锁定的库存是怎么设计的,就是什么时候处理冻结库存

提交订单时增加冻结库存,订单支付成功或订单超时未支付时释放冻结库存

10.有考虑过防超卖的设计么

当可售库存低于安全库存时,会发告警邮件或短信给负责人,库存操作会记录日志盘点库存

11.你们异步用的是rabbitmq,有考虑过消息丢失或者消息重复发送这些

消息丢失
① 标记消息持久化,让消息能够在重启后恢复
② 消息重试机制
③ 设置死信队列来保证无法成功消费的消息不会被丢失
④ 监控系统,定期检查消息队列是否正常

消息重复发送
① 消费端幂等处理,保证重复发送获取的结果一致
② 采用唯一标识符,去重处理
③ 手动ack

12.订单有没有可能丢失呢

很少应该是

13.订单部分发货什么逻辑

商家发货后在后台点击发货,选择发货商品输入物流单号
系统设计逻辑,表方面是有订单表基础上新增订单发货商品信息表,根据商家操作商品判断部分发货还是整单发货,修改订单状态信息,保存订单发货商品信息,并异步丢消息到mq修改订单缓存信息

14.mysql8的版本和之前的版本有啥区别

① 数据库的缺省编码将改为 utf8mb4,这个编码包含了所有 emoji 字符
② InnoDB存储引擎的改进
③ 性能和安全性增强
等等

15.平时你们是怎么排查线上问题

在elk看日志

16.比如如果出现库存超卖了你们平时是怎么处理的

库存不足会告警提示相关负责人
扣库存也会记录日志

17.mysql聚簇索引、非聚簇索引

聚簇索引(Clustered Index)和非聚簇索引(Non-clustered Index)是两种不同类型的索引结构,它们在数据存储和索引构建上有一定的区别。
1.  聚簇索引(Clustered Index):
    -   聚簇索引是一种按照索引顺序存储数据的方式,索引的叶子节点就是数据节点。
    -   聚簇索引决定了表中数据的物理存储顺序,一个表只能有一个聚簇索引。
    -   当按照聚簇索引进行查询时,MySQL 可以直接通过索引找到对应的数据行,效率较高。
2.  非聚簇索引(Non-clustered Index):
    -   非聚簇索引存储的是索引字段的值及指向实际数据行的指针,而不是实际的数据。
    -   表中可以有多个非聚簇索引,它们并不影响数据的物理存储顺序。
    -   当按照非聚簇索引进行查询时,MySQL 首先通过索引找到对应的行指针,然后再根据指针找到数据行,需要进行两次查找操作。

18.mysql优化sql操作流程

elpain执行计划,观察key字段有没有用到索引,len字段长度,row涉及行数,观察有没有走到索引

19.索引数据结构

btree、hash

20.mysql隔离级别

读未提交
读已提交
可重复读
序列化
读已提交和可重复读是比较常见的隔离级别,能够在保证数据一致性和并发性能的基础上,兼顾事务处理的效率
mysql默认隔离基本是可重复读

21.redis几种数据类型、使用场景

string list set hash zset 
string 缓存值、分布式锁等
list 有序字符串元素集合,用于消息队列、消息列表等
set 不重复无序元素集合,可以用于标签系统之类的
zset 不重复有序元素集合,可以做排行榜
hash 字段-值的形式存储,可以用于存储门店信息等

22.分布式锁用的哪一种

用的redis的string数据类型实现的
分布式锁可以用来防止重复点击、防止穿透等

23.setnx怎么保证锁过期后任务没执行完

一般设置过期时间都是根据业务考虑好的,如果确实有不确定的情况,可以在执行任务期间定时更新锁过期时间,在任务执行完后释放锁

24.springcloud组成结构

zuul hytrix熔断 ribbon限流 eureka注册中心 nacos注册中心

25.eureka、nacos区别

nacos还可以做配置中心

26.系统中有用到什么设计模式

单例模式、模板模式、工厂模式、

27.系统中有创建多线程么

**不推荐使用Executors创建线程**,无界队列可能会造成内存溢出
推荐使用new ThreadPoolExecutor()的方式,根据服务器核心数自定义线程参数

28.多线程的核心原理有了解过么

29.了解过JVM么

调优常用的-xms -xmx调整堆内存大小

30.线上有出现卡顿或者性能上的问题通过什么方式去看的

java自带的那个**jvisualvm** ,dump那个文件 用工具去看是哪个类比较大定位位置
阿里巴巴那个arthas(阿尔萨斯)

31.hashmap、cucurrentHashmap区别

hashmap线程不安全
cucurrenthashmap线程不安全 高并发时候使用

32.hashmap7和8区别

数据+链表 
后来加了红黑树

33.平时会看源码么

34.目前有啥记得的熟悉的源码

SpringBoot项目中有个注解@SpringBootApplication,这个注解是对三个注解进行了封装: @SpringBootConfiguration@EnableAutoConfiguration@ComponentScan 其中@EnableAutoConfiguration是实现自动化配置的核心注解。 该注解通过@Import注解导入AutoConfigurationImportSelector类,这个类实现了一个导入器接口ImportSelector。 在该接口中存在一个方法selectImports,该方法的返回值是一个数组,数组中存储的就是要被导入到spring容器中的类的全类名。 在AutoConfigurationImportSelector类中重写了这个方法,该方法内部就是读取了项目的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。 在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中

35.平时中项目中的定位和角色是什么

功能开发然后带带新人啥的

36.你能接受项目急的时候加班么

不是每天都加就还好

37.你有什么要问我们的么

了解到是年底启动的新项目,规模是有十几个开发的,技术方面用的也是mysql、rabbitmq这些
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值