• Baidu软件研发工程师笔试题整理


    Hadoop Map/Reduce

    Hadoop Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。 

    一个Map/Reduce 作业(job) 通常会把输入的数据集切分为若干独立的数据块,由 map任务(task)以完全并行的方式处理它们。框架会对map的输出先进行排序, 然后把结果输入给reduce任务。通常作业的输入和输出都会被存储在文件系统中。 整个框架负责任务的调度和监控,以及重新执行已经失败的任务。 

    通常,Map/Reduce框架和分布式文件系统是运行在一组相同的节点上的,也就是说,计算节点和存储节点通常在一起。这种配置允许框架在那些已经存好数据的节点上高效地调度任务,这可以使整个集群的网络带宽被非常高效地利用.
    Hadoop框架的流程,MapReduce的框架流程:map任务可以细分为四个阶段:record reader、mapper,combiner和partitioner。map任务的输出被称为中间键和中间值,会被送到reducer做后续处理。reduce任务可以分为四个阶段:混排(shuffle),排序(sort),reducer和输出格式(output format)。所以D选项是不正确的,map任务结束的第一步应该是shuffle阶段,然后才是sort阶段。
     

    主机甲向主机乙发送一个(SYN=1,seq=11220)的TCP段,期望与主机乙建立TCP连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的TCP段应该是()

    SYN和ACK是TCP协议报头中的6个保留位中的2位。 
    ACK:ACK位置为1表明确认号是合法的。如果ACK为0,那么数据报不包含确认信息,确认字段被省略。 
    SYN:用于建立连接。 
    1、如下图,目前连接还在建立阶段,乙向甲发送的TCP段是包含确认信息ack的, 则SYN=1,ACK=1;
    2、至于seq,ack,乙向甲发送的seq可以随意,但是 乙向甲发送的 ack却要求是之前甲向乙发送的请求seq加1,所以是ack=11220+1=11221。
    排除法,B。 
     
     
     
    #include<iostream>
    using namespace std;
    void f(int *p,int *q)
    {
        p++;
        *q=*q+1;
    }
    int main() {
        int m=1,n=2,*r=&m;
        f(r,&n);
        cout<<m<<","<<n;
        return 0;
    }
    程序运行后的输出结果是()1,3
    /*
    
    
    f(r,&n); 指针r指向m的地址。
    
    
    调用该函数时,将m和n的地址复制一份赋值给指针p和q;
    
    
    在函数体中,将指针p加1,即p指向m的下一个地址,函数调用结束后该指针即被释放,m的地址不变;
    
    
    在函数体中,将指针q所指内容加1,即n+1,这样就间接通过q改变了n的值。
    
    
    */
     

    UNIX 

    在UNIX中,$$、$@、$#以及$*的含义分别如下: 
    $$表示当前命令的进程标识数。 
    $*表示所有位置参量,例如$1、$2等。 
    $@与$*类似,但当用双引号进行转义时,"$@"能够分解多个参数,而"$*"合并成一个参数。 
    $#包括位置参数的个数,但是不包括命令名。

    使用useradd创建用户时和主目录相关的参数是()

    -p 设定帐号的密码  (不选)
    -d 指定用户的主目录
    -m 自动建立用户的主目录
    -M 不要自动建立用户的主目录

    已知表达式++a中的"++"是作为成员函数重载的运算符,则与++a等效的运算符函数调用形式为()

    a.operator++()

    前置单目运算符重载为类的成员函数时,不需要显式说明参数,即函数没有形参。后置单目运算符重载为类的成员函数时,函数要带有一个整型形参。

    直接插入排序

    在已经有序的序列中从后往前比较插入。

    下面程序段包含4个函数,其中具有隐含this指针的是()      C/C++

    int f1();
    class T
    {
        public:static int f2();
        private:friend int f3();
        protect:int f4();
    };
    f4
    静态成员函数属于整个类所拥有,没有this指针 
    友员函数不是这个类的成员,没有 
    类的非静态成员函数  有

    数据库

    第1范式: 

    存在 非主属性对码的部分依赖关系 R(A,B,C) AB是码 C是非主属性 B-->C B决定C C部分依赖于B 

    第一范式 

    定义:如果关系R 中所有属性的值域都是单纯域,那么关系模式R是第一范式的 

    那么符合第一模式的特点就有 

    1)有主关键字 

    2)主键不能为空, 

    3)主键不能重复, 

    4)字段不可以再分 


    第2范式:
    数据库表中不存在非关键字段对任一候选关键字段的 部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。
     
    第3范式:
    在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的 传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:
                   关键字段 → 非关键字段x → 非关键字段y
     
    BCNF( 鲍依斯-科得范式 ):
    在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的 传递函数依赖则符合BCNF。

    依赖关系:
    1.数据依赖
    数据依赖指的是通过一个关系中属性间的相等与否体现出来的数据间的相互关系,其中最重要的是函数依赖和多值依赖。

    2.函数依赖
    设X,Y是关系R的两个属性集合,当任何时刻R中的任意两个元组中的X属性值相同时,则它们的Y属性值也相同,则称X函数决定Y,或Y函数依赖于X。

    3.平凡函数依赖
    当关系中属性集合Y是属性集合X的子集时(Y?X),存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。

    4.非平凡函数依赖
    当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。

    5.完全函数依赖
    设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。

    6.部分函数依赖
    设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。

    7.传递函数依赖
    设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
  • 相关阅读:
    设计模式之享元模式
    延时任务的实现
    Git代码分支开发工作流程
    设计模式之责任链模式
    Docker 三剑客 到 k8s 介绍
    写操作系统之实现进程
    写操作系统之开发加载器
    写操作系统之开发引导扇区
    写操作系统之搭建开发环境
    怎么实现系统调用wait和exit
  • 原文地址:https://www.cnblogs.com/dear_diary/p/6765143.html
Copyright © 2020-2023  润新知