考点1

哪个关键字可以对对象加互斥锁?()

  • A synchronized
  • B volatile
  • C serialize
  • D static

解析

显示答案/隐藏答案正确答案: A

synchronized关键字

用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个段代码。

volatile

用来确保将变量的跟新操作通知到其他线程,当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。然而,在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比 synchronized关键字更轻量级的同步机制。

考点2

下面代码的执行结果是 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Chinese{
private static Chinese objref =new Chinese();
private Chinese(){
}
public static Chinese getInstance() {
return objref;
}
}
public class TestChinese {
public static void main(String [] args) {
Chinese obj1 = Chinese.getInstance();
Chinese obj2 = Chinese.getInstance();
System.out.println(obj1 == obj2);
}
}
  • A true
  • B false
  • C TRUE
  • D FALSE

解析

显示答案/隐藏答案正确答案: A

这是饿汉式单例模式,在类创建时,就已经实例化完成

考点3

假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Base{
public void methodOne(){
System.out.print("A");
methodTwo();
}
public void methodTwo(){
System.out.print("B");
}
}
public class Derived extends Base{
public void methodOne(){
super.methodOne();
System.out.print("C");
}
public void methodTwo(){
super.methodTwo();
System.out.print("D");
}
}
  • A ABDC
  • B AB
  • C ABCD
  • D ABC

解析

显示答案/隐藏答案正确答案: A

这是一道类多态的向上转型题。
Base b = new Derived();
向上转型:父类只能调用父类方法或者子类覆写后的方法,而子类中的单独方法则是无法调用的。
因此:
调用的顺序是:(1)、(2)、(3)、(4)、(5)、(6)、(7) ; 得到的结果是:ABDC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Base{
// (3)
public void methodOne() {
System.out.print("A");
//执行到这里的时候调用子类的覆盖方法 (4)
methodTwo();
}
// (7)
public void methodTwo(){
System.out.print("B");
}
}
class Derived extends Base {
// (1)
public void methodOne(){
// (2)
super.methodOne();
System.out.print("C");
}
//该方法为重写了父类的方法 (5)
public void methodTwo() {
//(6)
super.methodTwo();
System.out.print("D");
}
}

考点4

java程序内存泄露的最直接表现是( )

  • A 频繁FullGc
  • B jvm崩溃
  • C 程序抛内存控制的Exception
  • D java进程异常消失

解析

显示答案/隐藏答案正确答案: C

java是自动管理内存的,通常情况下程序运行到稳定状态,内存大小也达到一个 基本稳定的值
但是内存泄露导致Gc不能回收泄露的垃圾,内存不断变大.
最终超出内存界限,抛出OutOfMemoryExpection

考点5

在Java中,对于不再使用的内存资源,如调用完成的方法,”垃圾回收器”会自动将其释放。( )

  • A 正确
  • B 错误

解析

显示答案/隐藏答案正确答案: B

调用方法是在栈内存中完成的,调用完成会自动释放,
而gc释放的是堆区的内容

考点6

下面哪些情况下需要使用抽象类?

  • A 当一个类的一个或多个方法是抽象方法时
  • B 当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法体时
  • C 当一个类实现多个接口时
  • D 当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法体时

解析

显示答案/隐藏答案正确答案: ABD

D:当你不想实现接口中的所有方法,只想实现接口中的个别方法时,你可以先写一个抽象类来实现该接口,并实现除了你想要的方法之外的所有方法(可以简单的将方法体设为空)
接着再用你的类继承这个抽象类,这个类中就只用实现你需要的方法了,这样就可以达到你的需要了。
如果你直接实现接口的话,你就需要实现接口的所有方法。

考点7

下列容器中,哪些容器按 key 查找的复杂度为 O(log(n)) ()

  • A std::unordered_set
  • B std::multimap
  • C std::map
  • D std::deque

解析

显示答案/隐藏答案正确答案: BC

STL库中,map和multimap底层都是红黑树实现的,两者的不同在于multimap允许重复,而map中不行。
红黑树的查找复杂度为O(log(n))
unodered_map/_set底层是哈希表实现的,哈希表查找复杂度为O(1)

考点8

Java.Thread的方法resume()负责重新开始被以下哪个方法中断的线程的执行()。

  • A stop
  • B sleep
  • C wait
  • D suspend

解析

显示答案/隐藏答案正确答案: D

suspend() 和 resume() 方法:两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的 resume() 被调用,才能使得线程重新进入可执行状态

线程状态

考点1

下列定义的 css 中,哪个权重是最低的?

  • A #game .name
  • B #game .name span
  • C #game div
  • D #game div.name

解析

显示答案/隐藏答案正确答案: C
style 权重
行内样式 1000
id 100
class 10
element 1

权重越大,优先级越高
CSS选择器优先级是指“基础选择器”的优先级:
ID > CLASS > ELEMENT > *

a:100 + 10 = 110
b:100 + 10 + 1 = 111
c:100 + 1 = 101
d:100 + 1 + 10 = 111

考点2

对于li这个节点,下列哪个CSS选择器的优先级最高?

  • A li#app
  • B li.cnt
  • C li.cnt:hover
  • D #app.cnt

解析

显示答案/隐藏答案正确答案: D
style 权重
行内样式 1000
id 100
class 10
element 1

第一等:代表内联样式,如: style=””,权值为1000。
第二等:代表ID选择器,如:#content,权值为0100。
第三等:代表类,伪类和属性选择器,如.content,权值为0010。
第四等:代表类型选择器和伪元素选择器,如div
p,权值为0001。
通配符、子选择器、相邻选择器等的。如
、>、+,权值为0000。

权重:
①内联样式1000,如style=””;
②ID100,如#content;
③类、属性10,如.content;
④标签1,如div。
A.li#app:标签+ID=1+100=101;
B.li.cnt:标签+类=1+10=11;
C.li.cnt:hover:标签+类=11;
D.#app.cnt:ID+类=100+10=110。
(D)权重最大,优先级最高。

考点3

下列哪个不属于id与class之间的区别

  • A id在文档中只能使用一次,而class可以多次使用
  • B id比class具有更高的样式优先级
  • C 一个元素只能有一个id属性值,却可以拥有多个class属性值
  • D 在class中可以定义:hover伪类,在id中不能定义

解析

显示答案/隐藏答案正确答案: D

伪类选择符E:hover设置元素在其鼠标悬停时的样式。
E元素可以通过其他选择器进行选择,比如使用类选择符id选择符类型选择符等等。

考点4

