Robocode Rumble: 冠军的技巧

article/2025/6/22 15:41:11

Robocode Rumble: 冠军的技巧

Rumble 冠军揭示胜利的机器人背后的策略

developerWorks
文档选项
将此页作为电子邮件发送

将此页作为电子邮件发送


最新推荐

Java 应用开发源动力 - 下载免费软件,快速启动开发


级别: 初级

Dana Triplett Barrow, 自由技术撰稿人

2002 年 12 月 03 日

Robocode Rumble 大赛结束了,胜利者已经诞生。他们都是谁,他们成功的秘诀又是什么呢?Dana Barrow 与编写出胜利的机器人的几位疯狂的科学家进行了专业的讨论,他还与 Mat Nelson 进行了讨论,Mat 透露了他为 Robocode 2.0 准备的东西。

Robocode Rumble 大赛开始后,来自世界各地的编程者运用他们的编程技巧竭尽所能创建最凶悍的 Java“机器人”,然后将这些机器人放在一个虚拟的竞技场来进行战斗。由于有着诸如 TheArtofWar、BienatorII、SandboxLump、BulletMagnet 和 Cake 这样的名字,这些机器人显得更加强悍,而且比通常的那些 Java 对象有意思多了。当战斗结束后,只有几个机器人还留在战场上。来自荷兰的编程者 Enno Peters 取得了最终的胜利。

由于很想知道是什么战略决策和日常编程习惯使获得冠军的机器人从其它普通的机器人中脱颖而出,我采访了 Peters 和其他四位获得胜利的开发者。我发现每位开发者都有其自己独特的方法,就像每个机器人都以自己的方式获得了胜利一样。

下面,Peters 和与他一同获得胜利的伙伴 Steve Coope、Daniel Johnsun、Arun Kishore 和 Manfred Schuster 讨论了对他们各自机器人获胜至关重要的设计要素。为了总结这次 Rumble 大赛,我还引用了 Mat Nelson 的几句话,他透露了对 Robocode 2.0 的一些计划。

Yngwie:预测器

Robocode Rumble 大赛的优胜者 Enno Peters 是位于荷兰北部的 Groningen 大学的一名 24 岁的人工智能专业的学生。他和他的朋友 Martijn Muurman 是在去年四月份收到一封关于将在 Groningen 大学举行竞赛的电子邮件后发现 Robocode 的。当了解这个游戏之后,两人都被迷住了。在 Yngwie 战胜对手赢得大学锦标赛之后,Enno 决定改进机器人,然后在 Robocode Rumble 大赛检验他的勇气。

Enno 解释说,虽然在设计 Robocode 机器人时要涉及到很多因素,但其中有一些是关键的。“首先,良好的雷达运转非常重要,因为机器人只会根据雷达弧度范围内敌方机器人位置作出更新。Yngwie 将决定哪些机器人离它近或危险,并尝试尽量频繁地对这些机器人进行有效的扫描。”Enno 的机器人还会“插入丢失的信息,从而获得尽可能精确的敌方机器人移动和动作的规律。”不可预知性也非常重要。“Yngwie 用不同程度的随机速度朝着敌方机器人的方向和[炮弹]发射过来的位置扫射,不过它也会在还有更多对手的时候试着躲到平静的地方去。”

排行榜

高级
冠军:Yngwie,由芬兰的 Enno Peters 设计
亚军:Vapour,由英国的 Steve Coope 设计
中级
冠军:Fermat,由新加坡的 Arun Kishore 设计
亚军:BigBear,由澳大利亚的 Daniel Johnsun 设计
初级
冠军:Ares,由德国的 Manfred Schuster 设计

Enno 提到,他的策略中有一些元素并非与众不同。“我知道我的机器人和其它机器人之间有很多相似之处。”很多机器人都“试图尽量有效地进行扫描,并保存敌方纪录,根据一对一游戏和混战游戏还有不同的模式来应对。”此外,“多数机器人都倾向于尽可能多地远离纷争、试图尽快消灭容易对付的机器人、根据敌方机器人能量和距离调整炮弹火力,并使用一些经过评定的预测器。”评定预测器的方法是,在预测器成功时对其增加一定分数,而在它们失败时减去一定的分数。经过一定时间,某些预测器就会显示出高于其它预测器的分数。这使得您能够针对敌方机器人选择使用最致命的预测器。

