{"id":13753694,"url":"https://github.com/andriichyzh/node-js-advanced-training","last_synced_at":"2025-05-09T21:35:37.370Z","repository":{"id":151387903,"uuid":"42947652","full_name":"andriichyzh/node-js-advanced-training","owner":"andriichyzh","description":"Advanced training about creating microservices with using Node.js, MongoDB, Redis and modern approaches","archived":false,"fork":false,"pushed_at":"2019-04-17T19:09:12.000Z","size":2791,"stargazers_count":46,"open_issues_count":0,"forks_count":17,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-08-03T09:05:45.573Z","etag":null,"topics":["docker","es2015","javascript","microservice","mongodb","nodejs","redis","training"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andriichyzh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2015-09-22T16:54:12.000Z","updated_at":"2023-12-15T06:36:44.000Z","dependencies_parsed_at":"2024-01-17T15:02:58.599Z","dependency_job_id":"6781bec2-a5d4-4378-a914-8493ee11e65e","html_url":"https://github.com/andriichyzh/node-js-advanced-training","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andriichyzh%2Fnode-js-advanced-training","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andriichyzh%2Fnode-js-advanced-training/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andriichyzh%2Fnode-js-advanced-training/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andriichyzh%2Fnode-js-advanced-training/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andriichyzh","download_url":"https://codeload.github.com/andriichyzh/node-js-advanced-training/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224884615,"owners_count":17386121,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","es2015","javascript","microservice","mongodb","nodejs","redis","training"],"created_at":"2024-08-03T09:01:27.619Z","updated_at":"2024-11-16T06:30:38.214Z","avatar_url":"https://github.com/andriichyzh.png","language":"JavaScript","funding_links":[],"categories":["redis"],"sub_categories":[],"readme":"\n![Node.js](static/images/logo.png)\n\n# Node.js Advanced Training [![Join the chat at https://gitter.im/andriichyzh/node-js-advanced-training](https://badges.gitter.im/andriichyzh/node-js-advanced-training.svg)](https://gitter.im/andriichyzh/node-js-advanced-training?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n## Required\n\n - [JavaScript Base](requirements/javascript-base.md)\n - [JavaScript Advanced](requirements/javascript-advanced.md)\n - [MongoDB Base](requirements/mongodb-base.md)\n - [Redis Base](requirements/redis-base.md)\n - [Linux Base](requirements/linux-base.md)\n\n\n## Actual for versions:\n - **Node.js 4.2+**\n - **Mongo 3.2+**\n - **Redis 3.0+**\n\n\n## Program (total: 30h)\n\n### `Training Overview` (15m)\n\n### `JavaScript`\n\n#### [JavaScript Init Check Point](https://docs.google.com/presentation/d/1My6RpHXvAHyc1BCx5bEJhw_FmCyxBKgy5PKhjezjHCQ/edit?usp=sharing) (2h)\n\n - **Variables**\n - **Conditions**\n - **Loops**\n - **Functions**\n - **Prototypes**\n - **Asynchronous functions**\n\n#### [New in ECMAScript 2015 (ES6)](lessons/02-js-ecmascript-2015/materials.md) (2h) [[Homework]](lessons/02-js-ecmascript-2015/homework.md)\n\n - **Block scoping**\n - **Collections**\n - **Classes**\n - **Generators**\n - **Promises**\n - **Symbols**\n - **Template strings**\n - **Arrow Functions**\n\n#### [JavaScript Style Guides](lessons/03-js-style-guides/materials.md) (15m)\n\n - **Airbnb Coding Style**\n - **Google JavaScript Style**\n - **JavaScript \"Standard\" Style**\n - **Crockfords’s Coding Standards**\n - **Node.js Coding Style**\n - **NPM \"Funny\" Coding Style**\n - **Idiomatic JavaScript Coding Style**\n\n\n### `Node.js`\n\n#### [Philosophy](lessons/04-nodejs-philosophy/materials.md) (15m)\n\n - **Small core**\n - **Small modules**\n - **Small surface area**\n - **Simplicity and pragmatism**\n\n#### [Design Fundamentals](lessons/05-nodejs-design-fundamentals/materials.md) (1h)\n\n - **Conceptions**\n   - **Asynchronous**\n   - **Event Loop**\n   - **IO operations**\n   - **Non blocking**\n\n - **Components**\n   - **V8**\n   - **libuv**\n\n#### [Getting started](lessons/06-nodejs-getting-started/materials.md) (15m)\n\n - **Versions of Node.js**\n - **Installation Node.js**\n - **CLI commands**\n - **First scripts**\n\n#### [Errors Examples](lessons/07-nodejs-errors-examples/materials.md) (15m)\n\n - **System errors**\n - **Standard JavaScript errors**\n - **Assertion Errors**\n - **Custom errors**\n\n#### [Modules and NPM](lessons/08-nodejs-modules-and-npm/materials.md) (1h) [[Homework]](lessons/08-nodejs-modules-and-npm/homework.md)\n\n - **How it works?**\n - **Supported formats**\n - **Order of load and resolving algorithm**\n - **The module cache**\n - **NPM registry**\n\n#### [Core modules](lessons/09-nodejs-core-modules/materials.md) (2h)\n\n - **Console**\n - **Process**\n - **Timers**\n - **Errors**\n - **Events**\n - **Stream**\n - **File System**\n - **HTTP**\n - **Crypto**\n - **Child Processes**\n\n#### [Useful NPM modules](lessons/10-nodejs-useful-npm-modules/materials.md) (1h)\n\n - **Lodash**\n - **Async / Neo-async**\n - **WS**\n - **MongoDB**\n - **Redis**\n - **Postgres**\n\n#### [Build your own modules](lessons/11-nodejs-create-own-npm-module/materials.md) (1h)\n\n - **File structure**\n - **Deep with package.json**\n - **Local packages**\n - **Publish to NPM Registry**\n - **Using in application**\n\n####  Common Patterns in Node.js (1h)\n\n - **Callbacks**\n - **Error-first**\n - **Async function in any case**\n - **Recursive async functions**\n\n#### [Design Patterns in Node.js](lessons/12-nodejs-design-patterns/materials.md) (4h)\n\n - **Creational Design Patterns**\n   - Singleton\n   - Factory\n   - Abstract Factory\n\n - **Structural Design Patterns**\n   - Adapter\n   - Composite\n   - Decorator\n   - Facade\n   - Bridge\n   - Proxy\n\n - **Behavioral Design Patterns**\n   - Observer\n\n#### Asynchronous Control Flow (2h)\n\n - **The difficulties**\n   - The callback hell\n   - Specific flows\n\n - **Flows**\n   - Sequential execution\n   - Parallel execution\n   - Limited parallel execution\n\n - **Solutions**\n   - Pure JS functions\n   - Async library\n   - Promises\n   - Generators\n\n#### [Wiring modules](lessons/13-nodejs-wiring-modules/materials.md) (1h)\n\n - **Hardcoded dependency**\n - **Dependency injection**\n - **Service locator**\n - **Dependency injection container**\n\n#### Recipes for yours applications (2h)\n\n - **Run long sync operations**\n - **Run heavy CPU operations**\n - **Connection to MongoDB**\n - **Repository pattern**\n - ...\n\n#### [Testing in Node.js](lessons/15-nodejs-testing/materials.md) (3h)\n\n - **What we test?**\n   - Cases\n   - Priority\n - **How to do your testing most effective and fast?**\n   - Classes\n   - Boundary\n   - Test levels\n   - Piramida\n - **Approaches**\n   - TDD\n   - BDD\n   - Pairwise\n   - Mocks\n - **Tools and libraries**\n   - Mocha\n   - Should\n   - Supertest\n   - Sinon\n - **Code Coverage**\n - **Patterns and best practices in testing**\n - **Continuous Integration**\n   - Conception\n   - Travis CI\n - **Continuous Delivery**\n   - Conception\n\n#### [Documentation](lessons/16-nodejs-documentation/materials.md) (1h)\n\n - **Approaches**\n   - README Driven Development\n   - Reference documentation\n   - Unibutique Language\n   - Changelog\n   - License\n\n - **Formats**\n   - Markdown\n   - RAML\n\n#### The design and architecture of the application (1h)\n\n - **MVC**\n - **DDD**\n - **SOA**\n - **Micro-services**\n\n#### [Projects: Common recommendations](lessons/18-nodejs-services-recommendations/materials.md) (1h)\n\n - **12 factors app**\n - **Configuration**\n - **Logging**\n - **Monitoring**\n - **Profiling**\n - **Connection to DBs and external services**\n\n#### Project 1: Simple web-site\n\n - **Express**\n - **Serving static content by Node.js**\n - **Using Nginx as reverse proxy and server of static content**\n\n#### Project 2: Service with REST API\n\n - **Express**\n - **REST API design**\n - **REST API testing**\n\n#### Project 3: Tiny cloud (micro-services)\n\n - **Micro-services overview**\n - **Communication between services**\n - **HTTP and Message Broker for communication**\n - **Testing of micro-services**\n\n#### Performance and Scaling of application and system (2h)\n\n - **Scaling**\n   - What is scaling?\n   - Scaling Law of applications\n   - Methods of scaling applications\n\n - **Performance**\n   - What is performance?\n   - What should we measure?\n   - Tools for performance tests (Yandex.Tank, ab, siege)\n   - Analysis of the results\n   - Recommendations for scaling\n\n - **Cache in applications**\n\n#### Profiling and optimizations of application and system (2h)\n\n - **Top most common mistakes which fail performance**\n\n - **Profiling**\n   - Memory\n   - CPU\n   - Blocking of EventLoop\n\n - **Tools**\n\n#### Yours applications in production (1h)\n\n - **Best practices of logging**\n - **Orchestration (Ansible)**\n \n#### Distribution of your application (Docker) (1h)\n\n - **What is Docker?**\n - **Create Docker image with your application**\n - **Run your applications**\n - **How to run own cloud in 1 click? (Docker Compose)**\n\n#### Final Q\u0026A (1h)\n\n\n# Author\n\n - [**Andrii Chyzh**](https://github.com/andriichyzh)\n\n# License\n\nThis work is licensed under a [Creative Commons Attribution-NonCommercial 4.0 International License](http://creativecommons.org/licenses/by-nc/4.0/legalcode).\n\n[![Creative Commons Attribution-NonCommercial 4.0 International License](https://i.creativecommons.org/l/by-nc/4.0/88x31.png)](http://creativecommons.org/licenses/by-nc/4.0/legalcode)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandriichyzh%2Fnode-js-advanced-training","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandriichyzh%2Fnode-js-advanced-training","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandriichyzh%2Fnode-js-advanced-training/lists"}