下面关于表单的说法中,错误的是 ( )

  • A 可以给 input 添加 multiple 属性使它可以输入多行文字
  • B placeholder 属性可以用来提示用户输入什么内容
  • C 用户无法直接修改包含 disabled 属性的文本框的内容
  • D maxlength 属性可以限制文本框内最多输入多少个字符

解析

显示答案/隐藏答案正确答案: A

multiple 属性是一个布尔属性。
multiple 属性规定允许用户输入到 <input> 元素的多个值。
注意:multiple 属性适用于以下 input 类型:email 和 file。

1
2
3
4
<form action="demo-form.php">
选择图片: <input type="file" name="img" multiple>
<input type="submit">
</form>

考点5

有一个元素,需要在pc端显示而在手机端隐藏,需要使用的方法是?

  • A visible-xs-8 hidden-md
  • B visible-md-8 hidden-xs
  • C visible-md-8 hidden-sm
  • D visible-sm-8 hidden-md

解析

显示答案/隐藏答案正确答案: B

手机端屏幕是小于768px的,bootstrap col-xs代表屏幕小于768px,所以在手机端隐藏是hidden-xs。

考点6

<i><em>标签语义分别表示斜体和加粗,是否正确?

  • A 正确
  • B 错误

解析

显示答案/隐藏答案正确答案: B
  • <i>标签只是单纯的样式标签,表现斜体的样式,但是语义上与普通文本无异;
  • <em>标签在样式上表示为斜体,同时在语义上也表示为强调

考点7

以下不属于把CSS样式表与HTML网页关联的方法的是()

  • A 在HTML文档的<!--…-->标签内定义CSS样式
  • B 用<link>标签链接网上可访问的CSS样式表文件
  • C 在HTML文档的标签内定义CSS样式
  • D 用@import引入样式表文件

解析

显示答案/隐藏答案正确答案: A

考点8

关于标签,下列说法错误的是

  • A <video>标签中controls属性决定是否向用户显示控件
  • B <audio></audio>之间插入的内容是用来解释控件的
  • C <datalist>标签可以和input标签配合进行使用,来显示列表
  • D <progress>标签不填写max和value会自动滑动

解析

显示答案/隐藏答案正确答案: B

<audio> </audio> 之间插入的内容是供不支持audio 元素的浏览器显示的

考点9

以下选项正确的是

  • A <p />
  • B <br />
  • C <hr />
  • D <img />

解析

显示答案/隐藏答案正确答案: BCD

HTML中的标签分为闭合标签自闭合标签。 自闭合标签有

  • <input/>
  • <img/>
  • <br/>
  • <link/>
  • <hr/>

考点1

下列语句:int *p, a = 10; p = &a.
均表示地址的是()

  • A a , p, &a
  • B &*a,&a,*p
  • C *&p, *p, &a
  • D &a, p, &*p

正确答案: D

解析

  • *p表示指针p
  • &a表示取a的内存地址
  • p = &a 表示p等于a的内存地址
  • &*p表示获取指针p的内存地址
  • *&p表示指向P内存地址的一个指针

考点2

下面代码的运行结果是()

1
2
3
4
public static void main(String[] args){
String s;
System.out.println("s="+s);
}
  • A 代码编程成功,并输出”s=”
  • B 代码编译成功,并输出”s=null”
  • C 由于String s没有初始化,代码不能编译通过。
  • D 代码编译成功,但捕获到NullPointException异常

正确答案: C

解析

局部变量没有默认值

成员变量有初始值,而局部变量没有初始值得。本体中的s定义在方法中所以为局部变量-没有初始值。变量没有初始值就使用了,编译通不过

考点3

java运行时内存分为“线程共享”和“线程私有”两部分,以下哪些属于“线程共享”部分

  • A 程序计算器
  • B 方法区
  • C java虚拟机栈
  • D java堆

正确答案: BD

解析

  • 私有:
    • java虚拟机栈,
    • 程序计数器,
    • 本地方法栈
  • 共享:
    • java堆,
    • 方法区

考点4

1
String str = new String("abc")

"abc"在内存中是怎么分配的?

  • A 堆
  • B 栈
  • C 字符串常量区
  • D 寄存器

正确答案: AC

解析

考点5

截止JDK1.8版本,java并发框架支持锁包括?

  • A 读写锁
  • B 自旋锁
  • C X锁
  • D 乐观锁
  • E 排他锁

正确答案: ABD

解析

考点6

HashSet子类依靠()方法区分重复元素。

  • A toString(),equals()
  • B clone(),equals()
  • C hashCode(),equals()
  • D getClass(),clone()

正确答案: C

解析

HashSet内部使用Map保存数据,即将HashSet的数据作为Map的key值保存,这也是HashSet中元素不能重复的原因。而Map中保存key值前,会去判断当前Map中是否含有该key对象,内部是先通过key的hashCode,确定有相同的hashCode之后,再通过equals方法判断是否相同。

考点7

一个文件中的字符要写到另一个文件中,首先需要( )。

  • A 使用标准输出流System.out.println()。
  • B 建立文件字符输出流。
  • C 建立文件字符输入流。
  • D 标准输入流System.in.read()。

正确答案: C

解析

考点8

以下描述错误的一项是( )?

  • A 程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行 到了第几行,是线程隔离的
  • B 原则上讲,所有的对象都是在堆区上分配内存,是线程之间共享的
  • C 方法区用于存储JVM加载的类信息、常量、静态变量,即使编译器编译后的代码等数据,是线程隔离的
  • D Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的

正确答案: C

解析

有空了解一下

考点1

实现数据库安全性控制的常用方法和技术有()

  • A 用户标识与鉴别、存取控制、视图机制、审计、数据加密
  • B 存取控制、视图机制、审计、数据加密、防火墙
  • C 用户标识与鉴别、存取控制、视图机制、审计、防火墙
  • D 存取控制、视图机制、审计、数据加密、数据转储

正确答案: A

解析

实现数据库安全性控制的常用方法和技术

用户标识和鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才能提供系统的使用权
存取控制:通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未授权的人员无法存取数据
视图机制:为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。
审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人,时间和内容等。
数据加密:对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。

防火墙

防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障。和数据库安全性没关系

考点2

数据库 DB 、数据库系统 DBS 、数据库管理系统 DBMS 之间的关系是 ( ) 。

  • A DB包括DBS和DBMS
  • B DBMS包括DB和DBS
  • C DBS包括DB和DBMS
  • D 没有任何关系

正确答案: C

解析

