笔试总结2

来源:互联网 发布:dsd播放软件 编辑:程序博客网 时间:2024/06/03 18:59
(1)A 静态网站指网页是固定的,而不是在用户访问的时候动态生成的
B,可以使用同一个网址访问不同的Web服务器,CDN网络就是这样。比如你在不同的确访问www.baidu.com,指向的服务器ip地址也不同

C,127.0.0.1是本机回环测试地址,等价于localhost,可以访问本地站点

(2)内部网关协议IGP(Interior Gateway Protocol)是指在一个自治系统(AS)内部所使用的一种路由协议。

内部网关协议可分为三类: 
1) 距离-矢量路由协议,包括路由信息协议(RIP),内部网关路由协议(IGRP)
2) 连接状态路由协议,包括开放式最短路径优先协议(OSPF),中间系统到中间系统路由交换协议(IS-IS)
3) 高级距离矢量路由协议,包括增强型内部网关路由协议(EIGRP)
RIP:路由信息协议, 是内部网关协议IGP中最先得到广泛使用的协议,是一种分布式的基于距离矢量的路由选择协议,是因特网的标准协议,其最大优点就是实现简单,开销较小。
OSPF:Open Shortest Path First(开放式最短路径优先)
HELLO:是一种网络层协议,它使得网络设备能够互相标识自己的身份,并表明自己仍然处于工作状态。网络上的设备在接收到hello请求后返回hello应答。网络设备按照指定的时间间隔发送hello数据包,以表明自己仍处于工作状态。通过检查hello数据包,网络设备可以学习到其他设备的逻辑地址(ip)或物理地址(mac)。
IS-IS:Intermediate System-to-Intermediate System(中间系统到中间系统)路由协议最初是ISO(the International Organization for Standardization,国际标准化组织)为CLNP(Connection Less Network Protocol,无连接网络协议)设计的一种动态路由协议。
(3)cpu工作状态分为系统态(或称管理态,管态)和用户态(或称目态)。 引入这两个工作状态的原因是:为了避免用户程序错误地使用特权指令,保护操作系统不被用户程序破坏。具体规定为:当cpu处于用户态时,不允许执行特权指令,当cpu处于系统态时,可执行包括特权指令在内的一切机器指令
(4)
下面这段代码会打印出什么?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
classA
{
public:
    A()
    {
        printf("A ");
    }
    /*virtual*/
    ~A()
    {
        printf("deA ");
    }
};
 
classB
{
public:
    B()
    {
        printf("B ");
    }
    ~B()
    {
        printf("deB ");
    }
};
 
classC: publicA, publicB
{
public:
    C()
    {
        printf("C ");
    }
    ~C()
    {
        printf("deC ");
    }
};
intmain()
{
    A *a = newC();
    delete a;
    return0;
}

  • A B C deA
  • C A B deA
  • A B C deC
  • C A B deC
    选择 A
    如果按题中所说 加入virtual,那么输出的顺序是ABC deC deB deA。由于析构函数是虚函数,动态调用,那么会调用C的析构函数,由于C继承与A和B,所以先调用A B的析构,最后调用自己的。
    如果A的析构函数不是虚函数,那么只会调用A的析构函数。
    (4)
    A, finish() 方法就是退出activity
    B. actiivity中出现抛异常,会弹出框,强制退出当前activity的。
    C. System.exit(0); 这是退出所有activity使用的。
    D. onStop() 只是activity一个周期方法,此时还没退出,只有走到onDestory()才退出,
    (5)一定要注意,操作系统是系统软件,不是应用软件。
    (6)
    bash中有两个内置的命令declare 和 typeset 可用于创建变量。除了使用内置命令来创建和设置变量外,还可以直接赋值,格式为:变量名=变量值

      注意:变量名前面不应加美元“$”符号。(和PHP不同)

             等号“=”前后不可以有空格。

             Shell中不需要显式的语法来声明变量。

             变量名不可以直接和其他字符相连,如果想相连,必须用括号:    echo “this is $(he)llo!”

    (7)有向树  A有且仅有一个结点的入度为0;  (就是只有一个节点进入的时候边为0)B除树根外的结点入度为1(都是单线)  C从树根到任一节点有一条有向通路。(这个是必须的)

    (8)用于解决CPU指令乱序、编译器重排、多CPU内存同步等带来的问题的机制是内存屏障

    内存屏障可以限制CPU对内存的访问,表现在编程语言上就是上锁!

    (9)存放进程的管理和控制信息的数据结构称为进程控制块。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。
    在不同的操作系统中对进程的控制和管理机制不同,PCB中的信息多少也不一样,通常PCB应包含如下一些信息
    1、进程标识符 name:
    每个进程都必须有一个唯一的标识符,可以是字符串,也可以是一个数字。UNIX系统中就是一个整型数。在进程创建时由系统赋予。
    2、进程当前状态 status:
    说明进程当前所处的状态。为了管理的方便,系统设计时会将相同的状态的进程组成一个队列,如就绪进程队列,等待进程则要根据等待的事件组成多个等待队列,如等待打印机队列、等待磁盘I/O完成队列等等。
    3、进程相应的程序和数据地址,以便把PCB与其程序和数据联系起来。
    4、进程资源清单。列出所拥有的除CPU外的资源记录,如拥有的I/O设备,打开的文件列表等。
    5、进程优先级 priority:
    进程的优先级反映进程的紧迫程序,通常由用户指定和系统设置。UNIX系统采用用户设置和系统计算相结合的方式确定进程的优先级 。
    6、CPU现场保护区 cpustatus:
    当进程因某种原因不能继续占用CPU时(等待打印机),释放CPU,这时就要将CPU的各种状态信息保护起来,为将来再次得到处理机恢复CPU的各种状态,继续运行。
    7、进程同步与通信机制 用于实现进程间互斥、同步和通信所需的信号量等。
    8、进程所在队列PCB的链接字   
    根据进程所处的现行状态,进程相应的PCB参加到不同队列中。PCB链接字指出该进程所在队列中下一个进程PCB的首地址。
    9、与进程有关的其他信息。 
    如进程记账信息,进程占用CPU的时间等。
    (10)
    线程和进程的区别联系:
    1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。
    2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。 
    两者都可以提高程序的并发度,提高程序运行效率和响应时间。 
    线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
    根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的: 
    1、速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。 
    2、资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。 
    3、同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内
    (11)当服务器多为动态请求时,keep-alive关闭比较好,能够节省一开定的内存开销。可以在服务器端设置是否支持keep-alive
    在HTTP1.0和HTTP1.1协议中都有对KeepAlive的支持。其中HTTP1.0需要在request中增加“Connection: keep-alive” header才能够支持,而HTTP1.1默认支持
    当使用Keep-Alive模式时,Keep-Alive功能使客户端到服 务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了
    建立或者重新建立连接
    (12)
    #include <iostream> 
    using namespace std; 
    int main(void
        const int a = 10
        int * p = (int *)(&a); 
        *p = 20
        cout<<"a = "<<a<<", *p = "<<*p<<endl; 
        return 0
    输出 
    a = 10, *p = 20
    a = 10, *p = 20 因为使用const 编译器会优化,对于以后见到a ,编译器立马用10替代. 而p是新定义的一个指针变量,开始p通过 int *p = (int *)(&a); 获得了栈区常量a的地址.即p指向这个地址,但是因为const 导致编译器优化,直接在符号表中 用10代替a了,所以导致 打印a还是10,而打印那个内存单元的地址就变成了 20

    0 0
    原创粉丝点击