Enno 说,不同机器人之间的差异在于细节。举例来说,“我使用了一种 Predictor 类,它负责选择适量的炮弹火力,并为 Gunner 类提供一个射击的点。”如果敌方机器人能量比较低,预测器就会让 Yngwie 选择正好能够消灭它的适量火力,从而节省机器人珍贵的能量资源。Enno 的另一个成功的预测器让 Yngwie 能够不断地记录另一个机器人被击中后移动了多远以及往哪个方向移动。“当选用了这个预测器后,机器人会搜索类似情况的记录(例如敌方机器人的距离或角度),然后根据预测到的与当前敌方机器人位置的偏移距离开火。这个预测器对多数躲避炮弹的机器人都很有效。”

您可以在 参考资料中下载 Yngwie 的源代码。





回页首


Vapour:所有正确的移动

Steve Coope 的 Vapour 就是躲避炮弹的机器人之一。Steve 是一位地道的英国人,他是被一个也参加了 Rumble 大赛的朋友引入 Robocode 世界的。Vapour 的成功设计源自 Steve 创建他第一个名为 Silver 的机器人时作出的尝试和碰到的错误。“我花了大约一个月的时间来完成 Silver,它并不是很有效,但它让我对体系结构进行了一点点试验。”当对这个基本平台满意之后,Steve 开始试验机器人的移动情况,取得了“性能上的巨大飞跃和引人注目的特性。”新的机器人与原来的机器人相比改进非常大,所以 Steve 决定让其自成一派,这样 Vapour 就诞生了。

名称有什么含义?

“Yngwie 是根据摇滚歌星 Yngwie Malmsteen 命名的。他是世界上最快的吉他弹奏者之一,不过我更喜欢这家伙的地方是他夸张的风格和外貌。机器人 Yngwie 试着模仿他闪亮的胜利舞姿。” ― Enno Peters,芬兰
“Vapour 不会完全随机地到处乱走,它倾向于在一系列稍微快速的滑动转移到平静的地方去。我想起了烟雾颗粒的扩散和布朗运动,而‘Vapour’这个名字看起来非常适合这个概念。” ― Steve Coope,英国
“‘BigBear’这个名字是我随便起的……,我想我就是想起了一只巨大、可爱的泰迪玩具熊,它要砸碎其它的机器人!” ― Daniel Johnsun,澳大利亚 “我的第一个机器人名字叫作 Fibonacci,后来的名字有 Euclid、Euler,最后是 Fermat。我所有的机器人都是根据数学家来命名的,Fermat 是根据法国数学家 Pierre de Fermat 命名的。” ― Arun Kishore,新加坡
“由于已经有另外一个机器人叫作 Vendetta 了,所以我决定选另一个名字。我女朋友选择了希腊战神的名字,这就是 Ares 的由来。” ― Manfred Schuster,德国

Steve 将 Vapour 成功的一大部分归功于机器人的灵活性和试验带来的效果。“Vapour 很容易扩展,而且很容易在不同模式间切换,这使它很容易作出改变以及快速地在不同版本之间进行比较,同时没有什么风险。”和 Enno 一样,Steve 对细节非常在意。“因为有点象理想主义者,我非常热衷于全面调试,而这种调试过程非常冗长,所以整体开发过程非常缓慢,但我非常确信每件事都与设计目标非常接近,而且我不会在异常的情况下意外地发现有很多令人讨厌的事情还没有完成。”

在策略方面,Steve 说他力求达到的是简单而优秀的东西。“我希望将算法在概念上保持简单,即便真正的实现并非总是这么简单。”他还追求原创。“我希望 Vapour 完全是我的创作。”

Vapour 成功的另一个秘诀在于它对移动和目标定位的关注。“相对于多个对手的移动是通过一系列线性转向点实现的。每次到达一个转向点后,就可能会生成一些新的转向点;任何太接近竞技场外围墙壁的转向点都会立即被放弃,剩下的候选转向点会被测算,以找出哪个点与其它所有机器人的距离之和最大。Steve 在创建他自己的移动方案的过程中放弃了常用的反引力(anti-gravity)策略,他觉得这种策略会产生多余的问题,而这些问题又需要进一步编写代码来解决。

