扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

面试问题 | 网易这薪资,真的太香了吧

03/18 14:24
318
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

面试刷题网站:xiaolincoding.com

大家好,我是小林。

今天继续来填坑啦!之前跟大家盘 26 届校招薪资的时候,好多林友在评论区催更,说想看游戏厂的薪资情况,这不,直接安排上了!

今天咱们就来唠唠网易 26 届的校招薪资,我根据收集到的 base 薪资,大概分了三个档位:白菜、SP、SSP,表格里都给大家标清楚了,一目了然:

不得不说,网易不愧是游戏圈的老大哥,游戏开发方向的薪资是真给得狠!我整理的这些案例里,SSP 档的基本全是游戏开发岗,太顶了。

我特意去翻了下网易 25 年的财报,2025 年网易总净收入 1126 亿,其中 921 亿都是游戏和相关增值服务来的,占了全公司总营收的 82%!

说白了,游戏就是网易的顶梁柱、现金牛,那对游戏开发的核心人才,肯定舍得下重金挖,这薪资高也就一点不奇怪了。

对了,前段时间我训练营的老学员,还跟我聊了他入职网易一年的感受,说项目组氛围特别好,干的活儿也能实打实学到东西,组里还经常有技术分享,整体成长环境还是很在线的。

接下来咱们就来盘一盘网易游戏的一面面经,说真的,这份面经还挺有意思的 , 基本没问啥常规八股,全是揪着 Linux 命令往深了问。

其实也能理解,游戏服务器基本都是跑在 Linux 上的,日常干活不管是排查线上问题,还是项目上线、运维操作,全离不开 Linux 命令,所以人家一面就专门考这个,太实在了,完全是冲着干活能力来的。

我估摸着好多同学准备面试,都光顾着背 Java、MySQL 那些八股了,把 Linux 命令这块给疏忽了。这里跟大家说下,我图解网站里专门整理了 Linux 命令的面试真题,不熟悉的兄弟,跟着文章内容敲一敲练一练,应付基础面试绝对没问题。

https://www.xiaolincoding.com/interview/

话不多说,咱们直接看面经,发车!

网易游戏一面面经

1. nginx反向代理和正向代理分别是什么?

正向代理

咱们先说说正向代理吧。你可以这样理解,正向代理就是帮客户端干活的。比如说,你在公司想访问某些外网,但是公司有防火墙限制,这时候你就需要通过一个代理服务器去访问。这个代理服务器就相当于你的"中间人",你把请求发给它,它再帮你去外面的服务器拿数据回来。

关键点在于,外面的服务器只知道代理服务器的IP地址,根本不知道是你在访问它,你的真实身份被隐藏了。所以说正向代理是站在客户端这边的,客户端知道自己要访问谁,只是借助代理去完成这个事情而已。

反向代理

再说说反向代理。反向代理正好相反,它是帮服务器干活的。你访问一个网站的时候,其实你看到的可能只是nginx这个代理服务器,它后面可能有好几台真实的服务器。

你的请求先到nginx,然后nginx再决定把请求转发给哪台后端服务器处理。这里的关键是,作为客户端的你,根本不知道后面有几台服务器,也不知道它们的IP地址是什么,你只认识nginx这个代理。所以反向代理是站在服务器这边的,用来隐藏服务器的真实信息,同时还能做负载均衡、缓存这些事情。

咱们用个生活中的例子来理解会更直观一些。

    正向代理就像你要出国玩,但是签证比较麻烦,于是找了个旅行社代办,旅行社就是你的代理,帮你去办这个事。而反向代理呢,就像你去一个大公司谈业务,前台接待你,然后前台再帮你找合适的部门经理来对接,你根本不知道后面有多少个部门、多少个经理,你只跟前台打交道,前台就是那个反向代理。

所以说, 正向代理是客户端的代理,隐藏的是客户端的信息;反向代理是服务器端的代理,隐藏的是服务器的信息。nginx在实际应用中更多是作为反向代理来用的,做负载均衡、提升性能这些场景特别常见。

2. top怎么查看过去一段时间的平均负载和当前负载?

top命令在第一行就直接显示了系统的平均负载,分别是过去1分钟、5分钟、15分钟的load average值。这三个值能帮我们判断系统负载的趋势,如果1分钟的值比15分钟的值大很多,说明负载在上升;反过来就是负载在下降。至于当前的实时负载,可以看CPU使用率那一行,尤其是idle这个值,它越小说明当前系统越忙。

比如输入 top 命令之后,就会显示如下的内容:

top - 14:23:15 up 10 days,  3:45,  2 users,  load average: 0.52, 0.58, 0.63
Tasks: 178 total,   1 running, 177 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.3 us,  1.2 sy,  0.0 ni, 96.2 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  7821.5 total,   423.2 free,  4521.3 used,  2877.0 buff/cache
MiB Swap:  2048.0 total,  1876.5 free,   171.5 used.  2890.1 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
1234 root      20   0162940   5824   4012 S   3.2   0.1   0:12.34 nginx
5678 mysql     20   0184725642310828544 S   2.1   5.412:45.67 mysqld

