【自用】网友面经分享——游戏服务端开发工程师——广州诗悦网络科技有限公司

前言:自己在网络收集的面经系列,仅自用。

来源:牛客网

注:默认按时间顺序,新的在最前面。

 

 

 

 

 

一、一面HR面

一面HR;

学校经历,项目经历,

不涉及技术,排序算法,

转语言,转erlang,还有三个月培训期。

常见的排序算法有以下几种:

1. 冒泡排序(Bubble Sort):通过相邻元素的比较和交换来进行排序,每一轮将最大的元素沉到数组末尾。基本思想是从头开始比较相邻的元素,如果逆序则交换,直到最后一个元素。

2. 选择排序(Selection Sort):每一轮选择最小的元素放在已排序部分的末尾。基本思想是找到未排序部分的最小元素,与未排序部分的第一个元素交换位置。

3. 插入排序(Insertion Sort):将未排序部分的元素逐个插入到已排序部分的合适位置。基本思想是将当前元素与已排序部分的元素进行比较,找到合适的位置插入。

4. 快速排序(Quick Sort):通过选取一个基准元素,将数组分为左右两部分,左边部分的元素都小于等于基准元素,右边部分的元素都大于基准元素,然后递归地对左右部分进行排序。基本思想是分治法。

5. 归并排序(Merge Sort):将数组递归地分成两半,分别进行排序,然后将排序好的两个子数组合并成一个有序的数组。基本思想也是分治法。

6. 堆排序(Heap Sort):将数组构建成一个最大堆,然后将堆顶元素与最后一个元素交换位置,再把剩余元素重新调整为最大堆,继续进行交换和调整,直到排序完成。基本思想是利用堆的性质进行排序。

7. 希尔排序(Shell Sort):将待排序的数组按照一定的间隔分组,对每组进行插入排序,然后逐渐缩小间隔,直到间隔为1,最后进行一次插入排序。基本思想是插入排序的改进。

以上是常见的排序算法及其基本思想,不同的排序算法在时间复杂度和空间复杂度上有所差异,根据具体情况选择合适的排序算法。

风中追絮

02-28 19:05门头沟学院 计算机类发布于河南

诗悦网络一面-游戏服务端开发工程师

就是很常规的hr面试,问一些学校经历,项目经历,不涉及技术 但是入职后要转语言,转erlang,还有三个月培训期,有些介意转语言,后面再面试看看吧,积攒一些经验

 

 

二、一面

一面

自我介绍

进程和线程的区别

上下文切换?

快排

链表、二叉树、哈希表的特点

项目中的难点

最大的收获

对游戏后端开发的了解

对游戏行业的了解

反问:

技术栈(需要转 Erlang,C++和 lua 实现帧同步)

进程和线程的区别

进程和线程都是操作系统中的概念,用于描述正在运行的程序。

进程是计算机中正在运行的程序的实例。它是一个独立的执行单位,拥有自己的内存空间、文件描述符、安全权限等资源。进程之间是相互独立的,彼此之间不能直接访问对方的内存空间,必须通过进程间通信机制来进行数据交换。

线程是进程中的一个执行路径,一个进程可以包含多个线程。线程共享进程的资源,包括内存空间、文件描述符、安全权限等。不同的线程可以同时执行不同的任务,彼此之间可以直接访问共享的内存空间,通过共享数据来进行通信和同步。

进程和线程的区别主要包括以下几个方面:
1. 资源占用:进程拥有独立的内存空间,线程共享进程的资源。
2. 创建销毁开销:创建线程的开销比创建进程的开销小,销毁线程的开销也比销毁进程的开销小。
3. 切换开销:线程切换的开销比进程切换的开销小,因为线程共享相同的地址空间和其他资源,切换时只需保存和恢复少量的上下文信息。
4. 通信同步:线程之间可以通过共享内存进行直接通信,而进程之间需要使用进程间通信机制进行通信。
5. 安全性:由于线程共享进程的资源,所以多个线程之间需要进行同步,以避免竞态条件等问题。而进程之间由于相互独立,不需要考虑这些问题。

总的来说,进程和线程在资源占用、创建销毁开销、切换开销、通信同步和安全性等方面存在差异。选择使用进程还是线程,需根据具体的应用场景和需求来决定。

快排

快速排序(Quick Sort):通过选取一个基准元素,将数组分为左右两部分,左边部分的元素都小于等于基准元素,右边部分的元素都大于基准元素,然后递归地对左右部分进行排序。基本思想是分治法。

链表、二叉树、哈希表的特点

链表:
- 链表是由一系列节点组成的数据结构,每个节点包含一个数据元素和一个指向下一个节点的指针。
- 链表的特点是插入和删除元素的时间复杂度为O(1),但访问元素的时间复杂度为O(n),其中n是链表的长度。
- 链表可以动态地分配内存空间,不需要在创建时确定大小。

二叉树:
- 二叉树是一种特殊的树型结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。
- 二叉树的特点是在最坏情况下,插入、删除和查找操作的时间复杂度为O(log n),其中n是二叉树中节点的数量。
- 二叉树可以用于实现排序、搜索和快速查找等算法。

哈希表:
- 哈希表是一种根据键(key)直接访问值(value)的数据结构,通常使用数组来实现。
- 哈希表的特点是插入、删除和查找操作的平均时间复杂度为O(1),具有快速的访问速度。
- 哈希表使用哈希函数将键映射到数组的索引,因此需要解决哈希冲突的问题,如链表法或开放寻址法。

项目中的难点

 

最大的收获

 

对游戏后端开发的了解

游戏后端开发指的是负责游戏服务器端代码的开发工作。游戏后端开发主要包括以下几个方面的内容:

1. 数据库设计与管理:游戏中需要保存大量的用户数据和游戏状态数据,后端开发人员需要设计合适的数据库结构,并使用数据库管理系统进行数据的增删改查操作。

2. 服务器架构设计:游戏后端开发需要考虑服务器的架构设计,包括负载均衡、高可用性、容灾备份等,以保证游戏的稳定运行和良好的用户体验。

3. 网络通信:游戏后端开发需要实现服务器与客户端之间的网络通信,包括数据的传输和解析、消息的处理和分发等。

4. 游戏逻辑开发:游戏后端开发需要实现游戏的逻辑功能,包括角色管理、物品系统、任务系统、战斗系统等,以提供给客户端进行交互。

5. 安全防护:游戏后端开发需要考虑服务器的安全性,包括对数据的加密、防止外部攻击等措施的实施。

6. 性能优化:游戏后端开发需要对服务器性能进行优化,以提高游戏的响应速度和并发能力。

7. 运维与监控:游戏后端开发需要进行服务器的运维工作,包括服务器的部署、监控和故障排查等。

总体而言,游戏后端开发需要具备扎实的编程基础和数据结构算法知识,熟悉数据库管理和网络通信技术,并具备良好的团队协作能力和问题解决能力。

对游戏行业的了解

一些关于游戏行业的基本了解:

1. 游戏行业的规模:游戏行业是全球最大的娱乐产业之一,根据统计,全球游戏市场的规模已经超过了数千亿美元,并且在不断增长。

