Java面试题总结

文章目录
  1. 1. 面试题集锦
  2. 2. 面试必备概念
  3. 3. 2017秋招面试题
    1. 3.1. JAVA基础
    2. 3.2. JVM
    3. 3.3. 多线程/并发/锁
    4. 3.4. 算法/数据结构
    5. 3.5. 数据库/缓存
    6. 3.6. Spring/Web
    7. 3.7. 网络/IO
    8. 3.8. 操作系统
    9. 3.9. 项目场景
    10. 3.10. 其他

[toc]

面试题集锦

  1. Spring面试问答(非常值得看)
  2. JAVA多线程和并发基础面试问答
  3. JAVA工程师面试经典题目整理
  4. JAVA常考试题
  5. 最近5年133个Java面试问题列表
  6. Java面试题全集(上)
  7. Java面试题全集(中)
  8. Java面试题全集(下)

面试必备概念

  1. Spring IOC AOP 底层原理
  2. Java反射动态代理
  3. 多线程
  4. Spring事务管理及传播机制
  5. Hashmap底层实现原理
  6. Java线程安全集合类
  7. 设计模式
  8. JVM,JMM
  9. 分布式缓存Redis
  10. memcached
  11. 数据库索引
  12. 线程池原理
  13. Linux常见命令(awk)
  14. RPC原理
  15. GC原理
  16. 类加载过程
  17. Http

2017秋招面试题

JAVA基础

  • 说两个你最熟悉的设计模式(12);
  • Hashmap的原理(5)
  • Hashmap为什么大小是2的幂次(3)写一个单例模式(doublecheck)/单例模式在你项目里哪些应用/为什么用Volatile,synchronize移到方法最外面会怎么样?(2)
  • Hashcode和equals(2)
  • 重写hashcode和equals要注意什么,为什么要同时重写hashcode和equals?(2)
  • Java的面向对象的理解(2)
  • Java中的多态(2)
  • Java的finalize,finally,final三个关键字的区别和应用场景(2)
  • Hashmap的线程安全性,什么是线程安全的?/如何实现线程安全,每种方式的优缺点?
  • Hashmap在JDK1.8中的变化
  • 工厂模式的思想/哪里用到了工厂模式/抽象工厂和工厂方法模式的区别(1)
  • 访问者模式/装饰者模式/策略模式的UML图(1)
  • JavaCollection类,集合,讲两个你了解的,说实现原理?
  • ArrayList的原理?
  • String类可以被继承么(1)

JVM

  • 垃圾回收的过程(4)
  • Jvm的常用参数(2)
  • CMS和G1的过程?
  • 怎样进入老年代?
  • Java的内存模型
  • Java的Fullgc/Fullgc会导致什么问题?

多线程/并发/锁

  • 多线程的理解,什么是线程安全,如何保证线程安全(4)
  • 线程池的作用(2)
  • 线程池的参数/线程池的使用时的注意事项(2)
  • Java新建线程有哪几种方式(2)
  • Synchronize关键字为什么JDK1
  • volatile和synchronized
  • 讲一下线程状态转移图
  • 内存屏障是什么?
  • 讲一下countDownLatch
  • 多线程并发包了解么
  • 多线程条件变量为什么要在while体里
  • 死锁是什么呢/怎么解决死锁
  • i++操作怎么保证线程安全
  • 锁的实现原理
  • CAS的原理及使用场景
  • 对高负载的理解
  • 对高并发的理解

算法/数据结构

  • 讲一下快速排序的思想/手写快排(6)
  • 介绍一下红黑树(2)
  • 堆排序的原理
  • 讲一下稳定的排序算法和不稳定的排序算法
  • 手撕算法:反转单链表
  • 一个数组,有正有负,不改变顺序的情况下,求和最大的最长子序列
  • 动态规划,解释一下dp的思想
  • 手撕算法:一棵二叉排序树,给定一个数,找到与给定数差值最小的数
  • 手撕算法:最小公倍数和最大公约数
  • 写一个两个有序链表合并成一个有序链表
  • 找出两个数组相等的数,不能用其他数据结构
  • 如何判断一个树是不是另一颗树的子树
  • 手撕算法:两个排序的数组A和B分别含有m和n个数,找到两个排序数组的中位数,答主用的二分,时- 间复杂度为O(log(m+n))。结果面试官不满意,让用归并的思想做,时间复杂度其实更高了
  • 手撕算法:假设你是一个专业的窃贼,准备沿着一条街打劫房屋。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且当相邻的两个房子同一天被打劫时,该系统会自动报警。给定一个非负整数列表,表示每个房子中存放的钱,算一算,如果今晚去打劫,你最多可以得到多少钱在不触动报警装置的情况下。
  • 算法题:给一个整数数组,找到两个数使得他们的和等于一个给定的数target。
  • 手撕算法:leeetcode原题22,GenerateParentheses,给定n对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。
  • 手撕算法:实现类似微博子结构的数据结构,输入一系列父子关系,输出一个类似微博评论的父子结构图
  • 手撕算法:爬楼梯,写出状态转移方程
  • 智力题:时针分针什么时候重合
  • 手撕算法:给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上
  • 算法:给定一个数字,一个数组,找出数组中相加等于这两个数的和,不能用数据结构