数据库系统DBS包括:数据库DB和数据库管理系统DBMS

考点3

在SQL语言中,属于DCL的操作命令是?

  • A GRANT
  • B CREATE
  • C UPDATE
  • D DROP

正确答案: A

解析

DML(data manipulation language):

它们是select、update、insert、delete,
就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言

DDL(data definition language):

DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,
DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用

DCL(Data Control Language):

是数据库控制功能。是用来设置或更改数据库用户角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL

考点4

在E-R图中,属性用( )符号表示。

  • A 椭圆
  • B 矩形
  • C 菱形
  • D 三角形

正确答案: A

解析

  • E-R图 用矩形表示实体型;
  • 用椭圆表示实体的属性;
  • 用菱形表示实体型之间的联系

考点5

在数据库设计中, E-R 图产生于( )。

  • A 需求分析阶段
  • B 物理设计阶段
  • C 逻辑设计阶段
  • D 概念设计阶段

正确答案: D

解析

数据库设计的六个阶段

规范的设计方法,一个完整的数据库设计一般分为六个阶段:
需求分析:分析用户的需求,包括数据、功能和性能需求;
概念结构设计:主要采用E-R模型进行设计,包括画E-R图
逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模型的转换
数据库物理设计:主要是为所设计的数据库选择合适的存储结构和存取路径;
数据库的实施:包括编程、测试和试运行;
数据库运行与维护:系统的运行与数据库的日常维护。

考点7

对数据库第二范式的理解正确的是()

  • A 数据库表的每一列都是不可分割的原子数据项
  • B 在1NF基础上,任何非主属性不依赖于其它非主属性
  • C 在1NF基础上,非码属性必须完全依赖与码
  • D 以上说法都不正确

正确答案: C

解析

范式说明

第一范式,原子性
第二范式,没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
第三范式,不能存在传递依赖

考点8

使用MYSQL进行模糊查询 LIKE ‘_YOU%’,下面哪个是正确结果?

  • A YONYOU
  • B YYOUYO
  • C YOUYON
  • D YYYOUN

正确答案: B

解析

通配符 含义
_ 表示任意单个字符
% 表示任意个或多个字符

考点9

下面那些是非关系型数据库()

  • A Redis
  • B Mysql
  • C MongoDb
  • D SqlServer

正确答案: AC

解析

一、关系型数据库

图片
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织
优点:
1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。

二、非关系型数据库

图片
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
3、高扩展性;
4、成本低:nosql数据库部署简单,基本都是开源软件。

缺点:
1、不提供sql支持,学习和使用成本较高;
2、无事务处理;
3、数据结构相对复杂,复杂查询方面稍欠。

非关系型数据库的分类和比较:
1、文档型
2、key-value型
3、列式数据库
4、图形数据库

考点1

代码

1
System.out.println(10%3*2);

将打印?

  • A 1
  • B 2
  • C 4
  • D 6

正确答案: B

解析

%*是同一个优先级,从左到右运算

考点2

对于非运行时异常,程序中一般可不做处理,由java虚拟机自动进行处理。

  • A 正确
  • B 错误

正确答案: B

解析

Java异常都继承自类Throwable,Throwable子类有Error和Exception,其中Exception又分为运行时异常和编译时异常。

  • 编译时异常是未雨绸缪性质的异常,需要显示处理。
  • 运行时异常是程序员问题造成,并不强制进行显示处理。

非运行异常=检查异常 需要try catch捕获或者throws抛出

考点3

如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?
nums.add(6);
nums.add(0,4);
nums.remove(1);

  • A [5, 3, 1, 6]
  • B [4, 3, 1, 6]
  • C [4, 3, 6]
  • D [5, 3, 6]

正确答案: B

解析

  • 初始化为{5,3,1}
  • nums.add(6)后list为{5,3,1,6}
  • nums.add(0,4)是在0号索引上添加数字4得到list为{4,5,3,1,6}
  • nums.remove(1)是将1号索引上的5进行remove得到list为{4,3,1,6}

考点4

给出以下代码

1
2
3
4
5
6
7
8
9
10
public class TestObj{ 
public static void main(String[] args){
Object o=new Object(){
public boolean equals(Object obj){
return true;
}
};
System.out.println(o.equals(“Fred”));
}
}

请给出结果:()

  • A 运行时抛出异常
  • B true
  • C Fred
  • D 第三行编译错误

正确答案: B

解析

本题涉及匿名内部类、多态和覆盖三个知识点。 语句

1
2
3
4
5
Object o=new Object(){
public boolean equals(Object obj){
return true;
}
};

创建了一个匿名内部类,并将所创建的匿名对象赋给 Object (多态:子类对象赋给超类引用)。同时,该匿名内部类重写了 Object
类的 equals 方法。
在执行语句
o.equals(“Fred”)
时,根据多态及覆盖原则,会调用匿名内部类重写后的 equals 方法。

考点5

以下J2EE中常用的名词解释错误的是?

  • A EJB容器:Enterprise java bean 容器
  • B JNDI:JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
  • C JMS:JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
  • D JAF:JAVA安全认证框架。提供一些安全控制方面的框架。

正确答案: B

解析

J2EE中常用的名词解释

1.web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接和容器中的环境变量接接口互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
2.Web container:实现J2EE体系结构中Web组件协议的容器。这个协议规定了一个Web组件运行时的环境,包括安全,一致性,生命周期管理,事务,配置和其它的服务。一个提供和JSP和J2EE平台APIs界面相同服务的容器。一个Web container 由Web服务器或者J2EE服务器提供。
3.EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。一个实现了J2EE体系结构中EJB组件规范的容器。
这个规范指定了一个Enterprise bean的运行时环境,包括安全,一致性,生命周期,事务,
配置,和其他的服务。
4.JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
5.JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
6.JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
7.JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
8.RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。RMI-IIOP出现以前,只有RMI和CORBA两种选择来进行分布式程序设计。RMI-IIOP综合了RMI和CORBA的优点,克服了他们的缺点,使得程序员能更方便的编写分布式程序设计,实现分布式计算。首先,RMI-IIOP综合了RMI的简单性和CORBA的多语言性(兼容性),其次RMI-IIOP克服了RMI只能用于Java的缺点和CORBA的复杂性(可以不用掌握IDL)。

考点1

Which is the return type of the method main()?

  • A int
  • B void
  • C Boolean
  • D static

正确答案: B

解析

1
2
public static void main(String[] args){
}

考点2