2. 游戏类型:游戏行业包括各种类型的游戏,如动作游戏、冒险游戏、角色扮演游戏、射击游戏、策略游戏等。每个类型的游戏都有各自的特点和玩法。

3. 平台:游戏可以在不同的平台上进行,包括个人电脑、游戏主机(如PlayStation、Xbox)、移动设备(如智能手机、平板电脑)等。不同的平台有不同的游戏开发和发布方式。

4. 游戏开发:游戏的开发过程通常包括游戏设计、编程、美术设计、音效设计等多个方面。游戏开发团队通常由程序员、设计师、艺术家、音效师等人员组成。

5. 游戏发行:游戏开发完成后,需要进行发行和推广。游戏发行可以通过游戏平台、游戏发行商等渠道进行,以便玩家能够购买和下载游戏。

6. 游戏市场:游戏市场竞争激烈,游戏开发者需要关注市场需求和玩家喜好,以开发出受欢迎的游戏。随着技术的不断进步,增强现实(AR)、虚拟现实(VR)等新技术也逐渐应用于游戏领域。

 

 

本分侠__OPPO内推点我

2022-10-21 19:32OPPO_后端工程师发布于广东

诗悦网络 游戏服务端开发 一面

一面

自我介绍

进程和线程的区别

上下文切换?

快排

链表、二叉树、哈希表的特点

项目中的难点

最大的收获

对游戏后端开发的了解

对游戏行业的了解

反问:

技术栈(需要转 Erlang,C++和 lua 实现帧同步)

二面拒

 

 

三、

一面

实习项目

mq

面试官没开摄像头

二面

薪资要高了

mq

在IT行业中,MQ通常指的是消息队列(Message Queue)。

消息队列是一种常用的通信模式,用于在分布式系统中进行异步通信。它允许应用程序之间通过发送和接收消息进行解耦,即发送者将消息发送到消息队列,接收者从队列中获取消息进行处理,这样发送者和接收者之间可以解耦,不需要直接相互通信。

消息队列可以提供可靠的消息传递机制,即使在发送者和接收者之间出现故障或网络延迟的情况下,消息仍然可以被可靠地传递和处理。此外,消息队列还可以实现消息的持久化、消息的顺序性、消息的广播等特性,使得系统具备更高的可伸缩性和可靠性。

在实际应用中,MQ通常由一个中间件(如RabbitMQ、Apache Kafka、ActiveMQ等)来实现,它提供了消息队列的基本功能,并通过高效的消息传递机制来支持分布式系统中的异步通信需求。开发人员可以使用相应的MQ中间件来实现分布式系统中的消息传递和处理逻辑。

 

匿名牛油

2022-10-20 11:59

不愿透露姓名的神秘牛友

发布于广东

诗悦网络面经

背景:双非二本

面的后台开发

一面:

主要问题实习项目

重点问了mq的一些知识

体验很不好,面试官不开摄像头

二面:

hr小姐姐挺好看的,体验也不错

问了薪资,应该是我要高了

过了几天就感谢信了

 

四、

一面,技术面

1. 自我介绍

2. 实习做了啥

3. 问实习的工作细节(问了很长时间)

4. 改bug的流程

5. 集合,hashmap

6. spring,aop、ioc

7. springmvc

到这里,我已经寄了捏,spring的八股我是一点都没有背哦!

8. 反问环节:

    1、是否转语言?转erlang

    2、听闻有php的,要转吗?有的部门要,做游戏开发的部门不用php。

评论:

一面是业务面 二面才是hr面

实习做了啥

 

问实习的工作细节(问了很长时间)

 

改bug的流程

在软件项目中,修复bug的流程通常包括以下几个步骤:

1. 发现bug:通常是由测试人员、用户反馈或者代码审查等方式发现bug。一旦发现bug,应该尽快记录bug的详细信息,包括复现步骤、环境信息、错误日志等。

2. 编写重现步骤:为了更好地理解和复现bug,开发人员需要根据bug的描述和相关信息,编写一个能够重现bug的步骤。这样能够确保在解决bug时能够准确地定位和修复问题。

3. 分析和定位:开发人员需要通过调试、日志分析、代码审查等方式,定位到造成bug的具体原因。这需要仔细检查相关代码和数据,以及理解程序的执行流程。

4. 修复bug:一旦定位到bug的原因,开发人员需要修复问题。这可能涉及更改代码、修复逻辑错误、修复数据错误等。修复后,应该进行单元测试,确保修复后的代码没有引入新的问题。

5. 提交和验证:修复完成后,开发人员需要将修复的代码提交到版本控制系统,确保代码能够被整合到主干或者相关分支中。然后,测试人员需要验证修复的bug是否真正解决了,通过重新执行重现步骤或者其他测试方法来验证。

6. 关闭bug:一旦修复的bug经过验证,可以将其标记为已解决,并关闭相关的bug报告。同时,可以记录修复的细节和相关的信息,以备将来的参考。

需要注意的是,修复bug的流程可能因项目的规模、团队的组织方式以及开发流程的不同而有所差异。但以上步骤通常是修复bug的一般流程。另外,及时记录、跟踪和解决bug对于保证软件质量和用户满意度非常重要。

集合,hashmap

集合是一种用来存储多个元素的数据结构。它提供了一系列方法来操作和管理这些元素,如添加、删除、查找、遍历等操作。集合可以用来存储不同类型的元素,并且不限制元素的个数。

HashMap是Java中的一种集合实现,它基于哈希表的数据结构。HashMap允许存储键值对(key-value pair),并且支持快速的插入、删除和查找操作。在HashMap中,每个键(key)都是唯一的,而值(value)可以重复。通过计算键的哈希值,HashMap可以将键值对存储在数组中的特定位置,从而实现快速的查找和访问。HashMap在实现上使用了哈希函数和链表(或红黑树)来解决哈希冲突的问题。

spring,aop、ioc

在Java开发中,Spring框架是一个流行的开源框架,用于构建企业级应用程序。在Spring框架中,AOP(面向切面编程)和IOC(控制反转)是两个重要的概念。

AOP(Aspect-Oriented Programming)面向切面编程:
AOP是一种编程范式,用于将横切关注点(如日志记录、事务管理、安全性等)与主要业务逻辑分离。通过AOP,可以将这些横切关注点集中管理,而不需要在业务逻辑中重复编写这些代码。在Spring框架中,AOP通过代理模式实现,可以在方法执行前、执行后或异常发生时执行额外的逻辑。

IOC(Inversion of Control)控制反转:
IOC是一种设计原则,也称为依赖注入(Dependency Injection)。它通过将对象的创建和依赖关系的管理交给容器来实现。在传统的编程模式中,对象之间的依赖关系由对象自己管理,而在IOC中,容器负责创建对象并将依赖关系注入到对象中。这样可以降低对象之间的耦合性,使代码更加灵活可维护。

在Spring框架中,IOC是其核心功能之一。通过IOC容器,可以将对象的创建和依赖关系的管理交给Spring容器来处理。开发者只需要配置好对象之间的依赖关系,Spring容器就会根据配置自动创建和管理对象。

