JAVA面试题
每年的3,4月份都有一波离职风潮,但是对于许多工作一两年的同学,头一次跳槽没有多少经验,对是市场上公司面试/笔试范围不清楚,所以小弟将找工作中遇到的笔试范围以及一些让人头疼的面试题梳理出来,大家完全可以按照该范围进行复习。其中有一些本人精选的优质作者的博客链接也挂在下面。如有遗漏,烦请大家指出。
JAVA基础
一:java8种基本类型,几位,默认值,以及他们的引用类型
种类 | 字节数(每个字节8位) | 默认值 | 引用类型 |
---|---|---|---|
byte | 1 / 8位 | 0 | Byte |
short | 2 / 16位 | 0 | Short |
int | 4 / 32位 | 0 | Integer |
long | 8 / 64位 | 0L | Long |
float | 4 / 32位 | 0.0f | Float |
double | 8 / 64位 | 0.0d | Double |
char | 2 / 16位 | ‘u0000’ | Character |
boolean | 这个特殊只有1位 | false | Boolean |
ps: 遇到两个有趣的题:
1:int a = 100;
Integer b = 100;
问 a == b 是否返回true。答案是true; 详情请参考:https://blog.csdn.net/xingkongdeasi/article/details/79618421
2:0.1*2 = 0.2这个等式是否成了?答案是不成立。详情请参考:https://blog.csdn.net/qq_40805231/article/details/99551454
没必要深看,只要知道在java中0.1是个四舍五入的值,实际上是0.100000002,它乘以2会得到0.200000004,四舍五入之后虽然是0.2,但是上面这个等式不成立。
二:String
基本上都问String a = new String(“hello world”),创建了几个对象?
String,Stringbuffer,Stringbuilder的区别,请参考https://www.cnblogs.com/kingofjava/p/10761653.html
常用的String的API函数说五六个就可以,如substring之类的。
为什么String要设置成不可变?https://www.cnblogs.com/AmyZheng/p/10594339.html
三:面向对象
JAVA的特性:封装,继承,抽象,多态。可以参考这个:https://www.cnblogs.com/houqx/p/10223739.html
JAVA修饰符:https://www.runoob.com/java/java-modifier-types.html
还有一些关键字使用场景:synchronized,volatile
对象序列化,反射机制,创建对象有几种方式(new,序列化,克隆,反射)
接口和的区别(interface和abstract class)
四:jvm(绝大多数会问)
jvm内存模型(总共五块,每一块作用),GC,CMS,G1,线上故障分析。https://baijiahao.baidu.com/s?id=1632503816780923946&wfr=spider&for=pc
堆和栈区别
类的加载过程(可能会问到双亲委派知识点)
五:常用的数据结构(重要,重要,重要)
只需要看下List(ArrayList,LinkList),Set,HashMap,Hashtable,尤其主意他们之间的差别。
面试题:说一下ArrayList,LinkList,Set的异同?
说一下HashMap底层结构(数组+链表+红黑树),存放对象的过程(一定要讲扩 容机制)。
HashMap和HashTable的区别。
遍历这些数据结构的方式(普通for循环,foreach,迭代器,stream流),这个百度
六:算法(不排除让你手写)
冒泡排序,选择排序,插入排序,递归(斐波拉契数列,遍历文件夹)。
七:多线程
线程的几种状态,以及各个状态可以用那种方法进行切换。请参考https://www.jianshu.com/p/979ba2f919e3
创建线程的方式(4种)https://blog.csdn.net/weixin_41891854/article/details/81265772
一些方法:start()和run()区别,notify()和notifyAll()区别
为什么wait(),notify()要放到synchronized代码块里
八:异常
常见异常有哪些:空指针,ClassNotFound,数组下标越界,IO异常等
RuntimeException和error区别:https://blog.csdn.net/qq_29229567/article/details/80773970
关键字try,catch,throws,throw.
九:常用设计模式
单例模式
模板模式
观察者模式
策略模式
工厂模式
十:IO类型
BIO,NIO,AIO的区别
字节流,字符流操作(多出现在笔试题,文件拷贝之类)
数据库
一:基本知识
数据库三范式。
数据库字段类型,适合存放什么类型数据。
分页查询(mysql和oracle分页不一样)。
DDL和DML区别
视图和表区别
二:事务隔离级别(mysql有四种,oracle有两种)
mysql:读未提交,读已提交,可重复读(默认隔离级别),串行读
oracle:读已提交(默认隔离级别),串行读。
我们支付中心和清分中心现在默认使用数据库隔离级别(oracle的读已提交),还要注意一下代码中事务的传播性。
注意各个隔离级别对脏读,幻读,重复读的限制。
三:索引(重要,重要,重要)
有哪几种索引?注意他们的不同点(那些索引会触发回表操作)
什么时候会导致索引失效?
联合索引(三个字段组成,A,B,C),查询顺序那些会导致索引断开。
如何合理的建立索引
四:分析sql执行
一般这一步都是问数据库优化,可以从sql语句格式,有没有使用索引这两个方面回答。
五:分库分表(多次被问到)
垂直拆分,水平拆分。数据量大数据库怎么设计
分布式系统
一:基础知识
spring,spring boot,spring cloud的区别。
常用的微服务组件:网关(zuul),注册中心(eureka),负载均衡(Ribbon),实例调用(FeignClient),熔断(Hystrix),请参考:https://www.cnblogs.com/findbetterme/p/11195011.html
有可能问到zookeeper和dubbo
常用注解,有时会问RestController和Controller区别
两个系统之间调用:我们用的feignClient调用,有空的话可以看下RPC框架
二:mybaits
mybaits和hibernate的区别
$和#的区别
mybaits的执行过程
三:rabbitmq
在项目中那些地方用到rabbitmq
rabbitmq的作用(异步,解耦,消峰),到时候举些例子。
rabbitmq的使用(主要是交换机这一块)可以参考:https://www.sohu.com/a/327119472_418879
怎样保证数据不丢失:生产者开始事务,rabbitmq开启持久化,消费者手动应答。有时会问道如果两个系统 数据不一致怎么处理。
如果rabbitmq有大量消息积压怎么处理:https://blog.csdn.net/u013231917/article/details/100103321
四:redis
redis基本数据类型(String,list,hashmap,set,zset)和各自应用场景
系统中有哪些地方用到了redis(订单缓存,分布式锁,分布式锁下等幂处理)
redis集群部署方案(主从复制,哨兵,Cluster):https://www.cnblogs.com/51life/p/10233340.html
redis缓存雪崩,缓存穿透,缓存预热。https://blog.csdn.net/deoppressoliber/article/details/98773492
如何保持redis和数据库中数据一致:https://blog.csdn.net/gly1256288307/article/details/88739612