# Java工程师笔试题
**Repository Path**: haolixu/JavaPenQuestions
## Basic Information
- **Project Name**: Java工程师笔试题
- **Description**: Java工程师笔试题
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 2
- **Created**: 2018-03-29
- **Last Updated**: 2025-12-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Java工程师笔试 :bowtie: :ghost: :tw-1f361:
### 二叉树节点的对称序列是ABCDEFG,后序序列是BDCAFGE,则该二叉树的前序序列是?
> 对称序列就是中序,先序(根左右),中序(左根右),后序(左右根)
### 若两台主机在同一个子网中,则两台主机的IP地址分别与它们的子网掩码相“与”的结果是?
> IP地址与子网掩码与运算的结果为该网络的网络号,因为他们在同一个子网,因此网络号也必然相同
### 编程实现二分查找算法?
```
//给定有序查找表array 二分查找给定的值data
//查找成功返回下标 查找失败返回-1
static int funBinSearch(int[] array, int data) {
int low = 0;
int high = array.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (data == array[mid]) {
return mid;
} else if (data < array[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
```
### list和map的区别?
> `List`:
>* 1.可以允许重复的对象。
>* 2.可以插入多个null元素。
>* 3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
>* 常用的实现类有 ArrayList、LinkedList 和 Vector。
> `Set`:
>* 1.不允许重复对象
>* 2. 无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。
>* 3. 只允许一个 null 元素.
>* 4.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。
> `Map`:
>* 1.Map不是collection的子接口或者实现类。Map是一个接口。
>* 2.Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。
>* 3.TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。
>* 4.Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。
>* 5.Map 接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。
### 构造器constructor是否可被override?
>* 构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。
>* 构造器只能用 **public** **private** **protected**这三个权限修饰符,且不能有返回语句。
### 要从文件"file.dat"中读出第10个字节到变量c中,下列哪个方法适合? ()
```
RandomAccessFile in=new RandomAccessFile("file.dat");
in.skip(9);
int c=in.readByte();
```
### 同步有哪几种实现方式?
>* 1.使用`synchronized`关键字修饰类或者代码块;
>* 2.使用`Volatile`关键字修饰变量;
>* 3.在类中加入`重入锁`。
### 下面关于垃圾收集的描述的说法哪个是错误的?
>* 1、使用垃圾收集的程序不需要明确释放对象
>* 2、现代垃圾收集能够处理循环引用问题
>* 3、垃圾收集能提高程序员效率
>* 4、垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存
### A类派生出子类B,B类派生出子类C,并且在Java源代码有如下说明:
```
1. A a0=new A();
2. A a1=new B();
3. A a2=new C();
问以下哪个说法是正确的?
```
> 继承是单继承,并且`继承是具有传递性`的,子类向上转型是无条件的,所以C类也可以说是A类的子类,所以1,2,3行都可以通过编译.
### 如果IPv4网络的IP地址为192.168.1.200,子网掩码为255.255.255.0,那么该IP所在的子网id为?
```
IP:192.168.1.1
MASK:255.255.255.0
将IP和mask写成二进制表示:
ip: 11000000.10101000.00000001.00000001
mask: 11111111.11111111.11111111.00000000
与运算结果: 11000000.10101000.00000001.00000000
转换十进制:192.168.1.0
```
### linux系统中,给文件授予可执行权限的命令是?
>* `chmod`是更改文件的权限
>* `chown`是改改文件的属主与属组
>* `chgrp`只是更改文件的属组。
### 下面哪一个概念不是spring中常用的?
>* `IOC`的思想是:Spring容器来实现这些相互依赖对象的创建、协调工作。对象只需要关系业务逻辑本身就可以了。
>* IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过`DI`(依赖注入)来实现的。
>* Spring 是面向 Bean 的编程(`BOP`).Bean 在 Spring 中作用就像 Object 对 OOP 的意义一样.
>* `AOP`的本质是在一系列纵向的控制流程中,把那些相同的子流程提取成一个横向的面,面向这些横向的面进行操作。
>* `ORM`技术特点:
>* 1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
>* 2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。
### 在内存中每个基本单位都被赋予唯一的序号,这个序号叫什么?
>* 内存地址,用16进制表示.
### 将二进制11011转换为十进制?
> (11011.01)二进制=1x24+1x23+0x21+1x20+0x2-1+1x2-2
### 在C语言中,5<<2的结果是?
> 5<<2代表将5的二进制数添两个0
### 如果进程A调用函数fork,创建函数B,然后进程B再调用fork函数,创建进程C,进程C调用exec执行新的程序,那么各个进程将以什么样的顺序执行?
> 无固定的执行顺序
### 在实现基于TCP的网络应用程序时,服务器端正确的处理流程是?
> Socket()`->`Bind()`->`Listen()`->`Accept()`->`Read()/Write()`->`Close()
### 数据库中exists和in的说法正确的是
>* `in`在查询的时候,首先查询子查询的表,然后将内表和外表做一个`笛卡尔积`,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。
>* 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。
>* in 是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。
### 以下关于对象序列化描述正确的是?
> 对象的序列化主要有两种用途:
>* 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
>* 在网络上传送对象的字节序列。
> `ObjectOutputStream类`的一个对象用于序列化一个对象。
> 类必须实现`Serializable`或`Externalizable`接口以便序列化或反序列化
### 使用JDBC事务的步骤是?顺序要一致
>* 取消Connection的事务自动提交方式
>* 获取Connection对象
>* 操作完毕提交事务
>* 发生异常回滚事务
### 下列说法错误的有( )?
>* java不允许单独的方法,过程或函数存在,需要隶属于某一类中。
>* java语言中的方法属于`对象的成员`,而不是类的成员。不过,`静态方法`属于类的成员。
### 从1到500的500个数,第一次删除奇数位,第二次删除剩下来的奇数位,以此类推,最后剩下的唯一一位数是:?
```
分析:
比如:1,2,删除奇数位,那剩下的是2,
1,2,3,删除奇数位,剩下的是2,
1,2,3,4,剩下的是4,
1,2,3,4,5,6,7,剩下的是4,
1,2,3,4,5,6,7,8和1,2,3,4,5,6,7,8,9,10,11,12,13,14,15剩下的是8,
这里有什么规律:就是当1~n,2^i* Java和C#都是使用`根搜索算法`来判断对象是否存活。
>* `标记-清除算法`:标记清除后会产生大量的不连续内存碎片.
>* `复制算法`:将内存划分为大小相等的两块,每次只使用其中的一块。当这块内存用完了,就将还存活的对象复制到另一块内存上,然后把已使用过的内存空间一次清理掉。其不用考虑内存碎片化问题,但是内存减少了一半.
>* `标记-整理算法`:让所有存活对象都向一端移动,然后直接清理掉端边界以外的所有内存。
>* `分代收集算法`:新生代(少量存活)用复制算法,老年代(对象存活率高)“标记-清理”算法.
### 哪个关键字可以给对象加互斥锁?
>* `synchronized`关键字用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个段代码.
>* `volatile`:用来确保将变量的跟新操作通知到其他线程,当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。
>* `serialize`:Java 对象序列化为二进制文件。
### 关于以下程序段,正确的说法是?
```
String s1="abc"+"def";
String s2=new String(s1);
if(s1==s2)
system.out.printIn("== succeeded");
if(s1.equals(s2))
system.out.printIn(".equals() secceeded")
```
>* ==是判断两个变量或实例是不是指向同一个内存空间
equals是判断两个变量或实例所指向的内存空间的值是不是相同
>* ==是指对内存地址进行比较
equals()是对字符串的内容进行比较
>* ==指引用是否相同
equals()指的是值是否相同
### 指出下列程序运行的结果?
```
public class Example{
String str=new String("good");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
Sytem.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
```
> 其结果是 good and gbc ,为啥 string 没改变而char 改变了呢??
> 原来是因为:
>* string是`按值传递`,所以在函数中对它的操作只生效于它的副本,与原字符串无关。
>* char[]是`按址传递`,在函数中根据地址,可以直接对字符串进行操作。
### 有如下程序段:
```
int total = 0;
for ( int i = 0; i < 4; i++ ){
if ( i == 1) continue;
if ( i == 2) break;
total += i;
}
则执行完该程序段后total的值为:
A. 0
B. 1
C. 3
D. 16
```
> `continue`跳过本次循环,而`break`说明循环终止
### 是否可以从一个static方法内部发出非static方法的调用
> 不可以。因为`非static方法`是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而`static方法`调用时不需要创建对象,可以直接调用。
### 子类要使用父类的方法,必须使用关键字super?
> 不需要,但是如果你子类如果重写了父类的方法,那么在你想掉父类的方法的时候就必须写成super.method()这种方式了.
### 运行时异常可以不用显示捕捉?
> `RuntimeException`和普通Exception的区别就是可以不用捕获,抛出时直接让程序崩溃掉.
### 实例变量在使用new Xxxx()创建该类的实例时被创建,而其生存期和该类的实例对象的生存期相同?
>* `局部变量`是定义在方法里面,在定义该变量的方法被调用时创建,而在该方法退出后被撤销
>* `实例变量`有时也称为成员变量,在使用new Xxx()创建该类的实例时被创建,而其生存期和该类的实例对象的生存期相同
>* `类变量`是用关键字static生命的实例变量,类变量在该类被加载时被创建,不一定用new Xxx()创建,所有该类的实例对象共享该类变量,其生存期是类的生存期。
### 内存有哪几种存储组织结构?
>* 1:可执行代码
>* 2:静态数据
>* 3:动态数据(堆)
>* 4:栈
### 内存越界和内存泄漏?
> 内存越界又叫内存溢出,指程序在申请内存时,没有足够的内存空间供其使用。
内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,占用有用内存。
### 如何在linux多个进程间 进行通讯?给出三种?
> 管道,共享内存,信号量(又叫信号灯),套接口 (socket)。
### 运输层的两个主要协议是?
> TCP和UDP。用户数据报协议UDP在传送数据之前不需要建立连接,UDP不提供可靠交付,UDP首部只有8个字节。
传输控制协议TCP在传送数据之前必须先建立连接,数据传送结束要释放链接,TCP提供可靠的,提供面向连接的服务,TCP首部的最小长度是20个字节。
### 结构化程序设计的三种基本逻辑结构?
> 顺序结构、选择结构和循环结构。采用结构化程序设计方法,程序结构清晰,易于阅读、测试、排错和修改。由于每个模块执行单一功能,模块间联系较少,使程序编制比过去更简单,程序更可靠,而且增加了可维护性,每个模块可以独立编制、测试。
### 什么是死锁?如何避免死锁?
> 死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局,当过程处于这种僵持状态时,若无外力作用,他们将无法向前推进。在资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁。
### 轮询任务调度和可抢占式调度有什么区别?
>* 轮询任务调度无需记录当前所有连接的状态,所以它是一种无状态调度,但不利于后面的请求及时得到响应。
>* 抢占式调度允许高优先级的任务打断当前执行的任务,抢占CPU的控制权。这有利于后面的高优先级的任务也能及时得到响
应。但实现相对较复杂且可能出现低优先级的任务长期得不到调度。
### 简单描述面向对象的三个特征?
>* 封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private,protected,public) 。
>* 继承:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
>* 多态:是将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
### 交换和路由的区别是什么?VLAN有什么特点?
>* 交换是不需要 IP 地址的,而路由需要。
>* VLAN 是虚拟局域网的英文缩写,它的特点有三:控制广播,安全,灵活性和可扩张性。
### C语言中的static的作用是什么?
> static在c里面可以用来修饰变量,也可以用来修饰函数。
### C++中引用与指针有什么区别?
> 引用是变量的别名,引用不占用内存空间,而指针占用内存空间。
### 什么是ajax和json?
>* Ajax用来描述一组技术,它使浏览器可以为用户提供更为自然的浏览体验,它是“Asynchronous JavaScript + XML的简写”。
>* JSON来自于javascript,是一种比较流行的标准格式,是数据的载体,更加易读、更便于肉眼检查。
### 日志文件用于保存?
> 日志文件是 对数据库的更新操作.
### String,StringBuffer,StringBuilder的区别?
>* 操作少量的数据使用 String;
>* 单线程操作大量数据使用 StringBuilder;
>* 多线程操作大量数据使用 StringBuffer。
### 在浏览器地址栏键入URL,按下回车之后会经历以下流程:
>* 浏览器向DNS服务器谞求解析该URL中的域名所对应的IP地址;
>* 解析出IP地址后,根据该IP地址和默口 80,和服务器建立TCP连接;
>* 浏览器发出读取文件(URL中域名后面部分对应的文件)的HTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器
>* 服务器对浏览器请求作出响应,并把对应的htm文本发送给浏览器
>* 释放TCP 连接
>* 浏览器将该html文本并显示内容
### IP地址中的ABCD类网:
>* A类地址范围:1. 0. 0.1—126.155. 255. 254
>* B类地址范围:128. 0. 0.1—191. 255. 255. 254
>* C类地址范围:192. 0. 0.1—223. 255. 255. 254
>* D类地址范围:224. 0. 0.1—239. 255. 255. 254
>* E类地址范围:240. 0. 0.1—255. 255. 255. 254
### OSI七层机构:
| 具体七层 | 数据格式 | 功能和连接方式 | 典型设备 |
| -------- | -----: | :----: | :----: |
| 应用层 | data | 网络服务和使用者应用程序间的一个接口 | 终端设备(pc和手机) |
| 表示层 | data | 数据表示,数据安全,数据压缩 | 终端设备(pc和手机) |
| 会话层 | data | 数据传输,会话连接管理与流量控制,差错控制 | 终端设备(pc和手机) |
| 传输层 | 数据组织成数据段 | 用一个寻址机制来标识一个特定的应用程序(端口号 | 终端设备(pc和手机) |
| 网络层 | 分割和重新组织成数据包pocket | 基于网络层地址(IP地址)进行不同网络系统的地址选择 | 网关,路由器 |
| 数据链路层 | 将比特信息封装成比特帧 | 通过系统提供的物理地址来寻址 | 网桥和交换机 |
| 物理层 | 比特流(bit) | 建立或者取消物理连接 | 光纤,同轴电缆,中继器,集线器 |
### String类能不能被继承,为什么?
> 不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。
### java支持的数据类型有哪些?什么是自动拆装箱?
>* 3种引用类型:`数组`,`类`,`接口`
>* 8种数据类型:`int`,`float`,`double`,`long`,`short`,`char`,`byte`,`boolean`
>* 是指基本数据类型和引用数据类型之间的自动转换
### Java中什么是重载,什么是构造函数,有何异同?
>* Java中的构造函数是为了初始化对象的,构造函数的函数名和类名一致,默认的构造函数没有参数,没有返回值,构造函数的函数体内,没有内容。
>* 构造函数的重载是函数名与类名相同,参数类型不同,参数不同。同样的作用也是为了初始化对象的。重载的最直接作用是方便了程序员可以根据不同的参数个数,顺序,类型,自动匹配方法,减少写过个函数名或方法名的重复步骤。
### arraylist和linklist的区别
>* 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous)
>* 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
>* 3.对于新增和删除操作,LinedList比较占优势,因为ArrayList要移动数据。 适合用来实现堆栈与队列,前者先进后出,后者是先进先出.
### &和&&有什么区别?
>* &&当第一个条件不成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件语句执行完为止。
### 在公司局域网上ping www.lixu666.cn没有涉及的网络协议是?
>* 1、因为ping的话 后面跟的是地址,所以要先将域名转换为ip地址,即用到了DNS
>* 2、获取到ip地址后,在数据链路层是根据MAC地址传输的,所以要用到ARP解析服务,获取到MAC地址
>* 3、ping功能是测试另一台主机是否可达,程序发送一份ICMP回显请求给目标主机,并等待返回ICMP回显应答,(ICMP主要是用于ip主机、路由器之间传递控制信息,控制信息是指网络通不通,主机是否可达)
>* 4、TCP的话,不涉及数据传输,不会用到
### 函数的参数值通常存储在进程的哪个区?
>* 1:`栈区`-由编译器自动释放分配,存放函数的参数值,局部变量的值.
>* 2:`堆区`-又称动态内存分配,一般由程序员释放分配.如果某动态内存不再使用需要将其释放掉,否则我们认为发生了内存泄漏现象.
>* 3:`代码区`-存放函数体的二进制代码.
>* 4:`文字常量区`-存放常量字符串.
>* 5:`静态存储区`-内存在程序编译的时候就已经分配好,主要用于存放静态数据,全局数据和常量.
### 假设只有100m的内存,需要对1Gb的数据进行排序,最合适大的算法是?
> 首先内存只有100Mb,而数据却有1Gb,所以肯定没法一次性放到内存去排序,只能用外部排序,而外排序通常是使用多路归并排序,即将原文件分解成多个能够一次性装入内存的部分(如这里的100Mb),分别把每一部分调入内存完成排序(根据情况选取适合的内排算法),然后对已经排序的子文件进行多路归并排序(胜者树或败者树)。
### 如果某系统16*5=106成立,则系统采用的是多少进制?
> 设使用的是p进制,则$$15*4=112等价于:(p + 5) * 4 = p^2 + p + 2$$
> 解出来p=-3(舍去)和p=6
### 接口和抽象类的异同?
> 接口和抽象类都是继承树的上层,他们的`共同点`如下:
>* 1)都是上层的抽象层。
>* 2)都不能被实例化.
>* 3)都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,但是不比提供具体的实现.
> 他们的`区别`如下:
>* 1)在抽象类中可以写非抽象的方法,从而避免在子类中重复书写他们,这样可以提高代码的复用性,这是抽象类的优势;接口中只能有抽象的方法。
>* 2)一个类只能继承一个直接父类,这个父类可以是具体的类也可是抽象类;但是一个类可以实现多个接口。使用接口可以方便统一管理和方便调用.
### 事务的原子性是指?
>* 原子性指的是事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。
### 以下关于链表实现的堆中哪个表述是正确的?
> push操作如果更新节点插入在链表头中,则pop操作必须从链表尾移除节点
### 一种既有利于短小作业又兼顾到长作业的调度算法是?
>* `最高响应比优先算法`等待时间相同时,要求服务时间愈短,优先权愈高,因而该算法有利于短作业,对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而获得处理机,因此该算法即有利于短作业又兼顾到了长作业。
### 以下关于cache控制的HTTP Header中那个意义为不允许代理服务器缓存内容?
>* `Cache-Control: private`:响应只能作为私有缓存,不能在用户之间共享
>* `Cache-Control:no-cache`:提醒浏览器要从服务器提取文档进行验证
>* `Cache-Control:no-store`:绝对禁止缓存(用于机密,敏感文件)
>* `Cache-Control: max-age=60`:60秒之后缓存过期(相对时间)
### 下面关于E-R图和E-R模型,哪个说法是错误的?
> E-R模型的构成成分是`实体集`、`属性`和`联系集`
>* 1) 实体集用矩形框表示,矩形框内写上实体名。
>* 2) 实体的属性用椭圆框表示,框内写上属性名,并用无向边与其实体集相连。
>* 3) 实体间的联系用菱形框表示,联系以适当的含义命名,名字写在菱形框中,用无向连线将参加联系的实体矩形框分别与菱形框相连,并在连线上标明联系的类型,即1—1、1—N或M—N。
### 下面关于进程和线程,说法正确的事?
> 多进程下,每个进程都有自己的独立地址空间,进程间的数据空间也相互独立,彼此通信以专门的通信方式进行。而多线程下,同一进程内的线程共享进程的地址空间,一个线程的数据可以直接提供给其他线程使用。有时候在对临界资源使用时,当临界资源被一个线程占有,如果它终止时不释放占有的临界资源,而这个临界资源仍然认为它还被这个退出的线程使用,因而永远得不到释放。如果另外一个线程也在等待这个临界资源,它就可能无限等待下去,从而形成死锁.
>* 进程的特征:`动态`,`独立`,`异步`,`并发`
### 当一台主机从一个网络移到另一个网络时,以下说法正确的是?
>* `mac地址`在你的网卡上本就是不会改变的;
>* `ip地址`要变化,否则无法与其他主机进行通信。
### 在一个单链表中,若删除P后续结果所指的后续结果,则执行
> 单链表中若要删除直接后继节点,自然就是要将P的后继节点指向P后继节点的节点
### 在子类的定义中有一个和父类同名的成员函数,这一现象称为函数的
>* 当子父类中出现成员函数一模一样的情况,会运行子类的函数。这种现象,称为`覆盖`操作。
>* `什么时候使用覆盖操作?`-保留父类功能的同时对父类功能进行更新、扩展。
>* 被覆盖的方法在子类中只能通过super调用。
>* 方法覆盖要求参数列表必须一致,而`方法重载`要求参数列表必须不一致。
>* 父类的一个方法只能被子类覆盖一次,而一个方法可以在所有的类中可以被重载多次。
### 一条sql语句中,group by处于什么位置?
> 在where子句之后
### 以下关于TCP/IP协议中,不正确的是?
>* `TCP`负责将信息拆分为数据包,并在数据包到达目的地后对其进行装配
>* `IP`负责为数据包选择路由以便将其传递到正确的目的地
>* IP,`IGMP`都是网络层的协议,TCP是传输层的协议
### 以下描述不正确的是?
>* 存取速度:寄存器 > Cache > 内存 > 硬盘 > 光盘 > 软盘
>* 随机访问的速度要比顺序访问慢很多,原因是因为磁头频繁的寻道,定位,磁头的移动消耗掉很多时间。
> 使用中断的好处:
>* 提高计算机系统效率。
>* 维持系统可靠正常工作。
>* 满足实时处理要求。
>* 提供故障现场处理手段。
>* 同一进程下的线程可以共享`data section`和`file fd`,`stack`和`register set`不能共享
### 堆栈溢出一般是由什么原因导致的?
>* 1.函数调用层次太深。
>* 2.动态申请空间使用之后没有释放。
>* 3.数组访问越界。
>* 4.指针非法访问。
### 如何减少换页错误?
>* 访问局部性(locality of reference)满足进程要求
>* 使用基于最短剩余时间(shortest remaining time)的调度机制
### 进程进入等待状态有哪几种方式?
>* cpu调度给更高级的线程是进入`就绪态`
>* 阻塞的线程获得资源或信号是进入`就绪态`
>* 时间片轮转的情况下,时间片到了是`就绪态`
>* 自旋锁(spinlock)是一种保护临界区最常见的技术。没有获得自旋锁的进程在获取锁之前处于忙等(`阻塞状态`)。
### 在UML类图中有以下几种常见的关系:
>* `泛化`:是对象之间耦合度最大的一种关系,子类继承父类的所有细节。在类图中使用带三角箭头的实线表示,箭头从子类指向父类。
>* `实现`:在类图中就是接口和实现的关系。使用带三角箭头的虚线表示,箭头从实现类指向接口。
>* `依赖`:对象之间最弱的一种关联方式,是临时性的关联。在类图使用带箭头的虚线表示,箭头从使用类指向被依赖的类。
>* `关联`:对象之间一种引用关系,比如客户类与订单类之间的关系。在类图使用带箭头的实线表示,箭头从使用类指向被关联的类。可以是单向和双向。
>* `聚合`:较强于一般关联,有整体与局部的关系,并且没有了整体,局部也可单独存在。在类图使用空心的菱形表示,菱形从局部指向整体。
>* `组合`:是一种强烈的包含关系。如公司和部门的关系,没有了公司,部门也不能存在了.在类图使用实心的菱形表示,菱形从局部指向整体。
>* `多重性`:通常在关联、聚合、组合中使用。就是代表有多少个关联对象存在。使用数字..星号(数字)表示。
### 函数x的定义如下,问x(x(8))需要调用多少次函数x(int n)?
```
int x(int n) {
if(n<=3)
return 1;
else
return x(n-2)+x(n-4)+1;
}
```
> 我的理解是
```
x(8)=x(6)+x(4)+1
=x(4)+x(2)+1+x(4)+1
=x(2)+x(0)+1+x(2)+1+x(2)+x(0)+1+1
=9
所以x(x(8))=18
```
### 已知g=14,则PHP表达式h=g+=10,运算后的结果是
> h=g=24
### 设计模式中属于结构模式的是?
>* 外观模式
>* 适配器模式
>* 代理模式
>* 桥模式
>* 组合模式
> 除了结构模式,还有创建型模式
>* 工厂模式
>* 原型模式
>* 单例模式
### 指令寄存器的作用是
> 指令寄存器是临时放置从内存里面取得的程序指令的寄存器,用于存放当前从主存储器读出的正在执行的一条指令。
### 表city1有两个字段name,num_person,请将city1中num_person字段根据人数进行重新编码
> `要求`:0≤x<500,000编码为1
> 500,000≤x<1,000,000编码为2
> 1,000,000≤x编码为3
```
select name,
case
when num_person>=0 and num_person<500000 then 1
when num_person>=500000 and num_person<1000000 then 2
when num_person>=1000000 then 3 end as mark
from city1
```
**