1. 在Java中,负责对字节代码解释执行的是(B)
A. 应用服务器
B. 虚拟机
C. 垃圾回收器
D. 编译器
2. 一个栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈输出的序列的是(A)
A. 5 4 1 3 2
B. 2 3 4 1 5
C. 1 5 4 3 2
D. 2 3 1 4 5
3. 下列那一个选项按照顺序包括了OSI模型的7个层次( C)
A. 物理层 数据链路层 传输层 网络层 会话层 表示层 应用层
B. 物理层 数据链路层 会话层 网络层 传输层 表示层 应用层
C. 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层
D. 网络层 传输层 物理层 数据链路层 会话层 表示层 应用层
4. 当客户度关闭一个从连接池中获取的连接, 会发生下面哪一种情况?(A)
A. 连接不会关闭, 只是简单地归还给连接池
B. 连接被关闭 , 但又被重新打开并归还给连接池
C. 连接永久性关闭
5. 以下哪些不是javaScript 的全局函数( C)
A. eval
B. escape
C. setTimeout
D. parseFloat
6. 你使用mkdir命令创建一个临时的文件夹/tmp/aaa, 并将一些文件复制其中,使用完后要删除/mnt/tmp文件夹及其中的所有文件, 应该使用命令(B)
A. rm /tmp/aaa
B. rm –r /tmp/aaa
C. rmdir –r /tmp/aaa
D. rmdir /tmp/aaa
7. 在UML提供的图中, ( C)用于按数据顺序描述对象间的交互
A. 协作图
B. 网络图
C. 序列图
D. 状态图
8. 下面有关系统并发访问数估算数据哪个最有效:(B)
A. 高峰时段日处理业务量100000
B. 高峰时段平均每秒请求数80
C. 同时在线用户100
D. 平均每秒用户请求 50
9. 不同级别的用户对同一对象拥有不同的访问权利或某个客户端不能直接操作到某个对象,但有必须和那个对象有所互动, 这种情况最好使用什么设计模式.( D)
A.Bridge 模式
B. Fa?ade 模式
C. Adapter 模式
D. Proxy 模式
10. 下面哪个Set是排序的? (C)
A. LinkedHashSet
B. HashSet
C. TreeSet
D. AbstractSet
11. 用1,2 , 2 ,3, 4 ,5这6个数字, 用Java 写一个main 函数, 打印出所有不同的排列, 如: 512234, 412345等, 要求: “4”不能在第三位,“3”与”5”不能相连。
package test;
import java.util.Iterator;
import java.util.TreeSet;
public class numberRandom {
String[] stra = { "1", "2", "2", "3", "4", "5" };
int n = stra.length;
boolean[] visited = new boolean[n];
String result = "";
TreeSet<String> ts = new TreeSet<String>();
int[][] a = new int[n][n];
private void searchMap(){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j){
a[i][j]=0; //图中对角线部分是无法访问的
}else{
a[i][j]=1;
}
}
}
//3和5不能相连
a[3][5]=0;
a[5][3]=0;
//开始遍历
for(int i=0;i<n;i++){
search(i);
}
Iterator<String> it = ts.iterator();
while(it.hasNext()){
String str =it.next();
//4不能在第三位
if(str.indexOf("4")!=2){
System.out.println(str);
}
}
}
//这是个深度优先的遍历
private void search(int startIndex){
visited[startIndex] = true;
result = result + stra[startIndex];
if(result.length() ==n){
ts.add(result);
}
for(int j=0;j<n;j++){
if(a[startIndex][j]==1&&visited[j]==false){
search(j);
}else{
continue;
}
}
//一个result结束后踢掉最后一个,寻找别的可能性,若没有的话,则继续向前踢掉当前最后一个
result = result.substring(0,result.length()-1);
visited[startIndex] = false;
}
public static void main(String[] args) {
new numberRandom().searchMap();
}
}
package test;
public class Demo8 {
private static String[] forbidenNumber = new String[] { "0", "6", "7", "8", "9" };
private static String[] mustExistNumber = new String[] { "1", "2", "2", "3", "4", "5" };
private static boolean isValidNumber(String str) {
// 检查是否有非法数字,有返回false,否则继续
for (String number : forbidenNumber) {
if (str.indexOf(number) >= 0) {
return false;
}
}
// 检查是否存在要的数字,如果不存在返回false,否则继续
for (String number : mustExistNumber) {
int temp = str.indexOf(number);
if (temp < 0) {
return false;
} else if ((str.indexOf(number, temp + 1) > temp)
&& str.charAt(temp) != '2') {
return false;
}
}
// 检查4在不在第三位,是返回false
if (str.charAt(2) == '4') {
return false;
}
// 检查是否存在35在一起,有返回false
if (str.indexOf("35") >= 0 || str.indexOf("53") >= 0) {
return false;
}
return true;
}
public static void main(String[] args) {
// TODO code application logic here
for (int i = 122345; i < 543221; i++) {
if (isValidNumber(String.valueOf(i))) {
System.out.println(i);
}
}
}
}
package test;
public class Demo9 {
private static String[] mustExistNumber = new String[] { "1", "2", "2","3", "4", "5" };
private static boolean isValidNumber(String str) {
// 检查是否包含12345这五个数,不包含返回false
for (String number : mustExistNumber) {
if (str.indexOf(number) < 0)
return false;
}
// 检查是否有两个2,只有一个返回false
// 不需要考虑3个2的情况,因为第一个条件已经限制了最多有两个2
if (str.lastIndexOf("2") == str.indexOf("2")) {
return false;
}
// 检查4在不在第三位,是返回false
if (str.charAt(2) == '4') {
return false;
}
// 检查是否存在35在一起,有返回false
if (str.indexOf("35") >= 0 || str.indexOf("53") >= 0) {
return false;
}
return true;
}
public static void main(String[] args) {
// TODO code application logic here
for (int i = 122345; i < 543221; i++) {
if (isValidNumber(String.valueOf(i))) {
System.out.println(i);
}
}
}
}
12. 一个数如果恰好等于它的因子之和,这个数就称为”完数”.例如 6 = 1+2+3。编程找出1000以内的所有完数。
package test;
/**
* 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
* 根据题意,这里的因子是不包括它本身,本身是指假因子。
*/
public class Wanshu {
public static void main(String[] args) {
int s;
for (int i = 1; i <= 1000; i++) {
s = 0;
for (int j = 1; j <= i / 2; j++)
if (i % j == 0)
s = s + j;
if (s == i)
System.out.print(i + " ");
}
System.out.println();
}
}
13. HashSet里的元素是不能重复的, 那用什么方法来区分重复与否呢?
答案:当往集合在添加元素时,调用add(Object)方法时候,首先会调用Object的hashCode()方法判hashCode是否已经存在,如不存在则直接插入元素;
如果已存在则调用Object对象的equals()方法判断是否返回true,如果为true则说明元素已经 存在,如为false则插入元素。
答案:List,Set是继承Collection接口; Map不是。
List:元素有放入顺序,元素可重复 ,通过下标来存取 和值来存取
Map:元素按键值对存取,无放入顺序
Set:元素无存取顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
按值传递是指的是在方法调用时,传递的参数是按值的拷贝传递。
按值传递重要特点:传递的是值的拷贝,也就是说传递后就互不相关了
public class TempTest {
private void test1(int a) {
a = 5;
System.out.println("test1方法中的a=" + a);
}
public static void main(String[] args) {
TempTest t = new TempTest();
int a = 3;
t.test1(a);// 传递后,test1方法对变量值的改变不影响这里的a
System.out.println("main方法中的a=" + a);
}
}
运行结果是:
test1方法中的a=5
main方法中的a=3
按引用传递是指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。
package test;
public class TempTest {
private void test1(A a) {
a.age = 20;
System.out.println("test1方法中的age=" + a.age);
}
public static void main(String[] args) {
TempTest t = new TempTest();
A a = new A();
a.age = 10;
t.test1(a);
System.out.println("main方法中的age=" + a.age);
}
}
class A {
public int age = 0;
}
test1方法中的age=20
main方法中的age=20
16. switch是否作用在byte上, 是否能作用在long上, 是否能作用在String上?
答案:switch可作用于char byte short int;
switch可作用于char byte short int对应的包装类;
switch不可作用于long double float boolean,包括他们的包装类;
17 Java语言如何进行异常处理? 请写出几个常见的运行时异常的编译时异常
答案:java语言进行异常处理的方式有:
throws: throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)
throw : throw是语句抛出一个异常。
常见的运行时异常的编译时异常:
NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ClassNotFoundException - 类找不到异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常
18. 简述数据库事务和实际工作中的作用
所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。
简单举个例子就是你要同时修改数据库中两个不同表的时候,如果它们不是一个事务的话,当第一个表修改完,可是第二表改修出现了异常而没能修改的情况下,就只有第二个表回到未修改之前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个事务的时候,当第一个表修改完,可是第二表改修出现了异常而没能修改的情况下,第一个表和第二个表都要回到未修改的状态!这就是所谓的事务回滚。
例如,在将资金从一个帐户转移到另一个帐户的银行应用中,一个帐户将一定的金额贷记到一个数据库表中,同时另一个帐户将相同的金额借记到另一个数据库表中。由于计算机可能会因停电、网络中断等而出现故障,因此有可能更新了一个表中的行,但没有更新另一个表中的行。如果数据库支持事务,则可以将数据库操作组成一个事务,以防止因这些事件而使数据库出现不一致。如果事务中的某个点发生故障,则所有更新都可以回滚到事务开始之前的状态。如果没有发生故障,则通过以完成状态提交事务来完成更新。
19. 已知一棵二叉树,如果先序遍历的节点顺序是: ADCEFGHB ,中序遍历是: CDFEGHAB ,则后序遍历结果为:( D )
A. CFHGEBDA
B. CDFEGHBA
C. FGHCDEBA
D. CFHGEDBA
知识点
对于二叉树的遍历方式一般分为三种先序、中序、后序三种方式:
先序遍历(根左右)
若二叉树为空,则不进行任何操作:否则
1、访问根结点。
2、先序方式遍历左子树。
3、先序遍历右子树。
中序遍历(左根右)
若二叉树为空,则不进行任何操作:否则
1、中序遍历左子树。
2、访问根结点。
3、中序遍历右子树。
后序遍历(左右根)
若二叉树为空,则不进行任何操作:否则
1、后序遍历左子树。
2、后序遍历右子树。
3、放问根结点。
因此,根据题目给出的先序遍历和中序遍历,可以画出二叉树
20. 下列哪两个数据结构,同时具有较高的查找和删除性能?(CD)
A. 有序数组
B. 有序链表
C. AVL 树
D. Hash 表
知识点:
平衡二叉树的查找,插入和删除性能都是O(logN) ,其中查找和删除性能较好;哈希表的查找、插入和删除性能都是 O(1) ,都是最好的。所以最后的结果选择: CD
21. 下列排序算法中,哪些时间复杂度不会超过 nlogn?(BC)
A. 快速排序
B. 堆排序
C. 归并排序
D. 冒泡排序
22. 初始序列为 1 8 6 2 5 4 7 3 一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为:( A )
A. 8 3 2 5 1 6 4 7
B. 3 2 8 5 1 4 6 7
C. 3 8 2 5 1 6 7 4
D. 8 2 3 5 1 4 7 6
初始化序列:1 8 6 2 5 4 7 3,,小根堆就是要求结点的值小于其左右孩子结点的值,左右孩子的大小没有关系,那么小根堆排序之后为:1 2 4 3 5 6 7 8;中序遍历:左根右,故遍历结果为:8 3 2 5 1 6 4 7
21. 当n = 5 时,下列函数的返回值是:(A)
int foo(int n){
if(n<2)return n;
return foo(n-1)+foo(n-2);
}
A.5
B.7
C.8
D.1
22. S市 A ,B 共有两个区,人口比例为 3:5 ,据历史统计 A 区的犯罪率为 0.01% ,B 区为 0.015% ,现有一起新案件发生在 S 市,那么案件发生在 A 区的可能性有多大?(C)
A.37.5%
B.32.5%
C.28.6%
D.26.1%
这道题首先得了解犯罪率是什么?犯罪率就是犯罪人数与总人口数的比。因此可以直接得出公式:( 3 0.01% ) / ( 3 0.01% + 5 * 0.015% ) = 28.6%
当然如果不好理解的话,我们可以实例化,比如B 区假设 5000 人,A 区 3000 人,A 区的犯罪率为 0.01%,那么 A 区犯罪人数为 30 人,B 区的犯罪率为 0.015% ,那么 B 区的犯罪人数为 75 人 ,求发生在 A 区的可能性,就是说 A 区的犯罪人数在总犯罪人数的多少,也就是 30/(30+75)=0.2857
当然,也可以回归到我们高中遗忘的知识:
假设C表示犯案属性
在A区犯案概率:P(C|A)=0.01%
在B区犯案概率:P(C|B)=0.015%
在A区概率:P(A)=3/8
在B区概率:P(B)=5/8
犯案概率:P(C)=(3/80.01%+5/80.015%)
根据贝叶斯公式:P(A|C) = P(A,C) / P(C) = [P(C|A) P(A)] / [ P(C|A) P(A)+ P(C|B) P(B) ] 也可以算出答案来
故,最后结果选择为:C
23. Unix系统中,哪些可以用于进程间的通信?(ABCD )
A.Socket
B.共享内存
C.消息队列
D.信号量
知识点
管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);
报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。
故最后选择的结果为:ABCD
24. 静态变量通常存储在进程哪个区?( C )
A.栈区
B.堆区
C.全局区
D.代码区
静态变量的修饰关键字:static,又称静态全局变量。故最后选择的结果为: C
25. 如何提供查询Name字段的性能( B )
A. 在Name字段上添加主键
B. 在Name字段上添加索引
C. 在Age字段上添加主键
D. 在Age字段上添加索引
26. IP地址131.153.12.71是一个(B)类IP地址
A.A
B.B
C.C
D.D
27. 浏览器访问某页面,HTTP 协议返回状态码为 403 时表示:( B )
A. 找不到该页面
B. 禁止访问
C. 内部服务器访问
D. 服务器繁忙
28. 如果某系统 15*4=112 成立,则系统采用的是( A )进制
A.6
B.7
C.8
D.9
这题因为是选择题,我们可以直接从A 的选项开始,假设是 6 进制的,我们把等式 15 4 = 112 转为十进制,就是 11 4 = 44,最后验证等式是否成立,明显等式是成立的,因此答案已经出来了,选择 A 。
当然我们也可以假设是X 进制,且我们知道 X 大于 5, 则:(x+5)4 = xx +x +2,所以最后计算的结果也为 6。
29. TCP和 IP 分别对应了 OSI 中的哪几层?(CD)
A. Application layer
B. Presentation layer
C. Transport layer
D. Network layer
30. 一个栈的入栈序列是A,B,C,D,E,则栈的不可能的输出序列是?(C)
A.EDCBA
B.DECBA
C.DCEAB
D.ABCDE
堆栈分别是先进后出,后进先出,
选项a 是 abcde 先入栈,然后依次出栈,正好是 edcba
选项b 是 abcd 先依次入栈,然后 d 出栈, e 再入栈, e 出栈
选项c 是错误的,不可能 a 先出栈
选项d 是 a 入栈,然后 a 出栈;b 再入栈, b 出栈.依此类推
最后的结果选择C。
31. 同一进程下的线程可以共享以下?(BD)
A.stack
B.data section
C.register set
D.file fd
知识点
线程共享的内容包括:
1.进程代码段
2.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)
3.进程打开的文件描述符、
4.信号的处理器、
5.进程的当前目录和
6.进程用户ID与进程组ID
线程独有的内容包括:
1.线程ID
2.寄存器组的值
3.线程的堆栈
4.错误返回码
5.线程的信号屏蔽码
所以选择为BD。
32. 对于派生类的构造函数,在定义对象时构造函数的执行顺序为?(D)
1:成员对象的构造函数
2:基类的构造函数
3:派生类本身的构造函数
A.123
B.231
C.321
D.213
33. 递归函数最终会结束,那么这个函数一定?(B)
A. 使用了局部变量
B. 有一个分支不调用自身
C. 使用了全局变量或者使用了一个或多个参数
D. 没有循环调用
34. 编译过程中,语法分析器的任务是(BCD)
A. 分析单词是怎样构成的
B. 分析单词串是如何构成语言和说明的
C. 分析语句和说明是如何构成程序的
D. 分析程序的结构
知识点
1.词法分析(lexical analysis)
词法分析是编译过程的第一个阶段。这个阶段的任务是从左到右的读取每个字符,然后根据构词规则识别单词。词法分析可以用lex等工具自动生成。
2.语法分析(syntax analysis)
语法分析是编译过程的一个逻辑阶段。语法分析在词法分析的基础上,将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等。语法分析程序判断程序在结构上是否正确。
3.语义分析(semantic analysis)
属于逻辑阶段。对源程序进行上下文有关性质的审查,类型检查。如赋值语句左右端类型匹配问题。
所以BCD 都属于词法分析,选择结果为 BCD。
35. 同步机制应该遵循哪些基本准则?(ABCD)
A.空闲让进
B.忙则等待
C.有限等待
D.让权等待
36. 进程进入等待状态有哪几种方式?(D)
A. CPU调度给优先级更高的线程
B. 阻塞的