![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试/笔试
文章平均质量分 57
爱橙子的OK绷
时刻准备着。。。
展开
-
面试---传递动态内存
这个程序测试后会有什么结果?#include <iostream.h>#include<cstring>#include<stdlib.h>using namespace std;void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);}int main(){ char *str =转载 2015-09-25 15:53:16 · 407 阅读 · 0 评论 -
面试---两个栈实现一个队列
实现思路:插入操作在stack1中进行,删除操作在stack2中进行(1)入队列:直接压入stack1即可(2)出队列:如果stack2不为空,把stack2中的栈顶元素直接弹出;否则,把stack1的所有元素全部弹出压入stack2中,再弹出stack2的栈顶元素。实现代码:#include<iostream>#include<stack>using namespace std;templa原创 2015-10-26 22:55:22 · 364 阅读 · 0 评论 -
面试---内联函数和宏定义的区别
用内联函数取代宏:1.内联函数在运行时可调试,而宏定义不可以;2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 3.内联函数可以访问类的成员变量,宏定义则不能; 4.在类中声明同时定义的成员函数,自动转化为内联函数。内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接被镶嵌到目标代码中。内联函数要做参数类型检查转载 2015-09-24 15:58:19 · 9019 阅读 · 1 评论 -
01随机生成函数
问题描述:有一个01随机生成函数,rand(2),以p的概率生成1,1-p的概率生成0。请用这个生成函数设计一个等概率的01随机生成函数。问题求解:随机2次,可能的结果:00, 01, 10, 11。概率分别为:(1-p)*(1-p), (1-p)*p, p*(1-p), p*p。可以发现01和10的生成概率相等。故让01代表0,10代表1,如果随机出了00或者11,就再随机2次。拓展:该类题的基本原创 2016-03-03 22:30:57 · 1207 阅读 · 0 评论 -
c++接口定义、实现、例题
所谓接口继承,就是派生类只继承函数的接口,也就是声明;而实现继承,就是派生类同时继承函数的接口和实现。我们都很清楚C++中有几个基本的概念,虚函数、纯虚函数、非虚函数。1、虚函数:C++实现运行中的多态性是通过虚函数实现的,而虚函数必须存在于继承环境下。因此,虚函数是指一个类中你希望进行重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的成员函数。转载 2016-02-18 23:18:20 · 855 阅读 · 0 评论 -
C++构造函数以及析构函数的若干面试问题
Q1:构造函数能否重载,析构函数能否重载,为什么? A1:函数重载就是同一函数名的不同实现,并且能在编译时能与一具体形式匹配,这样参数列表必须不一样。由于重载函数与普通函数的差别是没有返回值,而返回值不能确定函数重载,所以构造函数可以重载; 析构函数的特点是参数列表为空,并且无返回值,从而不能重载。Q2:析构函数为什么一般情况下要声明为虚函数? A2:虚函数是实现多态的基础,当我们通过基类的指针原创 2015-10-04 21:13:39 · 1660 阅读 · 3 评论 -
面试---sizeof
#include <iostream>#include<string.h>#include<stdlib.h>using namespace std;/*结构体的内存空间:a. 当结构体内元素的长度都小于处理器的位数时:以结构体内最长的数据元素为对齐单位,即结构体的长度一定是最长数据元素的整数倍。b. 当结构体内存在长度大于处理器位数的元素时,以处理器的位数为对齐单位,但是结构体内类型相原创 2015-09-24 15:05:26 · 1012 阅读 · 0 评论 -
《程序员面试笔试宝典》学习笔记(一)
1、extern的作用区分extern在C语言中和C++语言中的作用: (1)C语言中extern声明的函数和变量可以被该文件外部模块引用。 (2)C++语言中除了该作用还可以声明extern “C”声明一段代码编译连接的方法为C语言的方法。(a)extern是C/C++语言中声明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量在本模块或其他模块中使用。 (b)转载 2016-05-19 10:24:54 · 1230 阅读 · 1 评论 -
《程序员面试笔试宝典》学习笔记(二)程序设计基础
1、 static (静态)变量有什么作用1、静态成员特点1)对于非静态成员,每个类对象都有自己的复制品。被static修饰的成员变量和成员方法独立于该类的任何对象,只有一份复制品。也就是说,它不依赖类特定的实例,被类的所有实例共享。2)静态数据成员存储在全局数据区,在定义时要分配空间,故不能在类声明中定义。由于静态数据成员属于本类的所有对象共享,所以,它不属于特定的类对象,在没有产生原创 2016-05-19 17:27:10 · 3158 阅读 · 0 评论 -
《程序员面试笔试宝典》学习笔记(三)程序设计基础
二、内存分配1、内存分配的形式有哪些?一个C/C++编译的程序所占用的系统内存一般分为以下几个部分:1)由符号起始的区块(BBS, Block Started by Symbol)段:存放程序中未初始化的全局数据和静态数据的一块内存区域。BSS段属于静态内存分配,程序结束后静态变量资源由系统自动释放。2)数据段:存放程序中已初始化的全局变量和静态数据。数据段也属于静态内存分配。3)代码段:也叫文本段原创 2016-05-19 23:45:19 · 3703 阅读 · 0 评论 -
《程序员面试笔试宝典》学习笔记(四)程序设计基础
六、结构体与类1、C语言中struct 和union 的区别是什么struct (结构体)与union (联合体)是C语言中两种不同的复合型数据结构。区别: 1)联合体中所有成员共用一块地址空间,联合体的长度为其最长的成员的长度;而结构体中所有成员占用空间是累加的(需要考虑字节对齐)2)对于联合体的不同成员赋值,将会对它的其它成员重写,原来的值不复存在;而对结构体不同成员赋值原创 2016-05-20 16:08:58 · 666 阅读 · 0 评论 -
《程序员面试笔试宝典》学习笔记(五)程序设计基础
十、变量1、全局变量和静态变量有什么异同全局变量的作用域是整个程序,它只需要在一个源文件中定义,就可以作用于所有的源文件,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。若某一个局部重新定义了这个变量,则全局变量作用域是除了这个局部外的整个程序,它的生命期与程序生命期一样长。静态局部变量具有局部的作用域,只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在。它和原创 2016-05-20 21:52:11 · 3935 阅读 · 0 评论 -
面试---const与#define的区别
C++ 语言可以用const来定义常量,也可以用 #define来定义常量。但是前者比后者有更多的优点:(1)const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。(2)有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。(3)在C++ 程序中只使用con转载 2015-09-23 21:50:14 · 864 阅读 · 0 评论 -
面试---(x&y) + ( (x^y)>>1 )求平均数
对于位运算求两个数的平均值问题,(整形数据)int average(int x,int y){return ( (x&y) + ( (x^y)>>1 ) );}给出两个整数,求出结果。 刚开始看到这道题的做法就是x和y转换为二进制,然后计算出结果。在没有办法的情况下这样做也可以得出结果。跟你想象的一点不差,这里确实有捷径。题目中的&和^都是位运算,所以我们有必要研究数据的对位情况。任何数据转载 2015-09-23 16:30:26 · 537 阅读 · 0 评论 -
面试---指针和引用的区别
一、指针和引用的定义和性质区别:(1) 指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元,即指针是一个实体;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a;int a=1;int &b=a;上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。而下面2句定义了一个整形变量转载 2015-09-25 11:20:36 · 4631 阅读 · 6 评论 -
面试---i++在两个线程分别执行100次,最大值和最小值分别多少
i++只需要执行一条指令,并不能保证多个线程i++,操作同一个i,可以得到正确的结果。因为还有寄存器的因素,多个cpu对应多个寄存器。每次要先把i从内存复制到寄存器,然后++,然后再把i复制到内存中,这需要至少3步。从这个意义上讲,说i++是原子的并不对。如此,假设两个线程的执行步骤如下:1、 线程A执行第一次i++,取出内存中的i,值为0,存放到寄存器后执行加1,此时CPU1的寄存器中值为1,内存原创 2015-09-24 17:51:51 · 8639 阅读 · 2 评论 -
面试---指针与地址
以下程序中a[q-p] 运行结果?#include <iostream>using namespace std;int main(){ int a[3]={0,1,2}; int *p, *q; p = a; q = &a[2]; cout<<p<<endl; cout<<q<<endl; cout<<q-p<<endl;// q-p的实原创 2015-09-27 15:24:15 · 314 阅读 · 0 评论 -
面试---内存偏移
下面程序中pb->func();的输出结果?#include <iostream>#include<stdio.h>using namespace std;class M{public: M() {a = 1; b = 2;}; ~M() {}; void func() { cout<<a<<" "<<b<<endl; }//pri转载 2015-09-27 17:17:41 · 2850 阅读 · 0 评论 -
面试---x&(x-1);
1、求下面函数的返回值(微软)int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; } 假定x = 9999 10011100001111 答案: 8思路: 将x转化为2进制,看含有的1的转载 2015-09-21 17:33:26 · 646 阅读 · 0 评论 -
面试---阿拉伯数字金额转汉字
要求将阿拉伯数字转为汉字显示出来(包含单位)几个小的注意点:1、中文字符占两个字节,所以如果用C语言实现,需要用char数组的形式保存单个汉字。2、如果数字中出现连续的零,需要把它替换为单一的零。3、在亿、万、元的前面一个汉字不可以为零(人民币读取方式决定)。4、double数值可分为整数部分和小数部分。小数部分较简单,整数部分需要根据这个数字所在的位数匹配上对应的单位。基本思路如下:分析问题:a转载 2015-09-22 11:29:38 · 596 阅读 · 0 评论 -
面试---不增加变量,交换两个数值变量的值
一、加减法要想不增加变量,交换两个变量的值,可以做加减乘除运算。用对应的加减法或者乘除法都可以做到。举例:a=5;b=8。加减: a=a+b=5+8=13;b=a-b=13-8=5;a=a-b=13-5=8; a=a-b=5-8=-3;b=a+b=-3+8=5;a=b-a=5-(-3)=8; 同理,乘除。#include <iostream>using namespac原创 2015-09-22 11:04:31 · 894 阅读 · 0 评论 -
面试---两个队列实现一个栈
解法思路:(1)设置两个队列q1和q2。(2)栈的push操作:每次往非空队列里插入元素。起初都为空的时候则往q1中插入。(3)栈的pop操作:把非空队列里除最后一个元素外先转移到另一队列(为空),然后把剩下的最后一个元素弹出。这样另一个队列便作为下次插入的对象。(4)以此类推。注:此过程中,新push进来的元素总是插入到非空队列中,空队列则用来保存pop操作之后的那些元素,那么此时空队列不原创 2015-10-27 13:05:04 · 423 阅读 · 0 评论 -
面试---16位eax寄存器
#include <iostream>using namespace std;void main(){ unsigned char a = 0xA5; unsigned char b = ~a >> 4+1; printf("b = %d \n",b);}//结果为250//这里的局部变量a放在16位的寄存器中!!!!注意:a虽然是无符号char型,只占一个字节,但原创 2015-09-23 15:53:49 · 963 阅读 · 0 评论 -
面试---在C++ 中调用被 C 编译器编译后的函数,加 extern “C”
C++语言支持函数重载,C 语言不支持函数重载。函数被C++编译后在库中的名字 与C 语言的不同。假设某个函数的原型为: void foo(int x, int y); 该函数被C 编译器编译后在库中的名字为_foo , 而C++ 编译器则会产生像 _foo_int_int 之类的名字。C++提供了C 连接交换指定符号extern“C”来解决名字匹配问题。原创 2015-09-23 17:08:21 · 397 阅读 · 0 评论 -
《程序员面试笔试宝典》学习笔记(六)操作系统
一、进程管理1、进程与线程有什么区别1.定义: 1)进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是系统进行资源分配和调度的一个独立单位。 例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等,然后,该进程被放入到进程的就绪队列,进程调度程序选中它,为它分配CPU及其它相关资源,该进程就被运行起来。2)线程是进程的一个实体原创 2016-05-22 10:12:11 · 3503 阅读 · 0 评论