首页 > 中体骏彩C++面试题

中体骏彩C++面试题

下面是我凭记忆想到的几个题目,有需要的同学就拿去吧,我也算做了点善事.



中体骏彩C++笔试题

2013-11-18





1.指针的含义是:B

A.名字 B.地址 C.名称 D.符号





2.给出下面的程序输出:

#include

#include

#include

#include

using namespace std;

 

int main(int argc,char** argv){

    char str[] = "陶";

    char str1[] = "ztjcy中体骏彩";

    wchar_t str2[] = L"ztjcy中体骏彩";

    cout << strlen(str) << "," << sizeof(str) <
    cout << strlen(str1) << "," << sizeof(str1) <
    wcout << wcslen(str2)<< "," << sizeof(str2) <
 

    return 0;

}      

注意汉字占3个字节,是utf8编码时,宽字符大小是2字节,  









3.重载(overload)和重写(overwrite)的区别?

重载overload:是函数名相同,参数列表不同 重载只是在类的内部存在。但是不能靠返回类型来判断。

重写override:也叫做覆盖。子类重新定义父类中有相同名称和参数的虚函数。函数特征相同。但是具体实现不同,主要是在继承关系中出现的 。









4.指出下面程序的错误?

class A{

public:

A(){ p = this; }

        ~A(){ if(p){

delete p;

p = null;

}

}

private:

A* p;

}









5.线程A在无限制地循环运行,线程B采用什么方式能让线程A安全退出?

有很多种退出线程的方法,这些方法的被称做线程之间的消息传递、同步、共享等。





终止线程,可以向线程发送消息/信号,或者一个互斥量,或者改变内存中的变量等,来通知线程,当线程收到这些消息/信号后,先做一些处理,比如释放掉线程内的资源,保存线程的运行结果等,然后自己退出线程,并返回一个UINT值。









6.TCP和UDP的区别?

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。

UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快









7.PeekMessage()和GetMessage()的区别?

相同点:

      PeekMessage函数与GetMessage函数都用于查看应用程序消息队列,有消息时将队列中的消息派发出去。

不同点:

      无论应用程序消息队列是否有消息,PeekMessage函数都立即返回,程序得以继续执行后面的语句(无消息则执行其它指令,有消息时一般要将消息派发出去,再执行其它指令)。GetMessage函数只有在消息队列中有消息时返回,队列中无消息就会一直等,直至下一个消息出现时才返回。在等的这段时间,应用程序不能执行任何指令。

(从他们的不同点上来看,PeekMessage函数有点像“乞丐行乞”,有你就施舍点,没有也不抢。GetMessage函数有点像“强盗打劫”,有你得给,没有我就等你什么时候有了再给,这段时间我什么都不干,我就等你。)









8.输入一个整数,将它输出为以逗号分隔的字符串,比如1234567890,输出为"1,234,567,890"?

#include

#include

using namespace std;

int main()

{

        //此程序用来格式化数字为“逗号分隔千位”的数值表示法,如:23,343,434,436

        string str_number;

        int str_length;

        int swap_number;

        cout<<"please enter an integer >= 1000:"<
        cin>>str_number;

        str_length = str_number.length();

        swap_number = str_length % 3;

        if(swap_number != 0)

        {

                cout<
                for (int i=swap_number;i<=str_length-3;i=i+3)

                {

                        cout<<","<
                }

        }

        else

        {

                for (int i=0;i<=str_length-3;i=i+3)

                {

                        cout<
                        if(i != str_length-3)

                        {

                                cout<<",";

                        }

                }

        }

        cout<
        return 0;

}









9.给定一个大小为100的整数数组,要求随机地插入1......100中的数,要求不能插入重复的数,给出最高效的解法?

这题主要是借助stl中的set数据结构和rand()来实现高效的解法.set数据结构的一个特点是,键值合一,自动排序.

这里注意rand()的头文件是stdlib.h文件.下面是实现的参考代码









