北京畅聊天下C++开发一面

刚开始HR介绍了整个面试流程大概是三轮面试,前两轮是技术面,主要考察技术问题,三面综合面会有综合问题,然后接着问了些问题了解了一下基本情况,之后开始面试。

  1. 跳过了自我介绍环节,直接确认了一下姓名。
  2. 了解了一下本科专业,以及自学的情况。
  3. 了解了一下参加比赛中使用的语言。(答了比赛中使用的都是C++语言,但是面向对象的特性使用不多,主要使用标准模板库和一些方便的新特性。)
  4. 对C++语言的特性了解么?(答了比较熟悉。)
  5. 问了平时的开发环境是什么?(答了项目是在Windows上运行虚拟机Ubuntu server里实现的,比赛的代码是在Windows上使用IDE实现的。)
  6. 一个具体场景问题,设计一个类,需要保存不同学生的姓名及各科成绩记录,实现的功能有插入一条学生记录;对给定学生的姓名输出指定的成绩以及这个成绩对应的排名;对给定的成绩和k输出该门成绩排前k名的学生名字。(首先答了设计的接口数量是三个,put接口一个,get接口两个,内部可以有一个排序接口不暴露给外面,然后说了具体实现这些接口使用的数据结构,先说了最朴素的算法,就是类内部一个tuple数组保存所有已经被插入的数组,put方法直接O(1)在数组尾部插入一条记录,get方法内部首先通过条件筛选出符合条件的记录保存在一个临时的tuple数组中,然后sort排序这个临时数组,然后输出即可, 这样两个get方法每次时间复杂度都是O(NlogN)的。)
  7. 这样可以实现,有没有办法把复杂度做的更好。(答了内部对所有记录建立多个multimap,有几个成绩就建立几个multimap,插入时先在数组尾部插入新记录,之后更新每个multimap,对于单个multimap其中键是每条记录的要排序的成绩,值是这个记录保存在数组中的下标,然后在给定了要查询的成绩和学生姓名时对multimap从头进行遍历,直到找到对应姓名的学生的记录,同时也获得了该学生对应成绩的排名,输出即可;如果是给定要查询的成绩输出前k名的话,也是对multimap从头进行遍历,然后输出遍历的前k条记录即可,这样put方法的复杂度会增加,因为每次需要更新multimap,然而两个get方法的复杂度就将降到O(N),为输出前k个二叉树节点的平均时间复杂度。)
  8. 追问,面试官是提出了一些质疑,似乎是认为两个get的时间复杂度不应该是一样的,但是也没说原因,后面我也想了想,还是没明白,有可能是我口胡的时候哪里出问题了,也是第一次遇见这种类型的面试题,比较措手不及。
  9. 问了有没有了解过我们的APP?
  10. 问了是不是想来北京?(答了对于工作地点没有要求,全国都会尝试。)
  11. 反问环节。

总结:

感觉现场设计类型的问题接触的不太多,没啥经验,没答太好,八股之类的反而没有,确实令人感叹。

感觉面试官精神状态不太好,黑眼圈很重,比较疲惫的样子感觉,令人害怕。

更新:

咨询HR之后表示面试未通过,果然寄了。

全部评论
什么时候面的啊
点赞 回复
分享
发布于 2023-05-07 16:39 上海
现在什么进度了
点赞 回复
分享
发布于 2023-05-07 16:48 福建
滴滴
校招火热招聘中
官网直投
不用每次都sort 可以用链表直接插入 排序做到O(n), get用一个map,可以O(1),map键是姓名,值是这一科对应的链表节点地址,可以参考一下redis的zset
点赞 回复
分享
发布于 2023-05-08 14:08 辽宁

相关推荐

3 11 评论
分享
牛客网
牛客企业服务