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 class A { public : A() { printf( "A " ); } /*virtual*/ ~A() { printf( "deA " ); } }; class B { public : B() { printf( "B " ); } ~B() { printf( "deB " ); } }; class C: public A, public B { public : C() { printf( "C " ); } ~C() { printf( "deC " ); } }; int main() { A *a = new C(); delete a; return 0 ; } 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