前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2014年10月22日网易游戏数据库系统工程师初面

2014年10月22日网易游戏数据库系统工程师初面

作者头像
bear_fish
发布2018-09-20 16:48:37
5440
发布2018-09-20 16:48:37
举报

http://blog.csdn.net/hellen1900/article/details/40421911

不得不承认网易游戏的低效,上个月27号,就笔试了,结果10月20日才通知我去面试,可能是备胎吧。

好吧,其实这是我第二次面试网易游戏的,第一次是今年五月份师兄内推的网易游戏QA实习,当时被问和很多什么都不懂。

如,(1)写一个单例;(2)写一个123的全排序;(3)http状态。其实都是不难的。

;3.会设计模式吗?写一个你最熟悉的设计模式?4.知道HTTP的状态码吗?

这一次面网易游戏,也没太大期待,因为我之前网申的时候是报游戏研发的,结果网易的hr打电话叫我换数据库系统工程师职位,

尼玛,好吧,数据库什么都不懂,不过为了有机会参加网易的笔试,也就同意了调岗,另外说道网易游戏的笔试,3个小时,做得狂抓啊。

《MySQL技术内幕InnoDB存储引擎》

好吧。笔试过了,其实只是做了一道算法题,面试的时候,面试官还在说我,怎么只做了一道算法题。

下面是面试的时候问到的:

(1)Linux进程间通信有哪些?

(2)有名管道具体的内部怎么实现的?

(3)共享内存有哪些?用过没有?

(4)说说(linux + apache+nginx+mysql+php)框架?

(5)Nginx和Apache的区别?

(6)Apache的rewrite为什么比Nginx强大?

(7)负载均衡策略还有哪些?

另外还聊了聊试卷上的数据库设计题。

大概这些吧。感觉答得不是很好,然后面试官叫我出去等等,然后就叫我回去了。

1.为什么要三次握手

TCP是一个面向连接的协议,所谓面向连接就是指通信双方任何一方向对方发送数据前,

必须将建立安全通道,就像打电话一样,必须要等到对方的手机响铃,并且对方接听电话时,才能与对方通信。

三次握手过程:

(1)第一次握手:建立连接时,客户端发送SYN包(假设序列号seq = x)给服务器,并进入SYN_SEND状态,等到服务器的确认;

(2)第二次握手:服务器收到SYN包之后,必须确认客户端,所以就要发送ACK包(ack = x+1),同时服务器还必须发送SYN包(seq = y),等客户端的确认,此时服务器进入SYN_RECV状态。

(3)第三次握手:客户端接收到SYN+ACK包后,向服务器发送确认包ACK(y+1),该发送完毕,此时客户端与服务器进入ESTABLISHED,两者就可以进行数据交换了,完成三次握手。

四次挥手过程:

(1)第一次挥手:客户端发送数据完毕后,发送一个FIN,提出断开连接要求。

(2)第二次挥手:服务器收到该FIN包后,对其作出响应,发送一个ACK包,确认这一方向的连接将关闭。CLOSE_WAIT/FIN_WAIT_1

(3)第三次挥手:等服务器的应用程序做好关闭准备时,服务器反向发送一个FIN包给客户端,请求关闭连接请求。LAST_ACK/FIN_WAIT_2

 (4)第四次挥手:客户机对服务器发送的请求进行确认,并发送ACK包 TIME_WAIT

2.为什么需要TIME_WAIT?

最后一次主机Host1发送的ACK可能丢失导致HOST2重新发送FIN消息,TIME_WAIT维护连接状态

另外,TIME_WAIT为连接中“离群的段“提供从网络中消失的时间。

3.同步与异步,阻塞与非阻塞的区别?

同步:是指在发出一个功能调用时,在没用得到结果之前,该调用就不返回,

也就是必须一件一件事做等前一件做完了才能做下一件事情。

异步:和同步相对,当一个异步过程调用发出后,调用者不能立即得到结果

实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。

阻塞:阻塞调用时指调用结果返回之前,当前线程会被挂起。函数只有得到结果后

才会返回。

非阻塞:和阻塞是相对的,指在不能立即得到结果之前,该函数不会阻塞当前线程,

而会立即返回。

