1、笔试题
笔试题100分,结构包含如下:
1.单选题30题 每题2分 共60分
2.多选题5题 每题4分 共20分(少选得1分)
3.编程题1题 20分
根据本人亲身回忆及网上搜的答案得出来的,欢迎一起探讨、指正、学习:鞠躬!
1.1单选题
1. 模式查找like '_a%',下面哪个结果是可能的:( )
A. aili
B. bai
C. bba
D. cca
答案:B
解析:
like的通配符有以下两个:
%:表示任意数量(包括零个)的任意字符。
_:表示单个字符。
2.在Linux 中,权限664表示:( )
A、表示文件拥有者和所属组具有所有权限,其他用户具有读和执行权限
B、表示文件拥有者和所属组具有所有权限,其它用户仅具有读和执行权限
C、表示文件拥有者和所属组具有读和写权限,其他用户仅有读权限。
D、表示文件拥有者具有读和写权限,其他用户仅有读权限。
答案:C
解析:
Linux系统中,常见的权限包括可读为4、可写为2和可执行为1;
例如,数字7表示拥有者具有可读、可写和可执行权限,这相当于4+2+1=7;
权限三位数代表:第一个数字代表文件拥有者的权限,第二个数字代表所属组的权限,第三个数字代表其他用户的权限。
3.在Oracle中,INSTEAD OF触发器主要用于:( )
A、表
B、表和视图
C、基于单个表视图
D、基于多个表视图
答案:D
解析:
INSTEAD OF触发器仅支持视图,不适用于表;
当视图涉及多个基表时,直接DML操作可能导致歧义或失败,此时需通过INSTEAD OF触发器定义自定义操作逻辑;
表的DML操作通常通过 BEFORE 或 AFTER触发器实现;
基于单个表的视图,虽然理论上可用于单表视图,但单表视图通常可直接进行DML操作,无需INSTEAD OF触发器。
4.在Oracle中,用以下SQL命令创建了一个序列:
CREATE SEQUENCE my_seq
START WITH 394
INCREMENT BY 12
NOMINVALUE
NOMAXVALUE
NOCYCLE
NOCACHE;
用户执行包含my_seq.NEXTVAL的SQL语句三次,然后执行包含my_seq.CURRVAL的SQL语句四次,请问序列my_seq的当前值是( )
A. 406 B. 418 C. 430 D. 442
答案:B
解析:
在Oracle序列中提供了两个重要的为伪列:
NEXTVAL:用于生成序列的下一个值,会使序列值递增,第一次执行NEXTVAL会返回序列的起始值;CURRVAL:仅用于获取当前序列值,不会改变序列值。
序列初始START WITH 394,即第一次执行NEXTVAL时序列值为394;
第二次执行NEXTVAL:394 + 12 = 406;
第三次执行NEXTVAL:406 + 12 = 418;
后续四次CURRVAL仅读取当前值,不影响序列增长。
因此,序列当前值为418。
5.以下有关ETL表述不正确的是哪一个( )
A. ETL由三个子过程构成:数据抽取、数据转换和数据加载。
B. ETL又可以扩展为可以分为4个步骤:数据抽取、数据清洗、数据转换和数据加载,即ETCL。
C. ETL设计涉及到错误恢复过程设计、归档转存储过程设计、作业调度过程设计等内容。
D. 根据选用的数据仓库工具将数据从数据源抽取到数据库,然后根据业务规则转换和集成。为数据仓库中需要的数据格式,最后将转换的结果装入数据仓库。
答案:D
解析:
D选项的错误在于流程顺序:标准ETL应先完成所有转换操作(包括格式统一、业务规则处理等)后才加载到数据仓库,而非”先抽取到数据库再转换”。这种表述混淆了临时存储与最终加载的关系,且”数据库”与”数据仓库”的表述可能造成概念混淆。正确的流程应为:数据源→抽取→转换(含清洗)→加载至数据仓库;
标准ETL包含三个核心阶段:Extract(从数据源抽取)、Transform(按规则转换)、Load(装入目标库);
ETCL(增加Cleaning环节)是业界存在的扩展流程;
恢复、归档、调度等确实是ETL系统设计要素。
6. WHERE子句的条件表达式中,可以匹配0个到多个字符的通配符是( )
A. * B. % C. _ D. ?
答案:B
解析:通配符是指可替代字符串中的任何其他字符的通用符号,常用于数据库中的检索,主要有四种:
%:匹配零个及多个任意字符;
_:与任意单字符匹配;
[]:匹配一个范围,例如:[1-9],范围从1到9;[a-d],范围从a到d;
[^]:排除一个范围。
7. Oracle中执行语句:SELECT address1||','||address2||','||address2 “Address” FROM employ,将会返回( )列:
A. 0 B. 1 C. 2 D. 3
答案:B
解析:“||”操作符用于连接多个字符串,返回的是一个单一的字符串结果
8. DB_BLOCK_SIZE初始化参数的度量单位是 ( )。
A、BLOCK B、BYTE C、PAGE D、ROW
答案:B
解析:DB_BLOCK_SIZE 是数据库存储块大小的参数,其单位是字节(BYTE);Oracle 中设置 DB_BLOCK_SIZE=8192 表示每个数据块大小为 8KB(8192 字节)。
其他选项的排除:
BLOCK:是逻辑存储单元名称,非单位。
PAGE:通常指操作系统或文件系统的页(如 4KB),与数据库块无关。
ROW:是数据记录,与存储块大小无关。
9.关于FOREIGN KEY约束的描述不正确的是 ( )
A. 体现数据库中表之间的关系
B. 实现参照完整性
C. 以其他表PRIMARY KEY约束和UNIQUE约束为前提
D. 每个表中都必须定义
答案:D
解析:
外键 (FOREIGN KEY, FK) 是关系型数据库中的一个关键概念,用于在两个表之间建立链接或关系。
核心作用:实现参照完整性 ,确保了数据库中的数据保持一致性和逻辑正确性。
必要条件:外键必须引用父表的一个已存在的字段,该字段必须被 PRIMARY KEY 或 UNIQUE 约束所修饰,以确保其值的唯一性,才能被正确引用。
注:外键字段的数据可以为null。
10. PL/SQL代码段中注释符号是 ( )
A、//
B、\
C、–
D、'
答案:C
11. 以下4个概念中,可用来解决“一个并发调度是否正确”问题的是( )
A. 串行调度
B. 并发执行调度的可串行化
C. 并发事务的可并行化
D. 并发事务的有效调度
答案:B
解析:
在数据库并发控制中,判断一个并发调度是否正确(即是否保持数据库一致性)的关键概念是可串行化。可串行化是指并发调度的执行结果等价于某个串行调度,即调度看起来像是事务按某种顺序一个接一个执行。
串行调度:串行调度本身是正确的,但它是基准,不是用于判断并发调度正确性的方法。
并发事务的可并行化:这指的是事务能够同时执行以提升性能,但不涉及正确性判断。
并发事务的有效调度:这是一个模糊术语,在数据库理论中并不标准,通常不专门用于正确性判断。
12. 参数文件中,下列四个符号中哪个符号开头的行表示注释行( )
A. $ B. @ C. # D. !
答案:C
解析:
参数文件通常指的是包含程序运行时所需参数的配置文件。这些文件可以包含各种设置,如数据库连接信息、应用程序配置、系统环境变量等
# 符号确实常用于表示注释。注释是代码或配置文件中的一种说明性文本,它会被解析器或编译器忽略,不会影响程序的执行。
13. 传统的集合运算不包括 :( )
A.并 B.差 C.交 D.乘
答案:D
解析:
集合运算处理的是集合(一组无序且不重复的元素)之间的关系,主要包括:
并集(Union):两个集合中所有的元素。
交集(Intersection):两个集合共有的元素。
差集(Difference):属于第一个集合但不属于第二个集合的元素。
对称差集(Symmetric Difference):属于两个集合之一但不同时属于两个集合的元素。
笛卡尔积(Cartesian Product):两个集合所有可能的有序对的集合。
14. SQL中,下列涉及空值的操作,不正确的是:( )
age IS NULLage IS NOT NULLage = NULLNOT (age IS NULL)
答案:C
解析:
在 SQL 中,空值(NULL)是一个特殊的值,表示“未知”或“不存在”;正确的方法是使用 IS NULL 或 IS NOT NULL;
不能使用算术运算符(如 =、!=、<>)来判断一个字段是否为 NULL,否则会被隐式转为FALSE,同17题解析;
NOT 是逻辑关系运算符,表示非;(age IS NULL)运行为真,则NOT (age IS NULL)为假,反之亦然。
15. Oracle中,FETCH语句的作用是( )
A、游标打开
B、游标关闭
C、当前记录的数据加载到变量中
D、创建变量保存当前记录的数据
答案:C
解析:
在Oracle中,FETCH语句的核心作用是将当前游标指向的记录数据加载到预定义的变量中,而非创建新变量。
16. 在SQL中,建立表用的命令是( )
A. CREATE TABLE
B. CREATE RULE
C. CREATE VIEW
D. CREATE INDEX
答案:A
解析:
CREATE RULE:用于创建规则(如在某些数据库系统中定义数据约束或触发器),但并非标准SQL建表命令;
CREATE VIEW:用于创建视图(基于查询的虚拟表),而不是物理表;
CREATE INDEX:用于在已有表上创建索引以提高查询性能,并非建表命令。
17. 假如一个变量的值为NULL,有一条if语句为:
if变量=NULL
分支1
else
分支2
请问最终执行的结果是( )
A. 分支1
B. 分支2
C. 系统错误提示
D. 都没有执行
答案:B
解析:
赋值操作=将null赋给变量后,条件判断if(变量=null)中的会被隐式转换为false,因此不会满足条件,程序跳转到Else分支;
NULL 表示 “未知” 或 “不适用的值”,它不是一个具体的值(如数字 0 或空字符串 '')。因此,任何与 NULL 进行的比较操作(即使是 NULL = NULL)都无法得出“真”或“假”的确定结果,只能得到“未知”。
根据 三值逻辑(Three-Valued Logic),SQL 的判断结果有三种:
TRUE
FALSE
UNKNOWN (未知)
而 WHERE 子句只会在条件明确为 TRUE 时才会返回该行。
如果用了会得到什么结果?
你的查询将无法返回预期的结果,通常会 漏掉那些值为 NULL 的记录。
这个理解了对工作也有用到的,经常被这个坑到;
例如:字段里有数据为null的,然后有人代码会写<>某个数值;
18.在Linux上,执行ls | tee temp将会( )
A、执行失败
B、没有执行
B、输出到屏幕上
D、输出到屏幕和文件temp上
答案:D
(这道题忘记选项具体内容了,大致意思没歪,随意给了几个选项,欢迎补充;选项不知道不打紧,请看解析)
解析:ls | tee temp
这个命令由三个部分组成:ls、|(管道)和 tee temp
ls:这是列出当前目录内容的命令。它会将目录下的文件和文件夹名称作为输出打印到标准输出(stdout),也就是你的终端屏幕;
| (管道符):管道符的作用是重定向。它获取 | 左边命令(ls)的标准输出,并将这个输出作为 | 右边命令(tee temp)的标准输入(stdin);
简单来说,它把 ls 原本要显示在屏幕上的内容,“传递”给了 tee 命令去处理。
tee temp:tee 命令就像一个“T型三通”,它有两个主要功能:
将来自标准输入(stdin)的数据写入一个或多个文件。在这里,它会把从管道收到的数据(即 ls 的输出)写入到当前目录下一个名为 tmp 的文件中;
同时将数据继续传递到标准输出(stdout),这意味着它还会把同样的内容打印到你的终端屏幕上。
执行结果:
当你运行 ls | tee temp后,会发生两件事:
你会在终端屏幕上看到当前目录的文件列表(这是 ls 的正常输出,也是 tee 转发到标准输出的部分)。
同时,一个名为 temp的文件会被创建或覆盖(如果已存在),并且文件的内容就是 ls 命令输出的完全相同的内容。
效果相当于:你既看到了 ls 的结果,又把这次 ls 的结果完整地保存到了一个叫 tmp 的文件里。
19.Oracle中,不属于游标属性的是( )
A. FOUND B. ISOPEN C. NOTFOUN D.ISLOCK
答案:D
解析:
%FOUND 布尔型属性,当SQL语句至少影响®-行时为TRUE,否则为FALSE
%NOTFOUND 布尔型属性,当SQL语句没有影响的行时为TRUE,否则为FALSE
%ISOPEN 布尔型属性,当游标已打开时返回TRUE,否则为FALSE(对用户而言,隐式游标永远是false)
%ROWCOUNT 数字型属性,返回受到SQL影响的行数
注意: 属性名与游标名之间没有
另外考了2-3题左右的SQL题,都是单表的、程度简单;
1.2 多选题
1. 在Oracle中,执行下面的语句:
SELECT ceil(-97.342), floor(-97.342), round(-97.342), trunc(-97.342) FROM dual;
哪个函数的返回值等于-97。( )
floor() B. round() C. ceil() D. trunc()
答案:BCD
解析:
ceil(-97.342)执行向上取整,-97.342的”上”是数值更大的-97(因为-97 > -97.342),故返回-97
floor(-97.342)执行向下取整,-97.342的”下”是数值更小的-98(因为-98 < -97.342),故返回-98
round(-97.342)执行四舍五入,默认保留0位小数,小数点后第一位3小于5,故舍去小数部分返回-97
trunc(-97.342)默认直接截断小数部分,无论正负均向0取整,故返回-97
因此四个选项中,只有floor()的返回值-98不等于-97,正确答案为B。关键要注意对于负数而言,”向上取整”是向数值更大的方向(即靠近0的方向),而”向下取整”是向数值更小的方向(即远离0的方向)。
2.Oracle数据库中,不可以针对任意数据类型进行操作的函数是( )
A. LOWER B. MAX C.TO_CHAR D. CEIL
答案:ACD
解析:
TO_CHAR:主要用于将数字或日期转换为字符串,仅支持特定数据类型(数字、日期),无法处理所有数据类型。
LOWER:仅用于将字符串转换为小写,仅支持字符类型(如VARCHAR2、CHAR),不支持非字符类型。
MAX:作为聚合函数,支持数值、日期、字符串等多种数据类型(如比较数值大小、日期先后、字符串的字典序),可作用于Oracle中任意可排序的数据类型。
CEIL:仅用于返回大于等于数值的最小整数,仅支持数值类型(如NUMBER),无法处理非数值数据。
综上,只有MAX函数能针对多种数据类型进行操作。
3.针对Oracle数据库,以下对子程序的描述正确的是( )
A. 子程序是已命名的PL/SQL块,可带参数并可在需要时随时调用。
B. 子程序可以具有声明部分、可执行部分和异常处理部分。
C. 子程序参数的模式只有 IN和OUT两种模式。
D. 子程序可分为过程和函数两种类型。
答案:ABD
解析:
子程序参数的模式包括IN(输入)、OUT(输出)和IN OUT(双向)三种,而不仅限于IN和OUT。
1.3 编程题
给定一个仅由“(”、“)”和“?”组成的字符串,长度为n。
“?”可以替换成等概率的为“(”或“)”,替换后相邻括号对(即s[i]='('且s[i+1]=')')的数学期望为E,要求计算E×2^n对10^9+7取模的结果。
输入:)?(
期望E:0
算法:E=0/2=0;
说明:被除数为0是因为?是“(”或“)”都不能组成相邻括号对;
除数为2是?是可以为“(”或“)”
输入:(?)
期望E:1
算法:E=2/2=1;
说明:被除数为2是因为?是“(”或“)”都能组成相邻括号对;
除数为2是?是可以为“(”或“)”
输入:(??)
期望E:1
算法:E=5/(2^2)=1.25;
说明:被除数为5如图所示:((()、 (())、 ()))、 ()()
编程题找到一个类似答案,但因为我在本地找到地方进行运行测试,所以代码先不贴上来了。欢迎赐教、补充、修改!
2、面试题
由于本人面试无能,面试官问了两个问题就不想继续问了,以下:
1.关于hadoop了解多少?(考的是Orace语言、jd也写关系型数据库,问的是大数据,我也是没办法理解!)
2.某脚本上线后,调度时间拉长,你怎么处理?
附:
考了两次,提醒重复率很高,第二次加了编程题;文章的选择题、多选题没达到要求的数量,欢迎一起探讨、指正、学习;鞠躬!
另:补第一次的相关linux题目:
1.Linux命令:sed '1p' 输出的内容是:
输出文本的第一行 B.输出文本全部 C.没有输出 D.以上都不对
2.linux命令:awk输出命令考察