游戏研发面经
为什么要应聘游戏研发这个岗位玩过哪些游戏?如何设计出一个游戏?UDP在游戏中为什么丢了包不影响在游戏中使用 UDP(用户数据报协议)而丢包不影响游戏体验的原因主要有以下几点:
实时性要求高:许多游戏(特别是在线游戏)需要实时传输数据,保证游戏的流畅性和响应速度。UDP是一种无连接协议,不需要建立连接就能发送数据,传输速度快,延迟低,适合实时数据传输。
数据包丢失容忍度高:游戏中的许多数据(如玩家的位置、动作等)会频繁更新。即使有些数据包丢失了,也很快会被新的数据包覆盖,因此不会对游戏体验造成明显影响。相比之下,TCP需要确认每个数据包的接收,这会导致延迟,影响游戏的实时性。
自定义重传机制:一些游戏会自行实现数据包丢失的检测和重传机制,而不是依赖于底层协议的重传机制。这种方式更灵活,可以根据具体需要决定是否重传丢失的数据包。
不重要的数据:一些数据(如瞬时状态更新)即使丢失也不会对游戏产生重大影响。游戏开发者可以根据数据的重要性选择是否采用UDP来传输这些数据。
这些特点使得UDP在许多需要快速、实时数据传输的游戏中得到了广泛应用。
系统设计
实现多个客户端访问一个服务端使用Socket编程来实现一个简单的客户端-服务端模型。
服务端代码:
1234567891011121314151617181920212223242526272829303132import socketimport threading# 定义服务端的IP地址和端口server_ip = '127.0.0.1'server_port = 12345# 创建Socket对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.bind((server_ip, server_port))server_socket.listen(5) # 最大连接数print(f"服务器启动,监听端口: {server_port}")def handle_client(client_socket): while True: try: message = client_so ...
智力题
8个外形一样的球,其中有一个偏重,如何只通过两次测量找到重球为了在只使用两次测量的情况下找到8个球中偏重的那个球,可以采用以下方法:
将8个球分成3组:
第一组:A、B、C
第二组:D、E、F
第三组:G、H
第一次测量:
将第一组(A、B、C)放在天平的左边,第二组(D、E、F)放在天平的右边。可能的结果有三种:
左边重(A、B、C中有一个是重球)
右边重(D、E、F中有一个是重球)
两边一样重(G、H中有一个是重球)
第二次测量:
如果第一次测量左边重:从A、B、C中任选两个球进行测量,例如A和B。
如果A和B重量相等,则重球是C。
如果A和B不等,则重球是较重的那个。
如果第一次测量右边重:从D、E、F中任选两个球进行测量,例如D和E。
如果D和E重量相等,则重球是F。
如果D和E不等,则重球是较重的那个。
如果第一次测量两边一样重:对G和H进行测量。
如果G和H重量相等,则重球不存在(但由于题意重球必存在,所以这个情况不会出现)。
如果G和H不等,则重球是较重的那个。
通过这种方法,可以在两次测量内准确找到8个球中偏重的那个球。
Python知识点
Python内存模型Python 的内存模型包括几个重要的概念和机制,帮助解释如何管理和操作内存。以下是关键点:
对象模型:在 Python 中,一切皆对象。变量实际上是对对象的引用。对象分为可变对象(如列表、字典等)和不可变对象(如整数、字符串、元组等)。
引用计数:Python 使用引用计数来管理内存。每个对象都有一个引用计数器,当对象被引用时计数加1,当引用被删除时计数减1。当引用计数为0时,对象被回收。
垃圾回收:除了引用计数,Python 还使用垃圾回收机制来处理循环引用。Python 的垃圾回收器会定期检查并回收那些不再被引用的对象。
内存分配器:Python 使用私有堆来管理内存。Python 内存分配器负责从操作系统获取内存并将其分配给对象。常用的内存分配器包括 PyObject_Malloc 和 PyMem_Malloc。
小对象池化:Python 对小对象(通常是小于256字节的对象)进行池化,以提高内存分配和释放的效率。这意味着相同的小对象可能会被多次重用。
全局解释器锁(GIL):GIL 是 Python 的一个机制,用于保护 Python 对象的访问,确保多 ...
C++知识点
C++常用数据结构
数组(Array):数组是固定大小的连续内存块,用于存储相同类型的数据。
动态数组(Vector):std::vector 是一个动态数组,可以根据需要自动调整大小。
栈(Stack):栈是一种后进先出(LIFO)的数据结构。C++ 中可以使用 std::stack 实现栈。
队列(Queue):队列是一种先进先出(FIFO)的数据结构。C++ 中可以使用 std::queue 实现队列。
双端队列(Deque):双端队列允许在两端进行插入和删除操作。C++ 中可以使用 std::deque 实现双端队列。
集合(Set):集合是一种无序且不允许重复元素的数据结构。C++ 中可以使用 std::set 实现集合。
映射(Map):映射是一种键值对的数据结构。C++ 中可以使用 std::map 实现映射。
优先队列(Priority Queue):优先队列是一种元素带有优先级的队列,C++ 中可以使用 std::priority_queue 实现优先队列。
哈希表(Unordered Map):哈希表是一种基于哈希函数的数据结构,用于高效地进行查找、插入和删除操作。 ...
面经汇总
腾讯 WXG - 移动客户端开发 实习基础微信&视频号团队2024/3/19 40多分钟 一面
自我介绍
研究生成绩、本科生成绩
研究生主要专业课
Java - 强引用 弱引用
Java - 垃圾回收机制
TCP连接如何保成可靠性
HTTP状态码
拷打实习、项目
你的开源线上实习主要都做的啥?
你在开源实习过程中遇到的最难的是什么?
你的单点登录系统大前端项目中 主要都做了什么东西?
手撕代码
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。
意向城市是上海,组内基本都在广州,这个你有什么问题吗?
为什么会想要投移动客户端开发?
除了在实习项目中,你还在有通过其他途径了解到移动客户端开发吗?
反问:
面试官您觉得我的表现如何?
组内日常工作?
淘天集团 - 天猫技术部前端 实习2024/3/26 14:00 70多分钟。。感觉好难。。。
面试官介绍部门、自我介绍
自己自我介绍
RN和React的区别
单点登录SSO原理
PKCE
Flutter RN区别,如何实 ...
手撕相关
经典题型链表有序链表合并12345678910111213141516171819202122232425ListNode mergeTwoLists(ListNode l1, ListNode l2) { // 虚拟头结点 ListNode dummy = new ListNode(-1), p = dummy; ListNode p1 = l1, p2 = l2; while (p1 != null && p2 != null) { // 比较 p1 和 p2 两个指针 // 将值较小的的节点接到 p 指针 if (p1.val > p2.val) { p.next = p2; p2 = p2.next; } else { p.next = p1; p1 = p1.next; } // p 指针不断前进 ...
框架
本文参考 JavaGuide
Spring什么是SpringSpring 是一款基于 Java 的轻量级开源开发框架,旨在提高开发人员的开发效率以及系统的可维护性。
Spring 框架(Spring Framework)是很多模块的集合,使用这些模块可以很方便地协助进行开发。Spring 支持控制反转(Inversion of Control, IOC) 和 面向切面编程(Aspect-Oriented Programming, AOP)、可以很方便地对数据库进行访问、可以很方便地集成第三方组件(电子邮件,任务,调度,缓存等等)、对单元测试支持比较好、支持 RESTful Java 应用程序的开发。
Spring的核心功能主要是 IoC 和 AOP,核心思想是不重新造轮子,开箱即用,提高开发效率。
Spring模块
Spring5.x 版本中 Web 模块的 Portlet 组件已经被废弃掉,同时增加了用于异步响应式处理的 WebFlux 组件。
Core Container:Spring 框架的核心模块、基础模块,主要提供 IoC 依赖注入功能的支持。Spring 其他所有的功 ...
数据库
本文参考 JavaGuide
SQL/NoSQL基础什么是SQLSQL 是一种结构化查询语言(Structured Query Language),提供一种从数据库中读写数据的简单有效的方法。几乎所有的主流关系数据库都支持 SQL ,适用性非常强。一些非关系型数据库也兼容 SQL 或者使用类似于 SQL 的查询语言。
DB/DBMS/DBS/DBA
数据库:数据库(DataBase,DB)是由数据库管理系统管理的数据的集合。
数据库管理系统:数据库管理系统(Database Management System,DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。
数据库系统:数据库系统(Data Base System,DBS)通常由软件、数据库和数据管理员(DBA)组成。
数据库管理员:数据库管理员(Database Administrator,DBA)负责全面管理和控制数据库系统。
数据库术语
数据库(database):保存有组织的数据的容器(通常是一个文件或一组文件)。
数据表(table):某种特定类型数据 ...
计算机基础
本文参考 JavaGuide
网络常见网络模型
OSI七层模型:如下。
TCP/IP四层模型:如下。
混合模型:混合模型结合了OSI模型和TCP/IP模型的优点,以更好地解释和实现网络通信。
五层模型: 物理层、数据链路层、网络层、传输层和应用层。 去除了OSI模型中的会话层和表示层,将它们的功能合并到应用层中。
IEEE 802模型:主要用于局域网(LAN)和城域网(MAN)。包含物理层和数据链路层,进一步细分为介质访问控制(MAC)层和逻辑链路控制(LLC)层。
OSI七层模型
应用层:为计算机提供服务
表示层:数据处理(编码、解码、加密解密、压缩解压缩)
会话层:管理(建立、维护、重连)应用程序之间的会话
传输层:为两台主机进程之间的通信提供通用的数据传输服务
网络层:转发、路由和寻址(决定数据在网络中的游走路径)
数据链路层:帧编码和误差纠正控制
物理层:透明地传送比特流传输
TCP/IP四层模型
应用层(应用层、表示层、会话层)
传输层
网络层
网络接口层(数据链路层、物理层)
为什么网络要分层复杂系统需要分层,每层专注于一类事情。 ...