可酷淘游戏开发面经
一面 八股 1小时
- 自我介绍
- 实习是去哪?学校安排的吗?是培训机构还是公司?有自己找过吗?
- 考过研吗?
- 了解过游戏开发吗?什么时候了解到的?
- 倾向做前端还是后端
- 说下Java和C++的区别
- C++除了用智能指针,还有什么方法进行内存管理(不知道)
- 怎么用原始指针来管理内存
- new了个对象要怎么处理
- 用malloc分配的内存怎么进行释放
- C++指针的一般用法是怎么样的?
- C++是面向对象还是面向过程
- 面向对象的特性?细说一下
- 继承有什么有点
- 子类可以继承父类的所有特性吗?
- 私有继承时,派生类能访问到父类全部的成员吗?
- 私有继承和保护继承的区别?
- 保护继承时,子类能访问父类全部的成员吗?
- 什么时候调用子类的虚函数?子类可以调用父类的虚函数吗?(C++采用作用域运算符::访问,这时不是运行时多态而是编译时就指定好的。Java用super关键字)
- 虚函数表是什么?
- 虚函数存放在哪?如果是存放在常量区,为什么能覆盖?(编译时候生成的)
- 虚函数表的数据结构是什么?
- C++中static关键字的作用(持久化、隐藏、共享)
- 被static修饰的成员变量存放在哪?(全局区,全局区的变量只会初始化一次,并且在程序结束后被操作系统回收)
- 怎么访问static成员变量?(可以通过对象名,也可以通过类名)
- static成员方法和普通成员方法有什么区别?(静态方法只能访问静态成员,以及通过在方法内实例化对象的方式间接访问实例成员)
- C++内存分区(代码区、常量区、全局区、堆、栈)
- 堆区和栈区的区别
- 抽象类是什么?(不能实例化,纯虚函数)
- 虚函数是什么?
- 纯虚函数是什么?(没代码区)
- 设计代码,就是运用多态特性的编程
- 数组和链表的区别?
- 数组中间插入元素的时间复杂度
- 怎么在链表中插入一个节点
- 说一下vector是什么实现的
- 二叉树的层序遍历怎么实现(要一个队列)
- DFS怎么实现
- 用递归和非递归的方式分别怎么实现中序遍历(写代码,非递归要一个栈)
- 介绍OSI模型和TCP/IP模型(物理、数据链路、网络、传输、会话、表示、应用)
- 路由在哪一层,干什么用
- TCP和UDP
- 三次握手、四次挥手
- 三次握手的实际意义是什么
- TCP怎么确保传输的可靠(滑动窗口和超时重传、校验和)
- 怎么确认滑动窗口的大小
- TCP和UDP一般应用在哪里?
- 平时玩什么游戏?
- 进程和线程是什么?
- 算法题,在100个int的数组中找相加等于100的两个数(哈希)
二面 总监 1个小时
- 为什么以项目经理的角色参与到项目(给自己挖坑了,被认为是在为了挤出时间考研,把开发工作交给组员)
- 聊了考研(下次别聊了,又给自己挖坑了,总监太会套话了)
- 项目经理的工作重点是什么?在整个团队中是个什么定位
- 实训的最大收获是什么
- 为什么用QT框架
- C++也有其他的GUI框架,为什么不选择它们
- web前端和桌面端前端有什么区别?在性能上有什么区别
- 讲下C++、Java、Python各自的优缺点(强类型与弱类型、编译型与解释型)
- 讲得更通俗易懂,假设总监是个小白来介绍这三的优缺点
- Java是在虚拟机上解释运行,为什么还要编译对象?(从跨平台的角度回答了)
- Python也是可以跨平台为什么不用编译?既然不用编译,那Java的编译就不是为了解决跨平台的问题吧(继续被深挖)
- 相比Python,Java为什么要编译?
- 换一种问法,什么时候采用C++、Java、Python?
- Python主要是干什么的?爬虫、数据清洗只是Python的一部分应用,不能代表全部,还有什么地方要用Python?
- 别人写类库,为什么不在C++或Java写?Python相比Java有什么独特的魅力(总监问C++、Java、Python区别的核心问题)
- 怎么理解脚本?在Python中怎么体现脚本的特性(之前理解的脚本是一行一行执行的bat或shell,但被反驳了)
- Python是不是脚本?(总监明确说Python就是脚本语言,回去查到脚本就是解释型语言的一种。脚本语言的程序是文本文件,并且是解释执行的。但解释型语言的程序不一定是文本文件,如Java的字节码)
- 性能上,三种语言对比怎么样?
- 为什么C++的性能更高?是因为Java要解释执行字节码吗?性能消耗在JVM上吗?(和系统底层的接近程度)
- 了解过JIT吗?(当JIT编译启用时(默认是启用的),JVM读入.class文件解释后,将其发给JIT编译器,JIT编译器将字节码编译成本机机器代码。在运行时JIT会把翻译过的机器码保存起来,已备下次使用,因此从理论上来说,采用该JIT技术可以,可以接近以前纯编译技术。)
- 不考虑Java虚拟机解释的消耗,Java和C++的性能是否一样?
- Java中的内存管理和C++的内存管理有什么区别?
- Java和C++对比起来,各自内存管理有什么优缺点(一直答不到点上,继续被追问)
- C++中,程序员通过指针控制内存,能带来什么好处?
- Java也能将引用移交到其他线程中,这和C++有什么区别?
- Java的垃圾回收机制是这么工作的?
- Java的垃圾回收机制在对象超时会回收内存吗?
- 在什么时候进行回收内存?
- 有哪些作用域?
- 在主函数中new了一个对象,然后将引用给另一个变量,原对象后面不再会被访问,垃圾回收机制会在运行时进行优化吗?原来的对象会被释放吗?(原对象是通过动态逻辑进行转移的,所以编译时候是无法确认的,所以无法在编译过程进行优化)
- 多线程编程是这么写的?
- 子线程的创建时机是什么?
- 用线程池可以怎么进行优化?这机制会带来什么问题和好处?
- 无限的线程除了会导致内存溢出还会带来什么问题?
- 为什么采用来个请求就创建一个线程来处理的模型?
- 采用的socket编程是基于什么协议?介绍TCP
- UDP有什么使用场景?举例子(要在应用层保证可靠)
- DNS协议为什么要使用UDP而不是TCP?(为了性能,TCP要建立链接,这些链接会增加DNS服务器的负担,而且可以在应用层保证可靠)
- 平时玩什么游戏?
- HTTP协议是基于什么协议?平时用哪个版本的HTTP协议?(TCP或UDP,HTTP3.0版本支持UDP,靠应用层保证可靠性)
- 又开始聊考研的问题了。没考上不甘心吗?当时为什么考研?考哪里?为什么考本校不往上考?考什么方向?为什么考这个方向?之前有了解过这个方向吗?如果考上有规划未来进什么岗位工作?进哪家公司?为什么要进这个岗位?但现在却在工作,有什么想法?现在的职业规划怎么样?
- 对什么行业感兴趣?为什么对这个行业感兴趣?你感觉这个行业要解决什么问题?你认为这个行业未来发展的瓶颈是什么?在这个岗位未来发展的难点会是什么?
- 问有投过什么公司?有offer了吗?什么时候开始找工作的?
- 毕业设计的课题是什么?为什么选这个课题?答辩了吗?分数如何?
- 平时在学校写的代码量如何?
- 对学校的哪门课程感兴趣?为什么对这么课程感兴趣?
- C++怎么实现跨平台?
- 反问