前言
赢在面试之Java基础篇(1)
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以有多个类,但只能有一个public的类,并且public的类名必须与文件名一致。
2、Java有没有goto?
java有goto,但是是保留字,目前还没有被应用
3、说说&和&&的区别。
相同点:&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时整个结果才为true
4、在JAVA中如何跳出当前的多重嵌套循环?
跳出循环使用break关键字,跳出多重循环可以在最外层循环使用标记,或者是用外层的循环可以受到内存循环的控制
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
switch可作用于char byte short int和对应的包装类,不能作用于long double float boolean和他们的包装类
6.short s1= 1; s1 = s1+1;有什么错? short s1 = 1; s1 += 1;有什么错?
对于short s1= 1; s1 = s1 + 1;由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1= 1; s1 += 1;由于 +=是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
7、char型变量中能不能存贮一个中文汉字?为什么?
可以,因为 char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字
8、如何用最有效率的方法算出2乘以8等于几?
利用位运算2 << 3
9、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
如果final修饰的是一个基本数据类型的变量,那么这个变量的值就定了,不能变了,而如果修饰的是一个引用变量,那么该变量存的是一个内存地址,该地址就不能变了,但是该内存地址所指向的那个对象还是可以变的,就像你记住了人家的门牌号,但你不能管人家家里人员数量。
10,静态变量和实例变量的区别?
a.静态变量(类变量)前要加 static 关键字,而实例变量(成员变量)前则不加
b.静态变量属于类的,使用时直接用类名点,实列变量属于对象的,必须用对象才能点
c.静态变量存在于方法区中,实例变量存在于堆中
赢在面试之Java基础篇(2)
11、是否可以从一个static方法内部发出对非static方法的调用?
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以 直接调用。
12、Integer与int的区别
a.int是一个基本数据类型,Integer是int对应的包装类
b.int的默认值是0,Integer默认值是null
c、Integer实际是对象的引用,而int则是直接存储数据值
13、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?
结果是12 和 -11 Math.round(11.5)的方法可以理解为将括号内的数+0.5之后,向下取值,
Math.ceil求最小的整数,但不小于本身 —向上取整
Math.floor求最大的整数,但不大于本身. ----向下取整
Math.round求本身的四舍五入.
Math.abs求本身的绝对值.
14、Overload和Override的区别?Overloaded的方法是否可以改变返回值的类型?
Overload是重载,发生在同一个类中,方法名称相同,参数列表不同,Overload不能改变返回值类型
Override是重写,发生在父子类中,方法名称相同,参数列表相同,方法体不同
15、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?
接口可以继承接口,抽象类可以实现接口 ,抽象类是可以继承具体类(concreteclass),抽象类中可以有静态的main方法
16、Java中实现多态的机制是什么?
靠的是父类引用指向子类的对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法
17、abstractclass和interface语法上有什么区别?
https://blog.youkuaiyun.com/shuaijunlan/article/details/51378019
18、内部类可以引用它的包含类的成员吗?有没有什么限制?
完全可以。如果不是静态内部类,那没有什么限制!,如果内部类是静态的则只能访问外部的静态变量
19、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不能
20、String s = “Hello”;s = s + “world!”;这两行代码执行后,原始的String对象中的内容到底变了没有?
没有,因为String对象是不可变的,所以s = s + "world!"会创建一个新的对象,然后将s的引用指向新建的对象
赢在面试之Java集合框架篇(3)
21、ArrayList和Vector的区别
ArrayLis:底层是数组结构,查询速度快,增加/删除速度较慢,是线程不安全的
Vector底层也是数组结构,和ArrayList一样都实现了List接口,但是线程安全
LinkedList:底层是链表结构,查询速度慢,增加/删除速度快,是线程不安全的
22、HashMap和Hashtable的区别
HashMap:线程不安全,key和value可以是null值
HashTable:线程安全,key和value都不可以是null值,和HashMap一样都是Map的实现类
23、List和 Map区别?
List:是存储单列数据的集合,存储的数据是有序并且是可以重复的
Map:存储双列数据的集合,通过键值对存储数据,存储 的数据是无序的,Key值不能重复,value值可以重复
24、List,Set, Map是否继承自Collection接口?
List/Set是、Map不是
25、List、Map、Set三个接口,存取元素时,各有什么特点?
List表示有序可重复的集,
存元素:多次调用add(Object)方法时,每次加入的对象按先来后到的顺序排序,也可以插队,即调用add(int index,Object)方法,就可以指定当前对象在集合中的存放位置。
取元素:方法1:Iterator接口取得所有,逐一遍历各个元素
方法2:调用get(index i)来明确说明取第几个。
Set里面无序不重复的元素
存元素:add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true;当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。
取元素:没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。
Map是双列的集合
存放用put方法:put(obj key,obj value),每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等。
取元素:用get(Object key)方法根据key获得相应的value。也可以获得所有的key的集合,还可以获得所有的value的集合,还可以获得key和value组合成的Map.Entry对象的集合。
26、说出ArrayList,Vector,LinkedList的存储性能和特性
ArrayList和Vector:都是使用数组方式存储数据,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的;当需要增长时,Vector 默认增长为原来一培,而ArrayList却是原来的一半
LinkedList:使用双向链表实现存 储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
27.去掉一个Vector集合中重复的元素
方式一:遍历集合,新建一个集合,用contents()方法去判断,添加到新集合
方式二:利用set集合不可重复性,遍历集合,新建一个集合,添加到set集合
28、Collection和Collections的区别。
Collection:是所有集合的父类
Collections:是一个服务于Collection类的工具类
29、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别?
equals
30、你所知道的集合类都有哪些?主要方法?
https://www.cnblogs.com/guweiwei/p/6638022.html
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
赢在面试之Java基础篇(4)
31、String s = new String(“xyz”);创建了几个StringObject?是否可以继承String类?
2个,一个“xyz”,一个new String()对象;String类不能被继承
32、String和StringBuffer的区别
String:String对象是不可变的,每次操作都会创建新的对象
StringBuffer:对象可操作,不会每次都产生新对象,线程安全
StringBuider:和StringBuffer一样,但是是线程不安全的
33.下面这条语句一共创建了多少个对象:String s=“a”+“b”+“c”+“d”;
一个
34、try {}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在try中return后执行
**35、final, finally, finalize的区别。 **
final:是一个修饰符,修饰类时累不能被继承,修饰变量时,变量值不能被更改,修饰方法时方法不能被重写
finally:是异常捕获中的一部分,必须和try catch一起使用,常常用来释放资源
finalize:是一个方法,每个对象都会默认存在,在对象被GC收回时调用,一个对象的finalize()方法只会被调用一次,而且finalize()被调用不意味着gc会立即回收该对象
36、运行时异常与一般异常有何异同?
运行时异常:runtime exception,程序中可以不用手动捕获,运行时异常一般是程序写法不严谨造成,如NullPointerException
一般异常:一般异常要求程序中必须用进行手动捕获,如:IO异常和Sql异常
37、error和exception有什么区别?
Exception:是程序正常运行中,可以预料的意外情况,可以进行被捕获,进行相应处理。
Error:表示程序本身无法克服和恢复的一种严重问题,程序只有退的份了,例如说内存溢出和线程死锁等系统问题。
38、简单说说Java中的异常处理机制的简单原理和应用
java为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须try…catch处理或throws声明继续抛给上层调用方法处理。所以普通异常为checked异常,而系统异常可以处理也可以不处理。编译器不强制用try…catch或throws声明,所以系统异常成为uncheckde异常
39、Java 中堆和栈有什么区别?
堆和栈都是Java用来在RAM中存放数据的地方。
栈:栈中存放着一个个的栈帧,每调用一个方法的时候就会在栈中开辟出一个栈帧用来存放调用方法的参数和局部变量等,栈不被线程共享(递归调用方法容易出现StackOverflowError(内存溢出))
堆: 堆中存放着所有new出来的对象以及所有的成员变量等,堆能被线程共享(如果java堆空间不足了,程序会抛出OutOfMemoryError异常。)
40、能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象?
可以强转,超出范围时,如果大于128就等于-128+大于128的部分得到结果:如(byte)129就等于:-128+(129-128)= -127
赢在面试之Java基础篇(5)
41、a.hashCode() 有什么用?与 a.equals(b) 有什么关系?
hashCode() 方法对应对象整型的 hash 值。它常用于基于 hash 的集合类,如 Hashtable、HashMap、LinkedHashMap等等。它与 equals() 方法关系特别紧密。根据 Java 规范,两个使用 equal() 方法来判断相等的对象,必须具有相同的 hash code。
42、字节流与字符流的区别
字节流:按照字节进行读写(InputStream、OutputStream),默认不使用缓冲区
字符流:按照字符进行读写,一般用于读取纯文本文件(Reader、Writer),字符流使用缓冲区。
43、什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。
JAVA对象转换为字节序列的过程就称为对象的序列化,只有实现了 serializable和Externalizable接口的类的对象才能被序列化 后者是前者的子类 ,可以使用对象流来进行序列化
44、描述一下JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
45、heap和stack有什么区别。
.就是栈和堆的区别,看39题
46、GC是什么?为什么要有GC?
GC是垃圾回收器,因为GC可以有效的防止内存泄露,有效的使用可以使用的内存
47、垃圾回收的优点和原理。并考虑2种回收机制。
优点是:程序员不需要考虑空对象的处理,有了GC可以有效的防止内存泄露,有效的使用可以使用的内存
48、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
不可以马上回收,可以调用System.gc()方法通知它,通知后也并不一定会马上回收
49、Java 中,throw 和 throws 有什么区别
throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。
throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。
50,java中会存在内存泄漏吗,请简单描述。
会,比如:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露。
本文整理了Java面试中常见的基础知识、集合框架及多态机制等问题,覆盖了类与对象、异常处理、集合类特性、垃圾回收等核心概念,帮助读者深入理解Java编程。
7822

被折叠的 条评论
为什么被折叠?



