项目优化
快来分享你的内容吧~
程序员攻占小猿口算,炸哭小学生!
小学生万万没想到,做个加减乘除的口算练习题,都能被大学生、博士生、甚至是程序员大佬们暴打! <img src="https://pic.code-nav.cn/migrate_image/8691165df0b895354e6dd49f45563478.webp" alt="" width="100%" /> 最近这款拥有 PK 功能的《小猿口算》App 火了,谁能想到,本来一个很简单的小学生答题 PK,竟然演变为了第四次忍界大战! <img src="https://pic.code-nav.cn/migrate_image/6e5379d5ef43e022e3493528d72a9727.webp" alt="登上应用商店榜一" width="100%" /> 刚开始还是小学生友好 PK,后面突然涌入一波大学生来踢馆,被网友称为 “大学生炸鱼”;随着战况愈演愈烈,硕士生和博士生也加入了战场,直接把小学生学习软件玩成了电子竞技游戏,谁说大一就不是一年级了?这很符合当代大学生的精神状态。 <img src="https://pic.code-nav.cn/migrate_image/638ada97c02cd9ed771a538c9291e16f.webp" alt="小猿口算排行榜(博一也是一年级)" width="100%" /> 然而,突然一股神秘力量出现,是程序员带着科技加入战场! **自动答题一秒一道** ,让小学生彻底放弃,家长们也无可奈何,只能在 APP 下控诉严查外挂。 <img src="https://pic.code-nav.cn/migrate_image/a2ffde5f6432668752596d8e2219e37a.webp" alt="" width="100%" /> 此时很多人还没有意识到,小学生口算 PK,已经演变为各大高校和程序员之间的算法学术交流竞赛! <img src="https://pic.code-nav.cn/migrate_image/8f5ad9484f9d8e4a23954794fbfb3a90.webp" alt="" width="100%" /> 各路大神连夜改进算法,排行榜上的数据也是越发离谱,甚至卷到了 0.1 秒一道题! <img src="https://pic.code-nav.cn/migrate_image/bce8b93080e4269e2014945f896f6adc.webp" alt="" width="100%" /> 算法的演示效果,可以看我发的 B 站视频:https://www.bilibili.com/video/BV1xp2hYHEVn **接口也是口,算法也是算,这话没毛病。** 这时,官方不得不出手来保护小学生了,战况演变为官方和广大程序员的博弈。短短几天,GitHub 上开源的口算脚本就有好几页,程序员大神们还找到了多种秒速答题的方案。 <img src="https://pic.code-nav.cn/migrate_image/b96ddd60480b3e9f9eda78aed7f5eee8.webp" alt="" width="100%" /> 官方刚搞了加密,程序员网友马上就成功解密,以至于 **网传** 官方不得不高价招募反爬算法工程师,我建议直接把这些开源大佬招进去算了。 <img src="https://pic.code-nav.cn/migrate_image/1ffde40fad5c118262be04f61885d27d.webp" alt="" width="100%" /> ## 实现方法 事情经过就是这样,我相信朋友们也很好奇秒答题目背后的实现原理吧,这里我以 GitHub 排名最高的几个脚本项目为例,分享 4 种实现方法。当然,为了给小学生更好的学习体验,这里我就不演示具体的操作方法了,反正很快也会被官方打压下去。 ### 方法 1、OCR 识别 + 模拟操作 首先使用模拟器在电脑上运行 App,运用 Python 读取界面上特定位置的题目,然后运用 OCR 识别技术将题目图片识别为文本并输入给算法程序来答题,最后利用 Python 的 pyautogui 库来模拟人工点击和输入答案。 这种方法比较好理解,应用范围也最广,但缺点是识别效果有限,如果题目复杂一些,准确度就不好保证了。 详见开源仓库:https://github.com/ChaosJulien/XiaoYuanKouSuan_Auto <img src="https://pic.code-nav.cn/migrate_image/80bb6dbfd4ddd06764366db7b605059d.webp" alt="" width="100%" /> ### 方法 2、抓包获取题目和答案 通过 Python 脚本抓取 App 的网络请求包,从中获取题目和答案,然后通过 ADB(Android Debug Bridge)模拟滑动操作来自动填写答案。然而,随着官方升级接口并加密数据,这种方法已经失效。 详见开源仓库:https://github.com/cr4n5/XiaoYuanKouSuan <img src="https://pic.code-nav.cn/migrate_image/2d9c41154b179c23a97f87a77bf8ae88.webp" alt="" width="100%" /> ### 方法 3、抓包 + 修改答案 这个方法非常暴力!首先通过抓包工具拦截口算 App 获取题目数据和答案的网络请求,然后修改请求体中的答案全部为 “1”,这样就可以通过 ADB 模拟操作,每次都输入 1 就能快速完成答题。 **根据测试可以达到接近 0 秒的答题时间!** 但是这个方法只对练习场有效,估计是练习场的答题逻辑比较简单,且没有像 PK 场那样的复杂校验。 详见开源仓库:https://github.com/cr4n5/XiaoYuanKouSuan <img src="https://pic.code-nav.cn/migrate_image/1ee5a15b1ef437d2f4f8f401174b237e.webp" alt="" width="100%" /> ### 方法 4、修改 PK 场的 JavaScript 文件 这种方法就更暴力了!在 PK 场模式下,修改 App 内部的 JavaScript 文件来更改答题逻辑。通过分析 JavaScript 响应中的 `isRight` 函数,找到用于判定答案正确与否的逻辑,然后将其替换为 true,强制所有答案都判定为正确,然后疯狂点点点就行了。 详见开源仓库:https://github.com/cr4n5/XiaoYuanKouSuan <img src="https://pic.code-nav.cn/migrate_image/1e45e7eb5e86ddac2836e2bcadb27b40.webp" alt="" width="100%" /> 能这么做是因为 App 在开发时采用了混合 App 架构,一些功能是使用 WebView 来加载网页内容的。而且由于 PK 场答题逻辑是在前端进行验证,而非所有请求都发送到服务器进行校验,才能通过直接修改前端 JS 文件绕过题目验证。 ## 官方反制 官方为了保护小学生学习的体验,也是煞费苦心。 首先加强了用户身份验证和管理,防止大学生炸鱼小学生;并且为了照顾大学生朋友,还开了个 “巅峰对决” 模式,让俺们也可以同实力竞技 PK。 <img src="https://pic.code-nav.cn/migrate_image/8b39dc3149104bf3c35b09bff9a872c9.webp" alt="" width="100%" /> **我建议再增加一个程序员模式,也给爱玩算法的程序员一个竞技机会。** 其实从技术的角度,要打击上述的答题脚本,并不难。比如检测 App 运行环境,发现是模拟器就限制答题;通过改变题目的显示方式来对抗 OCR 识别;通过随机展示部分 UI, 让脚本无法轻易通过硬编码的坐标点击正确的答案;还可以通过分析用户的答题速度和操作模式来识别脚本,比如答题速度快于 0.1 秒的用户,显然已经超越了人类的极限。 0.0 秒的这位朋友,是不是有点过分(强大)了? <img src="https://pic.code-nav.cn/migrate_image/4fe2d22fe7f6406872457e7bedcbdbce.webp" alt="" width="100%" /> 但最关键的一点是,目前 App 的判题逻辑是在前端负责处理的,意味着题目答案的验证可以在本地进行,而不必与服务器通信,这就给了攻击者修改前端文件的机会。虽然官方通过接口加密和行为分析等手段加强了防御,但治标不治本,还是将判题逻辑转移到服务端,会更可靠。 当然,业务流程改起来哪有那么快呢? ------ 不过现在的局面也不错,大学生朋友快乐了,程序员玩爽了,口算 App 流量赢麻了,可谓是皆大欢喜! 等等,好像有哪里不对。。。别再欺负我们的小学生啦! <img src="https://pic.code-nav.cn/migrate_image/2968a638a85ba42494fcceeb1701a999.webp" alt="" width="100%" /> ## 更多 💻 编程学习交流:[编程导航](https://www.codefather.cn) 📃 简历快速制作:[老鱼简历](https://laoyujianli.com) ✏️ 面试刷题神器:[面试鸭](https://mianshiya.com)
【求职方法】简历项目优化
#求职# #项目经验# 给最近在找工作或者准备秋招的朋友一个我自己总结的、实用的【简历项目优化方法】,百试不爽!操作如下: 1. 大家去网上随便找一套面试题(也可以在星球语雀知识库 => 资源汇总里找到),遇到看不懂的题目或者没接触过的知识后,把它记下来 2. 针对这道题目到全网去搜题解,至少看 3 份不同的讲解以得到相对正确的解答 3. 想办法把这个面试题涉及的知识点应用到项目中 4. 在简历上补充项目经历,将自己对这个知识点的实践作为一个亮点 为什么要这么做呢? 1. 看别人整理的面试题,快速 get 【企业关注的】、并且自己不熟悉的技术知识,扩展思路,而不是受限于视频教程 2. 看题解,了解这个知识的概念、应用场景、使用方法、细节和优化点 3. 趁热打铁,直接对理论进行实践,真正把知识变成自己的 举个例子,比如我学后端的,刚学完 Redis 中间件,那我去搜搜 Redis 面试题,搜到一个【如何用 Redis 解决缓存雪崩?】。然后我去看题解,比如:https://blog.csdn.net/m0_37647376/article/details/118914551 (随便找的一篇),了解到:缓存雪崩是什么?如何解决?然后我就把缓存雪崩的解决方案应用到项目中,比如【随机过期时间】这种方案(大 N 小 n),给每个缓存过期时间补充一个 2 分钟以内的随机数,避免缓存集中失效~ 没错,就加个随机数这么简单!然后我就可以把这个点写到简历上啦~ 这样面试官问你这道题目的时候,你可以很自信地说自己实践过!也会对这道题目印象更加深刻。 再举个前端的例子,比如搜到一题【什么是虚拟列表?】,然后去看题解:https://juejin.cn/post/6844903982742110216 ,了解到:虚拟列表是什么?为什么要用虚拟列表?怎么实现虚拟列表?然后就可以自己实现一个虚拟列表、封装成一个独立的组件,可以应用到自己的前端表格项目中,还可以开源~ 然后就可以很骄傲地写到简历上。面试官:啥是虚拟列表?我:劳资写过,甚至还有开源项目! 这其实正是企业中开发项目常见的做法,搜解决方案、然后应用和总结。 学到的话,大家周末不妨行动起来!用这个方法来优化项目、完善下简历吧~ 我也期待大家在星球里发帖分享自己对这个方法的实践、互换想法,做到 1 1 > 2~(记得打上 #面试题# 或者 #项目优化# 标签哦) [嘿哈]

