Understanding Node.js: Core Concepts
Understanding Node.js without any other NPM packages. Let's take your back-end engineering skills to the next level!
Understanding Node.js without any other NPM packages. Let's take your back-end engineering skills to the next level!
Welcome to the most comprehensive Node.js course on the internet!
In this course, we're going to do a deep dive into Node.js itself without cluttering our minds with other tools and NPM packages and truly master this powerful technology.
This course is heavily focused on computer science topics and fundamentals that are crucial to understand for becoming a great back-end engineer. You can only properly understand Node.js and unlock its full power if you understand these other computer science topics. So that's why we will also learn these other vital topics so that you can truly master Node.js and take your back-end engineering skills to a whole new level.
We will also use all these vital concepts that we'll learn in practice by building various exciting projects just using Node.js.
This is an intense course for people who want to get to the top of the field and get to a level of driving innovation and making an impact within the industry instead of just scratching the surface and following a few software trends and tools.
Each section of the course is like its own mini-course, and by completing each section, you'll learn some essential Node.js, computer science and back-end engineering concepts that will help you not just if you want to use Node.js but throughout your whole career as a software engineer. These things will stay with you for years and decades to come.
Let's do a quick walkthrough about what you will accomplish after completing some of the sections:
Understanding Buffers: Here, we will deeply understand buffers and how to work directly with binary data, which is essential for all the other sections.
Understanding File System: As a back-end developer, you'll work with files a lot, be it saving some data to disk, handling file uploads and many other examples, so it's essential to have a good understanding of them, which you'll gain after completing this section. We'll also learn how Node.js deals with files and master the "fs" module.
Understanding Streams: In this section, we're going to master Streams, which will allow us to develop highly-performant apps capable of handling terabytes of data with ease while having great memory usage. We'll build many mini-projects throughout the section, including an encryption-decryption app from scratch that could encrypt terabytes of data by directly modifying the binary data. This section lays the foundation for future sections where we'll utilize Streams heavily to create powerful and efficient network applications.
Understanding Networking: Node.js was primarily designed to create network applications, so it's of utmost importance that we gain a decent understanding of networking, which we will do after completing this section. Here's a list of items we'll learn in this section:
What exactly a network is
How the internet works
Mac Addresses
IPV4 & IPv6 Addresses
TCP
UDP
DNS
Fundamentals of deployment
We'll build 2 low-level apps using only Node.js, a chat and a file uploader app directly on top of TCP! And then, we'll deploy them to a Linux server in the most basic way without using unnecessary tools.
We'll see exactly what happens in our network card, every single 0s and 1s exchanged for a particular thing using Wireshark, and gain a much better understanding of networking and how most of the well-known protocols like HTTP, FTP, Email protocols, SSH, DNS and many others work. This section will broaden your horizons, and you'll realize that there are far more things that you can do with Node.js than just creating web servers.
Understanding HTTP: In this section, we'll utilize and combine all that we've learned from previous sections and finally deeply understand HTTP once and for all! We won't be learning how to use Express; instead, we will build something similar ourselves!
We'll start by understanding the most important HTTP concepts, such as connection types, client-server model, messages, requests, responses, HTTP Methods, status codes, mime types, necessary headers and so much more. And then emulate an HTTP protocol directly on top of TCP using the net module and see precisely every single 0s and 1s that get exchanged for an HTTP request and response interaction!
Once we understand the fundamentals of HTTP and the "http" module, we'll take things to the next level and start building our framework. And then, using our framework, we'll make a fully functional web application.
This section will take your web development skills to the next level. You'll have a much better understanding of how all these popular NPM packages, like Express, body-parser, Multer, cors, etc., that are built on top of the "http" module work. Well, you'll learn how to make them from scratch, just using them will not be that much of a problem!
Update February 2024 - New Module Is Out! Understanding Unix:
With over 15 hours of comprehensive new content, get ready to learn how you can harness the power of multiple technologies and programming languages together with Node.js to create extraordinarily powerful applications!
Unix, one of the most influential inventions ever in the software industry, is crucial for software engineers to understand. In this module, we'll delve deep into some of the key concepts such as Bash, Shells, IPC, Data Streams, Process Management, Clustering, even some C and much more.
We will also understand these Node.js modules:
Child Processes
Cluster
Process
Path
Console
OS
All these Unix concepts that you'll learn in this section instantly apply to many other programming languages. You'll gain a foundation that you can keep building on to create much higher-quality applications than ever before.
At the end of the section, we'll develop a video editing web application with Node.js without using other NPM packages. And this is just the beginning! You'll be able to do much more than this once you're done with the section and see many new possibilities that you never thought about before.
Update May 2024 - New Module Is Out! Understanding Compression:
In this section, we will explore the fascinating world of compression. Understanding compression is crucial for reducing the size of your data, and one important use case is to enhance the speed of your network applications. We'll dive into the Node.js Zlib module and see how it is possible to reduce the number of bits needed to store and transfer your data without losing any information!
Update July 2024 - New Module Is Out! Understanding Multi-Threading:
Get ready for the most advanced section of the course, where we're going to utilize the full power of Node.js to see how extreme we can get.
We'll learn what exactly threads are and how to utilize them to achieve performance boosts up to many times, depending on how many CPU cores we have. We'll learn when we should use multi-threading and when we shouldn't. We'll learn how to set up communication channels between our threads, both with message passing and shared memory. We'll explore the Node.js thread pool and even develop one ourselves from scratch. We'll see how multi-threading differs in Node.js from some of the other languages. We'll cover synchronization, race conditions, deadlocks, semaphores, mutual exclusion and more.
You'll learn how to keep the event loop light and not end up doing operations that will mysteriously block your main thread and cause your app to be way slower.
This section will take your Node.js skills to the next level by teaching you how to run things in parallel, handle multiple event loops, and understand the complications that arise with that.
Update March & August 2025 - New Module Is Out! Understanding Cryptography:
In this section you’ll learn about one of the most fascinating topics in computer science, without which the digital world and the internet would be in absolute chaos, and almost anyone could access everything you have online or stored digitally offline.
You’ll learn about some of the same cutting-edge cryptographic tools that governments and top companies rely on to protect their top-secret data and users online. You'll learn about AES, RSA, Diffie-Hellman, Elliptic-Curve Cryptography, HTTPS, TLS, Digital Signatures, Hashing algorithms, and more!
This section will give you a strong foundation to start your journey of learning about cybersecurity. Learning cryptography is extremely important in today’s world, not only to be able to create secure software and protect your business and users, but also to help protect yourself in the digital world.
Jump right in, and let’s explore the principles and techniques that are protecting our privacy, freedom of speech, and security in today’s massive digital world.
Sign up today, and let's master Node.js and take your back-end engineering skills to a whole new level!
FAQ area empty
Introdcution
Xem trướcUnderstanding Binary Numbers
Xem trướcUnderstanding Hexadecimal Numbers
Xem trướcUsing a Programming Calculator
Xem trướcUnderstanding Character Encodings
Xem trướcThe Concept of Buffers
Xem trướcBuffers in Action
Xem trướcAllocating Huge Buffers
Xem trướcFastest Way of Allocating Buffers
Xem trướcReading the Node.js Docs
Xem trướcOutro
Xem trướcIntroduction
Xem trướcWhat Exactly Is a File?
Xem trướcHow Node.js Deals with Files
Xem trướcThree Different Ways of Doing the Same Thing
Xem trướcWatching the Command File for Changes
Xem trướcReading the Content of the Command File
Xem trướcCleaning Up the Code using EventEmitter
Xem trướcMaking Sense Out of the Read Data
Xem trướcImplementing the Create File Command
Xem trướcDefining the Rest of the Commands
Xem trướcSolution - Implementing the deleteFile Function
Xem trướcSolution - Implementing the renameFile Function
Xem trướcSolution - Implementing the addToFile Function
Xem trướcOutro
Xem trướcIntroduction
Xem trướcBenchmarking Writing a Million Times to a File
Xem trướcUsing Streams Naively in Our Solution
Xem trướcSo What Exactly Are Streams?
Xem trướcUnderstanding Different Types of Streams
Xem trướcFixing the Memory Issue in Our Program
Xem trướcReading Writable Streams Node.js Docs and Recap
Xem trướcReadable Streams in Action
Xem trướcSelectively Writing Our Data from the Readable Stream
Xem trướcUnderstanding the Splitting Issue
Xem trướcImplementing the Solution and Resolving the Splitting Issue
Xem trướcReading Node.js Docs and Recap
Xem trướcBuilding Our Own Streaming Solution Using Buffers
Xem trướcUnderstanding Piping
Xem trướcImplementing Our Own Writable Stream
Xem trướcImplementing Our Own Readable Stream
Xem trướcUnderstanding Duplex and Transform Streams
Xem trướcCreating an Encryption/Decryption Application
Xem trướcFinal Notes
Xem trướcIntroduction
Xem trướcUnderstanding MAC Addresses and Switches
Xem trướcUnderstanding Routers and How the Internet Works
Xem trướcUnderstanding Networking Layers
Xem trướcCreating a Simple TCP Application in Node.js
Xem trướcUnderstanding the Transport Layer - TCP/UDP
Xem trướcA Networking Scenario in Action
Xem trướcUnderstanding Port Numbers
Xem trướcCreating a Chat Application PART 1
Xem trướcCreating a Chat Application PART 2
Xem trướcImproving the UI of our Chat App
Xem trướcIdentifying Users in the Chat App
Xem trướcNotifying Everyone When Somebody Joins/Leaves the Chat
Xem trướcSome Final Notes About the Chat App
Xem trướcDeploying our Chat App to AWS
Xem trướcUnderstanding IPv4 Addresses
Xem trướcUnderstanding DNS
Xem trướcUnderstanding IPv6 Addresses
Xem trướcCreating an Uploader Application
Xem trướcTaking Care of Backpressures in the Uploader App
Xem trướcGetting the File Names Dynamically in the Uploader App
Xem trướcDisplaying the Upload Progress in Our Uploader App
Xem trướcDeploying our Uploader App
Xem trướcUnderstanding UDP and the Dgram Module
Xem trướcOutro
Xem trướcIntroduction
Xem trướcThe Idea of HTTP
Xem trướcCreating a Simple HTTP Server in Node
Xem trướcUnderstanding HTTP Messages, Requests & Responses
Xem trướcUnderstanding Connection Types
Xem trướcBuilding our Client and Sending a Request
Xem trướcSending a Response to the Client
Xem trướcLearning Postman & Testing Our Server with It
Xem trướcReading Some Docs
Xem trướcSending an HTTP Request Directly on Top of TCP! PART 1
Xem trướcSending an HTTP Request Directly on Top of TCP! PART 2
Xem trướcEmulating our HTTP Server Using the Net Module
Xem trướcUnderstanding Media Types (MIME Types)
Xem trướcUnderstanding HTTP Methods
Xem trướcUnderstanding HTTP status codes
Xem trướcCreating a Simple Web Server in Node
Xem trướcServing a CSS and JavaScript File
Xem trướcAdding Some JSON Routes
Xem trướcAdding a File Upload Route
Xem trướcCreating our Own Little Mini-Express Framework!
Xem trướcMaking our Framework More Robust
Xem trướcGetting Ready for Our Next Project
Xem trướcUsing Our Framework to Create a Web App
Xem trướcAdding the Login Route
Xem trướcUnderstanding HTTP Proxies
Xem trướcHTTP is Stateless
Xem trướcUnderstanding Cookies
Xem trướcRecognizing Users for Future Requests after Logging In
Xem trướcSending the User’s Info in Profile
Xem trướcEnhancing Our Framework with Middleware Support
Xem trướcDefining the Middleware Functions
Xem trướcImplementing the Create Post, Update User, and Logout Routes
Xem trướcOutro
Xem trướcIntroduction
Xem trướcWhat Is Unix?
Xem trướcWhy Should We Care About Unix?
Xem trướcSetting Up Unix on Windows (WSL) - For Windows Users Only
Xem trướcA First Look at the Child Process Module
Xem trướcUnderstanding Unix Shells
Xem trướcDemystifying Bash Execution Order: Aliases, Functions, Built-ins, and Path
Xem trướcA Few Notes about Unix File Permissions
Xem trướcSourcing in Bash
Xem trướcUnderstanding Shell Config Files
Xem trướcWhat Exactly is a Child Process?
Xem trướcUnderstanding Environment Variables
Xem trướcUnderstanding Unix File System, Paths & CWD
Xem trướcUnderstanding Stdout, Stdin, and Stderr
Xem trướcUnderstanding Pipes and Output Redirection in Bash
Xem trướcBuilding a Command Line Utility with Node.js
Xem trướcBuilding Massive Communication App - Node Part
Xem trướcIntro to the C Part
Xem trướcLearning C - Our First App
Xem trướcLearning C - Static Types & Our Memory
Xem trướcLearning C - Memory Allocation
Xem trướcLearning C - Reading the Arguments
Xem trướcBuilding Massive Communication App - C Part
Xem trướcOnly Watch if You Skipped the C Part
Xem trướcAnother Way of IPC - Unix Domain Sockets
Xem trướcUnderstanding Clustering
Xem trướcClustering in Action
Xem trướcInstalling & Building FFmpeg from Source Code
Xem trướcVideo Editor App - Setup & Walkthrough
Xem trướcAdding the Upload Route
Xem trướcQuick Intro to FFmpeg and Video Files
Xem trướcMaking a Thumbnail and Getting the Dimensions After an Upload
Xem trướcReturning the List of Uploaded Videos
Xem trướcAdding a Route for Returning the Video Assets
Xem trướcAdding a Route to Extract the Audio of a Video File
Xem trướcAdding the Resize Route
Xem trướcScheduling the Resizes
Xem trướcMore on Queue-based Processing
Xem trướcResuming Scheduled Resize Operations Upon App Restart
Xem trướcRunning Our Application in Cluster Mode
Xem trướcRefactor from Cpeak to Express in Less than 20 Minutes!
Xem trướcOutro
Xem trướcIntroduction
Xem trướcGuide for Skilled Multi-Threaded Developers
Xem trướcWhat Exactly Is a Thread?
Xem trướcHow to Monitor Threads on Your Operating System
Xem trướcUnderstanding CPU Usage
Xem trướcSpawning Threads
Xem trướcThread Communication through Message-Passing
Xem trướcIntroduction to Our CPU-Intensive Program
Xem trướcEnhancing Performance with Multi-Threading
Xem trướcHandling CPU-Intensive Operations in an HTTP Server
Xem trướcIsMainThread
Xem trướcCPU-Intensive vs. I/O-Intensive
Xem trướcExamining a Crypto-Heavy Multi-Threaded App
Xem trướcNode.js Thread Pool
Xem trướcDeveloping a Thread Pool From Scratch
Xem trướcEvent Loop Utilization and Main Thread
Xem trướcKeep the Main Thread Light with Batch Processing
Xem trướcEffortlessly Expanding Our Thread Pool Capabilities
Xem trướcDon’t Block the Worker Pool!
Xem trướcHandling Billions of HTTP Requests
Xem trướcCommunication Through Shared Memory
Xem trướcArrayBuffers, SharedArrayBuffers, and TypedArrays
Xem trướcRace Conditions
Xem trướcUnderstanding Atomic Operations
Xem trướcUnderstanding Mutual Exclusion
Xem trướcDeadlocks
Xem trướcEnhancing Performance Through Shared Memory
Xem trướcNative Multi-Threading with C/C++ Addons
Xem trướcA Deeper Look at the Event Loop PART 1
Xem trướcA Deeper Look at the Event Loop PART 2
Xem trướcOutro
Xem trướcIntroduction
Xem trướcIntroduction to Symmetric Encryption
Xem trướcThe Unbreakable Encryption - OTP From Scratch
Xem trướcHow AES Encryption Works
Xem trướcUnderstanding AES Modes
Xem trướcWhat It Takes to Break AES
Xem trướcWhat About Brute-Forcing OTP?
Xem trướcHistory of AES
Xem trướcUnderstanding Hashing
Xem trướcSHA-256 From Scratch
Xem trướcWhat It Takes to Break SHA-256
Xem trướcMessage Authentication Codes
Xem trướcUnderstanding Key Derivation Functions
Xem trướcBuilding a File Encryption Application
Xem trướcIntroduction to Asymmetric Cryptography
Xem trướcA Note about OpenSSL & Setup
Xem trướcRSA in Action
Xem trướcUnderstanding RSA
Xem trướcImplementing RSA From Scratch
Xem trướcUnderstanding Digital Signatures
Xem trướcDigital Certificates
Xem trướcManually Verifying an HTTPS Certificate
Xem trướcSetting Up HTTPS from Scratch
Xem trướcUnderstanding TLS
Xem trướcDiffie-Hellman and Elliptic Curve Key Exchange
Xem trướcElliptic Curve Digital Signatures
Xem trướcRSA, DH and EC Security
Xem trướcOutro
Xem trướcAt least one year of programming experience
A good knowledge of JavaScript
While not mandatory, a little bit of experience with ExpressJS and HTML could be helpful
Not a strict requirement, but for the Multi-Threading section, it is recommended to be on a machine with a CPU that has at least 4 cores
For the Cryptography section, some basic discrete math is needed; more info on the section’s introduction video
Learn some of the vital concepts of back-end engineering
Get to a level capable of easily learning various NodeJS frameworks and libraries
Truly and deeply understand what exactly NodeJS is and see its full potentials far beyond just creating web servers
Understand and master NodeJS as it is without using any other NPM packages
Understand some of the most important operating systems concepts that every back-end developer needs to understand
Be able to easily learn and understand the NodeJS documentation
Learn how to directly deal with binary data and manipulate the 0s and 1s however you want
Learn the most important Networking concepts and understand where NodeJS exactly comes into play
Learn exactly what happens when you deploy your back-end applications rather than focusing on a few tools
Learn how to create low-level network applications directly on top of TCP or UDP and develop your own protocols
Deeply understand what HTTP really is and how it works
Get a deep understanding of the File System
Master Streams to develop highly performant and memory-efficient applications capable of dealing with terabytes of data with ease
Learn how to incorporate compression to enhance the speed of your network applications
Understand Unix and open up a world of new possibilities
Understand the EventEmitter object
Master Multi-Threading in NodeJS & achieve significant performance improvements
Learn about some of the same cutting-edge cryptographic tools that governments and top companies rely on to protect their top-secret data and users online