腾讯实习-PCG一面面经

base 深圳 客户端开发

面了一个多小时,八股文盛宴

  1. 自我介绍
  2. 简单拷打项目
  3. 写一个空类,编译器会自动生成哪一些函数?
  4. 追问:有移动赋值吗?为什么?
  5. 空类大小是多少?
  6. 追问:一定是 1 吗?可以自己去更改这个大小吗?
  7. 如果在类中字节写了析构函数,会影响编译器对其他函数的默认生成吗?
  8. 假设在类中有一个成员变量,是 std::string 类型,列表初始化和构造函数里面初始化有什么区别?
  9. 哪些变量是一定要在列表里面初始化的?
  10. 看一段代码,运行结果是什么?
#include <iostream>

class A {
public:
    void func1() {
        std::cout << "1" << std::endl;
    }

    virtual void func2() {
        std::cout << "2" << std::endl;
    }
};

int main() {
    A* a = nullptr;
    a->func1();
    a->func2();
    return 0;
}
  1. 追问:为什么?
  2. 追问:调用 func2 的流程是怎么样的?
  3. 说一下虚函数指针是什么?
  4. 追问:那怎么去找虚函数表?
  5. C++ 里面有 4 种强制类型转换,分别说一说是哪四种?
  6. 追问:那 dynamic_cast 是怎么检测是不是子类类型的?
  7. 追问:那 static_cast 还可以转换什么?
  8. 说一说智能指针
  9. 什么时候用 std::weak_ptr
  10. 追问:那 std::weak_ptr 是怎么检测当前还有没有 std::shared_ptr 的?
  11. 追问:那 std::shared_ptr 的结构是什么?
  12. std::shared_ptr 线程安全吗?
  13. 说一说 std::vectorstd::deque 的区别?
  14. 说一下 std::move 有什么用?
  15. 怎么区分左值还是右值?
  16. 追问:那我现在写了一个函数,它接受的参数是一个 std::unique_ptr,那接受的这个参数是左值还是右值?
  17. 什么是完美转发?
  18. 多线程中经常要用锁,请你介绍一下你了解哪些锁?
  19. 自旋锁和互斥锁的区别是什么?
  20. 写代码怎么去避免死锁?
  21. 场景题:比如说现在要监控一个主线程,主线程可能会死锁,也可能是没有死锁但是卡死了,我们有没有什么办法去感知这个事情呢?
  22. 追问:现在程序在用户那里,你要把这个事情上报下来,你会怎么做?
  23. 追问:我怎么知道这个程序有没有卡死或者死锁了?
  24. 追问:但是我们又怎么知道他在是哪个函数,哪一行代码里面的?
  25. 后面又根据回答疯狂追问
  26. 谈一谈 TCP 的拥塞控制
  27. 最后手撕 K 个一组翻转链表(一开始停止条件写错了,写了个死循环之间把OJ卡机了,提交不了新代码,后面改A出来了)
  28. 反问

下午面完,晚上就挂了

面试官人很好,答不出来的问题会做引导。但自己太菜了,有答错的地方,场景题招架不住,后面追问环节,脑袋已经宕机了,没有遇到过这种情况。还要继续背八股,深入基础

#牛客AI配图神器#

#凉经##PCG##腾讯##C++#
全部评论
佬部门是QQ吗
点赞 回复 分享
发布于 05-11 13:38 黑龙江

相关推荐

