Protocol - a set of rules or procedures for transmitting data between two or more entities of a communications system.
A web browser (commonly referred to as a browser) is a software application for retrieving, presenting, and traversing information resources on the World Wide Web. Although browsers are primarily intended to use the World Wide Web, they can also be used to access information provided by web servers in private networks or files in file systems. (Render, parsing, optimization etc.)
Website security is the act/practice of protecting websites from unauthorized access, use, modification, destruction, or disruption (important principles of modern web security, security best practices)
Software Development Life Cycle (SDLC) is a process used by the software industry to design, develop and test high-quality software. The SDLC aims to produce high-quality software that meets or exceeds customer expectations, reaches completion within times and cost estimates.
REST and SOAP are 2 different approaches to online data transmission. Specifically, both define how to build application programming interfaces (APIs), which allow data to be communicated between web applications.
Functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions that map values to other values, rather than a sequence of imperative statements which update the running state of the program.
Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which can contain data and code: data in the form of fields (often known as attributes or properties), and code, in the form of procedures (often known as methods).
Template engine helps us to create an HTML template with minimal code. Also, it can inject data into HTML template at client side and produce the final HTML.
HTML (Hypertext Markup Language) is the code that is used to structure a web page and its content. For example, content could be structured within a set of paragraphs, a list of bulleted points, or using images and data tables.
CSS (Cascading Style Sheets) is the language used to style an HTML document. CSS describes how HTML elements should be displayed.
In simple terms, authentication is the process of verifying who a user is, while authorization is the process of verifying what they have access to.
Measuring performance provides an important metric to help you assess the success of your app, site, or web service. For example, you can use performance metrics to determine how your app performs in comparison to a competitor or you can compare your app's performance across releases. The metrics you choose to measure should be relevant to your users, site, and business goals. They should be collected and measured in a consistent manner and analyzed in a format that can be consumed and understood by non-technical stakeholders.
Load testing is a great way to grab insights about how your application runs under heavy load, how all services interact, and to plan production capacity accordingly.
Bottlenecks can slow down an application significantly.
There are many third-party tools available for profiling Node.js applications but, in many cases, the easiest option is to use the Node.js built-in profiler.
NodeJs single-threaded nature is by default using a single core of a processor. Therefore NodeJs introduced a cluster module to spawn processes. “Cluster” was introduced to scale an application execution on multiple processor cores by creating worker processes. Worker processes share a single port, therefore, requests are routed through a single port.
DRY and KISS are software design principles, they are about clean code.
ECMA means European Computer Manufacturer's Association. ECMAScript is a programming language standard that web browsers follow while interpreting Javascript.
TypeScript is a programming language developed and maintained by Microsoft. It is a strict syntactical superset of JavaScript and adds optional static typing to the language.
When we declare a new variable in JavaScript, we can either use 'const', 'let', or 'var'.
Template Literals were introduced with JavaScript ES2015 (ES6) to handle strings in an easier and more readable way. It allows us to embed expressions (expression interpolation) inside a string declaration, handle multiline strings and create "tagged template literals" which is a more advanced form of template literals.
More data structures and more in-depth study of the types.
Arrow functions were introduced in ES6. Arrow functions allow us to write shorter function syntax
String manipulation is easy to learn but most difficult to master of it in JavaScript. Earlier, multi-line string was not supported by JavaScript. After 2015, string literals have introduced by ES6 (ECMAScript 6) that supports multi-line string.
A function's 'this' keyword behaves a little differently in JavaScript compared to other languages. It also has some differences between strict mode and non-strict mode.
Object literal enhancement is used to group variables from the global scope and form them into javascript objects. It is the process of restructuring or putting back together.
In JavaScript, a primitive (primitive value, primitive data type) is data that is not an object and has no methods. There are 7 primitive data types: string, number, bigint, boolean, undefined, symbol, and null. In JavaScript, objects can be seen as a collection of properties.
Functions in JavaScript run in a specific context, and using the "this" variable we have access to it. All standard functions in the browser run under the Window context. Functions defined under an object or a class (another function) will use the context of the object it was created in. However, we can also change the context of a function at runtime, either before or while executing the function.
The async function keyword can be used to define async functions inside expressions. The await operator is used to wait for a Promise. It can only be used inside an async function within regular JavaScript code; however it can be used on its own with JavaScript modules.
In general, JavaScript is running code in a non-blocking way. This means that code which is taking some time to finish (like accessing an API, reading content from the local file system, etc.) is being executed in the background, and in parallel the code execution is continued. This behavior is being described by term asynchronous programming. An Event loop is browser’s mechanism to perform non-blocking operations by providing WebAPIs (setTimeout, setInterval, etc.) which are capable of maintaining callback references in memory.
A scope in JavaScript defines what variables you have access to. There are two kinds of scope – global scope and local scope. Whenever you create a function within another function, you have created a closure. The inner function is the closure. This closure is usually returned so you can use the outer function’s variables at a later time. An IIFE (Immediately Invoked Function Expression) is a JavaScript function that runs as soon as it is defined.
A regular expression is a sequence of characters that forms a search pattern. When you search for data in a text, you can use this search pattern to describe what you are searching for. A regular expression can be a single character, or a more complicated pattern. Regular expressions can be used to perform all types of text search and text replace operations.
JavaScript modules are a way to structure JavaScript code. Code in a module is isolated from code in other modules and is not in the global scope. JavaScript has had modules for a long time. However, they were implemented via libraries, not built into the language. ES6 is the first time that JavaScript has built-in modules.
When a function is created in JavaScript, the JavaScript engine adds a prototype property to the function. This prototype property is an object (called a prototype object) that has a constructor property by default. The constructor property points back to the function on which prototype object is a property. We can access the function’s prototype property using functionName.prototype.
There are tools that allow checking code before or during its execution to assess its quality and its adherence to coding standards using a process called code analysis. SonarQube is code review and management software. Code Climate provides automated code review for your apps, letting you fix quality and security issues before they hit production.
It is worth spending a little bit of extra time now to set up formatting and linting tools that will help keep your code clean and enforce good development practices.
Integration testing is used to test a group of individual modules, components or piece of units. The main purpose of Integration testing is to find bugs when two or more modules are integrated. To check how two or more modules, components or a different piece of code are will work together.
Unlike unit testing, which focuses on individual modules and classes, end-to-end (e2e) testing covers the interaction of classes and modules at a more aggregate level -- closer to the kind of interaction that end-users will have with the production system.
Unit Testing: This testing is used to test a small isolated piece of code, unit testing will be done by developers to test functions or blocks.
“Test-driven development” refers to a style of programming in which three activities are tightly interwoven: coding, testing (in the form of writing unit tests) and design (in the form of refactoring).
In software engineering, behavior-driven development (BDD) is an agile software development process that encourages collaboration among developers, quality assurance testers, and customer representatives in a software project. BDD is an extension to TDD concept, but instead of testing your code you are testing your product, and specifically that your product behaves as you desire it to. Popular tools and frameworks for BDD: Mocha, Chai, Jasmine, Cucumber.js.
Docker is a computer program that performs operating system level virtualization, also known as containerization. It runs software packages as “containers.”
They are designed to automate tasks that you would otherwise have to do manually (Compiling Less/Sass to CSS; Concatenating and minifying CSS and JavaScript; Linting code; Optimizing images; Running unit tests)
Task runners allow to automate many tasks (repetitive tasks: making a change, compressing the js and css file, minimize code to gain performance)
Module bundlers are tools that process your modern JavaScript applications, internally build dependency graphs which map every modules your projects need and generate one or module bundles.
Version control, also known as source control, is the practice of tracking and managing changes to software code. Version control systems are software tools that help software teams manage changes to source code over time.
With Node.js monitoring, APM tools are used to monitor the software application’s performance and availability by finding bottlenecks and fixing errors. The Node.js monitoring tools can fix the bugs by analyzing each web result, pointing out the problem at the code level, and tracking down the issues.
AWS Lambda is an event-driven, serverless computing platform provided by Amazon as a part of Amazon Web Services. It is a computing service that runs code in response to events and automatically manages the computing resources required by that code. It was introduced in November 2014.
Azure Functions is an event driven, compute-on-demand experience that extends the existing Azure application platform with capabilities to implement code triggered by events occurring in Azure or third party service as well as on-premises systems.
Google Cloud Functions is a serverless execution environment for building and connecting cloud services. With Cloud Functions you write simple, single-purpose functions that are attached to events emitted from your cloud infrastructure and services.
GitHub Actions is an API for cause and effect on GitHub: orchestrate any workflow, based on any event, while GitHub manages the execution, provides rich feedback, and secures every step along the way. With GitHub Actions, workflows and steps are just code in a repository, so you can create, share, reuse, and fork your software development practices.
Pipelines are the top-level component of continuous integration, delivery, and deployment. Pipelines are the fundamental building blocks for CI/CD in GitLab.
Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software.
TeamCity is a Java based CI server by JetBrains. Being a commercial tool, it is licensed under a freemium license (up to 100 build configurations and 3 build agents)
Travis CI was the first CI as a Service tool. It introduced a new approach to building code in the cloud. This CI tool allows the user to sign up, link their repository, build, as well as test their apps.
Bitbucket Pipelines is CI/CD for Bitbucket Cloud that’s integrated in the UI and sits alongside your repositories, making it easy for teams to get up and running building, testing, and deploying their code.
Azure DevOps is a powerful tool to organize development tasks of an any project. In addition, there is the pipeline tool available, which allows you to build continuous integration and continuous delivery pipelines.
CircleCI is the continuous integration & delivery platform that helps the development teams to release code rapidly and automate the build, test, and deploy. CircleCI can be configured to run very complex pipelines efficiently with caching, docker layer caching, resource classes and many more.
Bamboo is an automation server used for Continuous Integration. Developed by Atlassian in 2007, this tool allows the developers to automatically build, document, integrate, test the source code and prepare an app for deployment.
Visual Studio Team System (VSTS) is an integrated development environment (IDE) developed as a software product by Microsoft Corp. to facilitate software project creation, development and management.
Algorithm is a step-by-step procedure, which defines a set of instructions to be executed in a certain order to get the desired output. From the data structure point of view, following are some important categories of algorithms: Search; Sort; Insert; Update; Delete.
Serverless is a cloud-native development model that allows developers to build and run applications without having to manage servers.
Architecture AntiPatterns focus on the system-level and enterprise-level structure of applications and components. If design patterns are the good guys, then the anti-patterns are the bad guys. And sometimes a good guy can turn into a bad guy. This happens in Hollywood movies, but it also happens in software engineering.
Architectural patterns that separate applications into three main logical components Model, View, and Controller
Design patterns represent the best practices used by experienced object-oriented software developers. Design patterns are solutions to general problems that software developers faced during software development. These solutions were obtained by trial and error by numerous software developers over quite a substantial period of time.
Monolith means composed all in one piece. The Monolithic application describes a single-tiered software application in which different components combined into a single program from a single platform. Microservices are an approach to application development in which a large application is built as a suite of modular services (i.e. loosely coupled modules/components). Each module supports a specific business goal and uses a simple, well-defined interface to communicate with other sets of services.
This skill is about (Message-Broker (RabbitMQ, Apache Kafka, ActiveMQ, Azure Service Bus); Message-Bus (Distribus, BusMQ), etc.) Choosing the mode of communication is a fundamental decision which needs to be taken with great care. Services must handle requests from the application’s clients. Furthermore, services often collaborate to handle those requests. Consequently, they must use an inter-process communication protocol.
A relational database is a type of database. It uses a structure that allows us to identify and access data in relation to another piece of data in the database. Often, data in a relational database is organized into tables. The most popular in use: SQL Server, PostgreSQL, MariaDB, MySQL, etc.
A cloud database is a database that typically runs on a cloud computing platform and access to the database is provided as-a-service.
A NoSQL (originally referring to "non-SQL" or "non-relational") database provides a mechanism for storage and retrieval of data that is modeled in means other than the tabular relations used in relational databases. The most popular in use: MongoDB, Redis, LiteDB, Apache Cassandra, RavenDB, CouchDB, etc.
A powerful search engine behind your database, helps the customers in better finding.
GraphQL is an open-source data query and manipulation language for APIs, and a runtime for fulfilling queries with existing data.
Set of properties that a database transaction in a relational database is supposed to have (Atomicity, Consistency, Isolation, Durability)
A transaction can be defined as a group of tasks. A single task is the minimum processing unit which cannot be divided further.
The N+1 query problem happens when your code executes N additional query statements to fetch the same data that could have been retrieved when executing the primary query.
Database normalization is the process of structuring a database, usually a relational database, in accordance with a series of so-called normal forms in order to reduce data redundancy and improve data integrity. It was first proposed by Edgar F. Codd as part of his relational model.
A database index is a data structure that improves the speed of data retrieval operations on a database table at the cost of additional writes and storage space to maintain the index data structure.
Node.js allows us to create and handle custom events easily by using events module. Event module includes EventEmitter class which can be used to raise and handle custom events.
The process object in Node.js is a global object that can be accessed inside any module without requiring it. There are very few global objects or properties provided in Node.js and process is one of them. It is an essential component in the Node.js ecosystem as it provides various information sets about the runtime of a program.
Error handling is a way to find bugs and solve them as quickly as humanly possible.
The Buffer class in Node.js is designed to handle raw binary data. Each buffer corresponds to some raw memory allocated outside V8. Buffers act somewhat like arrays of integers, but aren't resizable and have a whole bunch of methods specifically for binary data.
Go to the server/routes directory and create there a new directory called validation.
Node provides an easily extensible logging system, allowing you to control which messages get logged and to where they are output. There are many third-party logging libraries available for Node.js. The most popular: Winston, Morgan, Node-bunyan, Node-Loggy, Log Management System (Sentry.io, loggy.com), etc.
There are Node.js frameworks popular for their lightweight and simplified development process. The most popular: Express, Nest.js, Next.js, Koa.js, etc.
Two of the most popular package managers among JavaScript (and Node.js) developers are npm and Yarn. There are subtle differences between them, which can make you prefer one over the other.
Node.js is a combination of Google’s V8 JavaScript engine, an event loop, and a low-level I/O API. While discussing this topic it worth to talk about single-threaded event loop model architecture; event-driven nature of NodeJS.
Node-cache is an in-memory caching package similar to memcached.
Distributed cache is an extension of the traditional concept of cache used in a single locale. A distributed cache may span multiple servers so that it can grow in size and in transactional capacity. Redis and Memcached are popular, open-source, in-memory data stores. Although they are both easy to use and offer high performance, there are important differences to consider when choosing an engine.
WebSockets API is a technology providing a bidirectional communication channel between a client and a server. That means that the client no longer needs to be an initiator of a transaction while requesting data from the server.
Socket.IO is a library that enables real-time, bidirectional and event-based communication between the browser and the server.
WebRTC (Web Real-Time Communication) is a technology which enables Web applications and sites to capture and optionally stream audio and/or video media, as well as to exchange arbitrary data between browsers without requiring an intermediary. The set of standards that comprise WebRTC makes it possible to share data and perform teleconferencing peer-to-peer, without requiring that the user install plug-ins or any other third-party software.