北京途游游戏后端开发
北京途游游戏后端开发
1.说一下你开发过的项目,挑一个说下你都做了什么模块与功能
- 1.爬虫项目
- 2.在线生鲜商城
2.你了解过我们公司吗? 我们公司开发的游戏,你玩过吗?
3.如果你需要学习一种新技术,你会怎么做?
分步骤: 1.了解原理,2.掌握使用 3.编码练习 4.项目应用5.你会前端吗? 你公司前后端分离吗?
6.你常用的数据库有哪些? mysql mongodb redis
7.你开发的这个项目上线了吗? 每天的访问量是多少? 数据库中有多少用户?
- 内部项目
8.python的数据类型?
string9.你之前的项目是在什么开发环境上进行开发的? 怎么进行部署的?
Macos 部署上线在ubuntu进行的。10.说一下你的某个项目中,数据库中有哪些表? 举例说明表与表是怎么进行关联的?
1. 网络的七层协议、HTTP、TCP、IP 各在哪一层?
IP协议位于网络层,TCP/UDP协议位于传输层,HTTP位于应用层。
HTTP 与 TCP 的区别?
TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。
1,http对应于应用层
2,Tcp协议对应于传输层
3,http协议是在Tcp协议之上建立的,http在发起请求时通过tcp协议建立起连接服务器的通道,请求结束后,立即断开tcp连接
说明:从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,
4,Http是无状态的短连接,而TCP是有状态的长连接
socket:
Socket本身并不是协议,而是一个调用接口(API)。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口
http协议详解:
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
- HTTP请求格式:
- 请求行(request line)
- 请求头部(header)
- 请求数据
- http响应:
- HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
2.restful 风格
- Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。
- 资源:互联网所有的事物都可以被抽象为资源
- 资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。
- 分别对应 添加、 删除、修改、查询。
1
2
3
4
5
6
7
8
9
10
11#传统方式操作资源
http://127.0.0.1/item/queryItem.action?id=1 查询,GET
http://127.0.0.1/item/saveItem.action 新增,POST
http://127.0.0.1/item/updateItem.action 更新,POST
http://127.0.0.1/item/deleteItem.action?id=1 删除,GET或POST
#使用RESTful操作资源
http://127.0.0.1/item/1 查询,GET
http://127.0.0.1/item 新增,POST
http://127.0.0.1/item 更新,PUT
http://127.0.0.1/item/1 删除,DELETE3.假如你的数据库版本是1.0的,一张表的字段个数为10个。
那么现在用的版本是1.1的,想要在表中进行增删改查,有哪些方式?(我当时懵了,直接说了句我修改了数据库脚本,然后人家就问我除了这种方式,还有呢?)
4.redis 中有哪些数据类型? hash类型怎么设置值?
5.非关系型数据库,例如Mongodb,怎么去关联两张表?
6.什么是解释器? 什么是编译器?
- 解释器:直接执行用编程语言编写的指令的程序 python解释器
- 编译器:把源代码转换成(翻译)低级语言的程序。
- Java只有两个编译器,javac将源码编译成字节码,JIT将字节码编译成机器码
7.你用过Python的哪些版本?说一下2.x与3.x的不同
- print() 在py3中是做函数存在的
- nonlocal 非局部变量
- 迭代器
- 整除 返回小数
- Unicode (Assical -> UTF-8)
- 数据类型 long型去除
- True 和 False
8.C++了解吗?
9.你怎样理解Python面向对象?
举例说明 什么是多态?
说一下你是怎么实现python的封装的?
10.你在设计接口的时候,需要考虑哪些问题?
11.你做过类似优化的工作吗?前端优化,代码优化,数据库优化
(我当时顺口说了句数据库的优化),那么您是怎么进行数据库的优化的?12.在多个用户同时发起对同一个商品的下单请求时,先查询商品库存,再修改商品库存,会出现资源竞争问题,导致库存的最终结果出现异常。 例如:id为16的商品的库存为10,两人同时购买,每人买5件,如果产生并发问题,两人下单都成功,但是库存变成了5。怎么解决这个问题?
悲观锁13.GET 与POST 的区别?
POST方法可以获取到数据吗?
body与form表单、data的区别?
14.你用过的常见的算法有哪些?
15.什么是装饰器? 利用装饰器的好处? 手写一个装饰器
16.手写一个单例模式
1
2
3class singleton(object):
__init__(cls):16.你打印过 HTTP 吗?
17.你是怎么处理高并发问题的?
- 例如:商品库存 (数据库sql语句加锁处理:
1
2
3
4
5
6
#乐观锁
update goods set number =2 where id = 1 and number =7;
#悲观锁
update goods set number =2 where id = 1 for update;
update goods set number =2 where id = 1 lock in share mode; - celery
- 负载均衡
- 使用协程, 事件循环, 高效IO模型(比如多路复用,比如epoll), 三者缺一不可。
- 例如:商品库存 (数据库sql语句加锁处理:
18.你的项目是怎么部署的?
说一下一个项目部署的步骤 (根据简历的实际情况,我的是,Django+Nginx+Uwsgi)
a. 说一下Nginx的特点
b. 一个请求进来的时候,你是怎么保证你的服务器是开启的?
c.如果你的服务器是开启的,但是执行sql语句的代码发生了问题,会怎么样? 会发生什么?
19.对比一下 Django 和 Flask 有什么优缺点?
实时对战游戏的难点
- 实时性
所谓游戏的实时同步,是指玩家在游戏内的操作能够立即得到反馈,并且同步给其他玩家,让其他玩家也能尽快的知道该玩家的操作,所以操作反馈的实时性是衡量同步的实现是否优秀的一个关键指标。 玩家的操作反馈越实时,其同步实现就越好。
不同类型的游戏对操作实时性的要求并不一样,FPS对战类型的游戏,例如《守望先锋》,对操作实时性的要求是最高的,操作反馈延时一般不能超过50毫秒,MOBA类游戏《王者荣耀》,休闲竞技类游戏《球球大作战》,ARPG类型的游戏对实时性的要求也比较高,延迟一般不能超过100毫秒,MMORPG类型的游戏《魔兽世界》对实时性的要求相对低一些,200毫秒以下都能接受。
- 实时性
- 一致性
游戏的一致性是指参与游戏的所有玩家看到游戏状态都是一样的。游戏的一致性分为过程一致性和结果一致性。过程一致性是指在游戏过程中,所有参与玩家每一帧的状态都一致;而结果一致性是指在游戏过程中,中间的状态可能不一致,但是游戏结束的时候最终的结果必须一致。所有的实时游戏,都要求结果一致性,但是过程不一定要完全一致。很多的实时同步算法,都会以牺牲一定的过程一致来获取更好的效率。
- 一致性
- 在弱网环境下的流畅性
现在很多实时游戏,例如《王者荣耀》都运行在移动终端,例如手机上。手机上的移动网络是一种典型的弱网环境,其质量不稳定,延迟高,还经常有丢包,因此能否在弱网环境下流畅的同步是衡量同步实现是否优秀的一个重要指标。
- 在弱网环境下的流畅性
- 同步玩家数量
同一场景内可以支持的玩家数量,也是一个重要的指标,不同类型的游戏一般要求差别比较大。对战类型的游戏,例如《守望先锋》、《王者荣耀》,一般场景内的玩家人数都不超过10人;吃鸡类型的游戏,一般场景内的人数不超过100人;MMORPG游戏,例如《魔兽世界》,同一场景内的人数可以达到上千人。
- 同步玩家数量
- 反作弊性
大部分玩家都期望游戏是公平的,玩家无法通过作弊来获取不当收益,从而影响游戏的公平性,所以反作弊性是一个重要的指标。游戏作弊一般有两种方式,一种是能够查看一些本来应该对玩家保密的游戏信息,例如战争迷雾,这种作弊方式相对没有这么严重。另外一种是可以直接篡改游戏数据,这种方式就比较严重了,会完全破坏游戏的平衡性,要严格避免。一般来说,游戏的客户端比较容易被第三方软件篡改,所以能否通过直接查看或者修改优秀客户端数据就能进行作弊,是衡量同步实现在反作弊性方面表现是否优秀的一个很重要的评价标准。
网络流量消耗
网络流量永远都是稀缺的,能否尽可能的降低流量消耗是步是衡量同步实现是否优秀的一个重要指标。
- 反作弊性
三种不同方向的技术实现介绍
————————————————
原文链接:https://blog.csdn.net/rovesky/article/details/104016129