Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 70 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,90 @@
# nodejsѧϰ��¼

<p align="center">
<a href="https://mp.weixin.qq.com/mp/homepage?__biz=MzkyMjE4NTA4OQ==&hid=1&sn=3bdf0c94cd53644ad27b5b1d80903a60&scene=18&devicetype=android-29&version=2800015d&lang=zh_CN&nettype=ctnet&ascene=7&session_us=gh_b80e6483a6bf&pass_ticket=PgopkreabYkxOU%2FOqxsKF%2FrLlayxaDkxkphno6QjITdzpqjiA8mlE%2BpLkMFPthYH&wx_header=1&scene=1"><img border="0" src="https://user-images.githubusercontent.com/21971405/112426258-988b8280-8d72-11eb-8454-a908b7a983a4.png"/></a><a href="https://www.toutiao.com/c/user/token/MS4wLjABAAAAav-ja86D-7HbQhVMqdxn5G9Jq8i08Bki333nXrLmEjs/"> <img border="0" src="https://user-images.githubusercontent.com/21971405/112426756-72b2ad80-8d73-11eb-8151-aa8edf48b2d9.png"/></a><a href="https://segmentfault.com/blog/jx-treehouse"> <img border="0" src="https://user-images.githubusercontent.com/21971405/112427420-81e62b00-8d74-11eb-9c7b-ec6577aa2df7.png"/></a>
</a><a href="https://www.zhihu.com/column/c_1069272612663902208"> <img border="0" src="https://user-images.githubusercontent.com/21971405/112428507-3a609e80-8d76-11eb-9335-072c9f7d7966.png"/></a>
</p>

