牛客刷题笔记
- 【2020】奇安信秋招Java方向试卷3
- 1. 对一个文件的访问,常由( )共同限制。
- 2. 下列关于TCP和UDP的描述正确的是( )。
- 3. 在什么情况下,新插入链表的节点既是首节点也是尾节点
- 4. 一个有向无环图是否存在拓扑排序?
- 5. 以下关于哈希表的描述哪个是正确的?
- 6. 存在一个数字组成的序列[a1,a2,...,aN],若要统计所有数字出现的次数,用以下哪种数据结构比较适合?
- 7. 存在若干个字符串,若要查找具有相同前缀的字符串,以下哪种数据结构比较适合
- 8. 以下哪个算法是用于求解两个正整数的最大公约数的算法?
- 9. 下面说法正确的是?
- 10. 在一个空目录下执行umask 333; touch hello;命令后,hello文件的权限为?
- 11. 在DNS系统测试时,假设named进程号是53,如何通知进程重读配置文件
- 12. 视图可用于
- 13. 要添加索引的一个理由是
- 15. 关于NAT说法不正确的是?
- 16. 下列哪些不是IPv6过渡技术
- 17. 下面不属于OSI七层模型的是?
- 18. 下列说法错误的是
- 19. String s = new String("xyz");创建了几个StringObject
- 20. 在下列4条语句的前提下:
- (待完善)21. 下面哪一个命令可以关机,而不重启?
- 22. 下列属于Linux开机启动过程的是?
- 23. 下列关于inode说法正确的是?
- 24. 关于bash中以下符号的说明哪些是正确的
- 25. 关于 DELETE和 TRUNCATE TABLE的说法正确的是
- 27. 以下哪些是TCP协议运行时阶段
- 28. 以下关于超文本传输安全协议说法中正确的说法有
- 29. 下列有关守护线程描述正确的有
- 30. Java接口的修饰符包括
【2020】奇安信秋招Java方向试卷3
测试数据
测试分数 | 正确题数 | 排名 |
---|---|---|
31分 | 14/32 | 28% |
1. 对一个文件的访问,常由( )共同限制。
知识范围
- Linux
答案
用户访问权限和文件属性。
解析
参考链接:Linux 权限相关总结(用户&权限管理&权限设置方法)
- 用户访问权限
- 创建用户
#创建新用户
adduser 用户名
#修改指定用户名密码,需要输入两次密码
passwd 用户名
- 切换用户
#切换到指定用户名的用户下,但不获取环境变量
su 用户名
#切换到指定用户名的用户下,并获取环境变量
su - 用户名
#切换到指定用户名的用户下,执行完指定指令后返回原用户
su -c 指令 用户名
- 文件属性
-
文件信息1
文件类型 | 文件权限 |
---|---|
d文件夹,-文件 | - 无权限 r(read) 读/浏览权限 w(write) 写/删除、增加、移动权限 x(execute) 执行/进入权限 |
- 设置权限
# 设置文件/目录权限
# 权限范围:u:user,g:group,o:others,a:all
# 权限操作:+:添加权限,-:去除权限,=:赋予权限
chmod [权限范围][权限操作][权限] 用户名
# 改变文件/目录所有者/所属组
# 参数:-R 递归处理,-v 显示指令执行过程
chown [参数] 用户名 文件名/目录
chgrp [参数] 用户组名 文件名/目录
# 判断文件类型
# 参数:-b:列表不显示文件名,-c:显示指令执行过程,-z:尝试解读压缩文件内容
file [参数] 文件/目录
2. 下列关于TCP和UDP的描述正确的是( )。
知识范围
- 网络基础
答案
TCP是面向连接的,UDP是面向无连接的。
解析
参考链接:Javase复习系列——网络编程
- TCP
三次握手
和四次挥手
-
三次握手
客户端:我可以和你握手吗?
服务器:好的
客户端:好的
成功建立连接! -
四次挥手
客户端:我可以和你分手吗?
服务器:等我有个心理准备
服务器:我准备好了,拜拜
客户端:好的,拜拜
成功释放连接!
- TCP面向连接,UDP无连接2
面向连接
:需要双方建立连接后,再传输数据。无连接
:不需要建立连接,将数据打包发送。
3. 在什么情况下,新插入链表的节点既是首节点也是尾节点
知识范围
- 编程基础
答案
链表为空时。
4. 一个有向无环图是否存在拓扑排序?
知识范围
- 编程基础
答案
有向无环图一定存在拓扑序列。
5. 以下关于哈希表的描述哪个是正确的?
知识范围
- 编程基础
答案
哈希表查询的时间复杂度是O(1)。
解析
- 哈希表不适于做优先级队列
优先级队列具有*先出的特点,因此需要元素按照优先级排序,但哈希表是无序的,因此哈希表不适于做优先级队列。
-
哈希表查找的思想
①初始时,Addr = Hash(key)
。
②检测Addr位置是否有记录,若无记录则查找失败;若有记录,则进行对比,若对比成功,则查找成功;否则,进入下一步。
③使用冲突解决方案更新Addr,回到第一步。 -
哈希查找性能
ASL = ∑ 比较次数×元素个数
查询时间复杂度是O(1)。
6. 存在一个数字组成的序列[a1,a2,…,aN],若要统计所有数字出现的次数,用以下哪种数据结构比较适合?
知识范围
- 编程基础
答案
哈希表。
解析
数组、双链表和单链表要做统计就只能做遍历,单选题直接排除;哈希表要做统计,则在构建好哈希表后,则根据哈希函数和冲突解决方案进行统计即可。
7. 存在若干个字符串,若要查找具有相同前缀的字符串,以下哪种数据结构比较适合
知识范围
- 编程基础
答案
Trie树。
解析
参考链接(以下内容摘取自《程序员小灰》小程序):
漫画:什么是红黑树?(整合版)
红黑树主要应用于由于树的深度过大而造成磁盘IO读写过于频繁;哈希表主要应用于迅速查找;栈实现前缀,则实现原理就是遍历;Trie树主要应用于统计、排序和保存大量的字符串。
- 红黑树
-
红黑树定义
一种自平衡的二叉查找树。
特性
- 具有二叉查找树的特性。
- 结点是红色或黑色。
- 根结点是黑色。
- 每个叶子结点都是黑色的空结点(NIL结点)。
- 每个红色结点的两个子结点都是黑色。
- 从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点。
若在删除和插入结点时,红黑树的规则被打破,则需要调整树形。
8. 以下哪个算法是用于求解两个正整数的最大公约数的算法?
知识范围
- 编程基础
答案
辗转相除法。
解析
- Dijkstra算法
作用
单源最短路径算法,求从某一点出发到其他各点的最短路径。
算法描述
①每次从上一个加入集合的顶点vi出发,写出从v0出发经过vi到其他未确定顶点的路径长度。
②找出最小的路径长度,将末尾结点加入集合,重复步骤①②,直到所有的顶点确定完。
3. 辗转相除法
作用
求两个数的最大公约数。
算法描述
①设a>b,计算c = a % b
。
②令b = 余数c,再循环执行第一步,直到余数为。
- Floyd算法
作用
多源最短路径算法,从各个顶点出发到其他顶点的最短路径。
算法描述
A:
①按照对角线画出十字,十字部分照抄
②无穷的行列 or 对角线的值不变
③未填空的部分画十字,与本来的式子交叉的值求和,若值比原来小,则更新
Path:
①根据A来判断,若值不变,则下标不变;若值改变,则每个矩阵依次+1
9. 下面说法正确的是?
A. epoll ET模式必须配合non-blocking IO使用
B. epoll LT模式必须配合non-blocking IO使用
C. epoll ET可以配合blocking IO使用
知识范围
- Linux
答案
A. epoll ET模式必须配合non-blocking IO使用。
解析
参考链接:epoll的两种模式:LT和ET模式
- epoll的两种模式:LT和ET模式
- LT模式(默认模式)
epoll_wait函数检测到事件,通知应用程序处理,应用程序可以不处理该事件。支持block与non-block。 - ET模式
epoll_wait函数检测到事件,通知应用程序处理,应用程序需要马上处理事件。支持non-block。
10. 在一个空目录下执行umask 333; touch hello;命令后,hello文件的权限为?
知识范围
- Linux
答案
r–r--r–。
解析
# umask过滤权限,333表示-wx-wx-wx
# umask 333结果为r--r--r--
umask 333
# 创建一个空文件hello
touch hello
11. 在DNS系统测试时,假设named进程号是53,如何通知进程重读配置文件
知识范围
- Linux
答案
kill -HUP 53。
解析
参考链接:每天一个linux命令(42):kill命令
# kill命令格式
# HUP:重新加载进程,INT:中断进程
kill 参数 进程号
12. 视图可用于
知识范围
- 编程基础
答案
限制对表中特定行或列中的数据的访问。
解析
参考链接:关于数据库的视图,你了解多少
视图即查询所得的结果集,是动态生成的。
13. 要添加索引的一个理由是
知识范围
- 编程基础
答案
提高 SELECT 语句的性能。
解析
参考链接:什么是数据库索引
15. 关于NAT说法不正确的是?
可实现地址转换
可实现端口转换
IPv6根本不需要NAT
可同时实现地址和端口转换
知识范围
- 网络基础
答案
IPv6根本不需要NAT。
解析
参考链接:
-
NAT是什么?
NAT位于专用网和因特网的连接处,用于完成专用网与因特网之间的地址转换,也可以完成IPv4与IPv6之间的地址转换。
*NAT技术的出现是为了解决IP资源不够的问题。 -
NAT工作原理
NAT利用NAT转换表实现地址转换:
WAN端 | LAN端 |
---|---|
IP地址:端口号 | IP地址:端口号 |
假设网络架构为A——NAT——B
,使用A访问B。
- A发送数据报(源IP,目的IP,端口号)给NAT路由。
- NAT路由查询NAT转换表LAN端,将数据报的(源IP,端口号)使用WAN端替换。
- 最后发送的数据报为(WAN源IP,目的IP,WAN端口号)。
假设网络架构B——NAT——C
,使用B访问C。 - B发送数据报(源IP,目的IP,端口号)给网络系统。
- 数据报到达NAT路由,NAT查询NAT转换表WAN端,将数据报的(源IP,端口号)使用LAN端替换。
- 最后发送的数据报为(LAN源IP,目的IP,LAN端口号)。
16. 下列哪些不是IPv6过渡技术
知识范围
- 网络基础
答案
应用识别技术。
解析
-
隧道技术
再同层之间建立一条虚拟链路以传递数据。 -
地址翻译技术
即NAT。 -
双栈技术
其节点同时支持IPv4和IPv6协议栈,IPv6与IPv6通信使用IPv6协议栈,IPv6与IPv4通信利用IPv4 over IPv6隧道使用IPv4协议栈,所以双栈技术实现了分别与IPv4或IPv6节点间的信息互通。
17. 下面不属于OSI七层模型的是?
知识范围
- 网络基础
答案
聚合层。
解析
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
*口诀:无数网传会表演
(从下至上)
18. 下列说法错误的是
A. final修饰的类不可以被继承
B. final修饰的变量不可以被改变
C. final修饰的方法不可以重载
D. final修饰的方法可以被继承
知识范围
- Java
答案
C. final修饰的方法不可以重载。
解析
参考链接:
JAVA中final关键字的作用
-
final修饰范围
引用、方法、类。 -
final修饰引用
引用 = 基本数据类型——常量;
引用 = 对象or数组——本身可改,引用不可改;
引用 = 类的成员变量——必须立刻赋值; -
final修饰方法
不可重写,但可以被继承、重载。 -
final修饰类
无法继承(断子绝孙类)。
19. String s = new String(“xyz”);创建了几个StringObject
知识范围
- Java
答案
两个或一个都有可能。
解析
参考链接:Java中 String str = new String(“hello”);的底层实现
- 若在常量池中没有“xyz”,则A ⟶ \longrightarrow ⟶“xyz”,再B ⟶ \longrightarrow ⟶A。
- 若在常量池中存在“xyz”,则直接B ⟶ \longrightarrow ⟶A。
20. 在下列4条语句的前提下:
Integer i01 = -128;
int i02 = -128;
Integer i03 =Integer.valueOf(-128);
Integer i04 = new Integer(-128);
以下输出结果为false的是:
知识范围
- Java
答案
System.out.println(i03 == i04);
解析
参考链接:java面试题之int和Integer的区别
//Integer与int比较时,对Integer进行了拆箱,实际上是比较了值
System.out.println(i01 == i02); //true
//由于在在valueOf函数中,对-128~127范围内的数保存与缓存中,因此引用是一样的
System.out.println(i01 == i03); //true
//Integer与int比较时,对Integer进行了拆箱,实际上是比较了值
System.out.println(i02 == i04); //true
//由于new Integer会重新分配内存空间,因此引用并不相同
System.out.println(i03 == i04); //false
(待完善)21. 下面哪一个命令可以关机,而不重启?
知识范围
- Linux
答案
halt、netstat
解析
- halt
# 关闭系统
halt
# 关闭系统并关闭电源
halt -p
# 关闭系统,但不留下记录
halt -d
- netstat
# 用于查看网络状态
- reboot
# 重启计算机
reboot
- shutdown
# 立即关机
shutdown -h now
# 10分钟后关机
shutdown -h 10
# 重启计算机
shutdown -r now
22. 下列属于Linux开机启动过程的是?
知识范围
- Linux
答案
- 运行第一个进程init(进程号永远为1)
- 读取MBR的引导文件(grub,lilo)
- 引导linux内核
- 进入相应的运行级别
23. 下列关于inode说法正确的是?
知识范围
- Linux
答案
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息
特殊文件(比如乱码文件名)可以通过inode的方式删除
解析
参考链接:Linux inode 详解
-
inode定义
inode存储文件元信息的区域(包含元信息,但不包含文件名);block存储文件内容的区域。一个文件必须占用一个inode,但至少占用一个block。 -
inode号码(打开文件流程)
(1)找到文件名对应的inode号码;
(2)通过inode号码,获取inode信息;
(3)根据inode信息,找到文件数据所在的block,并读出数据。 -
inode大小
每个inode的大小,一般是128字节或256字节。 -
特有现象
(1)文件名包含特殊字符,直接删除inode,能够起到删除文件的作用;
find ./* -inum 节点号 -delete
(2)移动文件或重命名文件,只是改变文件名,不影响inode号码;
(3)打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。
24. 关于bash中以下符号的说明哪些是正确的
知识范围
- Linux
答案
A. $0代表脚本的名称
B. $@代表所有位置参数
C. $# 代表位置参数的数量
25. 关于 DELETE和 TRUNCATE TABLE的说法正确的是
知识范围
- 编程基础
答案
前者可以删除指定条目的记录,后者不能
删除整张表的数据, truncate比delete更高效
解析
参考链接:删除数据(DELETE、TRUNCATE TABLE)
- delete
# 删除表中记录行
# 删除表中数据后,不会释放空间,且删除操作可以撤销
DELETE FROM 表名 [WHERE 判断条件];
- truncate table
# 删除表中所有数据
# 操作执行更快,会释放空间,操作不可撤销
TRUNCATE TABLE 表名;
27. 以下哪些是TCP协议运行时阶段
知识范围
- 网络基础
答案
连接创建、数据传送、连接终止
28. 以下关于超文本传输安全协议说法中正确的说法有
知识范围
- 网络基础
答案
非对称加密和对称加密都使用了。
29. 下列有关守护线程描述正确的有
知识范围
- Java
答案
任何一个非守护线程没有结束,守护线程就全部工作
当最后一个非守护线程结束时,守护线程随着JVM一同结束工作
GC是守护线程
守护线程产生的新线程也是守护线程
30. Java接口的修饰符包括
知识范围
- Java
答案
public、final
解析
public、abstract、static、final