算法:
- 加密解密了解么?几种算法,讲一下你了解的
- 介绍一下红黑树
- 来个算法题:一个无序数组,其中一个数字出现的次数大于其他数字之和,求这个数字 (主元素)
- 答完再来一个:一个数组,有正有负,不改变顺序的情况下,求和最大的最长子序列
- 手撕算法:一棵二叉排序树,给定一个数,找到与给定数差值最小的数
- 手撕算法:两个排序的数组A和B分别含有m和n个数,找到两个排序数组的中位数,答主用的二分,时间复杂度为O(log (m+n))。结果面试官不满意,让用归并的思想做,时间复杂度其实更高了
- 手撕算法:假设你是一个专业的窃贼,准备沿着一条街打劫房屋。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警。给定一个非负整数列表,表示每个房子中存放的钱, 算一算,如果今晚去打劫,你最多可以得到多少钱 在不触动报警装置的情况下。
- 算法题:给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
- 手撕算法:leeetcode原题 22,Generate Parentheses,给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。
- 手撕算法: 爬楼梯,写出状态转移方程
- 算法:找出两个数组相等的数,不能用其他数据结构
- 算法:给定一个数字,一个数组,找出数组中相加等于这两个数的和,不能用数据结构
- 算法:如何判断一个树是不是另一颗树的子树
- 手撕算法:最小公倍数和最大公约数
- 手撕算法:反转单链表
- 手撕算法:实现类似微博子结构的数据结构,输入一系列父子关系,输出一个类似微博评论的父子结构图
- 对算法有什么了解?答主先回答了动态规划,解释了一下dp的思想
- 手撕算法:给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。
- 然后继续在这个问题上扩展
- 求出最短那条的路径
- 递归求出所有的路径
数据库:
- Mysql的数据库引擎,区别特点
- 数据库的索引?
- 数据库的索引原理
- 索引使用的注意事项
- 讲一下数据的acid
- 什么是一致性
- 什么是隔离性
- Mysql的隔离级别
- 每个隔离级别是如何解决
- Mysql要加上nextkey锁,语句该怎么写
- 项目用到什么数据库?隔离级别?每个隔离级别各做了什么
- 非聚簇索引和聚簇索引
- 联合索引
- 从底层解释最左匹配原则
- Mysql对联合索引有优化么?会自动调整顺序么?哪个版本开始优化?
- Mysql的容灾备份
- 数据库挂了怎么办?除了热备份还有什么方法
- 读写锁
- 什么时候用读锁
- 什么时候用写锁
- Cas的原理,使用场景
- 数据库的瓶颈
设计模式:
- 写一个单例模式,答主写的是双检查锁单例,问了为什么用Volatile,synchronize移到方法最外面会怎么样?
- 工厂模式的思想
- 抽象工厂和工厂方法模式的区别
- 单例模式在你项目里哪些应用?
- 访问者模式
- 装饰者模式
多线程:
- 多线程了解么?什么是线程安全?
- Synchronize关键字为什么jdk1.5后效率提高了
- 线程池的使用时的注意事项
- Java新建线程有哪几种方式
- Java线程池的作用
- 多线程并发包了解么
- 讲一下countDownLatch
- 线程池的参数
- 描述出完整的线程池执行的流程
- 多线程条件变量为什么要在while体里
- 多线程的理解,如何保证线程安全
- 死锁是什么呢
- 怎么解决死锁
- 锁的实现原理
集合:
- Arraylist的原理
- Java的hashmap的原理
- Hashmap为什么大小是2的幂次
- Hashmap的线程安全性,什么是线程安全的?如何实现线程安全
- 讲一下线程状态转移图
- volatile和synchronized
- Hashmap中jdk1.8之后做了哪些优化
- hashset的源码
- object类你知道的方法
- hashcode和equals
- 你重写过hashcode和equals么,要注意什么
- 往set里面put一个学生对象,然后将这个学生对象的学号改了,再put进去,可以放进set么?并讲出为什么
- 假设现在一个学生类,有学号和姓名,我现在hashcode方法重写的时候,只将学号参与计算,会出现什么情况?
- 为什么要同时重写hashcode和equals
- 不同时重写会出现哪些问题
- Hashmap的原理
- Hashmap如何变线程安全,每种方式的优缺点
- 写一个两个有序链表合并成一个有序链表
框架:
- Spring中autowire和resourse关键字的区别
- 介绍spring中的熟悉的注解
- 让你实现autowire注解的功能你会如何实现
- Spring的aop怎么实现
- Spring的aop有哪些实现方式
- 动态代理的实现方式和区别
- Hibernate的作用,你的理解
- Hibernate和mybatis的区别
- 为什么用ssh框架
- Hibernate的batch有数量限制么
JVM:
- 垃圾回收算法的过程
- 你了解的垃圾收集器? Cms收集器的过程
- 怎样进入老年代?
- 垃圾回收的过程
- Jvm的参数设置
- Java垃圾回收机制
- 内存屏障是什么
- Java的内存模型,垃圾回收
- Java的full gc
- Full gc会导致什么问题
Redis:
- 看你最近博客写的是redis,介绍redis和mysql的区别
- Redis的应用场景
- Redis和mysql的区别
- Redis的持久化有哪些方式,具体原理
- Redis介绍
- 了解redis源码么
- 了解redis集群么
- 如果成功的用户有10万,redis存不下怎么处理
- Redis的持久化?有哪些方式,原理是什么?
- Redis的持久化的方式和原理
- Redis和memcache 的区别
- 为什么选择redis
Linux:
- 用过什么系统?shell写过脚本吗?
- Linux了解么
- 怎么查看系统负载
- Cpu load的参数如果为4,描述一下现在系统处于什么情况
- Linux,查找磁盘上最大的文件的命令
- Linux,如何查看系统日志文件
分布式:
- 分布式了解么
- 分布式服务器会出现哪些问题
- 介绍分布式事务
排序:
- 快排的思想讲一下
- 堆排序的原理
- 讲一下稳定的排序算法和不稳定的排序算法
- 讲一下快速排序的思想
- 给个数组,模拟快排的过程
- 手写快排
高并发高负载:
- 对高负载有了解么
- 对高并发有了解么?
- 场景题:千万用户抢购,如何处理高并发,并且有一个链接,指向前一天抢购成功的用户,如何设计这个系统和数据库
- 如果后台处理抢购请求的服务器,每次最多承受200的负载,系统该怎么设计
- 一千万用户并发抢购,怎么设计
- 为什么负载均衡
- 怎么实现负载均衡
- 如何解决并发访问的错误
网络编程:
- 介绍网络编程
- Nio和IO有什么区别
- Nio和aio的区别
- Nio的原理
- Tcp怎么保证可靠传输(中间穿插了好多小问题)
- Tcp的拥塞控制
- 让你设计一个即时聊天的系统
- 解释一下长连接
- 支付宝转账,是如何实现,几个小时通知转账成功的(面试官想让回答长连接,答主一直没get到点)
- 反爬虫的机制,有哪些方式
- 手写java的soeket编程,服务端和客户端
- 进程间的通信方式
- 场景题:设计一个系统,解决抢购时所需要的大量的短链接的功能,如何保证高并发,如何设计短链接
- 设计题:设计一个系统,记录qq用户前一天的登录状态,提供16g内存和2tb的硬盘,要做到查询指定qq号的前一天的登录状态,快速查询O(1)复杂度
- http请求流程
其他:
- 数据连接池
- 场景题:设计判断论文抄袭的系统
- object类你知道的方法
- Forward和redirect的区别
- 消息队列了解么
- 介绍多态
- Finalize的作用和使用场景
- Java的finalize,finally,final三个关键字的区别和应用场景
- String类可以被继承么
- Channel和buffer
- directBuffer和buffer的区别
- 自己写一个tomcat服务器,你会怎么写
- 怎么解决session一致性缓存的问题
- 设计题,一个图书馆管理系统,数据库怎么设计,需求自己定
- 智力题:时针分针什么时候重合
- 场景题:设计一个下单系统,下单成功后可以给用户发优惠券
- 接上面场景题:服务器挂了,优惠券还没发怎么办
- 怎么解决缓存和主存的一致性问题
- 缓存还没更新到主存,服务器挂了怎么办