总结:
AOP是一种编程范式,用于将横切关注点与主要业务逻辑分离,通过代理模式实现。
IOC是一种设计原则,用于将对象的创建和依赖关系的管理交给容器来实现,降低对象之间的耦合性。在Spring框架中,IOC是其核心功能之一。

springmvc

Spring MVC是一个基于Java的开源Web框架,用于开发Web应用程序。它是Spring框架的一部分,提供了一种模型-视图-控制器(Model-View-Controller,MVC)的架构模式来组织和管理Web应用的开发。

Spring MVC的设计目标是使开发者能够更轻松地构建灵活、可扩展和可维护的Web应用程序。它通过将应用程序的不同方面分离,实现了高内聚和低耦合的设计。

在Spring MVC中,模型(Model)表示应用程序的数据和业务逻辑,视图(View)负责展示数据给用户,并接收用户的输入,控制器(Controller)作为核心组件,接收用户的请求,协调模型和视图的交互。

Spring MVC提供了一系列的注解和配置选项,可以灵活地配置和定制应用程序的行为。它支持多种视图技术,如JSP、Thymeleaf、Freemarker等。同时,Spring MVC还提供了强大的处理请求和响应的机制,包括路由、数据绑定、表单验证、拦截器等,使开发者能够更好地处理用户请求和响应。

总的来说,Spring MVC是一个功能强大、灵活易用的Web框架,广泛应用于Java Web开发中,帮助开发者构建高质量的Web应用程序。

 

熊猫同学

2022-10-17 18:00蚌埠坦克学院 计算机类发布于广东

关注

诗悦网络 一面凉经

为什么!我的面试和你们的不一样!

我这边一面是技术面,我还以为是HR面呢,乱乱的。。。

1. 自我介绍

2. 实习做了啥

3. 问实习的工作细节(这里问了很长时间)

4. 改bug的流程

5. 熟悉的集合有哪些,说说hashmap

6. 说说spring,aop、ioc之类的

7. springmvc

到这里,我已经寄了捏,spring的八股我是一点都没有背哦!

8. 反问环节:

    1、是否转语言?转erlang

    2、听闻有php的,要转吗?有的部门要,做游戏开发的部门不用php。

 

 

五、

9.9 笔试 好像都没怎么做

 

9.20 一面 15分钟

面试官应该是中年广东人,有点口音,有的地方没听清楚,但感觉人挺好的。

1.自我介绍。

2.多线程高并发邮件发送。

3.mysql分组。

4.js同步异步。

5.三范式。

6.反问:了解一下后台开发的内容。

 

答得不好,但感觉面试官也没什么想问的欲望?有些内容忘了。

 

9.30 晚上收到感谢信,结束。

评论:

实习都能毁约

 

多线程高并发邮件发送

- 多线程(Multithreading):多线程是指在一个程序中同时执行多个线程,每个线程都有独立的执行路径。通过多线程的并发执行,可以提高程序的执行效率和资源利用率。多线程可以在单个应用程序中同时处理多个任务,每个线程负责一个特定的任务。多线程编程可以提升应用程序的响应性和并发处理能力。

- 高并发(High Concurrency):高并发是指系统能够同时处理大量的并发请求。在一个高并发的系统中,存在大量的用户或者客户端同时向系统发送请求,而系统需要能够快速响应并处理这些请求。高并发系统需要具备良好的性能、可伸缩性和稳定性,以确保在高负载情况下仍能保持较好的响应速度和稳定性。

- 邮件发送:邮件发送是指通过电子邮件协议(如SMTP)将邮件从一个发送者发送到一个或多个接收者的过程。邮件发送涉及构建邮件内容、设置邮件头部信息(如发件人、收件人、主题等),并通过邮件服务器将邮件传递给接收者。邮件发送可以用于个人通信、商务通信、系统通知等各种场景,是现代通信中重要的一部分。在软件开发中,可以使用邮件发送功能来实现系统的通知、报警、验证等功能。

mysql分组

在MySQL中,分组是一种对查询结果进行分组汇总的操作。通过使用GROUP BY子句,可以将结果集按照指定的列进行分组,然后对每个分组进行聚合计算。

以下是使用GROUP BY子句进行分组的一般语法:

```sql
SELECT 列1, 列2, ... FROM 表名 GROUP BY 列1, 列2, ...
```

在GROUP BY子句中,列1、列2等表示需要分组的列名。查询结果将按照这些列进行分组,并将每个分组的结果进行聚合计算。可以在SELECT子句中使用聚合函数(如SUM、COUNT、AVG等)来计算每个分组的聚合值。

以下是一个示例,假设有一个名为"orders"的表,包含订单信息,我们想要按照客户ID(customer_id)对订单进行分组,并计算每个客户的订单总数:

```sql
SELECT customer_id, COUNT(*) as total_orders FROM orders GROUP BY customer_id;
```

在上述示例中,我们使用GROUP BY子句按照customer_id列进行分组,并使用COUNT(*)函数计算每个分组的订单总数。查询结果将返回每个客户ID以及对应的订单总数。

需要注意的是,GROUP BY子句中列出的列名必须是SELECT子句中出现的列或者是聚合函数的参数。同时,可以使用HAVING子句对分组结果进行过滤。

希望以上信息对你有所帮助!如有任何疑问,请随时提出。

js同步异步

JavaScript中的同步和异步是指代码执行的方式。

同步代码是按照顺序执行的,每一行代码执行完后才会执行下一行代码。在同步代码执行期间,代码会阻塞程序的执行,直到当前行代码执行完成。

异步代码是在执行过程中可以同时处理其他任务,不需要等待当前任务执行完成。异步代码通常使用回调函数、Promise对象或者async/await来处理。在异步代码执行期间,程序可以继续执行其他任务,不会被当前任务所阻塞。

例如,以下是同步代码的示例:

```javascript
console.log("开始");

function syncFunction() {
  console.log("同步函数执行中");
}

syncFunction();

console.log("结束");
```

输出结果为:

```
开始
同步函数执行中
结束
```

而以下是异步代码的示例:

```javascript
console.log("开始");

function asyncFunction() {
  setTimeout(function() {
    console.log("异步函数执行中");
  }, 2000);
}

asyncFunction();

console.log("结束");
```

输出结果为:

```
开始
结束
异步函数执行中
```

可以看到,在异步代码中,setTimeout函数被调用后,并不会立即执行回调函数,而是等待2秒后再执行。在这2秒的等待期间,程序继续执行后面的代码,不会被阻塞。

三范式

三范式(Third Normal Form,3NF)是关系数据库设计中的一种规范化(Normalization)标准。它是在数据规范化的过程中的第三个级别。

三范式要求一个关系数据库中的每个非主属性都不依赖于其它非主属性,即非主属性之间不能存在传递依赖关系。具体来说,三范式有以下要求:

1. 第一范式(1NF):每个属性都是原子性的,不能再分解成更小的数据项。