目标定位依赖于机器人短期学习的能力。Vapour 根据目标超过 160 个回合以上的所有移动情况的列表,试图确定对于目标的移动情况是否有规律可循。如果 Vapour 能够在目标的移动规律与相隔一定时间的同样的移动规律之间找出联系,那么产生最接近的匹配情况的时间间隔就可以作为目标运动的周期,前提是匹配情况足够好。否则,它的运动就会被认为是非周期性的。Steve 说,“不管是哪种情况,Vapour 都会重复将来的情况,通过重放目标过去的移动情况来预测它在每个回合所处的位置。”最好的目标定位方案是从一组可能的拦截方案中选取的。如果没有合适的解决方案,机器人会试图在下一回合中尝试增加找出解决方案的机会。

“最关键的区别在于,对于周期性移动的目标,Vapour 将回头查看目标的规律并向前重放其移动情况,然而对于没有明显的周期性的目标来说,Vapour 将简单地按时间顺序向后重放目标的移动情况,这似乎很可怕,但效果却出乎意料得好。Vapour 对于周期性强的目标定位非常准确,对于其它大多数机器人都不错,对于那些每隔一段时间就聪明地改变移动情况的机器人一般。”

您可以在 参考资料中下载 Vapour 的源代码。





回页首


BigBear:也称为“公羊”

Steve 在 Vapour 中建立的灵活性元素在 Daniel Johnsun 的 BigBear 中也得到了体现。Daniel 意识到没有一个完美的策略能够在竞赛中击败所有其它的机器人,他说,“所以我打算做的是,构建一个能够根据情况来转换策略的框架。”这样做还有另外的好处,就是让他能够容易地添加新的策略。

他的机器人的灵活性可以用其瞄准策略来证实。“每个 Enemy 对象都有一个 InterceptManager 类的实例,该实例存储很多不同的瞄准算法。”在扫描每个机器人之后, InterceptManager 都会:

  • 使用每个瞄准算法发射一枚“虚拟”炮弹(也就是说,炮弹没有真正被发射,但其位置仍然被监控,就像炮弹真的被发射了一样)。
  • 确定每个虚拟炮弹与目标的距离实际上有多远。

Daniel 解释说,“ InterceptManager 不断地更新每个瞄准算法的精确度的统计资料。这样,在向目标发射真正的炮弹之前, InterceptManager 将选择使用最精确的算法。这使得 BigBear 能够使瞄准算法适应不同的机器人,即便它们的移动模式在战斗中发生了变化也没有关系。”

BigBear 策略的其它方面并没有达到预期的效果。“BigBear 的躲避炮弹的移动策略事实上完全是一个意外,”Daniel 解释道。“我最初的策略是,假定炮弹按照循环瞄准的方法向我的机器人发射,然后根据这种假定来躲避炮弹。经过几次修正,我终于使躲避炮弹的策略按预期运行,但却发现这种策略在比较厉害的机器人面前没什么作用,这些机器人并不使用循环瞄准的方法。看起来我以前没有完成的代码作用还更好一点,所以我转向了以前的方法,并向整体移动策略增加了一些另外的随机元素。”

Daniel 设计的机器人的另一方面是,当它碰到其它优势明显的机器人时,会好斗地撞向它们,这样做的意图是让 BigBear 获得冲撞加分(Ram Bonus)点数。回顾比赛情况后,Daniel 承认,“我并不确信这样做能对最后分数增加多少,不过看着 BigBear 运转起来很有意思。”

您可以在 参考资料中下载 BigBear 的源代码。





回页首


Fermat:巧妙地躲避炮弹的机器人

Arun Kishore 是新加坡南洋科技大学计算机工程学院(School of Computer Engineering at Nanyang Technological University)的一名学生,他在设计机器人 Fermat 时也着重于移动和瞄准。整体上讲,他认为使得 Fermat 成功的策略与竞赛中很多其它的机器人的策略差不多。这些策略也就是“Secrets of the Robocode masters”系列(请参阅 参考资料)中描述的那些策略,如线性瞄准、循环瞄准和反引力移动策略。尽管如此,Arun 更加明确地强调,他为 Fermat 设计的移动算法是机器人胜利的关键因素。您对此好奇吗?请看看 Arun 的代码并对 DodgeBullet 类加以评价。


清单 1. DodgeBullet