重点看第一行,load average: 0.52, 0.58, 0.63 这三个数字非常关键。这就是系统的负载均值,但注意啊,这三个数字代表的是:

0.52 - 过去1分钟的平均负载

0.58 - 过去5分钟的平均负载

0.63 - 过去15分钟的平均负载

所以你看,top给你的已经是"过去一段时间"的平均负载了,只不过这个"一段时间"是固定的1分钟、5分钟、15分钟这三个时间窗口。这些数据是系统内核一直在统计的,不是top自己算出来的。

至于当前负载,你可以看第三行的CPU使用率部分:

%Cpu(s):  2.3 us,  1.2 sy,  0.0 ni, 96.2 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st

这里各项的意思是:

us (user): 2.3% - 用户进程占用CPU时间

sy (system): 1.2% - 系统内核占用CPU时间

id (idle): 96.2% - CPU空闲时间,这个数字越大说明越闲

wa (wait): 0.3% - 等待IO的时间

所以当前CPU使用率就是 100% - 96.2% = 3.8%,这就是此时此刻的负载情况。

那如果你真的想查看更长时间范围的历史负载数据怎么办呢?top就无能为力了,你得用其他命令:

$ uptime

输出类似这样:

14:23:15 up 10 days,  3:45,  2 users,  load average: 0.52, 0.58, 0.63

你看,uptime显示的负载数据跟top第一行其实是一样的,也是1分钟、5分钟、15分钟的平均值。

3.  给一个url怎么配置特定端口号?

最简单直接的方式,就是在URL里明确写出端口号。格式是这样的:

协议://域名或IP:端口号/路径

具体例子:

http://example.com:8080/api/users
https://192.168.1.100:9090/admin
http://localhost:3000/index.html

你看,就是在域名或IP后面加个冒号,然后跟上端口号。如果你不写端口号的话,浏览器会用默认端口,http默认是80,https默认是443。所以你访问 http://example.com 其实就是访问 http://example.com:80,只是省略了而已。

4. linux统计文件中某个url的次数?

方法一:grep + wc 组合(最简单直接)

假设你有个access.log日志文件,想统计某个URL出现了多少次:

$ grep -o "/api/user/login" access.log | wc -l

输出:156

这个命令的意思是,grep的-o参数只输出匹配的部分(而不是整行),然后用wc -l统计行数。每匹配到一次就输出一行,所以统计行数就是出现次数。

方法二:awk统计(最常用的专业方法)

这个是最经典的组合,sort + uniq -c + sort,我给你看个完整的例子:

$ cat access.log
192.168.1.100 - - [18/Sep/2020:10:30:25] "GET /api/user/login HTTP/1.1" 200
192.168.1.101 - - [18/Sep/2020:10:30:26] "GET /api/user/info HTTP/1.1" 200
192.168.1.100 - - [18/Sep/2020:10:30:27] "GET /api/user/login HTTP/1.1" 200
192.168.1.102 - - [18/Sep/2020:10:30:28] "GET /api/order/list HTTP/1.1" 200
192.168.1.100 - - [18/Sep/2020:10:30:29] "GET /api/user/login HTTP/1.1" 200

现在我想统计每个URL出现的次数:

$ cat access.log | awk '{print $7}' | sort | uniq -c | sort -nr

输出:

      3 /api/user/login
      1 /api/user/info
      1 /api/order/list

让我解释一下这个命令链1:

awk '{print $7}' - 提取第7列,也就是URL那部分

sort - 先排序,因为uniq只能对相邻的行去重

uniq -c - 去重并统计每行出现的次数

sort -nr - 按数字大小倒序排列,-n是按数字排序,-r是反转1

如果你只想看某个特定URL的次数,可以加个grep:

$ cat access.log | awk '{print $7}' | grep "/api/user/login" | wc -l

输出:

3

方式三: 统计访问最多的前10个URL

这个在分析热点请求的时候特别有用:

$ awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -10

假设有更多数据,输出可能是:

    523 /api/user/login
    412 /api/order/list
    305 /api/user/info
    198 /api/product/detail
    156 /api/cart/add
     89 /api/search
     67 /api/category/list
     45 /api/comment/list
     32 /api/user/logout
     28 /api/help

这样你就能一眼看出哪些接口是系统的热点请求了。

5. cd怎么返回上级目录?

最常用的就是用两个点:

$ pwd
/home/user/project/src/main

$ cd ..

$ pwd
/home/user/project/src

你看,cd .. 就是返回上一级目录。两个点 .. 在Linux里代表父目录(上级目录),一个点 . 代表当前目录。