2. 第二范式(2NF):满足第一范式的基础上,非主属性必须完全依赖于关系的候选键,而不能依赖于部分候选键。也就是说,非主属性与主键之间必须是直接关联,不能通过其他非主属性之间的关联来间接关联。

3. 第三范式(3NF):满足第二范式的基础上,非主属性之间不能存在传递依赖。也就是说,如果A非主属性依赖于B非主属性,B非主属性又依赖于C非主属性,那么A非主属性应该直接依赖于C非主属性,而不是通过B非主属性间接依赖于C非主属性。

通过遵循三范式,可以减少数据冗余和数据更新异常,提高数据库的数据一致性和可靠性。同时,三范式也是数据库设计的一个重要指导原则。

 

滑大小稽

 

2022-09-29 16:02恒生电子股份有限公司_交付工程师发布于江苏

关注

诗悦 后台开发 一面 面经 已凉

9.9 笔试 好像都没怎么做

9.20 一面 15分钟

面试官应该是中年广东人,有点口音,有的地方没听清楚,但感觉人挺好的。

1.自我介绍。

2.多线程高并发邮件发送。

3.mysql分组。

4.js同步异步。

5.三范式。

6.反问:了解一下后台开发的内容。

 

答得不好,但感觉面试官也没什么想问的欲望?有些内容忘了。

9.30 晚上收到感谢信,结束。

 

六、网络服务端一面

问web项目
并发并行
Linux常用操作命令
栈队列、使用场景
C++面对对象三大特性
代码学习途径
了解哪些算法、最有意思的算法
专业和程序相关性
web项目最难的点
为什么存在锁、作用
python了解情况
什么时候搞c++
问项目2
玩啥游戏

评论:

一面技术面20分钟

二面才是HR面

感谢信

问web项目

并发并行

Linux常用操作命令

栈队列、使用场景
 

C++面对对象三大特性

代码学习途径
 

了解哪些算法、最有意思的算法
 

专业和程序相关性
 

web项目最难的点

为什么存在锁、作用

python了解情况
 

什么时候搞c++
 

问项目2

eeefsh

2022-09-26 10:46成都理工大学发布于四川

关注

诗悦网络服务端一面面经9.23

1、自我介绍
2、问web项目
3、并发并行
4、Linux常用操作命令
5、栈队列、使用场景
6、c++面对对象三大特性
7、代码学习途径
8、了解哪些算法、最有意思的算法
9、专业和程序相关性
10、web项目最难的点
11、为什么存在锁、作用
12、python了解情况
13、什么时候搞c++
14、问项目2
15、玩啥游戏
16、反问

 

七、

Java是学校学的么     了解过哪些后端语言

作为一个的学生,我对一些后端语言有一定了解。以下是我所了解的几种后端语言:

1. Java: Java是一种广泛使用的高级编程语言,适用于开发各种类型的应用程序。它具有跨平台性和面向对象的特性,广泛应用于企业级应用程序开发。

2. Python: Python是一种简单易学的编程语言,具有清晰简洁的语法。它被广泛应用于Web开发、数据分析和人工智能等领域。

3. PHP: PHP是一种用于Web开发的脚本语言,主要用于服务器端编程。它具有广泛的应用领域,特别是在构建动态网站方面非常流行。

4. Ruby: Ruby是一种简洁优雅的面向对象编程语言,特别适用于快速开发Web应用程序。它的流行框架Ruby on Rails提供了一种高效的开发方式。

5. C#: C#是微软开发的一种通用型编程语言,主要用于Windows平台上的应用程序开发。它具有强大的面向对象特性和丰富的框架支持。

这只是我了解的几种后端语言,当然还有其他语言如Go、Node.js等也非常流行。不同的后端语言适用于不同的场景和需求,选择合适的语言取决于具体的项目和个人偏好。

 


对OOP的理解,用自己的理解说    面向对象解决最大的问题

面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将程序设计问题分解为对象的集合,并通过对象之间的交互来解决问题。在OOP中,对象是程序的基本单元,具有状态(属性)和行为(方法),对象之间通过消息传递来进行交互。

我个人对OOP的理解是,它是一种将现实世界的事物抽象为对象,通过封装、继承和多态等特性来组织和管理代码的方法。OOP的核心思想是将问题分解为一系列的对象,并让对象之间通过相互协作来解决问题。这种方式使得代码更加模块化、可维护性更高,并且能够更好地应对复杂性。

面向对象编程可以解决许多问题,其中最大的问题是代码重用性和扩展性。通过将问题分解为对象,我们可以创建可复用的代码模块,这些模块可以在不同的上下文中重复使用,从而提高开发效率。此外,通过继承和多态等特性,我们可以通过扩展现有的对象或创建新的对象来适应变化的需求,使得代码更加灵活和可扩展。

另外,面向对象编程还可以提高代码的可维护性和可读性。通过封装对象的状态和行为,我们可以隐藏实现细节,只暴露必要的接口,使得代码更加易于理解和修改。同时,面向对象编程也提供了良好的代码组织和结构化的方式,使得团队协作更加高效。

总之,面向对象编程是一种强大的编程范式,通过对象的抽象和组织来解决问题,提供了代码复用性、扩展性和可维护性等诸多优势,使得软件开发更加高效和可靠。


项目登陆的安全设计   如何应对恶意破解,比如硬性破解登陆

对于项目的安全设计,特别是针对登陆的安全设计,以下是一些建议:

1. 强密码策略:确保用户设置强密码,包括至少8个字符、包含大写字母、小写字母、数字和特殊字符等复杂要求。

2. 密码加密存储:用户密码在数据库中应加密存储,例如使用哈希函数进行加密,并且确保每个用户的加密盐值都是唯一的。

3. 登陆限制:在登陆功能中,应设置登陆次数限制,例如连续多次失败登陆则锁定账户一段时间,以防止暴力破解。

4. 双因素认证:引入双因素认证可以增加登陆的安全性,例如通过手机验证码、指纹识别、面部识别等方式进行验证。

5. 防止暴力破解:采取措施来防止暴力破解,例如设置登陆失败的延迟时间、验证码验证等。

6. 安全审计日志:记录用户的登陆行为,包括登陆时间、IP地址等信息,以便进行安全审计和追踪。

7. 定期更新:及时修复系统中的安全漏洞,并定期更新系统以保持安全性。

8. 安全测试:定期进行安全测试,包括渗透测试、代码审查等,以发现潜在的安全风险。

在应对硬性破解登陆方面,可以考虑以下措施:

1. 账户锁定:在多次登陆失败后,暂时锁定账户一段时间,以防止暴力破解。

2. IP限制:限制来自特定IP地址的登陆尝试,可以通过白名单、黑名单或IP访问控制列表来实现。

3. 图形验证码:在登陆页面添加图形验证码,要求用户输入正确的验证码后才能进行登陆。

4. 人机验证:使用人机验证技术,例如谷歌的reCAPTCHA,以识别并拦截恶意机器人登陆尝试。

5. 登陆历史检测:检测异常登陆行为,例如从不同国家或地区连续登陆等,及时发现并采取相应的安全措施。

