"华为笔试题涉及了C++编程、数据结构、操作系统、计算机网络等多个IT领域的知识点,包括静态变量、引用与指针的区别、实时系统特性、内存管理、数据结构(平衡二叉树、堆栈)、函数虚性、排序算法、网络协议、IP地址结构、数组操作等。"
1. 静态变量: 静态变量在C++中具有不同的作用域和生命周期。在函数体内声明的静态变量,其值在函数多次调用之间保持不变,即它是一种局部持久化的存储。在模块(文件)级别声明的静态变量,仅对本模块可见,起到局部全局变量的作用。而在模块外部声明的静态函数则限制了其访问范围,只能被同一模块内的其他函数调用。
2. 引用与指针: 引用在声明时必须初始化,并且一旦初始化后不能更改引用的对象。而指针可以不初始化,也可以在运行时改变所指向的对象。另外,指针可以为空,但引用不存在指向空值的情况。
3. 实时系统: 实时系统强调任务的及时性和可靠性,即系统必须在规定的时间内完成特定的任务,并保证系统的稳定性和正确性。
4. 全局变量与局部变量: 全局变量存放在程序的静态存储区,生存期贯穿整个程序执行过程;局部变量在栈区,随着函数调用结束而被释放。
5. 平衡二叉树: 平衡二叉树是一种特殊的二叉树,其左、右子树高度差不超过1,且左右子树都是平衡二叉树,这确保了数据的查找、插入和删除操作具有较高的效率。
6. 堆栈溢出: 通常由未被及时回收的栈内存消耗过多导致,如递归过深或局部变量过大等。
7. 虚函数与构造函数: 构造函数不能声明为虚函数,因为虚函数是在对象实例化后通过指针或引用调用,而构造函数在对象创建时执行,此时对象尚未完全构建,无法通过指针或引用调用。
8. 冒泡排序: 时间复杂度为O(n^2),是最基础的排序算法之一,效率相对较低。
9. 比较浮点数与零的if语句: if(x > 0.000001 && x < -0.000001) 这种方式可以用来判断浮点数是否接近于零,但要注意浮点数的精度问题。
10. Internet协议: 使用TCP/IP协议栈,主要层次包括应用层、传输层、网络层、数据链路层和物理层。
11. IP地址转换: ARP(地址解析协议)用于将IP地址转换为物理地址。
12. IP地址结构: IP地址由网络号和主机号组成,通过子网掩码确定网络部分和主机部分。
13. 循环计数程序: 可以使用取余运算实现从1到N的循环计数,当计数到M时输出当前数值。
14. switch() 参数类型: switch语句的表达式不能是浮点型,因为浮点数比较通常不精确。
华为笔试题中的编程题要求在不使用大量辅助空间且考虑效率的情况下,将数组A中的0移动到后面,非0整数移到前面并保持有序,同时返回第一个0元素的下标。这需要利用指针操作和数组的特性来实现,注意处理边界条件和异常情况,以及代码的优化和规范性。