哔哩哔哩2020校园招聘后端笔试卷(一)

1. 在Java中下面哪个对类的声明是错误的?(C)

A. public class MyClass{}
B. class MyClass extends MySuperClass implements YourInterface {}
C. class MyClass extends MySuperClass1, MySupperClass2 {}
D. abstract class MyClass implements YourInterface1, Youriterface2 {}

解析:
Java 类单继承 接口多实现

2. 以下哪个选项不是单例模式的优点?(D)

A. 减少内存开支
B. 减少系统调用
C. 避免资源的多重占用
D. 线程安全

解析:
单例模式不一定是线程安全的 单例模式的线程安全要通过volatile关键字和DCL机制来实现

3. 某台计算机连接了8个相同的设备,有N个进程在竞争使用,每个进程最多会同时占用3个设备,请问当N大于等于多少时,系统可能发生死锁?(C)

A. 2
B. 3
C. 4
D. 5

解析:
每个进程3台,不会产生死锁;对于三个进程,可以有两个进程分别获得3台,使其执行完释放后让第三个进程获得3台,所以也不会产生死锁;对于四个进程,假若每个进程各获得2台而同时需要另外一台,产生了死锁,所以产生死锁的最小值是4。

4. 以下哪种操作不会导致计算机从用户态切换至内核态?(B)

A. 访问内存时出现缺页异常
B. 对一个变量进行取模运算
C. 创建一个子进程
D. 读取硬盘中文件的内容

解析:
用户态切换到内核态的三种方式:

  1. 系统调用
  2. 异常
  3. 外围设备中断
5. TCP协议在常见的七层网络模型中属于哪一层?(A)

A. 传输层
B. 网络层
C. 会话层
D. 数据链路层

解析:
在这里插入图片描述

6. UDP是一种无连接的网络协议,那么一下哪个选项不是UDP协议报头的内容?(A)

A. 序号(Sequence Number)
B. 源端口号(Source port)和目标端口号(Destination port)
C. 报文长度(Length)
D. 校验和(Checksum)

解析:
UDP首部有8个字节,由4个字段构成,每个字段都是两个字节,
1.源端口: 源端口号,需要对方回信时选用,不需要时全部置0.
2.目的端口:目的端口号,在终点交付报文的时候需要用到。
3.长度:UDP的数据报的长度(包括首部和数据)其最小值为8(只有首部)
4.校验和:检测UDP数据报在传输中是否有错,有错则丢弃。
该字段是可选的,当源主机不想计算校验和,则直接令该字段全为0.
当传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口,上交给应用进程。
如果接收方UDP发现收到的报文中的目的端口号不正确(不存在对应端口号的应用进程0,),就丢弃该报文,并由ICMP发送“端口不可达”差错报文给对方。
在这里插入图片描述

7. 以下哪个排序算法是稳定的(C)

A. 快速排序
B. 选择排序
C. 冒泡排序
D. 堆排序

解析:
稳定排序算法
冒泡排序 插入排序 桶排序 归并排序
不稳定排序算法
选择排序 希尔排序 堆排序 快速排序

8. 一颗有512个节点的完全二叉树的高度是多少(B)

A. 9
B. 10
C. 11
D. 12

解析:
9层满二叉树的节点数 2^9 - 1 = 511
所以有512节点的完全二叉树高度为10

9. 以下数据库事务的隔离级别中哪一个可能造成脏读(A)

A. 读取未提交内容(Read Uncommited)
B. 读取提交内容(Read Committed)
C. 可重复读(Repeatable Read)
D. 可串行化(Serializable)

解析:
快速理解 脏读、不可重复度、幻读
https://blog.csdn.net/qq_33591903/article/details/81672260

10. 如果想列出当前目录以及子目录下所有扩展名为“.txt”的文件,那么可以使用以下哪个命令?(A)

A. find . -name “.txt"
B. grep “.txt” -r *
C. ls "
.txt”
D. less “*.txt”

解析:
find (目录) [-type d | f] (文件夹 | 文件) -name (名称,可使用正则表达式)

11. 以下哪一项不是c++11 新引入的容器(B)

A. std::array
B. std::map
C. std::unordered_map
D. std::forward_list

解析:
C++11新增容器以及元组
https://www.cnblogs.com/xenny/p/9689784.html

12. 使用gcc编译一份C代码的过程,报错提示"undefined reference to ‘XXXXX’",这是哪个阶段出错了?(D)

A. 预处理
B. 编译
C. 汇编
D. 链接

解析:
GCC编译:
预处理->编译->连接->加载

  • 预处理:处理程序中#开头的内容
  • 编译:程序构建过程, 生成.o文件,gcc 依赖顺序问题(从后向前),如果文件a依赖于文件b,那么编译的时候必须把a放前面,b放后面。
  • 链接:将所有的对象文件和库串联起来,成为可运行程序。静态库已经植入程序,共享库在程序中包含其引用。
  • 加载:程序启动,引用共享库,GCC编译器假定所有的共享库以lib开头,以.so或者.a结尾。

undefined reference to ‘XXXXX’ 即没有找到对于XXXXX的引用,链接阶段错误

13. 在以下哪种容器上,不能应用二分查找算法?(C)

A. std::vector
B. std::deque
C. std::list
D. std::array

解析:
std::list是一个双向链表,因此它的函数也都要从链表的角度来进行理解。

14. 访问主存上的数据,大概需要多少个机器时钟?(C)

A. 2
B. 10
C. 100
D. 10000

解析:
这啥鸭。不知道不清楚不明白。我不会= =

15. 以下哪一项不能有效利用程序的局部性?(B)

