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.
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
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.
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.”
Task runners allow to automate many tasks (repetitive tasks: making a change, compressing the js and css file, minimize code to gain performance)
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.
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.