第五期 沸点,掘金团队请来了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++ 扩展》。记得查看评论提醒哟~