华为c 笔试题答案
2023华为笔试面试题库

2023华为笔试面试题库华为笔试面试真题一1. 找错void test1(){char string[10];char* str1=0123456789;strcpy(string, str1);}答:表面上并且编译都不会错误。
但假如string数组原意表示的是字符串的话,那这个赋值就没有达到意图。
最好定义为char string[11],这样最终一个元素可以存储字符串结尾符\0;void test2(){char string[10], str1[10];for(int I=0; I10;I++){str1[I] =a;}strcpy(string, str1);}答:strcpy使用错误,strcpy只有遇到字符串末尾的\0才会结束,而str1并没有结尾标志,导致strcpy函数越界访问,不妨让str1[9]=\0,这样就正常了。
void test3(char* str1){char string[10];if(strlen(str1)=10){strcpy(string, str1);}}答:这又会消失第一道改错题的错误了。
strlen(str1)算出来的值是不包含结尾符\0的,假如str1刚好为10个字符+1结尾符,string就得不到结尾符了。
可将strlen(str1)=10改为strlen(str1)10。
2. 找错#define MAX_SRM 256DSN get_SRM_no(){static int SRM_no;int I;for(I=0;I {SRM_no %= MAX_SRM;if(MY_SRM.state==IDLE){break;}}if(I=MAX_SRM)return (NULL_SRM);elsereturn SRM_no;}答:我不知道这段代码的详细功能,但明显有两个错误1,SRM_no没有赋初值2,由于static的声明,使该函数成为不行重入(即不行猜测结果)函数,由于SRM_no变量放在程序的全局存储区中,每次调用的时候还可以保持原来的赋值。
华为面试 笔试题目(附答案)

华为面试/笔试题目(附答案)陈晓明2010-05-21 15:45:59要查看更多华为笔经相关信息,请访问华为公司校园招聘club:深圳华为技术有限公司(1)什么是预编译,何时需要预编译:答案:1、总是使用不经常改动的大型代码体。
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。
在这种情况下,可以将所有包含文件预编译为一个预编译头。
(2)char * const p char const * p const char *p 上述三个有什么区别?答案:char * const p; //常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p(3)char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str 6 = "abc"; char *str7 = "abc"; char *str8 = "abc"; cout (y)?(y):(x)) //结尾没有‘;’(10)嵌入式系统中经常要用到无限循环,你怎么用c编写死循环。
答案:while(1){}或者for(;;)(11)关键字static的作用是什么?答案:定义静态变量(12)关键字const有什么含意?答案:表示常量不可以修改的变量。
(13)关键字volatile有什么含意?并举出三个不同的例子?答案:提示编译器对象的值可能在编译器未监测到的情况下改变。
华为C++笔试题

