【黑马程序员】2020年Java面试题(上)
黑马程序员免费视频库:https://www.sodocs.net/doc/9214441788.html,?2020sxkyk
据官方数据统计,在全球编程语言工程师的数量上,JavaEE 以900 万的程序员数
量位居首位,很多软件的开发都离不开它。
自从黑马程序员授课以来,深受社会上广大编程爱好的喜爱,我们的课程一直被
其他机构争相模仿,我们坚信只有教育机构自身能力的不断提升,才能带动整体
教育行业的前进。根据黑马程序员毕业学员面试经验,整理100 家IT 名(阿里、百度、腾讯、)企面试题,黑马程序员为了帮助更多爱好并想学习编程的同学,
整理了这篇资源帖子,只为帮助更多的人受益。
更多(Java、android、大数据、python、前端、iOS、PHP)课程讲义源码
加QQ:1679806262
1.什么是Java 虚拟机?为什么Java 被称作是“平台无关的编程语言”?
Java 虚拟机是一个可以执行Java 字节码的虚拟机进程。Java 源文件被编译成能被Java
虚拟机执行的字节码文件。
Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长
度和其他特性。
2.JDK 和JRE 的区别是什么?
Java 运行时环境(JRE)是将要执行Java 程序的Java 虚拟机。它同时也包含了执行applet 需要的浏览器插件。Java 开发工具包(JDK)是完整的Java 软件开发包,包含了JRE,
编译器和其他的工具(比如:JavaDoc,Java 调试器),可以让开发者开发、编译、执行Java
应用程序。
3.”static”关键字是什么意思?Java 中是否可以覆盖(override)一个private 或者
是static 的方法?
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java 中static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static 方法是编译时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。
4.是否可以在static 环境中访问非static 变量?
static 变量在Java 中是属于类的,它在所有的实例中的值是一样的。当类被Java 虚拟机载入的时候,会对static 变量进行初始化。如果你的代码尝试不用实例来访问非static
的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
5.Java 支持的数据类型有哪些?什么是自动拆装箱?
Java 语言支持的8 中基本数据类型是:
byte
short
int
long
float
double
boolean
char
自动装箱是Java 编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int 转化成Integer,double 转化成double,等等。反之就是自动拆箱。
更多(Java、android、大数据、python、前端、iOS、PHP)课程讲义源码
加QQ:1679806262
6.Java 中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
Java 中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方
法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。
7.Java 中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java 编译器会为这个类创建一个默认的构造函数。
Java 中构造函数重载和方法重载很相似。可以为一个类创建多个构造函数。每一个构造函数必须有它自己唯一的参数列表。
Java 不支持像C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数
的情况下,Java 不会创建默认的复制构造函数。
8.Java 支持多继承么?
不支持,Java 不支持多继承。每个类都只能继承一个类,但是可以实现多个接口。
9.接口和抽象类的区别是什么?
Java 提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类
类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java 接口中声明的变量默认都是final 的。抽象类可以包含非final 的变量。
Java 接口中的成员函数默认是public 的。抽象类的成员函数可以是private,protected 或者是public。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main 方法的话是可以被调用的。
更多(Java、android、大数据、python、前端、iOS、PHP)课程讲义源码
加QQ:1679806262
10.什么是值传递和引用传递?
对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。
对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。
Java 线程
11.进程和线程的区别是什么?
进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。
12.创建线程有几种不同的方式?你喜欢哪一种?为什么?
有三种方式可以用来创建线程:
继承Thread 类
实现Runnable 接口
应用程序可以使用Executor 框架来创建线程池
实现Runnable 接口这种方式更受欢迎,因为这不需要继承Thread 类。在应用设计中已
经继承了别的对象的情况下,这需要多继承(而Java 不支持多继承),只能实现接口。同
时,线程池也是非常高效的,很容易实现和使用。
更多(Java、android、大数据、python、前端、iOS、PHP)课程讲义源码
加QQ:1679806262
13.概括的解释下线程的几种可用状态。
线程在执行过程中,可以处于下面几种状态:
就绪(Runnable):线程准备运行,不一定立马就能开始执行。
运行中(Running):进程正在执行线程的代码。
等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。
睡眠中(Sleeping):线程被强制睡眠。
I/O 阻塞(Blocked on I/O):等待I/O 操作完成。
同步阻塞(Blocked on Synchronization):等待获取锁。
死亡(Dead):线程完成了执行。
14.同步方法和同步代码块的区别是什么?
在Java 语言中,每一个对象有一把锁。线程可以使用synchronized 关键字来获取对象
上的锁。synchronized 关键字可应用在方法级别(粗粒度锁)或者是代码块级别(细粒度锁)。
15.在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
监视器和锁在Java 虚拟机中是一块使用的。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。每一个监视器都和一个对象引用相关联。线程在获取锁之前不
允许执行同步代码。
16.什么是死锁(deadlock)?
两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。
17.如何确保N 个线程可以访问N 个资源同时又不导致死锁?
使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不
会出现死锁了。
Java 集合类
更多(Java、android、大数据、python、前端、iOS、PHP)课程讲义源码
加QQ:1679806262
18.Java 集合类框架的基本接口有哪些?
Java 集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java 集合类里面最基本的接口有:
Collection:代表一组对象,每一个对象都是它的子元素。
Set:不包含重复元素的Collection。
List:有顺序的collection,并且可以包含重复元素。
Map:可以把键(key)映射到值(value)的对象,键不能重复。
19.为什么集合类没有实现Cloneable 和Serializable 接口?
集合类接口指定了一组叫做元素的对象。集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序。有的集合类允许重复的键,有些不允许。
20.什么是迭代器(Iterator)?
Iterator 接口提供了很多对集合元素进行迭代的方法。每一个集合类都包含了可以返回迭代器实例的
迭代方法。迭代器可以在迭代的过程中删除底层集合的元素。
克隆(cloning)或者是序列化(serialization)的语义和含义是跟具体的实现相关的。因此,应该由集合类的具体实现来决定如何被克隆或者是序列化。
21.Iterator 和ListIterator 的区别是什么?
下面列出了他们的区别:
Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。
Iterator 对集合只能是前向遍历,ListIterator 既可以前向也可以后向。
ListIterator 实现了Iterator 接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。
22.快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
Iterator 的安全失败是基于对底层集合做拷贝,因此,它不受源集合上修改的影响。
java.util 包下面的所有的集合类都是快速失败的,而java.util.concurrent 包下面的所
有的类都是安全失败的。快速失败的迭代器会抛出ConcurrentModificationException 异
常,而安全失败的迭代器永远不会抛出这样的异常。
更多(Java、android、大数据、python、前端、iOS、PHP)课程讲义源码
加QQ:1679806262
23.Java 中的HashMap 的工作原理是什么?
Java 中的HashMap 是以键值对(key-value)的形式存储元素的。HashMap 需要一个hash
函数,它使用hashCode() 和equals()方法来向集合/从集合添加和检索元素。当调用put()
方法的时候,HashMap 会计算key 的hash 值,然后把键值对存储在集合中合适的索引上。
如果key 已经存在了,value 会被更新成新值。HashMap 的一些重要的特性是它的容量
(capacity),负载因子(load factor)和扩容极限(threshold resizing)。
24.hashCode()和equals()方法的重要性体现在什么地方?
Java 中的HashMap 使用hashCode()和equals()方法来确定键值对的索引,当根据键获
取值的时候也会用到这两个方法。如果没有正确的实现这两个方法,两个不同的键可能会
有相同的hash 值,因此,可能会被集合认为是相等的。而且,这两个方法也用来发现重复
元素。所以这两个方法的实现对HashMap 的精确性和正确性是至关重要的。
25.HashMap 和Hashtable 有什么区别?
HashMap 和Hashtable 都实现了Map 接口,因此很多特性非常相似。但是,他
们有以下不同点:
HashMap 允许键和值是null,而Hashtable 不允许键或者值是null。
Hashtable 是同步的,而HashMap 不是。因此,HashMap 更适合于单线程环境,
而Hashtable 适合于多线程环境。
HashMap 提供了可供应用迭代的键的集合,因此,HashMap 是快速失败的。另一方面,Hashtable 提供了对键的列举(Enumeration)。
o 一般认为Hashtable 是一个遗留的类。
26.数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array 而不是
ArrayList?
下面列出了Array 和ArrayList 的不同点:
Array 可以包含基本类型和对象类型,ArrayList 只能包含对象类型。
Array 大小是固定的,ArrayList 的大小是动态变化的。
ArrayList 提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。
27.ArrayList 和LinkedList 有什么区别?
ArrayList 和LinkedList 都实现了List 接口,他们有以下的不同点:
ArrayList 是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList 是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。
相对于ArrayList,LinkedList 的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
LinkedList 比ArrayList 更占内存,因为LinkedList 为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。
更多(Java、android、大数据、python、前端、iOS、PHP)课程讲义源码
加QQ:1679806262
https://www.sodocs.net/doc/9214441788.html,parable 和Comparator 接口是干什么的?列出它们的区别。
Java 提供了只包含一个compareTo()方法的Comparable 接口。这个方法可以个给两个
对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的
对象。
Java 提供了包含compare()和equals()两个方法的Comparator 接口。compare()方法
用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个
参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator 相等。
只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的
时候,这个方法才返回true。
29.什么是Java 优先级队列(Priority Queue)?
PriorityQueue 是一个基于优先级堆的无界队列,它的元素是按照自然顺序(natural order)排序的。在创建的时候,我们可以给它提供一个负责给元素排序的比较器。
PriorityQueue 不允许null 值,因为他们没有自然顺序,或者说他们没有任何的相关联的
比较器。最后,PriorityQueue 不是线程安全的,入队和出队的时间复杂度是O(log(n))。
30.你了解大O 符号(big-O notation)么?你能给出不同数据结构的例子么?
大O 符号描述了当数据结构里面的元素增加的时候,算法的规模或者是性能在最坏的场
景下有多么好。
大O 符号也可用来描述其他的行为,比如:内存消耗。因为集合类实际上是数据结构,我们
一般使用大O 符号基于时间,内存和性能来选择最好的实现。大O 符号可以对大量数据的性
能给出一个很好的说明。
黑马程序员训练营入学考试题 1、写一个ArrayList类的代理,实现和ArrayList中完全相同的功能,并可以计算每个方法运行的时间。 2、ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList 中存放一个String类型的对象。 3、定义一个交通灯枚举,包含红灯、绿灯、黄灯,需要有获得下一个灯的方法,例如:红灯获取下一个灯是绿灯,绿灯获取下一个灯是黄灯。 4、一个ArrayList对象aList中存有若干个字符串元素,现欲遍历该ArrayList对象,删除其中所有值为"abc"的字符串元素,请用代码实现。
5、编写一个类,增加一个实例方法用于打印一条字符串。并使用反射手段创建该类的对象,并调用该对象中的方法。 6、有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常,在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常。在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕捉异常的信息。完成这个例子,请说出java中针对异常的处理机制。 7、存在一个JavaBean,它包含以下几种可能的属性: 1:boolean/Boolean 2:int/Integer 3:String 4:double/Double 属性名未知,现在要给这些属性设置默认值,以下是要求的默认值: String类型的默认值为字符串https://www.sodocs.net/doc/9214441788.html,
int/Integer类型的默认值为100 boolean/Boolean类型的默认值为true double/Double的默认值为0.01D. 只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现 8、定义一个文件输入流,调用read(byte[] b)方法将exercise.txt文件中的所有内容打印出来(byte数组的大小限制为5,不考虑中文编码问题)。 9、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。
<测试一> 1.在单一文件中import、class和package的正确出现顺序是:A A.package, import, class B.class, import, package C.import, package, class D.package, class, import 2.public static void main方法的参数描述是:A,D A.String args[] B.Strings args[] C.String args D.String []args 3.下面哪行代码会在编译的时候出现错误或警告:A,B,C,D A.float f=1.3; B.char c="a"; C.byte b=257; D.boolean b=null; E.int i=10; 4.编译,运行下列代码后的结果是:D public class Test { public static void main (String args []) { int age; age = age + 1; System.out.println("The age is " + age); } } A.编译,运行后没有输出 B.编译,运行后输出:The age is 1 C.能通过编译,但运行时产生错误 D.不能通过编译 4.下面那些关键字不是JAVA的关键字B A if B then C goto D while E case 5.下面那些不是合法的变量定义:A,F A.2variable B.variable2 C. _whatavariable
D. _3_ E. $anothervar F. #myvar 6.内部数据类型byte的取值范围是B A.0 - 65, 535 B.(–128) – 127 C.(–32,768) – 32,767 D.(–256) – 255 7.下列哪些表达式返回true AB A."john" == "john" B."john".equals("john") C."john" = "john" D."john".equals(new Button("john")) 8.声明公用的abstract方法的正确格式是A A.public abstract void add(); B.public abstract void add() {} C.public abstract add(); D.public virtual add(); 9.下面的代码能打印出的结果为:C int i=1; switch (i) { case 0: System.out.println("zero"); break; case 1: System.out.println("one"); case 2: System.out.println("two"); default: System.out.println("default"); } A.one B.one, default C.one, two, default D.default 10.下面的代码能打印出的结果为:B int i=9; switch (i) { default: System.out.println("default");
IO 部分测试题 考试宣言: 同学们, 考试考多少分不是我们的目的! 排在班级多少的名次也不是我们的初衷! 我们考试的目的是要通过考试中的题目,检查大家在这段时间的学习中,是否已经把需要掌握的知识掌握住了,如果哪道题目你不会做,又或者做错了, 那么不用怕, 考完试后, 导师讲解的时候你要注意听! 那时候学会了, 记住了, 也一样不影响你高薪就业! 本套题共40道不定项选择题,其中单选30道,多选10道。单选2分/题,多选4分/题。多选题不全对半分,全对满分。 1.下列叙述中,正确的是 ( ) A. Reader是一个读取文本文件的接口 B. Reader是读取二进制数据文件的抽象类 C. Reader是一个读取文本文件的抽象类 D. Reader是读取二进制数据文件的一般类 2.下面关于IO流的说法正确的是( ) A. IO流可以分为字节流和字符流 B. FileReader和FileWriter是专门用于读取和写入文本文件的 C. 顶层类有InputStream和OutputStream D. 顶层类有Reader和Writer,他们都是接口//抽象类 3.FileReader类描述正确的是( ) A. 字节输入流 B. 字符输入流//没什么说的,记住吧 C. 打印流 D. 序列化流 4.下列关键字能和try一起使用的有( )
A. final B. finalize C. finally D. catch 5.具有readLine()方法的类是( ) A. FileWriter B. InputStreamReader C. FileReader D. BufferedReader // readLine()方法是缓冲流BufferedReader的特有方法 6.关于newLine()方法描述错误的是( ) A. newLine()方法写入换行 B. newLine()方法会根据不同操作系统自动选择使用相应的换行符 C. newLine()方法是FileWiter类的方法 D. newLine()方法是BufferedWriter类的方法// 这个也是特有方法. 7.实现下列哪个接口,可以启用序列化功能( ) A. Runnable接口 B. Comparable接口 C. Serializable接口// 这个记住吧 D. Comparator接口 8.以下关于java异常说法不正确的是()。 A. Throwable 类是 Java 语言中Error类和Exception类的父类。 B. 当异常对象是Exception类(或其子类)的实例时,能通过 Java 虚拟机或者 throw 语句抛出该异常对象,并能通过try…catch…finally处理。 C. jdk6(包括jdk6)之前,如果只用一个catch块捕捉多个异常对象,则catch 子句中 的参数类型应是所有存在的异常对象的父类。 D. 以上说法都不对。 9.字节输出流的抽象基类是( ) A. OutputStream类 //记住吧,没什么说的. B. InputStream类 C. Writer类 D. Reader类 10.下面程序的运行结果是( )
传智播客-Java基础知识测试-初测(带答案)
答题格式: 1 - 30题为单选题, 31 - 40为多选题. 新建一个txt文件, 答案写在这个文件中. 答案必须保存为txt格式的文件。 答题的时候,可以在EditPlus上答题,会自动显示题目序号 文件名改为自己的名字, 每题一行. 多选题按abcd的顺序填答案, 比如某一题的答案acd, 就必须是acd, 不能是adc等等. 不能有空行, 不能有空格,不能有题目序号,一定不要某一题不会就空在那, 会导致后面的答案全都识别错了! 填完答案数一下, 不要填挪了!!! 共40道选择题,每题2.5分。多选题有错则全错,全对才满分.
单选题: 1. 下列哪个声明是错误的?() A. int i=10; B. byte b=127; C. float f=1.1; //1.1f D. double d=34.4; 2. 下面哪个不是java中的关键字?() A. public B. true C. class D. main 3. 下面哪个语句不会产生编译错误?() A. float a =2.0; //2.0f B. byte b =25; C. char c =”a”; D. boolean d=0; 4. 下面程序哪个语句是正确的()
A. byte a=0,b=3; byte c =a+b; B. short s =23; s=s+12; C. float f = 23+23.23; D. short s=23; s+=12; 5. byte类型的大小是() A. -228 ~128 B. -255 ~ 256 C. -128 ~ 127 D. -255 ~ 255 6. 下面程序执行的结果是?() int i = 100; while(true) { If ( i++ > 100 ) break; System.out.println(i); } A. 100 B. 101
黑马程序员java培训就业班笔记day05总结
Day05 上午: 1、数组的静态初始化 多种定义格式: Int[] arr=new int[]//标准格式,能够明确数组的数据类型,和数组名,可是不知道数组的长度Int arr[]=new int[] Int[] arr=new int[]{2,1,3,4,5,}//经过大括号能够标示出数组中的内容,此处最好别写长度,因为容易出错,因为即初始化实体,又初始化实体中的元素。 Int[] arr={2,1,3,4,5};//能够明确数组的数据类型,和数组名,也能够知道数组中的内容。 2、arr.length:方便获取数组中的元素个数的方式。 3、操作数组的最基础的思想以及核心思想: a)最基础的思想:就是遍历。什么是遍历。 Eg:int[] arr = new int[3]; int[] arr = {4,8,9,2,6,9};//明确了数组的类型和长度,并明确了数组中元素的内容。 // int[] arr1 = new int[]{4,8,9}; //方便获取数组中的元素个数的方式,
能够使用数组实体一个属性。length System.out.println("len:"+arr.length); for(int x=0; x 1.定义一个交通灯枚举,包含红灯、绿灯、黄灯,需要有获得下一个灯的方法; 例如:红灯获取下一个灯是绿灯,绿灯获取下一个灯是黄灯。 public enum Lamp { RED("GREEN"),GREEN("YELLOW"),YELLOW("RED"); private String next; private Lamp(String next){ this.next = next; } public Lamp nextLamp(){ return Lamp.valueOf(next); } } 2、写一个ArrayList类的代理,实现和ArrayList中完全相同的功能,并可以计算每个方法运行的时间。 public class test1 { public static void main(String[] args) { final ArrayList target = new ArrayList(); List proxy = (List)Proxy.newProxyInstance( List.class.getClassLoader(), ArrayList.class.getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { long beginTime = System.currentTimeMillis(); Thread.sleep(10); Object reVal = method.invoke(target, args); long endTime = System.currentTimeMillis(); System.out.println(method.getName()+" runing time is "+(endTime-beginTime)); return reVal; } }); proxy.add("nihaoa"); proxy.add("nihaoa"); 考试题目: 本试卷是JAVA基础班入学考试试卷,主要考察JAVA基础前五天大家在入学之前掌握的一个整体情况,本试卷共有40道题,其中有30道是单选,有10道题是多选题,希望大家认真对待 1.Sun公司对Java语言的宣传口号为“一次编程,到处执行”,体现了Java的什么特性B A:编程的简单性 B:与平台无关性 C:Java的面向对象特性 D:Java程序的鲁棒性 2.Java平台有三个版本,分别是javaSE、JavaME、javaEE,下列说法不正确的是B A.javaSE是指Java语言的标准版 B.javaME是指Java语言的标准版 C.javaEE是指企业级的Java开发语言,是为企业提供服务的 D. javaME是为机顶盒、移动电话和PDA之类嵌入式消费电子设备提供的Java语言平台,包括虚拟机和一系列标准化的Java API. 3.想要运行Java程序,必须得先通过______Java源文件,然后再通过______java程序C A. javaw工具编译 javac工具运行 B. java工具编译 javac工具运行 C. javac工具编译 java工具运行 D. java工具编译 java工具编译 4.Java语言中的int及char数据类型的长度分别为C A:16位和8 位 B:8位和16位 C:32位和16位 D:32位和8位 5.请问byte数据的取值范围是?C A:0-128 B:负127-128 C:负128-127 D:以上都不对 6.java语言的源程序经编译后所生成的程序类型为D A:.exe 型的可执行程序 B:.obj 型二进制的程序 C:.lib 型二进制的库程序 D:.class 型类代码的程序 7.某java程序的类定义如下: B class MyClass { } 则java源文件编译后生成的类文件名称为: A:myclass.class B:MyClass.class C:MYCLASS.class D:MyClass.java 8.下列那种标识符在java程序中是错误的D A:MyClass_Base12 B:_MyClass$Base12 C:$MyClass_12 D:76MyClass$12 9.下列那种标识符不能作为java程序中的变量名B A:INT B:boolean C:character D:Java_Float 10.请问,以下哪些语句不是合法的赋值语句?D A:boolean b = true; B:int a = (int)1.23; C:double x = 1.1; D:char c = '10'; 精品文档 IO 部分测试题 考试宣言: 同学们, 考试考多少分不是我们的目的! 排在班级多少的名次也不是我们的初衷! 我们考试的目的是要通过考试中的题目,检查大家在这段时间的学习中,是否已经把需要掌握的知识掌握住了,如果哪道题目你不会做,又或者做错了, 那么不用怕, 考完试后, 导师讲解的时候你要注意听! 那时候学会了, 记住了, 也一样不影响你高薪就业! 本套题共40道不定项选择题,其中单选30道,多选10道。单选2分/题,多选4分/题。多选题不全对半分,全对满分。 ( )下列叙述中,正确的是1. A. Reader是一个读取文本文件的接口 B. Reader是读取二进制数据文件的抽象类 C. Reader是一个读取文本文件的抽象类 D. Reader是读取二进制数据文件的一般类 2.下面关于IO流的说法正确的是( ) A. IO流可以分为字节流和字符流 B. FileReader和FileWriter是专门用于读取和写入文本文件的 C. 顶层类有InputStream和OutputStream D. 顶层类有Reader和Writer,他们都是接口//抽象类 3.FileReader类描述正确的是( ) A. 字节输入流 B. 字符输入流//没什么说的,记住吧 C. 打印流 D. 序列化流 4.下列关键字能和try一起使用的有( ) A. final 精品文档. 精品文档 B. finalize C. finally D. catch 5.具有readLine()方法的类是( ) A. FileWriter B. InputStreamReader C. FileReader D. BufferedReader // readLine()方法是缓冲流BufferedReader的特有方法 6.关于newLine()方法描述错误的是( ) A. newLine()方法写入换行 B. newLine()方法会根据不同操作系统自动选择使用相应的换行符 C. newLine()方法是FileWiter类的方法 D. newLine()方法是BufferedWriter类的方法// 这个也是特有方法. 7.实现下列哪个接口,可以启用序列化功能( ) A. Runnable接口 B. Comparable接口 C. Serializable接口// 这个记住吧 D. Comparator接口 8.以下关于java异常说法不正确的是()。 A. Throwable 类是 Java 语言中Error类和Exception类的父类。 B. 当异常对象是Exception类(或其子类)的实例时,能通过 Java 虚拟机或者 throw 语句抛出该异常对象,并能通过try…catch…finally处理。 C. jdk6(包括jdk6)之前,如果只用一个catch块捕捉多个异常对象,则catch 子句中的参数类型应是所有存在的异常对象的父类。 D. 以上说法都不对。 9.字节输出流的抽象基类是( ) A. OutputStream类 //记住吧,没什么说的. B. InputStream类 C. Writer类 D. Reader类 黑马程序员基础测试题 1、已知一个int数组, 编程从数组中获取最大数. 2、编写一个方法(名字自定,但要符合Java编码规范),方法内打印一字符串,并在main()方法内调用它。 3、环境变量path和classpath的作用是什么? 系统环境 path 为了更方便应用java 开发工具将要执行命令的所在路径给系统、让系统去寻找方便执行、必须是可执行文件先找当前路径再找path 路径临时配置方式通过set 命令完成、设置查看环境变量的值在path环境变量的基础上添加新的目录在任意目录下执行java 执行程序专门给类文件设置路 径将class 文件所在目录告诉系统,让系统去寻找虚拟机先从classpath 寻找 4、 UDP协议与TCP协议有什么不同? 5、编写一个类Person,为Person类定义年龄、姓名两个属性,并且定义一个SayHello方法,方法执行时输出“我是***我的年龄是***”;定义一个Chinese 类从Person类继承。 6、创建一个包含有private的属性和private方法的类。然后创建一个内部类,它有一个方法可用来修改外部类的属性,并调用外部类的方法。在外部类的另一个方法中,创建此内部类的对象,并且调用它的方法。 7、用控制台程序输出九九乘法表;输出结果按下图所示: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 ......... 8、编写程序拷贝一个文件, 尽量使用效率高的方式. 9、编写HTML注册表单, 需要字段: 用户名, 密码, 确认密码, 性别(单选), 城市(下拉列表), 兴趣爱好(多选), 个人简介(文本域). 10、定义一个学生类, 需要有姓名, 年龄, 考试成绩三个成员属性,创建5个对象, 属性可为任意值. 编程对这5个对象按成绩排序,并将结果输出。(提示,用TreeSet和Comparator实现) 考试宣言: 同学们, 考试考多少分不是我们的目的! 排在班级多少的名次也不是我们的初衷! 我的考试的目的是要通过考试中的题目,检查大家在这段时间的学习中,是否已经把需要掌握的知识掌握住了,如果哪道题目你不会做,又或者做错了, 那么不用怕, 考完试后, 导师讲解的时候你要注意听! 那时候学会了, 记住了, 也一样不影响你高薪就业! 本套题共40道不定项选择题,其中单选30道,多选10道。单选2分/题,多选4分/题。多选题不全对半分,全对满分。 1.下面说法正确的是() A. JVM就是Java虚拟机,包含java核心类库// JRE: JVM+Java library。 B. JRE就是java运行环境,包含java程序编译运行的工具环境// JDK:JRE+Tools C. JDK就是java开发环境,javac是其中的一个工具 D. 功能范围:JDK > JVM > JRE 2.下面的说法正确的是( ) A. Java 语言是面向对象的、解释执行的网络编程语言。 B. Java 语言具有可移植性,是与平台无关的编程语言。 C. Java 语言可对内存垃圾自动收集。 D. Java 语言编写的程序虽然是“一次编译,到处运行”,但必须要java的运行环境。 3.给定java代码,如下: public byte count(byte b1, byte b2){ return ____; } 要使这段代码能够编译成功,横线处可以填入 A. (byte)(b1-b2) //返回值类型为byte,要求选项结果为byte B. b1-b2 C. (byte)b1+b2 D. (byte)b1/b2 4.关于类的命名,正确说法是() A. 可以由数字和英文拉丁字母组成,且可以任意排序//数字不能开头 B. 命名要做到见名知意 C. 如果是由多个单词组成,每个单词首字母大写 D. 可以是Java已经定义过的关键字//囧 5.关于main方法说法错误的是() A.main方法是java程序执行的入口 B.main方法的方法体至少要有一行代码//可以没有代码 C.main必须定义在一个类中 D. main方法的定义格式为:public static void main(String[] args){} 6.类中某方法定义如下: double fun(int a,int b){ return a*1.0/b; } 同一类内其它方法调用该方法的正确方式是: A. double a = fun(1,2); B. double a = fun(1.0,2.0); C. int x = fun(1,2); D. int x = fun(1.0,2.0); 7.给定java代码,如下,编译运行,结果是() public static void main(String[] args){ boolean flag; System.out.println(“flag”+flag);//局部变量需要先初始化再使用 } A. 编译错误 B. 编译通过,单出现运行时错误 C. 正常运行,输出flag=false D. 正常运行,输出flag= 8.下面哪个关键字可以定义一个类() A. interface B. class //查看下面解释 C. extends D. implements 在Oracle官网java英文原版教程,链接地址: https://https://www.sodocs.net/doc/9214441788.html,/javase/tutorial/java/IandI/createinterface.html上有如下解释:In the Java programming language, an interface is a reference type,similar to a class, that can contain only constants, 【黑马程序员】Java笔试中常见的问题及经典答案1、java中实现多态的机制是什么? 答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。 2、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收 答:对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。 3、静态变量和实例变量的区别? 答:static i = 10; //常量class A a; a.i =10;//可变 4、什么是java序列化,如何实现java序列化? 答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。 序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。 5、是否可以从一个static方法内部发出对非static方法的调用?答:不可以,如果其中包含对象的method();不能保证对象初始化. 6、写clone()方法时,通常都有一行代码,是什么? 答:Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。 7、在JAVA中,如何跳出当前的多重嵌套循环? 答:用break; return 方法。 【黑马程序员】面试中常见Java面试题 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 类的常用方法都有那些? 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); // true System.out.println(x==z); // false System.out.println(x.equals(y)); // true System.out.println(x.equals(z)); // true 代码解读:因为x 和y 指向的是同一个引用,所以== 也是true,而new String()方法则重写开辟了内存空间,所以== 结果为false,而equals 比较的一直是值,所以结果都为true。 equals 解读 equals 本质上就是==,只不过String 和Integer 等重写了equals 方法,把它变成了值比较。看下面的代码就明白了。 首先来看默认情况下equals 比较一个有相同值的对象,代码如下: class Cat { public Cat(String name) { https://www.sodocs.net/doc/9214441788.html, = name; } private String name; public String getName() { return name; 【黑马程序员】Java面试种常见的编程代码笔试题《java基础教程(编程就像打字一样简单)》 完整视频:https://www.sodocs.net/doc/9214441788.html,/course/375.html?1912sxkqq 课程资料:https://https://www.sodocs.net/doc/9214441788.html,/s/1OSl2X8SgQue67KCg-ZZ5Gg 提取码:78lv 1、可能会让你写一段Jdbc连Oracle的程序,并实现数据查询. 答:程序如下: package hello.ant; import java.sql.*; public class jdbc { String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl"; String theUser="admin"; String thePw="manager"; Connection c=null; Statement conn; ResultSet rs=null; public jdbc() { try{ Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); c = DriverManager.getConnection(dbUrl,theUser,thePw); conn=c.createStatement(); }catch(Exception e){ e.printStackTrace(); } } public boolean executeUpdate(String sql) { try { conn.executeUpdate(sql); return true; } catch (SQLException e) { e.printStackTrace(); return false; } } public ResultSet executeQuery(String sql) { 传智播客java就业班入学测试题 共50道题,每道题2分,总分100分,80分为合格。 注意,题目有多选,也有单选。请认真作答。 1.在JAVA中,下列哪些说法是正确的(ac ) A.java源文件的扩展名为.java B.写好的java源程序可以直接运行 C.编写的源程序必须先编译后才能运行 D.程序员可以读懂扩展名为.class的文件 2.下列标识符哪个是合法的(bd ) A.class B.$abc C.1234 D._name 3.下面哪些赋值语句是正确的?(abd ) A. long test = 012; //八进制0,二进制0b,十六禁止0x B. float f = -412; C. int other = (int) true; //不可以转换 D. double d = 0x12345678; E. byte b = 128; //损失精度 4.在Java中,下列语句不能通过编译的有( ac) A. String s= “join”+ 3; B. int a= “join”+3; C. int a= …a?+5; D. float f=5+5.5; 5.设 a = 3,则表达式 (--a )< if(x++>4 & ++y>5) { x++; } System.out.println("x=" + x + ",y=" + y); } A. x=4,y=5 B. x=4,y=6 C. x=5,y=6 D. x=6,y=6 7.尝试运行下面的代码会发生什么?( b) public class Test { public static void main(String[] args) { boolean m = true; if (m = false) { System.out.println("true"); } else { System.out.println("false"); } } } A. 输出字符串”true” B. 输出字符串”false” C. 编译时错误 D. 运行时错误 8.编译并运行以下代码将发生什么?( d) public static void main(String args[]){ char digit = 'a'; for (int i = 0; i < 10; i++){ switch (digit) { case 'x' : { int j = 0; System.out.println(j); } default : { int j = 100; System.out.println(j); } } String类 --练习(一) 1、给定一个字符串数组,按照字典顺序进行从小到大的排序。{"nba","abc","cba","zz","qq","haha"} 思路: ①对数组排序,可以用选择,冒泡都行。 ②for嵌套、比较以及换位。 ③使用String类中提供的用于字符串比较的功能进行比较。 代码: 1.public class StringTest{ 2. public static void main(String[] args){ 3. String[] arr = { "nba","abc" ,"cba" ,"zz" ,"qq" ,"haha" }; 4. 5. printArray(arr); 6. sortString(arr); 7. printArray(arr); 8. } 9. 10. public static void printArray(String[] arr){ 11. System.out.print( "["); 12. for(int i = 0; i < arr.length; i++){ 13. if(i != arr.length -1) 14. System.out.print(arr[i] + ","); 15. else 16. System.out.println(arr[i] + "]"); 17. } 18. } 19. 20. public static void sortString(String[] arr){ 21. for(int i = 0; i < arr.length - 1; i++){ 22. for(int j = i + 1; j < arr.length; j++){ 23. if(arr[i].compareTo(arr[j])>0){ 24. swap(arr,i,j); 25. } 26. } 27. } 28. } 29. 30. private static void swap(String arr[],int i, int j){ 31. String temp = arr[i]; 32. arr[i] = arr[j]; 33. arr[j] = temp; 34. } 35.} 36. 运行结果: 2、一个子串在整串中出现的次数"nbaernbatynbauinbaopnba" 思路: ①要找的子串是否存在,如果存在获取其出现的位置,这个可以使用indexOf 完成。 Java就业班第二阶段测试题2005-7-20 姓名:分数: 一、选择题 1.给定下列代码,哪一种请求方法将被调用? 2020年Java面试题50道Java面试题 黑马程序员免费视频库:https://www.sodocs.net/doc/9214441788.html,?2020sxkyk 以下的内容是对原有的和最近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)和用户自定义类加载器(https://www.sodocs.net/doc/9214441788.html,ng.ClassLoader的子类)。从JDK 1.2开始,类加载过程采取了父亲委托机制(PDM)。PDM更好的保证了Java平台的安全性,在该机制中,JVM 自带的Bootstrap是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。JVM不会向Java程序提供对Bootstrap的引用。下面是关于几个类加载器的说明: a)Bootstrap:一般用本地代码实现,负责加载JVM基础核心类库(rt.jar); b)Extension:从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是Bootstrap; c)System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中记载类,是用户自定义加载器的默认父加载器。 黑马程序员视频库网址:https://www.sodocs.net/doc/9214441788.html,(海量热门编程视频、资料免费学习) 学习路线图、学习大纲、各阶段知识点、资料网盘免费领取+QQ 3285264708 / 3549664195 22、char 型变量中能不能存贮一个中文汉字?为什么? 答:char类型可以存储一个中文汉字,因为Java中使用的编码是Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个char类型占2个字节(16bit),所以放一个中文是没问题的。黑马入学测试题答案(整理).(DOC)
黑马Java基础入学测试题_
黑马Java IO知识测试附答案
黑马程序员基础测试题
【黑马基础班考试题】1.Java基础知识测试_答案
【黑马程序员】Java笔试中常见的问题及经典答案
【黑马程序员】面试中常见Java面试题
【黑马程序员】Java面试种常见的编程代码笔试题
黑马就业班java测试题
黑马程序员Java教程:String类-练习(一)
Java就业班第二阶段测试题
2020年Java面试题50道Java面试题