[Nodeѧϰ��¼���¼�](https://segmentfault.com/a/1190000009490349)
# nodejs学习记录

[Node.jsѧϰ��¼: ����Buffer](https://segmentfault.com/a/1190000009248664)

[Node.jsѧϰ��¼�� stream](https://segmentfault.com/a/1190000009254441)
[Node学习记录:事件](https://segmentfault.com/a/1190000009490349)

[Node.jsѧϰ��¼�� �첽I/O](https://segmentfault.com/a/1190000009300468)
[Node.js学习记录: 理解Buffer](https://segmentfault.com/a/1190000009248664)

[Nodejsѧϰ��¼��express](https://segmentfault.com/a/1190000009308075)
[Node.js学习记录: stream](https://segmentfault.com/a/1190000009254441)

[Nodejsѧϰ��¼���첽���](https://segmentfault.com/a/1190000009315609)
[Node.js学习记录: 异步I/O](https://segmentfault.com/a/1190000009300468)

[Nodeѧϰ��¼�� д�ű�����](https://segmentfault.com/a/1190000009394503)
[Nodeѧϰ��¼�� ͼƬ����](https://segmentfault.com/a/1190000009406775)
[Nodejs学习记录:express](https://segmentfault.com/a/1190000009308075)

[Nodeѧϰ��¼��������](https://segmentfault.com/a/1190000009469920)
[Nodejs学习记录:异步编程](https://segmentfault.com/a/1190000009315609)

[Nodejsѧϰ��¼: ���������й���](https://segmentfault.com/a/1190000009482931)
[Node学习记录: 写脚本工具](https://segmentfault.com/a/1190000009394503)
[Node学习记录: 图片爬虫](https://segmentfault.com/a/1190000009406775)

[Node学习记录:网络编程](https://segmentfault.com/a/1190000009469920)

[Nodejs学习记录: 制作命令行工具](https://segmentfault.com/a/1190000009482931)

[Nodejs学习记录: koa2](https://segmentfault.com/a/1190000012858435)

# 学习路径

## 初级开发者

要求:能基于koa/express 开发基本的web服务

学习材料:



1. 【强烈推荐】博文共赏:Node.js 静态文件服务器实战 https://www.infoq.cn/article/2011/11/tyq-nodejs-static-file-server
讲述了不依赖任何外部模块实现一个静态文件服务器,初学者看完这个,再去看其它模块的实现方法,基本上就知道了一个web服务的基本原理。

2. 直接看Koa文档和示例,要搞清楚request,response的概念以及相关字段

- koa官网: https://koajs.com/

- koa examples:https://github.com/koajs/examples

3.能写中间件,知道中间件的含义

- 学习Koa - 让我们写一个中间件:https://juejin.im/post/5ac9edf1f265da2375072bbb
- 常用middleware list:https://github.com/koajs/koa/wiki
- 建议搞清楚几个常见middleware的意义,以及它的源码,以理解更深。eg:https://github.com/nswbmw/koa-ip



## 中级开发者

要求:能用eggjs,知道eggjs和koa的区别,解决了什么问题,能实现绝大部分复杂的需求,了解常用的模块

1.看完eggjs的文档,知道controler,service的意义

2.知道常用模块的使用。mysql,sequelize,graphql

3.知道和elk融合





## 高级开发者

要求:对多进程,代码健壮性,监控告警,性能优化,内存泄露,微服务等有一定的理解

[Node.js 子进程:你应该知道的一切](https://juejin.im/entry/595dc35b51882568d00a97ab?utm_source=gold-miner&utm_medium=readme&utm_campaign=github)
[解读 Node.js 的 cluster 模块](http://www.alloyteam.com/2015/08/nodejs-cluster-tutorial/)

## License

MIT

---

> ���� [jxdxsw.com](http://jxdxsw.com) &nbsp;&middot;&nbsp;
> 博客 [jxdxsw.com](http://jxdxsw.com) &nbsp;&middot;&nbsp;
> GitHub [@AlexZ33](https://github.com/AlexZ33) &nbsp;&middot;&nbsp;
> Weibo [@��������](http://weibo.com/jxtreehouse)&nbsp;&middot;&nbsp;
> Weibo [@镜心书社](http://weibo.com/jxtreehouse)&nbsp;&middot;&nbsp;
> segmentfault [@AlexZ33](https://segmentfault.com/u/alexz33)&nbsp;&middot;&nbsp;
> Quora [@Alex Zhao](https://www.quora.com/profile/Alex-Zhao-20)&nbsp;&middot;&nbsp;
> ΢�Ź��ں� [@���ĵ�С����](http://on891bjlf.bkt.clouddn.com/image/wechat%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7.jpg)
> 微信公众号 [@镜心的小树屋](http://on891bjlf.bkt.clouddn.com/image/wechat%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7.jpg)
88 changes: 88 additions & 0 deletions buffer/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# TypeScript v1 declaration files
typings/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env
.env.test

# parcel-bundler cache (https://parceljs.org/)
.cache

# next.js build output
.next

# nuxt.js build output
.nuxt

# vuepress build output
.vuepress/dist

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/
12 changes: 12 additions & 0 deletions buffer/.idea/buffer.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions buffer/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions buffer/.idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions buffer/.idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

94 changes: 94 additions & 0 deletions buffer/.idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 38 additions & 0 deletions buffer/Buffer.concate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/**
* 正确拼接Buffer
*
* 正确的拼接方式是用一个数组来储存接收到的所有Buffer片段并记录下所有片段的总长度
* 然后调用Buffer.concat()方法生成一个合并的Buffer对象。Buffer.concat()方法封装了从小Buffer对象向大Buffer对象的复制过程,实现十分细腻
* @list 要合并的Buffer数组 或 Uint8Array数组
* @length 合并后的Buffer的总长度
*/

Buffer.concat = function (list, length) {
if(!Array.isArray(list)) {
throw new Error('Usage: Buffer.concat(list, [length])')
}

if(list.length === 0) {
return Buffer.alloc(0)
} else if (list.length === 1) {
return list[0]
}

if(typeof length !== 'number') {
length = 0
for (let i = 0; i < list.length; i++) {
let buf = list[i]
length += buf.length
}
}

let buffer = Buffer.alloc(length)
var pos = 0;
for (let i = 0; i < list.length; i++) {
let buf = list[i]
buf.copy(buffer, pos)
pos+=buf.length
}

return buffer
}
23 changes: 23 additions & 0 deletions buffer/buffer_concat2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@

const fs = require('fs')

// 从某个文件创建一个字节流
const stream = fs.createReadStream('test.md', {highWaterMark: 11})

// readable.setEncoding(encoding)

// 默认情况下没有设置字符编码,流数据返回的是 Buffer 对象。 如果设置了字符编码,则流数据返回指定编码的字符串。 例如,调用 readable.setEncoding('utf-8') 会将数据解析为 UTF-8 数据,并返回字符串,调用 readable.setEncoding('hex') 则会将数据编码成十六进制字符串。

// 缺陷: 只能处理UTF-8, Base64, UCS-2/utf-16LE
// 坑点: https://blog.csdn.net/rcjjian/article/details/81238877
stream.setEncoding('utf8')

var data = ''
stream.on('data', function (chunk) {
data += chunk
})
// console.log('dasddd',stream)

stream.on('end', function () {
console.log(data)
})
Empty file added buffer/buffer_concat3.js
Empty file.
Loading