子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是?

  • A 父类B静态代码块->父类B构造函数->子类A静态代码块->父类B非静态代码块->子类A构造函数->子类A非静态代码块
  • B 父类B静态代码块->父类B构造函数->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
  • C 父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
  • D 父类B构造函数->父类B静态代码块->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块

正确答案: C

解析

当实例化子类对象时,

  • 首先要加载父类的class文件进内存,静态代码块是随着类的创建而执行,所以父类静态代码块最先被执行,
  • 子类class文件再被加载,同理静态代码块被先执行;
  • 实例化子类对象要先调用父类的构造方法,而调用父类构造方法前会先执行父类的非静态代码块

考点3

有如下代码:请写出程序的输出结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Test
{
public static void main(String[] args)
{
int x = 0;
int y = 0;
int k = 0;
for (int z = 0; z < 5; z++) {
if ((++x > 2) && (++y > 2) && (k++ > 2))
{
x++;
++y;
k++;
}
}
System.out.println(x + ”” +y + ”” +k);
}
}
  • A 432
  • B 531
  • C 421
  • D 523

正确答案: B

解析

每次循环z,x,y,k对应数值为:
0,1,0,0
1,2,0,0
2,3,1,0
3,4,2,0
4,5,3,1
执行完这次以后,z++为5,不再进入for循环。

考点4

现有如下代码段:

1
2
3
x = 2;
while(x<n/2)
x = 2*x;

假设n>=0,则其时间复杂度应为( )

  • A O(log2(n))
  • B O(nlog2(n))
  • C O(n)
  • D O(n^2)

正确答案: A

解析

1
2
3
x = 2;       //①
while(x<n/2)
x = 2*x; // ②

语句①的频度是1,设语句2的频度是f(n),则2^f(n)<=n/2;f(n)<=log2(n/2)近似等于f(n)<=log2(n),取最大值f(n)=log2(n),T(n)=O(log2(n))

考点5

下面关于垃圾收集的说法正确的是

  • A 一旦一个对象成为垃圾,就立刻被收集掉。
  • B 对象空间被收集掉之后,会执行该对象的finalize方法
  • C finalize方法和C++的析构函数是完全一回事情
  • D 一个对象成为垃圾是因为不再有引用指着它,但是线程并非如此

正确答案: D

解析

对象空间被收集之前执行finalize()方法,而不是对象空间被收集之后再执行

考点6

1
2
3
4
public void test() {
int a = 10;
System.out.println(a++ + a--);
}

最后输出什么?

  • A 19
  • B 20
  • C 21
  • D 22

正确答案: C

解析

  • 先取值,后加一
  • 先取值,后减一

考点7

哪个正确

  • A abstract类只能用来派生子类,不能用来创建abstract类的对象。
  • B final类不但可以用来派生子类,也可以用来创建final类的对象。
  • C abstract不能与final同时修饰一个类。
  • D abstract类定义中可以没有abstract方法。

正确答案: ACD

解析

1、abstract类不能用来创建abstract类的对象;
2、final类不能用来派生子类,因为用final修饰的类不能被继承;
3、如2所述,final不能与abstract同时修饰一个类,abstract类就是被用来继承的;
4、类中有abstract方法必须用abstract修饰,但abstract类中可以没有抽象方法,接口中也可以有abstract方法。

考点8

关于equals和hashCode描述正确的是 ()

  • A 两个obj,如果equals()相等,hashCode()一定相等(符合代码规范的情况下)
  • B 两个obj,如果hashCode()相等,equals()不一定相等
  • C 两个不同的obj, hashCode()可能相等
  • D 其他都不对

正确答案: ABC

解析

考点9

运用下列哪个命令能够获取JVM的内存映像

  • A jinfo
  • B jmap
  • C jhat
  • D jstat

正确答案: B

解析

1、jps:查看本机java进程信息。
2、jstack:打印线程的栈信息,制作线程dump文件。
3、jmap:打印内存映射,制作堆dump文件
4、jstat:性能监控工具
5、jhat:内存分析工具
6、jconsole:简易的可视化控制台
7、jvisualvm:功能强大的控制台

考点10

以下哪一个不是赋值符号?

  • A +=
  • B <<=
  • C <<<=
  • D >>>=

正确答案: C

解析

A.很明显是赋值符号
B.<<=左移赋值
C.不是
D.>>>= 右移赋值,左边空出的位以0填充

考点11

Java多线程有几种实现方法?

  • A 继承Thread类
  • B 实现Runnable接口
  • C 实现Thread接口
  • D 以上都不正确

正确答案: AB

解析

多线程一共有三种实现方式
方式1:继承Thread类,并重写run()方法
方式2:实现Runnable接口,实现run()方法
方式3:实现Callable接口,线程结束后可以有返回值,但是该方式是依赖于线程池的。

考点12

Java中的集合类包括ArrayList、LinkedList、HashMap等类,下列关于集合类描述正确的是()

  • A ArrayList和LinkedList均实现了List接口
  • B ArrayList的访问速度比LinkedList快
  • C 添加和删除元素时,ArrayList的表现更佳
  • D HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值

正确答案: ABD

解析

ArrayList插入和现有项的删除开销很大,除非在末端
LinkedList插入和删除开销很小
ArrayList和LinkedList都是实现了List接口
HashMap可以用null值和空字符串作为K,不过只能有一个

考点13

下面的Java赋值语句哪些是有错误的 ()

  • A int i =1000;
  • B float f = 45.0;
  • C char s = ‘\u0639’
  • D Object o = ‘f’;
  • E String s = “hello,world\0”;
  • F Double d = 100;

正确答案: BF

解析

不同的数据类型不能自动装箱拆箱,只有对应类型的数据类型和包装类才能自动装箱拆箱。
double类型的才可以自动装箱为Double
Double d = 100;中100为int类型,只能自动装箱为Integer

考点14

true、false、null、sizeof、goto、synchronized 哪些是Java关键字?

  • A true
  • B false
  • C null
  • D sizeof
  • E goto
  • F synchronized

正确答案: EF

解析

  • true、false、null是字面量。
  • goto、const是java保留字和关键字。

考点1

可以把任何一种数据类型的变量赋给Object类型的变量。

  • A 对
  • B 错

正确答案: A

解析

  • 引用类型的对象都可以赋值给Object变量;
  • 而八大基础数据类型会先自动装箱成包装类型,然后再赋值给Object,所以编译运行都不会报错。

考点2

以下不是修饰符final的作用的是( )。

  • A 修饰常量
  • B 修饰不可被继承的类
  • C 修饰不可变类
  • D 修饰不可覆盖的方法

