Java基础
- Static方法是否能被覆盖?
- 集合不用泛 型会造成什么问题?比如List list = new ArrayList();
- Java泛型中extends和super的用法?
- I0字节流和字符流区别?
系列化
- Serializable和Externalizable区别?
- serialVersionUID不定义有什么问题?
- NIO?
- sleep()和wait()方法区别?
- 为什么等待和通知是Object类而不是Thread中声明的?
- 为什么Java中wait 方法需要在synchronized 的方法中调用? ( wait 和notify 方法之间的任何潜在竞争条件)
- 为什么Java中不支持多重继承? (钻石问题)
- 为什么Java不支持运算符重载? (清晰、避免混乱、JVM复杂性)
- 为什么String 在Java 中是不可变的? (对象池、Map键、安全性)
- 为什么char 数组比Java 中的String 更适合存储密码? ( String不变)
- 如何使用双重检查锁定在Java中创建线程安全的单例?
- synchronized和volatile ?
- 同步方法和同步代码块区别?
- Lock和synchronzied区别?
- Java中偏向锁,自旋锁,轻量级锁,和重量级锁?
- 无锁化编程的途径有哪些?
- Java线程池corePoolSize, maximuPoolSize, workQueue的含义? .
- 如何结合业务场景和机器设置合适的线程池大小?
- 同步器: Semaphore , CyclicBarrier , CountDownL atch , Exchanger ?
- Java显示锁和隐式锁区别?
- 什么是线程上下文切换? (存储和恢复CPU状态的过程,它使得线程执行能够从中断点恹复执行)
- 多线程最佳实践?
- 给线程取有意义的名字
- 避免锁定和缩小同步范围
- 多 用同步类少用wait和notify
- 多用并发集合少用同步集合
强引用,软引用,弱引用?
- 强引用:主动放,才回收
- 软引用:内存缺,可回收, Get可能为null
- 弱引用: GC被回收, Get可能为null
- HashMap实现原理?在非线程安全的情况使用HashMap会造成什么问题?
- ConcurrentHashMap原理?
- ThreadLocal ?
- 遇到过什么0OM或SOF ( StackOverflow ) ?
- ClassL oader继承关系和过程?
- JVM模型?
- final的变量不变的是引用还是对象?
- Java实现多态的机制?
- 两个对象equasl为true ,却拥有不同的hash code ?
- 深克隆和浅克隆区别?
- 数据库乐观锁和悲观锁?
- VSSL?
- Java程序性能优化?
- jstack,jstat,jmap用法?怎么使用jstack侦测机器CPU飙升的问题?
- 开发会遵循那些编码规范?
二,框架
- Spring Aop ?
- 如何在 系统启动后执行一个bean的方法?
- 如何定 制Spring中bean初始化的过程?
- 如何自定义Spring标签?
- 自定义的实例化、初始化、依赖装配、依赖检查等流程?
- Netty原理?和高性能原理?
- 逻辑架构?
- 雾拷贝
- 高效的并发编程?
- 消息队列的使用场景?
- Redis数据结构,持久化,集群和事务?
- Redis单线程为什么并发能力那么强?
- ZooKeeper使用场景?选举算法?
设计模式和原则
- 单一职责,里氏替换,依赖倒置,接口隔离,迪米特,开闭原则?
- 设计模式:模板模式,适配器,策略模式等?
- 继承和组合区别?
分布式
一致性哈希? Dubbo?框架如何扩展(微核+插件),API和SPI区别? BASE和CAP ? 分布式事务? 负载均衡技术? 如何构建--个高并发,高性能,高扩展性的系统? 如何应对类似秒杀抢红包瞬间高并发的场景?
数据库
- MySQL中myisam和innodb区别?
- MySQL的数据如何恢复到任意时间点? (全量和增量binlog ,先恢复在回放)
- MySQL数据库设计和使用准则?
- 尽量不在 DB做运算,复杂运算移到程序中
- 主键设计( INT主键自增,和B+树叶子节点顺序-致,效率最高)
- 注释,禁止存储过程,视图,触发器等
- 禁止存储大文件
- 定义为NOT NULL并提供默认值
- WHERE条件的属性上使用函数或者表达式
- 禁止负向查询,以及%开头的模糊查询
- 不要使用 IS NULL , IS NOT NULL
- UNION ALL优于UNION
- 考虑使用limitN ,少用limit M,N
- MySQL explain和profile 用法?
- MySQL复制原理和流程? ( dump , I0 , SQL线程)
- MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义?
- MySQL索引? B+树
- MySQL锁?
- gap锁, next-key锁,以及innodb的行锁是怎么实现的,以及myisam的锁是怎么实现
- Innodb的锁的策略为next-key锁,即ecord lock+gap lock。是通过在index.上加lock实现的,index 为uniqueindex ,降级为record lock,如普通index ,则为next-key lock ,如没有index , 则直接锁住全表。myisam 直接
- 使用全表扫描
- 如何应对数据库的瓶颈?
- 如何水平,垂直拆分?
- 数据库优化? ( 设计和查询优化)
- 分布式中间件?
代码题目
- 给你一个日期,得出日期在当年的第几天?
- 给定- -个数,判断是不是回文数?
- 用Java实现快速排序?
- 用 Java实现线程安全的任务生产者和消费者模式队列?
- 画出模板方法,策略模式,装饰者模式类图?
- 下面输出什么?
inta= 1;
Integer b = new Integer(1);
System.out.printin(a == b);
V执行SubClass中main方法,输出什么?(父类静态代码块~>子类静态代码块~>父类普通代码块>父类构造方法~>子类代码块~>子类构造方法)
public class Parent {
public Parent() {
System.outprintn("Parent A");
}
{
System.out.printn("Parent B");
}
static {
System.out.printIn("Parent C");
}
}
public class SubClass extends Parent {
public SubClass() {
System.out.printin("SubClass A");
}
System.out.println("SubClass B");
}
static {
System.out.println("SubClass C");
}
public static void main(StringD args) {
new SubClass();
}
最终userList包含哪些元素?
List<String> userList = Lists.newArrayL it("tom", "iack", "illy); .
for (String user : userList) {
If (user.startsWith("4')) {
userList.remove(user);
}
}
- String usermame = new String("tom");产生几个对象?
- 用Java写一个死锁代码?如何避免死锁
开放性题目
- 我们行业未来3到5 年会有什么挑战和机遇?
- 你的学习能力如何?最近在学习什么新东西?如何学习?看过什么书?
- 做过最有成就感的事情是什么?遇到最大的挫折和问题是什么?你是怎么应对和解决挫折和问题的?
- 最近看过的书有哪些?得到哪些启发呢?
- 如何判断一个数是否存在40亿个整数中?
- 一共有25匹马,有一个赛场,赛场有5个赛道,最多同时可以有5匹马-起比赛。假设每匹马速度是稳定的,
- 通过马与马之间的比赛,问最少比多少场才能知道跑得最快的5匹马?
- 你有不限量的水,还有两个罐子,容量分别是5升和3升。请精确的称量出4升水。
- 先把5升的罐子装满,然后用罐子里的水来倒满3升的罐子,此时5升罐子中还剩5-3=2升水;倒掉3升罐子里的水,然后把5升罐子里剩下的2升水倒入3升罐子,再次把5升罐子装满水, 并用它往3升罐子倒水,由于把3升罐子装满还需要1升水,因此5升罐子里的水量最终变成了5-1=4升水
关于面试面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。
需要的小伙伴,点赞、关注、转发之后,私信【面试】免费获取