Java基础与集合
java 的基础知识点,主要围绕在集合类和多线程等:ArrayList、LinkedList、HashSet、HashpMap的数据结果,以及如何扩容、以及 ConcurrentHashMap 相关的多线程安全等。
-
Integer 和 int 有啥区别,integer 中有哪些特殊的函数?
-
讲一下一个变量从产生到结束所经历的过程,讲一下字符串常量的过程?
-
通过反射,谈到了方法区,然后类加载机制?
-
List Set Map 底层使用什么实现的?有哪些典型实现?
-
ArrayList、linkedlist、hashset区别。ArrayList 是否会越界?hashset 存的数是有序的?
-
HashMap 实现原理,ConcurrentHashMap 实现原理,Hashtable 区别,在性能上的区别?以及这种差异形成的原因,以及各自优劣势
-
HashMap 中的 get()方法是如何实现的?
-
HashMap 可以用在哪些场景?
-
HashMap 扩容是怎么扩容的,为什么是 2 的幂次?
-
concurrenthashmap 为什么线程安全,采用了什么措施应对高并发
-
红黑树,为什么允许局部不平衡?
-
hashmap 和 concurrenthashmap 的 size 方法怎么实现的?
-
jdk1.8 concurrenthashmap 的新的特性,有没有看过源码?
-
说一下 hashcode 的作用?
-
你重写过 hashcode 和 equals 么,要注意什么
-
假设现在一个学生类,有学号和姓名,我现在 hashcode 方法重写的时候,只将学号参与计算,会出现什么情况?往 set 里面 put 一个学生对象,然后将这个学生对象的学号改了,再 put 进去,可以放进set 么?并讲出为什么
-
object 类你知道的?
-
Nio 和 IO 有什么区别
-
BIO、NIO(如何实现的)、AIO
JUC、多线程、并发
状态流转、多线程的实现,以及与高并发的区别等。
-
volatile、synchronized、lock 的区别?
-
synchronized 的实现原理?Volatile 能保证原子性吗?为什么?
-
synchronized 和锁的区别,什么情况下使用 synchronized 和 ReentrantLock
-
reentrantlock的实现
-
ThreadLocal 了解吗?
-
什么情况下使用 Runnable 和 Thread 创建线程,Runnable 和 Callable 的区别?
-
线程的五态?转化过程?
-
线程方法中的异常如何处理,副线程可以捕获到吗?
-
多线程下Java 线程间怎么实现同步,notify()与 notifyAll()的区别?
-
多线程状态图,状态如何流转?
-
如何实现线程调度算法?
-
有哪几种常用的线程池?对应的好处,如何用?
-
线程池优点,参数,如果我想实现 newSingleThreadPoll,应该怎么配置,构造方法传什么参数?
-
线程池的参数,每个参数解释一遍,然后面试官设置了每个参数,给了个线程,让描述出完整的线程池执行的流程?
-
线程池的设计
-
线程池如何做负载均衡
-
线程池的参数有什么意义
-
变着法的问了一大堆线程池的知识(主要考对应的参数)
-
多线程和高并发有什么区别?
-
高并发下有哪些常用的技术解决方案,举三个高并发场景设计例子
-
线程安全(阻塞同步,非阻塞同步,无同步)
-
讲一下线程安全问题产生的原因?
-
高并发情况下,我们系统是如何支撑大量的请求的?
-
高并发情况,系统的优化方案有哪些,以及优先级排序?
数据库
数据库端的优化方案(需要提前了解)。
-
MySQL 事务是什么?四大特性,四大隔离级别
-
讲一下数据库的隔离等级
-
讲一下数据的 ACID,什么是一致性,什么是隔离性?
-
ACID CAP BASE 理论
-
Mysql 的隔离级别,每个隔离级别是如何解决
-
Mysql 要加上 nextkey 锁,语句该怎么写?
-
说一下 MVCC
-
MySQL 与 MongoDB 的区别,海量数据的存储
-
mysql 用的什么存储引擎,这个存储引擎用的什么数据结构 ,有哪些优缺点,怎么使用?
-
数据库引擎 Innodb 和 myisam 区别
-
死锁,死锁原因
-
页锁、乐观锁、悲观锁?
-
mysql 死锁,怎么解决,如果不要求执行顺序,死锁怎么解决?
-
乐观锁如何保证线程安全?
-
数据库的悲观锁和乐观锁应用场景
-
讲一下乐观锁和悲观锁?
-
乐观锁是怎么保证一致性的?
-
脏读和幻读是什么?一个表一千个列值为 true 和 false,写 sql 查询 有 300 个列值为 true 的行。
-
MySQL 的索引
-
SQL 优化,常用的索引?
-
复合索引是如何实现的?
-
说一聚簇索引和非聚簇索引的有什么不同
-
聚集索引和非聚集索引的区别?
-
数据库索引 主键和唯一索引有什么区别
-
索引失效条件,什么时候该建立索引?
-
实践中如何优化 MySQL:SQL 语句及索引的优化、数据库表结构的优化、系统配置的优化、硬件的优化
-
SQL 慢查询的优化方案,索引和表的优化方案
-
数据库性能调优如何做,数据库端的常用优化策略?
-
数据库分库分表需要怎样来实现?
-
分库分表和读写分离如何设计
缓存
作为分布式缓存的主力,基本也是 BAT 每次必考,重点是 Redis 的数据结构、内存、 算法、持久化,以及与别的缓存 memcached 的优劣势。
- Redis,持久化框架
- Redis 的数据结构
- Redis 是基于内存的么
- Redis 的 list zset 的底层实现
- Redis:作为分布式缓存的主力,基本也是 BAT 每次必考,重点是 Redis 的数据结构、内存、 算法、持久化,以及与别的缓存 memcached 的优劣势;
- 缓存框架,例如 Redis、Memcached 之间的区别,优劣势比较
- 问了 redis 的一些问题,项目中有(扩容,失效 key 清理策略等)
- 常用 NOSQL,有做过比较?
- 什么情况会出现雪崩,以及如何应对?
- 负载均衡的原理
- Redis 的持久化?有哪些方式,原理是什么?
框架
Spring 框架问得是最多的,BAT 非常喜欢问,重点掌握
- spring IOC的原理,没有无参构造函数能实例化吗?有参构造函数注入?(xml 配置)autowired 如何实现?
- AOP 实现原理:动态代理
- IOC AOP各有什么优点?
- Spring 的 aop 有哪些实现方式
- 动态代理的实现方式和区别
- Spring 的 bean 的作用域?(比如:singleton,prototype 等)
- spring 当中事物的隔离级别
- Springmvc 请求流程
- Spring boot
设计模式
- 常用的设计模式介绍:单例模式、装饰者模式等
- 手写单例
微服务
- 消息中间件有哪些?他们之间的优劣势?
- 微服务和 SOA 的区别,优劣势?
- SpringClound 的基本架构设计
- Dubbo 和 SpringClound 的区别在哪里,优劣势?
- dubbo 和 springcloud 的区别,以及各自对应的使用场景?
- RPC 过程
- 微服务架构是什么,它的优缺点?
- 服务注册中心宕机了怎么办?
- 微服务还有其他什么组件
- 分布式架构与微服务的关系
分布式
常用的分布式架构设计方案:单点登录、分布式缓存、存储、消息的选型。最好能提前了解深入一个类似秒杀这样的项目,如果面试官问到类似的项目,你能把设计思路讲出来,这对你的面试结果是很大的加分项
- 分布式 session 的共享方案有哪些,有什么优劣势?
- 分布式架构设计哪方面比较熟悉?
- 讲讲你对 CDN 的了解,与分布式缓存和本地缓存的区别?
- 负载均衡有接触过哪些开源框架,优劣势是什么?
- 如果让你来设计秒杀系统,你的设计思路是什么,为什么要这样设计?
- 主要高并发和分布式架构设计
- 如何设计单点登录,单点登录的原理
- 大型高并发网站如何做性能优化:Web 性能、数据库性能、应用服务器性能等。
- 分布式系统原理:CAP,最终一致性,幂等操作等
- 集群如何同步会话状态
网络
TCP 的三次握手等网络都必问,重点掌握网络协议
- TCP,UDP 区别,为什么可靠和不可靠
- 一次 HTTP 请求的全过程,包括域名解析、定位主机等
- TCP 三次握手
- http 和 https 的区别,tcp 握手过程
- TCP 三次握手,为什么三次握手?
- 网络方面有 osi 七层,tcp/ip 五层,分别有哪些协议及作用
- tcp 的流量控制和拥塞控制
JVM
- java 内存模型
- JVM 的内存分配、几个常见的垃圾回收算法以及原理、还有对应的 JVM 优化参数需要牢记。
- 介绍你实践的性能优化案例,以及你的优化思路
- JVM 垃圾回收算法手写冒泡
- 讲一下 GC?
- 说一个你对 JVM 优化的实际案例,包括实际步骤和方法
- OOM 内存泄漏,什么情况下会出现,如何排查
- JVM 的调优参数?(-Xmn,-Xms 等具体参数设置)
- JVM 内存分区?(主存,工作内存,堆,栈。。。。)
- 为什么要用老年代和新生代?
- 新生代进入老生代的情况?
- 新生代的分区?
- 讲一下 JVM
- 讲一下 JVM 的分代回收以及具体算法
- 讲一下 JVM 的垃圾收集器,G1 和 CMS 有啥区别?
- JVM 的垃圾回收机制和垃圾收集器
- JVM,垃圾回收机制,内存划分等
- jvm 性能调优都做了什么?
- Java 的内存模型,垃圾回收
数据结构&算法
- 说说一致性 Hash 算法
- 垃圾回收算法
- 排序算法的复杂度,快速排序非递归实现
- 栈和队列
- 海量数据过滤,黑名单过滤一个 url?
- B+树和 B-树的区别?
- 讲一下堆以及堆排序
- 说一下 B+tree 和二叉搜索树的区别?说一下二叉搜索树和 AVL 树、红黑树之间的差别
- 给你两个文件(字符串形式的)如何找出他们之间的不同地方?
- 你刚刚说的能怎么优化?
- 给你 50 亿行字符串,机器 4G 内存(只能一台机器),找出重复次数最多的那行字符串?(以行为单位,每行不超过 10 个字符)
- 设计一个算法,实现两个 10g 大文件在 10m 的内存中将两个大文件中重复的放进第三个文件
- 快速排序的平均复杂多少?最坏情况是什么?
- 两个 10G 的文件,里面是一些 url,内存只有 1G,如何将这两个文件合并,找到相同的 url?
- 1000 个多并发线程,10 台机器,每台机器 4 核的,设计线程池大小。
- 代码题:两个有序数组,数组中存在重复数字,合并成一个有序数组,去除重复数字
- 讲一下稳定的排序算法和不稳定的排序算法
- 讲一下快速排序的思想
- Leeetcode 原题 22,Generate Parentheses,给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果
CI/CD
- Docker 有使用过和了解吗?Docker 和 JVM 的区别是什么?
- Docker 的基本架构和使用场景
- Linux怎么查看系统负载?
- Cpu load 的参数如果为 4,描述一下现在系统处于什么情况
- Linux,查找磁盘上最大的文件的命令
- Linux,如何查看系统日志文件
面试流程问题
- 自我介绍
- 谈一个你觉得你学到最多的项目,使用了什么技术,挑战在哪里?
- 项目介绍?
- 项目参与的核心设计有哪些?
- 遇到的最大困难是什么?怎么解决的?
- 你觉得你能怎么优化这个项目?
- 自我介绍
- 项目介绍
- 怎么管理项目成员
- 当意见不一致时,如何沟通并说服开发成员,并举个例子
- 怎么保证项目的进度
- 个人的职业规划是什么
- 你遇到的最大问题或者是困难是什么
- 你如何看待阿里
- 你能为阿里带来什么
- 你的优缺点是什么
面试总结:
- 技术基础必须扎实:算法、数据结构、操作系统等,蚂蚁金服面试对技术的基础非常重视, 基础扎实的同学有利于在前两轮突出重围。
- 技术宽度:主要集中在高并发、多线程、分布式架构,大以及常用中间件(缓存等)的选型 和比较。
- 技术原理深入:重点还是提前准备好 JVM、多线程高并发这块。
- 参与的项目总结:你需要清楚你所做项目的关键细节、优化、特点、原理。
- 很多所用第三方库&中间件等的原理,即使你不知道,也要有自己的想法能够说出如何代 替实现,比如单点登录的替代方案。
- 最好,提前准备一个大数据访问,比如 pv 扩大 1000 倍,你的架构或者技术方案应对措施。
- 最后,千万不要倒在 HR 面试环节,避重就轻是重点,特别是优点和缺点,如果问到你的 规划是什么,请记得一定告诉 HR 你想成为一名优秀的技术。