Java笔试题
- 1、Hadoop几大核心组成别为?
- 2、关于Hadoop,以下说法正确的是?
- 3、Kafka消息队列中的broker的作用是?
- 4、Kafka为什么处理速度那么快?
- 5、关于Kafka消息队列,下列说法正确的是?
- 6、应用程序的测试包含?
- 7、关于压力测试、负载测试、性能测试的关系,说法正确的是?
- 8、以下哪些是性能测试关注的指标?
- 9、响应时间跟哪些因素有关?
- 10、接口测试的目的是?
- 11、大O算法通常表示的是?
- 12、树的表示方法有?
- 13、二叉树如图所示,前序遍历顺序为?
- 14、以下关于websocket协议,说法正确的是?
- 15、以下关于http协议,说法不正确的是?
- 16、http和https的说法中,正确的是?
- 17、以下选项中,哪些可以查看历史命令?
- 18、以下选项中,哪些全部都是只能用于纯文本的命令?
- 19、以下关于vim命令的使用,不正确的是?
- 20、进程和线程之间的区别,以下说法正确的是?
- 21、进程间通信方式有?
- 22、关于进程和线程之间的关系,以下说法正确的是?
- 24、Redis过期键的删除策略有哪些?
- 25、以下哪种数据结构是Redis不支持的?
- 26、如何优化MySQL?
- 27、以下哪个选项不是Spring Cloud组件?
- 28、Actuator在Spring Boot中的作用,说法正确的是?
- 29、为什么选择微服务框架?
- 30、以下哪些是SpringCloud的核心特性?
- 31、过渡到微服务,常见的困难有?
- 32、下面关于BeanFactory接口说法正确的是?
- 33、在Servlet处理请求的方式为?
- 34、关于SpringBoot,以下说法正确的是?
- 35、在服务器的网络编程中,解决会话跟踪的方法有?
- 36、下面是Spring依赖注入方式的是?
- 37、关于Spring Bean 的生命周期和作用域,以下说法不正确的是?
- 38、List、Set、Map哪个继承自Collection接口,以下说法正确的是?
- 39、Java提供了哪些IO方式?
- 40、关于Java 内存模型中的 happen-before ,以下说法不正确的是?
- 41、下列哪些是GC的回收算法?
- 42、以下关于String、StringBuffer和StringBuilder 的说法,不正确的是?
- 43、下列哪种异常是检查型异常,需要在编写时声明?
- 44、在Java多线程中,下列哪种方式不会使线程进入阻塞状态?
- 45、在JVM的内存结构中,下列哪些是线程私有的内存区域?
- 46、以下关于Hashtable、HashMap 和TreeMap 的说法,不正确的是?
- 47、以下锁机制中,不能保证线程安全的是?
- 48、以下关于Exception和Error的说法,不正确的是?
1、Hadoop几大核心组成别为?
A. HDFS
B. MapReduce
C. Yarn
D. Hive
答案:ABC
解释:
Hadoop的三大核心组件分别是:
HDFS(Hadoop Distribute File System):hadoop的数据存储工具。
YARN(Yet Another Resource Negotiator,另一种资源协调者):Hadoop 的资源管理器。
Hadoop MapReduce:分布式计算框架
2、关于Hadoop,以下说法正确的是?
A. NN挂掉,数据丢失,分布式集群崩溃
B. DN挂掉,数据会丢失,分布式集群崩溃
C. SN挂掉,数据丢失,分布式集群崩溃
D. 以上都正确
答案:A
解释:
NN:Name Node 管理HDFS的命名空间,配置副本策略,管理数据块(Block)映射信息,处理客户端读写请求
DN:DataNode 存储实际的数据块,执行数据块的读/写操作
SN:SecondaryNameNode 辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode ,在紧急情况下,可辅助恢复NameNode
NN挂掉,数据丢失,分布式集群崩溃
DN挂掉,由于其他机器中存有备份,数据不会丢失,正常情况下对分布式集群不会出现大问题
SN挂掉,数据不会丢失,只是失去了对NameNode中映射的备份,为了防止意外(NN挂掉),需要尽快恢复SN
3、Kafka消息队列中的broker的作用是?
A. broker是消息的代理,作为保存消息中转站
B. producers往brokers里面指定的topic中写消息
C. consumers从brokers里面拉取指定的topic消息
D. 以上都不正确
答案:AC
解释:
B错了,producer是往borker上topic对应的leader分区写消息
4、Kafka为什么处理速度那么快?
A. 采用了Cache FileSystem Cache PageCache缓存
B. 采用了磁盘顺序写
C. Zero-copy零拷贝技术减少拷贝次数
D. Batching of Messages批量处理。合并小的请求,以流的方式进行交互,直至网络上限
答案:BC
解释:
用的page Cache和buffer Cache,没用file Cache
批量处理没用使用流方式交互,就一个socket连接交互
5、关于Kafka消息队列,下列说法正确的是?
A. 缓冲和削峰
B. 解耦和扩展性
C. 冗余消费
D. 异步通信
答案:ABCD
6、应用程序的测试包含?
A. 功能测试
B. 性能测试
C. 可用性测试
D. 客户端兼容性与安全性测试
答案:ABCD
7、关于压力测试、负载测试、性能测试的关系,说法正确的是?
A. 压力测试是在一定的负荷条件下,长时间连续运行系统给系统性能造成的影响
B. 负载测试是在一定的工作负荷下,给系统造成的负荷及系统响应的时间
C. 性能测试是为了找到系统的正常、峰值及异常负载条件等各项指标
D. 以上都不正确
答案:ABC
8、以下哪些是性能测试关注的指标?
A. 响应时间
B. TPS
C. 服务器CPU使用率
D. 吞吐量
答案:ABCD
9、响应时间跟哪些因素有关?
A. 网络传输时间
B. 服务器处理请求时间
C. 前端渲染时间
D. 以上都正确
答案:ABCD
10、接口测试的目的是?
A. 发现页面操作发现不了的bug
B. 检测系统异常处理能力
C. 测试并发数
D. 修改请求参数,突破页面的限制
答案:ABCD
解释:
接口测试的必要性:
1.可以发现很多在页面上操作发现不了的bug
2.检查系统的异常处理能力
3.检查系统的安全性、稳定性
4.前端随便变,接口测好了,后端不用变
5.可以测试并发情况,一个账号,同时(大于2个请求)对最后一个商品下单,或不同账号,对最后一个商品下单
6.可以修改请求参数,突破前端页面输入限制(如金额)
11、大O算法通常表示的是?
A. 最坏情况
B. 最好情况
C. 平均情况
D. 都不是
答案:A
解释:
计算机科学经常用大O表示算法的复杂度或衡量性能,它主要用于描述在最坏的情况下所花费的时间和空间(内存或磁盘)。
12、树的表示方法有?
A. 双亲表示法
B. 孩子兄弟表示法
C. 孩子表示法
D. 以上都不对
答案:ABC
解释:
1.双亲表示法:
假设以一组连续空间存储树的结点,同时在每个结点中附设一个指示器指示其双亲结点在链表中的位置,其形式说明如下:
例如,图6.13展示一棵树及其双亲表示的存储结构。
这种存储结构利用了每个结点(除根以外)只有惟一的双亲的性质。PARENT(T,x)操作可以在常量时间内实现。反复调用PARENT操作,直到遇见无双亲的结点时,便找到了树的根,这就是ROOT(x)操作的执行过程。但是,在这种表示法中,求结点的孩子时需要遍历整个结构
2.孩子表示法
由于树中每个结点可能有多棵子树,则可用多重链表,即每个结点有多个指针域,其中每个指针指向一棵子树的根结点,此时链表中的结点可以有如下两种结点格式。
若采用第一种结点格式,则多重链表中的结点是同构的,其中d为树的度。由于树中很多结点的度小于d,所以链表中有很多空链域,空间较浪费,不难推出,在一棵有n个结点度为k的树中必有n(k-1)+1个空链域。若采用第二种结点格式,则多重链表中的结点是不同构的,其中J为结点的度,degre域的值同J。此时,虽能节约存储空间,但操作不方便。
另一种办法是把每 个结点的孩子结点排列起来 ,看成是一个线性表,且以单链表作存储结构,则n个结点有n个孩子链表(叶子的孩子链表为空表)。而n个头指针又组成一个线性表,为了便于查找,可采用顺序存储结构。这种存储结构可形式地说明如下:
图6.14(a)是图6.13中的树的孩子表示法。与双亲表示法相反,孩子表示法便于那些涉及孩子的操作的实现,却不适用于PARENT(T,x)操作,我们可以把双亲表示法和孩子表示法结合起来,即将双亲表示和孩子链表合在一起。图6.14(b)就是这种存储结构的一例,它和图6.14(a)表示的是同一棵树。
3、孩子兄弟表示法: (相当于前面讲的将一颗树转换成一颗二叉树)
又称二叉树表示法,或二又链表表示法,即以二又链表作树的存储树的存储结构。链表中结点的两个链城分别指向该结点的第一个孩子结点和下一个兄弟结点,分别命名为firstchild城和nextsibling城。
图6.15是图6.13中的树的孩子兄弟链表。利用这种存储结构便于实现各种树的操作。首先易于实现找结点孩子等的操作。例如:若要访问结点x的第i个孩子,则只要先从firstchild域找到第1个孩子结点,然后沿着孩子结点的nextsibling域连续走i-1步,便可找到x的第i个孩子。当然,如果为每个结点增设一个PARENT域,则同样能方便地实现PARENT(T,x)操作。
13、二叉树如图所示,前序遍历顺序为?
A. GDHBAEICF
B. GHDBIEFCA
C. ABDGHCEIF
D. 以上都不对
答案:C
解释:
一棵二叉树由根结点、左子树和右子树三部分组成,若规定 D、L、R 分别代表遍历根结点、遍历左子树、遍历右子树,则二叉树的遍历方式有 6 种:DLR、DRL、LDR、LRD、RDL、RLD。由于先遍历左子树和先遍历右子树在算法设计上没有本质区别,所以,只讨论三种方式:
DLR–前序遍历(根在前,从左往右,一棵树的根永远在左子树前面,左子树又永远在右子树前面 )
LDR–中序遍历(根在中,从左往右,一棵树的左子树永远在根前面,根永远在右子树前面)
LRD–后序遍历(根在后,从左往右,一棵树的左子树永远在右子树前面,右子树永远在根前面)
前序遍历:ABDGHCEIF
中序遍历:GDHBAEICF
后序遍历:GHDBIEFCA
14、以下关于websocket协议,说法正确的是?
A. 是升级版的http协议
B. 是无状态协议
C. 需要三次握手建立连接
D. 基于udp协议
答案:A
解释:
WebSocket是基于Http协议的,或者说借用了Http协议来完成一部分握手,所以A是正确的
HTTP是短链接,所以是无状态,但是WebSocket是长连接,所以B错误
HTTP因为是无状态,所以需要三次握手,WebSocket是长连接,只需要一次握手,所以C错误
WebSocket是基于TCP协议的,所以D错误
15、以下关于http协议,说法不正确的是?
A. 301状态码表示内部服务器错误
B. 是无连接的
C. 是媒体独立的
D. 是无状态的
答案:A
解释:
301表示永久重定向,所以A错误
HTTP是无连接:限制每次连接只处理一个请求,服务器处理完客户的请求 ,并接收到客户的应答后即断开连接,采用这种方式可以节省传输时间。
HTTP是媒体独立的:意味着只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
HTTP是无状态的:HTTP协议是无状态协议。意指协议对事物处理没有记忆能力。如果后续处理需要前面的信息则他必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时,它的应答就比较快。
16、http和https的说法中,正确的是?
A. https需要用到ca申请证书
B. http超文本传输协议,信息是明文传输,而https是ssl加密传输协议
C. http是80端口,https是443端口
D. http的连接是无状态的
答案:ABCD
解释:
https协议是需要部署SSL证书的,这就需要去正规的CA机构申请,所以A正确
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议,所以B正确
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443,所以C正确
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全,所以D正确
17、以下选项中,哪些可以查看历史命令?
A. history命令
B. last命令
C. 上下键
D. 左右键
答案:AC
解释:
history命令用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件,所以A正确
last命令用于显示近期用户或终端的登录情况,它的使用权限是所有用户。通过last命令查看该程序的log,管理员可以获知谁曾经或企图连接系统,所以B错误
18、以下选项中,哪些全部都是只能用于纯文本的命令?
A. more、head、tail、cat
B. od、tr、wc、cut
C. diff、touch、cp、mv
D. 以上都不正确
答案:A
解释:
Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。
head 命令可用于查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容。
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
Linux od命令用于输出文件内容。od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来。
Linux od命令用于输出文件内容。od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来。
Linux tr 命令用于转换或删除文件中的字符。tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备。
Linux wc命令用于计算字数。利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
Linux cut命令用于显示每行从开头算起 num1 到 num2 的文字。
Linux diff 命令用于比较文件的差异。diff 以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。
Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
Linux cp(英文全拼:copy file)命令主要用于复制文件或目录。
Linux mv(英文全拼:move file)命令用来为文件或目录改名、或将文件或目录移入其它位置。
19、以下关于vim命令的使用,不正确的是?
A. 3种模式:命令模式、 输入模式、末行模式,其中命令模式是打开文件以后的默认模式
B. 可以使用dd、yy与p命令配合完成复制、粘贴、剪贴等功能
C. 在命令模式与末行模式中,快捷键参数不区分大小写
D. 末行模式下所有快捷键参数前都有一个冒号“:”
答案:C
解释:
dd,删除光标所在行.(很多命令两个组合使用就是操作整行,比如yy,复制光标所在行;cc,删除光标所在行,且进入insert模式);
在命令模式与末行模式中,所有的快捷键参数均区分大小写
在末行模式中所有快捷键参数前都有一个冒号“:”
20、进程和线程之间的区别,以下说法正确的是?
A. 进程有自己的独立地址空间,线程没有
B. 进程是资源分配的最小单位,线程是CPU调度的最小单位
C. 进程和线程通信方式不同,同一进程下的线程共享数据(如全局变量、静态变量),而进程之间的通信只能通过进程通信通信的方式
D. 进程上下文切换开销小,线程开销大
答案:ABC
解释:
每个用户进程都有自己独立的地址空间0~3G;内核线程没有自己的地址空间,而是共用同一内存空间3~4G。
每个进程都拥有自己的地址空间,但线程没有自己独立的地址空间,而是运行在一个进程里的所有线程共享该进程的整个虚拟地址空间。
用户进程地址空间:拥有自己的独立空间0-3G用户地址空间+3G-4G的内核独立地址空间
内核线程地址空间:共享内核的0号进程的内核空间
用户空间:不同进程的线性地址操作虽然仍是统一的,但物理地址却因为独立地址空间的缘故而映射不一致,乃至于影响不到其他进程的资源。独立的地址空间意味着数据修改的彼此独立性,即严防不同进程之间干扰。这符合“进程是系统资源分配的最小单位”的要求。
内核空间,所有线程虚拟地址对应的物理地址都是一样的, 所以说是共享。
进程上下文切换开销大,线程开销小
21、进程间通信方式有?
A. 用信号量进行进程间的互斥和同步,交换的信息量少,是一种低级进程通信
B. 共享存储器系统(存储器中划分的共享存储区域)
C. 消息传递系统(进程间的数据交换以消息(Message)为单位)
D. 管道通信系统(连接读写进程来实现他们之间通信的共享文件)
答案:ABCD
解释:
进程间通讯的常见的通信方式
1、管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
2、命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
3、消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
4、共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
5、信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
6、套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
7、信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
进程间通讯的常见的按通信类型区分方式
1、共享存储器系统
(1)基于共享数据结构的通信方式(仅适用于传递相对少量的数据,通信效率低,属于低级通信)
(2)基于共享存储区的通信方式
2、管道通信系统
管道是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件(pipe文件)
管道机制需要提供一下几点的协调能力
(1)互斥,即当一个进程正在对pipe执行读/写操作时,其它进程必须等待
(2)同步,当一个进程将一定数量的数据写入,然后就去睡眠等待,直到读进程将数据取走,再去唤醒。读进程与之类似
(3)确定对方是否存在
3、消息传递系统
(1)直接通信方式
发送进程利用OS所提供的发送原语直接把消息发给目标进程
(2)间接通信方式
发送和接收进程都通过共享实体(邮箱)的方式进行消息的发送和接收
4、客户机服务器系统
(1)套接字 – 通信标识型的数据结构是进程通信和网络通信的基本构件
基于文件型的 (当通信进程都在同一台服务器中)其原理类似于管道
基于网络型的(非对称方式通信,发送者需要提供接收者命名。通信双方的进程运行在不同主机环境下被分配了一对套接字,一个属于发送进程,一个属于接收进程)
(2)远程过程调用和远程方法调用
22、关于进程和线程之间的关系,以下说法正确的是?
A. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位
B. 资源分配给进程,同一进程的所有线程线程共享该进程的所有资源
C. 处理机分给进程,即真正在处理机上运行的是进程
D. 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的方法实现同步
答案:ABD
解释:
处理机分给进程,即真正在处理机上运行的是线程
23、
以下哪些属于数据库的事务特性?
A. 原子性
B. 隔离性
C. 一致性
D. 持久性
答案:ABCD
解释:
数据库系统必须维护事务的以下特性(简称ACID):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
⑴ 原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
⑵ 一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
⑶ 隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
⑷ 持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
24、Redis过期键的删除策略有哪些?
A. 定时删除、惰性删除、定期删除
B. 定时删除、定量删除、定期删除
C. 随机删除、惰性删除、定期删除
D. 定时删除、定量删除、随机删除
答案:A
解释:
(1)定时删除:
设置一个键过期时间的同时,创建一个定时器。每个带有过期时间的键都对应着一个定时器。这种策略对内存是最友好的,但对 CPU 时间是最不友好的。创建一个定时器需要用到Redis 服务器中的时间事件,而当前时间事件的实现方式为无序链表,并不能高效地处理大量时间事件。
(2)惰性删除:
访问一个键的时候再检测该键是否过期,是则删除之。
这种策略对 CPU 时间是最友好的,但对内存是最不友好的。没被访问到的过期键永远不会被删除,可以看做内存泄露。对于运行状态非常依赖于内存的 Redis 来说,这种策略显然会影响到 Redis 的性能。
(3)定期删除:
这种策略是对前两种策略的整合与折中方案。使用这种策略需要控制好删除操作每次执行的时长和执行的频率,否则会退化为前两种策略的其中一种。
Redis 服务器实际使用的是惰性删除和定期删除两种策略配合使用的方案。
(1)惰性删除策略的实现:
所有读写数据库的Redis命令在执行之前都会先检查输入键是否已过期,过期则删除之。
(2)定期删除策略的实现:
在规定时间内,分多次遍历服务器中的各个数据库,从数据库的过期字典中随机检查一部分键的过期时间,并删除其中的过期键。
<1>定期删除程序每次运行时,都会从一定数量的数据库中取出一定数量的随机键进行检查,并删除其中的过期键。
<2>使用一个全局变量记录当前删除程序检查的是第几个数据库,下一次运行都会接着上一次的进度进行处理。
<3>随着删除程序的不断执行,服务器中所有的数据库都会被检查一遍,然后这个全局变量被重置为 0,开始新一轮的检查工作。
25、以下哪种数据结构是Redis不支持的?
A. String
B. Hash
C. List
D. Map
答案:D
解释:
Redis五种数据结构:String,List,Hash,Set,Zset
26、如何优化MySQL?
A. 设计数据库时:数据库表、字段的设计,存储引擎选择
B. 利用好MySQL自身提供的索引等功能
C. 利用MySQL集群、负载均衡、读写分离
D. SQL语句优化
答案:ABCD
27、以下哪个选项不是Spring Cloud组件?
A. Eureka
B. Zuul
C. Dubbo
D. Feign
答案:C
解释:
Spring Cloud五大核心组件:注册中心Eureka,负载均衡Ribbon/Feign,断路器Hystrix,网关Zuul,配置管理Config。Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。
28、Actuator在Spring Boot中的作用,说法正确的是?
A. 可以访问生产环境中的程序当前状态
B. 为Restful Web服务提供端点,用于检查不同度量指标
C. Actuator必须集成SpringCloud组件才能使用
D. 以上都是
答案:AB
解释:
spring-boot-starter-actuator模块是一个spring提供的监控模块。我们在开运行发过程中,需要实时和定时监控服务的各项状态和可用性。Spring Boot的spring-boot-starter-actuator 模块(健康监控)功能提供了很多监控所需的接口,可以对应用系统进行配置查看、相关功能统计等。
29、为什么选择微服务框架?
A. 微服务可以轻松适应其他框架技术
B. 单个进程失败不会影响整个系统
C. 为大企业和小团队提供支持
D. 可以在相对较短的时间内独立部署
答案:ABCD
解释:
优点:
1、微服务可以轻松适应其他框架或技术。
2、单个进程的失败不会影响整个系统。
3、为大企业和小型团队提供支持。
4、可以在相对较短的时间内独立部署
缺点:
1、大量协作。
2、繁重的架构 - 系统是分布式的,架构涉及很多。
3、过多的计划来处理操作开销。
30、以下哪些是SpringCloud的核心特性?
A. 版本化、分布式配置
B. 服务注册与发现
C. 分布式消息传递
D. 以上都是
答案:D
解释:
1、分布式/版本化配置
2、服务注册和发现
3、路由
4、服务和服务之间的调用
5、负载均衡
6、断路器
7、分布式消息传递
31、过渡到微服务,常见的困难有?
A. 开发人员无法概述当前的挑战
B. 重写已经存在的程序
C. 职责、时间线、应用边界没有明确定义
D. 未能从一开始就实施和确定自动化的范围
答案:ABCD
32、下面关于BeanFactory接口说法正确的是?
A. BeanFactory是单例模式的实现,负责创建和管理bean
B. BeanFactory是工厂模式的实现,负责创建和管理bean
C. ApplicationContext类是它的实现类
D. 以上说法都不正确
答案:BC
33、在Servlet处理请求的方式为?
A. 以进程的方式
B. 以程序的方式
C. 以线程的方式
D. 以响应的方式
答案:C
34、关于SpringBoot,以下说法正确的是?
A. 使用嵌入式的servlet容器,应用无需打包成war包
B. starters自动依赖与版本控制
C. 准生产环境的运行应用监控
D. 以上都正确
答案:D
解释:
Spring Boot的优点:
1、快速创建独立运行的Spring项目与主流框架集成
2、使用嵌入式的servlet容器,应用无需打包成war包
3、starters自动依赖与版本控制
4、大量自动配置,简化开发,也可修改默认值
5、准生产环境的运行应用监控
6、与云计算的天然集成
35、在服务器的网络编程中,解决会话跟踪的方法有?
A. 使用Cookie
B. 使用URL重写
C. 使用隐藏的表单域
D. 以上方法都不能单独使用
答案:ABC
解释:
URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程
隐藏域是在页面级保存信息。与其他用户标准控件的区别是,隐藏域不被呈现在页面中。当页面提交的时候,隐藏域中的值将被一同发送给服务端。
Cookie是以文本存储于计算机中,使用name-value匹配。一般用户存储标识用户信息
36、下面是Spring依赖注入方式的是?
A. set方法注入
B. 构造方法注入
C. get方法注入
D. 接口注入
答案:AB
解释:
spring四种依赖注入方式:
1、Set注入
2、构造器注入
3、静态工厂的方法注入
4、实例工厂的方法注入
37、关于Spring Bean 的生命周期和作用域,以下说法不正确的是?
A. Spring Bean 生命周期可以分为创建和销毁两个过程
B. Spring Bean 的销毁过程会依次调用 DisposableBean 的 destroy 方法和 Bean 自身定制的 destroy 方法
C. Spring Bean 有2种作用域,分别是Singleton和Prototype
D. Singleton,是 Spring 的默认作用域,也就是为每个 IOC 容器创建唯一的一个 Bean 实例
答案:BD
解释:
在spring框架中,所有的bean对象都有生命周期,就是指bean的创建、初始化、服务、销毁的一个过程。
Bean在实例化的过程中:Constructor --> @PostConstruct -->InitializingBean --> init-method
Bean在销毁的过程中:@PreDestroy --> DisposableBean --> destroy-method
Spring的 bean有5种作用域分别是:singleton、prototype、request、session和GlobalSession
38、List、Set、Map哪个继承自Collection接口,以下说法正确的是?
A. List、Map
B. Set、Map
C. List、Set
D. List、Map、Set
答案:C
39、Java提供了哪些IO方式?
A. BIO、NIO、AIO
B. SIO、NIO、AIO
C. BIO、SIO、AIO
D. FIO、NIO、AIO
答案:A
40、关于Java 内存模型中的 happen-before ,以下说法不正确的是?
A. Happen-before 关系,是 Java 内存模型中保证多线程操作可见性的机制
B. Happen-before 表现形式就是 synchronized、volatile、lock 操作顺序等方面
C. Happen-before 不仅仅是对执行时间的保证,也包括对内存读、写操作顺序的保证
D. 线程内执行的每个操作,都保证 happen-before 后面的操作
答案:ACD
解释:
它的具体表现形式,包括但远不止是我们直觉中的 synchronized、volatile、lock 操作顺序等方面,例如:
1、线程内执行的每个操作,都保证 happen-before 后面的操作,这就保证了基本的程序顺序规则,这是开发者在书写程序时的基本约定。
2、对于 volatile 变量,对它的写操作,保证 happen-before 在随后对该变量的读取操作。
3、对于一个锁的解锁操作,保证 happen-before 加锁操作。
4、对象的构建完成,保证 happen-before 于 finalizer 的开始动作。
41、下列哪些是GC的回收算法?
A. 标记清除算法
B. 标记整理算法
C. 复制算法
D. 分代收集算法
答案:ABCD
42、以下关于String、StringBuffer和StringBuilder 的说法,不正确的是?
A. String声明为 final class,所有属性也都是 final 的
B. StringBuffer是线程安全的
C. String是典型的 Immutable 类
D. StringBuilder是线程安全的
答案:D
43、下列哪种异常是检查型异常,需要在编写时声明?
A. NullPointerException
B. ClassCastException
C. FileNotFoundException
D. IndexOutOfBoundsException
答案:C
44、在Java多线程中,下列哪种方式不会使线程进入阻塞状态?
A. sleep()
B. suspend()
C. wait()
D. yield()
答案:D
45、在JVM的内存结构中,下列哪些是线程私有的内存区域?
A. 程序计数器
B. Java虚拟机栈
C. 本地方法栈
D. 堆内存
答案:ABC
46、以下关于Hashtable、HashMap 和TreeMap 的说法,不正确的是?
A. 三者都是最常见的 Map 实现
B. Hashtable本身是同步的,不支持 null 键和值
C. HashMap 不是同步的,支持 null 键和值
D. TreeMap 则是基于红黑树的一种无序访问的 Map
答案:D
47、以下锁机制中,不能保证线程安全的是?
A. ReentrantLock
B. Synchronized
C. Volatile
D. Atomic
答案:CD
48、以下关于Exception和Error的说法,不正确的是?
A. Exception 和 Error 都是继承了 Throwable 类整机组装
B. Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类
C. Exception 和 Error 都是可以预料、便于捕获的
D. Exception 又分为checked异常和unchecked异常
答案:C
解释:
Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。
Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。
Error 是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如 OutOfMemoryError 之类,都是 Error 的子类。
Exception 又分为可检查(checked)异常和不检查(unchecked)异常
unchecked exception(非检查异常):包括运行时异常(RuntimeException)和派生于Error类的异常。对于运行时异常,java编译器不要求必须进行异常捕获处理或者抛出声明,由程序员自行决定。
checked exception(检查异常,编译异常,必须要处理的异常)
也:称非运行时异常(运行时异常以外的异常就是非运行时异常),java编译器强制程序员必须进行捕获处理,比如常见的IOExeption和SQLException。对于非运行时异常如果不进行捕获或者抛出声明处理,编译都不会通过。