class DodgeBullet
{
Point2D.Double source; // origin point of the bullet
Point2D.Double target; //target position of the
bullet
double velocity;       //velocity
double startTime;      //start time
int bot;               //id of the bot which fired
this bullet
DodgeBullet(double sourceX,double
sourceY,Point2D.Double target,double power,double
startTime,int bot)
{
source = new Point2D.Double(sourceX,sourceY);
this.target = new
Point2D.Double(target.x,target.y);
this.startTime = startTime;
this.velocity = 20-3*power; //velocity can be
determined from the energy drop value
this.bot = bot;
}
Point2D.Double getCurrentPosition(double time)
{
double distance = velocity*(time-startTime);
//uses linear interpolation to calculate the exact
position of the bullet
// uses the formula currPoint =
distanceFromStart*(targetPoint-sourcePoint)/(totalDistanceTravelled)
return new Point2D.Double(
source.x +
(distance*(target.x-source.x)) /
getDistance(target.x,target.y,source.x,source.y), 
source.y +
(distance*(target.y-source.y)) /
getDistance(target.x,target.y,source.x,source.y)
);
}
}

通过使用 DodgeBullet 类和一个对象清单,Fermat 能够在任意时刻存储关于向它发射的炮弹的信息。Fermat 能够猜测出敌方机器人是否发射了炮弹,方法是测量敌方机器人的能量减少量并检测这个减少量是否在 0.1 和 3.0 之间(包括这两个值)。机器人将计算发射出的炮弹的冲击点数、将所有检测到的炮弹添加到列表中,然后计算当前列表中每发炮弹的位置。

Fermat 通过识别炮弹的航行线路并施加垂直于该线路的动力来躲避炮弹(并避免贴到墙上)。由于机器人会计算所有五种发射炮弹策略的冲击点数,所以无论对方使用哪种策略它都能够避免被击中。要进一步了解关于 Fermat 的设计的细节,请参阅 参考资料

您可以在 参考资料中下载 Fermat 的源代码。





回页首


Ares:初学者的胜利

如果您刚开始用 Java 语言开始编写代码,而这些策略中有一些看上去过于复杂,那么请记住,用相对基本的代码来创建出强大的机器人也是可能的。Manfred Schuster 设计出了初级的机器人冠军,但他在开始研究 Robocode 之前从未编写过一行 Java 代码。他是通过试验 RamFire 之类的样本机器人开始的,然后从 Robocode 资源库(Robocode Repository)下载其它机器人来观察它们运行的原理。在为 Robocode Rumble 大赛创作 Ares 之前,他学习和试验的过程已经使他学到了很多东西,使他了解到如何设计出一个非常厉害的机器人。

“您可以在不发射一颗炮弹的情况下赢得一场一对一的战斗,”Manfred 说。诀窍就在于闪开所有敌方机器人发射的炮弹并获取生还者加分来提高分数。“为了实现这一点,我实现了四种移动算法。”如果一种算法对敌方机器人不起作用,他的机器人就会尝试用四种选择中的另一种算法。这些算法会让 Ares 旋转 90 度,并以随机的速度不断地前后移动不定的距离。这些移动会让使用模式匹配的对手很难击中 Ares。

尽管如此,躲避也只能让您达到这个程度。Manfred 解释道,仅仅在 10 个回合中生还并不足以让机器人成为冠军。胜利还需要更具侵略性的策略,他本着这一原则,将 Ares 设计成尝试用四种瞄准算法并选择命中率最高的一种算法。他还选用了一种大胆的策略,那就是让 Ares 在开火前向对手移动,从而提高命中率。这将增加机器人从击中敌人赢得的点数,但缺点是会让 Ares 很容易被其它机器人击中。Manfred 提到,尽管这种策略有时会让 Ares 输给其它机器人,他仍然觉得这种策略能够使机器人获得足够的分数,“从而使其跻身于机器人八强之列”。然而,他还是警告读者,这种策略要在竞赛中发挥作用会更加困难。

您可以在 参考资料中下载 Ares 的源代码。





回页首


结束语

那么,最后我要问,在设计一个赢得冠军的机器人的过程中,策略扮演了什么角色呢?这里所采访的大部分胜利者都暗示说,结合可靠的策略和创新精神让他们的机器人走到了胜利的一边。Enno Peters 在总结 Yngwie 的胜利时谦虚地说,“最后,运气占了最主要的成分。”