华为C++笔试题1. static 有什么用途?(请至少说明两种)1) 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内 (但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。
它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。
那就是,这个函数被限制在声明它的模块的本地范围内使用2. 引用与指针有什么区别?1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
3. 描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性。
4. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈。
5. 什么是平衡二叉树?左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。
6. 堆栈溢出一般是由什么原因导致的?没有回收垃圾资源。
7. 什么函数不能声明为虚函数?constructor 函数不能声明为虚函数。
8. 冒泡排序算法的时间复杂度是什么?时间复杂度是O(n^2) 。
9. 写出float x 与“零值”比较的if 语句。
if(x>0.000001&&x<-0.000001)10.Internet 采用哪种网络协议?该协议的主要层次结构?Tcp/Ip 协议主要层次结构为:应用层/传输层/网络层/数据链路层/物理层。
11.Internet 物理地址和IP 地址转换采用什么协议?ARP (Address Resolution Protocol) (地址解析協議)12.IP 地址的编码分为哪俩部分?IP 地址由两部分组成,网络号和主机号。
不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。
13.用户输入M,N 值,从 1 至N 开始顺序循环数数,每数到M 输出该数值,直至全部输出。
华为C语言招聘笔试题目_笔试题目doc

华为C 语言招聘笔试题目_笔试题目一、对或错(用“T”代表正确,用“F”代表错误,并解释原因。
每项4 分,共20 分)1.有一个数组定义int a={{1} ,{2,3 } };值为0。
( )2.int (*ptr)() ,ptr 是一维数组的名称。
( )3.指针可以在任何情况下进行操作。
( )4.在switch(c) 语句中,c 可以是int 、long、char、float 、unsigned int 类型。
( )5、#定义打印(x) printf( 编号,#x,是)第二,填空(共30 分)1、在windows 下,写运行结果,每空2 分,共10 分。
你好;char * p=strint n=10sizeof(str)=(sizeof(p)=(sizeof(n)=(void func(char 字符串){ }sizeof(str)=(2、void setmemory(char **p ,int num){ * p=(char *)malloc(num) ;}空隙测试(空隙){字符*字符串=空;getmemory( 字符串,100);strcpy(str ,hello);printf(str) ;}运行测试功能的结果是什么?()10 分3.设置int arr={6 ,7,8,9,10}。
int * ptr=arr(ptr)=123 ;printf(%d ,%d,*ptr,*(ptr)) ;三、程序设计试题(第一项20 分,第二项30 分)1.编写函数intstrcmp (char * source,char * dest ),而不使用库函数。
相等返回0,不相等返回-1;2.写一个函数int fun(char *p) 来判断一个字符串是否是回文。
它返回1 而不是0。
错误返回-1。
华为笔试试题及答案

【第一部分公司篇】1、华为公司的全称为()A、深圳市华为技术有限公司B、华为技术有限公司C、华为公司D、我司(答案:B,答A、C者酌情给分,答D者立即辞退,我司三令五申禁止使用该华为内部土语,屡禁不止,老员工不可教也,只好从新员工抓起,格杀勿论)2、华为公司的企业性质是()A、民营B、私营C、国营D、上市公司(答案:A,本题主要让考生了解公司的性质)3、华为公司的商标象征()A、红太阳B、菊花C、扇贝(答案:B,答A者酌情给分,答C者立即辞退,天天就想着吃)4、从下列选项中选择出公司的常务副总裁()A、任正非B、孙亚芳C、李一男D、郑宝用E、张燕燕(答案:BD,答C者立即辞退,让他到李一男的公司去报到吧)5、华为公司的年终奖一般是在每年的什么时候发()A、元旦后B、春节前C、7月下旬或8月上旬D、劳动节前E、国庆节前(答案:C,切记,因为是年中奖,而不是年终奖)6、华为公司的配给你的股票是()A、**发的B、用自己的奖金去买(答案:B)7、老板常说的土八路,是指()A、老板自己的革命年代的光辉历史B、本地化的用服兄弟C、季度考核为D的兄弟(答案:B)【第二部分部门篇】1、你所在的一级部门为()A、技术支援部B、国际技术支援部C、国际技术支援部国内分部D、用服(答案:B,答A、C者酌情给分,答D者作不合格处理,为了提高技术支援部形象,公司早就取消用服这个字眼,而且于2001年春节后悄悄地将技术支援部前加“国际”二字)2、你所在的二级部门为()A、传输产品技术支援管理部B、传输工程部C、传输用服工程中心D、光网络产品技术支援管理部(答案:A,首先得把自己的部门搞清楚,答D者,有远见,有潜力,可以酌情给分,很可能在2001年未就改成这个名字,因为市场中研已经改了,就差技术支援部了)3、传输的商标为()A、SBSB、SDHC、OptiXD、Metro(答案:C,答A者酌情给分,最起码还知道老商标)4、技术支援部与国际技术支援部的关系()A、国际技术支援部是技术支援部下面的一个部门,负责海外B、技术支援部是国际技术支援部下面的一个部门,负责国内C、技术支援部是国际技术支援部的前身D、国际技术支援部是技术支援部的前身(答案:C)【第三部分业务篇】1、SBS是()A、传输产品的老商标B、同步骨干系统C、傻不傻的拼音缩写D、帅不帅的拼音缩写(答案:AB,答CD者立即辞退)2、SDH是()A、传输产品商标B、同步数字序列C、傻得很的拼音缩写D、傻得好的拼音缩写(答案:B,答CD者立即辞退)3、由于你是新员工,没有公配手机时,当你在现场遇到紧急事故时,你会()向公司求助A、打用户机房内的电话B、借用户手机C、拔110D、拔200或300E、立即打车回办事处(答案:D,答CE者立即辞退,按照公司规定,不能随便使用用户的电话,以提高公司形象)4、在开局时,用户问你在华为干几年了,你会回答()A、我是新员工B、1年多了C、2年多了D、3年多了(答案:B,答A者按不合格处理,按照公司规定,不能说自己是新员工,几千万的设备,怎能让一个新员工用来练兵,用户知道鼻子不气歪才怪,答CD者,用户会哼之以鼻,在华为做了2、3年,还在下面撅个腚开局,鬼才相信你的话呢!)5、接上题,假如你回答说在华为干1年多了,用户会说()A、那你一定是新员工了B、那你一定是老员工了(答案:B,用户对华为很了解,都知道你如果在华为做一年,就已经是老员工了)6、接上题及上上题,用户会继续问,“那你咋连手机、便携机,一个都没有呢?”,你会回答()A、啊,我还没有转正咧,等俺转正时,误码仪、手机、便携机,一个都不能少B、啊,没有关系,正是由于我是老员工,所以开局用不着C、啊,真倒霉,在来的路上,被土匪打劫了D、啊,被我的两个徒弟拿走了,因为他们是新员工,没有工具胆小,有了工具好壮胆(答案:BCD,答A者,立即辞退,这么点事都搞不定)7、当你发现用户的机房中没有拖鞋时,你会()A、入乡随俗,直接进机房B、光脚丫C、马上出去自己花钱买几双拖鞋送给用户D、马上出去买几双拖鞋送给用户,之后开票回来贴票报销E、马上出去买几双拖鞋送给用户,之后开票找局长报销(答案:C,答A者,立即辞退,答B者,酌情给分,答D者,不合格处理,答E者,简直是在找死,立即辞退)8、技术支援工程师工作的特点()A、白天睡觉,晚上干活B、用户随叫随到C、用户就是上帝,用户怎么说,我们就怎么做D、我是上帝,我想咋干就咋干(答案:ABC,答D者,立即辞退)9、在与客户开会及纸面件交流时,你会使用()来称呼对方A、局方B、用户C、客户D、贵公司(答案:BCD,答A者,立即辞退,我司三令五申禁止使用该华为内部土语,屡禁不止,老员工不可教也,只好从新员工抓起,格杀勿论)10、工程师甲对乙说:“晚上不去泡吧吗”,乙说:“哦,真不巧,我晚上要去市局割接,下次吧”。
华为c 笔试题及答案

华为c 笔试题及答案华为C笔试题及答案一、简介华为C是华为公司面向应届大学生的笔试选拔考试,旨在评估应聘者的综合素质和潜力。
本文将介绍华为C笔试题目及答案,帮助应聘者更好地准备华为C笔试。
二、题目及答案1. C语言基础题目:请编写一个程序,输出1-100之间的所有偶数。
答案:#include <stdio.h>int main() {int i;for(i=1; i<=100; i++) {if(i%2 == 0) {printf("%d ", i);}}return 0;}2. 数据结构与算法题目:请说明哈希表的原理及其应用场景。
答案:哈希表是一种根据关键字直接访问内存地址的数据结构。
其原理是通过哈希函数将关键字转换为一个索引值,然后将数据存储在对应索引值的位置上。
哈希表的应用场景包括缓存系统、数据库索引、字典等。
3. 计算机网络题目:请解释TCP和UDP协议的区别及其适用场景。
答案:TCP和UDP都是传输层的协议,但有一些区别。
TCP是面向连接的可靠传输协议,能够保证数据的完整性和顺序,适用于需要可靠传输的场景,如文件传输。
UDP是无连接的不可靠传输协议,不保证数据的完整性和顺序,适用于实时性要求较高的场景,如音视频传输。
4. 数据库题目:请解释事务的概念,并说明ACID原则。
答案:事务是数据库操作的最小单位,是一组对数据库进行的操作。
ACID是事务的四个基本属性,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),保证事务的可靠性和稳定性。
5. 操作系统题目:请解释什么是进程和线程,并说明它们的区别。
答案:进程是操作系统进行资源分配和调度的最小单位,是程序在执行过程中的一个实例。
线程是进程中的一条执行路径,是CPU调度的最小单位。
进程之间相互独立,拥有独立的地址空间,而线程共享同一地址空间。
2023年华为最新笔试题编程题及答案

问题:输入一个字符串,用指针求出字符串的长度。
答案:#include <stdio.h>int main(){char str[20], *p;int length=0;printf(“Please input a string: ”);gets(str);p=str;while(*p++){length++;}printf(“The length of string is %d\n”, length);return 0;}问题:使用C语言实现字符串中子字符串的替换描述:编写一个字符串替换函数,如函数名为 StrReplace(char* strSrc, char* strFind,char* strReplace),strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。
举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:ABCDEFGHIJKLMNOPQgggUVWXYZ答案一:#include <stdio.h>#include <string.h>void StrReplace(char* strSrc, char* strFind, char* strReplace);#define M 100;void main(){char s[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";char s1[]="RST";char s2[]="ggg";StrReplace(s,s1,s2);printf("%s\n",s);}void StrReplace(char* strSrc, char* strFind, char* strReplace){int i=0;int j;int n=strlen(strSrc);int k=strlen(strFind);for(i=0;i<n;i++){if(*(strSrc+i)==*strFind){for(j=0;j<k;j++){if(*(strSrc+i+j)==*(strFind+j)){*(strSrc+i+j)=*(strReplace+j); }else continue;}}}}答案二:#include <stdio.h>#define MAX 100StrReplace(char *s, char *s1, char *s2) {char *p;for(; *s; s++) {for(p = s1; *p && *p != *s; p++);if(*p) *s = *(p - s1 + s2);}}int main(){char s[MAX]; //s是原字符串char s1[MAX], s2[MAX]; //s1是要替换的//s2是替换字符串puts("Please input the string for s:");scanf("%s", s);puts("Please input the string for s1:");scanf("%s", s1);puts("Please input the string for s2:");scanf("%s", s2);StrReplace(s, s1, s2);puts("The string of s after displace is:"); printf("%s\n", s);return 0;}答案三:#include <stdio.h>#include <stdlib.h>#include <string.h>#define M 100void StrReplace(char* strSrc, char* strFind, char* strReplace);int main(){char s[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";char s1[]="RST";char s2[]="gggg";StrReplace(s,s1,s2);printf("%s\n",s);return 0;}void StrReplace(char* strSrc, char* strFind, char* strReplace){while(*strSrc != '\0'){if(*strSrc == *strFind){if(strncmp(strSrc,strFind,strlen(strFind)) == 0 ){int i = strlen(strFind);int j = strlen(strReplace);printf("i = %d,j = %d\n",i,j);char *q = strSrc + i;printf("*q = %s\n",q);while((*strSrc++ = *strReplace++) != '\0');printf("strSrc - 1 = %s\n",strSrc - 1);printf("*q = %s\n",q);while((*strSrc++ = *q++) != '\0');}else{strSrc++;}}else{strSrc++;}}}问题:编写一个程序实现功能:将字符串”Computer Secience”赋给一个字符数组,然后从第一个字母开始间隔的输出该串,用指针完毕。
(整理)华为C++笔试题最全.

脚本执行失败问题1. 虚函数是可以内联的,这样就可以减少函数调用的开销,提高效率(错误)2. 一个类里可以同时存在参数和函数名都相同的虚函数与静态函数(错误)3. 父类的析构函数是非虚的,但是子类的析构函数是虚的,delete子类指针(指向该子类对象),会调用父类的析构函数(正确)//任何情况下删除子类都会调用到父类的析构函数4.对于下面的类CA,sizeof(CA) = _B_:A. 4B. 8C. 12D. 16class CA{public:CA();virtual ~CA(); //因为有虚函数,所以会有4个字节的虚表指针private:int m_iTime; //成员变量4个字节public:int GetTime();int SetTime(int iTime);};5.下面这段程序,打印结果是_A_:A. 1B. 2C. 3D. 以上都不对int g_iCount = 0;class CParent{public:CParent() {}~CParent() {g_iCount += 1;}};class CSon : public CParent{public:CSon() {}~CSon() {g_iCount += 2;}};main(){CParent* p = new CSon();delete p;std::cout << g_iCount << std::endl;}6.请问下面这段程序的输出结果是_A_:A. 2,1,B. 2,2,C. 1,1,D. 1,2,class CParent{public:CParent() {}virtual ~CParent() {}public:virtual void Print(){ std::cout << "1,"; };};class CSon : public CParent{public:CSon() {};virtual ~CSon() {};public:void Print(){ std::cout << "2,"; };};void Test1(CParent& oParent){oParent.Print();}void Test2(CParent oParent){oParent.Print();}main(){CSon * p = new CSon();Test1(*p); //这里只是一个引用Test2(*p); //这里会在栈空间重新构造Cparent类对象 delete p;}7.请问下面这段程序的输出结果是_D_:A. 2,1,B. 2,2,C. 1,1,D. 1,2,class CParent{public:CParent() {}virtual ~CParent() {}public:void Print(){ std::cout << "1," ; };};class CSon : public CParent{public:CSon() {}virtual ~CSon() {}public:void Print(){ std::cout << "2,"; };};main(){CSon oSon;CParent * pParent = &oSon;CSon * pSon = &oSon;pParent->Print();pSon->Print();}8.请问下面这段程序的输出结果是_C_:A. 2,1,B. 2,2,C. 1,2,D. 1,1,class CParent{public:CParent() {Print();}virtual ~CParent() {}public:virtual void Print(){ std::cout << "1,"; }};class CSon : public CParent{public:CSon() {Print();}virtual ~CSon() {}public:void Print(){ std::cout << "2,"; }};main(){CParent * pParent = new CSon();delete pParent;}9.请问下面这段程序的输出结果是_D_:A. 2,2,B. 2,C. 输出结果不确定D. 以上都不对class CParent{public:CParent() {Print();}virtual ~CParent() {}public:virtual void Print() = 0;};class CSon : public CParent{public:CSon() {Print();}virtual ~CSon() {}public:void Print(){ std::cout << "2,"; };};main(){CParent * pParent = new CSon();delete pParent;}10.请仔细阅读以下程序:class Base{public:virtual bool operator == (int iValue){std::cout << "I am Base class !" << std::endl;return true;}virtual ~Base(){}};class Derive: public Base{public:virtual bool operator == (int iValue){std::cout << "I am Derive class !" << std::endl;return true;}virtual ~Derive(){}};int main(){Derive derive;Base* pBase = &derive;Derive* pDerive = &derive;*pBase == 0;*pDerive == 0;return 0;}程序的输出结果是_B_:A、I am Base class !I am base class !B、I am Derive class !I am Derive class !C、I am base class !I am Derive class !D、I am Derive class !I am Base class !11.请仔细阅读以下程序:class Base{public:virtual void display(std::string strShow = "I am Base class !") { std::cout << strShow << std::endl; }virtual ~Base(){}};class Derive: public Base{public:virtual void display(std::string strShow = "I am Derive class !") { std::cout << strShow << std::endl; }virtual ~Derive(){}};int main(){Base* pBase = new Derive();Derive* pDerive = new Derive();pBase->display();pDerive->display();delete pBase;delete pDerive;return 0;}程序的输出结果是_C_:A、I am Base class !I am base class !B、I am Derive class !I am Derive class !C、I am base class !I am Derive class !D、I am Derive class !I am Base class !12.请仔细阅读以下程序:class Base{public:virtual void display() const{ std::cout << "I am Base class !" << std::endl; } virtual ~Base(){}};class Derive: public Base{public:virtual void display(){ std::cout << "I am Derive class !"<< std::endl; } virtual ~Derive(){}};int main(){Base* pBase = new Derive();Derive* pDerive = new Derive();pBase->display();pDerive->display();delete pBase;delete pDerive;return 0;}程序的输出结果是_C_:A、I am Base class !I am base class !B、I am Derive class !I am Derive class !C、I am base class !I am Derive class !D、I am Derive class !I am Base class !13.在C++中,多态性存在于_B_:A、同一个类的多个同名函数之间B、子类继承层次中C、父类的多个同名函数之间D、以上都不是14.下面黑体加粗的语句存在问题,请问下面的修改哪个是正确的?Bclass A{public:void Func();..};class B{private:bool Func() const;..};class C:public A,public B{...}; // class definition is unimportantC test;test.Func(); //look hereA.test.B::Func(); B.test.A::Func();C.B::test.Func(); D.A::test.Func();15.判断:子类可以访问父类保护成员,子类的友元类也可以通过子类对象去访问父类的保护成员。
华为C笔试题

华为C笔试题文稿归稿存档编号:[KKUY-KKIO69-OTM243-OLUI129-G00I-FDQS58-1.static有什么用途(请至少说明两种)1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。
它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。
那就是,这个函数被限制在声明它的模块的本地范围内使用2.引用与指针有什么区别1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
3.描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性。
4.全局变量和局部变量在内存中是否有区别如果有,是什么区别全局变量储存在静态数据库,局部变量在堆栈。
5.什么是平衡二叉树左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。
6.堆栈溢出一般是由什么原因导致的没有回收垃圾资源。
7.什么函数不能声明为虚函数constructor函数不能声明为虚函数。
8.冒泡排序算法的时间复杂度是什么时间复杂度是O(n^2)。
9.写出float x 与“零值”比较的if语句。
if(x>0.000001&&x<-0.000001)10.Internet采用哪种网络协议该协议的主要层次结构Tcp/Ip协议主要层次结构为:应用层/传输层/网络层/数据链路层/物理层。
11.Internet物理地址和IP地址转换采用什么协议ARP (Address Resolution Protocol)(地址解析协议)12.IP地址的编码分为哪俩部分IP地址由两部分组成,网络号和主机号。
不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。
【华为】C 面试题、笔试题及答案(经典)

(一) 初级题1. 什么是预编译,何时需要预编译:答:(1) 总是使用不经常改动的大型代码体(2) 程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。
在这种情况下,可以将所有包含文件预编译为一个预编译头<<预编译又称为预处理,是做些代码文本的替换工作处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等就是为编译做的预备工作的阶段主要处理#开始的预编译指令预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。
常见的预编译指令有:>>2. char * const pchar const * pconst char *p上述三个有什么区别?答:char * const p; //常量指针,p的值不可以修改char const * p;//指向常量的指针,指向的常量值不可以改const char *p;//和char const *p3.char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";const char *str5 = "abc";const char *str6 = "abc";char *str7 = "abc";char *str8 = "abc";cout << ( str1 == str2 ) << endl;cout << ( str3 == str4 ) << endl;cout << ( str5 == str6 ) << endl;cout << ( str7 == str8 ) << endl;结果是:0 0 1 1str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。
华为C++笔试题(最新最全)

华为C++笔试题(最新最全)脚本执⾏失败问题1. 虚函数是可以内联的,这样就可以减少函数调⽤的开销,提⾼效率(错误)2. ⼀个类⾥可以同时存在参数和函数名都相同的虚函数与静态函数(错误)3. ⽗类的析构函数是⾮虚的,但是⼦类的析构函数是虚的,delete⼦类指针(指向该⼦类对象),会调⽤⽗类的析构函数(正确)//任何情况下删除⼦类都会调⽤到⽗类的析构函数4.对于下⾯的类CA,sizeof(CA) = _B_:A. 4B. 8C. 12D. 16class CA{public:CA();virtual ~CA(); //因为有虚函数,所以会有4个字节的虚表指针private:int m_iTime; //成员变量4个字节public:int GetTime();int SetTime(int iTime);};5.下⾯这段程序,打印结果是_A_:A. 1B. 2C. 3D. 以上都不对int g_iCount = 0;class CParent{public:CParent() {}~CParent() {g_iCount += 1;}};public:CSon() {}~CSon() {g_iCount += 2;}};main(){CParent* p = new CSon();delete p;std::cout << g_iCount << std::endl;}6.请问下⾯这段程序的输出结果是_A_:A. 2,1,B. 2,2,C. 1,1,D. 1,2,class CParent{public:CParent() {}virtual ~CParent() {}public:virtual void Print(){ std::cout << "1,"; };};class CSon : public CParent{public:CSon() {};virtual ~CSon() {};public:void Print(){ std::cout << "2,"; };};void Test2(CParent oParent){oParent.Print();}main(){CSon * p = new CSon();Test1(*p); //这⾥只是⼀个引⽤Test2(*p); //这⾥会在栈空间重新构造Cparent类对象 delete p; }7.请问下⾯这段程序的输出结果是_D_:A. 2,1,B. 2,2,C. 1,1,D. 1,2,class CParent{public:CParent() {}virtual ~CParent() {}public:void Print(){ std::cout << "1," ; };};class CSon : public CParent{public:CSon() {}virtual ~CSon() {}public:void Print(){ std::cout << "2,"; };};main(){CSon oSon;CParent * pParent = &oSon;pSon->Print();}8.请问下⾯这段程序的输出结果是_C_:A. 2,1,B. 2,2,C. 1,2,D. 1,1,class CParent{public:CParent() {Print();}virtual ~CParent() {}public:virtual void Print(){ std::cout << "1,"; } }; class CSon : public CParent{public:CSon() {Print();}virtual ~CSon() {}public:void Print(){ std::cout << "2,"; }};main(){CParent * pParent = new CSon(); delete pParent;}9.请问下⾯这段程序的输出结果是_D_:A. 2,2,B. 2,C. 输出结果不确定D. 以上都不对class CParent{virtual ~CParent() {}public:virtual void Print() = 0;};class CSon : public CParent{public:CSon() {Print();}virtual ~CSon() {}public:void Print(){ std::cout << "2,"; };};main(){CParent * pParent = new CSon();delete pParent;}10.请仔细阅读以下程序:class Base{public:virtual bool operator == (int iValue){std::cout << "I am Base class !" << std::endl; return true;}virtual ~Base(){}};class Derive: public Base{public:virtual bool operator == (int iValue)virtual ~Derive(){}};int main(){Derive derive;Base* pBase = &derive;Derive* pDerive = &derive;*pBase == 0;*pDerive == 0;return 0;}程序的输出结果是_B_:A、I am Base class !I am base class !B、I am Derive class !I am Derive class !C、I am base class !I am Derive class !D、I am Derive class !I am Base class !11.请仔细阅读以下程序:class Base{public:virtual void display(std::string strShow = "I am Base class !") { std::cout << strShow << std::endl; } virtual ~Base(){}};class Derive: public Base{public:virtual void display(std::string strShow = "I am Derive class !") { std::cout << strShow << std::endl; }Base* pBase = new Derive();Derive* pDerive = new Derive();pBase->display();pDerive->display();delete pBase;delete pDerive;return 0;}程序的输出结果是_C_:A、I am Base class !I am base class !B、I am Derive class !I am Derive class !C、I am base class !I am Derive class !D、I am Derive class !I am Base class !12.请仔细阅读以下程序:class Base{public:virtual void display() const{ std::cout << "I am Base class !" << std::endl; } virtual ~Base(){} };class Derive: public Base{public:virtual void display(){ std::cout << "I am Derive class !"<< std::endl; } virtual ~Derive(){} };int main()Derive* pDerive = new Derive();pBase->display();pDerive->display();delete pBase;delete pDerive;return 0;}程序的输出结果是_C_:A、I am Base class !I am base class !B、I am Derive class !I am Derive class !C、I am base class !I am Derive class !D、I am Derive class !I am Base class !13.在C++中,多态性存在于_B_:A、同⼀个类的多个同名函数之间B、⼦类继承层次中C、⽗类的多个同名函数之间D、以上都不是14.下⾯⿊体加粗的语句存在问题,请问下⾯的修改哪个是正确的?B class A{public:void Func();..};class B{private:bool Func() const;..public A,public B{...}; // class definition is unimportantC test;test.Func(); //look hereA.test.B::Func(); B.test.A::Func();C.B::test.Func(); D.A::test.Func();15.判断:⼦类可以访问⽗类保护成员,⼦类的友元类也可以通过⼦类对象去访问⽗类的保护成员。
华为CC++笔试题目(附答案)

1.static有什么用途?(请至少说明两种)1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。
它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。
那就是,这个函数被限制在声明它的模块的本地范围内使用2.引用与指针有什么区别?1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
3.描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性。
4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈。
5.什么是平衡二叉树?左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。
6.堆栈溢出一般是由什么原因导致的?没有回收垃圾资源。
7.什么函数不能声明为虚函数?constructor函数不能声明为虚函数。
8.冒泡排序算法的时间复杂度是什么?时间复杂度是O(n^2)。
9.写出float x 与“零值”比较的if语句。
if(x>0.000001&&x<-0.000001)10.Internet采用哪种网络协议?该协议的主要层次结构?Tcp/Ip协议主要层次结构为:应用层/传输层/网络层/数据链路层/物理层。
11.Internet物理地址和IP地址转换采用什么协议?ARP (Address Resolution Protocol)(地址解析協議)12.IP地址的编码分为哪俩部分?IP地址由两部分组成,网络号和主机号。
不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。
13.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。
写出C程序。
★华为C++笔试题大全★

★华为笔试题大全★1.static有什么用途?(请至少说明两种)1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。
它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。
那就是,这个函数被限制在声明它的模块的本地范围内使用2.引用与指针有什么区别?1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
3.描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性。
4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈。
5.什么是平衡二叉树?左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。
6.堆栈溢出一般是由什么原因导致的?没有回收垃圾资源。
7.什么函数不能声明为虚函数?Constructor(构造函数)函数不能声明为虚函数。
8.冒泡排序算法的时间复杂度是什么?时间复杂度是O(n^2)。
9.写出float x 与“零值”比较的if语句。
if(x>0.000001&&x<-0.000001)10.Internet采用哪种网络协议?该协议的主要层次结构?Tcp/Ip协议主要层次结构为:应用层/传输层/网络层/数据链路层/物理层。
ARP (Address Resolution Protocol)(地址解析協議)12.IP地址的编码分为哪俩部分?IP地址由两部分组成,网络号和主机号。
不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。
13.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。
写出C程序。
循环链表,用取余操作做14.不能做switch()的参数类型是:switch的参数不能为实型。
精彩试题梳理!华为技术招聘笔试题解析(下)

精彩试题梳理!华为技术招聘笔试题解析(下)2023年了,新一轮的华为技术招聘已经在全国范围内展开,而笔试则是考核每一位应聘者技能的重要一环。
下面,我们将为大家带来精彩试题梳理,对华为技术招聘笔试题进行解析,希望对各位应聘者有所帮助。
一、计算机基础1. 哪些寄存器在函数调用时会发生改变?答:在函数调用期间,程序计数器(PC)和堆栈指针(SP)寄存器的值发生了变化。
2. 假设在 32 位系统上,sizeof(int)=4 sizeof(char)=1,请问运行以下代码段后,a和b占用的字节数分别是多少?```c++char a = 'a';int b = 1;```答:a占用1个字节,b占用4个字节。
3. 常见的压缩算法有哪些?答:常见的压缩算法有哈夫曼编码、LZ77算法、LZ78算法和LZW 算法等。
二、数据结构与算法1. 有一个长度为n的无序整型数组,如何对其进行排序?答:可以使用冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等算法对其进行排序。
2. 什么是哈希表?在解决什么问题上有很好的应用?答:哈希表是一种利用哈希函数和数组结构来实现的数据结构。
它能够在常数时间内完成元素的插入、删除和查找操作,因此也被称为散列表。
哈希表最适用于查找的应用场景,比如字典、电话簿等。
3. 请给出二叉树的深度遍历算法。
答:```c++class TreeNode {public:int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {} };void preOrder(TreeNode *root) {if (root == NULL) return;cout << root->val << " ";preOrder(root->left);preOrder(root->right);}void inOrder(TreeNode *root) {if (root == NULL) return;inOrder(root->left);cout << root->val << " ";inOrder(root->right);}void postOrder(TreeNode *root) {if (root == NULL) return;postOrder(root->left);postOrder(root->right);cout << root->val << " ";}```三、操作系统1. 什么是进程、线程?答:进程是操作系统资源分配的基本单位,是一个执行中的程序,有独立的内存空间和系统资源。
CC++笔试题系列二(华为招聘

CC++笔试题系列二(华为招聘华为笔试题;C;C++;1.说出下面这个程序的运行结果,并简要叙述其理由:char buf1[10]="hello";char buf2[10]="hello";if (buf1==buf2)printf("equal!");else printf("not equal!");答:因为buf1,buf2分配了不同的内存块,而比较的是数组名,实际上是两个分别指向数组起始元素地址的指针。
2.指出下面这段程序中存在一些什么问题:int loop,a[5];int* p=a;for (loop=0;loop<5;loop++){ p++;*p=loop;}答:数组a[5]在创建时没有初始化,在for循环里也没有起到完全初始化数组的作用,而且对一块未知内存赋值。
在最后一轮循环结束时p指向了数组a[5]的最后一个元素的下一个地址。
string 系列char * strcpy( char *strDest, const char *strSrc ){assert( (strDest != NULL) && (strSrc != NULL) );char *address = strDest;while( (*strDest++ = * strSrc++) != ‘\0’ );return address;}char* strncpy(char* strdest, const char* strsrc, int n){assert((strdest != NULL) && (strsrc != NULL));char* address = strdest;while(n-- > 0)*strdest++ = *strsrc++;return address;}int strcmp(const char* str1, const char* str2){assert((str1 != NULL) && (str2 != NULL);int ret = 0;while (!(ret = (unsigned char*)*str1 - (unsigned char*)*str2) && (*str2)) {str1++;str2++;}if (ret > 0)ret = 1;else if (ret < 0)ret = -1;return ret;}int strlen(const char* str){assert(str != NULL);int len = 0;while ('\0' != *str++)len++;return len;}类string的构造函数string::string(const char* str){if(str == NULL){m_data = new char[1];*m_data = '\0';}else{int length = strlen(str);m_data = new char[str + 1];strcpy(m_data, str);}}string 的析构函数string::~string(){delete [] m_data;}string 的拷贝构造函数string ::string(const string& other){int len = strlen(other.m_data);m_data = new char[len + 1];strcpy(m_data, other.m_data);}string 的赋值函数string& string::operator=(const string& other) {if (this == &other)return *this;delete [] m_data;int len = strlen(other.m_data);m_data = new char[len + 1];strcpy(m_data, other.m_data);return *this;}不用任何局部和全局变量实现int strlen(char *a)int strlen(char *a) {if('\0' == *a)return 0;elsereturn 1 + strlen(a + 1);}1)sizeof相关系列问题2)const相关系列问题3)大量林锐书的习题,以及各种变种这三个几乎是每次必出现,下面的这些是程序相关题,很多都是以前有讨论过的1)求出相似度的算法.2)写出二分查找的代码.int binary_search(int* arr, int key, int n){int low = 0;int high = n - 1;int mid;while (low <= high){mid = (high + low) / 2;if (arr[mid] > k)high = mid - 1;else if (arr[mid] < k)low = mid + 1;elsereturn mid;}return -1;}3)写出在母串中查找子串出现次数的代码.*4)写出快速排序或者某种排序算法代码出现次数相当频繁5)写出查找从一个集合中输出所有子集合的算法.6)实现strcpy函数char* strcpy(char* dest, const char* src){assert((dest != NULL) && (src != NULL));char* address = dest;while ('\0' != (*dest++ = *src++));return address;}出现次数相当频繁7)实现strcmp函数int mystrcmp(const char* str1, const char* str2){assert((str1 != NULL) && (str2 != NULL));int ret = 0;while (!(ret = *(unsigned char*)str1 - *(unsigned char*)str2) && *str2) {str1++;str2++;}if (ret > 0)ret = 1;else if (ret < 0)ret = -1;return ret;}出现次数相当频繁8)将一个单链表逆序struct test{int number;double score;test* next;}void reverse(test*& head){test* pe = head;test* ps = head->next;while(ps != NULL){pe->next = ps->next;ps->next = head;head = ps;ps = pe->next;}}9)循环链表的节点对换和删除。
华为笔试题(答案)

