JAVA后端开发面试题大全

JAVA后端开发面试题大全

  • 数据库知识
    • MySQL/PostgreSQL
    • Redis
  • 计算机基础知识
    • 计算机网络
    • 数据结构与算法
    • 操作系统
  • Java编程技术
  • 架构设计
  • 其它问题
  • 面试流程

数据库知识

MySQL/PostgreSQL

  • 数据库三范式及判断、E-R图
  • innodb和myisam存储引擎的区别
  • 索引分类(主键、唯一索引、全文索引、覆盖索引等等),最左前缀原则,哪些条件无法使用索引
  • B树、B+树区别,索引为何使用B+树
  • 聚集索引与非聚集索引(使用非聚集索引的查询过程)
  • 事务的ACID(原子性、一致性、隔离性、持久性)
  • 事务隔离级别和各自存在的问题(脏读、不可重复读、幻读)和解决方式(间隙锁及MVCC)
  • 乐观锁和悲观锁、行锁与表锁、共享锁与排他锁(inndob如何手动加共享锁与排他锁)
  • MVCC(增加两个版本号)及delete、update、select时的具体控制
  • 死锁判定原理和具体场景
  • 查询缓慢和解决方式(explain、慢查询日志、showprofile等)
  • drop、truncate、delete区别
  • 查询语句不同元素(where、jion、limit、groupby、having等等)执行先后顺序
  • 数据库优化,读写分离、主从复制
  • 数据库崩溃时事务的恢复机制(REDO日志和UNDO日志)

Redis

  • Redis如何做高可用、集群
  • Redis和Memcached的优劣势比较
  • Redis的数据存储类型有哪些?
  • Redis的应用场景有哪些?
  • Redis的持久化方式,以及项目中用的哪种
  • Redis的缓存雪崩怎么解决?
  • Redis与数据库MySQL的双写一致如何解决?
  • Redis的缓存穿透怎么解决?

计算机基础知识

计算机网络

  • OSI七层协议、TCP/IP四层协议
  • 各层对应的网络设备(路由器、交换机、网关、网桥、集线器等等),各层对应的协议
  • 数据链路层的CSMA/CD协议,笔试可能会用到
  • IP地址分类,子网划分(笔试常用)
  • TCP和UDP的区别
  • TCP三次握手和四次挥手,为什么三次握手,为什么四次挥手
  • TCP精髓问题:停止等待协议、连续ARQ协议、滑动窗口、流量控制、拥塞控制(慢开始、拥塞避免、快重传、快恢复)
  • HTTP状态码
  • HTTP缓存机制(cache-control、Expires之类的一系列请求与相应报头字段)
  • session和cookie的区别,禁用cookie后怎么办
  • DNS解析的过程
  • 常用协议的端口

数据结构与算法

  • 数组、链表(单向、双向、双端)、栈和队列、二叉树、红黑树、哈希表、堆(最大和最小)
  • 个人经验:栈和队列、哈希表、链表、二叉树的题较多,图的较少
  • 查找:二分查找及其变形
  • 二叉树:前序、中序、后序遍历,按规定方式打印,两个节点之间操作(最近公共祖先、距离)等问题。
  • 最大堆和最小堆:大数量级数据找最大几个等问题、堆如何调整等问题。
  • 栈和队列:经常作为算法题要用到的数据结构
  • 八大排序:3个简单的:冒泡、选择、插入及其优化,5个高级的:快速排序、归并排序、堆排序、希尔排序、桶排序(快排、归并、堆很重要)
  • 给2万多名员工按年龄排序应该选择哪个算法?

操作系统

  • 常用命令:用户控制、权限控制、进程控制、系统状态查询之类的
  • /etc/hosts文件什么做用?
  • 3Linux目录结构(尤其是/proc非常重要)
  • linux文件系统结构和启动流程)
  • Java服务端问题排查(OOM,CPU高,Load高,类冲突)
  • 如何查看Java应用的线程信息
  • Threaddump文件如何分析(Runnable,锁,代码栈,操作系统线程ID关联)
  • 一个二进制文件运行出结果,操作系统做了什么(这是一个很全面的题)
  • 死锁的条件及银行家算法、资源分配图之类的
  • 进程间通信方式
  • linux的五种IO方式(阻塞与非阻塞、同步与异步的理解)
  • linux的select、poll、epoll的区别
  • 进程与线程区别、内核级线程与用户级线程
  • 页面置换算法,尤其是lru
  • 进程调度算法
  • linux中断响应机制
  • 虚拟内存机制

Java编程技术

  • 谈谈对Synchronized关键字,类锁,方法锁,重入锁的理解

  • volatile的原理

  • java线程的状态及相互转换

  • 线程同步的几种方式和线程间通信

  • ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和优缺点?

  • HashMap实现原理,如何保证HashMap的线程安全

  • ReentrantLock的内部实现?

  • JVM的垃圾回收机制,以及回收算法有哪些?

  • JVM什么时候会触发YGC,什么时候触发FGC?

  • JVM如何内存调优、内存泄漏如何排查

  • Spring框架中IOC的原理是什么?

  • 用Spring如何实现一个切面?

  • 死锁的四个必要条件?

  • 常见的设计模式、手写一个单例、JDK、Spring原理里有哪些采用了设计模式。

  • 多线程与高并发的关系和区别

架构设计

  • 常见的高并发场景有哪些,对应的架构设计方案是什么。
  • 介绍完整的分布式中间件有哪些,各自的应用场景和作用。
  • 谈谈你的架构设计思路?
  • 谈谈分布式架构设计

其它问题

  • 未来3年是怎样打算的?
  • 你如何看待加班?
  • 你如何看待出差?
  • 在项目中遇到问题,如何解决?

面试流程

  • 自我介绍
  • 家庭情况了解
  • 技术能力检查
  • 解决问题的能力检验(是否具备复杂问题的分解能力、分析问题是否全面)
    • 出一道综合性的问题进行判断
  • 团队合作的能力检验
    • 工作中遇到难以合作的同事怎么办?
    • 在工作中是否遇到和同事就一件事而争执?你如何解决?
    • 你是如何管理你的领导的?
  • 抗压能力
  • 个人职业规划
  • 个人诉求
  • 沟通能力评价(语言表达是否流畅、回答问题逻辑思维是否清晰)

你可能感兴趣的:(软件编程,java)