第五期 沸點,掘金團隊請來了Node.js Core Collaborator 之一,《Node.js:來一打 C++ 擴展》做者死月作了爲期三天的 Ask Me Anything (AMA) 活動(已結束)。javascript
咱們在此精選了一些來自用戶的提問及死月的回答。前端
- Node.js Core Collaborator 之
- 《Node.js:來一打 C++ 擴展》做者
- 在螞蟻金服體驗技術部,負責一些內部基礎設施、框架的研發和維護
- 掘金專欄:juejin.im/user/556864…
- Github 地址: github.com/XadillaX
路過,首先,抱頭蹲防最高..其次.. 問個老生常談的問題...當前環境下NodeJs的應用場景? 誠然,業務邏輯的性能,經過C++擴展能夠有長足的提高,然而我的有種華而不實的感受... 作膠水的話..python彷佛用的更多... Web服務器端,大型項目大都仍是選擇JAVA..我聽有用Node寫到最後依賴管理很是痛苦...又推倒換回JAVA的... 幾年來,在大型項目上我只據說淘寶在16年拿來作過中間層...其它還有什麼大型項目的成功案例麼? 我我的,實際上是很喜歡NodeJs的..畢竟我是前端,寫js很親切,可是,目前..我尚未找到Node拿來寫玩具或者中小型項目之外的應用空間... 近兩年...我開始見到用js來作深度學習,和寫硬件的... 在這些方面不曉得有何高見?java
----------------------------node
備選問題: 據說,有些地方招算法,只要看面試者隨便登陸一個社交平臺,看是否是二次元妹紙頭像就基本能決定要不要,對於這個現象的見解?python
其實這個問題網上答案已經不少了,而且不少答案也都是可信的。在於小公司來講,Node.js 快速出原形,而且後續迭代,是很是好的一個選擇。對於這種項目的,技術選型來講並無太多講究,無非是選型的人手熟哪一個,而且能不能 Hold 住。當下的硬件環境或者設施來講,語言以及其性能在大多數場景下並不會成爲瓶頸,而網上各類大肆吹鼓某種語言的現象其實看看就好。git
而對於大一點的項目來講,或者公司環境來講,除去上述的方面考慮,還要考慮到生態的完善性、人力資源的掌控性,Java 無疑是一哥,而 Node.js 在其易學性上面也減小了必定量的人力成本和學習成本,在各類業務線上的表現來講其性能也不會成爲瓶頸(極端狀況另論)。語言之爭非要說 Ruby 啊 Python 啊什麼的比 JavaScript 好,仁者見仁——學習成原本說,因爲早年還不大會編程的時候玩 RPG Maker 留下的陰影,致使我至今沒學會 Ruby,因此學習成本這事也是仁者見仁智者見智。程序員
你要說有什麼項目的話,網上能獲得的信息其實不少的,支撐天貓的各類活動會場(尤爲是雙十一)的服務就是 Node.js 實現的,而你能見到的不少的支付寶前端頁面,也都是 Node.js 渲染出來的。github
固然也有很多公司拿 Node.js 作純(且惟一)的後端,這證實了是可行的,仍是一開始那句話,一般的選型來看無非是拍板人的選擇,並不會說形成不用某個東西作就作不下去了的狀況,除非是某些已經鞏固比較深的地位,如 Docker 與 Golang 的搭配等。面試
你說的硬件、人工智能方面,這些領域與上述回答不同,它們在我看來 Node.js 的確是玩具,也許將來某一天會有所成就,目前我持保留意見。在 IoT 方面應該的確是個不錯的選擇。算法
至於備用答案,其實這是一個機率問題。咱們假設一個面試官手頭有很是多的簡歷,但他自身很忙,沒有時間去篩簡歷。我雖然不懂人力資源,但也能猜個大概,招人並非要把全部的合適的人招進來,而是在有限的人頭數量中挑幾個合適的,也就是說其實漏掉幾個合適的問題也不大,除非是那種「非要不可」的。既然漏掉幾個不要緊,那麼問題就簡單了,我由於精力有限,粗粗將人分爲「可能挺不錯」和「雖然這一波也可能有不錯的人可是有概率是不怎麼樣的」兩撥,這兩撥人中在面試官的腦海裏的印象會出現「不錯」的人的機率在第一波中比較高。至於爲何高,這個就涉及到 ACG 的圈子了。OIer / ACMer(你能夠理解爲算法很不錯的人)圈子與 ACG 的圈子重合度相較於別的圈子來講會高一些,經過這種方法第一遍篩人就能有必定概率拿到本身想要的人。而且,在招人的時候看的不只僅是能力,兩我的水平同樣的狀況下,面試官更傾向於招一個與團隊基因更爲契合更有共同話題的候選人,這個時候,整個團隊都有 ACG 基因,二選一固然招妹子頭像的了。
關於 C++ 擴展華而不實這點,能夠參考個人另外一個答案,閱讀的角度。你不寫擴展,這本書依然能夠爲你能更好地自行閱讀 Node.js 去了解它提供很好的幫助。
這裏只是拿 C++ 擴展做爲本書依附的一個宿主。
你好 node將來的方向 和 它真正能擅長的場景是哪些 ?
Web 領域應該會繼續守住,但也不會去撼動誰誰誰的地位,各有所長,在你們的熟練度、性能以及研發效率之間找一個平衡。類似的還有就是遊戲類的服務器,可是競品太多了,並且還沒完成一個太集中和完善的生態,老大哥柚子感受已經很久沒人維護了。
在渲染方面會有優點。由於這一層比較輕薄,上 Java 就顯得厚重了。
一些 Serverless 引擎以及相似場景可能會有自然的優點。例如 leancloud 在你作各類事情的時候能夠寫一些 JavaScript 源碼做爲補充邏輯,本身解釋本身的開發成本一般比你在 Java 層面搞個解析器或者上 V8 之類的研發成本會低一些,並且性能也不錯。
IoT 方面也是一個不錯的選擇,不過我還在觀望。
其它方面就是客戶端的東西,例如 Electron,NW.js 等,的確會下降客戶端軟件的開發門檻以及研發效率,畢竟樣式什麼的直接上 HTML + CSS 了,這個方法比較好,之前就有人這麼用了,之前就是 qt 也用了相似的方法。我一直期待會有一個內置 Node.js 的無線終端引擎,而不是 React Native 之類的,也許是由於相較於他們如今的引擎 Node.js 還比較笨重吧。
包括 Cocos2d 之類的也同樣,不知道爲何就是不基於 Node.js,多是那邊的開發者不在一個領域,你們都不 care 裏面有什麼,生態裏面能作什麼,只要是能寫 JavaScript 就夠了。
最近在寫一個桌面的 2D 遊戲引擎的 Node.js 玩具 Wrapper,就想驗證一下本身的想法,Node.js 也能夠寫遊戲,而不僅能是基於別的運行時的 JavaScript。
Wrapper 在 GitHub 的私有倉庫。而 github.com/XadillaX/no… 這個是更小的一個倉庫,用於驗證經過 Node.js C++ 擴展能搞這麼一個 Wrapper 的正確性的小 Demo。
將來若是真有這麼一個引擎了,我感受開發遊戲起來會更方便吧,不過這只是個人我的業餘愛好而已。
想問下如何成體系地輸出技術文章?單篇文章地思路我仍是蠻清晰,demo、設計思路、代碼分解、完整代碼(若是個人思路有問題歡迎指出)
其實先列提綱是比較有必要的。好比個人書,如何寫 C++ 擴展,腦圖畫出來所關聯的點就有 Node.js 模塊是怎麼樣的,你要寫的話須要安裝什麼,須要瞭解 libuv、Chrome V八、NAN、NAPI 等等等等。這些大綱列出來後,針對每一點再繼續細化,最後成爲一個體系。
而後你就沿着體系中的每個點線開始寫成面就行了。
最後來幾個實戰部分加深一下印象就行了。
另外,推薦一下一篇當初啓發個人一篇文章。寫一本技術書籍
我去年陪朋友參加過你的 Meetup,能夠評價在大搜車、螞蟻金服這兩個技術團隊各自有啥特色嗎
技術團隊我只能說是我待過的團隊,不表明全部的螞蟻團隊和大搜車團隊,並且不表明其餘人對團隊的見解。
首先一點就是驅動類型變了。在大搜車的時候目標比較明確,而在螞蟻團隊的時候更偏向於自我驅動型,你所要作的事情別人不必定知道,因爲不是在業務線,你須要本身思考怎麼樣去更好地服務於業務線,要花更多時間在這一層面的思考。
而人與人之間的聯繫也變了,由相對緊密的團體(指的是作的事情很是緊密和有關聯,不是團隊的私下關係)變成了更相對獨立的個體,每一個人負責的內容讓團隊的每一個人都有必定的外在聯繫,須要本身去維護和負責,而在大搜車更偏向於的是內在聯繫——因此螞蟻所在的團隊至關於對於每一個人的能力考驗變得更高了,每一個人都更須要獨當一面。
技術方面,因爲大搜車的基礎設施雖然很不錯,但相較於螞蟻團隊並無那麼完善,因此在各方面的選型或者使用方面會有更大的自由度,好比我能夠選擇使用 OpenResty + Node.js 來完成一個網關係統,只要樂意,我甚至能夠拿 Rust 玩玩並上線;而在螞蟻這邊的團隊,因爲設施完備,體量也在,因此相對沒有設施的各類技術棧會難以在線上進行,相對來講技術棧選擇的空間變小了,可是好處就是,開發、運維等一些列操做變簡單了。而很幸運的是,我在螞蟻金服所在的團隊就是負責各類前端、Node.js 技術棧基礎設施的建設和維護。
總之,排除別的東西不講,兩個團隊在技術方面各有優缺點吧。
前端er ,請問將來一兩年怎樣規劃
說實話,我對「界面展現交互層」的前端不甚瞭解,也不資深,沒法就這一條深度路線給出太好的建議。可是正如我一次知乎 Live《當咱們在學 Node.js 時,咱們在學什麼?》(www.zhihu.com/lives/90721…
「最後,太極生兩儀,兩儀生四象,四象生八卦,八卦生萬物。Node.js 就是萬物中的一個,而整個編程界能夠比做太極,咱們從萬物開始學,最後都須要歸宗到太極當中去——當咱們在學習 Node.js,咱們其實就是在學編程,不要把本身侷限住了。」
不管你是何種崗位,你始終是一個程序員,而一個程序員最重要的是思惟和基礎,哪怕工做中不是必定或者常常會用到,思惟和基礎的提高對你的整個職業生涯都很是有用。好比數據結構、算法、安全、離散數學等等內容,都是在我看來哪怕一個合格程序員不熟練但也至少知道的必備素質。
若是你在這些基礎上尚有欠缺,我推薦你在平常工做有條不紊繼續下去,新的技能繼續習得,架構能力能夠提高的前提下,開始補上這些基礎。並且這些基礎對我前面所說的「工做繼續」、「架構提高」以及「新技能 Get」等等方面都會有很是大的幫助。
仍是那句話,不要把本身侷限住了,這是個人建議,也只表明我我的的觀點。
固然,若是你這些能力上已經很是好了,而以個人能力,應該暫時沒法在前端路線給出更好的規劃了。
javascript和node能夠算同一個領域嗎?還有英語要怎麼學習
不少人把 JavaScript 當成前端,實際上它只是 ECMAScript 對應的一套語言,引擎有 V8 等等。而 Node.js 其實是使用 Node.js 寫後端,可是仍是不少人以爲它是前端。在這種大環境下,相較而言,我只能接受這種「泛前端」的概念了,就是大後端之前的,都叫「泛前端」,包括給前端提供 RESTful 接口的後端服務。
按照正確的理解來講,JavaScript 領域包含 Node.js 和瀏覽器前端 JavaScript,以及其它一些別人本身寫的用 JavaScript 作的事情,好比 React Native、Cocos2D 等等。
英語怎麼學,你讓我一個四級壓線過的,研究生英語掛過科的人怎麼回答呢?
請問如何在面試中能發揮正常水平,常常會發現面試問的問題,其實本身仔細想一想是會的,但有些問題老是當時沒有get到點或者沒回答好。以及想問問同是畢業3年的前端,我的成長有什麼好的建議?感謝。
很差意思,恕我直言,從我聽你的講述來看,你面試中若是能答上來屬於「超常發揮」。
#其實本身仔細想一想是會的,但有些問題老是當時沒有 get 到點或者沒回答好#
雖然有點很差聽,可是我單方面判斷,雖然本身知道,可是對這一塊領域仍是比較不熟悉,或者相對陌生。若是這些題目能答好的確屬於「超常發揮」了。
若是想在面試中能「發揮正常水平」,仍是推薦在平常開發中或者業餘中把該弄會的東西「真」的弄懂弄會,而且追根溯源,而不是隻知其一;不知其二。只知其一;不知其二很容易給本身形成一個「我實際上是知道這個東西的,只是面試時候沒答好,沒有 Get 到點」的錯覺。
但若是我猜想錯了,那有多是面試官問問題的方式或者面試水平有問題。
畢業三年,基本上是屬於一個能夠有至少一兩個新人帶的階段。這個時候主要仍是夯實本身的基礎,而且弄透徹,這樣才能在帶人的時候把人家也弄懂。至於基礎和思想來講,仍是個人另外一個回答,多寫多思考以及多學習。不要把本身侷限在「前端工程師」,而應該是一個「程序員」、「工程師」、「黑客」,甚至是「架構師」,以這個爲目標去進步,而不是進步成一個「比如今要厲害的前端工程師」。就跟軍隊同樣,首先是一個「兵」,而後再是各類不一樣的兵種。
本期 AMA 社區小夥伴提了許多實用問題,感謝死月認真地爲掘金小夥伴解答了很多疑問。瀏覽更多的問答,能夠到死月的 AMA 進行閱讀和討論。
死月從全部提問中選擇 2 個他以爲提問着贈送他的書籍《Node.js:來一打 C++ 擴展》。記得查看評論提醒喲~