Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浩抒己见(回复私信):一个程序员的水平能差到什么程度?

浩抒己见(回复私信):一个程序员的水平能差到什么程度?

作者头像
浩说编程
发布于 2021-08-16 09:34:24
发布于 2021-08-16 09:34:24
5560
举报
文章被收录于专栏:Java经验之谈Java经验之谈

据我所知,大概就是,一个if循环19.8亿次,而且7年没人敢动....

真事,就出现在知名游戏大厂R星的知名大作 GTA 5 中。

而且,19.8亿次的if循环,今天仍然在世界各地的玩家cpu上跑着。

具体是怎么回事呢?

Please wait forever to play Reddit、Steam、HackerNews上,无数玩家吐槽抱怨…… 进游戏少则等5、6分钟,多则20分钟。 终于,一个黑客大哥实在忍不了,用逆编译器逐条查看运行情况,终于找到原因。 原来,R星(游戏开发商RockStar)写的代码太低效,加载时,一个if语句竟然循环了19.8亿次…. 幕后黑手:谁占用大量时间?加载GTA 5 Online到底有多慢?

硬件拉满的土豪玩家请无视 Reddit相关板块发起的调查中,超过80%的玩家,都要等3分钟以上,有的甚至超过15分钟。 而且,从7年前Online上线到今天,这个情况丝毫没有改善。暴躁的,已经骂起了脏话……

但奇怪的是,如果你选择是故事模式(单机版),加载就会快很多,感觉甚至像两个不同的工作室开发的游戏。具体到这位黑客大哥的例子,他自己的硬件配置如下:

CPU,是老而弥坚的AMD FX-8350,2012年上市,采用“推土机”架构,超频潜力惊人。 显卡还是GTX 1070。 这样今天看起来老旧的配置,打开单机版GTA 5需要1分10秒,而加载联机版则6分钟起。黑客大哥用了最简单的Windows任务管理器,来判断联机版GTA 5在启动时,都调用了哪些计算机资源。

在1分钟的时间分界线上,之前是加载的是单机和联机版通用的基础内容,之后是联机版独有的内容。 可以看到,联机版GTA 5,加载时调用大量CPU资源至少长达4分钟之久。 而同时,内存、GPU、硬盘的使用情况几乎没有明显变化。 所以,问题大概率出在代码上。 “R星代码写太烂!” 黑客大哥在开扒R星代码之前,就说: 我闻到一股烂代码的味道….. 为了找出到底那一部分程序卡住了CPU,他使用了工具Luke Stackwalker,对CPU任务堆栈进行采样分析。 Luke Stackwalker对于闭源应用程序,可以转存正在运行的进程堆栈,和当前指令指针的位置,以一定时间间隔建立一个调用树。 最后将数据整合,就可以得到程序运行统计数据。从结果上看,一共有两个函数“卡住”了CPU:

于是他使用专业的代码拆解工具,给GTA 5来了一个“开膛破肚”。 沿着调用栈往下走,发现问题出在一个sscanf函数上。

sscanf的功能是读取格式化的字符串中的数据,而在GTA 5中,它正在读取的是一个10M左右,有63000多个条目的JSON文件。 这个文件到底是干什么用的?黑客大哥推测,这可能是游戏内购商店的相关内容。

在具体运行时,sscanf对于每个有效值,逐个读取每一个字符,然后返回结果,之后指针移向下一个值,循环往复……直到把10M文件全部扫一遍。 再看第二个问题,这是一个存储命令,对象是item,具体是什么不得而知。 但是保存前,有一个if语句,逐一比较item内项目的哈希值,检查它们是否出现在某一列表中。 按照他的计算,这一步if,要执行(63000^2+63000)/2 = 1984531500次!没错,等待加载前的十多分钟里,GTA 5用你的CPU,执行了19.8亿次if命令。

如此简单粗暴的编程思路,让这位老哥哭笑不得: 既然对象有唯一哈希值,那为什么不用hash map???

(hashmap根据hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序不确定。)

至于为什么这样,有网友推测最开始,if的循环次数并没有这么多,而是随着开发,条目不断增多,最后到了积重难返的地步。

而之前的代码结构,谁也不愿意去动。

就这样,19.8亿次if,一遍遍在世界各地玩家cpu上上演。。。