使机器人胜利的另一个因素是灵活性。Arun Kishore 将他编写机器人代码的过程形容为“与以往其它任何编程经历都不同”。“我以前大多数编程任务都需要我严守规范,编程者没有太多的自由。在 Robocode 的编写过程中,编程者必须有自己的想法,并将这些想法设计为适合机器人的策略,然后实现它们。这样做通常能让编程者获得更大的满足感,更重要的是从中获取更大的乐趣。”

Robocode 创始人 Mat Nelson 在准备推出 Robocode 2.0 时,依然用这种同样的获得乐趣的精神以及卷起袖子努力工作的热情鼓舞着自己。“我只为社区提供了一个框架,而他们取得了这么大的成就,远远超过了我的预料!”他激动地说。“他们创造了比我能够想象到的更复杂的机器人。”

Mat 目前正努力为这个游戏重新设计 API,还要增加几个新的特性。他想在 Robocode 2.0 竞技场中引入力矢量、各种机器人装甲强度和障碍物。最后,他还希望将游戏的代码公开。“我相信,我应该将它的代码公开,”他说。





回页首


参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 如果您错过了 Rumble 大赛,请不要失望。您仍然可以在 Robocode Rumble 主页上获取关于胜利者的统计资料。


  • 您刚刚了解 Robocode 吗?请访问 Robocode Repository,那里有关于这个游戏的教程、代码样本、论坛以及最新的更新。


  • 下载每个优胜的机器人的源代码:
    • Yngwie
    • Vapour
    • Fermat
    • BigBear
    • Ares

  • 如果您真的对 Robocode 感兴趣,请参加 Mat Nelson 的 Robocode 讨论论坛以关注竞赛情况。


  • Robocode 最初在 IBM alphaWorks 上出现,您仍然可以在那里 免费下载游戏,并获取关于竞技场的最新情况的频繁更新。


  • 您可能还想从 developerWorks查看这些另外的 Robocode 文章:
    • Rock 'em, sock 'em Robocode”(2002 年 1 月)
    • Rock 'em, sock 'em Robocode: Round 2”(2002 年 5 月)
    • Secrets from the Robocode masters”(2002 年 5 到 7 月)
    • Alphabot: An interview with Robocode creator Mat Nelson”(2002 年 5 月)





回页首


关于作者

Dana Triplett Barrow 是居住在佛蒙特州的一位自由撰稿人。您可以通过 dana@orange-atelier.com与 Dana 联系。



http://chatgpt.dhexx.cn/article/THJeQLVq.shtml

相关文章

Robocode教程7——雷达锁定

在这次教程中,我们要写这样一个代码,它将让敌人逃不出我们的眼睛。雷达锁定是一个高效战斗机器人的基础,因为robot只有执行onScannedRobot方法,我们才能够获取敌人的信息,而onScannedRobot方法只有在我们的雷达扫描到敌…

robocode 安装 使用

记录一下 环境: Windows 7 64 JDK 1.8.0_131 一、安装 1、下载 https://robocode.sourceforge.io/ 当前最新版本:robocode-1.9.3.6-setup.jar 2、安装 双击 robocode-1.9.3.6-setup.jar 默认安装在C盘,并创建桌面快捷方式&#xff1b…

robocode java_IBM Robocode Java学习利器(1)Robocode 入门

编程肯定要学语言,相信很多人都会选java,无论什么书千篇一律都是从语法讲起,语法的枯燥反正我是深有体会的,但不先学语法还能学什么?编程的成就感来源于能做出什么东西,能实现什么,在没有做出实际的东西之前…

智能机器人编程游戏robocode的运行代码简析

智能机器人编程游戏robocode的运行代码简析金庆2007.6.1阅读robocode1.3的源代码,查看运行的原理。 (转载请注明来源于 金庆的专栏) 主线程Battle.run()-------------------主线程是Battle.run(), 循环进行多局的较量。每一局初始化后&…

Robocode

原文地址:Robocode 作者:麦麦和阿纳内 什么是Robocode? 其实我对机器人一直很感兴趣。我记得在我还是初中的时候,就知道 AplleⅡ上有一个程序,用它来编写简单的机器人程序,然后相互作战。当时自己还完全不懂编程&…

教你玩Robocode(1)

最近在上网时发现了一个叫做Robocode的游戏。最近我已经对它上瘾了。Robocode官方网站上对Robocode的介绍: Robocode is a programming game, where the goal is to develop a robot battle tank to battle against other tanks in Java or .NET. The robot battles are runni…

