Java OpenResty Spring Spring Boot MySQL Redis MongoDB PostgreSQL Linux Android Nginx 面试 小程序 Arthas JVM AQS juc Kubernetes Docker DevOps


Java 后端面试题汇总

Java 面试 大约 2641 字

开场

  • 自我介绍
  • 掌握的技术栈
  • 最近一个项目的架构和技术栈
  • 近期做的项目
    • 有什么亮点
    • 有什么值得改进

Java 基础

  • 面向对象有几大特性
  • JDK1.8新特性
  • JDK11新特性
  • hashCodeequals
    • 哪些地方用到了
      • HashMap key是对象时
      • switch string
  • Java Collections中的接口和实现类
  • ArrayListLinkedList区别
  • List集合去重
  • HashSet实现原理
  • HashMap实现原理
  • final关键字
    • final修饰的类有哪些(String
    • 匿名内部类引用局部变量,需要注意什么(必须final修饰)
    • 为什么匿名内部类引用外部局部变量必须要加final关键字
    • 为什么匿名内部类引用外部局部变量不用加final也不报错
  • StringBufferStringBuilder
  • Java反射优化

多线程与并发

  • sleepwait区别
  • 线程的几种状态
  • Threadjoin方法的作用
  • 线程安全的集合类
    • CopyOnWriteArrayList
    • CopyOnWriteArraySet
    • CurrentHashMap
    • ConcurrentSkipListMap
    • ConcurrentSkipListSet
  • 如何停止一个线程
  • volatile关键字
    • 可见性
    • 有序性
    • 不能保证原子性
  • 如何保证原子性
  • 创建线程池主要参数
  • Java中线程安全的类
    • AtomicInteger
    • LongAdder
  • ConcurrentHashMap/CopyOnWriteArrayList实现原理
  • ThreadLocal
  • Thread.sleep(0)作用

  • JDK中一共有几种锁
    • synchronized
    • ReentrantLock公平锁与非公平锁
    • ReentrantReadWriteLock读写锁
    • StampedLock读写锁,乐观锁
    • CAS自定义自旋锁
  • ReentrantLock公平锁与非公平锁实现上的区别
  • synchronized
  • ReentrantLocksynchronized区别
    • synchronized重量级锁能否退化
    • 瞬时高并发接口使用哪个
  • 什么场景会导致死锁
  • 简述AQS
  • AQS实现类
    • ReentrantLock
    • CountDownLatch,原理
    • CyclicBarrier
    • Semaphore
  • LockSupport

JVM

  • Java相关的几个命令
  • 如何指定启动参数
  • 语法糖
    • 增强for循环原理
      • 数值
      • 集合
    • 自动拆装箱
  • 使用过哪些诊断工具
    • JFRJava Flight Recorder
    • VisualVM
    • Arthas
    • jstack
    • jstat
    • jmap
    • jcmd

GC

  • 哪些对象可以作为GC Root
  • Java中的引用类型有哪些(强、软、弱、虚、引用队列)
  • 垃圾回收器的种类
    • CMS
    • G1
    • ZGC
  • JVM如何使用垃圾回收器
  • 说一下SafePoint

设计模式

  • Spring设计模式

Spring

  • Spring常用注解
  • Spring中注入的几种方式
  • Spring不用@Autowired@Resource能否注入对象
  • Spring中的IOC步骤
  • Spring中的AOP
  • Spring Bean对象是单例还是多例
  • Spring Bean生命周期
  • Spring三级缓存
  • Spring循环依赖
  • Spring循环依赖能否用二级缓存
  • SpringMVC流程
  • Spring Boot特性
  • Spring Boot启动流程
  • Spring Boot自动配置原理
  • Spring Boot配置优先级
  • Spring Boot路径匹配规则
  • Spring Boot优雅停机
  • 如何自定义spring boot starter
  • Spring大量使用反射,效率会变低吗

事务

  • Spring传播
  • Spring事务原理
  • Spring事务失效
  • Spring事务中有远程调用如何处理
  • 事务隔离级别

MySQL

    • 乐观锁与悲观锁的实现
    • 如何解决幻读(间隙锁,不是MVCC
    • 意向锁
    • 行锁/记录锁
    • 间隙锁
    • Next-Key
  • 索引
    • 聚集索引和非聚集索引(Cluster IndexNon Cluster Index
    • 覆盖索引
    • 索引条件下推

SQL

  • 数据库表的设计规范:三范式
  • select *select id区别
  • 如何定位SQL需要优化及如何优化
    • SQL
    • EXPLAIN
    • 聚集索引Cluster Index非聚集索引Non-Cluster Index
    • 覆盖索引
    • exist in区别
    • 索引条件下推
  • 索引失效的情况
    • 模糊索引,头部模糊如何走索引
  • 成绩表:学生名字,学科,成绩。找出所有学科成绩大于等于90分的学生名字
  • 删除重复数据保留最新一条数据

Redis

  • 缓存雪崩
  • 缓存击穿
  • 缓存与数据库双写不一致
  • 线上禁用哪些命令
    • keys
    • flushall
    • flushdb

分布式

  • 高并发时,服务如何扩容
    • 新增实例,配置到负载均衡
    • Kubernetes调整Deploymentreplicas参数
    • 使用KubernetesHPA控制器,动态扩缩容
  • 如何保证接口幂等
  • 分布式锁
  • 分布式事务
    • 本地消息表
    • Ali Seata
    • 最终一致性
      • MQ
  • 全链路追踪
    • HTTP Header添加TraceId
    • Slf4jMDC机制及原理(ThreadLocal
      • 能否在子线程中使用

Kubernetes

  • Pod控制器有哪几种
  • Deployment常用设置
    • replicas副本数
    • pod的属性,探针probe
    • 设置配置(环境变量envFrom
      • ConfigMap
      • Secrets
  • 如何查看namespace下所有pod的日志
  • 如何远程Debug一个Java应用
    • 添加command参数,暴露5005端口,port-forward端口
    • 使用Telepresence网络代理,直接本地调试,注意断点类型
  • 如何简化本地开发
    • Telepresence
    • kt-connect
    • nocalhost
  • 如何使用Helm Chart

综合考察

  • 软件开发的全生命周期,开发流程
    • 独立工作能力
    • 需求分析
    • 详细设计
    • 模块划分(微服务)
    • 编码实现(用到哪些组件、依赖)
    • 自测及交付流程(ReviewCICD
阅读 45 · 发布于 2022-09-13

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批