数据结构与算法——每日一练(10月)

每日一练

10.1

  • 判断下列说法是否正确:内部排序方法的稳定性是指该排序算法不允许有相同的关键字记录。

A. 正确

B. 错误

【答案】B

10.2

  • 下面有关JVM内存,说法错误的是?

A. 程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的

B. 虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的

C. 方法区用于存储JVM加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的

D. 原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的

【答案】C

10.3

  • 下面有关jdbc statement的说法错误的是?

A. JDBC提供了Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程

B. 对于PreparedStatement来说,数据库可以使用已经编译过及定义好的执行计划,由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象”

C. PreparedStatement中,“?” 叫做占位符,一个占位符可以有一个或者多个值

D. PreparedStatement可以阻止常见的SQL注入式攻击

【答案】C

10.4

  • 已知数据表A中每个元素距其最终位置不远,为节省时间排序,应采用什么方法排序?

A. 堆排序

B. 插入排序

C. 快速排序

D. 直接选择排序

【答案】B

10.5

  • 以下哪种操作最适合先进行排序处理?

A. 找最大最小值

B. 计算平均值

C. 找中位数

D. 找出现次数最多的值

【答案】C

10.6

  • 下列排序算法中,元素的移动次数与关键字的初始排列次序无关的是 。

A. 直接插入排序

B. 冒泡排序

C. 基数排序

D. 快速排序

【答案】C

10.7

  • 判断下列说法是否正确:二叉排序树上结点的关键字的值有可能相同。()

A. 正确

B. 错误

【答案】B

10.8

  • 设有序顺序表中有n个数据元素,则利用二分查找法查找数据元素X的最多比较次数不超过()。

A. lgn+1

B. lgn-1

C. lgn

D. lg(n+1)

【答案】D

10.9

  • 下面有关SPRING的事务传播特性,说法错误的是?

A. PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行

B. PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就抛出异常

C. PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起

D. PROPAGATION_NESTED:支持当前事务,新增Savepoint点,与当前事务同步提交或回滚

【答案】B

10.10

  • 下面有关servlet和cgi的描述,说法错误的是?

A. servlet处于服务器进程中,它通过多线程方式运行其service方法

B. CGI对每个请求都产生新的进程,服务完成后就销毁

C. servlet在易用性上强于cgi,它提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等

D. cgi在移植性上高于servlet,几乎所有的主流服务器都直接或通过插件支持cgi

【答案】D

10.11

  • 对一棵空的字典树依次插入如下单词后,字典树中节点个数为()。

    ① aba

    ② abb

    ③ abc

    ④ bac

    ⑤ bad

    ⑥ bdc

A. 11

B. 12

C. 15

D. 16

【答案】B

【解析】最终的字典树如下所示

字典树

10.12

  • 下列关于字典树的叙述中,正确的是()。

    ① 字典树又称trie树,1981年ACM协会对此数据结构命名以纪念计算机科学先驱Bananaoa Trie

    ② 向字典树中插入一个长度为n的字符串的时间复杂度为O(n)

    ③ 字典树本质上是一个确定有限状态自动机(DFA)

A. 仅②

B. 仅 ①、②

C. 仅 ②、③

D. 仅 ①、③

【答案】C

【解析】字典树又称trie,这个术语来自于retrieval。trie的发明者是Edward Fredkin。字典树插入与查找的效率都取决于字符串长度,字典树本质上是一个确定有限状态自动机(DFA)。

10.13

  • 对一个存放比特串(串中只包含0或1)的字典树进行m次插入操作,每次插入操作会往字典树中插入一个长度为n的比特串,其算法空间复杂度是()。

A. O(n·m)

B. O(n·2^m)

C. O(min(n·2m, m·2n))

D. O(min(n·m,2n))

【答案】D

【解析】当m远小于2n时,空间复杂度接近于n·m;当m接近或者超过2n时,此字典树深度为i的节点最多有2i个(设根节点深度为0),于是字典树中最多有20+21+…+2n=2n+1-1。

10.14

  • 下列哪些问题是字典树无法直接解决的()。

    ① 统计n个字符串中所有前缀出现的次数

    ② 统计n个单词中每个单词出现的次数

    ③ 批量删除以某个单词为前缀的所有单词

    ④ 集合操作:插入、删除字符串,以及查询某字符串是否在集合中

A. 仅①

B. 仅②

C. 仅③、④

D. 字典树全部都可以解决

【答案】D

【解析】字典树是一棵前缀树,上述功能字典树都可以解决。