#include

#include

#include

using namespace std;





void create_rand(int len){

    if(len <= 0){

        cout << "please input a invalid value: " << endl;

        return;

    }





    set random_set;

    do{

        int val = rand()%len;

        if(val == 0)

            val = len;

        if(!random_set.count(val))

            random_set.insert(val);

    }while(random_set.size()




    cout << "random array between 1 and" << len << ":  "  << endl;

    set::iterator set_it = random_set.begin();

    while(set_it != random_set.end()){

        cout << *set_it << endl;

        ++set_it;

    }

}





int main(int argc, char** argv){

    create_rand(100);





    return 0;

}





这个是php的实现版本:


    function create_rand(){

        $arr = array();

        do{

            $rand = rand(1,100);

            if(!in_array($rand))

               $arr[] = $rand; 

        }while(count($arr)<100);





        return $arr;

    }





    echo "create random integers between 1 and 100: ";

    var_dump(create_rand());

?>













更多相关:

  • 首先对微擎的工作原理做简单描述, 微擎使用规则和模块的机制来处理公众平台的请求数据并返回响应的结果.执行流程描述为: 粉丝用户与公众号码进行对话或交互, 而后公众平台将粉丝用户的请求消息(当前包括: 文本, 图片, 位置, 链接, 事件. 请参阅消息类型)传递给微擎系统, 微擎系统按照消息类型和对应的公众号所设定的规则列表匹配到合适的...

  • 消息队列的使用场景以下介绍消息队列在实际应用常用的使用场景。异步处理、应用解耦、流量削锋和消息通讯四个场景。1】异步处理:场景说明:用户注册后,需要发注册邮件和注册短信。引入消息队列后架构如下:用户的响应时间=注册信息写入数据库的时间,例如50毫秒。发注册邮箱、发注册短信写入消息队列后,直接返回客户端,因写入消息队列的速度很快,基...

  • 双端通信描述 利用消息队列针对发送接受消息的类型唯一性 进行多个客户端之间消息传递,而不需要server端进行消息转发。 同时消息队列的读阻塞和写阻塞特性(消息队列中已经写入数据,如果再不读出来,则无法再次写入)让消息队列的实现过程只能如下: 客户端1的父进程用来处理类型1的消息写,子进程处理类型2的消息读客户端2的父进程处理类型...

  • 文章目录基本介绍编程接口代码实例消息队列的发送和接收消息队列中的消息对象的属性控制 基本介绍 支持不同进程之间以消息(messages)的形式进行数据交换,消息能够拥有自己的标识,且内核使用链表方式进行消息管理。进程之间的通信角色为:发送者和接受者 发送者: a. 获取消息队列的ID(key或者msgid) b. 将数据放入...

  • 工作中多次遇到Python版本的签名算法,需要用Go版本再实现一遍,这就需要牵扯到Python 2.7中的urllib中的quote,quote_plus和Go中net/url包中的url.QueryEscape的关系。 下面直接给出它们的关系: urllib.quote_plus(str)等同于url.QueryEscape(s...

  • C语言中操作字符串用C运行时函数:strtok, strcmp, strcpy等等,直接操作内存。在c++引入的字符串操作类std:string ,string类中必有一个私有成员,其是一个char*,用户记录从堆上分配内存的地址,其在构造时分配内存,在析构时释放内存。因为是从堆上分配内存,所以string类在维护这块内存上是格外小心...

  • 思路 大体思路:数据结构选用栈,读到左括号时入栈,读到右括号时判断是否匹配,匹配则左括号出栈,非括号字符则继续往下读 代码 #include #include #include using namespace std;bool is_match_parentheses(co...

  • 方法1: Controller

  • str = Regex.Replace(str, @"]*?>.*?", "", RegexOptions.IgnoreCase); //str为需要校验的字符 str = Regex.Replace(str, @"[~`@#$%^&*()_+{}|<>/\[]]", "", Re...

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...