文章目录
[toc]
面试题集锦
- Spring面试问答(非常值得看)
- JAVA多线程和并发基础面试问答
- JAVA工程师面试经典题目整理
- JAVA常考试题
- 最近5年133个Java面试问题列表
- Java面试题全集(上)
- Java面试题全集(中)
- Java面试题全集(下)
面试必备概念
- Spring IOC AOP 底层原理
- Java反射动态代理
- 多线程
- Spring事务管理及传播机制
- Hashmap底层实现原理
- Java线程安全集合类
- 设计模式
- JVM,JMM
- 分布式缓存Redis
- memcached
- 数据库索引
- 线程池原理
- Linux常见命令(awk)
- RPC原理
- GC原理
- 类加载过程
- 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写过脚本吗?
- 看过框架源码么
- 代码量多少
- 你项目中的难点
- 当意见不一致时,如何沟通并说服开发成员,并举个例子
- 怎么保证项目的进度
- 技术选型,一个新技术和一个稳定的旧技术,你会怎么选择,选择的考虑有哪些
- 最近在学什么新技术
- 你是怎么去接触一门新技术的
- 会看哪些书、怎么选择要看的书
- 你遇到什么挫折