⑴ 要玩傳奇世界電腦的系統配置要多少
傳奇世界是一個大型網路游戲。請不要被這個「大型」所嚇唬到,以我們玩家理解所知,「大型」就是高級。所以用的電腦當然也不會遜色。其實我們這樣理解是錯了,盛大這樣稱自己的游戲為大型。只不過是客戶端夠「大型」而己,而己在線人數眾多。但如果在線人數眾多算是大型的話,那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對團隊作戰提供了良好的支持,比如模板與代碼的分離、樣式表的局部化、組件化的設計、服務與依賴注入體系等。這些特性讓後端程序員可以先專注於跟後端代碼最像的模型和交互邏輯部分,而把諸如樣式、模板等自己不擅長的部分交給隊友。