错题整理
Linux
- 下面有关文件系统元数据的描述,说法错误的是? 。
- 元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息等等
- 我们可以使用 stat 命令来查看文件更多的元数据信息
- Unix/Linux 系统允许,多个文件名指向同一个 inode 号码
- 文件 A 和文件 B 的 inode 号码虽然不一样,但是文件 A 的内容是文件 B 的路径。读取文件 A 时,系统会自动将访问者导向文件 B,这是文件 A 就称为文件 B 的 "硬链接"
我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。
用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。
在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。
文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。
硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。
链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。
若一个 inode 号对应多个文件名,则称这些文件为硬链接。
换言之,硬链接就是同一个文件使用了多个别名。
若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软链接。
java
-
what is the result of the following code?
enum AccountType { SAVING, FIXED, CURRENT; private AccountType() { System.out.println(“It is a account type”); } } class EnumOne { public static void main(String[]args) { System.out.println(AccountType.FIXED); } }
- Compiles fine and output is prints"It is a account type"once followed by"FIXED"
- Compiles fine and output is prints"It is a account type"twice followed by"FIXED"
- Compiles fine and output is prints"It is a account type"thrice followed by"FIXED"
- Compiles fine and output is prints"It is a account type"four times followed by"FIXED"
- Compilation fails
创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum
而 E 表示枚举类型的名称。 枚举类型的每一个值都将映射到 protected Enum (String name, int ordinal) 构造函数中简单来说就是枚举类型中的枚举值都会对应调用一次构造函数
本题中三个枚举值, 这里还要特别强调一下,枚举中的构造函数是私有类,也就是无法再外面创建 enum
枚举值默认 static ,AccountType.FIXED 使用的是枚举值,没有创建。所以一共就 3 次。 -
Which statement is true for the class java.util.ArrayList?
- The elements in the collection are ordered.
- The collection is guaranteed to be immutable.
- The elements in the collection are guaranteed to be unique.
- The elements in the collection are accessed using a unique key.
- 下标可作为 unique key
- The elements in the collections are guaranteed to be synchronized.
ArrayList 就是动态数组,用 MSDN 中的说法,就是 Array 的复杂版本,它提供了如下一些好处:
- 动态的增加和减少元素
- 实现了 ICollection 和 IList 接口
- 灵活的设置数组的大小
Synchronized 属性指示当前的 ArrayList 实例是否支持线程同步,而 ArrayList.Synchronized 静态方法则会返回一个 ArrayList 的线程同步的封装。 如果使用非线程同步的实例,那么在多线程访问的时候,需要自己手动调用 lock 来保持线程同步
-
关于 sleep () 和 wait (),以下描述错误的一项是()。
- sleep 是线程类(Thread)的方法,wait 是 Object 类的方法
- sleep 不释放对象锁,wait 放弃对象锁
- sleep 暂停线程、但监控状态仍然保持,结束后会自动恢复
- wait 后进入等待锁定池,只有针对此对象发出 notify 方法后获得对象锁进入运行状态 (或 notifyAll ())
sleep 是线程类(Thread)的方法,执行此方法会导致当前此线程暂停指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用 sleep 不会释放对象锁。 wait 是 Object 类的方法,对此对象调用 wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出 notify 方法或 notifyAll 后本线程才获得对象锁进入运行状态
-
在 Java 语言中,下列关于字符集编码(Character set encoding)和国际化(i18n)的问题,哪些是正确的?
- 每个中文字符占用 2 个字节,每个英文字符占用 1 个字节
- 假设数据库中的字符是以 GBK 编码的,那么显示数据库数据的网页也必须是 GBK 编码的
- Java 的 char 类型,以下 UTF-16 Big Endian 的方式保存一个字符
- 实现国际化应用常用的手段是利用 ResourceBundle 类
A 显然是错误的,Java 一律采用 Unicode 编码方式,每个字符无论中文还是英文字符都占用 2 个字节。
B 也是不正确的,不同的编码之间是可以转换的,通常流程如下: 将字符串 S 以其自身编码方式分解为字节数组,再将字节数组以你想要输出的编码方式重新编码为字符串。 例:String newUTF8Str = new String (oldGBKStr.getBytes (“GBK”), “UTF8”);
C 是正确的。Java 虚拟机中通常使用 UTF-16 的方式保存一个字符
D 也是正确的。ResourceBundle 能够依据 Local 的不同,选择性的读取与 Local 对应后缀的 properties 文件,以达到国际化的目的。 -
下面函数将返回?
public static int func (){ try{ return 1; }catch (Exception e){ return 2; }finally{ return 3; } }
- 1
- 2
- 3
- 编译错误
Try catch finally 获取异常错误的结构,try 中有两种情况:
- try 中没有异常时,但是有 return 等跳转语句,这样会引发程序控制流离开当前的 try, 自动完成 finally 中资源的释放。
- try 中有异常时,catch 在获取到异常之前,进行 finally 执行,接着执行 catch 中的语句。
由于本题中的 finally 中有 return 语句,将 try 中的 return 语句覆盖,程序直接跳出。
javaEE
-
下面有关 jsp 中静态 include 和动态 include 的区别,说法错误的是?
- 动态 INCLUDE: 用 jsp:include 动作实现
- 静态 INCLUDE: 用 include 伪码实现,定不会检查所含文件的变化,适用于包含静态页面
<%@ include file="included.htm" %>
- 静态 include 的结果是把其他 jsp 引入当前 jsp,两者合为一体;动态 include 的结构是两者独立,直到输出时才合并
- 静态 include 和动态 include 都可以允许变量同名的冲突。页面设置也可以借用主文件的
动态 INCLUDE 用 jsp:include 动作实现
<jsp:include page="included.jsp" flush="true">
它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。各个文件分别先编译,然后组合成一个文件。
静态 INCLUDE 用 include 伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>
; 。先将文件的代码被原封不动地加入到了主页面从而合成一个文件,然后再进行翻译,此时不允许有相同的变量。
以下是对 include 两种用法的区别 , 主要有两个方面的不同;
一:执行时间上 :
<%@ include file="relativeURI">
是在翻译阶段执行
<jsp:include page="relativeURI" flush="true">
在请求处理阶段执行 .
二:引入内容的不同 :
<%@ include file="relativeURI">
引入静态文本 (html,jsp), 在 JSP 页面被转化成 servlet 之前和它融和到一起 .
<jsp:include page="relativeURI" flush="true">
引入执行页面或 servlet 所生成的应答文本 .