这是不是堪称游戏开发史上最意外的“屎山”代码?

问题解决,加载时间节省70% 至于第一个问题,黑客大哥采用hook大法,不一一读取字符串,而是: hook strlen “缓存 “字符串起始和当前长度。 如果在字符串范围内函数在此被调用,返回缓存的值 至于if语句问题,就更直接了——完全跳过重复检查,利用hash map插入项目,因为这些值是唯一的。最后的结果如下:

现在,GTA 5联机版加载,从原来的6分钟,下降到现在的1分50秒!而且,用的还是七八年前的硬件配置。在此,应该手动@R星:你学废了吗?

这位黑客大哥在博文中没有留下任何身份信息,也没有透露用的反编译工具,但是做好事不留名的他,把打好包的工具上传到了Github,玩家通过一行代码就能下载。

这件事惊动了R星,于是,在之后的版本里,

R星终于官宣准备修复了!

主动改善玩家游戏体验?不存在的。

要主动,哪里还要等七年?

这篇揭R星老底的帖子在全网大火后,R星不得不出面应对。

在和黑客大哥联系后,R星认可了他的改进方法,宣布在后续更新中修复相关问题,并且还慷慨的给他付了一笔1万美元的奖金。

鉴于R星失误实在太低级太离谱,而这位老哥的方法又太有效,以致无数玩家称他“功德无量”。

如果平均给每个玩家节省10秒,全球500万玩家一天就能节约5000万秒,一年中,节约的总时间大概能有数十年。相当于挽救了十多个人的生命!

“事了拂衣去,不留功与名”,这位黑客大哥被无数玩家膜拜。当然大家也不忘再把R星拖出来“鞭尸”。

有人吐槽,GTA 5仅2020年就买了2000万份,累计销量更是达到1.4亿份,R星每年都能从这个项目上赚数亿美元,但是却不肯花几分钟去解决这么一个低级错误,实在可耻。

还有人抨击R星几乎从不与玩家社区互动,玩家提的意见也从来充耳不闻,直到这次被被黑客嘲讽打脸,才不得不出来表态。

事后,黑客大哥还透露了一丝身份信息,原来他人在拉脱维亚。

拉脱维亚是波罗的海国家,原来是前苏联加盟国之一。在网上搜索相关信息,可以发现“拉脱维亚黑客”,几乎是和俄罗斯黑客一样传奇神秘的存在。

有网友爆料,在拉脱维亚,普通程序员工资平均3-4k欧元(23000-31000人民币)。

而他领到的这1万美元奖金,相当于三四个月工资了。

提前领了一笔“年终奖”,黑客大哥表示很开心。同时他也说,将密切关注GTA 5未来更新,一丝不苟的检查修复情况。

不知道他还能不能从R星领走更多奖金

(注:所谓“屎山”,是程序员间流传的一个梗,指陈年累月且复杂低效的代码,因为改动成本巨大,所有人避之不及。)