10.15

  • 往一棵初始为空的字典树中依次插入如下六个字符串,且设根节点是第一个创建的节点,则字符’e’对应的节点是第几个创建的()。

    ① AC

    ② ASCII

    ③ BANANA

    ④ BAND

    ⑤ ACE

    ⑥ BAAQ

A. 3

B. 8

C. 15

D. 17

【答案】C

【解析】字典树中每个节点的创建次序如下所示
在这里插入图片描述

10.16

  • 下面有关servlet service描述错误的是?

A. 不管是post还是get方法提交过来的连接,都会在service中处理

B. doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的

C. service()是在javax.servlet.Servlet接口中定义的

D. service判断请求类型,决定是调用doGet还是doPost方法

【答案】B

10.17

  • 下列有关Servlet的生命周期,说法不正确的是?

A. 在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例

B. 在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法

C. 在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源

D. destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法

【答案】A

10.18

  • 下列关于哈夫曼编码特性的叙述中,正确的是()。

    I. 在计算机资料处理中,哈夫曼编码使用定长编码表对源符号(如文件中的一个字母)进行编码

    II. 使用哈夫曼编码对一片英文进行压缩时,出现概率越大的单词对应的编码长度越长

    III. 使用哈夫曼编码对一片英文进行压缩时,出现概率越大的单词对应的编码长度越短

A. 只有II

B. 只有III

C. I和II

D. I和III

【答案】B

【解析】哈夫曼编码使用变长编码表对源符号进行编码,源符号出现的概率越高,其对应的哈夫曼编码越短。

10.19

  • 下列关于哈夫曼编码的叙述中,正确的是()。

    ① 哈夫曼编码是一种用于无损数据压缩的权编码算法

    ② 哈夫曼编码使用一种哈夫曼树的数据结构实现

    ③ 哈夫曼编码需要提前计算或预估所有需要加密的源符号出现的概率

A. 仅①

B. 仅①、②

C. 仅②、③

D. ①、②、③

【答案】D

【解析】哈夫曼编码是一种用于无损数据压缩的权编码算法,使用哈夫曼树实现,需要提前计算或预估所有需要加密的源符号出现的概率。

10.20

  • 对字符串 “ABABABCACBABCAABACBA” 进行哈夫曼编码,则以下哪个策略是正确的()。

    I. ‘A’编码为’0’,‘B’编码为’10’,'C’编码为’11’

    II. ‘A’编码为’0’,‘B’编码为’1’,'C’编码为’10’

    III. ‘A’编码为’10’,‘B’编码为’11’,'C’编码为’0’

A. 只有I

B. 只有II

C. 只有III

D. II和III

【答案】A

【解析】方法I正确。

方法II是无法还原出原文的,比如,当存在编码片段为 ‘10’ 时,无法确定其对应原文是 ‘BA’ 还是 ‘C’。

方法III对应的编码长度明显大于方法I,所以III也是错误的。

10.21

  • 对字符串 “KAIKEBAAABAB” 进行哈夫曼编码,则编码后的字符串(不计入编码规则相关信息,仅考虑每个字符对应的编码占用的字节数)占用多少比特?()

A. 23

B. 25

C. 27

D. 29

【答案】B

【解析】一种合法的哈夫曼编码方式为:

  • ‘A’:出现 5 次,编码为 ‘0’
  • ‘B’:出现 3 次,编码为 ‘10’
  • ‘K’:出现 2 次,编码为 ‘111’
  • ‘I’:出现 1 次,编码为 ‘1100’
  • ‘E’:出现 1 次,编码为 ‘1101’

占用的比特数为:5×1+3×2+2×3+1×4+1×4=25 bit。
在这里插入图片描述

10.22

  • 对字符串 “KAIKEBA” 进行哈夫曼编码,则编码后的字符串(不计入编码规则相关信息,仅考虑每个字符对应的编码占用的字节数)占用多少比特?()

A. 16

B. 18

C. 19

D. 20

【答案】A

【解析】一种合法的哈夫曼编码方式为:

  • ‘K’:出现 2 次,编码为 ‘11’
  • ‘A’:出现 2 次,编码为 ‘10’
  • ‘I’:出现 1 次,编码为 ‘010’
  • ‘E’:出现 1 次,编码为 ‘00’
  • ‘B’:出现 1 次,编码为 ‘011’

占用的比特数为:2×2+2×2+1×3+1×2+1×3=16 bit。
在这里插入图片描述

10.23

  • 下面有关servlet中init,service,destroy方法描述错误的是?

