腾讯实习面试

一面(3.9):
整个过程问的都是比较基础的题,加上两道思维题,题目可能有些乱序,还有部分不太记得了(恰恰就是不会的东西忘了,由于是电话面试,也没记录)(全程45分钟)
1.聊项目 (项目比较没东西,就聊了几分钟)
2.线程和进程的区别是什么
回答:
1)进程是CPU资源分配的最小单位,线程是cpu调度的最小单位
2)进程拥有独立的CPU资源,但同一进程的多个线程共享进程的大部分资源, 包括堆、代码段、数据段,每个线程只拥有一些在运行中必不可少的私有属性,比如tcb,线程Id,栈、寄存器。
3)一个进程奔溃了不会影响其他进程,但一个进程的一个线程奔溃会导致同一进程的其他线程奔溃
4)进程在创建、切换和销毁时开销比较大,而线程比较小。进程创建的时候需要分配系统资源,而销毁的的时候需要释放系统资源。进程切换需要分两步:切换页目录、刷新TLB以使用新的地址空间;切换内核栈和硬件上下文(寄存器);而同一进程的线程间逻辑地址空间是一样的,不需要切换页目录、刷新TLB。
5)进程间通信比较复杂,而同一进程的线程由于共享代码段和数据段,所以通信比较容易。

3.new 和 malloc 的区别是什么
1)new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。
2)使用new操作符申请内存分配时无须指定内存块的大小,只需要指出元素个数,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。
3)分配失败时,new会抛出bac_alloc异常,malloc分配内存失败时返回NULL
4)new操作符从自由存储区(free store)(自由存储区不仅可以是堆,还可以是静态存储区)上为对象动态分配内存空间,可以指定分配的内存地址,而malloc函数从堆上动态分配内存。
5)new比malloc更安全,new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。
6)new为自定义类型对象分配内存时,编译器运行相应的构造函数以构造对象,并为其传入初值。
delete释放对象时,调用对象的析构函数。但malloc则不会调用构造函数,free也不会调用析构函数,故对于自定义类型对象不应该使用malloc分配对象
7)new/delete可以被重载,但malloc/free不可以
8)new处理数组比较方便,有new[]版本,但malloc只能计算数组大小进行分配

4. 函数重载的底层是怎么实现的
C++利用命名倾轧(name mangling)技术,来改名函数名,区分参数不同的同名函数。命名倾轧是在编译阶段完成的。
即根据参赛列表对同名函数翻译成不同的名字,这样就可以区分所有不同的同名函数了
5. 智能指针的实现原理是什么
智能指针是一个类,这个类的构造函数中传入一个普通指针,析构函数中释放传入的指针。智能指针的类都是栈上的对象,类对象离开作用域会自动调用析构函数释放掉内存,所以可以避免忘记delete导致的内存泄露
6. tcp链接的状态转移,三次握手,四次挥手
讲的比较好的一篇博文
7. 有了解什么C++11新特性吗,聊一下
1)Lambda 表达式
2)auto
3)右值引用和move语义
4)统一的初始化语法,大括号初始化
5)nullptr
讲的比较好的一篇博文
8. tcp怎么避免拥塞,详细说说

9. 聊一下static关键字

类型 \特点在内存中的位置初始化作用域应用场景
全局静态变量全局/ 静态存储区非人为初始化时,初始为0从定义开始到文件结束(其他文件不可见)-
局部变量全局/静态存储区非人为初始化时,初始化为0局部作用域,但离开定义域时仍然在内存中,但不可访问-
静态函数--只在他声明的文件中可见如果不是多个文件复用的函数,因加上static,可以避免掉函数名冲突
类的静态成员全局/静态存储区--同个类多个对象共用一个类成员变量
类的静态函数---调用方便,不需要生成对象就能调用,方便封装某些算法,如调用Math::sin(3.14);如果非要用非静态函数,那就必须:Math math; math.sin(3.14);因为不能直接调用非静态成员,故不会破坏隐藏的原则,即保证了安全性。

10. 思维题,给一个n-2长度的数组,数组元素互相不一样,且都属于在[1,n],请找出两个数组中没有的数字,请尽量用低的时间复杂度实现,尽可能多的写法。(对方期待的是是O(n)的时间复杂度和O(1)的空间复杂度)
我用了两种做法

