2019/7/23 Java面试题笔记总结

1.调用下列方法的返回值是( B )
private static int func() {
int i = 0;
try {
return i++;
} catch (Exception e) {
return i++;
}finally{
return i++;
}
}
A.0
B.1
C.2
D.3
解析:
异常结构中,紧记一点:任何时候return返回的都是“表达式”的值,而不是某个变量的值。

2.关于类java.util.HashSet,下列陈述正确的是( C )
A. 集合中的元素有序.
B. 集合不可变.
C. 集合中的元素唯一.
D. 集合中的元素通过键来存取.
解析:
Set通常都是元素无序不可重复的集合,其容量是会根据元素的增加进行扩充的。

3.下面哪一种说法对于线程来说不成立( C )
A. 如果对同一个 Thread 对象两次调用 start() 方法,在运行时会抛出一个异常。
B. 线程开始的顺序与它们实际运行的顺序可能不一样。
C. 如果对 Thread 对象直接调用 run() 方法,在运行时会抛出一个异常。
D. 如果在执行同步代码时对线程调用 sleep() 方法,锁不会释放。
解析:
如果对 Thread 对象直接调用 run() 方法,在运行时不会抛出异常。开始一个线程的正确方法是调用 start() 方法,这会使 run() 方法被新线程执行。
A 说法成立,多次调用同一 Thread 对象的 start() 方法会导致在运行的线程抛出IllegalThreadStateException 异常。
B 说法成立,因为线程运行的顺序是由线程调度程序决定的,与哪个线程首先开始的无必然关系。
D 说法成立,因为线程在进入 sleep 状态时不会释放它所拥有的锁。

4 java.net.Socket类如何获取本地ip地址( B )
A. getInetAddress()
B. getLocalAddress()
C. getReuseAddress()
D. getLocalPort()
解析:
Socket中获取IP地址通过Socket的getInetAddress()方法即可获得Socket中的Ip地址。其中Socket中还可以通过getLocalAddress()获取Socket绑定的本地地址

5.读阅下面的程序段,其中"c.getDeclaredMethods()"的作用是( C )
import java.lang.reflect.*;
public class DumpMethods{
public static void main(String[] args) {
try {
Class c = Class.forName(args[0]);
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++) {
System.out.println(m[i].toString());
}
} catch (Throwable e) {
System.err.println(e);
}
}
}
A. 取得类的公有方法对象
B. 取得类的所有公有方法名称
C. 取得类的所有方法对象
D. 以上选项都不正确

解析:
public Method[] getMethods()返回某个类的所有公用(public)方法包括其继承类的公用方法,当然也包括它所实现接口的方法。
public Method[] getDeclaredMethods()返回类或接口声明的所有方法, 包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。当然也包括它所实现接口的方法。

6.对Collection和Collections描述正确的是( B )
A. Collection是java.util包下的类,它包含有各种有关集合操作的静态方法
B. Collection是java.util包下的接口,它是List和Set集合结构的父接口
C. Collections是java.util包下的接口,它是各种集合结构的父接口
D. Collections是java.util包下的类,它包含有各种有关集合操作的对象方法
解析:
Collection是java.util下的接口,它是各种集合结构的父接口;
Collections是java.util下的类,它包含有各种有关集合操作的静态方法

7.下面程序的输出结果是( D)
public class Test{
public static void main(String [] args){
List list=new ArrayList();
list.add(“a”);
list.add(“b”);
list.add(“a”);
Set set=new HashSet();
set.add(“a”);
set.add(“b”);
set.add(“a”);
System.out.println(list.size()+","+set.size());
}
}
A. 2,2
B. 3,3
C. 2,3
D. 3,2
解析:
list存储的元素有顺序,值可以相同;set元素无顺序,值不能重复。

8.下面程序的输出结果是(D )
public class TestDemo {
public static String output ="";
public static void foo(int i){
try{
if(i == 1){
throw new Exception();
}
}catch(Exception e){
output += “2”;
return ;
}finally{
output += “3”;
}
output += “4”;
}

public static void main(String[] args) { 
   foo(0); 
   foo(1); 
   System.out.println(output);
} 

}
A. 3434
B. 342
C. 34234
D. 3423
解析:
静态变量为所有该类的对象所共享
try里没有异常时不执行catch语句块,try里有异常时执行catch语句块(此时除了finally语句块,其余内容不再执行),无论有没有异常,finally语句块都执行。

9.下列哪些情况可以终止当前线程(D )
A. 当一个优先级高的线程进入就绪状态时
B. 当该线程调用sleep()方法时
C. 当创建一个新线程时
D. 当该线程抛出一个异常时
解析:
优先级高的并不一定会马上执行;sleep方法会阻塞一个线程并不会终止;创建一个新的线程时也不会终止另一个线程;当抛出一个异常后程序会结束,所以线程也会被终止。

