2019最新BAT+java经典必考面试题
2019年Java面试题集word格式
目录表第一章技巧篇...................................... 错误!未定义书签。
介绍自己 ...................................................................................... 错误!未定义书签。
行为 .............................................................................................. 错误!未定义书签。
第二章智力篇...................................... 错误!未定义书签。
微软面试题 .................................................................................. 错误!未定义书签。
第三章 Java篇..................................... 错误!未定义书签。
Java基础方面--概念 ................................................................... 错误!未定义书签。
Java基础方面—线程编程方面 .................................................. 错误!未定义书签。
Java基础方面—编程 .................................................................. 错误!未定义书签。
第四章 Jsp篇...................................... 错误!未定义书签。
第五章 Servlet篇.................................. 错误!未定义书签。
Java208道面试题及部分答案
Java208道⾯试题及部分答案---恢复内容开始---⼀、Java 基础1.JDK 和 JRE 有什么区别?答:JRE是java运⾏时环境,包含了java虚拟机,java基础类库。
是使⽤java语⾔编写的程序运⾏所需要的软件环境,是提供给想运⾏java 程序的⽤户使⽤的。
JDK是java开发⼯具包,是程序员使⽤java语⾔编写java程序所需的开发⼯具包,是提供给程序员使⽤的2.== 和 equals 的区别是什么?答:==是⽐较两个对象的地址,equals是⽐较连个对象的内容3.两个对象的 hashCode()相同,则 equals()也⼀定为 true,对吗?答:不对!hashCode()相同,不代表连个对象就相同。
hashCode值是从hash表中得来的,hash是⼀个函数,该函数的实现是⼀种算法,通过hash算法算出hash值,hash表就是 hash值组成的,⼀共有8个位置。
相反,equals()相同,hashCode()⼀定相同。
这个是正确的!4.final 在 java 中有什么作⽤?答:final的作⽤随着所修饰的类型⽽不同:1. final修饰类中的属性或者变量:⽆论属性是基本类型还是引⽤类型,final所起的作⽤都是变量⾥⾯存放的“值”不能变2. final修饰类中的⽅法:可以被继承,但继承后不能被重写3. final修饰类:类不可以被继承5.java 中的 Math.round(-1.5) 等于多少?答:-1 计算⽅法:1. 参数的⼩数点后第⼀位<5,运算结果为参数2. 参数的⼩数点后第⼀位>5,运算结果为参数整数部分+1,符号(即正负)不变3. 参数的⼩数点后第⼀位=5,正数运算结果为整数部分+1,负数运算结果为整数部分 总结:⼤于五全部加,等于五正数加,⼩于五全不加6.String 属于基础的数据类型吗?答:不是。
String是⼀个对象,是java等编程语⾔的字符串。
java面试题库java面试题目及答案(3篇)
第1篇一、基础知识1. Java简介题目:请简述Java的基本特点。
答案:- 简单易学:Java设计之初就考虑了易学性,使用面向对象编程。
- 原生跨平台:Java通过JVM(Java虚拟机)实现跨平台运行。
- 安全性:Java提供了强大的安全机制,如沙箱安全模型。
- 体系结构中立:Java不依赖于特定的硬件或操作系统。
- 高效:Java的运行速度接近C/C++。
- 多线程:Java内置多线程支持,便于实现并发处理。
- 动态性:Java在运行时可以进行扩展和修改。
2. Java虚拟机题目:请解释Java虚拟机(JVM)的作用。
答案:JVM是Java程序的运行环境,其主要作用包括:- 将Java字节码转换为本地机器码。
- 管理内存,包括堆、栈、方法区等。
- 提供垃圾回收机制。
- 管理线程和同步。
3. Java内存模型题目:请简述Java内存模型的组成。
答案:Java内存模型主要由以下部分组成:- 堆(Heap):存储对象实例和数组。
- 栈(Stack):存储局部变量和方法调用。
- 方法区(Method Area):存储类信息、常量、静态变量等。
- 本地方法栈(Native Method Stack):存储本地方法调用的相关数据。
- 程序计数器(Program Counter Register):存储线程的当前指令地址。
4. Java关键字题目:请列举并解释Java中的几个关键字。
答案:- `public`:表示访问权限为公开。
- `private`:表示访问权限为私有。
- `protected`:表示访问权限为受保护。
- `static`:表示属于类本身,而非对象实例。
- `final`:表示常量或方法不能被修改。
- `synchronized`:表示线程同步。
- `transient`:表示数据在序列化时不会被持久化。
二、面向对象编程5. 类和对象题目:请解释类和对象之间的关系。
答案:类是对象的模板,对象是类的实例。
2019年Java面试必问之经典试题.doc
2019年Java面试必问之经典试题 基础不牢,地动山摇。
在众多的面试过程中,我们不难发现,基础知识在面试过程中占据了极大的一部分分值,若想在面试中能稳如泰山,拿下心意offer,这些题目将是我们必备的面试法宝。
如有错误,望加以斧正补充,自当深表感激。
Java基础面试题1、java中==和equals()的区别???答:简单来说==适合应用于基本数据类型的比较,而重写后equals()方法适合应用于引用类型的比较。
原因在于基本类型变量直接存储的是值本身,而引用类型变量存储的是对象的引用,当引用相同时,用==比较,自然会是true,当引用不同时,用==比较,则会是false.equlals方法是object中的方法,对于所有继承于object的类都会有该方法,当使用equals方法是需对此方法进行重写,如果没有对equals方法重写,则比较的是引用类型的,变量所指向的对象的地址,没有重写的equals,和==效果相同,只有重写了equals,比较的才会是所指对象的内容。
2、java中String、StringBuild、StringBuffer的区别???答:String是不可变类,因此对String进行操作都会产生新的String对象,容易导致效率低下,浪费内存空间。
因此,为了应对经常性的字符串操作,引入了StringBuffer、StringBuild这种字符串变量。
StringBufffer和StringBuild最大的区别,就是StringBuffer线程安全,但效率低,而StringBuild线程不安全,但效率高,且此两者只能通过构造函数的方式初始化。
而String可以通过构造函数和字面量复制两种方式。
3、java中重载(overload)、重写(override)的区别???答:1)重载是通过不同的方法参数来区分的,例如不同的参数个数、不同的参数类型、或者不同的参数顺序。
java模拟面试题目(3篇)
第1篇一、Java基础知识1. 请简述Java语言的特点。
2. 什么是Java虚拟机(JVM)?它有什么作用?3. 什么是Java的内存模型?请解释Java内存模型中的几个关键概念:堆、栈、方法区、程序计数器、本地方法栈。
4. 什么是Java中的反射机制?请举例说明反射在Java中的应用。
5. 什么是Java中的泛型?请解释泛型的原理和作用。
6. 请简述Java中的四种访问控制符:public、protected、default、private。
7. 什么是Java中的继承和多态?请举例说明继承和多态在实际开发中的应用。
8. 什么是Java中的封装?请举例说明封装在实际开发中的应用。
9. 什么是Java中的接口和抽象类?它们之间有什么区别?10. 什么是Java中的异常处理?请解释try-catch-finally语句的执行顺序。
二、Java集合框架1. 请列举Java集合框架中的常用集合类及其特点。
2. 请简述ArrayList、LinkedList、HashMap、HashSet的区别。
3. 什么是Java中的泛型集合?请举例说明泛型集合的应用。
4. 什么是Java中的迭代器(Iterator)和枚举器(Enum)?请比较它们的区别。
5. 什么是Java中的List、Set、Map的遍历方法?6. 请解释Java中的ArrayList和LinkedList的内部实现原理。
7. 什么是Java中的HashMap的扩容机制?8. 什么是Java中的HashSet的内部实现原理?9. 请解释Java中的线程安全集合类,如CopyOnWriteArrayList、ConcurrentHashMap。
三、Java多线程与并发1. 什么是Java中的线程?请解释线程的创建、调度和同步。
2. 请简述Java中的线程状态,如新建、就绪、运行、阻塞、等待、超时等待、终止。
3. 什么是Java中的同步机制?请解释synchronized关键字的作用。
java2019面试题目100及最佳答案
java2019面试题目100及最佳答案1. 什么是Java平台?请列举Java平台的三个主要组成部分。
答案:Java平台是指Java语言的运行环境,它包括Java虚拟机(JVM)、Java核心类库和Java编程语言本身。
三个主要组成部分包括Java运行时环境(JRE)、Java开发工具包(JDK)和Java应用程序接口(API)。
2. 解释Java中的异常处理机制。
答案:Java中的异常处理机制允许程序在运行时捕获和处理错误。
它使用try、catch和finally关键字来实现。
try块中包含可能抛出异常的代码,catch块用于捕获和处理异常,finally块中的代码无论是否发生异常都会执行。
3. Java中什么是多线程?请说明其优缺点。
答案:Java中的多线程是指在同一个进程中并行执行两个或多个线程的能力。
优点包括提高程序的响应性和效率,以及能够充分利用多核处理器。
缺点包括增加了程序的复杂性,可能导致资源竞争和死锁。
4. 解释Java中的垃圾回收机制。
答案:Java中的垃圾回收机制是指自动回收不再被引用的对象所占用的内存。
Java虚拟机(JVM)负责周期性地执行垃圾回收,以避免内存泄漏。
5. Java中的集合框架有哪些主要接口?答案:Java中的集合框架主要包括以下接口:List、Set、Map、Queue和Deque。
这些接口定义了集合的基本操作,如添加、删除、遍历等。
6. 什么是Java泛型?请举例说明其用途。
答案:Java泛型是指在定义类、接口、方法时使用类型参数,以支持编译时类型检查。
泛型可以提高代码的复用性和安全性。
例如,定义一个泛型类`List<T>`,其中T可以是任何类型的对象。
7. Java中什么是注解(Annotation)?请列举其主要用途。
答案:Java中的注解是一种特殊的接口,用于为代码提供元数据。
主要用途包括编译时处理、类和方法的标记、运行时处理等。
8. 解释Java反射机制及其应用场景。
Java经典面试题及答案(200题)
Java经典面试题及答案(200题) Java经典面试题200道Java 基础1. JDK 和 JRE 有什么区别?JDK:Java Development Kit 的简称,Java 开发工具包,提供了Java 的开发环境和运行环境。
JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。
具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。
简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。
2. == 和 equals 的区别是什么?「== 解读」对于基本类型和引用类型 == 的作用效果是不同的,如下所示:基本类型:比较的是值是否相同;引用类型:比较的是引用是否相同;代码示例:String x = "string";String y = "string";String z = new String("string");System.out.println(x==y); // trueSystem.out.println(x==z); // falseSystem.out.println(x.equals(y)); // trueSystem.out.println(x.equals(z)); // true代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new String()方法则重写开辟了内存空间,所以 == 结果为 false,而 equals 比较的一直是值,所以结果都为 true。
「equals 解读」equals 本质上就是 ==,只不过 String 和 Integer 等重写了equals 方法,把它变成了值比较。
java必背面试题
.011# 面试题11.为什么要使用static?使用方式: 通过类名调用创建多个对象时,共享一个静态属性和方法,当有一个对象修改了,其他对象使用时,也会改变一个类只能有一个同名的静态属性和静态方法,这样每个对象创建时,就不会再分配额外空间了,存储在方法区(静态区)节省空间。
2. jvm 内存模型有哪些,分别介绍一下?包括: 堆虚拟机栈本地方法栈程序计数器方法区堆:存储对象数组集合存储new出来的东西方法区: 存储类的信息常量(常量池中)静态变量编译器编译后的数据程序计数器: 相当于当前程序制定的字节码行号,指向下一行代码(因为多线程并发,如何实现轮流切换的,是因为每一个线程都会独立有一个程序计数器,可以保证每个线程切换之后,可以回到原来的位置)虚拟机栈: 存放的是每一个栈帧,每一个栈帧对应的一个被调用的方法栈帧包括: 局部变量表操作数栈常量池引用返回地址 .....局部变量表 : 存储局部变量操作数栈 : 程序中所有的计算过程都是它来完成常量池引用: 在方法运行时,用于引用类中的常量返回地址: 当方法被调用时,方法执行结束,还要回到调用的位置所以要保存一个方法返回地址。
本地方法栈:类似于虚拟机栈,只不过虚拟机栈运行是 java 方法,而它是运行native修饰的方法(本地方法)本地方法是操作系统帮你实现的,java只负责调用即可。
3.创建对象的方式有哪些?1.new2. 克隆3.反射4.反序列化调用构造的: 1. new 2. 反射 newInstance() 调用底层无参构造不用构造: 1. 克隆 : 在堆内存直接将已经存在的对象拷贝一份。
2.反序列化: 表示将本地文件生成一个java对象。
克隆:实现一个接口Cloneable 重写clone()User u = new User();User u2 = u.clone();深克隆:如果对象属性中也有引用类型,这些引用类型也需要实现Cloneable接口,重写clone(), 如果不重写克隆出来的对象基本类型可以克隆,引用类型不会克隆,是指向同一个对象4.什么是自动装箱和拆箱?装箱:就是自动将基本类型转换成封装类型拆箱:就是自动将封装类型转成基本类型。
java面试问题及回答
java面试问题及回答java面试问题及回答一1.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。
与此相对,方法覆盖是说子类重新定义了父类的方法。
方法覆盖必须有相同的方法名,参数列表和返回类型。
覆盖者可能不会限制它所覆盖的方法的访问。
2.Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?当新对象被创建的时候,构造函数会被调用。
每一个类都有构造函数。
在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。
Java中构造函数重载和方法重载很相似。
可以为一个类创建多个构造函数。
每一个构造函数必须有它自己唯一的参数列表。
Java不支持像C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java不会创建默认的复制构造函数。
3.Java支持多继承么?不支持,Java不支持多继承。
每个类都只能继承一个类,但是可以实现多个接口。
4.接口和抽象类的区别是什么?Java提供和支持创建抽象类和接口。
它们的实现有共同点,不同点在于:接口中所有的方法隐含的都是抽象的。
而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类类如果要实现一个接口,它必须要实现接口声明的所有方法。
但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是final的。
抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的。
抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化。
抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
【黑马程序员】Java试题、50道Java面试题集(2019最新版)
【黑马程序员】Java试题、50道Java面试题集(2019最新版)以下的内容是对原有的和最近Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,相对来说比较经典,相信对准备入职的Java程序员一定有所裨益。
一、Java基础部分1、面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。
抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
2)继承:继承是从已有类得到继承信息创建新类的过程。
提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。
继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的《Java与模式》或《设计模式精解》中关于桥梁模式的部分)。
3)封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。
我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。
可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。
4)多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。
简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。
多态性分为编译时的多态性和运行时的多态性。
如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当A系统访问B系统提供的服务时,B 系统有多种提供服务的方式,但一切对A系统来说都是透明的(就像电动剃须刀是A系统,它的供电系统是B系统,B系统可以使用电池供电或者用交流电,甚至还有可能是太阳能,A系统只会通过B类对象调用供电的方法,但并不知道供电系统的底层实现是什么,究竟通过何种方式获得了动力)。
java最常见的面试题(带答案)
java最常见的面试题(带答案)java最常见的面试题面试题NO.01-NO.05问题:如果main方法被声明为private会怎样答案:能正常编译,但运行的时候会提示”main方法不是public的”。
问题:Java里的传引用和传值的区别是什么答案:传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝。
问题:如果要重写一个对象的equals方法,还要考虑什么答案:hashCode。
问题:Java的”一次编写,处处运行”是如何实现的答案:Java程序会被编译成字节码组成的class文件,这些字节码可以运行在任何平台,因此Java是平台独立的。
问题:说明一下public static void main(String args[])这段声明里每个关键字的作用答案:public: main方法是Java程序运行时调用的第一个方法,因此它必须对Java环境可见。
所以可见性设置为pulic.static: Java平台调用这个方法时不会创建这个类的一个实例,因此这个方法必须声明为static。
void: main方法没有返回值。
String是命令行传进参数的类型,args是指命令行传进的字符串数组。
面试题NO.06-NO.10问题:==与equals的区别答案:==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致。
两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方 .==比较的是引用而equals方法比较的是内容。
public booleanequals(Object obj) 这个方法是由Object对象提供的,可以由子类进行重写。
默认的实现只有当对象和自身进行比较时才会返回true,这个时候和==是等价的。
String, BitSet, Date, 和File都对equals方法进行了重写,对两个String对象而言,值相等意味着它们包含同样的字符序列。
(完整版)Java经典面试题大全带答案
Java经典面试题带答案一、单项选择题1.Java是从()语言改进重新设计。
A.AdaB.C++C.PasacalD.BASIC答案:B2.下列语句哪一个正确()A. Java程序经编译后会产生machine codeB.Java程序经编译后会产生byte codeC.Java程序经编译后会产生DLLD.以上都不正确答案:B3.下列说法正确的有()A.class中的constructor不可省略B. constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行D.一个class只能定义一个constructor答案:C4.提供Java存取数据库能力的包是()A.java.sqlB.java.awtC.java。
langD.java。
swing答案:A5.下列运算符合法的是()A.&&B.〈>C.ifD.:=答案:A6.执行如下程序代码a=0;c=0;do{-—c;a=a-1;}while(a〉0);后,C的值是()A.0B.1C.—1D.死循环答案:C7.下列哪一种叙述是正确的()A.abstract修饰符可修饰字段、方法和类B.抽象方法的body部分必须用一对大括号{}包住C.声明抽象方法,大括号可有可无D.声明抽象方法不可写出大括号答案:D8.下列语句正确的是()A.形式参数可被视为localvariableB.形式参数可被字段修饰符修饰C.形式参数为方法被调用时,真正被传递的参数D.形式参数不可以是对象答案:A9.下列哪种说法是正确的()A.实例方法可直接调用超类的实例方法B.实例方法可直接调用超类的类方法C.实例方法可直接调用其他类的实例方法D.实例方法可直接调用本类的类方法答案:D二、多项选择题1.Java程序的种类有()A.类(Class)B.AppletC.ApplicationD.Servlet2.下列说法正确的有()A.环境变量可在编译sourcecode时指定B.在编译程序时,所能指定的环境变量不包括class pathC.javac一次可同时编译数个Java源文件D.javac。
bat面试题汇总50题(java)
batjava面试题及答案1面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。
抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
2)继承:继承是从已有类得到继承信息创建新类的过程。
提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。
继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的《Java与模式》或《设计模式精解》中关于桥梁模式的部分)。
3)封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。
我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。
可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。
4)多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。
简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。
多态性分为编译时的多态性和运行时的多态性。
如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当A系统访问B系统提供的服务时,B系统有多种提供服务的方式,但一切对A系统来说都是透明的(就像电动剃须刀是A系统,它的供电系统是B系统,B系统可以使用电池供电或者用交流电,甚至还有可能是太阳能,A系统只会通过B类对象调用供电的方法,但并不知道供电系统的底层实现是什么,究竟通过何种方式获得了动力)。
方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。
Java面试问题40个「附答案」
Java面试问题40个「附答案」Java集合面试问题40个「附答案」Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
下面店铺为大家带来Java面试问题40个「附答案」,希望大家喜欢!1.Java集合框架是什么?说出一些集合框架的优点?每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。
随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。
在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。
它还包括在Java并发包中,阻塞接口以及它们的实现。
集合框架的部分优点如下:(1)使用核心集合类降低开发成本,而非实现我们自己的集合类。
(2)随着使用经过严格测试的集合框架类,代码质量会得到提高。
(3)通过使用JDK附带的集合类,可以降低代码维护成本。
(4)复用性和可操作性。
2.集合框架中的泛型有什么优点?Java1.5引入了泛型,所有的集合接口和实现都大量地使用它。
泛型允许我们为集合提供一个可以容纳的对象类型,因此,如果你添加其它类型的任何元素,它会在编译时报错。
这避免了在运行时出现ClassCastException,因为你将会在编译时得到报错信息。
泛型也使得代码整洁,我们不需要使用显式转换和instanceOf操作符。
它也给运行时带来好处,因为不会产生类型检查的字节码指令。
3.Java集合框架的基础接口有哪些?Collection为集合层级的根接口。
一个集合代表一组对象,这些对象即为它的元素。
Java平台不提供这个接口任何直接的实现。
Set是一个不能包含重复元素的集合。
这个接口对数学集合抽象进行建模,被用来代表集合,就如一副牌。
List是一个有序集合,可以包含重复元素。
你可以通过它的索引来访问任何元素。
(完整版)2019最新Java面试题,常见面试题及答案汇总
ava 最新常见面试题+ 答案汇总1、面试题模块汇总面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC 、Spring Boot/Spring Cloud 、 Hibernate 、 Mybatis 、RabbitMQ 、 Kafka、Zookeeper、 MySql、Redis、 JVM 。
以以下图所示:可能对于初学者不需要后边的框架和JVM 模块的知识,读者朋友们可依照自己的情况,选择对应的模块进行阅读。
合适阅读人群需要面试的初 / 中 / 高级java 程序员想要查漏补缺的人想要不断完满和扩大自己java 技术栈的人java 面试官详细面试题下面一起来看208 道面试题,详细的内容。
一、 Java 基础1.JDK 和 JRE 有什么差异?2.== 和 equals 的差异是什么?3.两个对象的hashCode()相同,则equals() 也必然为true ,对吗?4.final 在 java 中有什么作用?5.java 中的 Math.round(-1.5)等于多少?6.String 属于基础的数据种类吗?7.java 中操作字符串都有哪些类?它们之间有什么差异?8.String str="i" 与 String str=new String( “ i”)相同吗?9.如何将字符串反转?10.String 类的常用方法都有那些?11.抽象类必定要有抽象方法吗?12.一般类和抽象类有哪些差异?13.抽象类能使用final修饰吗?14.接口和抽象类有什么差异?15.java 中 IO 流分为几种?、 NIO、 AIO 有什么差异?17.Files 的常用方法都有哪些?二、容器18.java 容器都有哪些?19.Collection 和 Collections 有什么差异?、 Set、 Map 之间的差异是什么?21.HashMap 和 Hashtable 有什么差异?22.如何决定使用HashMap 还是TreeMap?23.说一下HashMap 的实现原理?24.说一下HashSet 的实现原理?25.ArrayList 和 LinkedList 的差异是什么?26.如何实现数组和List 之间的变换?27.ArrayList 和 Vector 的差异是什么?28.Array 和 ArrayList 有何差异?29.在 Queue 中 poll() 和 remove() 有什么差异?30.哪些会集类是线程安全的?31.迭代器Iterator是什么?怎么使用?有什么特点?和ListIterator有什么差异?34.怎么保证一个会集不能够被更正?三、多线程35.并行和并发有什么差异?36.线程和进度的差异?37.保卫线程是什么?38.创办线程有哪几种方式?39.说一下runnable和callable有什么差异?40.线程有哪些状态?41.sleep() 和 wait() 有什么差异?42.notify() 和 notifyAll() 有什么差异?43.线程的run()和 start() 有什么差异?44.创办线程池有哪几种方式?45.线程池都有哪些状态?46.线程池中submit() 和 execute()方法有什么差异?47.在 java 程序中怎么保证多线程的运行安全?48.多线程锁的升级原理是什么?49.什么是死锁?50.怎么防范死锁?51.ThreadLocal 是什么?有哪些使用途景?52.说一下synchronized 基层实现原理?53.synchronized 和 volatile的差异是什么?54.synchronized 和 Lock 有什么差异?55.synchronized 和 ReentrantLock 差异是什么?56.说一下atomic 的原理?四、反射57.什么是反射?58.什么是java 序列化?什么情况下需要序列化?59.动向代理是什么?有哪些应用?60.怎么实现动向代理?五、对象拷贝61.为什么要使用克隆?62.如何实现对象克隆?63.深拷贝和浅拷贝差异是什么?六、 Java Web64.jsp 和 servlet有什么差异?65.jsp 有哪些内置对象?作用分别是什么?66.说一下jsp 的 4 种作用域?67.session 和 cookie 有什么差异?68.说一下session 的工作原理?69.若是客户端禁止cookie 能实现session 还能够用吗?70.spring mvc 和 struts 的差异是什么?71.如何防范sql 注入?72.什么是XSS 攻击,如何防范?73.什么是CSRF 攻击,如何防范?七、异常和throws的差异?75.final 、 finally 、 finalize 有什么差异?中哪个部分能够省略?中,若是catch 中 return了,finally还会执行吗?78.常有的异常类有哪些?八、网络响应码301 和 302 代表的是什么?有什么差异?和redirect的差异?81.简述tcp 和 udp 的差异?82.tcp 为什么要三次握手,两次不能够吗?为什么?83.说一下tcp 粘包是怎么产生的?84.OSI 的七层模型都有哪些?85.get 和 post 央求有哪些差异?86.如何实现跨域?87.说一下JSONP 实现原理?九、设计模式88.说一下你熟悉的设计模式?89.简单工厂和抽象工厂有什么差异?十、 Spring/Spring MVC90.为什么要使用spring?91.讲解一下什么是aop?92.讲解一下什么是ioc?93.spring 有哪些主要模块?94.spring 常用的注入方式有哪些?95.spring 中的bean 是线程安全的吗?96.spring 支持几种bean 的作用域?97.spring 自动装置bean 有哪些方式?98.spring 事务实现方式有哪些?99.说一下spring 的事务隔断?100.说一下spring mvc 运行流程?101.spring mvc 有哪些组件?102.@RequestMapping的作用是什么?103.@Autowired的作用是什么?十一、 Spring Boot/Spring Cloud104.什么是spring boot ?105.为什么要用spring boot ?106.spring boot核心配置文件是什么?107.spring boot配置文件有哪几各种类?它们有什么差异?108.spring boot有哪些方式能够实现热部署?109.jpa 和 hibernate有什么差异?110.什么是spring cloud ?111.spring cloud断路器的作用是什么?112.spring cloud的核心组件有哪些?十二、 Hibernate113.为什么要使用hibernate ?114.什么是ORM 框架?中如何在控制台查察打印的sql 语句?有几种盘问方式?实体类能够被定义为final吗?118.在 hibernate中使用Integer 和 int 做照射有什么差异?是如何工作的?120.get()和 load() 的差异?121.说一下hibernate的缓存体系?对象有哪些状态?123.在 hibernate中getCurrentSession和openSession的差异是什么?实体类必定要有无参构造函数吗?为什么?十三、 Mybatis中#{}和${}的差异是什么?126.mybatis 有几种分页方式?127.RowBounds 是一次性盘问全部结果吗?为什么?逻辑分页和物理分页的差异是什么?可否支持延缓加载?延缓加载的原理是什么?130.说一下mybatis 的一级缓存和二级缓存?和hibernate的差异有哪些?有哪些执行器(Executor)?分页插件的实现原理是什么?如何编写一个自定义插件?十四、 RabbitMQ的使用途景有哪些?有哪些重要的角色?有哪些重要的组件?中vhost的作用是什么?的信息是怎么发送的?怎么保证信息的牢固性?怎么防范信息扔掉?142.要保证信息长远化成功的条件有哪些?长远化有什么弊端?有几种广播种类?怎么实现延缓信息队列?集群有什么用?节点的种类有哪些?集群搭建需要注意哪些问题?每个节点是其他节点的完满拷贝吗?为什么?集群中唯一一个磁盘节点崩溃了会发生什么情况?对集群节点停止序次有要求吗?十五、 Kafka152.kafka 能够走开zookeeper 单独使用吗?为什么?153.kafka 有几种数据保留的策略?154.kafka 同时设置了7 天和10G 除去数据,到第五天的时候信息达到了10G,这个时候kafka 将如何办理?155.什么情况会以致kafka 运行变慢?156.使用kafka 集群需要注意什么?十六、 Zookeeper157.zookeeper 是什么?158.zookeeper 都有哪些功能?159.zookeeper 有几种部署模式?160.zookeeper 怎么保证主从节点的状态同步?161.集群中为什么要有主节点?162.集群中有 3 台服务器,其中一个节点宕机,这个时候zookeeper 还能够够使用吗?163.说一下zookeeper 的通知体系?十七、 MySql164.数据库的三范式是什么?165.一张自增表里面总合有7 条数据,删除了最后 2 条数据,重启mysql 数据库,又插入了一条数据,此时id 是几?166.如何获取当前数据库版本?167.说一下ACID 是什么?168.char 和 varchar 的差异是什么?和double的差异是什么?170.mysql 的内连接、左连接、右连接有什么差异?171.mysql 索引是怎么实现的?172.怎么考据mysql 的索引可否满足需求?173.说一下数据库的事务隔断?174.说一下mysql 常用的引擎?175.说一下mysql 的行锁和表锁?176.说一下乐观锁和悲观锁?177.mysql 问题排查都有哪些手段?178.如何做mysql 的性能优化?十八、 Redis179.redis 是什么?都有哪些使用途景?180.redis 有哪些功能?181.redis 和 memecache 有什么差异?182.redis 为什么是单线程的?183.什么是缓存穿透?怎么解决?184.redis 支持的数据种类有哪些?185.redis 支持的java 客户端都有哪些?186.jedis 和 redisson 有哪些差异?187.怎么保证缓存和数据库数据的一致性?188.redis 长远化有几种方式?189.redis 怎么实现分布式锁?190.redis 分布式锁有什么弊端?191.redis 如何做内存优化?192.redis 裁汰策略有哪些?193.redis 常有的性能问题有哪些?该如何解决?十九、 JVM194.说一下jvm 的主要组成部分?及其作用?195.说一下jvm 运行时数据区?196.说一下货仓的差异?197.队列和栈是什么?有什么差异?198.什么是双亲委派模型?199.说一下类加载的执行过程?200.怎么判断对象可否能够被回收?201.java 中都有哪些引用种类?202.说一下jvm 有哪些垃圾回收算法?203.说一下jvm 有哪些垃圾回收器?204.详细介绍一下CMS 垃圾回收器?205.再生代垃圾回收器和老生代垃圾回收器都有哪些?有什么差异?206.简述分代垃圾回收器是怎么工作的?207.说一下jvm 调优的工具?208.常用的jvm 调优的参数都有哪些?2、面试题答案汇总(一)基础模块(二)容器(三)多线程(四)反射(五)对象拷贝(六) JavaWeb(七)异常(八)网络(九)设计模式(十) Spring/SpringMVC(十一) Spring Boot / Spring Cloud (十二) Hibernate(十三) Mybatis(十四) RabbitMQ(十五) Kafka(十六) Zookeeper(十七) MySql(十八) Redis(十九) JVM。
2019年Java 最常见的 面试题.doc
2019年Java 最常见的面试题1、java中Static关键字有哪些特点???答:1)、static成员变量静态变量:属于类,内存中只有一个复制,所有实例都指向同一个内存地址,只要类被加载,静态变量就会本分配空间,调用方式有两种。
类.静态变量和对象.静态变量实例变量:属于对象,只有对象被创建,实例对象才会被分配空间,调用方式:对象.实例变量2)、static成员方法静态方法:属于类,不需要创建对象,就可以被调用。
调用方式:类.静态方法和对象.静态方法非静态方法:属于对象,只能在对象被创建出来之后才可以被使用。
注意:static方法中,不能使用this和super关键字,不能调用非static方法,只能访问所属类的静态成员变量和静态成员方法。
2、java中length属性与length()方法有什么区别???答:length属性属于数组,用来获取数组的长度;而length()方法属于String 用来计算字符串长度。
3、java中Collections框架是什么???答:Collection是整个集合框架的基础,它里面存储了一组对象,用于表示不同类型的Collections.主要有一下三种,其特点如下。
1)、set 主要特点集合中元素不能重复。
2)、list有序的Collection,按照对象的进入顺序保存对象,可以重复。
3)、map提供了从键映射到值得数据结构,值可以重复单键必须唯一。
4、java中ArrayList 、Vector 、LinkedList有什么区别???答:ArrayList 、Vector 、LinkedList类均在java.util包,均为可伸缩数组,即可以动态改变长度的数组。
ArrayList 、Vector 都是基于数组来实现的,数据存储是连续的,支持下标访问元素,查询快,插入慢。
区别在于:ArrayList提供的方法都不是同步的,且线程不安全,但效率高。
Vector大部分方法都是同步的,且线程安全,效率低。
java校招面试题目(3篇)
第1篇第一部分:基础知识1. Java基本概念(1)请解释Java中的面向对象编程(OOP)的特点。
解析:面向对象编程的特点包括封装、继承和多态。
封装是指将数据和对数据的操作封装在一个类中;继承是指允许一个类继承另一个类的属性和方法;多态是指同一个方法在不同对象上表现出不同的行为。
(2)简述Java中的四种访问控制符及其作用范围。
解析:Java中的四种访问控制符分别是public、protected、默认(不写)和private。
public可以访问任何类;protected可以在同一个包内和子类中访问;默认访问(不写)只能在同一个包内访问;private只能在类内部访问。
2. Java基本数据类型(1)请列出Java中的基本数据类型,并说明其特点和取值范围。
解析:Java中的基本数据类型包括byte、short、int、long、float、double、char和boolean。
byte和short为有符号整数类型,取值范围分别为-128到127和-32,768到32,767;int为基本整型,取值范围为-2,147,483,648到2,147,483,647;long为长整型,取值范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807;float和double为浮点数类型,取值范围分别为-3.4E38到3.4E38和-1.8E308到1.8E308;char为字符类型,取值范围为0到65,535;boolean为布尔类型,取值为true或false。
(2)简述Java中的自动装箱和拆箱。
解析:自动装箱是指将基本数据类型自动转换为包装类型(如int自动转换为Integer);自动拆箱是指将包装类型自动转换为基本数据类型。
在装箱和拆箱过程中,如果数据类型不匹配,会抛出ClassCastException异常。
3. Java关键字(1)请解释Java中的关键字final、static和synchronized。
【黑马程序员】Java试题、50道Java面试题集(2019最新版)21-30
【黑马程序员】Java试题、50道Java面试题集(2019最新版)21-30以下的内容是对原有的和最近Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,相对来说比较经典,相信对准备入职的Java程序员一定有所裨益。
21、描述一下JVM 加载class文件的原理机制?答:JVM 中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java 中的类加载器是一个重要的Java 运行时系统组件,它负责在运行时查找和装入类文件中的类。
补充:1.由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。
当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。
类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。
加载完成后,Class对象还不完整,所以此时的类还不可用。
当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。
最后JVM对类进行初始化,包括:1如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;2如果类中存在初始化语句,就依次执行这些初始化语句。
2.类的加载是由类加载器完成的,类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(ng.ClassLoader的子类)。
从JDK 1.2开始,类加载过程采取了父亲委托机制(PDM)。
PDM更好的保证了Java平台的安全性,在该机制中,JVM 自带的Bootstrap是根加载器,其他的加载器都有且仅有一个父类加载器。
类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。
JVM不会向Java程序提供对Bootstrap的引用。
2019蚂蚁金服Java必问面试题及答案
一面1、自我介绍、自己做的项目和技术领域开放题2、项目中的监控:那个监控指标常见的有哪些?答:CPU、内存、IO 等等。
建议下载个nmon 工具,里面有各个指标。
数据库:Mysql (缓存命中、索引、单条SQL 性能、数据库线程数、数据池连接数)中间件: 1.消息2、负载均衡 3 、缓存(包括线程数、连接数、日志)。
网络:吞吐量、吞吐率应用:jvm 内存、日志、Full GC 频率3、微服务涉及到的技术以及需要注意的问题有哪些?4、注册中心你了解了哪些?答:Consul 、Eureka 、ZooKeeper5、consul 的可靠性你了解吗?6、consul 的机制你有没有具体深入过?有没有和其他的注册中心对比过?7、项目用Spring 比较多,有没有了解Spring 的原理?AOP 和IOC 的原答:(1). IoC (Inversion of Control )是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。
控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。
对于Spring 而言,就是由Spring 来控制对象的生命周期和对象之间的关系;IoC 还有另外一个名字——“依赖注入(Dependency Injection )”。
从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,即由容器动态地将某种依赖关系注入到组件之中。
(2) . 在Spring 的工作方式中,所有的类都会在spring 容器中登记,告诉spring 这是个什么东西,你需要什么东西,然后spring 会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。
所有的类的创建、销毁都由spring 来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring 。
对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring 控制,所以这叫控制反转。
java应届生面试题目(3篇)
第1篇一、Java基础知识1. 请简述Java的基本特性和优势。
解析:Java具有简单性、面向对象、分布式、平台无关性、安全性、多线程、动态性、强类型、高效率、可移植性等特性。
其优势在于跨平台、安全性高、易于开发、有丰富的类库等。
2. 请解释Java中的基本数据类型和引用数据类型。
解析:基本数据类型包括byte、short、int、long、float、double、char、boolean;引用数据类型包括类、接口、数组等。
3. 请解释Java中的封装、继承、多态三个基本概念。
解析:封装是指将类的属性和方法封装在一个单元中,隐藏内部实现细节;继承是指子类继承父类的属性和方法,实现代码复用;多态是指同一方法在不同对象上表现不同的行为。
4. 请解释Java中的构造函数和析构函数。
解析:构造函数用于创建对象时初始化对象的属性,析构函数用于销毁对象时释放对象占用的资源。
5. 请解释Java中的static关键字。
解析:static关键字用于修饰成员变量和方法,表示该成员变量或方法属于类,而不是对象。
6. 请解释Java中的final关键字。
解析:final关键字用于修饰成员变量、方法和类,表示该成员变量、方法或类不可修改。
7. 请解释Java中的异常处理机制。
解析:Java中的异常处理机制包括try-catch-finally语句,用于捕获和处理程序中的异常。
8. 请解释Java中的泛型。
解析:泛型是一种参数化类型,允许在定义类、接口和泛型方法时指定类型参数,提高代码的复用性和安全性。
二、Java集合框架1. 请解释Java中的List、Set和Map接口。
解析:List接口表示有序集合,Set接口表示无序集合且元素不可重复,Map接口表示键值对映射。
2. 请解释Java中的ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等常用集合类。
解析:ArrayList和LinkedList实现List接口,ArrayList基于数组实现,LinkedList基于链表实现;HashSet和TreeSet实现Set接口,HashSet基于哈希表实现,TreeSet基于红黑树实现;HashMap和TreeMap实现Map接口,HashMap基于哈希表实现,TreeMap基于红黑树实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2018最新《BATJava必考面试题集》1、面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。
抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
2)继承:继承是从已有类得到继承信息创建新类的过程。
提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。
继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的《Java与模式》或《设计模式精解》中关于桥梁模式的部分)。
3)封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。
我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。
可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。
4)多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。
简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。
多态性分为编译时的多态性和运行时的多态性。
如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当A系统访问B系统提供的服务时,B系统有多种提供服务的方式,但一切对A系统来说都是透明的(就像电动剃须刀是A 系统,它的供电系统是B系统,B系统可以使用电池供电或者用交流电,甚至还有可能是太阳能,A系统只会通过B类对象调用供电的方法,但并不知道供电系统的底层实现是什么,究竟通过何种方式获得了动力)。
方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。
运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:1. 方法重写(子类继承父类并重写父类中已有的或抽象的方法);2. 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。
2、访问修饰符public,private,protected,以及不写(默认)时的区别?答:区别如下:作用域当前类同包子类其他public √ √ √ √protected √ √ √ ×default √ √ × ×private √ × × ×类的成员不写访问修饰时默认为default。
默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private)。
受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。
3、String 是最基本的数据类型吗?答:不是。
Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(en umeration type),剩下的都是引用类型(reference type)。
4、float f=3.4;是否正确?答:不正确。
3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。
5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。
而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
6、Java 有没有goto?答:goto 是Java中的保留字,在目前版本的Java中没有使用。
(根据Jame s Gosling(Java之父)编写的《The Java Programming Language》一书的附录中给出了一个Java关键字列表,其中有goto和const,但是这两个是目前无法使用的关键字,因此有些地方将其称之为保留字,其实保留字这个词应该有更广泛的意义,因为熟悉C语言的程序员都知道,在系统类库中使用过的有特殊意义的单词或单词的组合都被视为保留字)7、int 和Integer 有什么区别?答:Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入不是对象的基本数据类型,但是为了能够将这些基本数据类型当成对象操作,J ava为每一个基本数据类型都引入了对应的包装类型(wrapper class),int 的包装类就是Integer,从JDK 1.5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。
Java 为每个原始类型提供了包装类型:原始类型: boolean,char,byte,short,int,long,float,double包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Do uble补充:最近还遇到一个面试题,也是和自动装箱和拆箱相关的,代码如下所示:如果不明就里很容易认为两个输出要么都是true要么都是false。
首先需要注意的是f1、f2、f3、f4四个变量都是Integer对象,所以下面的==运算比较的不是值而是引用。
装箱的本质是什么呢?当我们给一个Integer对象赋一个int值的时候,会调用Integer类的静态方法valueOf,如果看看valueOf的源代码就知道发生了什么。
IntegerCache是Integer的内部类,其代码如下所示:简单的说,如果字面量的值在-128到127之间,那么不会new新的Integer 对象,而是直接引用常量池中的Integer对象,所以上面的面试题中f1==f2的结果是true,而f3==f4的结果是false。
越是貌似简单的面试题其中的玄机就越多,需要面试者有相当深厚的功力。
8、&和&&的区别?答:&运算符有两种用法:(1)按位与;(2)逻辑与。
&&运算符是短路与运算。
逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。
&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。
很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.eq uals(“”),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException 异常。
注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
补充:如果你熟悉JavaScript,那你可能更能感受到短路运算的强大,想成为J avaScript的高手就先从玩转短路运算开始吧。
9、解释内存中的栈(stack)、堆(heap)和静态存储区的用法。
答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、“hello”和常量都是放在静态存储区中。
栈空间操作最快但是也很小,通常大量的对象都是放在堆空间,整个内存包括硬盘上的虚拟内存都可以被当成堆空间来使用。
String str = new String(“hello”);上面的语句中str放在栈上,用new创建出来的字符串对象放在堆上,而“hel lo”这个字面量放在静态存储区。
补充:较新版本的Java中使用了一项叫“逃逸分析“的技术,可以将一些局部对象放在栈上以提升对象的操作性能。
10、Math.round(11.5) 等于多少? Math.round(-11.5)等于多少?答:Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。
四舍五入的原理是在参数上加0.5然后进行下取整。
11、swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在S tring上?答:早期的JDK中,switch(expr)中,expr可以是byte、short、char、int。
从1.5版开始,Java中引入了枚举类型(enum),expr也可以是枚举,从JD K 1.7版开始,还可以是字符串(String)。
长整型(long)是不可以的。
12、用最有效率的方法计算2乘以8?答:2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)。
补充:我们为编写的类重写hashCode方法时,可能会看到如下所示的代码,其实我们不太理解为什么要使用这样的乘法运算来产生哈希码(散列码),而且为什么这个数是个素数,为什么通常选择31这个数?前两个问题的答案你可以自己百度一下,选择31是因为可以用移位和减法运算来代替乘法,从而得到更好的性能。
说到这里你可能已经想到了:31 * num <==> (num << 5) - n um,左移5位相当于乘以2的5次方(32)再减去自身就相当于乘以31。
现在的VM都能自动完成这个优化。
13、数组有没有length()方法?String 有没有length()方法?答:数组没有length()方法,有length 的属性。
String 有length()方法。
Jav aScript中,获得字符串的长度是通过length属性得到的,这一点容易和Java 混淆。
14、在Java 中,如何跳出当前的多重嵌套循环?答:在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。
(J ava中支持带标签的break和continue语句,作用有点类似于C和C++中的g oto语句,但是就像要避免使用goto一样,应该避免使用带标签的break和c ontinue,因为它不会让你的程序变得更优雅,很多时候甚至有相反的作用,所以这种语法其实不知道更好)15、构造器(constructor)是否可被重写(override)?答:构造器不能被继承,因此不能被重写,但可以被重载。