shopee秋招提前批BE笔试【2022】——牛客
一、选择题
1.若客户端首先向服务器发送FIN段请求断开TCP连接,则当客户端收到的服务器发送的FIN段并向服务器发送ACK段后,TCP状态转换为( )。
TIME_WAIT
2.Unix一共有五种I/O模型,分别是阻塞式I/O、非阻塞式I/O、I/O复用、信号驱动式I/O、异步 I/O,以下关于这些I/O模型说法错误的是
I/O复用不会阻塞用户进程
3.下列函数的时间复杂度是
int test(int n) {
int i = 0, sum = 0;
while(sum < n)
sum += ++i;
return i;
}
O(n^0.5)
i*(i+1)/2=n,一共操作了i+1次
4.关于Java JMM之Happens-Before,描述错误的是?
Happens-Before规则 Happens-Before的八个规则(摘自《深入理解Java虚拟机》12.3.6章节): 程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作; 管程锁定规则:一个unLock操作先行发生于后面对同一个锁的lock操作;(此处后面指时间的先后) volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作;(此处后面指时间的先后) 线程启动规则:Thread对象的start()方法先行发生于此线程的每个一个动作; 线程终结规则:线程中所有的操作都先行发生于线程的终止检测,我们可以通过Thread.join()方法结束、Thread.isAlive()的返回值手段检测到线程已经终止执行; 线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生; 对象终结规则:一个对象的初始化完成先行发生于他的finalize()方法的开始; 传递性:如果操作A先行发生于操作B,而操作B又先行发生于操作C,则可以得出操作A先行发生于操作C;
5.关于0/1背包问题,以下描述正确的是
对于同一背包与相同的物品,背包问题取得的总价值一定大于等于做0/1背包问题
其他背包问题(如完全背包,物品无限),一定大于0 / 1背包的结果
6.有一对夫妇,先后生了两个孩子,其中一个孩子是女孩,问另一个孩子是男孩的概率是
2/3
7.下面有关sql绑定变量的描述,说法错误的是?
使用绑定变量,查询优化器会预估的比字面变量更加真实
绑定变量被使用时,查询优化器会忽略其具体值,因此其预估的准确性远不如使用字面量值真实
8.对数组[45, 31, 47, 50, 90, 78, 34]构建一个大顶堆, 则结果是:
[90, 78, 47, 50, 31, 45, 34]
9.以下关于进程通信方式描述错误的是:
消息队列,是一个在系统内存中用来保存消息的队列
消息队列 是一种先进先出的 队列 型数据结构,实际上是系统内核中的一个内部链表。
10.如果x=2,以下表达式中,值不为6的是()
2*x,x+=2
A选项的2*x并没有变量来接收这个表达式的值,因此x还是等于2,x+=2后x为4
11.以下替换算法中,属于堆栈型替换算法的是
近期最少使用算法 近期最久未用过算法 优化替换算法
堆栈型算法就是,如果有两台一样环境,调用页面内存次序一样的电脑,其中一台A的内存页面数为m, 另一台B的内存页面数为n,且m<n,总是能同一时刻保证A里有的页面B里也有。
LFU和LRU能满足,因为最经常使用和最多使用的m个页面也被包含在同样的n个页面里。OPT类似。
12.下列属于防火墙技术的是
应用级网关 代理防火墙 数据包过滤
IPsec(Internet Protocol Security)是为IP网络提供安全性的协议和服务的集合,是***的一种常用技术,目的是保证信息传输的安全性。
IPsec为通信双方建立一条安全的隧道,在其中进行加密传输。
而防火墙技术是在网络边界保证安全性,IPsec保证传输过程的安全性,所以IPsec不是一种防火墙技术。
而其他三种是应用在网络边界的,过滤有害的数据。
13.
int x =5;
const int * const p = &x;
const int &q=x;
int const *next=&x;
const int *j=&x;
以下哪行代码存在问题
q++; (*j)++; *p =1;
14.下列哪些方案可实现幂等
数据库唯一主键 数据库乐观锁 Token令牌 下游传递唯一序列号
幂等的意思是相同的请求参数有相同的响应
15.对于文件的写入描述正确的有?
文件的写入分为直接I/O和带缓存的I/O 直接I/O会跑过缓存层,直接到设备驱动层 缓存I/O会将内容拷贝到内核态的页中,形成脏页 如果脏页太多,就需要回写磁盘
二、编程题
import java.util.*; public class Solution { public int[] GetEndPoint (String s) { s = s.toUpperCase(); int[] res = new int[]{0, 0}; int num = 0; for(int i = 0; i < s.length(); i++){ //if(Character.isDigit(s.charAt(i))){ if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){ num = num * 10 + s.charAt(i) - '0'; }else{ if(num == 0) num = 1; if(s.charAt(i)== 'W') res[1] += num;//上 else if(s.charAt(i)== 'S') res[1] -= num;//下 else if(s.charAt(i) == 'A') res[0] -= num;//左 else res[0] += num;//右 num = 0; } } return res; } }
import java.util.*; public class Solution { public String compressString (String s) { if(s.length() == 0) return ""; char[] c = s.toCharArray(); StringBuilder res = new StringBuilder(); int count = 1; for(int i = 0; i < c.length-1; i++){ if(c[i] == c[i+1]){ count++; }else{ res.append(c[i]); if(count > 1) res.append(count); count = 1; } } // 判断最后的字符 res.append(c[c.length-1]); if(count > 1) res.append(count); return res.toString(); } }
import java.util.*; public class Solution { public int petalsBreak (int[] nums) { int res=0; for(int i=0;i<nums.length;i++){ res+=nums[i]/2+nums[i]%2; } return res; } }