05-11 22:04
门头沟学院 Java
前面就是基本上是八股盛宴,然后看你说什么词触发他被动然后追着问。复盘的时候确实发现底层网络和操作系统问得挺细的,可能客户端偏底层?总体来说面得挺舒服的,面试官也很友善,一个小时很快就过去了。提问环节:1.&nbsp;自我介绍2.&nbsp;面试官强调这是客户端面试&nbsp;说明一下base地,进来要转cpp3.&nbsp;了解cpp吗?不了解,对于两者的理解我认为最大的不同在于内存管理,cpp可以灵活地控制内存,提高程序运行效率。Java通过jvm来进行内存管理,好处是系统自动分配内存和垃圾回收,安全简单,缺点就是不能更颗粒度地操作内存。还有就是cpp的学习曲线比较陡峭,其他的就不太清楚了。4.&nbsp;Java集合有哪几种?ArrayList,Linkedlist,HashSet,hashmap,ConcurrentHashMap5.&nbsp;ArrayList和LinkedList有什么区别?底层实现,读写应用场景,6.&nbsp;具体到每一个节点上,他们两在内存占用上哪个更优?ArrayList底层是连续内存的动态数组,利用了计算机的局部最优特性,所以更优一些7.&nbsp;什么是反射?通过类名在程序运行时构建类实例,操作类方法,类字段,增强编码的灵活性和解耦,但是也存在着安全的隐患8.&nbsp;JVM是如何反射构建类对象的?通过方法区中存放的类信息,字段和方法,去构建类对象实例9.&nbsp;讲一下类加载机制,描述一下类是如何被加载的?加载-验证-准备-解析-初始化-使用,然后具体内容10.&nbsp;类加载的时候,它对静态成员变量和非静态成员变量的处理具体有什么不同?静态放在方法区,局部变量放在堆,基本数据类型放在栈帧11.&nbsp;讲一下CAS是什么?12.&nbsp;有没有遇到ABA问题?13.&nbsp;Mysql底层存储的数据结构是什么?14.&nbsp;平时写sql查询语句时需要注意什么,对查询进行优化,结合一个例子说明?15.&nbsp;你的主表的主键ID是增长是+1吗?还是怎么样?16.&nbsp;推荐使用顺序递增索引,说了一下顺序递增和UID的优缺点17.&nbsp;有遇到并发插入,出现ID空洞的情况吗?没有,加行锁了18.&nbsp;你刚刚说了行锁是吧,那Mysql具体有哪些锁?行锁、表锁、全局锁,间隙锁防止幻读19.&nbsp;什么是幻读?20.&nbsp;我看你有提到计算机网络,介绍一下UDP和TCP差异21.&nbsp;如果在客户端建立TCP的话,一般会怎么做?(愣了一下)一般是操作系统底层通过协议栈来进行网络连接,通过JavaAPI来操作Socket层来进行网络连接通信22.&nbsp;你有用过java的Socket相关的这些,手动去建立连接的API吗?用过简单的http网络请求连接,还有使用Java的网络应用框架Netty来进行网络通信,可以自定义消息序列方式和序列头等信息23.&nbsp;你刚才提到操作系统负责网络连接,你知道操作系统提供的TCP的API是什么吗?不太清楚,没有在操作系统层面上实现过这种网络通信的调用24.&nbsp;解释一下TCP和HTTP这两个专有名词?25.&nbsp;HTTP一定要建立在TCP上吗?还是说UDP也可以?26.&nbsp;你刚刚说了QUIC协议,关于QUIC你知道哪些呢?27.&nbsp;既然你提到了中间密钥,那它建立连接的大概过程是什么?28.&nbsp;TCP协议的握手是干什么的,为什么要有握手的过程?29.&nbsp;它如何保证不接收过去的数据呢?30.&nbsp;说了一个乱七八糟的问题,什么什么API和你刚刚说的握手有什么关系?(没听懂)31.&nbsp;那我换一个问法,你知道半连接队列吧?那它在握手的哪一步把链接从半连接移到全连接队列?32.&nbsp;如果第三次握手的ACK,客户端没收到,会怎么样?33.&nbsp;OK网络相关的就,嗯(话锋一转),HTTP头的大概结构你清不清楚?34.&nbsp;问你两个操作系统相关的问题,kill命令有用过吗?(玛德没听清,没回答出来)结束一个进程一般用shutdown或者close函数35.&nbsp;嗯我不是说在你程序内,那你有个jar包跑起来了,你怎么把它删掉?一般在服务器上用docker部署多个容器,用docker&nbsp;stop来停掉程序36.&nbsp;那你知道在Linux平台,进程退出的时候会有几种信号,你知道几种它们有什么不同?不清楚具体哪个信号,说了个shutdown和shutdownNowPS:GPT说有6种,对应不同触发的方式:SIGHUP是终端关闭挂起,SIGNT是Ctrl键+c优雅退出,SIGQUIT是Ctrl键+\用于调试,SIGKILL是强制终止进程,SIGTERM是kill&nbsp;&lt;PID&gt;用来杀死进程优雅终止,SIGTOP是暂停进程可恢复37.&nbsp;OK,那你对Window系统相关的知识了解吗?不太清楚,只用过一些简单命令行做题:翻转数字?(“123456”输出“654321”)聊天环节:1.&nbsp;因为我们这边是客户端开发,你这个经验都是服务端的,有做过安卓或者是其他平台的开发吗?做过一个功能比较全的C#全栈作业2.&nbsp;那你愿意找客户端吗?(灵魂拷问)(流汗黄豆)可以考虑反问:3.&nbsp;腾讯对于转语言或者转岗位的同学会有过渡的培训吗?会有,但也看部门,主要是看你有没有意愿去做这个方向的工作4.&nbsp;元宝客户端具体是做PC端还是移动端?都有,具体看你兴趣就行(😥)5.&nbsp;那具体的业务是干什么的?业务就是元宝客户端,你在各个平台都能搜到的吧,这就是我们的业务(😥这不没说吗?)6.&nbsp;那客户端主要的工作是集中在哪些方面?用户使用界面?类似前端JS的逻辑处理?都会做,不光是UI展示,还有用户交互层面,也有数据要处理。虽说是客户端,但是整个数据的上下链路都是要做的7.&nbsp;腾讯对实习生会不会苛刻一些?主要看不同部门的要求,我们这边还好,更注重你的基础是否扎实,解决问题的能力。
点赞 评论 收藏
分享
05-24 12:03
湖南大学 Java
1、项目什么时候会触发失败,人为介入;2、sql如何分页展示&nbsp;&nbsp;&nbsp;&nbsp;在sql中,可以使用limit和offset子句或者row_number()窗口参数来实现分页展示数据;&nbsp;limit&nbsp;number_of_rows表示每页展示的行数,offset&nbsp;offset_value表示跳过前面的行数。例如,对于第一页,offset是0,以此类推;3、http包含了哪些内容&nbsp;&nbsp;&nbsp;&nbsp;请求方式(get、post、delete、put)、状态码(1XX表示请求已被服务器接收,继续处理、2XX表示请求已成功被服务器接收、理解、并接受、3XX表示需要客户端采取进一步的操作才能完成请求、4XX表示客户端请求有语法错误或无法完成请求、5XX表示服务器在处理请求的过程中发生了错误)4、TCP的状态&nbsp;&nbsp;&nbsp;&nbsp;三次握手、四次挥手5、如果在建立连接的时候,ack后,开始发送数据,但是ack数据包丢失,这个情况下服务器如何处理这个数据包&nbsp;&nbsp;&nbsp;&nbsp;首先关于服务器状态的改变,在正常情况下,服务器收到客户端的ACK报文之后,连接就进入了ESTABLISHED(已建立)状态,但是ACK数据包丢失,服务器在发送SYN-ACK报文之后,会等待客户端ACK的确认,此时服务器的状态会一直保持在SYN-RCVD(同步已接受)状态。&nbsp;&nbsp;&nbsp;&nbsp;服务器的重传机制,在一定时间内,没有收到客户端的ACK报文,服务器会重新发送SYN-ACK报文。&nbsp;&nbsp;&nbsp;&nbsp;在等待ACK的过程中,服务器会为这个半连接分配一定资源。6、操作系统的进程调度方式,win使用哪些进程调度方式,linux是使用哪些进程调度方式操作系统的进程调度方式主要有以下几种:先来先服务调度算法(FCFS)原理&nbsp;:按照进程进入就绪队列的先后顺序进行调度,先到达的进程先得到处理。特点&nbsp;:简单易懂,但可能导致后到达的短进程等待过长。短进程优先调度算法(SJF)原理&nbsp;:优先调度估计运行时间短的进程。特点&nbsp;:能有效减少进程的平均等待时间,但难以准确预估进程的运行时间。时间片轮转调度算法(RR)原理&nbsp;:将&nbsp;CPU&nbsp;时间划分为一个个时间片,按就绪队列顺序分配时间片给进程运行,若时间片用完而进程未完成,则进入队列等待下一轮调度。特点&nbsp;:适合多用户分时系统,保证了每个进程都能获得一定的&nbsp;CPU&nbsp;时间,但时间片大小的选择较关键。优先级调度算法原理&nbsp;:为每个进程设置优先级,优先级高的进程先调度,优先级相同则按先来先服务调度。特点&nbsp;:灵活但易导致低优先级进程饥饿。多级反馈队列调度算法原理&nbsp;:设置多个就绪队列,每个队列对应一个优先级和时间片大小,进程根据运行时间和抢占情况在不同队列间移动,优先级高的队列中的进程先调度,同一队列中的进程采用时间片轮转调度。特点&nbsp;:兼顾多个方面,是较复杂的调度算法,能有效处理各种类型的进程。Windows&nbsp;的进程调度方式:多优先级反馈调度算法&nbsp;:Windows&nbsp;将进程分为多个优先级,优先级高的进程优先调度。系统会根据进程的行为动态调整优先级,如交互式进程的优先级会提高,CPU&nbsp;密集型进程的优先级会降低。实时进程调度&nbsp;:对于实时进程,Windows&nbsp;使用先来先服务和轮转算法,确保实时任务及时得到处理。Linux&nbsp;的进程调度方式:完全公平调度器(CFS)&nbsp;:基于红黑树数据结构管理进程,通过计算进程的虚拟运行时间来确定调度顺序,优先调度虚拟运行时间少的进程,兼顾进程的公平性和吞吐量。实时进程调度&nbsp;:包括先来先服务(SCHED_FIFO)和轮转(SCHED_RR)两种策略,确保实时进程及时得到&nbsp;CPU&nbsp;资源。过时的&nbsp;O(1)调度算法&nbsp;:早期&nbsp;Linux&nbsp;使用,基于就绪队列和过期队列,优先调度优先级高的进程。pv操作PV&nbsp;操作是操作系统中进程同步与互斥的一种重要机制,主要用于处理进程之间的资源竞争和同步问题。PV&nbsp;操作通过信号量(semaphore)来实现,它包含两种操作:P&nbsp;操作和&nbsp;V&nbsp;操作。PV&nbsp;操作的定义P&nbsp;操作(wait&nbsp;操作)&nbsp;:用于测试信号量的值。若信号量的值大于等于&nbsp;1,则信号量减&nbsp;1,进程继续执行;若信号量的值小于&nbsp;0,则进程进入等待队列等待。P&nbsp;操作的格式如下:V&nbsp;操作(signal&nbsp;操作)&nbsp;:用于将信号量的值加&nbsp;1。若信号量的值大于等于&nbsp;0,则直接加&nbsp;1;若信号量的值小于&nbsp;0,表示有进程在等待该信号量,此时唤醒一个等待的进程,并将信号量的值加&nbsp;1。V&nbsp;操作的格式如下:
查看7道真题和解析
点赞 评论 收藏
分享
评论
5
30
分享

创作者周榜

更多
牛客网
牛客企业服务