数据库/缓存

  • 数据库的索引原理/非聚簇索引和聚簇索引/索引使用的注意事项(8)
  • Redis介绍/Redis的应用场景/Redis的优势和特点(6)
  • 数据库挂了怎么办?除了热备份还有什么方法(4)
  • mysql的隔离级别,每个隔离级别是如何解决/每个隔离级别各做了什么(3)
  • mysql数据库的引擎和区别(3)
  • 联合索引/Mysql对联合索引有优化么?会自动调整顺序么?哪个版本开始优化/从底层解释最左匹配原则(3)
  • Redis的持久化的方式和原理(3)
  • 分布式事务(3)
  • 介绍redis和mysql的区别(2)
  • 怎么解决缓存和主存的一致性问题/缓存还没更新到主存,服务器挂了怎么办(2)
  • 数据连接池
  • 讲一下数据的ACID,什么是一致性,什么是隔离性
  • mysql要加上nextkey锁,语句该怎么写
  • Redis集群/Redis源码
  • Redis和memcache的区别
  • 如果成功的用户有10万,redis存不下怎么处理
  • 数据库的瓶颈

Spring/Web

  • Forward和Redirect的区别
  • 项目里用的什么服务器
  • 自己写一个tomcat服务器,你会怎么写
  • 分布式服务器会出现哪些问题
  • 怎么解决session一致性缓存的问题
  • Spring中Autowire和Resourse关键字的区别
  • 介绍spring中的熟悉的注解/如何实现autowire注解
  • Spring的AOP怎么实现、Spring的AOP有哪些实现方式/IOC的个人理解
  • 动态代理的实现方式和区别
  • Hibernate的作用,你的理解/Hibernate和mybatis的区别/Hibernate的batch有数量限制么
  • 读写锁/什么时候用读锁,什么时候用写锁

网络/IO

  • NIO的原理/NIO和AIO的区别(2)
  • Tcp怎么保证可靠传输
  • Tcp的拥塞控制
  • 解释一下长连接/短连接
  • 手写java的soeket编程,服务端和客户端
  • 进程间的通信方式
  • http请求流程
  • 为什么负载均衡/怎么实现负载均衡
  • Channel和buffer/directBuffer和buffer的区别

操作系统

  • 怎么查看系统负载
  • Cpuload的参数如果为4,描述一下现在系统处于什么情况
  • Linux,查找磁盘上最大的文件的命令
  • Linux,如何查看系统日志文件

项目场景

  • 场景题:设计判断论文抄袭的系统
  • 让你设计一个即时聊天的系统
  • 支付宝转账,是如何实现,几个小时通知转账成功的(面试官想让回答长连接,答主一直没get到点)
  • 设计题:设计一个系统,记录qq用户前一天的登录状态,提供16g内存和2tb的硬盘,要做到查询指定qq号的前一天的登录状态,快速查询O(1)复杂度
  • 场景题:设计一个系统,解决抢购时所需要的大量的短链接的功能,如何保证高并发,如何设计短链接
  • 一千万用户并发抢购,怎么设计
  • 设计题,一个图书馆管理系统,数据库怎么设计,需求自己定
  • 场景题:千万用户抢购,如何处理高并发,并且有一个链接,指向前一天抢购成功的用户,如何设计这个系统和数据库,如果后台处理抢购请求的服务器,每次最多承受200的负载,系统该怎么设计
  • 场景题:设计一个下单系统,下单成功后可以给用户发优惠券,接上面场景题:服务器挂了,优惠券还没发怎么办

其他

  • 你意向的技术方向是哪块?
  • 加密解密了解么?几种算法,讲一下你了解的
  • 消息队列了解么
  • 分布式了解么
  • 用过什么系统?shell写过脚本吗?
  • 看过框架源码么
  • 代码量多少
  • 你项目中的难点
  • 当意见不一致时,如何沟通并说服开发成员,并举个例子
  • 怎么保证项目的进度
  • 技术选型,一个新技术和一个稳定的旧技术,你会怎么选择,选择的考虑有哪些
  • 最近在学什么新技术
  • 你是怎么去接触一门新技术的
  • 会看哪些书、怎么选择要看的书
  • 你遇到什么挫折