【24年4月】腾讯QQ后台开发面试分享

一面-45min

算法

  • 求多个数组的交集

面试官让我先说思路,我说了两个

  • 位图(需要说清楚,因为数组给的是INT32,那么我们就需要2的32比特的长度,需要开一个2^32/64长度的long long数组)
  • set

后来用set来写的。不难,先用一个数组创建一个set,再创建一个tempSet,然后遍历数组,得到两个数组的交集tempSet,set=tempSet,直到遍历完毕全部数组。

八股

  • Linux用过那些命令?
  • Linux下共享内存是什么(页表映射,我说用信号量来访问控制,面试官说信号量不是线程通信的吗,给我整慌了)
  • TCP和UDP区别
  • TCP粘包问题,为什么UDP没有
  • UDP单个包的长度(UDP/IP都是16位,但是考虑到MTU,最好是1500-20-20)
  • C++ vector的内存管理(扩容策略)
  • 线程/进程/携程区别
  • 网卡收到一个数据到进程发生了什么(从下往上交付),有几次用户/内核态切换?(应该只有一次吧,不确定)
  • kafka了解过吗?实习的时候项目有用到数据库吗?(没有,我顺便解释了一下实习干了什么,主要是补全单元测试,和数据库没啥关系)kafka,MySQL、Redis了解哪一个(我说了MySQL)
  • MySQL索引用的什么数据结构(B+)为什么不用B树(范围查询)
  • Linux怎么实现高效的文件索引(不懂啊,我说一次性读取文件好过多次读取小字节)
  • 二面

    八股

    • C++编译过程
    • 编译出来的.O​​文件里面有几个?为什么两个.c​​文件会有两个.o​​,为什么不能是一个?(忘了)查了查,是因为这样可以方便分步编译,只需要重新编译有修改过的源文件就可以了,可以提高编译的速度
    • ​.a​​​​​和.so​​​​​文件有什么区别?(动态库静态库)

    动态库:运行时加载(可以由程序员控制),在内存中共享同一块空间,可以被多个进程使用。编译时只链接了动态库的符号表,可执行程序小,且方便独立更新库(增量更新)。缺点是运行环境中必须包含动态库。

    静态库:编译时就被添加到了最终的可执行程序中,可以脱离于库文件而运行。缺点是静态库更新时,需要重新编译整个可执行程序,在进行软件更新的时候会很麻烦。

    • 什么时候用动态库什么时候用静态库?区别?
    • C++读写锁怎么实现的?(不知道,瞎蒙了个用计数器来实现)
    • 计数器本身的操作要用互斥锁保证,互斥锁怎么实现的?(我说调用了系统原语,面试官追问底层汇编操作,不会)
    • C++高版本新特性(说了几个14和17的)有没有什么性能提升的?(不知道,干)
    • C++深拷贝是什么?
    • 什么使用深拷贝?什么时候可以不用?(这里我提到了move移动构造)
    • 实现一个LRU(共享屏幕用本地环境写的,写完之后说思路)

    最终一二面都过了,后面拿到了pdd的实习offer,考虑再三还是选择了pdd,年轻的时候拼一把。当前在pdd实习的团队主要是做大模型方向的,工作内容对我还是挺有挑战的,实习期间技术进步挺快的,我们团队的leader和导师人都挺nice的,技术上也都是大牛。现在我们团队在业务上拓展的很快,非常缺人,欢迎工程算法的应届同学来撩。

    【拼多多校园招聘】内推链接:https://careers.pinduoduo.com/campus/grad/detail?t=jvPkySdGlL,内推码:jvPkySdGlL。服务端研发工程师 期待你的加入!我们一起,无拼不青春!(通过此链接投递计入内推,内推简历优先筛选~)

    #24届软开秋招面试经验大赏##正在实习的碎碎念#
    全部评论

    相关推荐

    1 8 评论
    分享
    牛客网
    牛客企业服务