笔试题选择题1、以下程序的输出结果是:#include <stdio.h>int main(){int n =4;while (n--){printf("%d ", --n); }printf("\r\n");return0;}答案:2 02、设有以下宏定义:#define N 4#define Y(n) ((N+1)*n)则执行语句:Y(5+1)为:答案:263、enum ENUM_A{x1,y1,z1 =5,a1,b1};enum ENUM_A enumA = y1; enum ENUM_A enumB = b1;请问enumA和enumB的值是多少?答案:1,74、若有函数max(a,b),并且函数指针变量p已经指向函数,当调用该函数时正确的调用方法是:答案:(*p)(a,b)或者p(a,b)5、对栈S进行下列操作:push(1), push(5), pop(), push(2), pop(), pop(), 则此时栈顶元素是:答案:没有元素,栈空。
6、在一个32位的操作系统中,设void *p = malloc(100),请问sizeof(p)的结果是:答案:32位操作系统的寻址大小是32位,即4字节。
7、若已定义: int a[9], *p = a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式是:A)p+1 B)a+1 C) a++ D) ++p答案:C8、设有如下定义:unsigned long plArray[] = {6,7,8,9,10};unsigned long *pulPtr;则下列程序段的输出结果是什么?pulPtr = pulArray;*(pulPtr + 2) += 2;printf("%d, %d\r\n", *pulPtr, *(pulPtr + 2));A) 8, 10 B) 6, 8 C) 7, 9 D) 6, 10答案:D9、以下程序运行后,输出结果是什么?void main(){char *szStr = "abcde";szStr += 2;printf("%1u\r\n", szStr);return;}A) cde B) 字符c的ASCII码值C) 字符c的地址D) 出错答案:C10、给出以下定义:char X[] = "hello";char Y[] = {'h', 'e', 'l', 'l', 'o'};则正确的叙述为:A)数组X和数组Y等价B) 数组X和数组Y的长度相同C) 数组X的长度大于数组Y的长度D) 数组X的长度小于数组Y的长度答案:C11、在32位X86下,有下列程序#include <stdio.h>void main(){union{int k;char i[2];} *s, a;s = &a;s->i[0] = 0x39;s->i[1] = 0x38;printf("%x\r\n", a.k);}输出结果是:A) 3839 B) 3938 C) 380039 D) 不可预知答案:A12、有如下函数定义:unsigned long MyFunc(unsigned long ulKey){return (((ulKey & 0x000000ff UL) << 24) |((ulKey & 0x0000ff00UL) << 8) |((ulKey & 0x00ff0000UL) >> 8) |((ulKey & 0xff000000UL) >> 24));}则MyFunc(0x12345678)的返回值是:A) 0x12345678 B) 0x87654321 C) 0x78563412 D) 0x12563478答案:C13、((a>b)?a:b)代表什么含义:A) 代表a,b之中较小的那个值B) 代表a,b之中较大的那个值C) 代表a是否比b大D) 语法错误答案:B14、某系统总线的一个总线周期包含3个时钟周期,每个总线周期可以传送32位数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华为c 笔试题2017答案以下就是小编整理的华为c 笔试题2017答案,一起来看看吧!1.static有什么用途?(请至少说明两种)1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。
它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。
那就是,这个函数被限制在声明它的模块的本地范围内使用2.引用与指针有什么区别?1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
3.描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性。
4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈。
5.什么是平衡二叉树?左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。
6.堆栈溢出一般是由什么原因导致的?没有回收垃圾资源。
7.什么函数不能声明为虚函数?constructor函数不能声明为虚函数。
8.冒泡排序算法的时间复杂度是什么?时间复杂度是O(n)。
9.写出float x 与“零值”比较的if语句。
if(x>0.000001&x<-0.000001)10.Internet采用哪种网络协议?该协议的主要层次结构?Tcp/Ip协议主要层次结构为:应用层/传输层/网络层/数据链路层/物理层。
11.Internet物理地址和IP地址转换采用什么协议?ARP (Address Resolution Protocol)(地址解析协议)12.IP地址的编码分为哪俩部分?IP地址由两部分组成,网络号和主机号。
不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。
13.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。
写出C程序。
循环链表,用取余操作做14.不能做switch()的参数类型是:switch的参数不能为实型。
1.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)int a = 4;(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);a = ?答:C错误,左侧不是一个有效变量,不能赋值,可改为(++a) += a;改后答案依次为9,10,10,112.某32位系统下, C++程序,请计算sizeof 的值(5分).char str[] = “/”char *p = str ;int n = 10;请计算sizeof (str ) = ?(1)sizeof ( p ) = ?(2)sizeof ( n ) = ?(3)void Foo ( char str[100]){请计算sizeof( str ) = ?(4)}void *p = malloc( 100 );请计算sizeof ( p ) = ?(5)答:(1)17 (2)4 (3) 4 (4)4 (5)43. 回答下面的问题. (4分)(1).头文件中的 ifndef/define/endif 干什么用?预处理答:防止头文件被重复引用(2). #i nclude 和#i nclude “filename.h” 有什么区别?答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。
(3).在C++ 程序中调用被 C 编译器编译后的函数,为什么要加extern “C”声明?答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。
由于编译后的名字不同,C++程序不能直接调用C 函数。
C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。
(4). switch()中不允许的数据类型是?答:实型4. 回答下面的问题(6分)(1).Void GetMemory(char **p, int num){ *p = (char *)malloc(num);}void Test(void){char *str = NULL;GetMemory(str, 100);strcpy(str, "hello");printf(str);}请问运行Test 函数会有什么样的结果? 答:输出“hello”(2). void Test(void){char *str = (char *) malloc(100); strcpy(str, “hello”);free(str);if(str != NULL){strcpy(str, “world”);printf(str);}}请问运行Test 函数会有什么样的结果? 答:输出“world”(3). char *GetMemory(void){char p[] = "hello world";return p;}void Test(void){char *str = NULL;str = GetMemory();printf(str);}请问运行Test 函数会有什么样的结果?答:无效的指针,输出不确定[hide]5. 编写strcat函数(6分)已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。
(1)不调用C++/C 的字符串库函数,请编写函数 strcat答:VC源码:char * __cdecl strcat (char * dst, const char * src){char * cp = dst;while( *cp )cp++; /* find end of dst */while( *cp++ = *src++ ) ; /* Copy src to end of dst */return( dst ); /* return dst */}(2)strcat能把strSrc 的内容连接到strDest,为什么还要char * 类型的返回值?答:方便赋值给其他变量6.MFC中CString是类型安全类么?答:不是,其它数据类型转换到CString可以使用CString 的成员函数Format来转换7.C++中为什么用模板类。
答:(1)可用来创建动态增长和减小的数据结构(2)它是类型无关的,因此具有很高的可复用性。
(3)它在编译时而不是运行时检查数据类型,保证了类型安全(4)它是平台无关的,可移植性(5)可用于基本数据类型8.CSingleLock是干什么的。
答:同步多个线程对一个数据类的同时访问9.NEWTEXTMETRIC 是什么。
答:物理字体结构,用来设置字体的高宽大小10.程序什么时候应该使用线程,什么时候单线程效率高。
答:1.耗时的操作使用线程,提高应用程序响应2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。
3.多CPU系统中,使用线程提高CPU利用率4.改善程序结构。
一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
其他情况都使用单线程。
11.Windows是内核级线程么。
答:见下一题12.Linux有内核级线程么。
答:线程通常被定义为一个进程中代码的不同执行路线。
从实现方式上划分,线程有两种类型:“用户级线程”和“内核级线程”。
用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。
这种线程甚至在象 DOS 这样的操作系统中也可实现,但线程的调度需要用户程序完成,这有些类似Windows 3.x 的协作式多任务。
另外一种则需要内核的参与,由内核完成线程的调度。
其依赖于操作系统核心,由内核的内部需求进行创建和撤销,这两种模型各有其好处和缺点。
用户线程不需要额外的内核开支,并且用户态线程的实现方式可以被定制或修改以适应特殊应用的要求,但是当一个线程因 I/O 而处于等待状态时,整个进程就会被调度程序切换为等待状态,其他线程得不到运行的机会;而内核线程则没有各个限制,有利于发挥多处理器的并发优势,但却占用了更多的系统开支。
Windows NT和OS/2支持内核线程。
Linux 支持内核级的多线程13.C++中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中?答:栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。
由系统管理堆: 程序运行时动态申请,new 和 malloc申请的内存就在堆上14.使用线程是如何防止出现大的波峰。
答:意思是如何防止同时产生大量的线程,方法是使用线程池,线程池具有可以同时提高调度效率和限制资源使用的好处,线程池中的线程达到最大数时,其他线程就会排队等候。
15函数模板与类模板有什么区别?答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。
16一般数据库若出现日志满了,会出现什么情况,是否还能使用?答:只能执行查询等读操作,不能执行更改,备份等写操作,原因是任何写操作都要记录日志。
也就是说基本上处于不能使用的状态。
17 SQL Server是否支持行级锁,有什么好处?答:支持,设立封锁机制主要是为了对并发操作进行控制,对干扰进行封锁,保证数据的一致性和准确性,行级封锁确保在用户取得被更新的行到该行进行更新这段时间内不被其它用户所修改。
因而行级锁即可保证数据的一致性又能提高数据操作的迸发性。
18如果数据库满了会出现什么情况,是否还能使用?答:见1619 关于内存对齐的问题以及sizof()的输出答:编译器自动对齐的原因:为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。
原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。
20 int i=10, j=10, k=3; k*=i+j; k最后的值是?答:60,此题考察优先级,实际写成: k*=(i+j);,赋值运算符优先级最低21.对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现?答:将操作多个表的操作放入到事务中进行处理22.TCP/IP 建立连接的过程?(3-way shake)答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。