共计 2374 个字符,预计需要花费 6 分钟才能阅读完成。
83 行代码挑战赛正在进行中,10.24-10.31,等你来战!
目前已有 2500+ 人参赛,和阿里工程师同台竞技,秀出你的代码肌肉,抱走 MacBook Pro 等精美大奖。
参赛域名:https://code83.ide.aliyun.com/
通关攻略:83 行代码第 1 题
本题有一半题目衍生自阿里巴巴开发规约,属于日常开发中须要把握的规约条例。
以下是本题波及到的规约条例,须要参赛选手对开发规约灵便利用。
【日期解决 1】
【并发解决 5】
【汇合解决 14】
【OOP 规约 24】
【并发解决 7】
【并发解决 16】
【管制语句 2】
通关攻略:83 行代码第 2 题
解题思路
本赛题解题思路较为多样化,不仅限于本攻略提供的思路。
本赛题是一个前缀字符串查找的算法题,须要拿到好的性能后果,须要有良好的数据结构。本攻略提供以下几种思路,但不仅限于以下思路:
本人实现算法构造
• 比方 Trie Tree,最根底数据结构,一个较好的 Trie Tree 实现,根本可能达到通关的水平线。倡议:查找时尽量不应用递归,增加字符串时最好不预调配大内存空间
• 如果想拿到更高的分数,能够尝试 Radix Tree、PATRICIA Tree、Crit-bit Tree 等
• 以上数据结构可通过搜索引擎查问相干细节。
奇妙的应用 JDK 自带的数据结构
• JDK 自带的很多数据结构性能是较高的,通过奇妙的应用 Map、Set、List 等数据结构,同样能够通过本关,并失去较高的分数,而且代码量很小,能够参阅 JDK 数据结构局部的文档。
双层循环暴力计算
• 暴力通过双层循环,并应用 startsWith 进行筛选的形式性能是较为低下的,很容易超时。然而,本赛题的数据量并不是特地多,这种形式只有应用得体,同样可能通关本赛题。咱们能够剖析一下,这种双层循环 +startsWith 的形式,次要性能耗费在哪里,是循环自身吗?还是间断调用 startsWith 的性能问题?针对性能的耗费点能够采取一些解决办法(比方,如何既能前缀匹配,又不会像 startsWith 一样一一字符计算),这种形式同样能拿到较好的分数。
评分指南
评分数据集分为多个 几十万 数量级的小数据集,以及多个 几百万 数量级的大数据集。在参赛者点击提交后,零碎会随机抉择一个小规模数据集和一个大规模数据集,并顺次串行运行参赛者的代码,并针对这两个数据集对参赛者编写的代码从准确性、性能、内存耗费维度进行评估。
运行后果:评分零碎会随机生成几十万条前缀字符串输出到参赛者的代码中,并评估参赛者的后果是否精确
• 留神:在运行后果维度,小数据集得分占 80 分,大数据集得分占 20 分,每个数据集在评分时只有有一条不精确,那么该数据集的得分为 0 分。
性能开销:代码运行耗时越短,性能维度分数越高。
• 留神:小数据集需在 2 分钟内实现计算,大数据集需在 3 分钟内实现计算,如果超过单个数据集的限时,那么该数据集的评测后果将没有分数;如果两个数据集总体计算耗时超过 5 分钟,则会报执行超时,有可能没有分数,须要参赛者优化代码的执行性能。
内存耗费:代码运行内存耗费越低,内存耗费维度分数越高,200MB 以下可达到满分。
• 留神:默认最大内存为 3GB
FAQ
1、提交后为什么没有分数?
察看一下是否有执行超时的提醒,如果有,阐明你的代码存在性能问题须要优化,如果没有,请反馈给咱们。
2、OSS 鉴权报错
排查一下创立 OSS Client 时填写的 ak、sk 是否正确,是否填错了参数地位。
AK/SK 填写谬误:
下载 OSS 文件参数填写谬误:
3、分数低,不晓得如何优化?
请参考“解题思路”,抉择一种你善于的形式进行尝试。
4、是否能查看运行后果谬误的案例?
无奈查看,请依据以下提醒状况排查起因:
a:输入的后果中短少了局部前缀
• 比方,输出数据要求计算 1000 个前缀字符串的后果,然而输入时只有 998 个
b:局部前缀计算的后果不全
• 比方,蕴含某前缀的字符串后果有 10 条,然而输入的只有 9 条
c:内存耗费过多,导致 OOM
5、前缀字符串是否蕴含与它同名的字符串?
比方,输出的前缀是 Buffered,如果数据集中有字符串是 Buffered,那么 Buffered 的计算结果中也是须要蕴含 Buffered
6、为什么运行后果分数只有 80 分?
阐明在几十万的小数据集上运行正确,然而在几百万的大数据集上运行谬误或内存溢出
通关攻略:83 行代码第 3 题
本题是一道代码重构的题目。现有程序中存在 Bug,导致初始代码无奈齐全通过单元测试。可参考一下倡议,实现第三题的作答。
解题思路
良好的程序应该遵循“高内聚、低耦合”的规范。在原始的 Store.java 文件中,把所有商品的价格变动策略都耦合在一个类中,显然是违反了这一规范。同时,因为不同商品价值变动策略不同,导致 Store.java 文件中的 updateValue 办法异样简单,难以保护。
因而,重构的第一步,须要你借助原有的 updateValue 办法以及 README.md,摸清楚不同商品价值变动的策略。第二步通过良好的形象,设计出易扩大的程序结构。随后,欠缺程序代码,尽可能的准守 Java 开发规约。
评分指南
评分共 4 个维度(每个维度满分为 100 分),取不同权重综合计算出总分:
• 代码规约:在本题中,因为存在多款商品,很有可能须要比照商品名称,采取不同的价值计算策略。因而须要分外留神规约中对于 Object.equals 办法的约定;
• 代码复杂度:依据代码圈复杂度计算该项得分;
• 面向对象:依据代码中类、接口的设计,计算该项得分;
• 运行后果:会应用后盾的 4 组单元测试验证程序正确性,正确运行 1 组可取得该项的 25 分;
须要特地留神的是,如果工程代码呈现编译谬误,则各项得分均为 0。
FAQ
1、问:过期后 sellin 是固定 1 还是要减成正数?
答:sellin 能够为正数。
点击下方链接,间接返回大赛官网。
https://code83.ide.aliyun.com/