牛客网练习,某公司校园招聘。MICRO 2016年

牛客网练习,某公司校园招聘。MICRO 2016年

第一题: 下面哪个语句无法通过编译? B

    if (x>y);
            可以通过编译  相当于 if 后面跟了空白语句。
    if (x=y) && (x!=0) x+= y;
            不可通过编译 

第四题: 下面代码运行后,变量 total 的结果是?  =10

    int total = 0;
    for (int i = 0, j = 5; total < 10 || j > 3; ++i, --j) {
         total += (i + j);
     }   
 
第五题: 在使用标准 C 库时, 下面哪个选项使用只读模式打开文件?  A
    fopen("foo.txt", "r")
    fopen("foo.txt", "r+")

    r+ 意思是可以读可以写,但是文件不存在会报错。


第六题:请问经过表达式a = 5 ? 0 : 1的运算,变量a的最终值是?  a=0

        条件运算符的优先级高于赋值运算符的优先级


第八题:下列程序的打印结果是?  xycdBCD

    char p1[15]= "abcd",*p2= "ABCD", str[50]= "xyz"; 
    strcpy(str+2,strcat(p1+2,p2+1)); 
    printf("%s",str);

        char*  strcpy(char *dest,char *src);
            将从src开始包含'\0'的字符串拷贝到以dest开始的位置,进行覆盖
        char*  strcat(char *dest,char *src);
            将src开始的字符串添加到dest字符串的末尾(覆盖dest的\0")
        两者都返回指向dest的指针。

第九题: 以下程序的输出结果是?    6789
 
    #include <stdio.h> main()
    {
        char a[10]={ '1','2','3','4','5','6','7','8','9',0},*p; int i;
        i=8;
        p=a+i;
        printf("%s\n",p-3); 
    }
    
      C++中'\0'与'0'是不同的,他们都是字符,但是他们的ASCII码是不同的:
      '\0' ASCII码值为0,'0' 也可以写成'\0x30' ,ASCII码值为48。
        最后一个0是数字0,即代表字符串结束标志‘\0‘。

第十题: int a=5,则 ++(a++)的值是?  编译出错.
     只有++运算符只能作用于变量,不能作用于一个数,故++5 编译出错。

第十三题:在一个请求页式存储管理中,一个程序的页面走向为 
    4, 3, 2, 1, 3, 5, 4, 3, 2, 1, 5,并采用 LRU 算法。
    假设分配给该程序的存储块个数 M 分别为 3 和 4,
    则该访问中发生的缺页次数 F 分别是?   M=3, F=9 (2) M=4, F=9

第十四题: 第一二三范式区别?
        第一范式:原子性,字段不可分割
        第二范式:没有包含在主键中的列完全依赖于主键,不能只依赖于主键的一部分。
        第三范式:不能存在传递依赖

第十五题: 下面关于 RSA 算法的描述,不正确的是?  C
        首先RSA是公钥算法,速度就不会太快。
        再者平时的WIFI大都使用AES加密,AES加解密速度当然不会慢。
        
        RSA 的运行速度相比 AES 算法要慢很多,正确
        RSA 的安全性依赖于大数分解,正确
        TLS/SSL 协议中 RSA 的公钥长度一般为 256 位或 512 位(错,1024位走起)
        RSA 是非对称加密算法,正确

        公钥如何使用?       
            甲方是信息接受方,甲方创建RSA秘钥对,发送RSA公钥给乙方,自己保留RSA私钥。
            
            乙方创建AES密钥,加密待传送的明文,之后用RSA公钥仅加密该密钥,
            为保证效率,RSA公钥仅加密AES的密钥,并且目前AES密钥最长仅256位。
            明文后的密文----通过Internet发给---->甲方
            甲方用RSA私钥解密AES密钥,再用解密后的AES密钥解密数据密文,得到明文。
 
第十七题:假设在 n 进制下,567*456=150216 等式成立,n 的值是?  

        首先判断n>10 ,因为 10进制下 567*456 < 150216
        然后 各项展开 判断出 n>15 再结合尾数可知 n=18
             
        假设n进制,则有(5*n^2  +6*n+7) * (4*n^2 +5*n+6) = n^5 +5*n^4 +2*n^2 +n+6,
        简化以后可以得到
        15*n^4 +49*n^3 +86*n^2 +70*n+36=n^5 ,两边同时除以n 5 ,
        可以得到15/n+49/n 2 +86/n 3 +70/n 4 +36/n 5 =1;
        
        要让等式成立,n肯定是大于15的,所以选D, n=18 。

第十八题: 下列关于网络编程的描述中,错误的是?        
        一个 Socket 可以绑定多个网卡,正确
        客户端和服务器端都可以主动关闭 Socket,正确,发送fin信号
  
        TCP 和 UDP 协议不能绑定同一端口,错误,TCP和UDP是完全独立的两个软件模块,
            因此各自的端口号也相互独立,如TCP有一个255号端口,UDP也可以有一个255号端口

        Socket 支持阻塞模式和非阻塞模式,正确
        简单点说:
        阻塞就是干不完不准回来,   
        非组塞就是你先干,我现看看有其他事没有,完了告诉我一声。

第二十题: 关于 Linux 系统上同一个程序的多个进程实例共享一个 TCP 监听端口的说法, 哪个不正确?  D

        每个进程都使用 SO_REUSEPORT 选项,然后绑定同一个地址和端口,正确
        每个进程分别绑定不同的网卡地址的同一端口,正确
        第一个进程先绑定到监听地址端口, 然后 fork 子进程共享使用,正确
        
        每个进程分别绑定一次, 但只有最后一个调用的进程才能收到数据,错误选项。
        解释:确实只有一个进程收到数据,但这是竞争调度的结果,
                而不是最后调用的进程收到数据。

        线程争夺资源,并且对获得资源的优先顺序敏感就会进入竞争状态,
        缺点是锁住资源会阻止多线程并发执行。

第二十一题:  阅读下面程序,说出几点,程序错误或者不规范的地方。   
        #include "stdio.h" #include "stdlib.h"
        #include "string.h"
        //
        // 说明:
        // checkpwd {username} {password} //
        // 程序接收两个参数, 分别是用户名和密码. 然后和本地数据库中的正确值比较, 如果匹配则返回 0,
        // 失败则返回-1 //
        int main(int argc, char* argv[]) {
            char* username = argv[1];
            char* password = argv[2];
            char* cmd = (char*)malloc(256);
            if (strlen(username) == 0 || strlen(password) == 0) return;
            //
            // mysql 命令行参数说明
            // mysql -h {服务器} -u {用户名} -p{密码} {数据库名称}
            //
            sprintf(cmd, "echo 'SELECT * FROM users WHERE username=%s AND password=%s' | /bin/mysql -h 127.0.0.1 -u root -p123 userdb", password, username);
            if (system(cmd) > 0)
                  return 0;
            else
                  return -1;
        }

        1. argv, 边界未执行边界检查
        2.cmd 指针为释放。
        3. return 没有跟上返回值
        4. sprintf 会有溢出漏洞
        5. 明文传输密码
        6. root用户访问数据库
        7. SQL 语句拼接有注入漏洞
        8. 用户名和密码位置写反
        9. system 命令执行只要不出错都会返回0,此处应返回sql执行结果,逻辑错误。
        10. 失败返回-1,shell会识别成255。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值