狼叔 I5ting
swagger ui
aotuprefixer
atwood定律:
任何可以用JavaScript来写的应用,最终都将用JavaScript来写
- node的目标
- 简化并发编程,尤其是以网络编程为主的密集IO应用。
- node缺点
- 异步流程控制+回调地狱
- 简述node构成
- node = libuv(event loop + async i/o) + v8 + node bindings
- v8引擎的黑盒功能
- 把JavaScript翻译成c/c++
- node除了支持v8引擎以外,还支持什么引擎
- ChakraCore
- nodejs的网络io和文件io有什么区别
- io任务放到了libuv的事件循环中,但是只有文件io才会被事件循环放到libuv线程池中。
- nodejs为什么会被称为单线程
- 任务的分发是单线程的,具体的任务放到了线程池中,具体任务执行时是多线程的。排队-叫号模型。
- nodejs的特点
- 简单
- js本身简单
- 并发编程简单:事件驱动+非阻塞io
- 部署运维方便:不用额外的容器,配套完善,与现有的自动化运维工具兼容
- npm小而美的模块让开发简单
- 适合构建web应用
- 前后端不分离的web网站
- 多端共用的后台接口下的,各端独立的api层
- RPC:使用TCP协议
- 方式:使用Socket编程
- 案例:DNode、Seneca、gRPC
- 前后端分离
- 前端页面静态化
- 前端页面服务化
- 服务端渲染
- PWA
- Serverless:不关心运维、流量、高并发 (Knative)
- 可扩展
- npm社区
- 编写c/c++扩展,完成CPU密集型操作
- 轻松搭配java
- 与其他架构搭配轻松
- 高性能
- 快:v8之后是c/c++
- 天生异步:事件驱动和非阻塞i/o必须异步,让dev对并发操作毫无感知
- 适用于io密集型的网络应用开发,因为网络应用开发的瓶颈在于io。对于cpu密集型开发,尽量使用其他语言,没法使用其他语言就要用c/c++扩展。
- 简单
- 应用场景:
- 工具
- 前端
- 后端
- 跨平台
- 源码编译
- 3m安装法
- npm
- npm v2 树形 下载慢 引用清晰
- npm v3 扁平 下载快 查找依赖麻烦 当依赖多个版本时,也会采用树形结构
- npm v5 自动记录依赖树 有package-lock.json
- nrm
- 哪个镜像快,你怎么知道的
- cnpm快 nrm test
- 哪个镜像快,你怎么知道的
- nvm
- n不支持windows
- nvm–nvmw支持Windows
- nvs-支持windows
- 如果npm全局安装模块的时候遇到了权限问题,请问当前版本的node是不是从nvm下载的?
- 不是,因为使用nvm安装的node会安装到用户目录下(如果不使用nvm,node就安装到了系统目录下),所以使用npm全局安装时不会有权限问题
- 使用zsh时,要想配置环境变量,就要把地址放到~/.zshrc中,并source
- 奇数版本和偶数版本的区别
- 奇数版本是尝鲜版本,偶数版本是LTS
- 切换node版本以后,全局模块要重新安装,有快捷方式吗?
- nvm reinstall-packages 6
- 发布到github的项目node版本是v10,怎么让不同node版本的用户都能不受版本影响地运行我们的项目
- 在.nvmrc文件中定义
- 怎么使用node-chakracore:指定远端下载地址
- npm
- commonjs=require、module.exports
- js生态圈:nodejsSDK+v8 js + bom/dom
- 编程三境界
- 第三等:打日志
- 第二等:断点调试
- 第一等:测试驱动开发(写代码之前先测试)TDD BDD :Mocha AVA Jest Cucumber
- 断点调试:
- 当前打开某一文件,按f5,即调试当前文件
- 当前未打开某一个文件,按f5,使用固定文件调试
- 远程调试
- java架构
- model:利用orm使用model跟数据库形成映射关系
- DAO层,对单一model的操作
- service层,调用DAO,定义业务逻辑
- controller:调用service,执行具体业务
- nginx的替代方案
- openrestry:lua 学习成本高
- 静态api方案:typicode/json-server
- serverless
- function as service
- 全栈 = 业务 + ui
- 前端转全栈难点:DB 和 ER 模型
- 跟人学、跟书学、自己悟。
- 开源项目、每日精进
- 一次学习、处处使用