JAVA面试题
1 JDK与JRE的区别是什么?它们各自有什么作用?
1 | 区别: |
2 环境变量PATH的作用是什么?
1 | Path环境变量是Windows系统的变量机制,它的作用是在系统执行某一指令时指引操作系统根据它所指示的路径在电脑中寻找该指令,告诉windows操作系统去哪里找这个命令文件,如果没有找到,则运行会报错。Java只是配置环境变量时用了一下Path变量而已。 |
3 环境变量CLASSPATH的作用是什么?
1 | CLASSPATH环境变量作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们,JVM就是通过CLASSPTH来寻找类的。 |
4 什么是JVM,其工作原理是什么样的?
1 | Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。 |
5 如何理解Java中的装箱和拆箱?
1 | 装箱就是 自动将基本数据类型转换为包装器类型。 |
6 Java中equals方法和==的区别是什么?
1 | 对于基本类型,==比较的是值; |
7 类和对象有什么区别?
1 | 1,类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为。就好像“Person(人)”这个类,它虽然可以包含很多个体,但它本身不存在于现实世界上。 |
8 Java中成员变量的特点有哪些?
1 | 成员变量处在类中方法外 |
9 Java中静态变量的特点有哪些?
1 | 静态变量用static修饰,处于成员变量的位置 |
10 Java中子类的构造函数如何为父类传递参数?
1 | 显式: 构造方法的第一行super(n..) n 个参数 |
11 this与super的区别?
1 | 1. this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成员的引用。 |
12 接口和抽象类的区别?
1 | 接口是行为的抽象,是一种行为的规范,接口是like a 的关系;抽象是对类的抽象,是一种模板设计,抽象类是is a 的关系。 |
13 字符串字面量是否自动生成一个String对象?
1 | 是 |
14 字符串对象池的作用是什么?
1 | 对象池的存在是为了避免频繁的创建和销毁对象而影响系统性能 |
15 StringBuffer和StringBuilder的区别以及存在的作用?
1 | 1、StringBuffer 与 StringBuilder 中的方法和功能完全是等价的, |
16 简述数组的内存原理
1 | 数组是存放在连续内存空间上的相同类型数据的集合 |
17 迭代器是什么?
1 | 迭代器(Iterator)是一个对象,它的工作是遍历并选择序列中的对象,它提供了一种访问一个容器(container)对象中的各个元素,而不必暴露该对象内部细节的方法。通过迭代器,开发人员不需要了解容器底层的结构,就可以实现对容器的遍历。 |
18 比较器是什么?
1 | 比较器是java中一个接口,该接口用于对用户定义类的对象进行排序和比较。 |
19 Vector、ArrayList和LinkedList的区别?
1 | ArrayList:作为List接口的主要实现类,线程不安全的,执行效率高,底层使用Object[]存储 |
20 HashMap、HashTable和TreeMap的区别?
1 | 1、HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。 |
21 什么样的数据集合可以使用foreach循环?
1 | 数组或者实现了Iterable接口的类实例 |
22 字节流与字符流的区别?
1 | 1、字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。 |
23 字节流的处理方式有哪些?
1 | InputStream是所有字节输入流的超类 |
24 字符流的处理方式有哪些?
1 | Reader是所有读取字符串输入流的超类 |
25 什么是序列化?
1 | 一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题 |
26 解释进程和线程的区别
1 | 1、进程是系统分配资源的最小单位,线程是cpu调度的最小单位 |
27 实现线程的方式有哪些?
1 | 1、继承Thread类,重写run()方法 |
28 如何使用synchronized来让线程同步?
1 | synchronized方法控制"对象"的访问,每一个对象对应一把锁,每个synchronized方法都必须获得调用该方法的对象的锁才能执行,否则线程会阻塞,方法一旦执行,就独占该锁,直到该方法返回才释放锁,后面被阻塞的线程才能获得这个锁,继续执行 |
29 为什么会有线程安全问题?
1 | 1、多个线程之间操作同一个数据,至少有一个线程修改这个数据 |
30 什么是锁并解释死锁的原因?
1 | 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 |
31 反射的原理是什么?
1 | 通过class、constructor、field、method四个方法获取一个类的各个组成部分 |
32 Class类的含义和作用是什么?
1 | class的意思为“类”,是java中的一个类,是定义一个特定类的实现,存在于java.lang包中,它的构造函数是私有的,由JVM创建Class对象,可以通过getClass()方法获取到Class对象。 |
33 创建对象有哪几种形式?
1 | 1、new关键字 |
34 如何利用反射机制来访问一个类的私有成员?
1 | 使用setAccessible(boolean flag)方法 |
35 什么是TCP什么是UDP?
1 | TCP:传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。 |
36 简述七层网络模型架构
1 | 应用层 确定通信对象,提供访问网络服务的接口 |
37 简述对TCP/IP协议的理解
1 | TCP/IP 是IP、TCP、HTTP等协议的集合。协议就是计算机与计算机之间通过网络实现通信时事先达成的一种约定。两台计算机之间必须能够支持相同的的协议,并循序相同的协议进行处理,才能实现相互通讯 |
38 什么是IP?
1 | IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。 |
39 什么是NAT?
1 | NAT是一种地址交换技术,它可以将IP数据报文头中的IP地址转换为另一个IP地址,并通过转换端口号达到地址重用的目的。NAT作为一种缓解IPv4公网地址枯竭的过渡技术,由于实现简单,得到了广泛应用。 |
40 什么是DNS?
1 | 将域名解析为IP地址,输入网址后,首先会查询本地DNS缓存,无果后再查询本地DNS服务器。 |
41 什么是DHCP?
1 | 动态分配IP地址协议,DHCP客户端从DHCP服务器获得DHCP服务器的IP地址、DNS服务器的IP地址、默认网关的IP地址等。 |
42 子网掩码是干什么的?
1 | 子网掩码用来指明一个IP地址所标示的主机是处于哪个子网中的。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分 |
43 IP地址分类有哪些?
1 | A类:(1.0.0.0-126.0.0.0)(默认子网掩码:255.0.0.0或 0xFF000000)第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为“0”,所以地址的网络号取值于1~126之间。一般用于大型网络。 |
44 Java与C/C++有什么异同?
1 | Java与C++都是面向对象语言,都使用了面向对象思想(例如封装、继承、多态等),由于面向对象有许多非常好的特性(继承、组合等),因此二者都有很好的可重用性。 |
45 Java中的作用域有哪些?
1 | 1)public。表明该成员变量或方法对所有类或对象都是可见的,所有类或对象都可以直 |
46 一个Java文件中是否可以定义多个类?
1 | 一个java文件中可以定义多个类,但是最多只有一个类被public修饰,并且这个类的类名与文件名必须相同 |
47 为什么Java中有些接口没有任何方法?
1 | 因为实现这些接口的类不需要重写任何方法,这些没有任何方法声明的接口又被叫做标识接口,标识接口对实现它的类没有任何语义上的要求,它仅仅充当一个标识的作用,用来表明实现它的类属于一个特定的类型 |
48 Java中的clone方法有什么作用?
1 | 已知对象A创建出另一个与A具有相同状态的对象B,并且对B的修改不会影响到A的状态 |
49 什么是浅拷贝和深拷贝?
1 | 浅拷贝:仅仅克隆基本类型变量,不克隆引用类型变量; |
50 什么是反射机制?
1 | 反射是通过获取类的class对象,然后动态的获取到这个类的内部结构,动态的去操作类的属性和方法。 |
51 面向过程与面向对象有什么区别?
1 | 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 |
52 面向对象的开发方式有什么优点?
1 | 易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护 |
53 重载和覆盖有什么区别?
1 | 重载发生在同一个类中,方法名相同、参数列表、返回类型、权限修饰符可以不同 |
54 final、finally和finalize有什么区别?
1 | final可以修饰类,变量,方法,修饰的类不能被继承,修饰的变量不能重新赋值,修饰的方法不能被重写 |
55 static关键字有哪些作用?
1 | 第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。 |
56 volatile关键字有哪些作用?
1 | 1.线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。 |
57 值传递与引用传递有哪些区别?
1 | 值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。 |
58 自动类型转换和强制类型转换是什么?
1 | 自动类型转换:对于某些类型的转换编译器可隐式地自动进行,不需人工干预,自动类型转换 |
59 Math类中round、ceil和floor方法的区别?
1 | round:取接近的整数 |
60 i++与++i的区别?
1 | i++是先赋值,然后再自增; |
61 lengt与length()的区别?
1 | length:用于基本类型数组,得到数组容量。 |
62 异常处理的原理是什么?
1 | 抛出异常:当方法出现错误而引发异常时,方法创建异常对象并交付运行系统,异常对象包含异常类型和异常出现时的程序状态等异常信息。运行系统负责寻找处置异常的代码并执行 |
63 run()与start()的区别?
1 | 1、start方法用来启动相应的线程; |
64 &与&&的区别?
1 | 按位与:a&b是把a和b都转换成二进制数然后再进行与的运算; |
65 short s1 = 1; s1 = s1 + 1;有什么错?
1 | s1 + 1,s1是short类型,1是int型,s1会自动转换为int型的1,与1相加后,得到int型的2,与左边类型不匹配 |
66 在JAVA中如何跳出当前的多重嵌套循环?
1 | 1、使用break |
67 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
1 | 引用不能变 |
68 静态变量和实例变量的区别?
1 | 实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量 |
69 接口是否可继承接口?
1 | 可以 |
70 抽象类是否可实现接口?
1 | 可以 |
71 抽象类是否可继承具体类?
1 | 可以 |
72 抽象类中是否可以有静态的main方法?
1 | 可以 |
73 java中实现多态的机制是什么?
1 | 通过将子类对象引用赋值给超类对象引用变量(向上转型)来实现动态方法调用 |
74 error和exception有什么区别?
1 | Error属于程序无法处理的错误,是JVM需要负担的责任,无法通过try-catch来进行捕获 |
75 throw与throws的区别?
1 | throw:作用在方法内,表示抛出具体异常,由方法体内的语句处理; |
76 sleep() 和 wait() 有什么区别?
1 | 1、sleep()是Thread类的静态方法。wait()是Object类的方法。 |
77 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
1 | 1、一个线程在访问一个对象的一个synchronized方法时,另一个线程可以同时访问这个对象的非同步方法 |
78 线程的基本状态以及状态之间的关系是什么?
1 | 线程状态:就绪、运行、阻塞 |
79 List、Map、Set三个接口,存取元素时,各有什么特点?
1 | List存放元素可以重复,存放元素是有序的 |
80 两个对象值相同(x.equals(y) == true),但却可有不同的hashcode,这句话对不对?
1 | 不对 |
81 什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。
1 | 序列化是通过实现serializable接口,该接口没有需要实现的方法,implement Serializable只是为了标注该对象是可被序列化的,使用一个输出流(FileOutputStream)来构造一个ObjectOutputStream对象,接着使用ObjectOutputStream对象的writeObejct(Object object)方法就可以将参数的obj对象到磁盘,需要恢复的时候使用输入流。 |
82 什么是构造函数?
1 | 构造函数,也叫构造方法,是JAVA中一种特殊的函数,与函数名相同,无返回值 |
83 内部类有哪些?
1 | 1、静态内部类 |
84 instanceof有什么用?
1 | 判断一个引用类型变量所指向的对象是否是一个类的实例 |
85 什么是GC?
1 | GC是垃圾收集的意思,内存处理是开发人员容易出现问题的地方,忘记或者错误地内存回收会导致程序或者系统的不稳定甚至崩溃,Java提供的垃圾回收机制可以自动检测对象是否超过作用域从而达到自动回收的目的 |
86 Java中是否存在内存泄漏的问题,并举例说明?
1 | 1、在堆中申请了空间没有被释放; |
87 Java中的堆内存与栈内存有什么区别?
1 | 堆内存是区别于栈区、全局数据区和代码区的另一个内存区域。堆允许程序在运行时动态地申请某个大小的内存空间。栈内存在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 |
88 什么是栈内存溢出?
1 | 栈溢出指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数,因而导致与其相邻的栈中的变量的值被改变 |
89 什么是堆内存溢出?
1 | 申请内存空间时,超出最大堆内存空间,系统给不了 |
90什么是整数溢出?
1 | 整数在内存里面保存在一个固定长度的空间内,它能存储的最大值和最小值是固定的,如果我们尝试去存储一个数,而这个数又大于这个固定的最大值时,就会导致整数溢出 |
91 同步和异步有什么区别?
1 | 同步:发送一个请求,等待返回,然后再发送下一个请求 |
92 终止线程的方法有哪些?
1 | 1、正常运行结束 |
93 什么是单例模式?
1 | 保证一个类只有一个实列,并提供一个访问它的全局访问点。 |
94 什么是工厂模式?
1 | 定义一个创建对象的接口,但由子类决定需要实例化哪一个类。使得子类实例化过程推迟。 |
95 什么是适配器模式?
1 | 将一个类的接口转换成用户希望得到的另一种接口。使原本不相容的接口得以协同工作。 |
96 什么是观察者模式?
1 | 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都得到通知并自动更新。 |
97 什么是代理模式?
1 | 为其他对象提供一种代理以控制这个对象的访问。 |
98 什么是NIO?
1 | 同步非阻塞NIO:NIO主要是想解决BIO的大并发问题,BIO是每一个请求分配一个线程,当请求过多时,每个线程占用一定的内存空间,服务器瘫痪了。 |
99 迭代器的实现原理是什么?
1 | 在ArrayList类下有一个成员内部类Itr,它实现了Iterator接口,内部类中定义了一个游标成员变量,通过hasNext方法来判断游标后是否有下一个元素,如果有就把元素添加到Object数组中,然后继续下一个判断;如果没有就结束 |
100 垃圾回收有哪些算法并详细阐述原理
1 | 1、引用计数法:假设有一个对象A,任何一个对象对A的引用,那么对象A的引用计数器+1,当引用失败时,对象A的引用计数器就-1,如果对象A的计算器的值为0,就说明对象A没有引用了,可以被回收。 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 陈天在睡觉!