正确答案: C

解析

final的作用

  1. final修饰的变量是常量,
    • 如果修饰的是引用变量则变量中的引用地址不可变,但是地址中的内容可以变。
    • 如果修饰的是基本类型变量,则基本类型变量的值不可改变。
  2. final修饰的方法不可被重写,但是还是可以重载
  3. final修饰的类不可继承

考点3

对于abstract声明的类,下面说法正确的是

  • A 可以实例化
  • B 不可以被继承
  • C 子类为abstract
  • D 只能被继承
  • E 可以被抽象类继承

正确答案: E

解析

A,抽象类不能实例化,因为有抽象方法未实现
B,可以被继承。派生类可以实现抽象方法
C,子类可以是抽象的,也可以非抽象的
D,只能被继承说法太肯定,不正确
E,可以被抽象类继承,也可以被非抽象类继承

考点5

下列程序test 类中的变量c 的最后结果为

1
2
3
4
5
6
7
8
9
10
11
public class Test {
public static void main(String args[]) {
int a = 10;
int b;
int c;
if (a > 50) {
b = 9;
}
c = b + a;
}
}
  • A 10
  • B 0
  • C 19
  • D 编译出错

正确答案: D

解析

局部变量不会自动进行初始化,所以当使用局部变量时,而没有给该局部变量赋值就会产生编译错误。

考点6

下面这段程序的输出结果是()

1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
public static void main(String[] args) {
split(12);
}
public static int split(int number) {
if (number > 1) {
if (number % 2 != 0) System.out.print(split((number + 1) / 2));
System.out.print(split(number / 2));
}
return number;
}
}
  • A 12136
  • B 63121
  • C 61213
  • D 11236

正确答案: A

解析

考察方法进栈与出栈的顺序。先进后出
有个知识点,方法在出栈的时候,执行的是return语句。因为出栈就意味着方法结束并消费,如果没有return语句,那么方法出栈的时候什么都不执行,就直接销毁。
1.执行split(12)时,执行代码System.out.print(split(number / 2))
split(12/2)进栈,此时number=6;
2.执行split(6)时,执行代码System.out.print(split(number / 2))
split(6/2)进栈,此时number=3;
3.执行split(3)时,
第1行 if (number % 2 != 0)
第2行 System.out.print(split((number + 1) / 2));
第3行 System.out.print(split(number / 2));
按照顺序执行
先执行第2行
首先split((3+1)/2)进栈,此时number=2,
再执行split(2),那么split(2/2)进栈,此时number=1, 最后return 1,
注意此时第2行代码还没有结束
此时
split(2/2)出栈,输出1;
split((3+1)/2)出栈,输出2;
第二行代码结束,再执行第三行,此时number=3,执行System.out.print(split(number / 2))
split(3/2)进栈,number=1,return,那么就需要出栈了
split(3/2)出栈,输出1
split(6/2)出栈,输出3
split(12/2)出栈,输出6;
最终结果12136;
split(number)方法,最终返回的是number这个值,所以split(n)出栈的输出结果就是n
整理:
split(12/2)进栈
split(6/2)进栈
split((3+1)/2)进栈
split(2/2)进栈
split(2/2)出栈,输出1
split((3+1)/2)出栈,输出2
split(2/2)进栈
split(2/2)出栈,输出1
split(6/2)出栈,输出3
split(12/2)出栈,输出6

考点7

Which statement declares a variable a which is suitable for referring to an array of 50 string objects?(Java)

  • A char a[][];
  • B String a[];
  • C String[] a;
  • D Object a[50];
  • E String a[50];
  • F Object a[];

正确答案: BCF

解析

考点1

下列说法正确的有( )

  • A class中的constructor不可省略
  • B constructor必须与class同名,但方法不能与class同名
  • C constructor可在一个对象被new时执行
  • D 一个class只能定义一个constructor

正确答案: C

解析

a. 类中的构造方法可以省略不写的
b. 构造方法必须跟类名相同,普通的类方法能与类同名的,但是要返回一个值。
c. 构造方法都在new 对象的时候调用的
d. 一个类可以定义多个构造方法的

考点2

1
2
3
4
5
6
static String str0="0123456789";
static String str1="0123456789";
String str2=str1.substring(5);
String str3=new String(str2);
String str4=new String(str3.toCharArray());
str0=null;

假定str0,…,str4后序代码都是只读引用。
Java 7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为()

  • A 5
  • B 10
  • C 15
  • D 20

正确答案: C

解析

这是一个关于java的垃圾回收机制的题目。垃圾回收主要针对的是堆区的回收,因为栈区的内存是随着线程而释放的
堆区分为三个区:

  • 年轻代(Young Generation)、
  • 年老代(Old Generation)、
  • 永久代(Permanent Generation,也就是方法区)。

年轻代:对象被创建时(new)的对象通常被放在Young(除了一些占据内存比较大的对象),经过一定的Minor GC(针对年轻代的内存回收)还活着的对象会被移动到年老代(一些具体的移动细节省略)。
年老代:就是上述年轻代移动过来的和一些比较大的对象。**Minor GC(Full GC)是针对年老代的回收**
永久代:存储的是final常量,static变量,常量池。

str3,str4都是直接new的对象,而substring的源代码其实也是new一个string对象返回。
经过full gc之后,年老区的内存回收,则年轻区的占了15个,不算PermGen。所以答案选C

垃圾回收机制这方面了解的比较少,有时间了解一下

考点3

运行代码,结果正确的是:

1
2
3
4
5
6
Boolean flag = false;
if(flag = true){
System.out.println("true");
}else{
System.out.println("false");
}
  • A 编译错误
  • B TRUE
  • C FALSE
  • D 什么也没有输出

解析

显示答案/隐藏答案 正确答案: B

注意 if判断条件flag = true是赋值语句,返回true 不会执行else里面内容

考点4

从运行层面上来看,从四个选项选出不同的一个。

  • A JAVA
  • B Python
  • C objectC
  • D C#

解析

显示答案/隐藏答案 正确答案: B

A,C,D都是类C语言,B不是
Python是解释执行的,其他语言都需要先编译

考点5

有以下一个对象:

1
2
3
4
5
6
7
8
9
10
public class DataObject implements Serializable{
private static int i=0;
private String word=" ";
public void setWord(String word){
this.word=word;
}
public void setI(int i){
Data0bject. i=I;
}
}

创建一个如下方式的DataObject:

1
2
3
DataObject object=new DataObject ( );
object.setWord("123");
object.setI(2);