10.下面程序的输出结果是(A )
public static void main(String args[]) throws InterruptedException{
Thread t = new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.print(“2”);
}
});
t.start();
t.join();
System.out.print(“1”);
}
A. 21
B. 12
C. 21或者12
D. 以上答案都不对
解析:
thread.join()把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的join()方法,直到线程A执行完毕后,才会继续执行线程B。本题中t启动,主线程让t线程先执行,再执行主线程后续代码,因此输出为21

11.下面程序的输出结果是(C )
public class Test {
public static void main(String[] args) {
int a[] = { 0, 1, 2, 3, 4 };
int sum = 0;
try {
for (int i = 0; i < 6; i++) {
sum += a[i];
}
System.out.print(sum);
} catch (java.lang.ArrayIndexOutOfBoundsException e) {
System.out.print(" 数组下标越界");
} finally {
System.out.print(" 程序结束");
}
}
}
A. 10 数组下标越界 程序结束
B. 10 程序结束
C. 数组下标越界 程序结束
D. 程序结束
解析:
数组a的长度为5,而for循环循环6次,当执行sum+=a[5]时程序出现异常,被catch捕获,执行该方法体里的操作,输出“数组下标越界”;finally语句块是一定会被执行的语句块,无论是否出现异常;

12.根据网络七层模型定义,以下不是应用层协议的是( C )
A. TCP
B. HTTP
C. FTP
D. SMTP
解析:
TCP是传输层协议 ,其他是应用层协议

13.URI代表什么含义( C )。
A. 统一资源定位符
B. 统一资源命名符
C. 统一资源标识符
D. 企业资源定位符

14.欲保证元素在集合里没有重复,并且能够按照自然顺序进行访问,以下能满足该功能的是(D)
A. java.util.Map
B. java.util.Set
C. java.util.List
D. java.util.SortedSet
解析:Map用来存放键值对
List集合里的元素有序,允许重复,查询效率高,但是插入删除的效率低下
Set集合里的元素无序,不允许重复,查询效率低,但是插入删除的效率高
SortedSet结合了List和Set的特点,里面的元素既有序又不允许重复

15.下列关于注解的说法正确的是(A )
A.@SuppressWarnings为抑制警告注解,可以带参数
B.@Override 注解修饰的方法为重载方法
C.@Deprecated注解表明该方法已废弃,不能再使用
D.注解可以用在方法上,也可以用在属性上,但不能用在类型上
解析:
@SuppressWarnings为抑制警告注解,通常不带参,但也可以带参数
@Override 注解修饰的方法为重写方法
@Deprecated注解表明该方法已过时,但还是可以使用
注解可以用在方法上,也可以用在属性上,同样可以用在类型上

16.关于序列化的说法不正确的是(D )
A.对象要想持久化到本地磁盘,可通过序列化接口Serializable实现
B.通过实现Serializable或Externalizable接口,对象可被序列化
C.transient修饰的成员不会被序列化
D.static修饰的成员会被序列化
解析:
通过实现Serializable或Externalizable接口,可以实现对象的序列化,如果对象的某些属性不想被序列化,通常有两种做法:一是用transient修饰成员,二是用static修饰成员。

17.下列关于Array和ArrayList的描述不正确的是(B)
A.Array可以包含基本类型和对象类型,ArrayList只能包含对象类型
B.Array和ArrayList的大小都是固定的
C.相对而言,ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等
D. 对于基本类型数据,集合使用自动装箱来减少编码工作量
解析:
Array大小是固定的,ArrayList的大小是动态变化的。

18.下面有关Java线程的说法正确的是( B)
A.wait()方法是Thread类特有的方法
B.任何对象都有wait()方法
C.任何情况下都可以调用任何对象的wait()方法,使当前线程等待
D.只有锁对象有notify()方法,其它对象没有该方法
解析:
wait方法属于Object类的方法,所以任何对象都有wait方法,而不是哪一个类独有。调用对象的wait方法只能使其所在的当前线程等待,而不是让任意线程都能等待。

19.通过ObjectInputStream的readObject()方法读取数据,如何判断流结尾( D )
A.返回-1表示流结尾
B.返回null表示流结尾
C.返回2表示流结尾
D.遇到流结尾将抛出异常
解析:若文件中有若干个Object对象,你用ObjectInputStream中的readObject()去读,何时判读到结尾?
方法之一:(常用的方法)将若干个对象(数量不定)都装入一个容器中(如:ArrayList之类),然后将容器这一个对象写入就行了。读取时,只要读取一个对象(即容器对象)就行了。
方法之二:(若不想用容器),则由于数量不定,正是用EOFException来判断结束。

