1.参数传递是通过栈实现的,从右向左依次压栈。
2.具有3个节点的二叉树有几种形态?答案为:5。n个结点的二叉树的形态:(2*n,n)/n+1
3.已知一棵二叉树的前序遍历为CABEFDHG,中序遍历为BAFECHDG,那么它的后续遍历是:(BFEAHGDC)
4.哪种数据结构用于执行递归调用?答:堆栈。
5.在Linux上,对于多进程,子进程继承了父进程的下列哪些?
答:
- 子进程继承父进程
- 用户号UIDs和用户组号GIDs
- 环境Environment
- 堆栈
- 共享内存
- 打开文件的描述符
- 执行时关闭(Close-on-exec)标志
- 信号(Signal)控制设定
- 进程组号
- 当前工作目录
- 根目录
- 文件方式创建屏蔽字
- 资源限制
- 控制终端
-
子进程独有
- 进程号PID
- 不同的父进程号
- 自己的文件描述符和目录流的拷贝
- 子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)
- 不继承异步输入和输出
-
父进程和子进程拥有独立的地址空间和PID参数。
- 子进程从父进程继承了用户号和用户组号,用户信息,目录信息,环境(表),打开的文件描述符,堆栈,(共享)内存等。
- 经过fork()以后,父进程和子进程拥有相同内容的代码段、数据段和用户堆栈,就像父进程把自己克隆了一遍。事实上,父进程只复制了自己的PCB块。而代码段,数据段和用户堆栈内存空间并没有复制一份,而是与子进程共享。只有当子进程在运行中出现写操作时,才会产生中断,并为子进程分配内存空间。由于父进程的PCB和子进程的一样,所以在PCB中断中所记录的父进程占有的资源,也是与子进程共享使用的。这里的“共享”一词意味着“竞争” 。
6.若磁头的当前位置在第100磁道,现在有一磁盘读写请求序列如下:23,376,205,132,19,61,190,398,29,4,18,40。若采用最短寻道时间优先算法,则平均寻道长度是多少?
答:
B类地址中,后16位为主机地址,255.255.0.0,二进制为11111111 11111111 00000000 00000000
要想切割成10个子网,至少要向主机位借4位,2^4=16>10
则子网掩码设置成20位,即二进制为 11111111 11111111 11110000 00000000,再换算成十进制之后为:255.255.240.0
参考链接:5分钟带你搞懂子网掩码
9.A.栈空的情况下出栈属于下溢出;B.栈可以顺序存储,也可以是链式存储的线性结构;C.元素为0和无元素是两个不同的概念,当有n个元素为0的栈,拥有n个元素;
10.以下代码打印的是(假设运行在64位计算机上)
struct st_t { int status; short *pdata; char errstr[32]; }; st_t st[16]; char *p=(char *)(st[2].esstr+32); printf(“%d”,(p-(char *)(st)));
11.路由汇聚:
是把一组路由汇聚为一个单个的路由广播。路由汇聚的最终结果和最明显的好处是缩小网络上的路由表的尺寸。
12.DNS就是将域名翻译成IP地址,DNS协议大多数运行在UDP协议之上,但是当请求字节过长超过512字节时用TCP协议,将其分割成多个片段传输。DNS协议默认端口号是53,
14.C++ 条件运算符 ? :
Exp1 ? Exp2 : Exp3;
其中,Exp1、Exp2 和 Exp3 是表达式。请注意冒号的使用和位置。? : 表达式的值取决于 Exp1 的计算结果。如果 Exp1 为真,则计算 Exp2 的值,且 Exp2 的计算结果则为整个 ? : 表达式的值。如果 Exp1 为假,则计算 Exp3 的值,且 Exp3 的计算结果则为整个 ? : 表达式的值。
15.
16.如果基类的析构函数是虚函数,delete基类的指针时,不仅会调用基类的析构函数,还会调用派生类的析构函数。
值类型 |
引用类型 |
|
存储方式 |
直接存储数据本身 |
存储的是数据的引用,数据存储在数据堆中 |
内存分配 |
分配在栈中的 |
分配在堆中 |
效率 |
效率高,不需要地址转换 |
效率较低,需要进行地址转换 |
内存回收 |
使用完后立即回收 |
使用完后不立即回收,而是交给GC处理回收 |
赋值操作 |
创建一个新对象 |
创建一个引用 |
类型扩展 |
不易扩展,所有值类型都是密封(seal)的,所以无法派生出新的值类型 |
具有多态的特性方便扩展 |
实例分配 |
通常是在线程栈上分配的(静态分配),但是在某些情形下可以存储在堆中 |
总是在进程堆中分配(动态分配) |
18.内存对齐的3大规则:
- 对于结构体的各个成员,第一个成员的偏移量是0,排列在后面的成员其当前偏移量必须是当前成员类型的整数倍
- 结构体内所有数据成员各自内存对齐后,结构体本身还要进行一次内存对齐,保证整个结构体占用内存大小是结构体内最大数据成员的最小整数倍
- 如程序中有#pragma pack(n)预编译指令,则所有成员对齐以n字节为准(即偏移量是n的整数倍),不再考虑当前类型以及最大结构体内类型
19.小明想自己做一个简单的网上商店,请帮他设计一个最简单的数据库系统,需要具备管理商品、管理客户及订单等功能。
答案:
设计商品表,客户表和订单表。
商品表记录商品信息:如商品id号(主键),名称,类别,类别编码,库存,入库时间,单价;
客户表记录客户信息:如客户id号(主键),用户名,密码MD5值,电话,邮箱,地址, 信用评分;
订单表记录订单信息:如订单id号(主键),客户id号(外键),商品id号(外键),商品数量,折扣,成交价格,成交时间;
|
主键 |
外键 |
索引 |
定义: |
唯一标识一条记录,不能有重复的,不允许为空 |
表的外键是另一表的主键, 外键可以有重复的, 可以是空值 |
该字段没有重复值,但可以有一个空值 |
作用: |
用来保证数据完整性 |
用来和其他表建立联系用的 |
是提高查询排序的速度 |
个数: |
主键只能有一个 |
一个表可以有多个外键 |
一个表可以有多个惟一索引 |