A. 顺序读取数据对象
B. 将相关代码拆散到多个C文件中
C. 精简程序binary的大小
D. 将主要的计算逻辑集中在内部循环并做优化

解析:

  • 将注意力集中在内部循环上,大部分计算与存储器访问都放在那里
  • 按照数据在存储器的顺序读,使空间局部性最大
  • 一旦读入某数据,尽可能多的使用它,使时间局部性最大
  • 缓存命中率只是影响性能的一个重要因素,存储器访问数量也很重要,两者需要折中考虑
16. 以下哪一项不会导致程序发生“段错误”?(A)

A. 忘记释放已分配的内存块
B. 引用不存在的变量
C. 引用已经被释放的内存块
D. 访问数组越界

解析:
忘记释放已分配的内存块 导致 内存泄露

17. “定义了一系列算法,并将每个算法封装起来,使它们可以相互替换”是指以下哪种设计模式?(B)

A. 模板模式
B. 策略模式
C. 状态模式
D. 命令模式

解析:
https://www.runoob.com/design-pattern/design-pattern-tutorial.html

18. 2019! 的末尾有多少个零?(B)

A. 501
B. 502
C. 503
D. 504

解析:
2019!=1*2*3*4*5*…*2019 ——什么时候会计算结果的末尾增加0?2*5,10,15*2也就是5的倍数乘一个偶数时(10的倍数自带0),其中25*4又会加两个0,125*8会加三个0,5,25,125又分别有1,2,3个因子5.即0的数量取决于共有多少个因子5(例如:50=5*5*2有两个因子5)
2019/5=403,有403个数至少有一个因子5,可以和偶数凑0
在这403个数中
403/5=80有80个数有两个因子5,即可以跟偶数再凑一个0
依次类推
80/5=16
16/5=3
403+80+76+3=502
可以凑502个数

19. tcp连接建立需要几次握手(C)

A. 1
B. 2
C. 3
D. 4

解析:
建立连接 3次握手
释放连接 4次挥手
TCP建立连接和释放连接过程: https://www.cnblogs.com/dj0325/p/8490293.html

20. 以下哪种TCP状态需要等待2MSL(A)

A. TIME_WAIT
B. CLOSE_WAIT
C. CLOSING
D. FIN_WAIT

解析:
TCP释放连接时为什么time_wait状态必须等待2MSL时间:https://www.cnblogs.com/huenchao/p/6266352.html

21. 路由器工作在网络协议的哪一层(C)

A. 物理层
B. 链路层
C. 网络层
D. 应用层

解析:
网络层:路由器、防火墙
数据链路层:网卡、网桥、交换机
物理层:中继器、集线器

22. 虚拟内存的容量只受(D)的限制

A. 物理内存的大小
B. 磁盘空间的大小
C. 数据存放的实际地址
D. 计算机地址位数

解析:
虚拟存储器的容量由CPU的地址长度决定

23. 以下哪个步骤会产生汇编代码文件(B)

A. 预处理
B. 编译
C. 汇编
D. 链接

解析:
编译生成汇编代码,汇编对汇编代码进行处理,生成机器语言代码。

24. 若处理器有32位地址,则它的虚拟地址空间为(B)

A. 2G
B. 4G
C. 512M
D. 256M

解析:
2^32/1024/1024/1024=4G

25. 按照二叉树的定义,具有3个结点的二叉树有几种。(C)

A. 3
B. 4
C. 5
D. 6

解析:
在这里插入图片描述

26. 以下哪个不是栈的基本操作(A)

A. 删除栈底的元素
B. 删除栈顶元素
C. 判断栈是否为空
D. 栈置空

27. 堆排序的时间复杂度为(B)

A. n
B. nlogn
C. logn
D. n^2

解析:
堆排序:https://www.cnblogs.com/Java3y/p/8639937.html
在这里插入图片描述

28. 有6个元素6,5,4,3,2,1的顺序进栈,问下列哪一个不是合法的出栈序列(C)

A. 5,4,3,6,1,2
B. 4,5,3,1,2,6
C. 3,4,6,5,2,1
D. 2,3,4,1,5,6

解析:
对于C来说 6出栈前5必须出栈,所以C错误(栈先进后出)

29. 原地翻转句子中单词的顺序,但单词内字符的顺序不变。要求:空间复杂度O(1),时间复杂度O(n)。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
 
        String[] strings = str.split(" ");
        String res = "";
        for (int i = strings.length - 1; i >= 0; i--) {
            if (i==0){
                res += strings[i] ;
            }else{
                res += strings[i]+ " ";
            }
 
        }
        System.out.println(res);
 
    }
}
30. 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。

解析:
参考链接:https://blog.csdn.net/qq_33271461/article/details/84965671

31. 有N件物品,它们的重量w分别是w1,w2,…,wn,它们的价值v分别是v1,v2,…,vn,每件物品数量有且仅有一个,现在给你个承重为M的背包,求背包里装入的物品具有的价值最大总和?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
    public static void main(String[] args) throws IOException{
    
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s1 = br.readLine();
        String s2 = br.readLine();
        String s3 = br.readLine();
        String s4 = br.readLine();
         
        String[] w = s3.split(" ");
        String[] v = s4.split(" ");
        int[] res = new int[Integer.parseInt(s2) + 1];
        for (int i = 0; i < w.length; i++) {
            for (int j = Integer.parseInt(s2); j >0 ; j--) {
                if (j >= Integer.parseInt(w[i])){
                    res[j] = Math.max(res[j], res[j-Integer.parseInt(w[i])] + Integer.parseInt(v[i]));
                }
            }
        }
 
        System.out.println(res[Integer.parseInt(s2)]);
         
 
    }
 
}

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值