Robocode:基础知识及入门示例

文章目录 参考定义坐标系简单的API可Overwrite的方法一个简单示例 参考 百度文库-Robocode 定义 机器人:一些可以旋转、移动、射击、侦测的小型坦克。 机器人的底盘、火炮和雷达系统都可以独立运动,也可以相互“锁定”,一起移动。换句话说…

robocode 相关的总结

基础知识 1. heading 角度系 如图所示,所谓heading角,即从Y轴出发,然后顺时针绕回Y轴的这么个角度区间,取值范围: [0,360] 2. bearing角度系 所谓bearing 角,即从Y轴顺、逆时针出发,绕半圈回到…

世界robocode机器人的四大运动方式分析

摘要:前言Robocode在短短的时间内风靡全球,全世界的robocode爱好者设计出了大量的优秀智能机器人,他们都拥有各自的运动方式,有的很轻易被击中,有的却很难射击。设计一个好的运动方式是优秀robocode机器人取胜的要害。上届世界中级组冠军Fermat就是靠他让敌人难以琢…

Robocode教程1——安装、运行、配置

Robocode 的安装 系统安装最小环境要求: CPU:Pentium2/400MHz以上 内存:64MB以上 硬盘:10M以上 对硬件要求也不是完全绝对的,你用小的机器配置,带来的是比较慢的运行速度。当然具备以上硬件条件后,还要具有Java运行环…

笔记:Istio 组件 基础概念学习

文章目录 1. Istio是什么?1.1 读音1.2 简介1.3 服务网格是什么?1.4 为什么使用Isito?1.5 Istio 是如何诞生的?1.6 为什么我想用 ISTIO?1.7 目前Istio支持哪些部署环境?1.8 架构1.8.1 组件1.8.1.1 Envoy1.8.1.2 Pilot1…

Notes Sixth day-渗透攻击-红队-打入内网

** Notes Sixth day-渗透攻击-红队-打入内网(dayu) ** 作者:大余 时间:2020-09-22 请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技…

Notes Ninth Day-渗透攻击-红队-打入内网

** Notes Ninth Day-渗透攻击-红队-打入内网(dayu) ** 作者:大余 时间:2020-09-25 请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技…

Notes Fifth Day-渗透攻击-红队-信息收集

** Notes first day-渗透攻击-红队-信息收集(dayu) ** 作者:大余 时间:2020-09-20 请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技…

Notes Fifteenth Day-渗透攻击-红队-内部信息搜集

** Notes Fifteenth Day-渗透攻击-红队-内部信息搜集(dayu) ** 作者:大余 时间:2020-10-1 请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里…

多个容器一起打包_容器快速入门完全指南

介 绍 容器,以及Docker和Kubernetes之类的容器技术已经日益成为许多开发人员工具包中常见的工具。容器化的核心目标是提供一种更好的方式,以可预测和便于管理的方式在不同的环境中创建、打包以及部署软件。 在本文中,我们将一窥什么是容器&am…

项目经验123

DDDRPC架构 DDD分层架构介绍 DDD(Domain-Driven Design 领域驱动设计),目的是对软件所涉及到的领域进行建模,以应对系统规模过大时引起的软件复杂性的问题。开发团队和领域专家一起通过 通用语言(Ubiquitous Language)去理解和消…

区块链详解

一、比特币简介 区块链(Blockchain)技术源于比特币。在比特币中,为了保证每笔交易可信并不可篡改,中本聪发明了区块链,它通过后一个区块对前一个区块的引用,并以加密技术保证了区块链不可修改。 随着比特…

网络安全面试题目及详解

获取目标站点的绝对路径 如果是iis系统,尝试对参数进行恶意传值,使其出现报错页面对目标网站进行js代码审计,查看是否存在信息泄露出站点的绝对路径使用字典猜解目标站点的绝对路径如果目标是thinkphp框架,尝试访问无效的路径,或者对参数进行而已传值使其报错phpinfo页面泄露站…

云计算基础教程(第2版)笔记——基础篇与技术篇介绍

文章目录 前言 第一篇 基础篇 一 绪论 1.1 云计算的概念以及特征 1.1.1云计算的基本概念 1.1.2云计算的基本特征 1.2 云计算发展简史 1.3 三种业务模式介绍 1. 基础设施即服务(IaaS) 2. 平台即服务(PaaS) 3. 软…