总之,为了保护项目登陆的安全性,需要综合运用以上各种安全设计和策略,并定期进行安全评估和测试,及时修复潜在的安全漏洞。

 



讲一下大概的登陆流程    JWT的验证方式

登陆流程通常包括以下步骤:

1. 用户输入用户名和密码,并点击登陆按钮。
2. 服务器接收到登陆请求后,验证用户提供的用户名和密码是否正确。
3. 如果验证通过,服务器生成一个用于身份验证的令牌,并将其返回给客户端。
4. 客户端将令牌保存在本地,通常是在浏览器的Cookie或本地存储中。
5. 在后续的请求中,客户端将令牌作为身份验证凭证发送给服务器。
6. 服务器接收到请求后,从请求中获取令牌,并验证其有效性。
7. 如果令牌有效,服务器允许请求继续执行相应的操作。
8. 如果令牌无效或过期,服务器拒绝请求并要求客户端重新进行身份验证。

JWT(JSON Web Token)是一种用于身份验证和授权的开放标准。它由三部分组成:头部(Header)、负载(Payload)和签名(Signature)。JWT的验证方式主要涉及到验证签名的有效性。

具体的JWT验证方式如下:

1. 客户端在请求头中携带JWT令牌,通常是在Authorization字段中进行传递。
2. 服务器接收到请求后,从请求头中获取JWT令牌。
3. 服务器解析JWT令牌,提取出头部和负载信息。
4. 服务器使用事先存储的密钥来验证签名的有效性。
5. 如果签名有效,服务器可以信任JWT,并继续处理请求。
6. 如果签名无效,服务器拒绝请求,并返回相应的错误信息。

JWT的验证方式是通过对签名的验证来确保令牌的真实性和完整性。通过使用密钥进行签名和验证,可以防止令牌被篡改或伪造。


实习最大的收获    数据结构随便讲讲

 


三范式    索引类型   索引失效   SQL执行工作流程   主从同步   MySQL乐观锁悲观锁   数据库冷备热备

0.

三范式(Third Normal Form,3NF)是关系数据库设计中的一种规范化(Normalization)标准。它是在数据规范化的过程中的第三个级别。

三范式要求一个关系数据库中的每个非主属性都不依赖于其它非主属性,即非主属性之间不能存在传递依赖关系。具体来说,三范式有以下要求:

1. 第一范式(1NF):每个属性都是原子性的,不能再分解成更小的数据项。

2. 第二范式(2NF):满足第一范式的基础上,非主属性必须完全依赖于关系的候选键,而不能依赖于部分候选键。也就是说,非主属性与主键之间必须是直接关联,不能通过其他非主属性之间的关联来间接关联。

3. 第三范式(3NF):满足第二范式的基础上,非主属性之间不能存在传递依赖。也就是说,如果A非主属性依赖于B非主属性,B非主属性又依赖于C非主属性,那么A非主属性应该直接依赖于C非主属性,而不是通过B非主属性间接依赖于C非主属性。

通过遵循三范式,可以减少数据冗余和数据更新异常,提高数据库的数据一致性和可靠性。同时,三范式也是数据库设计的一个重要指导原则。

 

1. 索引类型:在数据库中,常见的索引类型包括B树索引、哈希索引和全文索引。B树索引是最常见的索引类型,适用于等值查询和范围查询;哈希索引适用于等值查询,但不支持范围查询;全文索引适用于文本搜索。

2. 索引失效:索引失效指的是在查询中无法使用索引来加速查询,导致查询性能下降。常见的索引失效情况包括对索引列进行了函数操作、使用了索引列进行了类型转换、索引列参与了OR操作、索引列参与了不等于操作等。

3. SQL执行工作流程:SQL执行的一般工作流程包括语法解析、语义分析、执行计划生成、执行计划优化和执行计划执行。首先,数据库会对SQL语句进行语法解析,确保语法正确。然后,进行语义分析,检查表名、列名等是否存在以及权限是否满足。接下来,生成执行计划,选择最优的执行路径。然后,优化执行计划,对执行计划进行优化以提高性能。最后,执行计划被执行,从数据库中检索或修改数据。

4. 主从同步:主从同步是指数据库系统中的主数据库(Master)和从数据库(Slave)之间的数据一致性保证机制。主数据库负责接收和处理所有的写操作,然后将写操作的日志(二进制日志)传输给从数据库,从数据库根据主数据库的日志进行重放,以保持数据的一致性。主从同步可以提高数据库的读取性能、容灾能力和负载均衡。

5. MySQL乐观锁悲观锁:MySQL中的乐观锁和悲观锁是两种并发控制的方式。乐观锁是基于数据版本号或时间戳的方式,它假设并发操作很少会发生冲突,只在提交时检查数据是否被其他事务修改。悲观锁则是在读取数据时就加上锁,假设并发操作会经常发生冲突,所以在读取数据时先加锁,保证数据的一致性。

6. 数据库冷备热备:数据库备份方式中的冷备和热备是指备份数据库的状态。冷备份是在数据库停止运行的情况下进行的备份,备份期间数据库是不可用的。热备份是在数据库正常运行的情况下进行的备份,备份期间数据库仍然可用。冷备份的优点是备份过程简单,不会对数据库的运行产生影响;热备份的优点是备份过程不会中断数据库的服务,可以实现实时备份和快速恢复。

以上是对索引类型、索引失效、SQL执行工作流程、主从同步、MySQL乐观锁悲观锁以及数据库冷备热备的简要解释。如需进一步了解,可以参考相关的数据库和数据库管理系统的资料。


Http协议   两个无序数组找交集   如果新建空间不能超过25%

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的应用层协议,它是万维网的基础,用于客户端和服务器之间的通信。HTTP协议基于请求-响应模型,客户端发送请求到服务器,服务器返回响应给客户端。

关于两个无序数组找交集的问题,可以使用不同的方法来解决。以下是两种常见的解决方案:

1. 哈希表法:
   - 遍历第一个数组,将数组元素作为键存储到哈希表中。
   - 遍历第二个数组,检查数组元素是否存在于哈希表中,如果存在,则为交集元素。
   - 时间复杂度:O(m+n),其中m和n分别是两个数组的长度。

2. 排序法:
   - 对两个数组分别进行排序。
   - 使用双指针,分别指向两个数组的起始位置。
   - 比较指针所指向的元素,如果相等,则为交集元素,并将指针都向后移动一位;如果不相等,则将较小元素的指针向后移动一位。
   - 时间复杂度:O(mlogm + nlogn),其中m和n分别是两个数组的长度。

如果要求在新建空间不能超过25%的情况下找到交集,可以使用双指针法结合原地修改数组的方式来解决。具体步骤如下:

1. 对两个数组进行排序。
2. 初始化两个指针,分别指向两个数组的起始位置。
3. 通过比较指针所指向的元素,如果相等,则为交集元素,并将其存储到其中一个数组中,同时将两个指针都向后移动一位。
4. 如果不相等,将较小元素的指针向后移动一位。
5. 重复步骤3和步骤4,直到其中一个数组遍历完毕。
6. 返回存储交集的数组。