6.  四个进程在四核CPU上运行,CPU利用率多少?

如果这4个进程都是CPU密集型的(比如科学计算、视频编码、加密解密),并且一直在进行计算,那么:

    4个进程 × 每个占用100% CPU = 每个核心100%利用率总体CPU利用率 = 100%

这种情况下,4个进程刚好占满4个核心,CPU利用率接近**100%**。

比如这样的场景:

$ top
PID  USER  PR  NI  VIRT   RES   SHR S %CPU %MEM
1234 user  20   0  100m   10m   5m  R 100.0 0.5  process1
1235 user  20   0  100m   10m   5m  R 100.0 0.5  process2
1236 user  20   0  100m   10m   5m  R 100.0 0.5  process3
1237 user  20   0  100m   10m   5m  R 100.0 0.5  process4

%Cpu(s): 100.0 us,  0.0 sy,  0.0 ni, 0.0 id

但现实中,大部分进程都不是纯CPU密集型的,它们会有:

磁盘IO等待(读写文件)

网络IO等待(网络请求)

sleep/wait状态(等待某些条件)

阻塞操作(等待用户输入、数据库查询等)

这种情况下,即使有4个进程在4核CPU上运行,CPU利用率可能只有10%-50%甚至更低

举个例子,如果是Web服务器进程:

$ top
PID  USER  PR  NI  VIRT   RES   SHR S %CPU %MEM
1234 user  20   0  500m  100m  20m  S  15.3 2.5  nginx
1235 user  20   0  500m  100m  20m  S  12.7 2.5  nginx
1236 user  20   0  500m  100m  20m  S   8.9 2.5  nginx
1237 user  20   0  500m  100m  20m  S  11.2 2.5  nginx

%Cpu(s): 12.0 us,  3.5 sy,  0.0 ni, 84.5 id

你看,4个进程加起来CPU占用才48.1%,总体CPU利用率只有15.5%左右,大部分时间CPU都在idle(空闲)状态。

mpstat 命令可以监控 cpu 的情况:

$ mpstat -P ALL 1
Linux 5.4.0 (server01)     01/15/2024

02:30:15 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02:30:16 PM  all   45.25    0.00    8.50    2.25    0.00    0.50    0.00    0.00    0.00   43.50
02:30:16 PM    0   50.00    0.00   10.00    3.00    0.00    1.00    0.00    0.00    0.00   36.00
02:30:16 PM    1   48.00    0.00    9.00    1.00    0.00    0.00    0.00    0.00    0.00   42.00
02:30:16 PM    2   42.00    0.00    7.00    2.00    0.00    1.00    0.00    0.00    0.00   48.00
02:30:16 PM    3   41.00    0.00    8.00    3.00    0.00    0.00    0.00    0.00    0.00   48.00

你看,即使4个核心都有进程在运行,总体CPU利用率也只有56.5%(100% - 43.5%idle),因为有iowait(IO等待时间)。

所以,不能简单地说CPU利用率是多少,这取决于进程的类型:

    如果是4个CPU密集型进程(比如科学计算、视频编码),在4核CPU上运行,理论上每个进程占用一个核心,CPU利用率可以达到接近100%如果是IO密集型或混合型进程(比如Web服务、数据库应用),进程会频繁等待IO操作,CPU大部分时间处于空闲状态,利用率可能只有20%-60%实际生产环境中,即使进程数等于核心数,CPU利用率很少能达到100%,因为进程都会有IO等待、上下文切换、系统调用等开销可以通过top、htop、mpstat等工具实时监控每个核心的利用率和进程状态来判断

7.  有没有遇到进程在CPU负载超过100%的情况?

在Linux系统中,CPU使用率是按核心数计算的。如果一个进程是多线程的,它可以同时使用多个CPU核心,这时候你在top或htop里看到的CPU使用率就会超过100%。

比如我之前遇到过一个Java应用,在top里看到是这样的:

$ top
PID  USER  PR  NI  VIRT   RES   SHR S %CPU %MEM     TIME+ COMMAND
1234 user  20   0  4.2g   2.1g  20m  R 385.7 26.5  120:45.67 java

你看,这个Java进程的CPU使用率是385.7%,说明它同时在使用将近4个CPU核心。

再用htop看得更清楚:

$ htop
  1[||||||||||||||||||||||||95.3%]   5[||||||||||||||||||||||||98.1%]
  2[||||||||||||||||||||||||97.8%]   6[||||||               25.6%]
  3[||||||||||||||||||||||||96.4%]   7[||||                18.3%]
  4[||||||||||||||||||||||||94.7%]   8[|||||               21.2%]

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 1234 user       20   0  4.2G  2.1G  20M  R 385.7 26.5 2:00.67 /usr/bin/java -jar app.jar

你可以看到CPU 1-4几乎都被这个进程占满了。

相关推荐