1、编写 SQL 语句,返回顾客 ID(cust_id)、顾客名称(cust_name)和登录名(user_login),其中登录名全部为大写字母,并由顾客联系人的前两个字符(cust_contact)和其所在城市的前三个字符(cust_city)组成。提示:需要使用函数、拼接和别名。
select cust_id, cust_name,
upper(concat(substring(cust_contact, 1, 2), substring(cust_city, 1, 3))) as user_login
from Customers
substr 取子串(即取字符串的一部分)语法:substr(被截取的字符串,起始下标,截取的长度) 起始下标从1开始,没有0
Concat函数进行字符串的拼接
upper转换大写
2、以下不是RSTP边缘端口的作用及特性的是( A )
A.在交换机收到TC置位的RST BPDU时,边缘端口也会刷新接口的MAC地址,重新进行学习
B.边缘端口收到BPDU时会失去边缘端口的角色状态,重新参与生成树选举
C.边缘端口在P/A机制中不受SYNC同步的影响,不会阻塞端口
D.边缘端口UP之后可以快速进入forwarding状态,不需要等待30s的转发时延
3、ASBR Summary LSA是由下面谁产生的?
ABR路由器
4、IPv4最大支持的报文字节数为多少
65535
5、以下描述错误的是( D )
Truncate会删除表中的所有数据
delete删除后表结构还在
Drop会从数据库中删除表,所有的数据行
delete和Truncate属于DDM类型、Drop均属于DDL类型
6、mysql中的简化操作视图是很好的简化对象,可以操作的是
查看,存放
7、一个进程从执行状态转换到阻塞状态的可能原因是本进程()。
需要等待其他进程的执行结果
执行了P操作
运行态:进程占用CPU,并在CPU上运行
就绪态:进程已经具备运行条件,但是CPU还没有分配过来
阻塞态:进程因等待某件事发生而暂时不能运行; 进程在一生中,都处于上述3中状态之一。
运行===>就绪: 时间片用完。
就绪===>运行: 运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
运行===>阻塞:发生了I/O请求或等待某件事的发生
阻塞===>就绪:进程所等待的事件发生,就进入就绪队列
P操作是阻塞作用
V操作是唤醒作用
A:时间片用完,进程会从执行态转到就绪态,继续等待时间片轮转;
B:需要等待其它进程的结果,比如说需要等待数据传输,进程此时只能阻塞自己;
C:执行V操作,释放资源,是不会阻塞的;
D:执行P操作,申请资源,当资源不足时,进程会被阻塞。
8、常用的内存管理方法有哪几种?
内存管理有块式管理,页式管理,段式和段页式管理。现在常用段页式管理。
9、对于JVM内存配置参数:
-Xmx10240m
-Xms10240m
-Xmn5120m
-XXSurvivorRatio=3
其最小内存值和Survivor区总大小分别是()
10240m, 2048m
-Xms:初始堆大小。
-Xmx:最大堆大小。
-Xmn:堆内存的年轻代大小,堆内存最大值和年轻代的差值就是老年代的大小。
-XX:NewSize=n:设置年轻代大小
-XX:NewRatio=n 设置年轻代和年老代的比值。如n为2,表示年轻代与年老代比值为1:2,年轻代占整个年轻代年老代和的1/3。
-XX:SurvivorRatio=n
年轻代中Eden区与两个Survivor区的比值,注意Survivor区有两个。如n为3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5。
所以本题中内存值为10240m
survivor=5120/5*2=2048m【3:2,年轻代总量5120】
10、正确的创建Map集合的方式
Map是接口,所以不能实例化
11、已知二叉树的后序遍历序列是cefdbga,中序遍历序列是cbedfag,它的层序遍历序列是
abgcdef
a
b g
c d
e f
12、二分查找时间复杂度
O(logn)
假设有n个数,那么执行一次循环后还剩下n/2个数,执行两次循环后还剩下n/2^2个数,…以此类推,设循环k次后,还剩下1个数,即n/2^k=1,k=logn
13、循环队列的队满条件为( )
(ring.end+1)%maxsize == ring.front
14、已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为()
DGEBHFCA
15、进程间通信效率最高的方式是
共享内存
16、以下命令用于设置环境变量的是( A )
export
cat
echo
env
A 查看设置环境变量
B 显示指定文件的全部内容
C 输出字符串
D 显示当前用户的环境变量
17、如何撤销数据库中已经存在的表X
DROP TABLE X
18、下列关于范式的说法正确的是:
有关系模式R(A,B,C,D,E,F),函数依赖集F={(A,B)→E,(A,C)→F,(A,D)→B,B→C,C→D},则(A、C)是R的候选码;
第二范式是完全依赖,消除了部分依赖
19、项目表中虽然设置索引,但是效果不是很明显,问题可能是()
where中索引列有运算
复合索引未使用左列字段
20、以下关于符号连接与硬连接的说法, 正确的是
创建符号连接时,将创建一个inode
删除硬连接源文件后, 连接文件还可继续访问
Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。
硬链接
硬链接是文件的别名。从技术上讲,他们公用一个inode(inode中包含了一个文件的所有必要的信息,说inode就是文件也是没有问题的)。
由于linux下的文件是通过索引节点(Inode)来识别文件,硬链接也可以认为是一个指向文件索引节点的指针,系统并不为它重新分配inode,\
每添加一个一个硬链接,文件的链接数就加1, 删除一个则链接数减1。
大多数系统不允许创建一个目录的硬链接。在允许创建目录硬链接的系统上,只有超级用户才能才能这样做。
不能创建跨文件系统(分区)的硬链接(这些限制在POSIX中都不是强制性的)。
软链接(符号链接)
软链接是一种特殊的文件类型,其中包含对另一个 文件/目录 以 绝对/相对 路径形式的引用.
软链接可以看做是对一个文件的间接指针,相当于windows下的快捷方式。
软链接没有任何文件系统的限制,任何用户可以创建指向 文件/目录 的符号链接。甚至可以跨越不同机器、不同网络对文件进行链接。
创建文件的软链接时,软链接会使用一个新的inode,所以软链接的inode号和文件的inode号不同(表明他们是两个不同的文件),
软链接的inode里存放着指向文件的路径,删除源文件,软链接也无法使用了,因为文件的路径不存在了;删除软链接对原文件没有任何影响。
当我们再次创建这个文件时(文件名与之前的相同),软链接又会重新指向这个文件(inode号与之前的不同了),而硬链接不会受其影响.
当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,
而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。
21、下列哪些Linux命令可以让前台进程转为后台执行
&
nohup &
ctrl+z
22、下面有关零拷贝技术,描述错误的有
DMA 引擎直接将数据从用户缓冲区拷贝到协议引擎中去,避免了最后一次拷贝
写时复制技术无法减少内存拷贝的次数
传统I/O流程如下:
- 用户应用进程调用read函数,向操作系统发起IO调用,上下文从用户态转为内核态(切换1)
- DMA控制器把数据从磁盘中,读取到内核缓冲区。
- CPU把内核缓冲区数据,拷贝到用户应用缓冲区,上下文从内核态转为用户态(切换2) ,read函数返回
- 用户应用进程通过write函数,发起IO调用,上下文从用户态转为内核态(切换3)
- CPU将用户缓冲区中的数据,拷贝到socket缓冲区
- DMA控制器把数据从socket缓冲区,拷贝到网卡设备,上下文从内核态切换回用户态(切换4) ,write函数返回
从流程图可以看出,传统IO的读写流程,包括了4次上下文切换(4次用户态和内核态的切换),4次数据拷贝(两次CPU拷贝以及两次的DMA拷贝),什么是DMA拷贝呢?我们一起来回顾下,零拷贝涉及的操作系统知识点哈。
3. 零拷贝相关的知识点回顾
3.1 内核空间和用户空间
我们电脑上跑着的应用程序,其实是需要经过操作系统,才能做一些特殊操作,如磁盘文件读写、内存的读写等等。因为这些都是比较危险的操作,不可以由应用程序乱来,只能交给底层操作系统来。
因此,操作系统为每个进程都分配了内存空间,一部分是用户空间,一部分是内核空间。内核空间是操作系统内核访问的区域,是受保护的内存空间,而用户空间是用户应用程序访问的内存区域。 以32位操作系统为例,它会为每一个进程都分配了4G(2的32次方)的内存空间。
- 内核空间:主要提供进程调度、内存分配、连接硬件资源等功能
- 用户空间:提供给各个程序进程的空间,它不具有访问内核空间资源的权限,如果应用程序需要使用到内核空间的资源,则需要通过系统调用来完成。进程从用户空间切换到内核空间,完成相关操作后,再从内核空间切换回用户空间。
3.2 什么是用户态、内核态
- 如果进程运行于内核空间,被称为进程的内核态
- 如果进程运行于用户空间,被称为进程的用户态。
3.3 什么是上下文切换
- 什么是CPU上下文?
CPU 寄存器,是CPU内置的容量小、但速度极快的内存。而程序计数器,则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。它们都是 CPU 在运行任何任务前,必须的依赖环境,因此叫做CPU上下文。
- 什么是CPU上下文切换?
它是指,先把前一个任务的CPU上下文(也就是CPU寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。
一般我们说的上下文切换,就是指内核(操作系统的核心)在CPU上对进程或者线程进行切换。进程从用户态到内核态的转变,需要通过系统调用来完成。系统调用的过程,会发生CPU上下文的切换。
CPU 寄存器里原来用户态的指令位置,需要先保存起来。接着,为了执行内核态代码,CPU 寄存器需要更新为内核态指令的新位置。最后才是跳转到内核态运行内核任务。
3.4 虚拟内存
现代操作系统使用虚拟内存,即虚拟地址取代物理地址,使用虚拟内存可以有2个好处:
- 虚拟内存空间可以远远大于物理内存空间
- 多个虚拟内存可以指向同一个物理地址
正是多个虚拟内存可以指向同一个物理地址,可以把内核空间和用户空间的虚拟地址映射到同一个物理地址,这样的话,就可以减少IO的数据拷贝次数啦,示意图如下
3.5 DMA技术
DMA,英文全称是Direct Memory Access,即直接内存访问。DMA本质上是一块主板上独立的芯片,允许外设设备和内存存储器之间直接进行IO数据传输,其过程不需要CPU的参与。
我们一起来看下IO流程,DMA帮忙做了什么事情.
- 用户应用进程调用read函数,向操作系统发起IO调用,进入阻塞状态,等待数据返回。
- CPU收到指令后,对DMA控制器发起指令调度。
- DMA收到IO请求后,将请求发送给磁盘;
- 磁盘将数据放入磁盘控制缓冲区,并通知DMA
- DMA将数据从磁盘控制器缓冲区拷贝到内核缓冲区。
- DMA向CPU发出数据读完的信号,把工作交换给CPU,由CPU负责将数据从内核缓冲区拷贝到用户缓冲区。
- 用户应用进程由内核态切换回用户态,解除阻塞状态
可以发现,DMA做的事情很清晰啦,它主要就是帮忙CPU转发一下IO请求,以及拷贝数据。为什么需要它的?
主要就是效率,它帮忙CPU做事情,这时候,CPU就可以闲下来去做别的事情,提高了CPU的利用效率。大白话解释就是,CPU老哥太忙太累啦,所以他找了个小弟(名叫DMA) ,替他完成一部分的拷贝工作,这样CPU老哥就能着手去做其他事情。
23、关于同步异步,阻塞与非阻塞的说法, 以下正确的是
同步和异步关注的是消息通信机制
阻塞和非阻塞关注的是程序在等待调用结果时的状态
异步操作后, 可以不使用回调函数来获取操作结果
非阻塞操作, 必定是异步的
24、一个网段150.25.0.0 的子网掩码是255.255.224.0,那么()是该网段中有效的主机地址
150.25.3.25
150.25.30.30
25、关于IGMPv1 和IGMPv2 的描述不正确的是
IGMPv1 报文类型包含成员离开报文
IGMPv1 不支持普遍组查询
IGMPv2 仅支持普遍组查询
IGMP三个版本的比较
| 项目 | IGMPv1 | IGMPv2 | IGMPv3 |
|---|---|---|---|
| 查询器选举方式 | 依靠组播路由协议 PIM选举 | 同网段组播路由器之间竞争选举 | 同网段组播路由器之间竞争选举 |
| 普遍组查询报文 | 支持 | 支持 | 支持 |
| 成员报告报文 | 支持 | 支持 | 支持 |
| 特定组查询报文 | 不支持 | 支持 | 支持 |
| 成员离开报文 | 不支持 | 支持 | 没有定义专门的成员离开报文,成员离开通过特定类型的报告报文来传达 |
| 特定源组查询报文 | 不支持 | 不支持 | 支持 |
| 指定组播源 | 不支持 | 不支持 | 支持 |
| 可识别报文协议版本 | IGMPv1 | IGMPv1、IGMPv2 | IGMPv1、IGMPv2、IGMPv3 |
| ASM模型 | 支持 | 支持 | 支持 |
| SSM模型 | 需要IGMP SSM Mapping技术支持 | 需要IGMP SSM Mapping技术支持 | 支持 |