这种方法是原地修改数组,不需要额外的空间,因此满足新建空间不能超过25%的要求。

需要注意的是,这种方法只能找到交集,并不能保证交集的顺序。如果需要保持交集的顺序,可以使用哈希表法或排序法。

 

评论:

楼主:三面,没怎么问技术,重点问为什么做后端,接受加班吗

楼主:后端开发,用的PHP,校招有淘汰机制,慎入。

楼主:签诺瓦了

楼主:感谢信了

勤劳打代码

2022-03-20 12:50诺瓦星云_软件

关注

面试复盘|诗悦网络

3.14一面
总时长20分钟反问2分钟  HR初面  介绍共有三轮面试(HR初面-技术面-项目组大佬面)

大学成绩如何    本专业擅长的课程    秋招为什么没签

可以接受PHP么   反问会切换么(后面会根据业务做go)

在开发过程中遇到的问题及解决方案,技术或者团队都可以

如何应对deadline    过程的动力来自哪里      对工作城市的选择    职业规划

什么样的平台能够吸引到你   了解诗悦么   玩什么游戏

外界认为游戏公司节奏快,加班多有什么看法    之前实习的工作强度

实习离职原因

反问:语言转换周期(暂不明确,可以技术面时候问)  不做全栈吧(不存在这种情况)
然后HR姐姐表示时间原因先到这里

3.18二面
总时长28分钟  4分钟反问  技术面

Java是学校学的么     了解过哪些后端语言

对OOP的理解,用自己的理解说    面向对象解决最大的问题

项目登陆的安全设计   如何应对恶意破解,比如硬性破解登陆

讲一下大概的登陆流程    JWT的验证方式

实习最大的收获    数据结构随便讲讲

三范式    索引类型   索引失效   SQL执行工作流程   主从同步   MySQL乐观锁悲观锁   数据库冷备热备

Http协议   两个无序数组找交集   如果新建空间不能超过25%

反问:主要语言,版本(PHP,新项目7.2,老项目5.6)   应届生做什么(PHP,培养后有考核)
如果通过还有几轮(还有一个终面)


3.23终面
总时长24分钟   面试官挺帅的

实习有什么收获   为什么选择Java后端,还接触过什么后端语言   有想过换方向么

为什么想做后端没选其他    有没有排斥的语言技术栈    后端主要的挑战点,想提升的方面

除了游戏行业还面过其他行业么     都认为游戏加班比较重,你怎么看    一般九点下班可以么

觉得面试诗悦带给你不同的体验,让你觉得不同的点     面试感触如何,有哪些需要加强的

认为诗悦网络面试的专业性如何      薪资这块是硬性要求,还是可以接受一些降低

反问:主要用PHP做什么(对外的restful接口,可能用PHP或Go)
 

3.25感谢信

不知道怎么不匹配,不过已经签约其他公司了,躺平状态


感觉加班应该挺厉害的

 

 

八、

线程与进程的区别

进程和线程都是操作系统中的概念,用于描述正在运行的程序。

进程是计算机中正在运行的程序的实例。它是一个独立的执行单位,拥有自己的内存空间、文件描述符、安全权限等资源。进程之间是相互独立的,彼此之间不能直接访问对方的内存空间,必须通过进程间通信机制来进行数据交换。

线程是进程中的一个执行路径,一个进程可以包含多个线程。线程共享进程的资源,包括内存空间、文件描述符、安全权限等。不同的线程可以同时执行不同的任务,彼此之间可以直接访问共享的内存空间,通过共享数据来进行通信和同步。

进程和线程的区别主要包括以下几个方面:
1. 资源占用:进程拥有独立的内存空间,线程共享进程的资源。
2. 创建销毁开销:创建线程的开销比创建进程的开销小,销毁线程的开销也比销毁进程的开销小。
3. 切换开销:线程切换的开销比进程切换的开销小,因为线程共享相同的地址空间和其他资源,切换时只需保存和恢复少量的上下文信息。
4. 通信同步:线程之间可以通过共享内存进行直接通信,而进程之间需要使用进程间通信机制进行通信。
5. 安全性:由于线程共享进程的资源,所以多个线程之间需要进行同步,以避免竞态条件等问题。而进程之间由于相互独立,不需要考虑这些问题。

总的来说,进程和线程在资源占用、创建销毁开销、切换开销、通信同步和安全性等方面存在差异。选择使用进程还是线程,需根据具体的应用场景和需求来决定。

进程间通信的方式

进程间通信(Inter-Process Communication,IPC)是指不同进程之间进行数据交换和通信的机制。常见的进程间通信方式包括以下几种:

1. 管道(Pipe):管道是一种半双工的通信方式,可以在同一台计算机上的父子进程或者兄弟进程之间进行通信。

2. 命名管道(Named Pipe):命名管道是一种特殊的文件,进程可以通过对文件的读写进行通信。命名管道可以在不同计算机之间进行通信。

3. 消息队列(Message Queue):消息队列是一个消息的链表,可以在不同进程之间传递消息。进程可以通过读取和发送消息来进行通信。

4. 共享内存(Shared Memory):共享内存是一块被多个进程共享的内存区域,进程可以直接读写这块内存来进行通信。需要注意的是,共享内存不提供同步和互斥机制,需要进程自己进行同步控制。

5. 信号量(Semaphore):信号量是一种用于进程间同步和互斥的机制。进程可以通过对信号量进行P操作(减操作)和V操作(加操作)来实现进程间的同步和互斥。

6. 套接字(Socket):套接字是一种网络编程中常用的进程间通信方式,可以在不同计算机之间进行通信。套接字可以通过网络协议进行数据传输。

以上是常见的进程间通信方式,每种方式都有其适用的场景和特点。选择合适的进程间通信方式取决于具体的需求和环境。

项目中用到了分布式技术,分布式与单体的区别

分布式系统和单体系统是两种不同的软件架构模式,它们在设计原则、架构风格、功能扩展性等方面存在一些区别。

1. 架构风格:
   - 单体架构:单体应用是将整个应用作为一个单一的可执行文件或模块部署在单个服务器上的架构。所有的功能模块都运行在同一个进程中,共享相同的资源和数据库。
   - 分布式架构:分布式系统是将应用拆分为多个独立的子系统(或服务),每个子系统可以运行在不同的服务器上,通过网络进行通信和协同工作。

2. 可扩展性:
   - 单体架构:单体应用的可扩展性有限,因为所有的功能模块都运行在同一个进程中,当用户量增加或业务复杂度提高时,需要进行垂直扩展(增加服务器的硬件资源)。
   - 分布式架构:分布式系统具有良好的可扩展性,可以通过水平扩展(增加服务器的数量)来应对高并发访问和大规模数据处理的需求。

3. 容错性:
   - 单体架构:单体应用存在单点故障的问题,当应用中的某个功能模块发生故障,可能会导致整个应用无法正常工作。
   - 分布式架构:分布式系统通过将应用拆分为多个子系统,每个子系统都可以独立运行和部署,相互之间存在冗余和备份,从而提高了系统的容错性和可用性。

