一面


💡
技术面,约40分钟,包括项目、C++、操作系统、游戏相关、一道编程题以及一些个人问题。基本上都答出来了,有些题的回答内容不太正确,面对这种情况还是不说为好。一面还是偏基础一些,基本上都没有深问,只有在C++和Java跨平台那问了一句,发现我不会就收了。几个不同语言的运用也基本显示出来了我对学习新的语言是没有门槛限制的。下一次面试可能需要展现出一些更厉害的(?)算法相关、深入的计算机基础知识和跟图形学有关的一些内容。

技术面试题

  1. 进程间如何通信?(管道、socket、信号量、message队列、共享文件)
  1. 进程和线程的区别?(说了pbc,线程必须要依附进程,进程可以看作是一个大线程,共享内存)
  1. 怎么写识别十六进制数字的正则表达式?(x)
    • 说了第一个数字需要[1-9][a-f],第二个数字[0-9][a-f]。
    💡
    [0-9a-fA-F]*
  1. *?在正则表达式中是什么意思?(x)
    • 说了*表示匹配一次或多次,?没说。
    💡
    *表示前面的字符可以匹配0次、1次或多次。
    💡
    ?表示前面的字符最多可以出现1次或0次。
  1. 什么是虚函数和纯虚函数?(我说了virtual的读音,他问了一遍,我还问他对不对qwq,他说对的)
  1. 怎么写纯虚函数?(x)
    💡
    virtual void function()=0; //让函数等于0即可
  1. 虚函数的应用场景?(自己预设了CAD的场景,面试官觉得还行)
  1. C++的STL里的priority_queue是怎么实现的?(这个没回答上来x)
    💡
    其实就是堆XD,其实答上来了!
  1. 什么是优先队列,如何构建?(堆顶的元素是满足某一性质的(最大或最小),我会使用最大最小堆来实现)
  1. 如何构建最大最小堆,它的时间复杂度?(插入的时间复杂度是logn,创建的时间复杂度是nlogn,自底向上插入,自顶向下删除)
  1. 在使用迭代器遍历并删除时会有什么风险?(我说了在最后一个删除并自增会导致越界的报错x)
    💡
    (1)对于关联容器(如map,set,multimap,multiset),删除当前的iterator,仅仅会使当前的iterator失效,只要在erase时,递增当前的iterator即可。这是因为map之类的容器,使用了红黑树来实现,插入,删除一个结点不会对其他结点造成影响。
    (2)对于序列式容器(如vector,deque,list等),删除当前的iterator会使后面所有元素的iterator都失效。这是因为vector,deque使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。不过erase方法可以返回下一个有效的iterator。使用方式如下,例如:
    vector<int> val = { 1,2,3,4,5,6 };
    vector<int>::iterator iter;
    for (iter = val.begin(); iter != val.end(); )
    { if (3 == *iter) iter = val.erase(iter);
    else ++iter;
    }
  1. C++、Java、Python编译(性能)的区别?(不太好)
    💡
    Python:脚本语言,简单易学,是基于C++创造的。Python的库很强大,可以迅速上手开发。它的编程简单,但是效率低。常用作爬虫、视频游戏开发、web开发、软件开发、架构。
    💡
    Java:采用严格的面向对象编程方法,有很多大型的开发框架,比较适合企业级应用。可以跨平台,拥有强大的类库。但占用大量内存,启动时间较长,不直接支持硬件级别的处理。
    💡
    C++:更接近底层,方便直接操作内存。不仅支持面向对象,也支持面向过程编程。C++运行效率高,同时能够比较容易地建立大型软件,适合对效率要求高的软件。它具有可移植性,无需复杂的程序设计环境,运行效率高效安全。但相对于Java没有垃圾回收机制,可能引起内存泄露。
  1. C++为什么不能跨平台?(x)
    💡
    Java能够跨平台,因为Java不是直接编译为机器语言,而是编译成中间语言,在各个平台上存在Java虚拟机,可以对此中间语言解释,所以跨平台。Python也类似存在一个PVM用于解释中间语言。而C++是直接编译成机器语言的,这在不同机器上有不同的格式。编译出来的程序在各个平台机器上都是不一样的。
  1. 如何解决游戏卡顿的问题?(玩家角度)
  • CPU占用过高→关掉一些占用CPU的程序。
  • GPU占用过高→降低游戏画质。
  • 内存占用过高→游戏内存泄漏?关闭游戏重启。(面试官:这属于游戏开发有问题)
  • 硬盘读写慢→更换固态硬盘。
  • 网络延迟→查看网络情况,查看同局域网的人的使用情况,减少下载任务等。

11. 如何解决游戏卡顿的问题?(开发者角度)

  • CPU占用过高→优化算法,降低时间复杂度。
  • GPU占用过高→优化渲染算法,用更少的开销实现更好的效果。
  • 内存占用过高→如果是内存泄漏,检测内存泄漏的地方,手动delete分配的资源。
  • 硬盘读写慢→异步加载。
  • 网络延迟→减小数据包的大小,保证数据快速加载。

项目问题

  1. 简单的自我介绍一下。(学校+专业+毕业时间+尴尬的假笑,下次应该加个喜欢游戏
  1. 疫情可视化里爬虫用的什么库?(我说不是我做的,但可以了解一下)
  1. 疫情可视化的数据源自哪里?(约翰霍普金斯大学的官方公布!感谢软工老师天天念叨233)
  1. 疫情可视化用的什么工具?(Ant-design和echart,因为echart有地图相关的数据可以直接用)
  1. 问卷调查系统里数据库是怎么建表的?(一共几张表,分别干什么的说了,估计是要检查这个问卷系统真的是我干的2333)
  1. 用Python干了些什么?(在git上了解到别人的代码,为了使用库而学习,在别人的代码上添加了一些自己的功能需求。其实说的不好,可以说django的例子。)
  1. 简述一下自己的项目经历。(就说了疫情和问卷,这是第一个问题,比较紧张还结巴了2333)
  1. 项目经历里没有跟游戏相关的内容,为什么选择游戏实习?(复制粘贴一段说来话长的故事)

编程题

前序&中序→后序(图解了这道题的左子树,面试官觉得还行就没继续了,唯一一道昨天看了还做了很久的题!!!)


0 条评论

发表评论

Avatar placeholder