2024.9.13 灵犀互娱 游戏测试开发 一面

  1. 自我介绍
  2. 说说java的垃圾回收机制?自己实践过吗?
  3. 说说收获最大的一个项目经历?
  4. c++多线程和java多线程的区别?
  5. 线程和进程的区别?线程共享的内存空间是哪些?
  6. 项目结构?
  7. es性能好的原因?
  8. 黑神话悟空识破机制应该怎么设计?
  9. 说说tcp、udp各自的优缺点?
  10. 王者荣耀对局使用哪种协议?想要使用udp的同时保证数据传输安全该怎么做?
  11. 说说发育路英雄克制关系以及原因?
  12. 怎么判断英雄数值是否超标?
  13. 反问

第一次面游戏类的岗位,设计类的场景问题有点汗流浃背😑

#灵犀互娱,我不允许你这么低调#
全部评论
C++与Java多线程的区别 1. **语法与实现方式**: - **C++**:使用 `<thread>` 和 `<mutex>` 等头文件,提供底层控制但复杂度高。 - **Java**:通过 `Thread` 类或 `java.util.concurrent` 包,简化多线程编程,易于使用。 2. **内存管理**: - **C++**:手动管理内存,需谨慎处理以防泄漏和竞争。 - **Java**:自动垃圾回收,减少内存管理负担,但仍需合理编程。 3. **异常处理**: - **C++**:需手动处理异常,否则可能导致程序崩溃。 - **Java**:可通过 `catch` 捕获异常并设置 `UncaughtExceptionHandler`。 4. **线程优先级**: - **C++**:通过操作系统API设置,具体行为依赖于OS。 - **Java**:用 `setPriority()` 设置,为建议性而非强制性。 ### 线程与进程的区别 1. **定义**: - **进程**:资源分配和调度基本单位,拥有独立地址空间。 - **线程**:进程内的执行流,比进程更小,共享进程资源。 2. **资源占用**: - **进程**:独立内存空间,资源开销大。 - **线程**:共享进程资源,资源开销小。 3. **切换开销**: - **进程**:涉及地址空间切换,开销大。 - **线程**:只需切换上下文,开销小。 4. **通信方式**: - **进程**:通过 IPC 如管道、消息队列等,较复杂。 - **线程**:通过共享内存直接通信,相对简单,需同步机制。 线程共享的内存空间 线程共享的内存空间包括: - **代码段**:所有线程共享的程序指令。 - **数据段**:全局和静态变量,可供所有线程访问。 - **堆**:动态分配的内存,通过 `new` 或 `malloc` 分配,线程可共享。 共享内存需使用同步机制(如 mutexes, condition variables)控制访问,防止竞态条件。</mutex></thread>
点赞 回复 分享
发布于 10-15 21:31 广东
Elasticsearch(ES)性能好的原因主要有以下几点: 一、分布式架构 1. 水平扩展:ES 可以轻松地通过增加节点来扩展存储容量和处理能力。当数据量增加或查询负载变大时,可以简单地添加更多的服务器节点,系统会自动平衡数据和查询负载,确保性能不会因为数据增长而下降。 2. 数据分片与副本:数据被分成多个分片存储在不同的节点上,每个分片可以独立处理查询请求,从而提高查询的并行度。同时,副本的存在不仅提高了数据的可靠性,还可以在主分片出现故障时自动切换到副本分片,保证系统的可用性,并且副本分片也可以用于分担查询负载。 二、高效的数据存储和索引结构 1. 倒排索引:ES 使用倒排索引来快速定位包含特定关键词的文档。倒排索引将每个词与包含该词的文档列表关联起来,这样在进行关键词搜索时,可以快速找到相关的文档,而不需要遍历整个文档集合。 2. 基于 Lucene 的存储引擎:ES 底层基于 Lucene 库,Lucene 提供了高效的索引和查询算法。它对数据进行压缩存储,减少磁盘空间占用,同时在查询时能够快速解压和检索数据。 三、缓存机制 1. 文件系统缓存:ES 充分利用操作系统的文件系统缓存来提高数据的读取速度。经常访问的数据会被缓存在内存中,下次访问时可以直接从内存中获取,大大减少了磁盘 I/O 操作,从而提高性能。 2. 查询缓存:ES 可以缓存查询结果,对于重复的查询请求,可以直接返回缓存中的结果,而不需要再次执行查询操作。 四、优化的查询执行策略 1. 分布式查询执行:查询请求被分发到各个相关的节点上并行执行,然后将结果汇总返回给客户端。这种分布式查询执行方式可以充分利用集群的计算资源,提高查询的速度。 2. 近似聚合:对于一些聚合查询,ES 可以使用近似算法来快速返回近似结果,而不需要进行精确计算。这种方式在处理大规模数据时可以大大提高聚合查询的性能。 五、实时性支持 1. 近实时搜索:ES 能够在数据写入后很短的时间内(通常是 1 秒以内)就可以对其进行搜索。这是通过定期刷新索引和使用 translog 来保证的,新写入的数据会先写入 translog,然后在刷新时被纳入可搜索的索引中。 2. 实时更新:ES 支持对索引的实时更新,即可以在不中断搜索服务的情况下对数据进行添加、修改和删除操作。
点赞 回复 分享
发布于 10-15 21:33 广东
TCP(传输控制协议)的优点: 1. 可靠性高: - 在传输数据之前,会通过三次握手来建立连接,确保发送方和接收方都做好了通信准备,降低了数据丢失的风险。 - 在数据传递时,有确认、窗口、重传、拥塞控制等机制。接收方会对收到的数据进行确认,若发送方没有收到确认,会自动重传数据,保证数据能够完整、准确地到达接收方。拥塞控制机制可以根据网络状况调整数据发送的速率,避免网络拥塞导致的数据传输问题。 2. 数据顺序保证:能确保数据按照发送的顺序到达接收方,这对于一些对数据顺序有严格要求的应用(如文件传输、数据库操作等)非常重要。 3. 面向连接:通信双方在数据传输之前建立连接,并且在通信过程中保持连接状态,便于双方进行数据交互和状态管理,适用于需要长时间稳定通信的场景。 4. 广泛应用:是互联网中最常用的传输协议之一,几乎所有的网络应用程序都支持 TCP 协议,如网页浏览(HTTP)、电子邮件(SMTP、POP3)、文件传输(FTP)等。 TCP 的缺点: 1. 速度相对较慢: - 建立连接需要进行三次握手,断开连接需要进行四次挥手,这个过程会消耗一定的时间和网络资源,增加了数据传输的延迟。 - 数据传输过程中的确认、重传、拥塞控制等机制也会带来额外的开销,降低了数据传输的效率,特别是在实时性要求较高的场景下,可能会影响用户体验。 2. 占用系统资源高:为了维护每个连接的状态信息,需要在每台设备上占用大量的内存和 CPU 资源。当连接数量较多时,可能会导致系统性能下降。 3. 易受攻击:由于 TCP 存在确认机制、三次握手机制等,容易被攻击者利用,实现 DoS(拒绝服务攻击)、DDoS(分布式拒绝服务攻击)、CC(Challenge Collapsar,挑战黑洞攻击)等攻击,对网络安全造成威胁。 UDP(用户数据报协议)的优点: 1. 速度快: - 是一种无连接的协议,不需要建立连接和进行握手操作,数据可以直接发送,减少了连接建立和维护的时间开销,因此传输速度相对较快,适用于对实时性要求较高的应用,如在线游戏、实时视频会议、语音通话等。 - 没有 TCP 中的确认、重传、拥塞控制等机制,不会因为等待确认或进行拥塞控制而产生延迟,能够快速地将数据发送出去。 2. 资源占用少:UDP 的首部开销小,只有 8 个字节,相比 TCP 的 20 个字节的首部开销更小,对系统资源的占用较少。 3. 支持广播和多播:可以向多个接收方同时发送数据,适用于广播、组播等通信场景,例如在网络视频直播、网络音频广播等应用中,可以方便地将数据发送给多个用户。 4. 灵活性高:UDP 是一种简单的协议,没有太多的复杂机制和限制,开发者可以根据自己的需求自由地定义数据格式和传输方式,具有较高的灵活性。 UDP 的缺点: 1. 不可靠:不保证数据的可靠传输,可能会出现数据丢失、重复、乱序等问题。因为它没有确认机制,发送方无法知道数据是否被接收方正确接收,也不会对丢失的数据进行重传。 2. 缺乏拥塞控制:无法根据网络状况自动调整数据发送的速率,在网络拥堵的情况下,可能会导致更多的数据包丢失和网络性能下降。 3. 程序结构较复杂:由于 UDP 不保证数据的可靠性和顺序性,因此在一些对数据质量要求较高的应用中,需要开发者在应用层自行实现错误检测、流量控制、拥塞控制等功能,增加了程序开发的难度和复杂性。
点赞 回复 分享
发布于 10-15 21:43 广东

相关推荐

评论
11
12
分享
牛客网
牛客企业服务