4. 开发和维护成本:
   - 单体架构:单体应用的开发相对较简单,因为所有的功能模块都在同一个进程中运行。但随着业务复杂度提高,单体应用的维护成本也会逐渐增加。
   - 分布式架构:分布式系统的开发和维护相对复杂,需要考虑分布式事务、网络通信、数据一致性等问题,但可以通过拆分应用为独立的子系统来降低单个系统的复杂度。

总的来说,分布式系统相对于单体系统具有更好的可扩展性、容错性和可用性,但开发和维护成本相对较高。在实际项目中,根据业务需求、系统规模和可用资源等因素,选择合适的架构模式进行开发和部署。

分布式项目中不同微服务模块之间的通信怎么解决

在分布式项目中,不同微服务模块之间的通信可以通过以下几种方式来解决:

1. RESTful API:使用RESTful API作为微服务之间的通信协议。每个微服务可以提供一组API,其他微服务可以通过HTTP请求来调用这些API,实现数据的传递和交互。

2. 消息队列:使用消息队列作为微服务之间的通信中介。每个微服务可以向消息队列发送消息,其他微服务可以监听消息队列并消费这些消息,实现异步通信和解耦。

3. 服务注册与发现:使用服务注册与发现机制来实现微服务之间的通信。每个微服务在启动时会将自己的信息注册到服务注册中心,其他微服务可以通过服务注册中心来发现和调用需要的微服务。

4. RPC框架:使用RPC框架(如gRPC、Dubbo等)来实现微服务之间的远程过程调用。每个微服务可以通过定义接口和数据结构来暴露自己的服务,其他微服务可以通过生成的客户端代码来调用这些服务。

以上这些方式都可以根据具体的项目需求和技术栈来选择和组合使用,以实现高效的微服务通信和协作。

项目中遇到了什么问题,怎么解决

 

HashMap讲一讲

 

在学校期间个人的时间规划

 

 

牛客102331714号

2021-12-23 09:54Java

关注

诗悦服务端开发面经

9号收到的笔试邀请,22号经过三轮面试拿到了offer,整个流程走的还是比较快的。

一面(技术面)
自我介绍

线程与进程的区别

进程间通信的方式

项目中用到了分布式技术,分布式与单体的区别

分布式项目中不同微服务模块之间的通信怎么解决

项目中遇到了什么问题,怎么解决

HashMap讲一讲

在学校期间个人的时间规划

反问

二面(HR面)
自我介绍
选择游戏后端的原因
期望薪资的理由

职业规划

优点和缺点

校园经历

转语言的看法

反问

 

三面(技术面?)
自我介绍
对于加班的看法
期望薪资的理由
对转语言的看法(erlang)

反问

 

三轮面试都想记录下来,不知道为什么总是忘了点开始录音的键😓,所以上面面试中的提问还不够完整。不过诗悦总体给我的感受还是比较好的,面试官都很平易近人,不会有压迫感,最后收到oc的时候,HR小姐姐也非常详细地的说了公司的福利制度与新人培养制度。最后祝愿大家都能找到好工作吧!

 

 

九、

  • 问项目

    • 为什么要做这个项目?

    • 让你记忆深刻的bug、难点

    • 怎么解决的

 

  • 有玩什么游戏吗?

 

  • 日常学习方式

 

  • 数据库两种存储引擎区别

数据库存储引擎是用于管理和操作数据库存储的软件组件。在关系型数据库中,常用的存储引擎有两种:InnoDB和MyISAM。它们在功能和特性上有一些区别。

1. InnoDB存储引擎:
- 支持事务处理:InnoDB是ACID(原子性、一致性、隔离性和持久性)兼容的存储引擎,支持事务处理,可以保证数据的完整性和一致性。
- 行级锁定:InnoDB使用行级锁定,可以在并发访问的情况下提供更高的性能和并发处理能力。
- 外键支持:InnoDB支持外键约束,可以保证数据的完整性和一致性,提供了较好的数据关联性。
- Crash Recovery:InnoDB具有崩溃恢复功能,可以在数据库意外关闭后保证数据的完整性和一致性。

2. MyISAM存储引擎:
- 不支持事务处理:MyISAM不支持事务处理,无法保证数据的完整性和一致性。
- 表级锁定:MyISAM使用表级锁定,只能在整个表上进行锁定,对于并发访问的情况下,可能会导致性能瓶颈。
- 不支持外键:MyISAM不支持外键约束,无法保证数据的完整性和一致性,需要应用程序自行处理数据关联性。
- 较快的读取速度:MyISAM在读取数据方面具有较好的性能,适用于读取频率高的场景。

综上所述,InnoDB适用于对事务处理和数据完整性要求较高的场景,而MyISAM适用于读取频率高、对事务处理要求不高的场景。根据具体需求和应用场景,选择合适的存储引擎可以提高数据库的性能和可靠性。

  • tcp三次握手和四次挥手

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议。在建立和终止TCP连接过程中,使用了三次握手和四次挥手的机制。

1. 三次握手(Three-Way Handshake):
   - 第一次握手:客户端发送一个带有SYN(同步序列号)标志的数据包给服务器,并进入SYN_SENT状态。
   - 第二次握手:服务器接收到客户端的SYN数据包后,回复一个带有SYN/ACK标志的数据包给客户端,并进入SYN_RECV状态。
   - 第三次握手:客户端接收到服务器的SYN/ACK数据包后,发送一个带有ACK标志的数据包给服务器,确认连接建立,并进入ESTABLISHED状态。服务器接收到ACK后,也进入ESTABLISHED状态,此时TCP连接建立成功。

2. 四次挥手(Four-Way Handshake):
   - 第一次挥手:当客户端需要关闭连接时,发送一个FIN(结束)标志的数据包给服务器,进入FIN_WAIT_1状态。
   - 第二次挥手:服务器接收到FIN后,发送一个ACK(确认)标志的数据包给客户端,进入CLOSE_WAIT状态。此时服务器已经准备好关闭连接,但客户端可能还有数据需要发送。
   - 第三次挥手:当服务器也准备好关闭连接时,发送一个FIN标志的数据包给客户端,进入LAST_ACK状态。
   - 第四次挥手:客户端接收到服务器的FIN后,发送一个ACK标志的数据包给服务器,确认收到关闭请求。客户端进入TIME_WAIT状态,等待一段时间后,关闭连接。服务器接收到ACK后,也关闭连接。

需要注意的是,四次挥手过程中,客户端和服务器都有可能发送最后一个ACK丢失,此时会触发超时重传机制,确保连接的可靠关闭。

三次握手和四次挥手的目的是为了确保客户端和服务器之间的连接建立和关闭是可靠的,保证数据的完整性和可靠性。

  • 输入一个网址到页面展现出来的具体过程

将一个网址输入到页面展现出来的具体过程可以分为以下几个步骤:

1. DNS解析:首先,浏览器会解析输入的网址中的域名部分,通过DNS(Domain Name System)查询得到对应的IP地址。这个查询过程中,浏览器会向本地DNS服务器发送请求,如果本地DNS服务器没有缓存该域名对应的IP地址,则会向上级DNS服务器逐级查询,直到找到对应的IP地址。