将此对象序列化为文件,并在另外一个JVM中读取文件,进行反序列化,请问此时读出的DataObject对象中的word和i的值分别为:

  • A “”, 0
  • B “”, 2
  • C “123”, 2
  • D “123”, 0

正确答案: D

解析

序列化保存的是对象的状态,静态变量属于类的状态,因此,序列化并不保存静态变量。所以i是没有改变的
Java在序列化时不会实例化static变量和transient修饰的变量,因为static代表类的成员,transient代表对象的临时数据,被声明这两种类型的数据成员不能被序列化

考点6

下面有关java threadlocal说法正确的有?

  • A ThreadLocal存放的值是线程封闭,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递
  • B 线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收
  • C 在Thread类中有一个Map,用于存储每一个线程的变量的副本。
  • D 对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式

正确答案: ABCD

解析

ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量。
ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程的上下文。
可以总结为一句话:
ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度

ThreadLocal设计的初衷:提供线程内部的局部变量,在本线程内随时随地可取,隔离其他线程。

ThreadLocal的使用场景

数据库连接:在多线程中,如果使用懒汉式的单例模式创建Connection对象,由于该对象是共享的,那么必须要使用同步方法保证线程安全,这样当一个线程在连接数据库时,那么另外一个线程只能等待。这样就造成性能降低。
如果改为哪里要连接数据库就来进行连接,那么就会频繁的对数据库进行连接,性能还是不高。这时使用ThreadLocal就可以既可以保证线程安全又可以让性能不会太低。但是ThreadLocal的缺点时占用了较多的空间。

考点7

对接口的描述正确的是()

  • A 一个类可以实现多个接口
  • B 接口可以有非静态的成员变量
  • C 在jdk8之前,接口可以实现方法
  • D 实现接口的任何类,都需要实现接口的方法

正确答案: A

解析

A,一个类只能有一个直接父类,但是继承是有传递性的。一个类可以实现多的接口。一个接口可以继承多个类。
B,接口中没有普通变量(普通成员变量),接口的成员变量都是常量,默认修饰符:public static final
C,

  • JDK8之前接口中的方法都是默认public abstract的,抽象方法没有方法体
  • JDK8时接口中可以有static、default的修饰的方法,static、default修饰的方法必须有方法。接口中的方法都不能被private和protected修饰。
  • 外部接口、类只能被public修饰或者不写,
  • 内部接口、类可以被四个访问修饰符修饰。

D, 实现接口,其实就是需要重写接口中的abstract方法,一旦实现的类没有重写完,那么这个类必须是个抽象类(抽象类中可以没有抽象方法,但是有抽象方法的类必须是抽象类)。

考点8

java7后关键字 switch 支不支持字符串作为条件:()

  • A 支持
  • B 不支持

正确答案: A

解析

在Java7之前,switch只能支持
byte、short、char、int或者其对应的封装类以及Enum类型。
在Java7中,呼吁很久的String支持也终于被加上了。

在switch语句中,表达式的值不能是null,否则会在运行时抛出NullPointerException。
在case子句中也不能使用null,否则会出现编译错误。
同时,case字句的值是不能重复的。对于字符串类型的也一样,但是字符串中可以包含Unicode转义字符。重复值的检查是在Java编译器对Java源代码进行相关的词法转换之后才进行的。也就是说,有些case字句的值虽然在源代码中看起来是不同的,但是经词法转换之后是一样的,就会在成编译错误。比如:“男”和“\u7537”就是一个意思。

可以看出,字符串类型在switch语句中利用hashcode的值与字符串内容的比较来实现的;但是在case字句中对应的语句块中仍然需要使用String的equals方法来进一步比较字符串的内容,这是因为哈希函数在映射的时候可能存在冲突。
switch(exp),在JDK7之前,只能是byte、short、char、int或者对应的包装类,或者枚举常量(内部也是由整型或字符类型实现)。
为什么必须是这些呢,因为其实exp只是对int型支持的,其他都是因为可以自动拆卸或者自动向上转型到int,所以才可以。
到了JDK7的时候,String被引入了,为什么String能被引入呢?
其实本质上还是对int类型值得匹配。
原理如下,通过对case后面得String对象调用hashCode方法,得到一个int类型得hash值,然后用这个hash值来唯一标识这个case。那么当匹配时,首先调用exp的hashCode,得到exp的hash值,用这个hash值来匹配所有case,如果没有匹配成功,就说明不存在;如果匹配成功了,接着会调用字符串的equals方法进行匹配。(hash值一致,equals可不一定返回的就是true)。
所以,exp不能为null,cas子句使用的字符串也不能为null,不然会出现空指针异常。

考点9

