女Java年底被裁努力面试第八天💪🏻

52 阅读5分钟

后端工程师 - Java 12-15K·13薪 30人左右 后端两个人

电话面试 30分钟

岗位职责:
1.按照业务需求完成系统的开发,自测,上线;
2.负责对所开发系统不断优化,确保核心技术指标不断改善;
3.负责提升系统的用户体验,对性能、稳定性等不懈追求。
基本要求:
1.1 -3 年以上Java及WEB应用系统设计开发经验,具备良好的代码能力以及编程规范;
2.精通Java,多线程编程,消息系统,数据库,分布式应用等技术,了解SOA框架的使用;
3.熟悉Spring、Spring Boot、 Redis、MyBatis、Hibernate等常用框架和类库 ;
4.做事积极主动,沟通能力强,对工作认真负责,有较强责任心和事业心,具有良好的计划和创新的能力;
5.有中大型系统研发经验优先;有高性能、高可用性系统设计、研发、优化经验尤佳。

面试问题:

  1. Spring Beanfactory Factorybean区别

Beanfactory是Ioc的核心接口,用来对bean对象的创建、配置和管理
Factorybean是一个特殊的Bean,一种扩展机制,用于创建复杂的bean对象并且允许在bean创建过程中执行自定义的逻辑

  1. spring 循环依赖怎么处理

Spring通过三级缓存解决了循环依赖
一级缓存为单例池(singletonObjects),
二级缓存为早期曝光对象earlySingletonObjects,
三级缓存为早期曝光对象工厂(singletonFactories)
当A的bean需要B的bean的时候,提前将A的bean放在缓存中(实际是将A的ObjectFactory放到三级缓存),然后再去创建B的bean,但是B的bean也需要A的bean,那么这个时候就去缓存中拿A的bean,B的bean创建完毕后,再回来继续创建A的bean,最终完成循环依赖的解决。Spring 利用 三级缓存 巧妙地将出现 循环依赖 时的 AOP 操作 提前到了 属性注入 之前(通过第三级缓存实现的),解决了循环依赖问题

参考 blog.csdn.net/cy973071263…

  1. kafka 数据是存在哪的

分区日志文件

  1. 库存超卖

  2. redis数据类型以及使用

string list set zset hash

  1. redis持久化机制

rdb aof

  1. 分布式锁setnx 怎么保证原子性

redis是单线程操作

  1. redis lua怎么保证原子性

Redis通过eval、evalsha等命令来执行Lua脚本
Redis采用了单线程执行模型,当Redis执行Lua脚本时,Redis会把Lua脚本作为一个整体并把它当作一个任务加入到一个队列中,然后单线程按照队列的顺序依次执行这些任务,在执行过程中Lua脚本是不会被其他命令或请求打断,因此可以保证每个任务的执行都是原子性的

  1. redis和数据库怎么保证数据一致性

比较好的方法
1.先删缓存 写数据库 再删缓存
2.先删缓存 写数据库 休眠500毫秒 再删缓存(延时双删)
3.先写数据库 再删缓存
4.先写数据库 通过binlog异步更新缓存
参考 zhuanlan.zhihu.com/p/661531827

  1. redis集群有哪些

一、主从
适合单体架构项目

二、哨兵
适合单体架构项目,主机宕机需要手动切换主服务器,不方便水平扩容,每个节点存储的数据一样

三、redis cluster集群
适合分布式架构,完全去中心化没有中心节点,hash槽分配方式,方便水平扩容,每个节点存储的数据不一样
Redis Cluster 是 Redis 官方提供的分布式解决方案,它将数据划分为多个槽(slot),每个槽可以分布在集群中的不同节点上。Redis Cluster 提供了自动的数据分片、故障转移、集群扩展等功能,对外呈现为一个统一的 Redis 服务,客户端无需关心数据存储在哪个节点上,由集群自行负责数据的路由和管理。

  1. redis 大key会造成什么问题

内存占用过大
影响持久化
非阻塞IO分块传输?

  1. 跳跃表原理

对有序单链表 采用二分查找的思想

  1. 数据库分表有哪些逻辑

水平分表 按照某种范围(比如时间、ID、hash算法等)进行拆分
垂直分表 减少表冗余字段

  1. 数据库优化

索引优化 explain 然后观察key key_len rows等字段观察索引情况

  1. 什么情况会导致不走索引

  2. like %为啥放左边为啥不走索引

和 B+Tree 有关系,索引树从左到右都是有顺序的。对于索引中的关键字进行对比的时候,一定是从左往右依次对比,且不可跳过。

  1. 怎么解决死锁

设置过期时间,避免进程永远的占有锁

产生死锁的四个必要条件:

  • 互斥条件:一个资源每次只能被一个进程使用。
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  • 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
  • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
  1. 注册中心还了解哪些

  2. 平时会学习什么以外的知识

  3. maven冲突是怎么解决的

  4. 线程不安全是指什么

指的是多线程情况下,导致共享资源出现不确定性的操作结果

  1. 平时用过哪些设计模式

redis脑裂问题