这么惊人的内幕,还不分享给你的小伙伴涨涨见识吗?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浩说编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
GTA 5祖传「屎山」代码终于修复!R星认可黑客方案,还给他发了1万美元奖金
贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 折磨全球无数GTA 5玩家的联机版超长加载时间问题,终于要修复了。 什么?R星(游戏开发商RockStar)主动改善玩家游戏体验?不存在的。 △Please wait forever to play 打开GTA 5联机版,要跑19.8亿次if语句,一支烟的功夫游戏都加载不完。 这堪称游戏开发史上最大的“屎山”代码,存在了7年,R星从没想过要修复…. 玩家对GTA 5联机版可谓又爱又恨,有人甚至破口大骂: 直到一位黑客大哥路过,实在忍不了恶臭
量子位
2023/03/10
3.2K0
GTA 5祖传「屎山」代码终于修复!R星认可黑客方案,还给他发了1万美元奖金
震惊!程序员的水平能差到什么程度?
如果说大家不相信,有人能写循环19.8亿次的if循环,那你更无法想象这还是写在GTA 5里的代码。
陈宇明
2022/04/06
6400
震惊!程序员的水平能差到什么程度?
知乎热问:一个程序员的水平能差到什么程度?
想起了一件十多年前的往事,有一次帮客户的Java项目组升级框架。 入场之后屡次听到项目组的运维小哥抱怨war包过大,导致每次发布要等很久很久,用过WebSphere的童鞋可能知道我在说什么。 那么,这war有多大呢? 接近2G!!!??? 富有求知欲的我于是下决心去研究下这鸽子,,不对,这war包为什么这么大? 草草一挖,果然就在里面发现了宝贝。 原来war包里还藏着两个程序安装包。 一个是JDK1.4; 另一个是PES2006,,,,实....实况足球?! 图片 根据SVN的提交记录,肇事的大哥很快就被
程序猿DD
2022/06/27
3070
知乎热问:一个程序员的水平能差到什么程度?
一个程序员的水平能差到什么程度?
当我们还处于菜鸟阶段,我们是这样的:别人分给我们什么任务,我们不管三七二十一首先想着就是具体怎么实现?(用什么技术)
陶朱公Boy
2023/08/22
2210
一个程序员的水平能差到什么程度?
困扰 80% 玩家,GTA 5 祖传 7 年的加载时间问题,现被一玩家缩短了 70%
3 月初,游戏玩家 tostercx 宣称发明了一种新方法,可以把《侠盗猎车手 Online》(检查 GTA 5)的加载时间缩短 70%。对玩家群体来说,这无疑是一个好消息。
深度学习与Python
2021/03/30
1.8K0
困扰 80% 玩家,GTA 5 祖传 7 年的加载时间问题,现被一玩家缩短了 70%
真·摸鱼带师!每天工作10分钟年薪57万,这位程序员火了
金磊 博雯 发自 凹非寺 量子位 | 公众号 QbitAI 每天工作10分钟,还能拿57万年薪? 最近,这么一个看似“天上掉馅饼”的故事迅速在外网走红,在Reddit点赞超过8万,评论5000多条。 当然,四处撒币的天使老板是不存在的,故事中的“馅饼”是这位主人公自己捏的—— 用一个GitHub上只能卖30块左右的脚本,把自己一天的全工作流程给自动化了! 鉴于公司老板对于技术“一窍不通”,再加上疫情远程在家工作,这位大哥现在每天只需花10分钟检查一下脚本生成的日志无误,就可以光明正大地摸鱼打游戏了! 一
量子位
2022/03/04
4620
12 年的祖传“屎山”代码,年收入竟超 1.4 亿元?程序员劝“接盘侠”:赶紧退退退!
大数据文摘转载自AI科技大本营 整理:郑丽媛 出品:CSDN 讲道理,许多做过代码届“接盘侠”的程序员们,某种程度上可能十分理解电影中执着于毁灭世界的反派:“与其在现有基础上修改,还不如直接把这堆祖传代码毁灭再重建!” 祖传代码,从字面意思来看,就是一代代老程序员们留下来的“宝藏”代码——这些长年累月的代码中存有很多隐患,后来的“接盘侠”们要么无从下手,要么一改就崩,几乎可以说是程序员们的“终极噩梦”,因此也被称作“屎山代码”。 这不,最近又有一个“倒霉蛋”火上了 HN 热榜:“我继承了我见过的最差的代码
大数据文摘
2022/09/26
1.4K0
12 年的祖传“屎山”代码,年收入竟超 1.4 亿元?程序员劝“接盘侠”:赶紧退退退!
一个程序员的水平能差到什么程度?
来源:www.zhihu.com/question/314644210 逛知乎的时候,看到一个有意思的话题:一个程序员的水平能差到什么程度? 看了下面的回答,不得不说,真是小刀拉屁股,开了眼了! 整理了三个高赞的回答,让我们一起来见识一下。 回答1(Benny): 想起了一件十多年前的往事,有一次帮客户的Java项目组升级框架。 入场之后屡次听到项目组的运维小哥抱怨war包过大,导致每次发布要等很久很久,用过WebSphere的童鞋可能知道我在说什么。 那么,这war有多大呢? 接近2G!!!??? 富
张俊红
2022/07/25
2390
一个程序员的水平能差到什么程度?
GTA5快速进入线上模式
话不多说,上资源: 链接:https://pan.baidu.com/s/1oWE6L0J1s33R_2zfcxiG_A 提取码:b9tf 解压后,先启动GTA5,进入游戏菜单界面 然后打开Xenos(32位)或者Xenos64(64位) 将文件夹下的GTAO_Booster.dll拖动进列表框内
全栈程序员站长
2022/07/02
2K0
GTA5快速进入线上模式
GTA6发售悬了!遭遇游戏史上最大泄密,18岁黑客手握源码公开勒索开发商R星
梦晨 衡宇 发自 凹非寺 量子位 | 公众号 QbitAI 全球游戏玩家盼了八年的GTA6,恐怕又要延期了。 黑客一次性放出90段游戏泄露视频,已在各大平台疯传,官方删都删不过来。 这件事的影响力不只在游戏圈,也受到大量主流媒体、商业媒体关注—— 涉及的游戏开发商Rockstar Games(简称R星),其母公司Take-Two Interactive是一家市值200亿美元的上市公司。 系列前作GTA5最早于2013年推出,截至2021年底累计销量超1.6个亿风靡全球,并靠出售线上道具的模式持续盈利,狂赚
量子位
2022/09/20
4660
GTA6发售悬了!遭遇游戏史上最大泄密,18岁黑客手握源码公开勒索开发商R星
泄露GTA6的18岁少年黑客,被判在医院“终生监禁”!
作为 R 星旗下最知名的游戏系列之一,GTA 一直以来都备受游戏玩家的喜爱和期待:
Python编程与实战
2024/01/04
4730
泄露GTA6的18岁少年黑客,被判在医院“终生监禁”!
一个 程序员 的水平能差到什么程度?尼玛,都是人才呀... ...
昨天在公司摸鱼逛知乎的时候,看到了一个话题“一个程序员的水平能差到什么程度?”,看完,不得不说个个都是人才呀。给大家整理了一个高赞的回答。
数据森麟
2022/10/31
3310
游戏史上最大泄露事件落幕!泄露GTA6的17岁少年黑客被捕,攻击优步的也是他?!
大数据文摘出品 作者:Caleb 前一阵子,全球玩家都在担心,难道苦苦等了8年的GTA6,又要延期了吗? 大概一周前,GTA6突然被放出了大规模内容,共计90多个视频,上万行源码。这也可以说是电子游戏史上最大的一次泄密事件了。 此前,这位泄露了GTA6内容的黑客在GTAForums更新了帖子,不仅直接放出自己的邮箱、Telegram,还向开发商Rockstar Games(R星)喊话,表示“期望达成一个交易”。 9月19日,R星也终于发布公告,承认了泄露内容的真实性,并指出此次泄露是由三方力量非法进入了内
大数据文摘
2022/09/26
7610
游戏史上最大泄露事件落幕!泄露GTA6的17岁少年黑客被捕,攻击优步的也是他?!
12.22VR扫描:Insta VR告诉你什么叫牛X!48K VR图像秒杀众渣渣
Insta VR推3D Cubemap技术,支持48K VR图像 日本Insta VR推出新产品——3D Cubemap技术,支持超高清的48K VR图像,为原先4K图像的12倍。据悉,InstaV
VRPinea
2018/05/15
6550
7.7 VR扫描:任天堂公布Switch OLED Model;《精灵宝可梦GO》累计营收超50亿美元
(VRPinea 7月7日讯)任天堂公布Switch升级版机型Switch OLED Model,售价2680港币;三星为旗下冰箱及电视推出AR演示,用户可体验虚拟购物;《精灵宝可梦GO》累计营收超50亿美元,相比2020上半年《精灵宝可梦GO》营收增长了34%。
VRPinea
2021/07/23
3640
游戏的核心玩法设计——揭秘精神世界的快乐源泉
你是否经历过这样的时刻——手指已经酸痛却停不下点击屏幕,明明困得睁不开眼却还要"再玩一局"?这不是缺乏自制力的表现,而是价值千亿的游戏产业用神经科学与行为心理学精心编织的快乐陷阱。当《王者荣耀》的"五杀"音效让你肾上腺素飙升,当《原神》抽卡金光闪现时你的瞳孔不自觉放大,这背后是数百名顶尖专家用十年时间研究的"成瘾方程式"在运作。本文将揭示那些让3.2亿中国玩家平均每天耗费2.8小时1的核心秘密:从0.1秒的按键延迟优化到多巴胺投放的精确计量,从斯金纳箱式的奖励设计到社交攀比的心理操控——你会发现,让人上瘾的游戏不是娱乐产品,而是用代码写就的二十一世纪精神麻醉剂。
熊猫钓鱼
2025/08/01
1160
游戏的核心玩法设计——揭秘精神世界的快乐源泉
AI属于00后!10岁女孩开发世界首款AI桌游,13岁少年用AI检测胰腺
今天的故事主人公是一个13岁的男孩Rishab Jain和一个10岁的女孩Samaira Mehta。
新智元
2018/11/22
4650
末位淘汰,京东人事大调整;马斯克要求程序员写周报;31 省平均工资发布 | EA周报
5、2022 年全球最常用的密码名单公布:“password”“123456”前二
yuanyi928
2023/01/31
3500
末位淘汰,京东人事大调整;马斯克要求程序员写周报;31 省平均工资发布 | EA周报
程序员垃圾代码分类指南
上一篇文章《程序员垃圾分类图鉴》和大家聊了聊程序员的垃圾分类,有的程序员直呼太真实,有的程序员觉得太讽刺,不应该给程序员进行这样的分类。
纯洁的微笑
2019/07/26
4870
程序员垃圾代码分类指南
英伟达黄仁勋:摩尔定律结束了;78% 的试点公司顺利实现四天工作制;小米回应11系列,可能是系统故障或主板质量问题 | EA周报
近日,特斯拉上海工厂工人薪酬曝光,特斯拉生产线一线普工的底薪是 5341 元,若是本科学历可再加 200 元,加上各种补贴及季度奖,年薪过 10 万并不困难。“对外号称 17 薪,平均下来每个月到手有个七八千,还有五险一金”。有内部人员表示,所说的 17薪,是将季度奖包含在内,特斯拉工厂就会发放一笔奖金,根据不同的绩效评分。据其透露,季度奖分成 A-E 五个档次,其中 A 档是月底薪的 1.5 倍,C 等为一个月底薪。但他只拿过 C 等,从未获得过 AB 档评级。(时代财经)
yuanyi928
2022/11/07
6230
英伟达黄仁勋:摩尔定律结束了;78% 的试点公司顺利实现四天工作制;小米回应11系列,可能是系统故障或主板质量问题 | EA周报
推荐阅读
GTA 5祖传「屎山」代码终于修复!R星认可黑客方案,还给他发了1万美元奖金
3.2K0
震惊!程序员的水平能差到什么程度?
6400
知乎热问:一个程序员的水平能差到什么程度?
3070
一个程序员的水平能差到什么程度?
2210
困扰 80% 玩家,GTA 5 祖传 7 年的加载时间问题,现被一玩家缩短了 70%
1.8K0
真·摸鱼带师!每天工作10分钟年薪57万,这位程序员火了
4620
12 年的祖传“屎山”代码,年收入竟超 1.4 亿元?程序员劝“接盘侠”:赶紧退退退!
1.4K0
一个程序员的水平能差到什么程度?
2390
GTA5快速进入线上模式
2K0
GTA6发售悬了!遭遇游戏史上最大泄密,18岁黑客手握源码公开勒索开发商R星
4660
泄露GTA6的18岁少年黑客,被判在医院“终生监禁”!
4730
一个 程序员 的水平能差到什么程度?尼玛,都是人才呀... ...
3310
游戏史上最大泄露事件落幕!泄露GTA6的17岁少年黑客被捕,攻击优步的也是他?!
7610
12.22VR扫描:Insta VR告诉你什么叫牛X!48K VR图像秒杀众渣渣
6550
7.7 VR扫描:任天堂公布Switch OLED Model;《精灵宝可梦GO》累计营收超50亿美元
3640
游戏的核心玩法设计——揭秘精神世界的快乐源泉
1160
AI属于00后!10岁女孩开发世界首款AI桌游,13岁少年用AI检测胰腺
4650
末位淘汰,京东人事大调整;马斯克要求程序员写周报;31 省平均工资发布 | EA周报
3500
程序员垃圾代码分类指南
4870
英伟达黄仁勋:摩尔定律结束了;78% 的试点公司顺利实现四天工作制;小米回应11系列,可能是系统故障或主板质量问题 | EA周报
6230
相关推荐
GTA 5祖传「屎山」代码终于修复!R星认可黑客方案,还给他发了1万美元奖金
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档