首页 > 笔经面经 > 网易游戏一面 基础架构方向

网易游戏一面 基础架构方向

头像
我的敏敏在哪里
编辑于 2019-03-23 11:13:08 APP内打开
赞 3 | 收藏 62 | 回复5 | 浏览2855

自我介绍和项目介绍

  • 简单自我介绍下吧
  • 你对哪方面是最熟的,是不是Linux C++或者说是最感兴趣?
    • 表达自己倾向基础方向开发
  • 问下项目经历吧,能不能详细介绍下这个项目里做了哪些事情,解决了什么问题啊?
    • 详细的介绍了项目和之前准备好的一个问题(socket方向的,自己通过netstat 等监控工具排查问题经过,讲得很详细,感觉面试官比较满意)
  • 你中间有没有去提升或者改善性能啊,比如说改参数啊或者调整什么机制,有没有这方面的努力?
    • 也是简单介绍了下自己怎么优化的,达到了什么效果(QPS)
  • 蛮多和项目相关的问题就不细说了,反正就是大家准备项目的时候提前准备一些比如遇到的困难、如何解决的、性能如何、如何优化这样子的问题。

基础

  • 你对Linux内核IO机制有没有了解,就比如说select和epoll有什么差别?
    • 哈哈哈问到这个问题我就笑了,然后就开始先说差别,比如select 有文件描述符限制,频繁的内核态和用户态拷贝、O(n)遍历这些,然后讲了select和epoll都是基于文件系统中file_operations的poll调用,然后开始详细讲epoll,大概讲到了内核用红黑树维护监听描述符,就绪队列,回调函数机制避免O(n)的遍历这些。答完面试官就说说得比较全面深入。
  • 刚才你说你用netstat命令去检查连接状态,你能不能说下这个命令是做什么,看到的链接状态会有哪些?
    • 就讲了ESTABLISHED、SYN_RCVED、CLOSE_WAIT、TIME_WAIT(故意最后答这个引过来)
  • 如果是你在部署某一个程序服务的时候,看到大量的TIME_WAIT连接是怎么回事?
    • 分析了TIME_WAIT是主动关闭一方,所以服务器应该是有大量短连接请求
  • 那么大量的TIME_WAIT会导致什么问题呢?
    • 大概从端口占用2MSL不能使用,可能导致后续没有端口接受新连接之类方向分析
  • 那我们怎么去避免这个问题,避免大量TIME_WAIT
    • 讲了设置socket选项SO_LINGER或者设置SO_REUSEADDR让端口和地址重用
  • 平时用什么语言,做什么开发?
    • C++一般用来和网络Linux相关的开发, Java的话是偏Web后端, Python一般是写脚本或者爬虫也有用后端框架
  • Python的话用到过装饰器吗?
    • 嗯,然后讲了装饰器***嘛,比如无侵入的增加函数功能(比如计时),有点类似Java注解,支持AOP编程。乱扯了一堆...
  • 那Java你有哪些了解得常用设计模式?
  • 讲了装饰器模式和在jdk IO流中的运用,单例模式
  • 那单例我们一般用来做什么?
    • 只需要一个对象的场景,比如数据库连接池、文件系统这种。。。
  • 了解过Java里面的线程安全问题吗?
    • 感觉不妙引到Java上来了,赶紧给面试官说自己Java不是很熟悉,讲下C++中的吧,然后开始C++的问题
  • 讲下C++里虚函数
  • 虚函数表 虚函数表指针 函数指针 动态绑定 基类指针指向派生类对象这些,还有接口设计方面
  • 在C++里面结构体和类的区别
    • 默认访问权限 + 一点其它自己的使用感觉
  • 用过智能指针吗,能不能介绍下它解决的问题和你使用的经验?
    • 首先讲了裸指针生命周期管理的困难,内存泄漏、野指针这些
    • 然后讲了智能指针是如何利用RAII来解决的,然后顺便提了那几个智能指针区别
    • 讲了自己项目中如何利用shared_ptr的,还有如何用weak_ptr解决环形引用的
  • 刚才你提到内存泄漏,那你是如何在debug发现或者是定位内存泄漏的呢?
    • 讲了下Valgrind套件下的memcheck
  • 那后面用了智能指针之后你再去跑内存泄漏有减少吗?
  • 嗯,工具检测没有内存泄漏发生了
  • 可以讲下树的深度遍历和广度遍历
    • 前 中 后 用栈或者递归
    • 层次 用队列
  • 讲一下hash表
    • 详细讲了下STL unordered_map底层
  • 那哈希表冲突怎么解决?
    • 线性探测和平方探测,说了这两个有主聚集和次聚集缺点
    • 大多数语言map用的是开链法
  • 如何判断链表是否有环?
    • 说了用set和快慢指针两种
  • OK,我问几个操作系统方面的问题哈

OS

  • 你知道copy on write吗
    • 详细讲了fork的COW, 锁定父子进程页表只读,任何一进程写时就分配页框复制之类
  • 实现进程间通信的方式
    • 匿名管道 有名管道 共享内存 信号量 消息队列 socket, 然后强调自己偏向使用socket通信,因为方便将单机多进程扩展到多机多进程
  • 你单机开发和实验用的什么Linux开发版啊?
    • 讲了Ubuntu 和 deepin
  • 了解一些运维命令吗,比如你在测试的时候怎么看负载啊
    • 答了top
  • 后面详细问了top, 比如问我知道Load Avg代表什么含义,进程的CPU利用率会超过100%吗,top还能看什么性能指标?
  • 你有什么问题问我吗

5条回帖

回帖
加载中...

本文相关内容

近期热帖

热门推荐