1)对原数组求和,再求1到n的和,两则相减,就可以得到缺失的两个数的和,记给定的是a数组,则两个数的和为 s u m 1 = ∑ i = 1 n i − ∑ i = 1 n − 2 a i sum_1=\sum\limits_{i = 1}^{n }i - \sum\limits_{i = 1}^{n - 2}a_i sum1=i=1nii=1n2ai
再求 s u m 2 = ∑ i = 1 n i 2 − ∑ i = 1 n − 2 a i 2 sum_2 = \sum\limits_{i = 1}^{n }i^2 - \sum\limits_{i = 1}^{n - 2}a_i^2 sum2=i=1ni2i=1n2ai2 得到两个数的平方差
因为两个非零自然数在确定了两个数的和和两个数的积之后,是唯一确定的
又两个数的和为 s u m 1 sum_1 sum1的组合是有限的,所以遍历组合判断该组合的平方和是不是所求那个值
2)因为数组元素是1到n,且唯一,所以可以用特殊的排序方式,具体的代码是:

pair<int, int> solve(int * a, int n){
    a[n - 1] = 0, a[n] = 0;
    for(int i = 1; i <= n - 2; i++){
        if(a[i] == i) continue;
        while(a[i] != i && a[i] != 0){
            swap(a[i], a[a[i]]);
        }
    }
    int c = 0, d = 0;
    for(int i = 1; i <= n; ++i){
        if(a[i] == 0){
            if(c == 0){
                c = i;
            }
            else d = i;
        }
    }
    return {c,d};
}

11.思维题:给两条分布不均匀的绳子,每条绳子都需要烧一个小时烧完,请使用这两条绳子采用某种烧法计时15分钟
第一步:对第一根绳子的两头同时点燃,对另一根绳子只点燃一头
第二步:当第一根绳子烧完了后,说明过了半小时了,这时对另一个绳子点燃另一头,开始计时(注意这时的绳子已经只剩一半),等第二根绳子烧完了即过了15分钟

二面(3.11)
开始给了两道题目:
用的腾讯会议,但一直信号不好,开始搞了很久一直有问题,代码区用不了,然后就在本地写,两道题思路+代码20分钟吧,但前后花了30多分钟
(1)O(n)求最大子段和,常数额外空间
(2)O(n)求第K大
(3)聊项目
(4)又问了C++11新特性
(5) java,python,C++有什么不同 (巴拉巴拉不知道回答了啥)
(6)pandas常用的数据结构
(7)其他
二面跟面试小哥聊的挺开心的,由于网络一直不太稳定,后面改成了电话,整个过程1小时

三面(3.16、3.19)
这一面有点特殊,分成了两个时间段,具体原因是因为面试官觉得我项目回答不了什么,给我布置了个作业(还是原来的作业,只是用C++写(原来是用的JAVA)),给了我三天时间。
第一段只是了解一下个人情况
1)你各科的成绩都考多少分啊
都是80多吧。
追问;为什么没有考90多
。。。。。。(不说了)
2)让我介绍一下ACM,知道了做题都是要有时间和复杂度的要求后,对方还是有一点认可
。。。。
还有很多都是了解个人情况,比如代码量有多少,熟悉什么语言,还用过什么语言。哪个科目学的最好等等
3)来到了项目,问了我几个问题,我都说不出什么,于是让我回去用C++写一下周五再面
来到了周五,我介绍了一下后,大概记得几个问题

  1. 你遇到的最大问题是什么?怎么解决的?你是怎么debug的?
  2. 你觉得你的程序有什么问题
  3. 你觉得你的程序还有什么问题
  4. 你觉得你的程序还有什么问题(是的,就是被重复问了三次,不过三次我都找出了程序的问题,因为我知道我的程序有这些问题,只是本身自己设置了一个简单的场景,对于其他场景就不管了)
  5. 你刚刚提到了线程,线程的本质是什么?
  6. 单核CPU能实现多线程吗?
    回答可以
    那具体是怎么实现的?
    简单说了一下时间片
    笔试(3.21)
    腾讯又给我发了个笔试链接,本来不想参加,但师兄说最好参加一下,HR可能会参考,然后就参加了,最后AK了

HR面(3.23)
HR面没有问什么技术,就了解了一下个人情况,大概记得几个问题
介绍一下自己
1.你接下来有什么打算,考研还是直接就业
2.你大学期间做过最有挑战的事是什么(然后对着这个不断发问)
3.比赛期间遇到什么有趣的事
4.目前还有在面试什么公司吗
5.你能接受广东省以外的工作地点吗
6.你了解过面试的部门吗
7.最后给我介绍了一下我面试的部门情况,然后就是反问

从投递简历到面试全部,刚好过了20天,许愿offer,HR小姐姐,人美声甜,希望过过过

3.25
收到腾讯短信offer了,冲冲冲

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值