20.下列哪个方法可以将线程标记为守护线程( B)
A.setPriority
B.setDaemon
C.setName
D.getPriority

21.常见的RuntimeException异常有( ABC )。
A.算术异常(ArithmeticException)
B.空指针异常(NullPointException)
C.数组下标越界异常(ArrayIndexOutOfBoundsException)
D.数据库访问异常(ClassNotFoundException)

22.下列关于异常的描述正确的是( BD )
A.异常结构包括try,catch,finally三部分,使用时三者缺一不可。
B.多重捕获(multi-catch)可以对多个catch语句进行优化。
C.抛出异常有两种形式:throw方法声明时抛出异常,throws手动抛出异常。
D.finally 总会被执行,除非catch中出现了System.exit(1)语句。
解析:
异常处理结构中,仅try结构是必须的,catch和finally保证至少出现一个即可;多重捕获为jdk1.7中新增,可有效替换多个catch语句;throw为手动抛出异常,throws则为方法声明时抛出异常;System.exit(1)将直接终止程序,finally也无法执行。

23.下列有关HashMap和Hashtable说法正确的是(AC )
A. HashMap是线程不安全的,Hashtable是线程安全的
B. HashMap是线程安全的,Hashtable是线程不安全的
C. HashMap 可以允许null作为Key
D. Hashtable 可以允许null作为key

24.已有类org.lanqiao.Student,则获取Student的Class类型实例的方法是(ABD )
A. Class.forName(“org.lanqiao.Student”)
B. Student.class
C. Student.TYPE
D. new Student().getClass()
解析:
仅对于基本数据类型对应的包装类型,获取其Class类型实例的时候,才可以用“类型.TYPE”的形式。

25.下列新建一个流正确的是(ACD )
A. new BufferedWriter(new FileWriter(“a.txt”));
B. new BufferedReader(new FileInputStream(“a.dat”));
C. new GZIPOutputStream(new FileOutputStream(“a.zip”));
D. new ObjectInputStream(new FileInputStream(“a.dat”));
解析:
新建一个流需要注意两点:类型是否匹配,IO方向是否一致。

26.下面关于Java线程描述正确的是( BC )
A. 线程启动的方法是run()
B. 线程启动的方法是start()
C. Java中定义的线程类是java.lang.Thread
D. Java中定义的线程类是java.lang.Runnable
解析:
线程需要通过start方法启动,实现线程有两种选择:一是实现Runnable接口,二是继承Thread类。

27.栈和队列各自的特点是什么?请分别举一个生活化的例子加以说明。

(1).栈:先进后出的线性数据结构,数据的增(入栈)删(出栈)只能在一端操作;比如羽毛球筒,拿出或放入羽毛球,都只能从一端进行,最先放入到筒底的羽毛球必然最后被拿出来。
(2).队列:先进先出的线性数据结构,数据的增(入队)删(出队)发生在队列两端;比如排队买票,排近售票窗口的先买票,后来的只能排到队尾,等前面的人买票后才能买票。

28.请分别对以下各组进行比较,阐明各自的特点和之间的区别。
1)Map、List
2)ArrayList、LinkedList

1)Map: 存储映射关系;
List: 集合中的元素有序可重复,存储单个元素;

2)从数据的逻辑结构角度讲,二者都是线性结构;
从数据的物理结构角度讲,ArrayList为为顺序存储结构,而LinkedList为链式存储结构;
从操作数据的角度讲:ArrayList的优势在于数据的查询,而LinkedList的优势在于数据的增删;

29.简述HashSet是如何去除重复元素?
(1).调用HashCode判断桶位上是否有元素
(2).调用equals比较元素的是否相等。

30.说说常见的检查时异常和运行时异常,分别各举出至少2个。
检查时异常:
ClassNotFoundException
FileNotFoundException
IOException
运行时异常:
NullPointerException
ClassCastException
ArithmeticException
31.反射的过程中,如果获取Class对象,请写出两种或两种以上的方式?
Class.forName(“”)。
对象.getClass()
类.class

32.简述ping命令 和 ipconfig命令 的作用。
(1).ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用ping命令可以检查网络是否连通,帮助我们分析和判定网络故障。
(2).ipconfig命令用于显示所有当前的TCP/IP网络配置值、刷新动态主机配置协议(DHCP)和域名系统(DNS)设置。通过ipconfig命令可以查看适配器的IP地址、子网掩码、默认网关。