1. 同步,就是我调用一个功能,该功能没有结束前,我死等结果。 2. 异步,就是我调用一个功能,不需要知道该功能结果,该功能有结果后通知我(回调通知

3. 阻塞,      就是调用我(函数),我(函数)没有接收完数据或者没有得到结果之前,我不会返回。 4. 非阻塞,  就是调用我(函数),我(函数)立即返回,通过select通知调用者

同步IO和异步IO的区别在于:数据拷贝的时候,进程是否阻塞;

阻塞IO和非阻塞IO的区别在于:应用程序的调用是否立即返回。

4. select, poll和epoll的区别?

select的缺点:

(1)单个进程可监视的fd数量被限制,即能监听的端口大小有限。

(2)多socket进行扫描是线性扫描,即采用轮询的方法,效率低下。

(3)需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间传递

该结构时复制开销大。

 poll:

poll和select没有本质的区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态。

如果设备就绪则在设备等队列中加入一项并继续遍历,如果遍历完所有fd后,没有发现就绪设备,则挂起

当前进程,直到设备就绪或主动超时,被唤醒后它又要再遍历fd。

poll的缺点:

大量的fd数组被整体复制于用户态和内核地址空间之间。

没有最大连接数限制。

epoll_create

epoll_ctl

epoll_wait

epoll的优点:

1. 没有最大并发连接的限制

2. 效率提升,不是采用轮询方式。

3. 内存拷贝,利用mmap文件映射内存加速与内核空间的消息传递。

五,什么是数据库索引?

索引是一种提高数据库查询速度的机制,它是一个在数据库的表或视图上按照某个关键字段值,升序或降序排序创建的对象。

用户查询索引字段是,它可以快速地执行检索操作。

索引的类型有:聚集索引和非聚集索引

提高性能:

(1)通过创建唯一索引,可以保证数据库表中每一行数据的唯一性;

(2)通过索引,可以大大加快数据的检索速度;

(3)通过索引可以加速表和表之间的连接,从而有效实现数据的参考完整性;

建立索引注意:

(1)创建索引和维护索引要耗费时间,空间。

(2)每个索引需要占用一定的物理空间。

(3)对表中数据进行增加,删除和修改,索引也要动态地维护,从而降低了数据的维护速度。

六,MySql中的存储引擎

MyISAM索引实现:

(1)使用B+树作为索引结构,叶子节点的data域存放的数据记录的地址

(2)MyISAM的索引方式也叫”非聚集的“。

MyISAM索引的原理图:

主索引:

MySQL索引背后的数据结构及算法原理
MySQL索引背后的数据结构及算法原理

MyISAM辅助索引:

MySQL索引背后的数据结构及算法原理
MySQL索引背后的数据结构及算法原理

InnoDB索引实现:

(1)使用B+树作为索引结构,具体实现方式与MyISAM截然不同。

(2)InnoDB的数据文件本身就是索引文件,叶子节点data域保存了完整的数据记录

(3)InnoDB的辅助索引data域存储响应记录主键的值而不是地址

聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要

检索两遍索引:首先检索辅助索引获得主键,然后通过主键到主索引中检索记录。

InnoDB实现原理图:

主索引:

MySQL索引背后的数据结构及算法原理
MySQL索引背后的数据结构及算法原理

InnoDB的辅助索引:

MySQL索引背后的数据结构及算法原理
MySQL索引背后的数据结构及算法原理

七,GDB使用

> gcc -g mygdb.c

> gdb a.out

> b 4

> r

> bt       //查看运行时的堆栈

> p a    //打印变量a

> p b

>up

1. 加入断点:

break 行号

break 函数名

break ... if  

(1) list

(2) run

(3) countinue

(4) next

(5) step

(6) enter

(7) until

(8) info locals

(9) clear

多线程中:

info threads

threads IDX

break file.c 20 thread all

当程序奔溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员调试。

> gdb core

用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。

core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过ulimit来设置才会得到的。

ulimit -c 1024

ulimit  -c  unlimited 调试的话输入: gdb filename core  filename就是产生core文件的可执行文件

八,Nginx和Apache区别

LNAMP = Linux + Nginx + Apache + MySQL + PHP

Apach服务器是重量级Web服务器,功能强大,而且性能稳定;

缺点:每建立一个网络连接就会创建一个进程;

Nginx服务器是轻量级Web服务器,处理静态Web十分出色,可以作为

负载均衡服务器,反向代理服务器,高并发。

(1)轻量级,占用更少内存资源,抗并发,异步非阻塞

(2)高并发下,能保存低资源,低消耗,高性能;

(3)高度模块的设计,编写模块相对简单;

Apache相对Nginx的优点:

(1)rewrite比Nginx的rewrite要强大;

(2)模块超多,少bug

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年12月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档