第一篇
1.自我介绍
2.博客一般都是写关于哪种技术的?博客上的东西都经过验证吗?
3.MySQL怎么防注入的?
4.MySQL事务有了解吗?
5.MySQL分库分表有了解吗?这里讨论了好久,给我说了个场景,怎么解决
6.MySQL查询语句优化
7.MySQL聚簇索引 非聚簇索引
8.Redis常用数据结构?底层结构?
9.Lua脚本有了解吗?
10.Redis 原子性怎么保证的?
11.Redis超时策略
12.Redis持久化
13.AOF持久:如果线上主Redis宕机了,从Redis会替代,这时候如果主节点又恢复了,会不会丢失命令?
14.如果主Redis存命令的时候,没有发给从Redis,那么他会不会干哈干啥,这里没听懂
15.说一下SpringIOC/AOP
16.JDK动态代理/CGlib
17.如果用JDK动态代理,把一个类定义为final,还能用AOP吗?
18.Spring循环依赖
19.SpringMVC
20.下层的业务一直抛异常,没拦截,怎么处理?
21.你们之前做项目异常怎么处理的?
22.那接下来咱聊Java基础吧,ArrayList循环中修改发生的问题?有没有看过源码?
23.HashMap是线程安全的吗,加上synchronized是安全的吗?
24.ThreadLocal有了解吗?
25.线程池有了解吗?
26.新建线程的方式?
27.乐观锁/悲观锁?
28.MySQL中用过乐观锁/悲观锁吗?
29.避免行锁怎么实现?又列举了一个场景题,抢课怎么解决?
30.垃圾回收算法?标记清除和复制算法区别?
31.设计模式有了解吗?说一个自己熟悉的?
32.voliate能保证写的安全吗?又说了一个场景
第二篇
京东一面:
自我介绍,交流项目细节
jvm:内存区域介绍及发生OOM的情况,GC过程,描述调优过程
多线程:synchronized和lock,sleep和wait,线程池种类和工作流程(重点讲new***d线程池)
框架: IOC,AOP,SpringMVC流程,事务怎么配置
数据库:innodb和myisam区别,B+树性质,多列索引及最左前缀原则和其他使用场景。
算法:手写快排
京东二面:
自我介绍,项目
jvm:full gc,内存泄漏,CMS收集器
框架:Bean的生命周期,mybatis和hibernate对比
多线程:线程池工作原理
NIO:NIO和BIO的比较,对netty的了解
Linux:常见命令ls,top,lsof,ps,grep等,vim快捷键
HR面
自我介绍,对京东的了解,有没有其他offer,你会选择哪个,有没有毕业留京的打算,亦庄比较远能不能适应。
总结:一面二面都是半小时左右,估计是人太多才这么赶,问题也比较简单直接,没有刁难性的问题。
美团一面:
项目
1.运行时异常及处理方法,抽象类和接口的区别,HashMap的put方法源码,2.ArrayList,LinkedList的实现以及插入,查找,删除的过程
3.TCP和UDP区别,三次握手,TIME_WAIT状态
4.jvm内存区域和GC,finalize方法,哪些对象可以作为GC Root
5.NIO的DirectByteBuffer和HeapByteBuffer,同步和异步,阻塞和非阻塞
6.写大数加法代码
7.Spring IOC,AOP,项目中怎么体现的,RestFul API的理解,框架源码中用到的设计模式
8.数据库的完整性约束,事务隔离级别,写一个SQL语句,索引的最左前缀原则
美团二面:
自我介绍,项目
1.数据库:两种存储引擎在索引以及锁机制上的实现方式的区别,limit offset优化,B+树及其查找过程,redis了解程度
2.GC,jvm调优,如果我自己定义一个String类会怎么样(双亲委派机制)
3.NIO和BIO的比较
4.ReentrantLock源码,AQS,synchronized实现,乐观锁和悲观锁,volatile,ThreadLocal原理,线程池工作流程
5.HashMap和ConcurrentHashMap基本原理,扩容机制等
6.描述一下知道的设计模式,装饰者模式和***模式的区别
7.jdk动态***和CGLIB***
8.海量URL数据,低内存情况下找重复次数最高的那一个
HR面:
电话面,实习时间,口头offer
总结:都是一个多小时,面试官对项目细节问得较多,考察基础和重点概念的源码,大部分是常见的问题。
第三篇
Java基础相关
- final关键字在方法上,类上,变量上的作用。什么类是final的(String,Integer等包装类),为什么。
- static关键字的作用,修饰方法,类,代码块,变量的区别
- Integer自动拆箱装箱(可能和字面量类型一块考,比如包装类的对象和字面量相加有几次拆箱装箱)
- String不可变的好处
- 继承和多态,重载和重写(概念,特点,区别),以及final,private,static关键字在这四个中会起到什么影响(如final的类不能继承,final的方法不存在重写等等)
- 了解什么设计模式,项目中使用了什么设计模式,详细介绍单例,手写单例(多次遇到!)
- 浅克隆深克隆
- 异常的种类
- 反射获取类的方法有哪些,反射优缺点
- 基类有哪些方法
- equals和==和哈希
- BIO、NIO和AIO
集合相关
- 介绍集合常用接口和类(List,Map,Set,Queue等等)(超多次遇到!)
- 详细介绍HashMap(超多次遇到!),特点(1.7和1.8区别,数组和桶,桶的数量和为什么2^n个,链表和红黑树,扩容机制等等),线程安全问题(头插法的问题,尾插法等等)
- HashMap和HashTable区别(安全性,扩容,遗留类等等)
- 想实现使用集合线程安全怎么办(线程安全的类,Collections.sychrolizedXXX方法,加锁等等)
- ConcurrentHashMap特点,1.7和1.8区别,是否一定线程安全(否)
- Set,Map,List区别
- Vector,ArrayList,LinkedList区别,优缺点,何时使用(如增添多时,需要随机访问,需要线程安全等)
- CopyOnWriteArrayList特点
多线程并发
- Synchronized和Lock区别(由什么支持,中断性,公平性,锁住的东西,释放等等)和底层实现(monitor机制,CAS和volatile)(超多次遇到!)
- volatile原理,修饰了volatile发生了什么(多次遇到!)
- CAS原理和问题以及解决办法(多次遇到!)
- Synchronized在不同位置使用的区别(方法上,代码块上,和static同时,锁住类等等)
- wait和sleep和yield
- wait和await
- Executor的submit和execute区别
- 4大类Executor
- ThreadPoolExecutor的各个参数和不同种类
- 使用过什么AQS里的,介绍一下
- Thread和Runnable
JVM虚拟机
- 虚拟机结构(堆栈那些)和1.6、1.7、1.8老年代的区别(超多次遇到!)
- 对象四种引用类型和ThreadLocal
- 垃圾回收器和工作原理(主要的那7种)(每种使用的回收算法,作用域,区别,特点等等)
- 垃圾回收算法的原理
- 类加载过程和机制(可能在原理的基础上,结合实际的例子考察,如各种地方加了各种修饰符后new一个子类或者父类输出什么)
- 对象死亡的条件
- OOM发生的位置和解决办法
- JVM调优(很少出现)
- 一般GC ROOTs有哪些
- full gc触发条件
操作系统
- 死锁的条件,预防,检测回复,避免的方法,银行家算法
- 并发和并行
- 线程和进程和协程
- 虚拟内存(为什么要有虚拟内存,段,页,段页区别,页表页框)
- 页面置换算法
- 线程间通信和进程间通信
计网
- tcp和udp区别
- 三次握手四次挥手
- 根据你学的网络模型说一下有哪些层(5层,7层,我是基于5层说的),每层有什么代表性协议
- http和https区别,https加密方法
- http的首部
- 打开网页过程中发生了什么,使用了哪些协议
数据库
- ACID
- MVCC和隔离级别
- InnoDB和MyISAM
- Redis相关,速成可以借鉴
https://baijiahao.baidu.com/s?id=1660009541007805174&wfr=spider&for=pc
5. 具体的一些使用,可能给题写代码
6. 索引的各种类型,好处,什么时候使用什么样的索引
7. B+树
其他
- 各种排序算法的复杂度,稳定性
- IOC和AOP
- 红黑树
- 大顶堆小顶堆
5.大数据相关问题,可以借鉴
https://blog.csdn.net/wypersist/article/details/80114709
手写算法
-
二叉树的前中后遍历,递归迭代两种方式
-
单例的实现
-
链表相交节点
-
翻转链表
-
删除链表倒数第N个节点
-
青蛙每次跳3,4,5格,到最终目的地有几种跳法(跳超了也算),能不能跳到目的地(只能刚好跳到),最短跳几次
-
两个字符串的最长相同子串
-
生产者消费者
-
sql的,场景好像是找到每个部门工资最高的员工,打印员工名,部门名,部门id,薪水(数据在两张表上)
-
字符串形式大数相乘
-
两个栈实现队列,两个队列实现栈
-
几道动态规划和DFS,BFS大概medium的题,忘了具体题目,给场景的,类似股票问题和岛屿问题那样
-
LRU缓存
-
类似N皇后的问题,但是棋盘上已经有棋子了,判断是否会攻击,不会攻击输出所有的放棋子方式
-
一些常规easy题,时间太久记不得了,大概整数翻转合并链表这个难度
项目相关,因人而异
-
简单介绍
-
深入挖掘兴趣点
-
最大困难,怎么克服
-
最大亮点
-
使用设计模式了吗?为什么?
-
改进空间
总结
简历上写到的一定要会,都会问到,这次没问下次也跑不了。
是在遇到不会的,实话实说,谁还没点不会的东西,当然结果如何还是看考官心情,但我个人觉得诚实比硬挺或者瞎编好,毕竟问你的知识人家肯定很了解。
技术面的问题一般都比较基础,突击可以看看git上的cyc2018,真的不错,方向清晰。
算法方面,剑指是真的得会,剩下随缘刷吧,个人感觉动态规划比较多,同时多线程,sql也得会写。
hr面别怕,正常发挥就行,展现真实自己(当然只展现好的一面)。
第四篇
基础:
看你用了redis,你能说说redis的常用命令吗?(这波我没想到,答的很一般)
SpringIOC是什么?你怎么理解的?
Autowired和Resource区别?
介绍一下工厂模式?
Spring与工厂模式?
单例模式说一下?
口述DCL?为什么使用DCL?
linux命令了解吗?(只了解几个)
创建线程的方式?
平时用到的集合类?
HashMap底层说一下?红黑树解决了什么问题?
数组和ArrayList说一下?
HashSet和ArrayList说一下?
算法:
组合总和,追问排序和乱序对效率的影响
生活:
平时看什么书?学了什么新技术?
怎么学习的?
实习时间与到岗时间?
你说的六个月,你上课怎么办?
你们工作室是干啥的?