33.已知在D盘中有一文本文件名为lanqiao.txt,现编写代码实现把这个文本文件复制到E盘(可以不用考虑异常处理,只写核心代码)

public void copyFile(File fromFile,File toFile) throws IOException{
    FileInputStream ins = new FileInputStream(fromFile);
    FileOutputStream out = new FileOutputStream(toFile);
    byte[] b = new byte[1024];
    int n=0;
    while((n=ins.read(b))!=-1){
        out.write(b, 0, n);
    }
    
    ins.close();
    out.close();
}

34.创建一个线程,在控制台不断输出当前时间,精确到时分秒,每隔一秒输出一次。

public class MyThread extends Thread{

@Override
public void run() {
while(time>0){
System.out.println(“当前时间为:”+new Date().toLocaleString());
//等待1秒.
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}

	}
		}

public static void main(String[] args) {
	new MyThread().start();//启动线程
}

}

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题Java2022面试题、Netty面试题 一、内容概览 本次分享的资源涵盖了Java面试的各个方面,从基础知识到高级技术,从数据库到框架应用,都做了深入的探讨和总结。具体内容包括: Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等与数据库交互的技术。 实战项目经验:分享了几个经典的Java项目,解析了项目的架构设计和核心技术点。 面试经验和技巧:整理了常见的Java面试问题,并给出了答题建议和技巧。 代码和项目实例:提供了多个Java项目的源代码,方便学习者参考和实践。 学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定基础的开发者,都能从中获得启发和帮助。 三、使用建议 系统学习:建议学习者按照资源提供的顺序和内容,系统地学习和掌握Java的知识点。 实践为王:理论知识和实战经验相结合,通过实践来加深理解和记忆。 持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次分享的资源涵盖了Java面试的各个方面,从基础知识到高级技术,从数据库到框架应用,都做了深入的探讨和总结。具体内容包括: Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等与数据库交互的技术。 实战项目经验:分享了几个经典的Java项目,解析了项目的架构设计和核心技术点。 面试经验和技巧:整理了常见的Java面试问题,并给出了答题建议和技巧。 代码和项目实例:提供了多个Java项目的源代码,方便学习者参考和实践。 学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定基础的开发者,都能从中获得启发和帮助。 三、使用建议 系统学习:建议学习者按照资源提供的顺序和内容,系统地学习和掌握Java的知识点。 实践为王:理论知识和实战经验相结合,通过实践来加深理解和记忆。 持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次分享的资源涵盖了Java面试的各个方面,从基础知识到高级技术,从数据库到框架应用,都做了深入的探讨和总结。具体内容包括: Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等与数据库交互的技术。 实战项目经验:分享了几个经典的Java项目,解析了项目的架构设计和核心技术点。 面试经验和技巧:整理了常见的Java面试问题,并给出了答题建议和技巧。 代码和项目实例:提供了多个Java项目的源代码,方便学习者参考和实践。 学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定基础的开发者,都能从中获得启发和帮助。 三、使用建议 系统学习:建议学习者按照资源提供的顺序和内容,系统地学习和掌握Java的知识点。 实践为王:理论知识和实战经验相结合,通过实践来加深理解和记忆。 持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。
Java面试真题60道笔记是一本针对Java开发岗位的面试题集合。本书分为六个部分:基础知识与语法、面向对象、集合类、IO流与多线程、网络编程和数据库基础。每个部分都包括了该领域的常见问题和解答,以及一些实际场景中的应用题目。 在基础知识与语法部分,包括Java的数据类型、算术运算符、流程控制和异常处理等基本语法知识的问题。这些问题有助于检验应聘者对Java语言的熟悉程度。 面向对象部分则关注于类、对象、继承、多态和接口等面向对象的概念。这些问题旨在考察应聘者对面向对象编程的理解和实践经验。 集合类部分包括了常用的集合类容器,如List、Set和Map等,以及它们的特点和应用场景。这些问题可以考察应聘者对Java集合类的熟练掌握程度。 在IO流与多线程部分,问题主要涉及Java中的输入输出流和多线程编程。这些问题可以考察应聘者对Java的并发编程和IO操作的理解和应用能力。 网络编程部分主要涉及Java中的网络通信和Socket编程等知识。这些问题可以考察应聘者对网络编程的了解和实践经验。 最后,数据库基础部分主要涉及Java与数据库交互的知识,包括连接数据库、执行SQL语句和事务管理等内容。这些问题可以考察应聘者对数据库操作和数据持久化的了解和应用能力。 总之,Java面试真题60道笔记是一本综合性的Java面试题集,涵盖了基础知识、面向对象、集合类、IO流与多线程、网络编程和数据库基础等方面的内容,有助于应聘者在面试中更好地展示自己的技能和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值