⑴ 要玩传奇世界电脑的系统配置要多少
传奇世界是一个大型网络游戏。请不要被这个“大型”所吓唬到,以我们玩家理解所知,“大型”就是高级。所以用的电脑当然也不会逊色。其实我们这样理解是错了,盛大这样称自己的游戏为大型。只不过是客户端够“大型”而己,而己在线人数众多。但如果在线人数众多算是大型的话,那QQ游戏,中国游戏在线中心也就更大型了。 所以,首先不要给盛大文字游戏所蒙骗,要玩他这个游戏,不用多高档的电脑才可以玩舒畅。以下我就解释一下电脑各大配件在什么价位和档次上就能畅通无阻地傲游传世。 CPU:不用太高。1.5G主频,256K的二级缓存,前端总线333MHz以上,例如赛扬(N核心)1.7G,AMD新毒龙1.6G。不要相信64位玩传世更好,因为传世只是个32位游戏。不过有条件用64位也是好的,反正他向下兼容32位。 内存:这是重点,地球人都知道越大越好,不过要是SD的内存,多大都没用,因为带宽过小,挂机可以,上线过段时间会大卡。所以最好为DDR512或1024以上,外频在266MHz以上。 主板:挂机一族的,选主板就一定要选一线大厂的主板,质量好。例如技嘉,华硕,升技。二线也有不错的,例如磐正、硕泰克。。要配什么型号主板按用什么CPU为准。 硬盘:很多人认为硬盘不重要,其实硬盘是玩传世中内存之后的第二重点。为什么?知道客户端有多大吗?如果你用一个转速低的老硬盘玩传世,你会郁闷到想吐血。转速最低要求7200转,5400转以下的,买个硬盘盒做移动硬盘吧。反而容量多大并不重要。就算是10G容量,也够装个系统+传世了(只可惜市面上没有10G 7200转的;P)。 显卡:如果你玩的区天天是大型PK,在多,怪多。这样,一张好的显卡就相当重要,但我所说的一张好显卡不一定是市场主流,就算一张已经被市场所淘汰的产品就足够了。例如GF4 Ti4200 128M 128BIT。ATI 9550 128M 128BIT,这两款己被市场所淘汰的芯片对传世己经应付有余了。(盛大所说的要求支持DX9的显卡纯粹放屁,这种伪3D游戏用不着DX9的特效)。牌子例如XFX,艾尔莎,双敏。 机箱:挂机一族的你,一个大的机箱很有必要,特别在夏天,机箱越大,通风就越好,多加两个风扇就更好了。而且牌子也要好的,档板要厚的。例如金河田,爱国者。 显示器:这对玩家本人身体有密切关系,有条件的液晶最好,不伤眼。没条件就用CRT吧。17寸放着1024*768是玩传世最好尺寸了(因为传世没有更大尺寸的)。牌子例如三星,飞利蒲,NESO。 电源:挂机一族的你,想安全长久安心的挂机,一个优质的电源是少不了的,但是优质,就当然会是优价(优价不是便宜,而是高价的意思,很多人都理解错误了,学了电子商务就会清楚。)。牌子例如长城,大水牛,航嘉,世纪之星。 鼠健:不要忽略了这两个镇号之宝之一,号是你的帐号,为什么这样说,要是一套三流鼠健用着都不舒服,某些杂牌光电鼠还会突然在屏幕上自己飞来飞去。要是在你PK时失灵,那真是伤心欲绝啊。所以称之为镇号之宝。牌子例如微星,罗技,微软,三星,明基。 网络:有条件的当然用网通或电信的光纤专线,可是我们只是普通玩家,用不起这东西。但是家里电话总是有吧,那就用1440包年的ADSL吧,或是用网通(某地区网通不太好,是因为维护得不好,维护人员在偷懒。要进行多次投诉才有用,一两次他不会鸟你的,而且每次投诉都不要用同一个电话和姓氏。),但是网络是不可预料的,所以没什么好介绍。 下面我就为大家配两款计算机。 经济实惠型: 配件 数量 单价 品牌型号 CPU 1 570 AMD Sempron 2500+ 754针/64bit(盒) 主板 1 499 磐正 8KDA7I 内存 1 315 Kingmax 512M DDR400 硬盘 1 430 日立 HDS728080PLA380 显卡 1 499 讯景 6200A(PV-T44A-RAQ) 显示器 1 930 三星 788DF 机箱 1 280 航嘉 C402绿白/橙白 PC电源 1 190 金河田 海象330 键鼠套 1 115 微星 双龙会键鼠套装 价格总计:3828.00 元 豪华骨灰型: 配件 数量 单
⑵ 阿里p6前端面经
本科毕业,学校既不是211也不是985,我也没有一毕业就进入大厂工作的经历。我的职业生涯里一共有10多次面试经历,阿里我面试了5次,失败了4次,屡战屡败,屡败屡战。每当我听到别人传奇的经历,会羡慕别人开挂的人生,也会有小失落,感叹自己当初没有做太多的努力,甚至自我怀疑和自我否定。人生中主动裸辞,被动裁员的经历,曾经让我在无数的黑夜里,真的以为人生就这样了。
在第四次面试阿里失败后,我开启了为期2年的自我重塑计划,梳理 体系化的知识结构 、刻意练习 知识结构化表达 ,学习参考了吸引力法则完善自己的 简历人设 。最后在2020.1入职阿里巴巴,成为AE国际体验技术团队的P6前端工程师。
在这一段经历中,我梳理了当时自己的几个问题,大家看看是否有跟我相似的处境呢?
自我重塑的前提是自我觉醒,意识到自己存在问题,再让自己走出舒适区,不断地打碎自己,然后在这个过程中把碎掉的东西重新收拾起来,变成身体的一部分。 这个过程会让你很痛苦,但如果你克服了,你就蜕变了。薛兆丰教授说过一句话,“生活不会在你都准备好了以后才开始”。面试也一样,面试考验的不是那几轮的面试表现,而是你在长期生活、工作中积累的 硬技能和软技能 ,这些包括:你的专业能力,框架能力,思维能力,性格和心态,沟通能力,价值观等等。你只是刚好在这几轮的面试里表现出了你的这些积累,吸引到了对方,最后拿到了Offer。如果临时抱佛脚,光背概念和知识点,没有结合项目深入思考,那么面试的时候会表现的很空洞,给人的印象只是在堆砌一些关键词,这样面试挂掉的可能性就很高。
传说有人问泰勒斯:“何事最难为?” 泰勒斯回答说:“认识你自己。” 随着年龄的增长,阅历的丰富,你会渐渐发现,无论是生活还是工作,很多的事情本质是与自己相处,了解自己的性格,发现自己的优缺点,知道自己从哪来,到哪去,最后想成为一个什么样的人。
举个例子,我了解自己的性格是内向性格,而且原生家庭在我童年成长的过程中,让我有些自卑,甚至我一度怀疑内向是一种性格缺陷。直到我看了一本书,书名叫《内向性格的竞争力》,开始渐渐明白我 自卑的点,来源于我根本不了解自己是什么 。我也不了解外向性格、内向性格的优势。外向性格的优势在于它性格非常开朗,很容易给人一种亲和力,自来熟。内向的性格优势在于它的敏感度,洞察他人情绪,感知他人情绪的能力。内向性格的人都有一个共同的特点,叫做你需要提前充电。比如我们去参加一个面试,内向性格的人像一块电池,需要提前充电,然后呢,这块电池只能维持大概1个小时,但是一旦过了1个小时,电池电量用完,你就受不了,你在后半程的面试会感受不太舒服,因为你的性格里就是不太喜欢这样的环境。
如果大家意识到这一点,在面试的时候你可以更好的去利用。
胆怯的心态,这个是最难克服的。我曾经是胆怯的人,我会把自己包裹起来,裹上一层坚硬的外壳。
这些会直接影响你在他人心中的形象,像阿里P6前端工程师,是一个独挡一面的角色。如果自己性格胆怯,表现出畏缩畏尾的样子,那么即使进阿里了,你在推进项目的时候,会遇到很大的阻碍。这个阻碍一方面来自于你内心的胆怯,另一方面来自于外部压力。所以这个是必须要克服的。
我克服胆怯的方法很粗暴。利用周末的时间刷了杭州城20多个恐怖密室(漆黑的密室环境,而且有NPC出来吓人),慢慢把胆子练起来。后来我胆子大到什么程度呢,我一个人跑到临安挑战极限,坐上飞机从10000英尺的高度自由降落,高空跳伞。
所以性格它不是一成不变的,你发现了,克服了,最后你的心态会越来越好,这个就是我想分享的。
这个是最核心的一个能力,同时也是可以让你快速进入一门新领域的方法。以我现在的认知水平, 知识可以分为三层:知识点、理论、体系。 我们需要可以通过学习知识点 -> 整理理论 -> 形成体系。
输入: 我们平时信息输入的渠道,可以是通过看源码、看书、他人分享的得到关键词,通过关键词搜索可以让我们更广泛地获取信息。在搜索关键词的过程中,我们往往会得到更多的关键词,它可以是A、是B、是C。
构建: 我们需要这些ABC进行分类,构建我们的思维导图。如果你没有自己的思维导图,网上有很多前端的知识图谱,可以照着学习和搜索,理解每一个知识节点承载的内容,慢慢去构建属于你自己的思维导图。前期构建脑图的过程挺痛苦的,意味你要把每一个知识点去摸清楚,但是一旦你建立好了,往后只需要在现有的脑图里添加你新的知识节点,学习会越来越轻松。
解释: 思维导图构建好了以后,就是输出,如何向别人解释一个知识。
以上学习的方法,是我对费曼技巧的个人实践,费曼技巧也被称作是终极的学习方法。简单说它是 “以教为学”,在学习的知识的时候,以别人听得懂为目标,用最简单的话把自己的意思表达出来。
关于学习的方法,我还要分享的是,在构建脑图知识点的时候,我们不妨问自己5个问题?
理清楚了这5个问题,相信你会对这块知识了解的很全面了。往往在面试的时候,面试官不会这么一板一眼的提问,有时候会问一些开放式的题目,或者一些刁钻的技术问题,不要慌,他有可能是考察是否能用学到的知识来解释一下新的例子。所以我们学习还要做最后一步, 把所学的知识都忘掉,剩下的思维能力才是你的。
掌握学习的方法还不够,我们还要常常做一些阶段性回顾,以一个项目为周期或者以半年为周期(周期时间可以自己把握),把人生当中的关键节点梳理出来,这不只是为了面试时快速反应,也是为了更加帮助你认识自己。
我们投递简历失败,有一部分原因在于,我们对自己定位不够清晰。当前 P6 水平投递 P7 岗位,那么挂掉的概率就更高了。我们需要了解阿里岗位职级是怎么样的。阿里巴巴社招一般层级是从P6开始,往往工作经验3年是一个分界点。
了解岗位职级,可以帮助我们认清当前水平处在哪一个层次,知道通往一下层次需要掌握哪些技能。比如我是P6,那么我在写简历或者面试的时候,尽可能在展示当前层次水平之外,会额外展示掌握的P7的一些能力,让面试官看到你的潜力和亮点,你是具备快速通往下一层次的能力的。
阿里的面试按流程来的,你开始面试就会进入流程,在流程里的简历,除了面试官其他人是看不到。每个流程通常有5轮面试,4轮技术面和1轮HR面,面试官会根据你的水平层级和个人情况,决定要不要安排笔试和交叉面。面试的前两轮是电话面试,后几轮是现场面试。在投递的简历的时候,尽量找人内推,内推的优势在于内推人可以给你做信用背书,查看你的面试进度。如果不是走内推渠道,是阿里员工主动采蜜打电话邀请你面试,说明你的简历或者过去的历史评价,是具有一定吸引力的,不然也不会打电话给你。接到电话后,可以跟面试官确认电话面试的时间,你可以在这段时间内,开始面试前的准备。
面试前需要做哪些准备呢?
形象建设分为 声音形象、外在形象、内在形象 。
声音形象: 为什么我要讲声音形象呢?因为前几轮的面试都是电话面试,面试官看不到你,你的语速、语调、语气,都会影响电话那头对你的判断。
声音影响面试的问题有哪些呢?
那我们要做的是尽可能的让我们的语速保持匀速的水平,一分钟200字左右,然后用胸腔偏下的位置发声,用气息推动喉咙,这样的发出的声音雄浑有力,不会显得沉闷,反而有些磁性。
外在形象: 针对现场面试的,简单、干练、不邋遢就好。
内在形象: 声音形象,外在形象都是浅层的吸引,最致命的吸引是人格吸引,是你的内在形象。我们在自我认识的环节,梳理过了“关键”信息,在面试的时候,就派上用场了,把那些能够呈现你内在形象的案例展示给面试官,通过例子证明自己,你就是这样的一个人,简单说就是:“ 我不要我觉得,我要你觉得 ”。内在形象有哪些呢?自信、踏实、皮实、乐观等等
简历为避免排版混乱,使用PDF格式。书写原则: 可以适度包装,但是不要造假 。造假涉及到诚信问题,你在技术面混过去了,后面第三方背景调查的时候,会验证你说的情况,一旦打上不诚信的标签,你就永远进不了阿里了。在写简历的时候,多关注一下对方招聘岗位的JD,岗位职责和需要的技术栈是什么。了解这些后,尽可能在书写简历的时候,展示你和招聘岗位所需重合的技能。如果当前掌握的技能和目标岗位有一定差距,那需要花时间提升不足,补齐这块差距。不同公司的前端岗位的职责或技术方向不同,往往要准备多份简历去匹配不同公司岗位的情况。
我的简历的内容排版很简洁,写了基本信息,专业技能、项目经历,最后才是教育背景。对于社招来说,你在大学期间发生的事情已经不是那么重要了。重要的是你目前 掌握的技能和项目经历 ,这两块是要重点描写的。专业技能按掌握、熟悉、了解程度依次罗列。亮点项目是之前你梳理过的,详细写,附带数据描述成果更具说服力。其他不重要的项目可以简单描述技术栈,一笔带过。这么做的目的就是一眼让面试官看到你的优势和核心竞争力。推荐一些好的简历模板,比如 WonderCV、五百丁。简历不用太花里胡哨,简单明了,能够清晰的表达你的内容即可。
面试前自我模拟面试可以增加你的自信心,自我介绍、面试的一些的话术都可以提前准备好,然后可以讲给别人听、讲给自己听。或者找一个水平在你之上的前辈对你进行一次模拟面试,收集面试反馈,针对模拟面试时卡顿、忘词的知识点,重新记忆和解释,然后不断的重复上面步骤,直到你能可以用自己的话说出知识点的核心内容。
沟通的原则: 客观描述事实,不做主观臆断 。具体有哪些情况呢?三说和三不说。
面试的时候,可以尝试引导面试官。 每个面试官的喜好,出题的角度都不一样,这个我们是无法预测的,但是我们可以去引导对方问一些问题。比如他问到某一个知识点A的时候,我们在回答A的同时,引申出和A有联系的知识点B或C。回答的重心放在知识点A上,B或C是你在回答A的时候顺带那么一提,它就像一个鱼钩,来引导面试官来问我们擅长的、准备好的知识。
渲染情绪: 在面试的时候多感知对方的情绪,在适当的时候,用一些你准备好的事迹,引发对方共情。之前我们梳理过一些“关键信息”,有一些失败经历或高光时刻是很容易让人产生共鸣的。
反问阶段:如果你不知道问些什么,有保守一点的问法是,去问问对方团队的情况,团队在组织定位是怎么样的、技术栈是什么、有哪些人员梯度,当前遇到什么痛点问题等等。这些问题你传递出来的信息是,我对当前岗位所处的团队,所做的事情非常感兴趣。之前我在一家公司现场面试的时候,就主动提出带我在公司转转,了解公司的产品形态。这也是一个向对方表达兴趣的技巧。
面试的时候考察什么?技术一面,重点考察基础和知识广度,上探你的技术天花板,下探计算机底层原理。一面常见的考察点有哪些呢?
技术一面专业能力占了80%,软素质占了20%。如果过了技术一面,说明你的基础各方面是很不错的。接下来技术二面会重点考察你的工程能力、设计能力、规划能力。二面通常会从你的项目开始问,这个时候你梳理的亮点项目就派上用场了。二面常见的考察点有哪些呢?
这些都是考察范围,技术二面专业占了60%,软素质占了40%。到了技术三面的时候,会聊一聊技术格局、视野、人生规划、软技能考察,这部分多展示你的大局观,比如业务上的大图,技术上的大图,你长期或短期的人生规划等等。
2.2.6 描述项目(STAR法则)
我分享一个描述的、项目的方法,叫做STAR法则,他有五个要素,情境(situation)、目标(target)、行动(action)、结果(result),我把他扩展了一下,技术面或者hr面的时候描述项目的时候,可以按这个套路来。
2.2.6 面试复盘
面试后记得主动添加面试官的微信,这是免费的性价比很高的人脉。加完微信能做哪些事?
面试后还需要复盘, 复盘结果和情绪 。拿一张白纸记录你在面试中答好的/不好的知识点,还有你的在情绪占比,紧张、开心、严肃是不是占了面试中大部分情绪。每一次面试都像一面镜子,照出你的短板,然后你把短板改掉,就离目标越来越近了。拥有这种面试意识,面试的次数多了,你会从害怕面试变得爱上面试。
分享一本软件能的书 《金字塔原理》 ,是麦肯锡咨询公司第一位女性顾问:芭芭拉·明托,写的一本关于逻辑思路的书。里面介绍了一些方法,帮助我们怎么去 自下而上的构建逻辑金字塔 ,或者是 自上而下的表达金字塔 。
书的内容介绍我不做具体的描述了,感兴趣的同学可以自行搜索。
我们在提升硬技能的同时,也要注重提升软技能。技术很重要,但是它是我们实现想法的语言工具。在这之上, 使用工具的方法,比工具本身更关键 ,我们要清楚真正的修炼是什么? 永远都是内在的东西,软性的东西 。比如说你的思维能力,耐心,聪明,情商,遇到挫折时的内心复原力。这些技能是可以伴随你漫长的一生的,终身受用的,那么我们就应该为此投资。
我在工作前2年是处于一个迷茫的状态,没有自己的规划。真正让我发生改变的是,突然有一天我回家,父母的头发都白了,那一刻我意识到自己该学会长大,该为未来做点什么了。从那以后,我每天的状态就是,白天公司工作谋生存,晚上自我提升谋发展。在工作第3年的时候,自我感觉准备差不多了,开始去阿里面试,所以才有了那段裸辞的经历。当然我摔的很惨,也重新认识了自己。
我们做一个时间切片,把过去的自己和现在的自己对比,你会我发现当时所经历的,觉得很困难的事,现在看来都不是事。给自己的人生列个目标,知道自己想成为什么样的人,实现目标,自己的差距就会越来越小。
还有什么想了解的可以
有想了解更多的小伙伴可以加Q群 链接 里面看一下,应该对你们能够有所帮助
⑶ 对Web前端发展贡献最大的人物和事件有哪些
下面我们分析一下前端发展历程:
首先说的是布兰登.艾奇,我们的js之父,他的故事太传奇了,不做多说。道格拉斯.克罗克富德js大宗师。这两位是我们前端发展的最重要的推动人物。
随着2009年js的基础类库的完善,以下是主要做出突出贡献的人:
1、约翰.瑞森,我们的jQuery之父。
2、山姆.史蒂芬森, Prototype的创始人,除了有prototype之外,他还开发过很多开源软件,比如:rbenv,sprockets等。
ECMAScript规范的执行引起了浏览器大战,各大浏览器开始瓜分IE市场占有率,其中火狐,谷歌取得大胜。
此时Ryan Dahl 的node.js和3gmobile正在慢慢浮出水面,他们的出现,使前端真正的出现了繁荣景象。
2010年前端相对风平浪静,但是安卓智能机的出现,使将来移动端风起云涌。这年w3c对web性能成立了专门的工作小组,人们更多的开始关注性能和体验问题。
2011年h5的抗起了大旗,让flash堪忧。语义明确的标签体系、简洁明了的富媒体支持、本地数据的储存技术、canvas 等等各类技术被广泛应用。很多开发者面临一项技术选择,flash OR H5,但Adobe从11.1开始就不在更新,投身于H5,这意味着flash技术凋零。
2012年,响应式开发,工程化推进,随着手机厂商的各种骚动,为了快速占有市场,提高性价比,出现了价格低,性能好的一大批手机,随之而来的是H5借着这股风快速的在web开发颤动了起来。移动端的框架开发不亚于PC对多个浏览器的支持,这一年萌生了众多移动框架,比如:Sencha Touch/Zepto.js/JQ Mobile 等,相对 PC 端框架,它们更加轻便。
⑷ 作为前端,我为什么选择 Angular 2
ALL-IN-ONE
不管是1还是2,Angular最显着的特征就是其整合性。它是由单一项目组常年开发维护的一体化框架,涵盖了M、V、C/VM等各个层面,不需要组合、评估其它技术就能完成大部分前端开发任务。这样可以有效降低决策成本,提高决策速度,对需要快速起步的团队是非常有帮助的。
让我们换一种问法吧:你想用乐高搭一个客厅,还是买宜家套装?
Angular 2就是前端开发领域的“宜家套装”,它经过精心的前期设计,涵盖了开发中的各个层面,层与层之间都经过了精心调适,是一个“开箱即用”的框架。
当然,你可能还记着Angular 1带给你的那些快乐以及……痛苦。这是有历史原因的。由于它是从一个用来做原型的框架演化而来的,加上诞生时间很早(2009年,作为对比,jQuery诞生于2006年),当时生态不完善,连模块化机制都得自己实现(这就是angular.mole的由来,也是Angular 2中抛弃它的理由)。在长达七年的演化过程中,各种进化的遗迹非常明显,留下了不少“阑尾”。
但Angular 2就不同了,它的起点更高,整合了现代前端的各种先进理念,在框架、文档、工具等各个层面提供了全方位的支持。比如它的“组件样式”能让你在无需了解CSS Mole的前提下获得CSS Mole的好处,它的Starter工程能让你在无需了解Webpack的前提下获得Hot Mole Replacement等先进特性,它能让你从Web Worker(你知道这是什么吗?)中获得显着的性能提升。
你只管在前台秀肌肉吧!剩下的,让Angular在幕后帮你搞定!
模块化的技术
虽然Angular是一个ALL-IN-ONE的框架,但这并不妨碍它同时是一个灵活的框架。还记得OCP(开闭原则)吗?一个好的设计,对扩展应该是开放的,对修改应该是关闭的。
Angular 2很好的践行了OCP原则以及SoC(关注点分离)原则。
它非常有效的分离了渲染与交互逻辑,这就让它可以很好的跟包括React在内的渲染引擎搭配使用,除此之外,它还可以使用内存渲染引擎,以实现服务端渲染;还可以使用Native渲染引擎,以编译出真正的原生程序(NativeScript)。
它还分离了数据供应与变更检测逻辑,从而让它可以自由使用包括RxJS以及ImmutableJS在内的第三方数据框架/工具。
不仅如此。
在Angular 1和Angular 2中最具特色的应该算是依赖注入(DI)系统了,它把后端开发中用来解决复杂问题、实现高弹性设计的DI技术引入了前端。Angular 2中更是通过引入TypeScript赋予它更高的灵活性和便利性。
不过,Angular 2并没有敝帚自珍,把它跟框架本身紧紧黏结在一起,而是把它设计成了一个独立可用的模块。这就意味着,无论你正在使用什么前端框架,甚至NodeJS后端框架,都可以自由使用它,并从中获益。
全生命周期支持
除非你打算写一个一次性应用,否则软件的生命周期会很长。宏观来看,真正的挑战来自多个方面,而且在不断变化。
开始的阶段,我们需要非常快速的建立原型,让它跑起来,引入最终用户来试用,这个时候,挑战来自开发速度以及可复用资产。
之后,会建立一个逐渐扩大的项目组,来完善这个原型的功能。主要的挑战是让这个原型通过重构不断进行演化,特别是在演化的后半个阶段,产品需要保持随时可以上线的状态。但技术上的挑战那都不是事儿!关键是人。
如何让新人快速融入项目组,贡献生产力?这可没那么简单。“你先去学xxx 0.5、yyy 0.9、zzz 5.3...还要了解它们前后版本之间的差异,我再给你讲代码”,这种话,我可说不出口。一个优秀的框架需要对分工提供良好的支持,每个人都可以先从一些简单任务开始,逐步的从修改一个文件扩大到修改一个目录再到独立实现一个特性。
有了这种分工,每个团队成员就可以从一个成功走向一个更大的成功。这就需要框架在设计上具有良好的局部性:你可以放心大胆的修改一部分,而不用担心影响另一部分。你可以只修改CSS,可以只修改HTML,可以只修改TS/js,而不用担心自己的修改破坏了其他部分。而Angular 2通过声明式界面、组件样式以及独立模板文件等对这种安全感提供了有力的保障。
再然后,如果你的软件顺利的进入了线上维护阶段,那么恭喜你,你终于迎来真正的大Boss了!这个大Boss就是可维护性。Angular开发组有很多程序员来自Google,如果要问谁的软件维护经验最丰富,Google和微软必然名列前茅。微软通过TypeScript的强类型机制体现了自己的经验,而Google则通过将OCP、SoC、SRP等一系列软件设计原则融入Angular体现了自己的经验。具体技术上则体现为:DI、生命周期钩子、组件等等。
最后,如果你的软件完成了历史使命需要逐步退出,是不是就能松口气了?不行,你还得继续留人维护它。如果你选择的是一个闭源的或某个社区很羸弱的开源技术,你就把以前的主力架构师、资深程序员留下来继续维护它吧。或者你就得鼓起勇气跟用户说:你们玩儿,我先走了。而Angular是一个大型开源项目,并得到了Google的鼎力支持。即使经历过Angular 2项目组初期的公关失败,它仍然有着其它竞品无法企及的繁荣社区 —— 无论在全球还是在中国。显然,无论是对传统社区资源的继承,还是对新社区资源的开拓,我们都有理由相信,Angular社区仍将一如既往地繁荣。至少,如果你不想让自己的软件建立在一大堆由个人维护的核心库上,那么Angular毫无疑问是最好的选择。
逃离“版本地狱”
如果是一两个人开发一个预期寿命不到一年的系统,那么任何框架都可以胜任。但,现实中我们都把这种系统称之为“坑”。作为一个高度专业、高度工程化的开发组,我们不能把“坑”留给友军。这些坑中,最明显的就是“版本地狱”。
想象一下,你仅仅升级了库的次版本号,原来的软件就不能用了,损坏了N处单元测试以及M个E2E场景。这种情况对于开发组来说简直是一个噩梦 —— 毕竟,谁也不想做无用功,更何况是一而再、再而三的。或者,它每次小的改动都会修改主版本号 —— 对,我就是不向后兼容,你能咋地?你所能做的就是每一次决定升级都如临大敌,不但要小心翼翼的升级这个库本身还要升级与它协作的几乎所有库。
可见,乱标版本号可能会让使用者付出巨大的代价。这不但体现在工作量上,还会体现在研发团队的招募与培养上,想象一下,对小版本之间都不兼容的框架,研发团队都需要记住多少东西?那简直是噩梦!
但是,版本号的问题在业内早就有了事实性标准,那就是SemVer语义化版本标准。唯一的问题是,作为框架/库的作者,遵循SemVer标准需要付出的努力是巨大的。是否愿意付出这些代价,是一个框架(及其开发组)是否成熟的重要标志。
Angular就是这样一个框架,其开发组曾作出的努力是有目共睹的。如果你是从Angular 1.2开始使用的,那么你为1.2所写的代码都可以毫无障碍的迁移到最新的1.5版,新的版本只是引入了新特性,而没有破坏老特性。这是因为Angular开发组写了大量单元测试和E2E测试,借助CI来保障这种平滑过渡。只有在从1.0到1.2的迁移过程中(1.1一直是beta,忽略不计),出现了一系列破坏性变更,这些变更被明确的记录在文档中,并且解释了做出这些变更的理由 —— 大多数是因为提升前端代码安全性。即使你恰好遇到了这些破坏性变更,它也会给出明确的错误提示。
这些必要而无聊的工作,正是帮助我们逃离“版本地狱”的关键。是否愿意做这些无聊而琐碎的工作,是一个框架的开发组是否成熟、专业的关键特征。而Angular的开发组已经证明了它值得你信任!
遇见未来的标准
编程领域,创新无处不在。但对一个工程团队来说,最难得的是标准。标准意味着:
招人容易。因为标准的东西会的人最多,而且人们愿意学它 —— 因为知道学了就不会浪费。
养人容易。因为网上有很多教程可用,即使不得已自己做教程,性价比也是最高的。
换人容易。标准就意味着不是私有技术,一个人离开了,就能用另一个人补上,而不会出现长期空缺,影响业务。
但是,标准永远会比创新慢一拍或N拍。这就意味着如果你追新,那么在获得技术上的收益的同时,也要付出工程上的代价。固然,两者不可兼得,但是还是有一些策略能够调和两者的。最简单的策略就是:遇见未来的标准。
所谓未来的标准,就是某个标准的草案,它很有希望成为未来的标准,这代表了业界对某项技术的认可,于是,即使它还不成熟,人们也愿意为之投资。比如虽然Google曾经提出过N种自有技术,包括SPDY、Gears、OGG等,但却并没有把它们变成私有技术,而是对社区开放以及并入W3C的标准草案。
Angular 2采用的就是这种策略。它所参照的标准草案比较多,一个是WebWorker,它借助WebWorker来把繁重的计算工作移入辅助线程,让界面线程不受影响;另一个是WebComponents,Angular 2的组件化体系就是对WebComponents的一种实现;最后是CSS scoping,现在虽然市面上有了很多CSS模块化技术,但事实上最终还是会被统一到CSS Scoping标准上,届时,如果:local等关键字无法进入标准,就会成为私有技术。而Angular 2选择的方式是直接实现CSS scoping标准草案,比如:host、:host-context等。显然,采用这种策略,“遇见未来的标准”的成功率会高得多。
可以看到,Angular 2的设计哲学中贯穿着对标准化的热烈拥抱,这是我判断它将赢得未来的另一个信心来源。
速度与激情
Angular 2终于摆脱了旧的技术框架束缚,开始了对速度的极致追求。在Angular 1中,虽然绝大多数场景下性能都不是问题,不过还是因为其代码中存在的一个用来实现脏检查的三重循环而饱受抨击 —— 似乎真有人能感受到30毫秒和100毫秒的差异似的。
不过,有软肋总是不太好。于是,在Angular 2中,通过重新设计和引入新技术,从原理上对速度进行了提升,据官方以前提供的一个数据说是把“变更检测”的效率提升了500%。
它在“变更检测”算法上做了两项主要的改进:
在设计上,把以前的“多轮检查、直到稳定”策略改成了“一轮检查、直接稳定”策略。
当然,这会对自己的代码产生一定的限制,但实际上只在有限的少数几个场景下才会遇到这个限制,而且官方文档中也给出了明确的提示。
在实现上,把“变更检测”算法移入了由WebWorker创建的辅助线程中执行。
现代的家用电脑很多都已经是多核超线程的,但是浏览网页时实际上无法充分利用全部线程,而WebWorker提供了一个新的机制,
让一些相对繁重的计算工作运行在辅助线程中,等执行完了再通知主线程。即使你不明白WebWorker的工作原理,
至少也能知道Ajax请求是不会阻塞界面响应的,WebWorker也一样。
除此之外,Angular还对数据源进行了抽象,你完全可以用ImmutableJS来作为Angular的数据源,获得其在提升“变更检测”速度方面的所有优势。
除了“变更检测”外,Angular以及所有前端SPA程序,都有一个通病:首次加载太慢,要下载完所有js和css才能渲染出完整的界面来。react通过虚拟DOM解决了此问题,而Angular 2则通过独立的服务端渲染引擎解决了这个问题。我们前面说过,Angular 2把渲染引擎独立了出来,因此可以在NodeJS中实现服务端的内存渲染。所谓内存渲染就是在内存中把DOM结构渲染出来并发回给浏览器,这样,客户端不需要等JS代码下载完就可以显示出完整的界面了。这种分离还带来了另一个好处,那就是SEO。SEO同样是传统SPA的一个难点,它和服务端渲染是同一个问题的两个方面,因此随着服务端渲染的完成,SEO问题也被顺便解决了。
让你无缝升级
Angular 2开发组在早期阶段曾犯下一个严重的公关错误:过早宣布不兼容Angular 1,也不提供从Angular 1到2的升级方案。
这让Angular 2开发组付出了沉重的代价,可谓伤透了粉丝的心。作为技术人员,这种失误固然是可以理解的,但却需要付出更多的努力来弥补它。而Angular 2确实这么做了。
在Angular 2中,开发组提供了一个UpgradeAdapter类,这个升级适配器让Angular 1.x的所有部件都能和Angular 2.x中的所有部件协同工作。
而最牛的地方在于,它让你可以一个文件一个文件的逐步升级到Angular 2,而在整个升级过程中,应用可以继续在线上跑!看着神奇吗?其实也算不了啥,Google做这种事早就是轻车熟路了。这只不过是对Angular开发组出色的工程化开发能力的一点小小证明而已。
不过,既然如此,当初又何必急匆匆宣布不兼容呢?可见,再出色的工程团队,如果缺少了和社区沟通的产品运营技巧,也会付出巨大代价。希望Angular开发组以后能谨言慎行,多用行动来平息质疑。
幕后 —— 当Google牵手微软
当年的浏览器大战,让人记忆犹新,Chrome的出品商Google和IE的出品商微软正是浏览器大战的两大主角。
俗话说:没有永远的朋友,也没有永远的敌人,只有永远的…… 精益求精。
正是在这样的“俗话”指导下,Google与微软相逢一笑泯恩仇,撤销了很多针对彼此的诉讼,甚至在一些领域开始合作。而实际上,在他们公开和解之前,就已经开始公开合作了,其契机就是Angular 2。
这就要扯出一点小八卦了。
在Angular 2开发的早期阶段,由于传统JS(ES5)以及当时的ES6草案无法满足项目组的开发需求,项目组有点烦。后来有人灵机一动开发了一种叫做AtScript的新语言,它是什么呢?一个带类型支持和Annotation支持的升级版JS。其实在类型支持方面,TypeScript早就已经做了,而且那时候已经比较成熟,唯一的遗憾是不支持Annotation,也就是像Java中那样通过@符号定义元数据的方式。
Angular开发组就这样孤独的走过了一小段儿时间,后来也不知道怎么这两个欢喜冤家就公然牵手了。总之,最后的结果是:TypeScript中加入了与Annotation相似的Decorator特性,而Angular放弃了AtScript改用TypeScript。
这次结合无论对两大厂商还是对各自的粉丝,都是一个皆大欢喜的结局,称其为世纪联手也不为过。此后,Google与微软不再止于暗送秋波,而是开始了一系列秀恩爱的动作。无论如何,对于开发者来说,这都是一个好消息。
软粉们可能还记得在6.1的微软开发者大会上,微软曾公开提及Angular 2。事实上,TypeScript目前虽然已经相当完备,但应用度仍然不高。就个人感觉来说,Angular 2将是TypeScript的一个杀手级应用。TypeScript如果当选TIOBE年度语言,Angular 2的推出功不可没。
为什么我要特意插播这段儿故事呢?那是因为我认为一个产品的未来最终取决于开发组的未来,而不是相反。软件的本质是人!一个心态开放、讲究合作、勇于打破陈规陋习的开发组,才是框架给人信心的根本保障。
后端程序员的终南捷径
前端程序员自不必说,因为有很多人就是靠Angular进入专业前端领域的。下面这段话主要写给后端程序员。
不管是想学习新技术还是出于工作需要,都有很多后端程序员对前端技术跃跃欲试。但面对前端让人眼花缭乱的大量候选技术以及未知的概念,他们往往感觉感觉无所适从。如果你是其中的一员,那么Angular可以“治愈”你的选择恐惧症。
正如前面所说,Angular是一个“ALL-IN-ONE”的框架,这就意味着你只要掌握了Angular就可以完成大量的前端工作了。
这首先得益于它对各种技术的封装,让你不用关心它的实现细节。Angular隔离了浏览器的细节,大多数工作你甚至都不需要知道DOM等前端知识就可以完成。
其次,Angular选择了TypeScript作为主语言。如果你是个C#程序员,一定会对它的语法感觉似曾相识。没错,TypeScript和C#、Delphi有同一个“爹” —— 传奇人物Anders Hejlsberg。即使是Java程序员,也不会觉得陌生:强类型、类、接口、注解等等,无一不是后端程序员们耳熟能详的概念。说到底,并没有什么前端语言和后端语言,在语言领域耕耘多年的Anders太熟悉优秀语言的共性了,他所做的取舍值得你信赖。
再次,Angular在前端实现了服务与依赖注入的概念。随着前端需求的进一步膨胀,即使只算逻辑代码,其需求复杂度也即将甚至已经赶上了大部分后端程序。所以,后端遇到过的挑战前端也迟早会遇到,这正是后端程序员弯道超车的好机会,而依赖注入正是后端程序员的看家本领。
最后,Angular对团队作战提供了良好的支持,比如模板与代码的分离、样式表的局部化、组件化的设计、服务与依赖注入体系等。这些特性让后端程序员可以先专注于跟后端代码最像的模型和交互逻辑部分,而把诸如样式、模板等自己不擅长的部分交给队友。