A. init()方法是servlet生命的起点。一旦加载了某个servlet,服务器将立即调用它的init()方法

B. service()方法处理客户机发出的所有请求

C. destroy()方法标志servlet生命周期的结束

D. servlet在多线程下使用了同步机制,因此,在并发编程下servlet是线程安全的

【答案】D

10.24

  • 关于AWT和Swing说法正确的是?

A. Swing是AWT的子类

B. AWT在不同操作系统中显示相同的风格

C. AWT不支持事件类型,Swing支持事件模型

D. Swing在不同的操作系统中显示相同的风格

【答案】D

10.25

  • 下列关于KMP算法的叙述中,正确的是( )。

    I. KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出

    II. KMP算法的主要思想是提前判断如何重新开始查找,而这种判断只取决于模式字符串本身

    III. 对长度为N的模式串求解其部分匹配表(又称失配/next函数)的时间复杂度为O(N)

A. 只有I

B. I和II

C. I和III

D. I、II和III

【答案】D

【解析】KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出;KMP算法的主要思想是提前判断如何重新开始查找,而这种判断只取决于模式字符串本身;求解失配函数的时间复杂度是线性的。

10.26

  • 假定主串为 “KAIKEBA AIKEBAK IKEBAKA”,模式串为 “KAIKEBO”,则使用Sunday算法进行字符串匹配时,主串与模式串一共比较了( )次。

A. 6

B. 9

C. 13

D. 23

【答案】B

【解析】首先主串与模式串比较了7个字符,比较到第7个字符处发现不匹配,找到主串中位于模式串后面的第一个字符,即红色箭头所指的 “空格”,再在模式串中从后往前找 “空格”,没有找到,则直接把模式串移到 “空格” 的后面。

主串的第9个字符’A’与模式串的第一个字符’K’不匹配,继续找到主串中位于模式串后面的第一个字符,即红色箭头所指的主串中的第二个 “空格”,再在模式串中从后往前找 “空格”,没有找到,则直接把模式串移到第二个 “空格” 的后面。

继续匹配与转移,发现已经到了主串的末尾,匹配完毕。一共比较了7+1+1=9次。

在这里插入图片描述

10.27

  • 在一棵trie树中查询一个长度为n的字符串的出现次数,时间复杂度为( )。

A. O(logn)

B. O(n)

C. O(n·logn)

D. O(n2)

【答案】B

【解析】trie树处理长度为n的字符串的时间复杂度为O(n)。

10.28

  • 往一棵初始为空的trie树中依次插入 “abc”, “apple”, “abcd”, “kaikai”, “kaixin”, “kaikeba” 后树中节点个数为( )。

A. 18

B. 21

C. 24

D. 27

【答案】B

【解析】最终的trie树结构如下,共21个节点。

在这里插入图片描述

10.29

  • 对字符串 “KAIKAIKEAK” 进行哈夫曼编码,则编码后的字符串(不计入编码规则相关信息,仅考虑每个字符对应的编码占用的字节数)占用多少比特?()。

A. 15

B. 18

C. 19

D. 21

【答案】C

【解析】一种合法的哈夫曼编码方式为:

  • ‘K’:出现 4 次,编码为 ‘0’
  • ‘A’:出现 3 次,编码为 ‘11’
  • ‘I’:出现 2 次,编码为 ‘100’
  • ‘E’:出现 1 次,编码为 ‘101’

占用的比特数为:4×1+3×2+2×3+1×3 = 19 bit。

img

10.30

  • 运用下列哪个命令能够获取JVM的内存映像

A. jinfo

B. jmap

C. jhat

D. jstat

【答案】B

【解析】jps:查看本机java进程信息;jstack:打印线程的栈信息,制作线程dump文件;jmap:打印内存映射,制作堆dump文件;jstat:性能监控工具;jhat:内存分析工具;jconsole:简易的可视化控制;jvisualvm:功能强大的控制台。

10.31

  • AccessViolationException异常触发后,下列程序的输出结果为( )
static void main(String[] args) {
    try {
        throw new AccessViolationException();
        Console.writeLine("error1");
    } catch (Exception e) {
        Console.writeLine("error2");
    }
    Console.writeLine("error3");
}

A. error2 error3

B. error3

C. error2

D. error1

【答案】A

【解析】① 若catch(){}块中,如果有throw 语句,则 try{}catch(){} finally{}块之外的代码不执行;否则,执行。 ② try{}中有异常,则异常下面代码不执行。 ③ finally{}中代码必执行。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

讲文明的喜羊羊拒绝pua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值