已知如下类定义:
class Base {
public Base (){
//…
}
public Base ( int m ){
//…
}
public void fun( int n ){
//…
}
}
public class Child extends Base{
// member methods
}
如下哪句可以正确地加入子类中?

  • A private void fun( int n ){ //…}
  • B void fun ( int n ){ //… }
  • C protected void fun ( int n ) { //… }
  • D public void fun ( int n ) { //… }

正确答案: D

解析

方法的重写(override)两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。

考点10

如下代码的 结果是什么 ?
class Base {
Base() {
System.out.print(“Base”);
}
}
public class Alpha extends Base {
public static void main( String[] args ) {
new Alpha();
//调用父类无参的构造方法
new Base();
}
}

  • A Base
  • B BaseBase
  • C 编译失败
  • D 代码运行但没有输出
  • E 运行时抛出异常

正确答案: B

解析

考点11

关于下面程序,哪些描述是正确的: ( )
public class While {
public void loop() {
int x= 10;
while ( x ) {
System.out.print(“x minus one is “ + (x - 1));
x -= 1;
}
}
}

  • A 行1有语法错误
  • B 行4有语法错误
  • C 行5有语法错误
  • D 行6有语法错误
  • E 行2有语法错误,loop是关键字
  • F 程序能够正常编译和运行

正确答案: B

解析

while()括号里的参数要是boolean类型,int类型不行

考点12

假设如下代码中,若t1线程在t2线程启动之前已经完成启动。代码的输出是()
public static void main(String[]args)throws Exception {
final Object obj = new Object();
Thread t1 = new Thread() {
public void run() {
synchronized (obj) {
try {
obj.wait();
System.out.println(“Thread 1 wake up.”);
} catch (InterruptedException e) {
}
}
}
};
t1.start();
Thread.sleep(1000);//We assume thread 1 must start up within 1 sec.
Thread t2 = new Thread() {
public void run() {
synchronized (obj) {
obj.notifyAll();
System.out.println(“Thread 2 sent notify.”);
}
}
};
t2.start();
}

  • A Thread 1 wake up Thread 2 sent notify.
  • B Thread 2 sent notify. Thread 1 wake up
  • C A、B皆有可能
  • D 程序无输出卡死

正确答案: B

解析

选择B
执行obj.wait();时已释放了锁,所以t2可以再次获得锁,然后发消息通知t1执行,但这时t2还没有释放锁,所以肯定是执行t2,然后释放锁,之后t1才有机会执行。

考点13

对于线程局部存储TLS(thread local storage),以下表述正确的是

  • A 解决多线程中的对同一变量的访问冲突的一种技术
  • B TLS会为每一个线程维护一个和该线程绑定的变量的副本
  • C 每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了
  • D Java平台的java.lang.ThreadLocal是TLS技术的一种实现

正确答案: ABD

解析

ThreadLocal可以给一个初始值,而每个线程都会获得这个初始化值的一个副本,这样才能保证不同的线程都有一份拷贝。
ThreadLocal
不是用于解决共享变量的问题的,不是为了协调线程同步而存在,而是为了方便每个线程处理自己的状态而引入的一个机制.
ThreadLocal确实是保证了每一个线程都拥有一个变量的副本,而且这个副本的初始值取决于ThreadLoacl中initialValue方法的重写,如果initialValue方法中引用了一个全局的变量的地址,那么其他线程对全局变量的修改还是会影响到此线程中引用变量的内容。

考点14

哪个是不正确的字符常量?

  • A ”\n”
  • B ”1”
  • C ”a”
  • D ”\101”

正确答案: ABCD

解析

  • 单引号才是字符常量
  • 双引号是字符串常量

考点1

关于下面代码 int[] x=new int[25]; 描述正确的是()

  • A x[25]存放了数据“\0”。
  • B x[24] 存放了数据“\0”。
  • C 若访问x[25],程序将抛出异常。
  • D x[1]访问此数组的第一个元素。

正确答案: C

解析

A:不存在x[25] 索引从0开始到length-1
B:x[24]
存的是默认值0(java中没有’\0’这一说)
C:超出内存 正确
D:第二元素

考点2

以下表达式的类型和值是什么?(注意整数除法)()
-5 + 1/4 + 2*-3 + 5.0

  • A int -3
  • B int -4
  • C double -5.5
  • D double -6.0

正确答案: D

解析

注意题目说整数除法,所以1/4 = 0

考点3

下列修饰符中,能够使得某个成员变量可被它所在包访问到和它的子类访问到的是( )

  • A protected
  • B public
  • C private
  • D 应不加修饰符

正确答案: A

解析

访问控制符修饰的成员可见范围

位置 public protected default private
同一个类中
同一个包中
子类中
全局

考点4

内部类(也叫成员内部类)可以有4种访问权限。( )

  • A 正确
  • B 错误

正确答案: A

解析

为什么外部类只能public和默认修饰

外部类的上一级程序单元是包,所以其有两个作用域:同一包内和任何位置。因此只需要2种访问权限:包访问权限和公开访问权限,正好对应的省略访问控制符和public。省略访问控制符是包访问权限,即同一个包内的其他类可以访问省略访问控制符的成员。因此,如果一个外部类不使用任何访问控制符修饰,则只能被同一个包的其他类访问。

为什么内部类可以使用四个访问控制符

而内部类的上一级程序单元是外部类,它就具有4个作用域:同一个类、同一个包、父子类和任何位置。

小结

你就把内部类理解成类的成员,成员有4种访问权限吧,内部类也是!分别为private、protected、public以及默认的访问权限

考点5

以下关于集合类ArrayList、LinkedList、HashMap描述错误的是()

  • A HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值
  • B ArrayList和LinkedList均实现了List接口
  • C 添加和删除元素时,ArrayList的表现更佳
  • D ArrayList的访问速度比LinkedList快

正确答案: C

解析

  1. List 是一个有序集合,可以存放重复的数据 (有序:存进是什么顺序,取出时还是什么顺序)
    (1).ArrayList 底层是数组适合查询,不适合增删元素。
    (2).LiskedList 底层是双向链表适合增删元素,不适合查询操作。
    (3).Vector 底层和ArrayList相同,但是Vector是线程安全的,效率较低很少使用
  2. Set 是一个无序集合,不允许放重复的数据 (无序可重复,存进和取出的顺序不一样)
    (1).HashSet 底层是哈希表/散列表
    (2).TreeSet 继承sartedSet接口(无需不可重复,但存进去的元素可以按照元素的大小自动排序)
  3. Map 是一个无序集合,以键值对的方式存放数据,键对象不允许重复,值对象可以重复。
    (1).HashMap实现不同步,线程不安全。HashTable线程安全
    (2).HashMap中的key-value都是存储在Entry中的。
    (3).HashMap可以存null键和null值,不保证元素的顺序恒久不变,它的底层使用的是数组和链表,通过hashCode()方法和equals方法保证键的唯一性

    数组插入删除效率低

    数组的插入和删除效率比较低,读取的效率高,因为地址是连续的

考点6

以下代码段执行后的输出结果为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Test {
public static void main(String[] args) {
System.out.println(test());
}
private static int test() {
int temp = 1;
try {
System.out.println(temp);
return ++temp;
} catch (Exception e) {
System.out.println(temp);
return ++temp;
} finally {
++temp;
System.out.println(temp);
}
}
}
  • A 1,2,2
  • B 1,2,3
  • C 1,3,3
  • D 1,3,2

正确答案: D

解析

finally代码块在try语句的return之前执行。try的return的值会被放入临时空间,然后执行finally代码块,如果finally中有return,会刷新临时空间的值,方法结束返回临时空间值,也就是finally中的return会覆盖try中的return。

考点7

Hashtable 和 HashMap 的区别是:

  • A Hashtable 是一个哈希表,该类继承了 AbstractMap,实现了 Map 接口
  • B HashMap 是内部基于哈希表实现,该类继承AbstractMap,实现Map接口
  • C Hashtable 线程安全的,而 HashMap 是线程不安全的
  • D Properties 类 继承了 Hashtable 类,而 Hashtable 类则继承Dictionary 类
  • E HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

正确答案: BCDE

解析

选B、C、D、E。

Hashtable

(1)Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射。
(2)Hashtable 的函数都是同步的,这意味着HashTable是线程安全的。它的key、value都不可以为null。
(3)HashTable直接使用对象的hashCode。

HashMap

(1)由数组+链表组成的,基于哈希表的Map实现,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。
(2)HashMap是线程安全的,HashMap可以接受为null的键(key)和值(value)。
(3)HashMap重新计算hash值

Hashtable继承Dictionary

Properties继承关系如下:

1
2
public class Hashtable<K,V> extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable

HashMap继承AbstractMap

1
public class HashMap<K,V>extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable

Properties继承Hashtable

考点8

下面几个关于Java里queue的说法哪些是正确的()?

  • A LinkedBlockingQueue是一个可选有界队列,不允许null值
  • B PriorityQueue,LinkedBlockingQueue都是线程不安全的
  • C PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))
  • D PriorityQueue,ConcurrentLinkedQueue都遵循FIFO原则

正确答案: AC

解析

A对、LinkedBlockingQueue是一个基于节点链接的可选是否有界的阻塞队列,不允许null值。
B错、LinkedBlockingQueue是一个线程安全的阻塞队列,实现了先进先出等特性。
C、PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))。
D、PriorityQueue是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,该队列的元素遵循FIFO原则。

