“金三银四、金九银十” 想必程序员应该都很熟悉吧,希望能帮助到你面试前的复习且找到一个好的工作,也节省你在网上搜索资料的时间来学习。
特此,整理了一份Java面试题手册:基础知识、JavaOOP、Java集合/泛型面试题、Java异常面试题、Java中的IO与NIO面试题、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、SpringBoot、SpringCloud、RabbitMQ、Dubbo、MyBatis、ZooKeeper、数据结构、算法、Elasticsearch、Kafka、微服务、Linux等等。【持续更新中】
序号 | 内容 | 地址链接 |
1 | 【2022最新版】Java基础面试题总结 | |
2 | 【2022最新版】多线程&并发面试题总结 | |
3 | 【2022最新版】JVM面试题总结 | |
4 | 【2022最新版】Mysql面试题总结 | |
5 | 【2022最新版】Redis面试题总结 | |
6 | 【2022最新版】Memcached面试题总结 | |
7 | 【2022最新版】MongoDB面试题总结 | |
8 | 【2022最新版】Spring面试题总结 | |
9 | 【2022最新版】Spring Boot面试题总结 | |
10 | 【2022最新版】Spring Cloud面试题总结 | |
11 | 【2022最新版】RabbitMQ面试题总结 | |
12 | 【2022最新版】Dubbo面试题总结 | |
13 | 【2022最新版】MyBatis面试题总结 | |
14 | 【2022最新版】ZooKeeper面试题总结 | |
15 | 【2022最新版】数据结构面试题总结 | |
16 | 【2022最新版】算法面试题总结 | |
17 | 【2022最新版】Elasticsearch面试题总结 | |
18 | 【2022最新版】Kafka面试题总结 | |
19 | 【2022最新版】微服务面试题总结 | |
20 | 【2022最新版】Linux面试题总结 |
答:
答:instanceof严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:
boolean result = obj instanceof Class其中obj为一个对象,Class表示一个类或者一个接口,当obj为Class的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result都返回true,否则返回false。
注意:编译器会检查obj是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。
inti=0; System.out.println(i instanceof Integer);//编译不通过i必须是引用类型,不能是基本类型 System.out.println(i instanceof Object);//编译不通过 Integer integer=newInteger(1); System.out.println(integer instanceof Integer);//true //false,在JavaSE规范中对instanceof运算符的规定就是:如果obj为null,那么将返回false。 System.out.println(nullinstanceofObject);答:
Integer i = new Integer(10);而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:
Integer i = 10;面试题1: 以下代码会输出什么?
public class Main { public static void main(String[] args) { Integer i1 = 100; Integer i2 = 100; Integer i3 = 200; Integer i4 = 200; System.out.println(i1==i2); System.out.println(i3==i4); } }结果:
true false答:
类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公 开(public),对于不是同一个包中的其他类相当于私有(private)。受保护 (protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私 有。
Java 中,外部类的修饰符只能是public或默认,类的成员(包括内部类)的 修饰符可以是以上四种。
答:
静态实例化:创建数组的时候已经指定数组中的元素。
int [] a= new int[]{ 1 , 3 , 3}动态实例化:实例化数组的时候,只指定了数组程度,数组中所有元素都是数组类型的默认值
答:
final也是很多面试喜欢问的地方,但我觉得这个问题很无聊,通常能回答下以下5点就不错了:
除此之外,编译器对fifinal域要遵守的两个重排序规则更好:
在构造函数内对一个fifinal域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。
初次读一个包含fifinal域的对象的引用,与随后初次读这个fifinal域,这两个操作之间不能重排序。
答:
charAt:返回指定索引处的字符
indexOf():返回指定字符的索引
replace():字符串替换
trim():去除字符串两端空白
split():分割字符串,返回一个分割后的字符串数组
getBytes():返回字符串的byte类型数组
length():返回字符串长度
toLowerCase():将字符串转成小写字母
toUpperCase():将字符串转成大写字符
substring():截取字符串
format():格式化字符串
equals():字符串比较
答:
强引用
强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收,使用方式:
String str = new String("str");软引用
软引用在程序内存不足时,会被回收,使用方式:
// 注意:wrf这个引用也是强引用,它是指向SoftReference这个对象的, // 这里的软引用指的是指向new String("str")的引用,也就是SoftReference类中T SoftReference wrf = new SoftReference(new String("str")); 可用场景:创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。
弱引用
弱引用就是只要JVM垃圾回收器发现了它,就会将之回收,使用方式:
WeakReferencewrf=newWeakReference(str); 可用场景:Java源码中的java.util.WeakHashMap中的key就是使用弱引用,我的理解就是,一旦我不需要某个引用,JVM会自动帮我处理它,这样我就不需要做其它操作。
虚引用
虚引用的回收机制跟弱引用差不多,但是它被回收之前,会被放入ReferenceQueue中。注意哦,其它引用是被JVM回收后才被传入ReferenceQueue中的。由于这个机制,所以虚引用大多被用于引用销毁前的处理工作。还有就是,虚引用创建的时候,必须带有ReferenceQueue,使用
例子:
PhantomReferenceprf=newPhantomReference(new String("str"),newReferenceQueue<>()); 可用场景: 对象销毁前的一些操作,比如说资源释放等。** Object.finalize() 虽然也可以做这类动作,但是这个方式即不安全又低效上诉所说的几类引用,都是指对象本身的引用,而不是指 Reference 的四个子类的引用( SoftReference 等)。
答:
定义在类内部的非静态类,就是成员内部类。成员内部类不能定义静态方法和变量(final修饰的除外)。这是因为成员内部类是非静态的,类初始化的时候先初始化静态成员,如果允许成员内部类定义静态变量,那么成员内部类的静态变量初始化顺序是有歧义的。实例:
public class Out { private static int a; private int b; public class Inner { public void print() { System.out.println(a); System.out.println(b); } } }答:
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化,其语法看起来挺诡异的,如下所示:* 扑克类(一副扑克) * @author 骆昊 */public class Poker { private static String[] suites = {"黑桃", "红桃", "草花", "方块"}; private static int[] faces = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; private Card[] cards; /** * 构造器 * */ public Poker() { cards = new Card[52]; for(int i = 0; i < suites.length; i++) { for(int j = 0; j < faces.length; j++) { cards[i * 13 + j] = new Card(suites[i], faces[j]); } }* }/** * 洗牌 (随机乱序) * */ public void shuffle() { for(int i = 0, len = cards.length; i < len; i++) { int index = (int) (Math.random() * len); Card temp = cards[index]; cards[index] = cards[i]; cards[i] = temp; } }/** * 发牌 * @param index 发牌的位置 * */ public Card deal(int index) { return cards[index]; }/** * 卡片类(一张扑克) * [内部类] * @author 骆昊 * */ public class Card { private String suite; // 花色 private int face; // 点数 public Card(String suite, int face) { this.suite = suite; this.face = face; }@Override public String toString() { String faceStr = ""; switch(face) { case 1: faceStr = "A"; break; case 11: faceStr = "J"; break; case 12: faceStr = "Q"; break; case 13: faceStr = "K"; break; default: faceStr = String.valueOf(face); } return suite + faceStr; } } }//测试类 class PokerTest { public static void main(String[] args) { Poker poker = new Poker(); poker.shuffle(); // 洗牌 Poker.Card c1 = poker.deal(0); // 发第一张牌 // 对于非静态内部类 Card // 只有通过其外部类 Poker 对象才能创建 Card 对象 Poker.Card c2 = poker.new Card("红心", 1); // 自己创建一张牌 System.out.println(c1); // 洗牌后的第一张 System.out.println(c2); // 打印: 红心 A } }java真题合集pdf展示图
资料获取方式:关注小编+转发文章+私信【面试题 】获取上述资料~
重要的事情说三遍,转发+转发+转发,一定要记得转发哦!!!
上面的这些面试题都整理成了PDF文档,希望能帮助到你面试前的复习且找到一个好的工作,也节省你在网上搜索资料的时间来学习!
| 留言与评论(共有 0 条评论) “” |