bilibili测试开发笔试8.25

一、题型

单选+多选:30 * 2
填空:5 * 2
编程题:3 * 15

二、题型1

1、下列关于父进程与子进程的叙述正确的是(ABC)
A、父进程与子进程有不同的进程控制块
B、父进程与子进程不能同时使用同一临界资源
C、父进程与子进程可以并发执行
D、父进程与子进程共享虚拟地址空间
解析:父进程和子进程可以并发执行
父进程和子进程可以共享一部分资源,但不能共享虚拟地址空间,在创建子进程时会为子进程分配资源比如虚拟地址空间,即D选项错误;
进程控制块PCB是进程存在的唯一标志,每个进程都有自己的PCB,即父进程和子进程有不同的进程控制块;
临界资源一次只能为一个进程所使用,父进程和子进程不能同时使用同一临界资源

2、对于两个并发进程,设互斥信号量为mutex(初值为1),若mutex=0,则(B )
A.表示没有进程进入临界区
B.表示有一个进程进入临界区
C.表示有一个进程进入临界区,另一个进程等待进入
D.表示有两个进程进入临界区
解析:mutex=1:表示没有进程进入临界区

3、基本数据结构知识
3
4、递归函数

#include <stdio.h>
int foo(int x,int y){
    if(y!=3&&x<6)
        return 1;
    return 3*foo(x-6,y/2);
}
int main(void) { 
	int x=12,y=20;
	printf("%d\n",foo(x,y));
	return 0;
}
结果:9

5、等价类+边界值
对于输入长度范围为[1,145]:
有1个有效等价类(1<=x<=145) + 2个无效等价类(x<1 和 x>145)

6、数据库的 between … and
between A and B:匹配属性值在[A,B]范围内的数据。

7、数据库的limit
limit s,n:表示从查询结果的 第s行开始 返回n行记录第一行为0。如果不指定s,则默认从第一行开始
例子:
在这里插入图片描述

三、题型2

1、b+2;不对任何变量赋值,相当于空语句

#include <stdio.h>
int main(void) { 
	int a=0,b=0,c=0;
	c=(a-=a-5),(a=b,b+3);
	printf("%d,%d,%d\n",a,b,c);
	return 0;
}
结果:a=0,b=0,c=5

解析:
第二句为 逗号表达式 :c=(a-=a-5)
给c赋值,把 a -= a - 5 的结果赋给c:
(a-=a-5)=(a=a-(a-5))
把a=0;代入得a=5;
进而(a-=a-5)的值为5;
c=5;

接下来执行(a=b,b+3);
这里面又有逗号表达式
a=b;因b=0;故a=0;
b+3不对任何变量赋值,相当于空语句
综上所述:a=0;b=0;c=5

3、&运算
功能:将x转化为2进制,看含有的1的个数
注: 每执行一次x = x&(x-1),会将 x 用二进制表示时 最右边 的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0

#include <stdio.h>
int func(int x)
{
    int countx = 0;
    while(x) //当x不为0时循环
    {
        countx ++; //记录循环次数
        x = x&(x-1); //&是按位"与"操作,即以二进制bit进行比较,只有全1时才是1,否则该位为0
    }
    return countx;//返回循环次数
}

int main(void) { 
	int x=9999;
	printf("%d\n",func(x));
	return 0;
}
结果:8

解析:
1、x=9999
x2=0010011100001111
(x-1)2=0010011100001110
x&(x-1)=0010011100001110=9998
2、x=9998
x2=0010011100001110
(x-1)2=0010011100001101
x&(x-1)=0010011100001100=9996
3.x=9996
x2=0010011100001100
(x-1)2=0010011100001011
x&(x-1)=0010011100001000=9992

8、x=8192
x2=0010000000000000
(x-1)2=0001111111111111
x&(x-1)=0000000000000000=0

补: 判断一个数(x)是否是2的n次方
思路:
(1) 如果一个数是2的n次方(偶数),那么这个数用二进制表示时其最高位为1,其余位为0
(2) == 优先级高于 &。

#include <stdio.h>
int func(int x)
{
    if( (x&(x-1)) == 0 )
        return 1;
    else
        return 0;
}
 
int main()
{
    int x = 8;
    printf("%d\n", func(x));
}

4、redo log作用

重做日志(redo log)
作用:确保事务的持久性
以防在发生故障的时间点,还有脏页未写入磁盘,在重启mysql的时候,根据redo log进行重做,从而达到事务的持久性这一特性。
内容: 物理格式的日志,记录了物理数据页面修改的信息,其redo log是顺序写入redo log file的物理文件中去的。

四、题型3

1、整数数组排序并将元素替换为序号
leetcode 1331题
补:cin.get(字符变量名)可以用来接收字符

#include <iostream> 
using namespace std; 
main () 
{ 
	char ch; 
	ch=cin.get();    //或者cin.get(ch); 获取一个字符
	cout<<ch<<endl; 
}
输入:123
输出:1

输入: d667
输出: 
空格

故而,输入[1,2,4,3]这种数字之间用逗号隔开的数组方法:

#include <string>
#include <iostream>
#include <vector>
using namespace std;
int main() {
    std::vector<int> inputs ;
    int t;
    while(cin>>t){  // t:获得第一个数字
        inputs.push_back(t);
        if(cin.get()=='\n'){// cin.get():获得第二个字符(比如空格或逗号)
            break;    
        }
    }
    for(auto x:inputs)
        std::cout << x << " ";
    return 0;
}
输入: 4 5,6,7
输出:4 5 6 7 

2、打印符合规律的数列第n个数
类似菲波那契数

3、罗马数字转换整数
leetcode 13题

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值