考点9

关于Java的一些概念,下面哪些描述是正确的:( )

  • A 所有的Java异常和错误的基类都是java.lang.Exception, 包括java.lang.RuntimeException
  • B 通过try … catch … finally语句,finally中的语句部分无论发生什么异常都会得到执行
  • C java中所有的数据都是对象
  • D Java通过垃圾回收回收不再引用的变量,垃圾回收时对象的finallize方法一定会得到执行
  • E Java是跨平台的语言,无论通过哪个版本的Java编写的程序都能在所有的Java运行平台中运行
  • F Java通过synchronized进行访问的同步,synchronized作用非静态成员方法和静态成员方法上同步的目标是不同的

正确答案: BF

解析

A:Java中所有错误和异常的父类是java.lang.Throwable
C:基本数据类型不是对象,不能用new的方法获取,但是每个基本数据类型都对应着封装类型,这些封装类型为了解决基本数据类型面向对象用的。
D:Java垃圾回收器负责回收无用对象占据的内存资源,但对象没有使用new获取了一块特殊区域,这块特殊区域的回收使用finallize()
E:Java跨平台是因为有JVM的存在,Java的三个版本的运行需要各自不同的环境。
F: Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”Synchronized修饰静态方法,实际上是对该类对象加锁,俗称“类锁”。

考点1

Internet中地理域名中国的缩写是( )

  • A ch
  • B cn
  • C china
  • D chi

正确答案: B

解析

考点2

在 OSI 分层模型中,把传输的比特流划分为帧,是哪一层的功能( )

  • A 物理层
  • B 网络层
  • C 数据链路层
  • D 传输层

正确答案: C

解析

层次 传输数据类型
传输层 片段
网络层
数据链路层
物理层 比特

考点3

正确的 IP 地址是 ( ) 。

  • A 202.112.111.1
  • B 202.2.2.2.2
  • C 202.202.1
  • D 202.257.14.13

正确答案: A

解析

每个IP地址分为4段,段与段之间用小数点隔开,每段再用一个十进制整数表示,每个十进制整数的取值范围是0-255。故正确答案为A。

考点4

HTML语言是一种( )

  • A 标注语言
  • B 机器语言
  • C 汇编语言
  • D 算法语言

正确答案: A

解析

HTML 指的是超文本标记语言 (Hyper Text Markup Language)
HTML 不是一种编程语言,而是一种标记语言 (markup language)
标记语言是一套标记标签 (markup tag)
HTML 使用标记标签来描述网页

考点5

图片
在OSI参考模型中,路由器R1、交换机Switch、集线器Hub实现的最高功能层分别是 。

  • A 2、2、1
  • B 2、2、2
  • C 3、2、1
  • D 3、2、2

正确答案: C

解析

OSI参考模型中各层如下:

层次 名称
7 应用层
6 表示层
5 会话层
4 传输层
3 网络层
2 数据链路层
1 物理层

集线器是一个多端口的中继器,工作在物理层
以太网交换机是一个多端口的网桥,工作在数据链路层
路由器是网络层设备,它实现了网络模型的下三层,即物理层、数据链路层和网络层

题中R1、Switch和Hub分别是路由器、交换机和集线器,实现的最高层功能分别是网络层(即3)、数据链路层(即2)和物理层(即1)。

考点7

在整个网络的设计中,对功能、可靠性和费用方面有着重要影响的因素是( )

  • A 误码率
  • B 拓扑结构
  • C 网络距离
  • D 网络传输速率

正确答案: B

解析

拓扑结构是指网络中各个站点相互连接的形式,在局域网中明确一点讲就是文件服务器、工作站和电缆等的连接形式。
络的拓扑结构反映出网中各实体的结构关系,是建设计算机网络的第一步,是实现各种网络协议的基础,它对网络的性能,系统的可靠性与通信费用都有重大影响。

考点8

ADSL技术主要解决的问题是( )

  • A 宽带传输
  • B 宽带接入
  • C 宽带交换
  • D 多媒体技术

正确答案: B

解析

考点9

一个5960字节的数据报(其中20字节IP首部加上5940字节的IP有效载荷)到达一台路由器,并且必须被转发到一条MTU为1500字节的链路上,并且原始数据报附加的标识号为587,试问此数据报被分的片数、第二分片的标识号和第四分片的标志位分别为( )

  • A 4、587、0
  • B 5、587、1
  • C 4、588、1
  • D 5、588、0

正确答案: B

解析

分片计算方法

每个分片都需要有IP首部,MTU=1500,ip首部长度为20,则每个分片的数据的最大长度为1480
第一分片:20+1480;
第二分片:20+1480;
第三分片:20+1480;
第四分片:20+1480;
第五分片:20+20;
5940/1480=4.0135135135135
4.0135135135135向上取整等于5,所以五个分片

确定标识号

相同的标识号使得分片后的数据报片能正确的重装成原来的数据报;所有分片的标识号都应该一样,都和第一条分片的标识号587相同

确定MF

标志位的最低位MF=1表示后面还有分片。
总共有5个分片,第4个分片的MF为1,
第5个分片MF为0

考点10

在公司局域网上ping www.bilibili.com 没有涉及到的网络协议是?()

  • A TCP
  • B DNS
  • C ICMP
  • D ARP

正确答案: A

解析

ping 使用的协议为icmp,通过域名解析,需要用到DNS,局域网中使用arp进行主机间的通信。

TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接