2. 建立TCP连接:一旦浏览器获得目标服务器的IP地址,它会通过TCP(Transmission Control Protocol)建立与服务器的连接。这个过程涉及到三次握手,即浏览器向服务器发送连接请求,服务器返回确认,最后浏览器再次确认连接。

3. 发送HTTP请求:建立TCP连接后,浏览器会向服务器发送HTTP(Hypertext Transfer Protocol)请求,请求的内容包括请求方法(GET、POST等)、请求头(包含一些请求的配置信息)和请求体(POST请求时携带的数据)。

4. 服务器处理请求:服务器接收到浏览器发送的HTTP请求后,会根据请求的方式和路径执行相应的处理逻辑。这可能涉及到读取数据库、执行业务逻辑等操作。

5. 返回HTTP响应:服务器根据处理请求的结果生成HTTP响应,包括状态码、响应头和响应体。状态码表示请求的处理结果,响应头包含了一些响应的配置信息,响应体则是服务器返回给浏览器的数据。

6. 接收HTTP响应:浏览器接收到服务器返回的HTTP响应后,会解析响应头和响应体。根据响应头中的一些配置信息,浏览器可能会进行一些特殊的处理,比如重定向、缓存等。

7. 渲染页面:最后,浏览器会根据接收到的响应体中的HTML、CSS和JavaScript等内容,进行页面的解析、布局和渲染,最终将页面展现给用户。

以上是一个简化的描述,实际的过程可能还涉及到一些细节和优化。整个过程中,浏览器、服务器、网络等各个环节的性能和稳定性都会影响页面展现的速度和质量。

  • 为什么想从事游戏服务端开发?

作为一个热爱游戏的人,我一直对游戏开发充满了兴趣。游戏服务端开发是我在大学学习计算机科学期间接触到的一个领域。我发现游戏服务端开发不仅需要具备扎实的编程技巧,还需要对游戏设计和玩家体验有深入的了解。我喜欢通过编写代码来创建游戏中的各种功能和系统,并且我认为这是一项充满挑战和乐趣的工作。

另外,游戏服务端开发也是一个不断创新和发展的领域。随着技术的不断进步,游戏的规模和复杂度也在不断增加。作为游戏服务端开发者,我将有机会学习和应用最新的技术来解决各种问题,并且能够与其他开发者一起合作,共同打造出令人惊叹的游戏体验。

最重要的是,我希望通过游戏服务端开发,能够为玩家们带来快乐和享受。我相信游戏是一种娱乐和交流的方式,而游戏服务端开发正是实现这一目标的重要组成部分。我希望能够为玩家们创造出稳定、流畅和富有创意的游戏体验,让他们能够在游戏中找到乐趣和成就感。

综上所述,我选择从事游戏服务端开发是因为我对游戏充满热爱,对技术充满兴趣,并且希望通过我的工作为玩家们带来快乐和满足感。

  • 了解游戏服务端开发的相关技术和算法吗

是的,我了解游戏服务端开发的相关技术和算法。

游戏服务端开发涉及到多种技术和算法,以下是一些常见的技术和算法:

1. 网络通信:游戏服务端需要实现与客户端的网络通信,常用的技术包括TCP和UDP协议。对于实时性要求较高的游戏,常常使用UDP协议来实现快速数据传输。

2. 多线程和并发:为了提高游戏的性能和吞吐量,游戏服务端通常需要使用多线程和并发技术。常见的技术包括线程池、锁和信号量。

3. 数据库管理:游戏服务端需要处理大量的数据,包括用户账号、角色信息、游戏道具等。常见的数据库管理技术包括MySQL、Redis等。

4. 数据同步和一致性:在多人在线游戏中,游戏服务端需要实现数据同步和一致性,以确保所有玩家在游戏中看到的数据是一致的。常见的算法包括分布式锁、分布式事务等。

5. 游戏逻辑设计:游戏服务端需要实现游戏的逻辑,包括角色移动、碰撞检测、技能释放等。常见的算法包括A*寻路算法、碰撞检测算法等。

6. 安全性和防作弊:游戏服务端需要实现安全性和防作弊机制,以确保游戏的公平性和用户账号的安全。常见的技术包括加密算法、防火墙、反作弊系统等。

以上只是一些常见的技术和算法,实际的游戏服务端开发还涉及到很多其他方面的知识和技术。

  • 个人经历之类的

 

在广州,薪资一般

面的服务端开发

一面完成后要等多久:不要很久的,差不多一天

 

lky_super

2021-11-15 20:46Java

关注

诗悦网络 服务端开发

一面 11.15 20分钟左右

忘记录音了,大概是以下的问题

  • 问项目

    • 为什么要做这个项目?

    • 让你记忆深刻的bug、难点

    • 怎么解决的

  • 有玩什么游戏吗?

  • 日常学习方式

  • 数据库两种存储引擎区别

  • tcp三次握手和四次挥手

  • 输入一个网址到页面展现出来的具体过程

  • 为什么想从事游戏服务端开发?

  • 了解游戏服务端开发的相关技术和算法吗

  • 个人经历之类的

  • 反问

    • 技术栈(erlang)

    • 新人培养体系(一个月左右的新人训练营、培训)

    • 游戏公司服务端开发比较看重什么?

      • 服务于产品,根据产品需求选择着重点(单机or联机)

二面 11.17 30分钟

主要问校园的经历,过程挺轻松的,不会有太大的压力,就是聊天的感觉

 

三面 11.23 20分钟左右

你主要学的java,那我问些java相关的问题

  • 对Spring的理解,优缺点

  • 多线程(线程创建方式,区别)

  • 笔试题:找到单向链表倒数第k个节点,说思路

  • 中序遍历

  • 算法

    • 冒泡排序

    • 快排

  • 设计模式

  • jvm垃圾回收

  • 值类型和引用类型的区别

  • String是什么类型

  • String a = "abc"和String b = "abc",a和b是否相同

  • 分页是怎么实现的

  • 项目

    • 什么性质的:毕业设计还是练手的

    • 亮点和难点

  • 反问

    • 团队规模:一个项目的话会有5-8个服务端开发,具体看项目的大小

    • 工作体验:挺好的,对新人比较重视,有比较不错的培养体系

总的来说,诗悦网络的面试感受挺好的,一面和三面技术面试官也比较和善,不会刁难人,二面hr小姐姐虽然全程带着口罩,但是可以看出是全程微笑着的,除了要转语言(erlang),氛围感觉挺好的。

 

十、原帖链接

诗悦网络一面-游戏服务端开发工程师_牛客网

诗悦网络 游戏服务端开发 一面_牛客网

诗悦网络面经_牛客网

诗悦网络 一面凉经_牛客网

诗悦 后台开发 一面 面经 已凉_牛客网

诗悦网络服务端一面面经9.23_牛客网

面试复盘|诗悦网络_牛客网

诗悦服务端开发面经_牛客网

诗悦网络 服务端开发_牛客网

来自牛客网,共九个:八个为服务端开发,一个网络服务端。

 

 

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值