zoukankan      html  css  js  c++  java
  • 【腾讯C++面试题】如何才能获得腾讯的offer?掌握这20道终身受益!


     

    1、.C++里面如何声明constvoidf(void)函数为C程序中的库函数?

    正确答案: 

    在该函数前添加extern “C”声明。由于编译后的名字不同,C++程序不能直接调用C 函数。

    2、c++中类和c语言中struct的区别(至少两点)

    正确答案: 

    (1)c++中的类默认的成员是私有的,struct默认的是共有的。 

    (2)c++中的类可以定义成员函数,struct只能定义成员变量。 

    (3)C++中的类有继承、多态的特性,struct没有。

    3、IP组播有那些好处?

    正确答案: 

    Internet上产生的许多新的应用,特别是高带宽的多媒体应用,带来了带宽的急剧消耗和网络拥挤问题。组播是一种允许一个或多个发送者(组播源)发送单一的数据包到多个接收者(一次的,同时的)的网络技术。组播可以大大的节省网络带宽,因为无论有多少个目标地址,在整个网络的任何一条链路上只传送单一的数据包。所以说组播技术的核心就是针对如何节约网络资源的前提下保证服务质量。

    4、变量的声明和定义有什么区别?

    正确答案: 

    声明变量不分配空间,定义变量要分配空间。声明主要是告诉编译器,后面的引用都按声明的格式。定义其实包含了声明的意思,同时要分配内存空间。

    5、程序什么时候应该使用线程,什么时候单线程效率高。

    正确答案: 

    1 耗时的操作使用线程,提高应用程序响应

    2 并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。

    3 多CPU系统中,使用线程提高CPU利用率

    4 改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。

    其他情况都使用单线程。

    6、介绍一下模板和容器。如何实现?(也许会让你当场举例实现)

    正确答案: 

    模板可以说比较古老了,但是当前的泛型编程实质上就是模板编程。 它体现了一种通用和泛化的思想。 STL有7种主要容器:vector,list,deque,map,multimap,set,multiset.

    7、以下为WindowsNT下的32位C++程序,请计算sizeof的值

    charstr[]=“Hello”;

    char*p=str;

    intn=10;

    //请计算

    sizeof(str)=?

    sizeof(p)=?

    sizeof(n)=?

    voidFunc(charstr[100])

    {

    //请计算

    sizeof(str)=?

    }

    void*p=malloc(100);

    //请计算

    sizeof(p)=?

    正确答案: 

    sizeof (str ) = 6 

    sizeof ( p ) = 4 

    sizeof ( n ) =4

    void Func ( char str[100])

    {

    sizeof( str ) = 4 

    }

    void *p = malloc( 100 );

    sizeof ( p ) =4

    8、C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?inta=5,b=7,c;c=a+++b;

    正确答案: 

    这个问题将做为这个测验的一个愉快的结尾。不管你相不相信,上面的例子是完全合乎语法的。问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成: c = a++ + b; 因此, 这段代码持行后a = 6, b = 7, c = 12。 如果你知道答案,或猜出正确答案,做得好。如果你不知道答案,我也不把这个当作问题。我发现这个问题的最大好处是:这是一个关于代码编写风格,代码的可读性,代码的可修改性的好的话题

    9、#include与#include“file.h”的区别?

    正确答案: 

    前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。

    10、如何在C中初始化一个字符数组。

    正确答案: 

    这个问题看似很简单,但是我们要将最简单的问题用最严谨的态度来对待。关键的地方:初始化、字符型、数组。最简单的方法是char array[];。这个问题看似解决了,但是在初始化上好像还欠缺点什么,个人认为:char array[5]={’1′,’2′,’3′,’4′,’5′};或者char array[5]={“12345″};或者char array[2][10]={“China”,”Beijing”};也许更符合“初始化”的意思。

    11、在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”?

    正确答案: 

    extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,其声明的函数和变量可以在本模块或其它模块中使用。 通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。

    12、内存的分配方式的分配方式有几种?

    正确答案: 

    1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。

    2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

    3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

    13、在C++程序中调用被C编译器编译后的函数,为什么要加extern"C"?

    正确答案: 

    C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x, int y);该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。C++提供了C连接交换指定符号extern"C"来解决名字匹配问题。

    14、如何让局部变量具有全局生命期。

    正确答案: 

    具体的生命期的概念我觉得我还要好好深入的学习一下,但是这个题目还算比较简单,即用static修饰就可以了,但是只是生命期延长,范围并没有扩大,除非把这个变量定义在函数体外的静态区,不过那样就变成全局变量了,仿佛不符合题目要求。

    15、解释堆和栈的区别。

    正确答案: 

    具体的生命期的概念我觉得我还要好好深入的学习一下,但是这个题目还算比较简单,即用static修饰就可以了,但是只是生命期延长,范围并没有扩大,除非把这个变量定义在函数体外的静态区,不过那样就变成全局变量了,仿佛不符合题目要求。

    16、在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”声明?

    正确答案: 

    函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern “C”修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。

    17、strtok函数在使用上要注意什么问题。

    正确答案: 

    这个问题我不知道能不能回答全面,因为实在是用的很少。这个函数的作用是分割字符串,但是要分割的字符串不能是常量,这是要注意的。比如先定义一个字符串:char array[]=”part1,part2″;,strtok的原形是char *strtok(char *string, char *delim);,我们将”,”作为分隔符,先用pt=strtok(array,”,”);,得到的结果print出来就是”part1″,那后面的呢,要写成pt=strtok(NULL,”,”);,注意,要用NULL,如果被分割的字符串会被分成N段,那从第二次开始就一直要用NULL。总结起来,需要注意的是:被分割的字符串和分隔符都要使用变量;除第一次使用指向字符串的指针外,之后的都要使用NULL;注意使用这个函数的时候千万别把指针跟丢了,不然就全乱了。

    18、用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

    正确答案: 

    #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情:

    1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)

    2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。

    4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。

    19、说一说C与C++的内存分配方式?

    正确答案: 

    1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,如全局变量,static变量。

    2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

    3)从堆上分配(动态内存分配)程序在运行的时候用malloc或new申请任意多少的内存,程序员负责在何时用free或delete释放内存。动态内存的生存期自己决定,使用非常灵活。

    20、你如何理解MVC。简单举例来说明其应用。

    正确答案: 

    MVC模式是observer 模式的一个特例,典型的有MFC里面的文档视图架构。

    感谢阅读,希望能帮助到大家,有什么问题欢迎评论区留言。


     

    如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!
    C语言C++学习企鹅圈子】,分享(源码、项目实战视频、项目笔记,基础入门教程)
    欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

    编程学习书籍:


     

    编程学习视频:


     
  • 相关阅读:
    第十一次作业
    第十次作业
    第九次作业
    第八次作业
    第七次作业
    第六次作业
    Springboot 2.x 使用 Druid 数据源
    @ConditionalOnMissingBean、@Import 组合使用
    Springboot 2.x 整合 JDBC
    IDEA org.apache.maven.plugins:maven-jar-plugin 报红
  • 原文地址:https://www.cnblogs.com/mu-ge/p/14211124.html
Copyright © 2011-2022 走看看