
面试题
文章平均质量分 90
ZM_iTUDOU
爱高跟,也爱跑鞋,喝茶也喝酒。
展开
-
各种数据类型与零值比较
1 布尔变量与零值比较【规则1】不可将布尔变量直接与TRUE、FALSE或者1、0进行比较。根据布尔类型的语义,零值为“假”(记为FALSE),任何非零值都是“真”(记为TRUE)。TRUE的值究竟是什么并没有统一的标准。例如Visual C++ 将TRUE定义为1,而VisualBasic则将TRUE定义为-1。假设布尔变量名字为flag,它与零值比较的标 准if语句如下:if原创 2016-12-10 09:37:22 · 2963 阅读 · 1 评论 -
设置a的bit 3
给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。 #define BIT3 (0x1 static int a;void set_bit3(void){ a |= BIT3;}void clear_bit3(void){ a &= ~BIT3;}原创 2016-12-31 00:02:48 · 4162 阅读 · 0 评论 -
判断递增数组
用递归算法判断数组是否为一个递增数组bool fun( int a[], int n ){if( n == 1 || n == 0 )return true;if( n ==2 )return a[n-1]>= a[n-2];return fun( a,n-1)&& ( a[n-1] >= a[n-2] );}原创 2017-01-01 00:35:58 · 2561 阅读 · 0 评论 -
【The-Art-Of-Programming】旋转字符串
1.1 旋转字符串题目描述给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”。请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。分析与解法解法一:暴力移位法解法二:三步反转法原创 2017-04-05 16:23:05 · 372 阅读 · 0 评论 -
【The-Art-Of-Programming】字符串包含
字符串包含题目描述给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短。请问,如何最快地判断字符串B中所有字母是否都在字符串A里?为了简单起见,我们规定输入的字符串只包含大写英文字母,请实现函数bool StringContains(string &A, string &B)比如,如果是下面两个字符串:String 1:ABCDSt原创 2017-04-06 17:36:50 · 319 阅读 · 0 评论 -
【The-Art-Of-Programming】判断两链表是否相交
题目:编程判断俩个链表是否相交给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。为了简化问题,我们假设俩个链表均不带环。问题扩展:如果链表可能有环列?如果需要求出俩个链表相交的第一个节点列?解析:流程:1. 判断两链表是否有环2. 若链表都不成环,判断尾结点是否相等3.若链表都成环,判断一条链表上俩指针相遇的结点在原创 2017-04-20 11:17:57 · 242 阅读 · 0 评论 -
网络编程
1.在以太网中,工作站在发数据之前,要检查网络是否空闲,只有在网络不阻塞时工作站才能发送数据,是采用了( )机制正确答案: D 你的答案: B D (错误)iptcpICMP数据侦听与冲突控制CSMA/CD 2. A,B两台机器都正常工作,B机器未监听任何端口.如果A机器向B机器80端口发送SYN包,会收到何种类型的回包?正确答案: D 你的答案: A原创 2016-12-09 23:59:36 · 430 阅读 · 0 评论 -
合并两个递增的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。方法一:递归 : 要注意递归结束的条件及代码的鲁棒性方法二:非递归。需要较多的指针方法一Link MergeList(Link head1,Link head2){ if(head1 == NULL) { return head1; } else原创 2016-12-07 09:34:00 · 677 阅读 · 0 评论 -
strlen sizeof 的区别
Strlen sizeof 的区别 1. Sizeof是运算符,strlen是函数2. sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。3. strlen只能用char*做参数,且必须是以''\0''结尾的,而sizeof可用类型做参数,还可用原创 2016-12-14 23:58:25 · 438 阅读 · 0 评论 -
改错 字符串倒序
请找出下面代码中的所有错误。说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”。1234567891011121314151#include "string.h"2int main()原创 2017-01-01 19:34:29 · 1674 阅读 · 0 评论 -
继承 多态 组合
1. 关于函数模板,描述错误的是? 正确答案: A 你的答案: C (错误)A. 函数模板必须由程序员实例化为可执行的函数模板B. 函数模板的实例化由编译器实现C. 一个类定义中,只要有一个函数模板,则这个类是类模板D. 类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化解析:函数模板必须由编译器根据程序员的调用类型实例化为可执行的函数。原创 2017-06-03 09:04:51 · 720 阅读 · 0 评论 -
位运算实现加减乘除四则运算
//只用逻辑运算实现加法int add(int a, int b){ if(0 == b) { return a; } int sumTemp = a ^ b; int carry = (a & b) << 1; return add{sumTemp, carry};} //只用逻辑运算实现减法int minus(int a, int b){ b = add(~b,原创 2017-07-18 20:43:11 · 657 阅读 · 0 评论 -
字符串长度乘积最大值 位操作
// "abcw" "baz" "foo" "bar" "xtfn" "abcdef"//return 16//"abcw" "xtfn"//对于单词字符串的字符出现情况我们可以使用一个哈希表来记录,由于范围限定在‘a’~'z',//我们可以直接使用26位的数组,由于只需标记字符是否出现(状态只有0和1),//因此我们只需要用一个位来表示该字符是否存在,因此我们只需要一个32位的整型变量,原创 2017-07-27 17:11:11 · 708 阅读 · 0 评论 -
【笔试题】深拷贝与浅拷贝(一)
今天做了道笔试题,是一道改错题,错误隐藏的还蛮深,但要是想到深拷贝和浅拷贝,就容易多了。 题目: #include <vector> #include <iostream> using namespace std; class CDemo { public: CDemo() : str(NULL) {};原创 2017-09-06 16:43:28 · 639 阅读 · 0 评论 -
【笔试题】深拷贝与浅拷贝(二)
刚看到一道同类型的,一起搬上来了。。。#include <iostream> class A { int i; }; class B { A *p; public: B() { p = new A; } ~B() { delete p; } }; void sayHello(B b) { } int main() {转载 2017-09-06 17:13:55 · 614 阅读 · 0 评论 -
STL各种容器的特征
STL各种容器的特征 1.vector 内部数据结构:数组 随机访问每个元素 在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素随元素数目呈线性变化。 vector的迭代器在内存重新分配时将失效(它所指向的元素在操作前后不一样)vector迭代器的失效情况: (1)当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。 (2)当插入(push_bac转载 2017-09-07 09:56:16 · 823 阅读 · 0 评论 -
多进程和多线程的区别
多进程和多线程的区别建立在上一篇进程与线程的区别基础上l 线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。进程资源分配的最小单位,是程序的一次执行。 l 线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,所以多进程的程序要原创 2016-12-20 12:06:16 · 370 阅读 · 0 评论 -
补码 输出
请写出输出结果 4294967285,-128 unsigned short A = 10; printf("~A = %u\n", ~A); char c=128; printf("c=%d\n",c);解析:~A =0xfffffff5,int值 为-11,但输出的是uint。所以输出4294967285第二题,c=0x10,输出的是in原创 2016-12-29 23:24:34 · 939 阅读 · 0 评论 -
微生物生殖
题目: 假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。 现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。 如果X=10,Y=90 呢? 本题的要求就是写出原创 2017-01-05 23:19:32 · 331 阅读 · 0 评论 -
输出蛇形代码
1. 编写一个程序,输出类似的蛇形代码:1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9 #include #include int main(){int n;int x,y,round;//a[x][y],x是二维数组的第一个下标,y是二维数组的第二个下标,//rou原创 2016-12-09 00:10:12 · 482 阅读 · 0 评论 -
复习练习(一)
试卷二一、填空选择题1、请写出 char *p 与“零值”比较的 if 语句 if (p ==NULL)if (p !=NULL) 2、写出打印结果_______ #include #include int main() { char a[1000]; int i; for(原创 2016-11-30 00:34:33 · 334 阅读 · 0 评论 -
C语言 宏定义相关
C语言 宏定义相关注意点1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)在宏中小心地把参数用括号括起来。2)懂得预处理器将为你计算常数表达式的值,不必计算出实际的值。3) 如果,意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 1. 用预处理指令#define声明一个原创 2016-12-14 00:05:52 · 296 阅读 · 0 评论 -
字符串常量
写出下列程序的输出结果char* s="AAA";\printf("%s",s);s[0]='B'; printf("%s",s); 正确答案:AAA段错误 "AAA"是字符串常量。s是指针,指向这个字符串常量,所以声明s的时候就有问题。 cosnt char* s="AAA";然后又因为是常量,所以对是s[0]的赋值操作是不合法的。编译能够通过,但是运行期间会发生原创 2016-12-12 20:19:51 · 8684 阅读 · 0 评论 -
关键字的作用
下面几个关键字的作用,其实之前也整理过,这次再放上来是想强调一下,毕竟,就如下文所说,回答不出这几个问题的人是不会被雇佣的。Static关键字static的作用是什么?这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2) 在模块内(但在函数体外),一个被声明为静态的转载 2016-12-15 21:12:01 · 1975 阅读 · 0 评论 -
进程的死锁
进程的死锁 死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 死锁会带来的后果:1. 使进程得不到正确的结果,处于死锁的进程得不到所需的资源,不能向前推进,顾得不到结果。2. 使资源利用率降低,处于原创 2016-12-17 00:59:58 · 814 阅读 · 0 评论 -
华为经典C语言面试题(一)
1、找错 void test1(){ char string[10]; char* str1="0123456789"; strcpy(string, str1);} 这里string数组越界,因为字符串长度为10,还有一个结束符‘\0’。所以总共有11个字符长度。string数组大小为转载 2017-01-02 20:44:07 · 8183 阅读 · 0 评论 -
华为经典C语言面试题(二)
2、找错 DSN get_SRM_no(){ static int SRM_no; int I; for(I=0;I { SRM_no %= MAX_SRM; if(MY_SRM.state==IDLE) { break; } } i转载 2017-01-03 23:11:36 · 1595 阅读 · 0 评论 -
打印一个空心正方形
请以尽量高效的方法用”*”打印出一个空心正方形,num为边长#include int main(){ int x,y,num; printf("please input the num:\n"); scanf("%d",&num); for(x = 0; x < num; x++) { for(y = 0 ; y < num; y原创 2016-12-25 00:28:46 · 5848 阅读 · 1 评论 -
青蛙跳台阶——斐波纳契数列
(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。分析:1)当n = 1, 只有1中跳法;当n = 2时,有两种跳法;当n = 3 时,有3种跳法;当n = 4时,有5种跳法;当n = 5时,有8种跳法;....... 规律类似于Fibonacci数列把n级台阶时的跳法记为f(n),当n>2时,第一原创 2016-12-18 23:26:23 · 831 阅读 · 0 评论 -
进程和线程的区别
进程和线程的区别(1) 进程资源分配的最小单位,是程序的一次执行。 线程是cpu调度的最小单位,可以理解为进程中执行的一段程序片段 (2) 进程间是独立的,一个程序崩溃后,在保护模式下不会对其他进程产生影响。同一进程所产生的线程共享同一内存空间,一个线程挂掉会导致整个进程挂掉; (3) 同一进程中两段原创 2016-12-19 14:21:30 · 248 阅读 · 0 评论 -
udp如何实现可靠性传输?
udp如何实现可靠性传输? UDP它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。 传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。原创 2016-12-18 00:04:45 · 1334 阅读 · 0 评论 -
用函数判断大小端字节序
最近做的C面试题,总能碰到判断大端小端的问题,可想而知,这个知识点还蛮重要的。 所谓大端就是指高位值在内存中放低位地址,所谓小端是指低位值在内存中放低位地址。 比如0x12345678在大端机上是12345678,在小端机上是78564312,而一个主机是大端还是小端要看cpu类型以及运行在上面的操作系统。同一款cpu在不同的操作系统使用的大小端情况是不同的。当然原创 2016-12-27 22:25:13 · 1963 阅读 · 3 评论 -
调整数组顺序使奇数位于偶数前面
编程:调整数组顺序使奇数位于偶数前面void ReoderOddEven(intint *data, unsigned int length) { intint *p; intint * p1 = data; intint * p2 = data + length - 1; while(p1 2)原创 2017-01-04 22:34:28 · 273 阅读 · 0 评论 -
makefile作用
makefile在开发一个系统时,一般是将一个系统分成几个模块,这样做提高了系统的可维护性,但由于各个模块间不可避免存在关联,所以当一个模块改动后,其他模块也许会有所更新,当然对小系统来说,手工编译连接是没问题,但是如果是一个大系统,存在很多个模块,那么手工编译的方法就不适用了。为此,在Linux系统中,专门提供了一个make命令来自动维护目标文件,与手工编译和连接相比,make命令的优点原创 2016-12-28 23:06:30 · 1134 阅读 · 0 评论 -
进程详述
进程是什么 在书上看到过说,进程是计算机正在被执行的程序实例。 其实,进城本身是不存在的,当一个进程开始执行后,琮凯性执行到执行完毕退出的这段时间内,内存中的内容就是进程。为什么需要进程 因为技术发展,我们不断在追求高效,多进程技术可以让我们实现多任务并发技术(这也是嵌入式 安装操作系统的好处 其他好处还有丰富的网络 堆栈 库资源 降低耦合) 并发 :利用分时技术,在linux操作系统上可原创 2017-09-18 13:39:55 · 605 阅读 · 0 评论