{"id":27874719,"url":"https://github.com/camerodev/backend-cheats","last_synced_at":"2026-03-05T22:35:28.264Z","repository":{"id":231525116,"uuid":"774972301","full_name":"camerodev/backend-cheats","owner":"camerodev","description":null,"archived":false,"fork":false,"pushed_at":"2024-03-20T14:34:52.000Z","size":10220,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-07T13:33:14.006Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/camerodev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-03-20T14:34:26.000Z","updated_at":"2024-03-29T17:35:40.000Z","dependencies_parsed_at":"2024-04-04T13:17:46.915Z","dependency_job_id":"19da2bce-187a-45e2-be08-64e0d75bf9ae","html_url":"https://github.com/camerodev/backend-cheats","commit_stats":null,"previous_names":["slickcharmer/backend-cheats","camerodev/backend-cheats"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/camerodev/backend-cheats","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camerodev%2Fbackend-cheats","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camerodev%2Fbackend-cheats/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camerodev%2Fbackend-cheats/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camerodev%2Fbackend-cheats/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/camerodev","download_url":"https://codeload.github.com/camerodev/backend-cheats/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camerodev%2Fbackend-cheats/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30152960,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T21:15:50.531Z","status":"ssl_error","status_checked_at":"2026-03-05T21:15:11.173Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2025-05-05T01:37:42.995Z","updated_at":"2026-03-05T22:35:28.222Z","avatar_url":"https://github.com/camerodev.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"https://github.com/cheatsnake/backend-cheats/blob/master/README.md\"\u003e\u003cp align=\"center\"\u003e\u003cimg src=\"./files/logo.png\" alt=\"Logo\"/\u003e\u003c/p\u003e\u003c/a\u003e\n\nThis repository is a visual cheatsheet on the main topics in Backend-development. All material is divided into chapters that include different topics. There are three main parts to each topic:\n\n-   **Visual part** - various images/tables/cheatsheets for better understanding (may not be available). All pictures and tables are made from scratch, specifically for this repository.\n-   **Summary** - A very brief summary with a list of key terms and concepts. The terms are hyperlinked to the appropriate section on Wikipedia or a similar reference resource.\n-   **References to sources** - resources where you may find complete information on a particular issue (they are hidden under a spoiler, which opens when clicked). If possible, the most authoritative sources are indicated, or those that provide information in as simple and comprehensible language as possible.\n\n\u003e 🌐 Available translations: [`English`](./README.md) [`Русский`](./README_RUS.md)\n\n\u003e 🛠 The repository is under active development, so it is constantly updated and supplemented (see [roadmap](https://github.com/users/cheatsnake/projects/1/views/1)).\n\n\u003e 🤝 If you want to help the project, feel free to send your [issues](https://github.com/cheatsnake/backend-cheats/issues) or [pull requests](https://github.com/cheatsnake/backend-cheats/pulls).\n\n\u003e 🌙 For better experiense enable [dark theme](https://github.com/settings/appearance). \n\n\u003cp\u003e\u003ca name=\"top\"\u003e\u003c/a\u003e\u003c/p\u003e\n\n## Contents\n\n\u003ctable\u003e\n\u003ctr\u003e\u003ctd width=33% valign=top\u003e\n\n-   [Network \u0026 Internet](#network--internet)\n    * [How the Internet works](#how-the-internet-works)\n    * [What is a domain name](#what-is-a-domain-name)\n    * [IP address](#ip-address)\n    * [What is DNS](#what-is-dns)\n    * [Web application design](#web-application-design)\n    * [Browsers and how they work](#browsers-and-how-they-work)\n    * [VPN and Proxy](#vpn-and-proxy)\n    * [Hosting](#hosting)\n    * [OSI network model](#osi-network-model)\n    * [HTTP Protocol](#http-protocol)\n    * [TCP/IP stack](#tcpip-stack)\n    * [Network problems](#network-problems)\n    * [Network diagnostics](#network-diagnostics)\n-   [PC device](#pc-device)\n    * [Main components (hardware)](#main-components-hardware)\n    * [Operating system design](#operating-system-design)\n    * [Processes and threads](#processes-and-threads)\n    * [Concurrency and parallelism](#concurrency-and-parallelism)\n    * [Inter-process communication](#inter-process-communication)\n\u003c/td\u003e\u003ctd width=33% valign=top\u003e\n\n-   [Linux basics](#linux-basics)\n    * [Working with shell](#working-with-shell)\n    * [Package manager](#package-manager)\n    * [Bash scripts](#bash-scripts)\n    * [Users, groups and permissions](#users-groups-and-permissions)\n    * [Working with processes](#working-with-processes)\n    * [Working with SSH](#working-with-ssh)\n    * [Network utils](#network-utils)\n    * [Task scheduler](#task-scheduler)\n    * [System logs](#system-logs)\n    * [Main issues with Linux](#main-issues-with-linux)\n-   [General knowledge](#general-knowledge)\n    * [Numeral systems](#numeral-systems)\n    * [Logical connective](#logical-connective)\n    * [Data structures](#data-structures)\n    * [Basic algorithms](#basic-algorithms)\n    * [Algorithm complexity](#algorithm-complexity)\n    * [Data storage formats](#data-storage-formats)\n    * [Text encodings](#text-encodings)\n\u003c/td\u003e\u003ctd valign=top\u003e\n\n-   [Programming Language](#programming-language)\n    * [Classification of programming languages](#classification-of-programming-languages)\n    * [Language Basics](#language-basics)\n    * [Object-oriented programming](#object-oriented-programming)\n    * [Server development](#server-development)\n    * [Asynchronous programming](#asynchronous-programming)\n    * [Multitasking](#multitasking)\n    * [Advanced Topics](#advanced-topics)\n    * [Code quality](#code-quality)\n-   [Databases](#databases)\n    * [Database classification](#database-classification)\n    * [Relational database](#relational-database)\n    * [MongoDB](#mongodb)\n    * [Redis](#redis)\n    * [ACID Requirements](#acid-requirements)\n    * [Designing databases](#designing-databases)\n-   [API development](#api-development)\n    * [REST API](#rest-api)\n    * [GraphQL](#graphql)\n    * [WebSockets](#websockets)\n    * [RPC (Remote Procedure Call)](#rpc-remote-procedure-call)\n    * [WebRTC](#webrtc)\n\u003c/td\u003e\u003c/tr\u003e\n\n\u003ctr\u003e\u003ctd width=33% valign=top\u003e\n\n-   [Software](#security)\n    * [Git version control system](#git-version-control-system)\n    * [Docker](#docker)\n    * [Postman/Insomnia](#postmaninsomnia)\n    * [Web servers](#web-servers)\n    * [Message brokers](#message-brokers)\n    * [Ngrok](#ngrok)\n    * [AI tools](#ai-tools)\n-   [Security](#security)\n    * [Web application vulnerabilities](#web-application-vulnerabilities)\n    * [Environment variables](#environment-variables)\n    * [Hashing](#hashing)\n    * [Authentication and authorization](#authentication-and-authorization)\n    * [SSL/TLS](#ssltls)\n\u003c/td\u003e\u003ctd width=33% valign=top\u003e\n\n-   [Testing](#testing)\n    * [Unit Tests](#unit-tests)\n    * [Integration tests](#integration-tests)\n    * [E2E tests](#e2e-tests)\n    * [Load testing](#load-testing)\n    * [Regression testing](#regression-testing)\n-   [Deployment (CI/CD)](#deployment-cicd)\n    * [Cloud services](#cloud-services)\n    * [Container orchestration](#container-orchestration)\n    * [Automation tools](#automation-tools)\n    * [Monitoring and logs](#monitoring-and-logs)\n-   [Optimization](#optimization)\n    * [Profiling](#profiling)\n    * [Benchmarks](#benchmarks)\n    * [Caching](#caching)\n    * [Load balancing](#load-balancing)\n\u003c/td\u003e\u003ctd valign=top\u003e\n\n-   [Documentation](#documentation)\n    * [Markdown](#markdown)\n    * [Documentation inside code](#documentation-inside-code)\n    * [API Documentation](#api-documentation)\n    * [Static generators](#static-generators)\n-   [Building Architecture](#building-architecture)\n    * [Architectural Patterns](#architectural-patterns)\n    * [Design patterns](#design-patterns)\n    * [Monolithic and microservice architecture](#monolithic-and-microservice-architecture)\n    * [Horizontal and vertical scaling](#horizontal-and-vertical-scaling)\n-   [Additional and similar resources](#additional-and-similar-resources)\n\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\n## Network \u0026 Internet\n\n[Internet](https://en.wikipedia.org/wiki/Internet) is a worldwide system that connects computer networks from around the world into a single network for storing/transferring information. The Internet was originally developed for the military. But soon it began to be implemented in universities, and then it could be used by private companies, which began to organize networks of providers that provide Internet access services to ordinary citizens. By early 2020, the number of Internet users exceeded 4.5 billion.\n\n-   ### How the Internet works\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/network-internet/Internet.png\" alt=\"Internet\"/\u003e\u003c/p\u003e\n\n    Your computer does not have direct access to the Internet. Instead, it has access to your local network to which other devices are connected via a wired ([Ethernet](https://en.wikipedia.org/wiki/Ethernet)) or wireless (Wi-Fi) connection. The organizer of such a network is a special minicomputer - [router](\u003chttps://en.wikipedia.org/wiki/Router_(computing)\u003e). This device connects you to your [Internet Service Provider (ISP)](https://en.wikipedia.org/wiki/Internet_service_provider), which in turn is connected to other higher-level ISPs. Thus, all these interactions make up the Internet, and your messages always transit through different networks before reaching the final recipient.\n\n    -   [Host](\u003chttps://en.wikipedia.org/wiki/Host_(network)\u003e)\n        \u003e Any device that is on any network.\n    -   [Server](\u003chttps://en.wikipedia.org/wiki/Server_(computing)\u003e)\n        \u003e A special computer on the network that serves requests from other computers.\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/network-internet/topologies.png\" alt=\"Network topologies\"/\u003e\u003c/p\u003e\n\n    -   [Network topologies](https://en.wikipedia.org/wiki/Network_topology)\n        \u003e There are several topologies (ways of organizing a network): [Point to point](\u003chttps://en.wikipedia.org/wiki/Point-to-point_(telecommunications)\u003e), [Daisy chain](\u003chttps://en.wikipedia.org/wiki/Daisy_chain_(electrical_engineering)\u003e), [Bus](https://en.wikipedia.org/wiki/Bus_network), [Ring](https://en.wikipedia.org/wiki/Ring_network), [Star](https://en.wikipedia.org/wiki/Star_network) and [Mesh](https://en.wikipedia.org/wiki/Mesh_networking). The Internet itself cannot be referred to any one topology, because it is an incredibly complex system mixed with different topologies.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**How does the Internet work?** – MDN](https://developer.mozilla.org/en-US/docs/Learn/Common_questions/How_does_the_Internet_work)\n2. 📺 [**How does the internet work? (Full Course)** – YouTube](https://youtu.be/zN8YNNHcaZc)\n3. 📺 [**What is a Server? Servers vs Desktops Explained** – YouTube](https://youtu.be/UjCDWCeHCzY)\n4. 📺 [**Network Topology** – YouTube](https://youtu.be/lnFeG4DOMcE)\n5. 📺 [**Network Topologies (Star, Bus, Ring, Mesh, Ad hoc, Infrastructure, \u0026 Wireless Mesh Topology)** – YouTube](https://youtu.be/zbqrNg4C98U)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### What is a domain name\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/network-internet/domain_eng.png\" alt=\"Domain name\"/\u003e\u003c/p\u003e\n\n    [Domain Names](https://en.wikipedia.org/wiki/Domain_name) are human-readable addresses of web servers available on the Internet. They consist of parts (levels) separated from each other by a dot. Each of these parts provides specific information about the domain name. For example country, service name, localization, etc.\n\n    -   Who owns domain names\n        \u003e [The ICANN Corporation](https://en.wikipedia.org/wiki/ICANN) is the founder of the distributed domain registration system. It gives accreditations to companies that want to sell domains. In this way a competitive domain market is formed.\n    -   How to buy a domain name\n        \u003e A domain name cannot be bought forever. It is leased for a certain period of time. It is better to buy domains from [accredited registrars](https://www.icann.org/en/accredited-registrars?filter-letter=a\u0026sort-direction=asc\u0026sort-param=name\u0026page=1) (you can find them in almost any country).\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**What is a Domain Name?** – MDN](https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_domain_name)\n2. 📺 [**A Beginners Guide to How Domain Names Work!** – YouTube](https://youtu.be/Y4cRx19nhJk)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### IP address\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/network-internet/IPv4-IPv6.png\" alt=\"IPv4-IPv6\"/\u003e\u003c/p\u003e\n\n    [IP address](https://en.wikipedia.org/wiki/IP_address) is a unique numeric address that is used to recognize a particular device on the network.\n\n    -   Levels of visibility\n        \u003e -   External and publicly accessible IP address that belongs to your ISP and is used to access the Internet by hundreds of other users.\n        \u003e -   The IP address of your router in your ISP's local network, the same IP address from which you access the Internet.\n        \u003e -   The IP address of your computer in the local (home) network created by the router, to which you can connect your devices. Typically, it looks like 192.168.XXX.XXX.\n        \u003e -   The internal IP address of the computer, inaccessible from the outside and used only for communication between the running processes. It is the same for everyone - 127.0.0.1 or just _localhost_.\n    -   [Port](\u003chttps://en.wikipedia.org/wiki/Port_(computer_networking)\u003e)\n        \u003e One device (computer) can run many applications that use the network. In order to correctly recognize where and which data coming over the network should be delivered (to which of the applications) a special numerical number - a port is used. That is, each running process on a computer which uses a network connection has its own personal port.\n    -   [IPv4](https://en.wikipedia.org/wiki/IPv4)\n        \u003e Version 4 of the IP protocol. It was developed in 1981 and limits the address space to about 4.3 billion (2^32) possible unique addresses.\n    -   [IPv6](https://en.wikipedia.org/wiki/IPv6)\n        \u003e Over time, the allocation of address space began to happen at a much faster rate, forcing the creation of a new version of the IP protocol to store more addresses. IPv6 is capable of issuing 2^128 (is huge number) unique addresses.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📺 [**IP addresses. Explained** – YouTube](https://youtu.be/7_-qWlvQQtY)\n2. 📺 [**Public IP vs. Private IP and Port Forwarding (Explained by Example)** – YouTube](https://youtu.be/92b-jjBURkw)\n3. 📺 [**Network Ports Explained** – YouTube](https://youtu.be/g2fT-g9PX9o)\n4. 📺 [**What is IP address and types of IP address - IPv4 and IPv6** – YouTube](https://youtu.be/8npT9AALbrI)\n5. 📺 [**IP Address - IPv4 vs IPv6 Tutorial** – YouTube](https://youtu.be/ThdO9beHhpA)\n6. 📄 [**IP Address Subnet Cheat Sheet** – freeCodeCamp](https://www.freecodecamp.org/news/subnet-cheat-sheet-24-subnet-mask-30-26-27-29-and-other-ip-address-cidr-network-references/)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### What is DNS\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/network-internet/dns.png\" alt=\"DNS\"/\u003e\u003c/p\u003e\n\n    [DNS (Domain Name System)](https://en.wikipedia.org/wiki/DNS) is a decentralized Internet address naming system that allows you to create human-readable alphabetic names (domain names) corresponding to the numeric [IP addresses](#ip-address) used by computers.\n\n    -   Structure of DNS\n        \u003e DNS consists of many independent nodes, each of which stores only those data that fall within its area of responsibility.\n    -   [DNS Resolver](https://www.computerhope.com/jargon/d/dns-resolver.htm)\n        \u003e A server that is located in close proximity to your Internet Service Provider. It is the server that searches for addresses by domain name, and also caches them (temporarily storing them for quick retrieval in future requests).\n    -   [DNS record types](https://en.wikipedia.org/wiki/List_of_DNS_record_types)\n        \u003e -   A record - associates the domain name with an IPv4 address.\n        \u003e -   AAAA record - links a domain name with an IPv6 address.\n        \u003e -   CNAME record - redirects to another domain name.\n        \u003e -   and others - MX record, NS record, PTR record, SOA record.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**What is DNS? Domain Name System explained** – freeCodeCamp](https://www.freecodecamp.org/news/what-is-dns/)\n2. 📺 [**DNS (Domain Name System) explained. Types of Domain Name Servers** – YouTube](https://youtu.be/JkEYOt08-rU)\n3. 📺 [**DNS as Fast As Possible** – YouTube](https://youtu.be/Rck3BALhI5c)\n4. 📄 [**All about DNS records** – Cloudflare](https://www.cloudflare.com/learning/dns/dns-records/)\n5. 📺 [**DNS records explained (playlist)** – YouTube](https://youtube.com/playlist?list=PL_vyuxE-AO-DD94NKcCqd4iqwy5ah_pwq)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Web application design\n\n    Modern [web applications](https://en.wikipedia.org/wiki/Web_application) consist of two parts: [Frontend and Backend](https://en.wikipedia.org/wiki/Frontend_and_backend). Thus implementing a [client-server model](https://en.wikipedia.org/wiki/Client%E2%80%93server_model).\n\n    The tasks of the Frontend are:\n\n    -   Implementation of the user interface (appearance of the application)\n        \u003e - A special markup language [HTML](https://en.wikipedia.org/wiki/HTML) is used to create web pages. \n        \u003e - [CSS](https://en.wikipedia.org/wiki/CSS) style language is used to style fonts, layout of content, etc. \n        \u003e - [JavaScript](https://en.wikipedia.org/wiki/JavaScript) programming language is used to add dynamics and interactivity. \u003cbr\u003e\n        \u003e As a rule, these tools are rarely used in their pure form, as so-called [frameworks](https://2020.stateofjs.com/en-US/technologies/front-end-frameworks/) and [preprocessors](https://www.freecodecamp.org/news/css-preprocessors/) exist for more convenient and faster development. \u003cbr\u003e\n    -   Creating functionality for generating requests to the server\n        \u003e These are usually different types of input forms that can be conveniently interacted with.\n    -   Receives data from the server and then processes it for output to the client\n\n    Tasks of the Backend:\n\n    -   Handling client requests\n        \u003e Checking for permissions and access, all sorts of validations, etc.\n    -   Implementing business logic\n        \u003e A wide range of tasks can be implied here: working with databases, information processing, computation, etc. This is, so to speak, the heart of the Backend world. This is where all the important and interesting stuff happens.\n    -   Generating a response and sending it to the client\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**Front-End vs. Back-End explained**](https://blog.teamtreehouse.com/i-dont-speak-your-language-frontend-vs-backend)\n2. 📺 [**Everything You NEED to Know About WEB APP Architecture** – YouTube](https://youtu.be/sDlCSIDwpDs)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Browsers and how they work\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/network-internet/browser_eng.png\" alt=\"Browser\"/\u003e\u003c/p\u003e\n\n    [Browser](https://en.wikipedia.org/wiki/Web_browser) is a client which can be used to send requests to a server for files which can then be used to render web pages. In simple terms, a browser can be thought of as a program for viewing HTML files, which can also search for and download them from the Internet.\n\n    -   Working Principle\n        \u003e Query handling, page rendering, and the tabs feature (each tab has its own process to prevent the contents of one tab from affecting the contents of the other).\n    -   [Extensions](https://developer.chrome.com/docs/extensions/)\n        \u003e Allow you to change the browser's user interface, modify the contents of web pages, and modify the browser's network requests.\n    -   [Chrome DevTools](https://developer.chrome.com/docs/devtools/overview/)\n        \u003e An indispensable tool for any web developer. It allows you to analyze all possible information related to web pages, monitor their performance, logs and, most importantly for us, track information about network requests.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**How browsers work** – MDN](https://developer.mozilla.org/en-US/docs/Web/Performance/How_browsers_work)\n2. 📄 [**How browsers work: Behind the scenes of modern web browsers** – web.dev](https://web.dev/howbrowserswork/)\n3. 📄 [**Inside look at modern web browser** – Google](https://developer.chrome.com/blog/inside-browser-part1/)\n4. 📺 [**What is a web browser?** – YouTube](https://youtu.be/QzohDuGk4mM)\n5. 📺 [**Anatomy of the browser 101 (Chrome University 2019)** – YouTube](https://youtu.be/PzzNuCk-e0Y)\n6. 📺 [**Chrome DevTools - Crash Course** – YouTube](https://youtu.be/gTVpBbFWry8)\n7. 📺 [**Demystifying the Browser Networking Tab in DevTools** – YouTube](https://youtu.be/LBgfSwX4GDI)\n8. 📺 [**21+ Browser Dev Tools \u0026 Tips You Need To Know** – YouTube](https://youtu.be/TcTSqhpm80Y)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### VPN and Proxy\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/network-internet/proxy-vpn_eng.png\" alt=\"Proxy \u0026 VPN\"/\u003e\u003c/p\u003e\n\n    The use of VPNs and Proxy is quite common in recent years. With the help of these technologies, users can get basic anonymity when surfing the web, as well as bypass various regional blockages.\n\n    -   [VPN (Virtual Private Network)](https://en.wikipedia.org/wiki/VPN)\n        \u003e A technology that allows you to become a member of a private network (similar to your local network), where requests from all participants go through a single public IP address. This allows you to blend in with the general mass of requests from other participants. \u003cbr\u003e\n        \u003e\n        \u003e -   Simple procedure for connection and use. \u003cbr\u003e\n        \u003e -   Reliable traffic encryption. \u003cbr\u003e\n        \u003e -   There is no guarantee of 100% anonymity, because the owner of the network knows the IP-addresses of all participants. \u003cbr\u003e\n        \u003e -   VPNs are useless for dealing with multi-accounts and some programs because all accounts operating from the same VPN are easily detected and blocked. \u003cbr\u003e\n        \u003e -   Free VPNs tend to be heavily loaded, resulting in unstable performance and slow download speeds. \u003cbr\u003e\n    -   [Proxy (proxy server)](https://en.wikipedia.org/wiki/Proxy_server)\n        \u003e A proxy is a special server on the network that acts as an intermediary between you and the destination server you intend to reach. When you are connected to a proxy server all your requests will be performed on behalf of that server, that is, your IP address and location will be substituted. \u003cbr\u003e\n        \u003e\n        \u003e -   The ability to use an individual IP address, which allows you to work with multi-accounts. \u003cbr\u003e\n        \u003e -   Stability of the connection due to the absence of high loads. \u003cbr\u003e\n        \u003e -   Connection via proxy is provided in the operating system and browser, so no additional software is required. \u003cbr\u003e\n        \u003e -   There are proxy varieties that provide a high level of anonymity. \u003cbr\u003e\n        \u003e -   The unreliability of free solutions, because the proxy server can see and control everything you do on the Internet. \u003cbr\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**What is VPN? How It Works, Types of VPN** – kaspersky.com](https://www.kaspersky.com/resource-center/definitions/what-is-a-vpn)\n2. 📺 [**VPN (Virtual Private Network) Explained** – YouTube](https://youtu.be/R-JUOpCgTZc)\n3. 📺 [**What Is a Proxy and How Does It Work?** – YouTube](https://youtu.be/ayo2EUPTEkE)\n4. 📺 [**What is a Proxy Server?** – YouTube](https://youtu.be/5cPIukqXe5w)\n5. 📺 [**Proxy vs. Reverse Proxy (Explained by Example)** – YouTube](https://youtu.be/ozhe__GdWC8)\n6. 📺 [**VPN vs Proxy Explained Pros and Cons** – YouTube](https://youtu.be/npnqyRT77Zc)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Hosting\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/network-internet/Hosting.png\" alt=\"Hosting\"/\u003e\u003c/p\u003e\n\n    [Hosting](https://en.wikipedia.org/wiki/Web_hosting_service) is a special [service provided](https://en.wikipedia.org/wiki/Internet_hosting_service) by hosting providers, which allows you to rent space on a server (which is connected to the Internet around the clock), where your data and files can be stored. There are different options for hosting, where you can use not only the disk space of the server, but also the CPU power to run your network applications.\n\n    -   [Virtual hosting](https://en.wikipedia.org/wiki/Virtual_hosting)\n        \u003e One physical server that distributes its resources to multiple tenants.\n    -   [VPS/VDS](https://en.wikipedia.org/wiki/Virtual_private_server)\n        \u003e Virtual servers that emulate the operation of a separate physical server and are available for rent to the client with maximum privileges.\n    -   [Dedicated server](https://en.wikipedia.org/wiki/Dedicated_hosting_service)\n        \u003e Renting a full physical server with full access to all resources. As a rule, this is the most expensive service.\n    -   [Cloud hosting](https://en.wikipedia.org/wiki/Cloud_storage)\n        \u003e A service that uses the resources of several servers. When renting, the user pays only for the actual resources used.\n    -   [Colocation](https://en.wikipedia.org/wiki/Colocation_centre)\n        \u003e A service that gives the customer the opportunity to install their equipment on the provider's premises.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**What is Web Hosting?** – namecheap.com](https://www.namecheap.com/hosting/what-is-web-hosting-definition/)\n2. 📺 [**What is Web Hosting and How Does It Work?** – YouTube](https://youtu.be/H8oAvyqQwew)\n3. 📺 [**Different Hosting Types Explained** – YouTube](https://youtu.be/CtNWVmt9U1M)\n4. 📄 [**Awesome Hosting** – GitHub](https://github.com/dalisoft/awesome-hosting)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### OSI network model\n\n    | №   | Level              | Used protocols       |\n    | --- | ------------------ | -------------------- |\n    | 7   | Application layer  | HTTP, DNS, FTP, POP3 |\n    | 6   | Presentation layer | SSL, SSH, IMAP, JPEG |\n    | 5   | Session layer      | APIs Sockets         |\n    | 4   | Transport layer    | TCP, UDP             |\n    | 3   | Network layer      | IP, ICMP, IGMP       |\n    | 2   | Data link layer    | Ethernet, MAC, HDLC  |\n    | 1   | Physical layer     | RS-232, RJ45, DSL    |\n\n    [OSI (The Open Systems Interconnection model)](https://en.wikipedia.org/wiki/OSI_model) is a set of rules describing how different devices should interact with each other on the network. The model is divided into 7 layers, each of which is responsible for a specific function. All this is to ensure that the process of information exchange in the network follows the same pattern and all devices, whether it is a smart fridge or a smartphone, can understand each other without any problems.\n\n    -   [Physical layer](https://en.wikipedia.org/wiki/Physical_layer)\n        \u003e At this level, bits (ones/zeros) are encoded into physical signals (current, light, radio waves) and transmitted further by wire ([Ethernet](https://en.wikipedia.org/wiki/Ethernet)) or wirelessly ([Wi-Fi](https://en.wikipedia.org/wiki/Wi-Fi)).\n    -   [Data link layer](https://en.wikipedia.org/wiki/Data_link_layer)\n        \u003e Physical signals from layer 1 are decoded back into ones and zeros, errors and defects are corrected, and the sender and receiver [MAC addresses](https://en.wikipedia.org/wiki/MAC_address) are extracted.\n    -   [Network layer](https://en.wikipedia.org/wiki/Network_layer)\n        \u003e This is where traffic routing, DNS queries and [IP packet](https://en.wikipedia.org/wiki/Internet_Protocol) generation take place.\n    -   [Transport layer](https://en.wikipedia.org/wiki/Transport_layer)\n        \u003e The layer responsible for data transfer. There are two important protocols: \u003cbr\u003e\n        \u003e\n        \u003e -   [TCP](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) is a protocol that ensures reliable data transmission. TCP guarantees data delivery and preserves the order of the messages. This has an impact on the transmission speed. This protocol is used where data loss is unacceptable, such as when sending mail or loading web pages. \u003cbr\u003e\n        \u003e -   [UDP](https://en.wikipedia.org/wiki/User_Datagram_Protocol) is a simple protocol with fast data transfer. It does not use mechanisms to guarantee the delivery and ordering of data. It is used e.g. in online games where partial packet loss is not crucial, but the speed of data transfer is much more important. Also, requests to DNS servers are made through UDP protocol.\n    -   [Session layer](https://en.wikipedia.org/wiki/Session_layer)\n        \u003e Responsible for opening and closing communications (sessions) between two devices. Ensures that the session stays open long enough to transfer all necessary data, and then closes quickly to avoid wasting resources.\n    -   [Presentation layer](https://en.wikipedia.org/wiki/Presentation_layer)\n        \u003e Transmission, encryption/decryption and data compression. This is where data that comes in the form of zeros and ones are converted into desired formats (PNG, MP3, PDF, etc.)\n    -   [Application layer](https://en.wikipedia.org/wiki/Application_layer)\n        \u003e Allows the user's applications to access network services such as database query handler, file access, email forwarding.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**Layers of OSI Model** – geeksForGeeks](https://www.geeksforgeeks.org/layers-of-osi-model/)\n2. 📺 [**The OSI Model - Explained by Example** – YouTube](https://youtu.be/7IS7gigunyI)\n3. 📺 [**TCP vs UDP Crash Course** – YouTube](https://youtu.be/qqRYkcta6IE)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### HTTP Protocol\n\n    [HTTP (HyperText Transport Protocol)](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol) is the most important protocol on the Internet. It is used to transfer data of any format. The protocol itself works according to a simple principle: request -\u003e response.\n\n    -   [Structure of HTTP messages](https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages)\n        \u003e HTTP messages consist of a header section containing metadata about the message, followed by an optional message body containing the data being sent.\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/network-internet/http_eng.png\" alt=\"HTTP\"/\u003e\u003c/p\u003e\n\n    -   [Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)\n        \u003e Additional service information that is sent with the request/response. \u003cbr\u003e\n        \u003e Common headers: [Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Host), [User-Agent](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent), [If-Modified-Since](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since), [Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie), [Referer](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer), [Authorization](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization), [Cache-Control](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control), [Content-Type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type), [Content-Length](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Length), [Last-Modified](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified), [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie), [Content-Encoding](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding).\n    -   [Request methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods)\n        \u003e Main: [GET](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET), [POST](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST), [PUT](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT), [DELETE](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/DELETE). \u003cbr\u003e Others: [HEAD](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/HEAD), [CONNECT](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/CONNECT), [OPTIONS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS), [TRACE](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/TRACE), [PATCH](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH).\n    -   [Response status codes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)\n        \u003e Each response from the server has a special numeric code that characterizes the state of the sent request. These codes are divided into 5 main classes:\n        \u003e -   **1хх** - Service information\n        \u003e -   **2хх** - Successful request\n        \u003e -   **3хх** - Redirect to another address\n        \u003e -   **4хх** - Client side error\n        \u003e -   **5хх** - Server side error\n    -   [HTTPS](https://developer.mozilla.org/en-US/docs/Glossary/https)\n        \u003e Same HTTP, but with encryption support. Your apps should use HTTPS to be secure.\n    -   [Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies)\n        \u003e The HTTP protocol does not provide the ability to save information about the status of previous requests and responses. Cookies are used to solve this problem. Cookies allow the server to store information on the client side that the client can send back to the server. For example, cookies can be used to authenticate users or to store various settings.\n    -   [CORS (Cross origin resource sharing)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)\n        \u003e A technology that allows one domain to securely receive data from another domain.\n    -   [CSP (Content Security Policy)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP)\n        \u003e A special header that allows you to recognize and eliminate certain types of web application vulnerabilities.\n    -   [Evolution of HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP)\n        \u003e - **HTTP 1.0**: Uses separate connections for each request/response, lacks caching support, and has plain text headers.\n        \u003e - **HTTP 1.1**: Introduces persistent connections, pipelining, the Host header, and chunked transfer encoding.\n        \u003e - **HTTP 2**: Supports multiplexing, header compression, server push, and support a binary data.\n        \u003e - **HTTP 3**: Built on [QUIC](https://developer.mozilla.org/en-US/docs/Glossary/QUIC), offers improved multiplexing, reliability, and better performance over unreliable networks.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**How HTTP Works and Why it's Important** – freeCodeCamp](https://www.freecodecamp.org/news/how-the-internet-works/)\n2. 📄 [**Hypertext Transfer Protocol (HTTP)** – MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP)\n3. 📺 [**Hyper Text Transfer Protocol Crash Course** – YouTube](https://youtu.be/0OrmKCB0UrQ)\n4. 📺 [**Full HTTP Networking Course (5 hours)** – YouTube](https://youtu.be/2JYT5f2isg4)\n5. 📄 [**HTTP vs HTTPS – What's the Difference?** – freeCodeCamp](https://www.freecodecamp.org/news/http-vs-https/)\n6. 📺 [**HTTP Cookies Crash Course** – YouTube](https://youtu.be/sovAIX4doOE)\n7. 📺 [**Cross Origin Resource Sharing (Explained by Example)** – YouTube](https://youtu.be/Ka8vG5miErk)\n8. 📺 [**When to use HTTP GET vs POST?** – YouTube](https://youtu.be/K8HJ6DN23zI)\n9. 📺 [**How HTTP/2 Works, Performance, Pros \u0026 Cons and More** – YouTube](https://youtu.be/fVKPrDrEwTI)\n10. 📺 [**HTTP/2 Critical Limitation that led to HTTP/3 \u0026 QUIC** – YouTube](https://youtu.be/GriONb4EfPY)\n11. 📺 [**304 Not Modified HTTP Status (Explained with Code Example and Pros \u0026 Cons)** – YouTube](https://youtu.be/0QHmHR55_Lo)\n12. 📺 [**What is the Largest POST Request the Server can Process?** – YouTube](https://youtu.be/0QHmHR55_Lo)\n\u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### TCP/IP stack\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/network-internet/tcp-ip_eng.png\" alt=\"TCP/IP\"/\u003e\u003c/p\u003e\n\n    Compared to the [OSI model](#osi-network-model), the [TCP/IP](https://en.wikipedia.org/wiki/Internet_protocol_suite) stack has a simpler architecture. In general, the TCP/IP model is more widely used and practical, and the OSI model is more theoretical and detailed. Both models describe the same principles, but differ in the approach and protocols they include at their levels.\n\n    - [Link layer](https://en.wikipedia.org/wiki/Link_layer)\n        \u003e Defines how data is transmitted over the physical medium, such as cables or wireless signals. \u003cbr\u003e\n        \u003e Protocols: [Ethernet](https://en.wikipedia.org/wiki/Ethernet), [Wi-Fi](https://en.wikipedia.org/wiki/Wi-Fi), [Bluetooth](https://en.wikipedia.org/wiki/Bluetooth), [Fiber optic](https://en.wikipedia.org/wiki/Optical_fiber).\n    - [Internet Layer](https://en.wikipedia.org/wiki/Internet_layer)\n        \u003e Routing data across different networks. It uses IP addresses to identify devices and routes data packets to their destination. \u003cbr\u003e\n        \u003e Protocols: [IP](https://en.wikipedia.org/wiki/Internet_Protocol), [ARP](https://en.wikipedia.org/wiki/Address_Resolution_Protocol), [ICMP](https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol), [IGMP](https://en.wikipedia.org/wiki/Internet_Group_Management_Protocol)\n    - [Transport Layer](https://en.wikipedia.org/wiki/Transport_layer)\n        \u003e Data transmission between two devices. It uses protocols such as [TCP](https://en.wikipedia.org/wiki/Transmission_Control_Protocol) - reliable, but slow and [UDP](https://en.wikipedia.org/wiki/User_Datagram_Protocol) - fast, but unreliable.\n    - [Application Layer](https://en.wikipedia.org/wiki/Application_layer)\n        \u003e Provides services to the end user, such as web browsing, email, and file transfer. It interacts with the lower layers of the stack to transmit data over the network. \u003cbr\u003e\n        \u003e Protocols: [HTTP](#http-protocol), [FTP](https://en.wikipedia.org/wiki/File_Transfer_Protocol), [SMTP](https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol), [DNS](https://en.wikipedia.org/wiki/Domain_Name_System), [SNMP](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol).\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**What is the TCP/IP Model? Layers and Protocols Explained** – freeCodeCamp](https://www.freecodecamp.org/news/what-is-tcp-ip-layers-and-protocols-explained/)\n2. 📺 [**What is TCP/IP?** – YouTube](https://youtu.be/PpsEaqJV_A0)\n3. 📺 [**How TCP really works. Three-way handshake. TCP/IP Deep Dive** – YouTube](https://youtu.be/rmFX1V49K8U)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Network problems\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/network-internet/problems_eng.gif\" alt=\"Problems\"/\u003e\u003c/p\u003e\n\n    The quality of networks, including the Internet, is far from ideal. This is due to the complex structure of networks and their dependence on a huge number of factors. For example, the stability of the connection between the client device and its router, the quality of service of the provider, the power and performance of the server, the physical distance between the client and the server, etc.\n\n    -   [Latency](https://developer.mozilla.org/en-US/docs/Web/Performance/Understanding_latency)\n        \u003e The time it takes for a data packet to travel from sender to receiver. It depends more on the physical distance.\n    -   [Packet loss](https://en.wikipedia.org/wiki/Packet_loss)\n        \u003e Not all packets traveling over the network can reach their destination. This happens most often when using wireless networks or due to [network congestion](https://en.wikipedia.org/wiki/Network_congestion).\n    -   [Round Trip Time (RTT)](https://en.wikipedia.org/wiki/Round-trip_delay)\n        \u003e The time it takes for the data packet to reach its destination + the time to respond that the packet was received successfully.\n    -   [Jitter](https://www.ir.com/guides/what-is-network-jitter)\n        \u003e Delay fluctuations, unstable ping (for example, 50ms, 120ms, 35ms...).\n    -   [Packet reordering](https://wiki.geant.org/display/public/EK/PacketReordering)\n        \u003e The IP protocol does not guarantee that packets are delivered in the order in which they are sent.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**Understanding latency** – MDN](https://developer.mozilla.org/en-US/docs/Web/Performance/Understanding_latency)\n2. 📺 [**What is latency? What affects latency?** – YouTube](https://youtu.be/epAXDsq5SbE)\n3. 📺 [**Basics of network bandwidth, latency, and jitter** – YouTube](https://youtu.be/WdbJdUh6W08)\n4. 📺 [**Round Trip Time (RTT)** – YouTube](https://youtu.be/nT9F-USjtBg)\n5. 📺 [**What Causes Packet Loss and How to Eliminate It In Your Network** – YouTube](https://youtu.be/Cg656nGbXe4)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Network diagnostics\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/network-internet/Traceroute.png\" alt=\"Traceroute\"/\u003e\u003c/p\u003e\n\n    -   [Traceroute](https://en.wikipedia.org/wiki/Traceroute)\n        \u003e A procedure that allows you to trace to which nodes, with which IP addresses, a packet you send before it reaches its destination. Tracing can be used to identify computer network related problems and to examine/analyze the network.\n    -   [Ping scan](\u003chttps://en.wikipedia.org/wiki/Ping_(networking_utility)\u003e)\n        \u003e The easiest way to check the server for performance.\n    -   [Checking for packet loss](https://www.dnsstuff.com/packet-loss-test)\n        \u003e Due to dropped connections, not all packets sent over the network reach their destination.\n    -   [Wireshark](https://en.wikipedia.org/wiki/Wireshark)\n        \u003e A powerful program with a graphical interface for analyzing all traffic that passes through the network in real time.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📺 [**How does traceroute work?** – YouTube](https://youtu.be/G05y9UKT69s)\n2. 📺 [**Traceroute (tracert) Explained - Network Troubleshooting** – YouTube](https://youtu.be/up3bcBLZS74)\n3. 📺 [**Nmap - Host Discovery With Ping Sweep** – YouTube](https://youtu.be/LvCDaftsMwI)\n4. 📺 [**Internet Troubleshooting - Pathping Packet Loss** – YouTube](https://youtu.be/VPdotNIXOgI)\n5. 📺 [**Wireshark crash course (playlist)** – YouTube](https://youtube.com/playlist?list=PLBf0hzazHTGPgyxeEj_9LBHiqjtNEjsgt)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n## PC device\n\n-   ### Main components (hardware)\n\n    -   [Motherboard](https://en.wikipedia.org/wiki/Motherboard)\n        \u003e The most important PC component to which all other elements are connected.\n        \u003e\n        \u003e -   [Chipset](https://en.wikipedia.org/wiki/Chipset) - set of electronic components that responsible for the communication of all motherboard components.\n        \u003e -   [CPU socket](https://en.wikipedia.org/wiki/CPU_socket) - socket for mounting the processor.\n        \u003e -   [VRM (Voltage Regulator Module)](https://en.wikipedia.org/wiki/Voltage_regulator_module) – module that converts the incoming voltage (usually 12V) to a lower voltage to run the processor, integrated graphics, memory, etc.\n        \u003e -   Slots for RAM.\n        \u003e -   Expansion slots [PCI-Express](https://en.wikipedia.org/wiki/PCI_Express) - designed for connection of video cards, external network/sound cards.\n        \u003e -   Slots [M.2](https://en.wikipedia.org/wiki/M.2) / [SATA](https://en.wikipedia.org/wiki/SATA) - designed to connect hard disks and SSDs.\n    -   [CPU (Central processing unit)](https://en.wikipedia.org/wiki/Central_processing_unit)\n        \u003e The most important device that executes instructions (programme code). Processors only work with 1 and 0, so all programmes are ultimately a set of binary code.\n        \u003e\n        \u003e -   [Registers](https://en.wikipedia.org/wiki/Processor_register) - the fastest memory in a PC, has an extremely small capacity, is built into the processor and is designed to temporarily store the data being processed.\n        \u003e -   [Cache](https://en.wikipedia.org/wiki/CPU_cache) - slightly less fast memory, which is also built into the processor and is used to store a copy of data from frequently used cells in the main memory.\n        \u003e -   Processors can have different [architectures](https://en.wikipedia.org/wiki/Processor_design). Currently, the most common are the [x86](https://en.wikipedia.org/wiki/X86-64) architecture (desktop and laptop computers) and [ARM](https://en.wikipedia.org/wiki/ARM_architecture_family) (mobile devices as well as the latest Apple computers).\n    -   [RAM (Random-access memory)](https://en.wikipedia.org/wiki/Random-access_memory)\n        \u003e Fast, low capacity memory (4-16GB) designed to temporarily store program code, as well as input, output and intermediate data processed by the processor.\n    -   [Data storage](https://en.wikipedia.org/wiki/Data_storage)\n        \u003e Large capacity memory (256GB-1TB) designed for long-term storage of files and installed programmes.\n    -   [GPU (Graphics card)](https://en.wikipedia.org/wiki/Graphics_card)\n        \u003e A separate card that translates and processes data into images for display on a monitor. This device is also called a discrete graphics card. Usually needed for those who do 3D modelling or play games. \u003cbr\u003e [Built-in graphics card](https://en.wikipedia.org/wiki/Graphics_processing_unit#Integrated_graphics_processing_unit) is a graphics card built into the processor. It is suitable for daily work.\n    -   [Network card](https://en.wikipedia.org/wiki/Network_interface_controller)\n        \u003e A device that receives and transmits data from other devices connected to the [local network](https://en.wikipedia.org/wiki/Local_area_network).\n    -   [Sound card](https://en.wikipedia.org/wiki/Sound_card)\n        \u003e A device that allows you to process sound, output it to other devices, record it with a microphone, etc.\n    -   [Power supply unit](\u003chttps://en.wikipedia.org/wiki/Power_supply_unit_(computer)\u003e)\n        \u003e A device designed to convert the AC voltage from the mains to DC voltage.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**Everything You Need to Know About Computer Hardware**](https://www.lifewire.com/computer-hardware-2625895)\n2. 📺 [**What does what in your computer? Computer parts Explained** – YouTube](https://youtu.be/ExxFxD4OSZ0)\n3. 📺 [**Motherboards Explained** – YouTube](https://youtu.be/b2pd3Y6aBag)\n4. 📺 [**The Fetch-Execute Cycle: What's Your Computer Actually Doing?** – YouTube](https://youtu.be/Z5JC9Ve1sfI)\n5. 📺 [**How a CPU Works in 100 Seconds // Apple Silicon M1 vs Intel i9** – YouTube](https://youtu.be/vqs_0W-MSB0)\n6. 📺 [**Arm vs x86 - Key Differences Explained** – YouTube](https://youtu.be/AADZo73yrq4)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Operating system design\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/os/os-layer_eng.png\" alt=\"OS\"/\u003e\u003c/p\u003e\n\n    [Operating system (OS)](https://en.wikipedia.org/wiki/Operating_system) is a comprehensive software system designed to manage a computer's resources. With operating systems, people do not have to deal directly with the processor, RAM or other parts of the PC.\n\n    OS can be thought of as an abstraction layer that manages the hardware of a computer, thereby providing a simple and convenient environment for user software to run.\n\n    -   Main features\n        \u003e -   RAM management (space allocation for individual programms)\n        \u003e -   Loading programms into RAM and their execution\n        \u003e -   Execution of requests from user's programms (inputting and outputting data, starting and stopping other programms, freeing up memory or allocating additional memory, etc.)\n        \u003e -   Interaction with input and output devices (mouse, keyboard, monitor, etc.)\n        \u003e -   Interaction with storage media (HDDs and SSDs)\n        \u003e -   Providing a user's interface (console shell or graphical interface)\n        \u003e -   Logging of software errors (saving logs)\n    -   Additional functions (may not be available in all OSs)\n        \u003e -   Organise [multitasking](https://en.wikipedia.org/wiki/Computer_multitasking) (simultaneous execution of several programms)\n        \u003e -   Delimiting access to resources for each process\n        \u003e -   [Inter-process communication](https://en.wikipedia.org/wiki/Inter-process_communication) (data exchange, synchronisation)\n        \u003e -   Organise the protection of the operating system itself against other programms and the actions of the user\n        \u003e -   Provide multi-user mode and differentiate rights between different OS users (admins, guests, etc.)\n    -   [OS kernel](\u003chttps://en.wikipedia.org/wiki/Kernel_(operating_system)\u003e)\n        \u003e The central part of the operating system which is used most intensively. The kernel is constantly in memory, while other parts of the OS are loaded into and unloaded from memory as needed.\n    -   [Bootloader](https://en.wikipedia.org/wiki/Bootloader)\n        \u003e The system software that prepares the environment for the OS to run (puts the hardware in the right state, prepares the memory, loads the OS kernel there and transfers control to it (the kernel).\n    -   [Device drivers](https://en.wikipedia.org/wiki/Device_driver)\n        \u003e Special software that allows the OS to work with a particular piece of equipment.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**What is an OS? Operating System Definition for Beginners** – freeCodeCamp](https://www.freecodecamp.org/news/what-is-an-os-operating-system-definition-for-beginners/)\n2. 📄 [**Windows vs MacOS vs Linux – Operating System Handbook** – freeCodeCamp](https://www.freecodecamp.org/news/an-introduction-to-operating-systems/)\n3. 📺 [**Operating Systems: Crash Course Computer Science** – YouTube](https://youtu.be/26QPDBe-NB8)\n4. 📺 [**Operating System Basics** – YouTube](https://youtu.be/9GDX-IyZ_C8)\n5. 📺 [**Operating System in deep details (playlist)** – YouTube](https://youtube.com/playlist?list=PLBlnK6fEyqRiVhbXDGLXDk_OQAeuVcp2O)\n6. 📄 [**Awesome Operating System Stuff** – GitHub](https://github.com/jubalh/awesome-os)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Processes and threads\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/os/process_eng.png\" alt=\"Process\"/\u003e\u003c/p\u003e\n\n    -   [Process](\u003chttps://en.wikipedia.org/wiki/Process_(computing)\u003e)\n        \u003e A kind of container in which all the resources needed to run a program are stored. As a rule, the process consists of:\n        \u003e\n        \u003e -   Executable program code \u003cbr\u003e\n        \u003e -   Input and output data \u003cbr\u003e\n        \u003e -   [Call stack](https://en.wikipedia.org/wiki/Call_stack) (order of instructions for execution) \u003cbr\u003e\n        \u003e -   [Heap](https://en.wikipedia.org/wiki/Memory_management#Manual_memory_management) (a structure for storing intermediate data created during the process) \u003cbr\u003e\n        \u003e -   [Segment descriptor](https://en.wikipedia.org/wiki/Segment_descriptor) \u003cbr\u003e\n        \u003e -   [File descriptor](https://en.wikipedia.org/wiki/File_descriptor) \u003cbr\u003e\n        \u003e -   Information about the set of permissible powers \u003cbr\u003e\n        \u003e -   Processor status information\n    -   [Thread](\u003chttps://en.wikipedia.org/wiki/Thread_(computing)\u003e)\n        \u003e An entity in which sequences of program actions (procedures) are executed. Threads are within a process and use the same address space. There can be multiple threads in a single process, allowing multiple tasks to be performed. These tasks, thanks to threads, can exchange data, use shared data or the results of other tasks.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📺 [**Difference Between Process and Thread** – YouTube](https://youtu.be/O3EyzlZxx3g)\n2. 📺 [**How Do CPUs Use Multiple Cores** – YouTube](https://youtu.be/S3I5WNHbnJ0)\n3. 📺 [**What is Hyper Threading Technology** – YouTube](https://youtu.be/wnS50lJicXc)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Concurrency and parallelism\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/os/concurrency-parallel.png\" alt=\"Concurrency-parallelism\"/\u003e\u003c/p\u003e\n\n    -   [Parallelism](https://en.wikipedia.org/wiki/Parallel_computing)\n        \u003e The ability to perform multiple tasks simultaneously using multiple processor cores, where each individual core performs a different task.\n    -   [Concurrency](\u003chttps://en.wikipedia.org/wiki/Concurrency_(computer_science)\u003e)\n        \u003e The ability to perform multiple tasks, but using a single processor core. This is achieved by dividing tasks into separate blocks of commands which are executed in turn, but switching between these blocks is so fast that for users it seems as if these processes are running simultaneously.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**Concurrency, parallelism, and the many threads of Santa Claus** – freeCodeCamp](https://www.freecodecamp.org/news/concurrency-parallelism-and-the-many-threads-of-santa-claus/)\n2. 📺 [**Concurrency vs Parallelism** – YouTube](https://youtu.be/Y1pgpn2gOSg)\n3. 📺 [**Concurrency is not Parallelism by Rob Pike** – YouTube](https://youtu.be/oV9rvDllKEg)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Inter-process communication\n\n    A mechanism which allows to exchange data between threads of one or different processes. Processes can be run on the same computer or on different computers connected by a network. [Inter-process communication](https://en.wikipedia.org/wiki/Inter-process_communication) can be done in different ways.\n\n    -   [File](https://en.wikipedia.org/wiki/Computer_file)\n        \u003e The easiest way to exchange data. One process writes data to a certain file, another process reads the same file and thus receives data from the first process.\n    -   [Signal (IPC)](\u003chttps://en.wikipedia.org/wiki/Signal_(IPC)\u003e)\n        \u003e Asynchronous notification of one process about an event which occurred in another process.\n    -   [Network socket](https://en.wikipedia.org/wiki/Network_socket)\n        \u003e In particular, IP addresses and ports are used to communicate between computers using the TCP/IP protocol stack. This pair defines a socket (_socket_ corresponding to the address and port).\n    -   [Semaphore](\u003chttps://en.wikipedia.org/wiki/Semaphore_(programming)\u003e)\n        \u003e A counter over which only 2 operations can be performed: increasing and decreasing (and for 0 the decreasing operation is blocked).\n    -   [Message passing](https://en.wikipedia.org/wiki/Message_passing) \u0026 [Message queue](https://en.wikipedia.org/wiki/Message_queue)\n    -   [Pipelines](\u003chttps://en.wikipedia.org/wiki/Pipeline_(Unix)\u003e)\n        \u003e Redirecting the output of one process to the input of another (similar to a pipe).\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**Interprocess Communications** – Microsoft](https://learn.microsoft.com/en-us/windows/win32/ipc/interprocess-communications)\n2. 📺 [**Interprocess Communication** – YouTube](https://youtu.be/dJuYKfR8vec)\n3. 📺 [**Inter Process Communication** – YouTube](https://youtu.be/W0BX6geRCDQ)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n## Linux Basics\n\nOperating systems based on [Linux kernel](https://en.wikipedia.org/wiki/Linux_kernel) are the standard in the world of server development, since most servers run on such operating systems. Using Linux on servers is profitable because it is free and open source, secure and works fast on cheap hardware.\n\nThere are a huge number of Linux distributions (preinstalled software bundles) to suit all tastes. One of the most popular is [Ubuntu](https://en.wikipedia.org/wiki/Ubuntu). This is where you can start your dive into server development.\n\n[Install Ubuntu](https://ubuntu.com/download/desktop) on a separate PC or laptop. If this is not possible, you can use a special program [Virtual Box](https://www.virtualbox.org/wiki/Downloads) where you can [run other OS](https://www.virtualbox.org/manual/ch01.html#create-vm-wizard) on top of the main OS. You can also run [Docker](https://www.docker.com/products/docker-desktop) [Ubuntu image container](https://hub.docker.com/_/ubuntu) (Docker is a [separate topic](#docker) that is exists in this repository).\n\n-   ### Working with shell\n\n    [Shell](https://en.wikipedia.org/wiki/Shell_(computing)) (or console, terminal) is a computer program which is used to operate and control a computer by entering special text commands. Generally, servers do not have [graphical interfaces (GUI)](https://en.wikipedia.org/wiki/Graphical_user_interface), so you will definitely need to learn how to work with shells. The are many [Unix shells](https://en.wikipedia.org/wiki/Unix_shell), but most Linux distributions come with a [Bash shell](https://en.wikipedia.org/wiki/Bash_(Unix_shell)) by default.\n\n    -   Basic commands for navigating the file system\n        ```sh\n        ls # list directory contents\n        cd [PATH] # go to specified directory\n        cd .. # move to a higher level (to the parent directory)\n        touch [FILE] # create a file\n        cat \u003e [FILE] # enter text into the file (overwrite)\n        cat \u003e\u003e [FILE] # enter text at the end of the file (append)\n        cat/more/less [FILE] # to view the file contents\n        head/tail [FILE] # view the first/last lines of a file\n        pwd # print path to current directory\n        mkdir [NAME] # create a directory\n        rmdir [NAME] # delete a directory\n        cp [FILE] [PATH] # copy a file or directory\n        mv [FILE] [PATH] # moving or renaming\n        rm [FILE] # deleting a file or directory\n        find [STRING] # file system search\n        du [FILE] # output file or directory size\n        grep [PATTERN] [FILE] # print lines that match patterns\n        ```\n    -   Commands for help information\n        ```sh\n        man [COMMAND] # allows you to view a manual for any command\n        apropos [STRING] # search for a command with a description that has a specified word\n        man -k [STRING] # similar to the command above\n        whatis [COMMAND] # a brief description of the command\n        ```\n    -   [Super user rights](https://en.wikipedia.org/wiki/Sudo)\n        \u003e Analogue to running as administrator in Windows\n        ```sh\n        sudo [COMMAND] # executes a command with superuser privileges\n        ```\n    -   Text editor\n        \u003e Study any in order to read and edit files freely through the terminal.\n        \u003e The easiest – [nano](https://en.wikipedia.org/wiki/GNU_nano).\n        \u003e Something in the middle - [micro](https://micro-editor.github.io/).\n        \u003e The most advanced – [Vim](\u003chttps://en.wikipedia.org/wiki/Vim_(text_editor)\u003e).\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**31 Linux Commands Every Ubuntu User Should Know**](https://itsfoss.com/essential-ubuntu-commands/)\n2. 📄 [**The Linux Command Handbook** – freeCodeCamp](https://www.freecodecamp.org/news/the-linux-commands-handbook/)\n3. 📄 [**A to Z: List of Linux commands**](https://linuxhandbook.com/a-to-z-linux-commands/)\n4. 📺 [**The 50 Most Popular Linux \u0026 Terminal Commands** – YouTube](https://youtu.be/ZtqBQ68cfJc)\n5. 📺 [**Nano Editor Fundamentals** – YouTube](https://youtu.be/gyKiDczLIZ4)\n6. 📺 [**Vim Tutorial for Beginners** – YouTube](https://youtu.be/RZ4p-saaQkc)\n7. 📄 [**Awesome Terminals** – GitHub](https://github.com/cdleon/awesome-terminals)\n8. 📄 [**Awesome CLI-apps** – GitHub](https://github.com/agarrharr/awesome-cli-apps)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Package manager\n\n    The package manager is a utility that allows you to install/update software packages from the terminal.\n\n    Linux distributions can be divided into several groups, depending on which package manager they use: [apt](\u003chttps://en.wikipedia.org/wiki/APT_(software)\u003e) (in [Debian](https://en.wikipedia.org/wiki/Debian) based distributions), [RPM](https://en.wikipedia.org/wiki/RPM_Package_Manager) (the [Red Hat](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux) package management system) and [Pacman](https://en.wikipedia.org/wiki/Arch_Linux#Pacman) (the package manager in [Arch-like distributions](https://en.wikipedia.org/wiki/Arch_Linux))\n\n    Ubuntu is based on Debian, so it uses apt (advanced packaging tool) package manager.\n\n    -   Basic commands\n        ```sh\n        apt install [package] # install the package\n        apt remove [package] # remove the package, but keep the configuration\n        apt purge [package] # remove the package along with the configuration\n        apt update # update information about new versions of packages\n        apt upgrade # update the packages installed in the system\n        apt list --installed # list of packages installed on the system\n        apt list --upgradable # list of packages that need to be updated\n        apt search [package] # searching for packages by name on the network\n        apt show [package] # package information\n        ```\n    -   [aptitude](https://en.wikipedia.org/wiki/Aptitude_(software))\n        \u003e Interactive console utility for easy viewing of packages to install, update and uninstall them.\n    -   Repository management\n        \u003e Package managers typically work with software repositories. These repositories contain a collection of software packages that are maintained and provided by the distribution's community or official sources.\n        ```sh\n        add-apt-repository [repository_url] # add a new repository\n        add-apt-repository --remove [repository_url] # remove a repo\n            # don\\'t forget to update after this operations - apt update\n        ```\n        ```sh\n        /etc/apt/sources.list # a file contains a list of configured repo links\n        /etc/apt/sources.list.d # a directory contains files for thrid party repos\n        ```\n    -   [dpkg](https://en.wikipedia.org/wiki/Dpkg)\n        \u003e Low-level tool to install, build, remove and manage Debian packages.\n\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n    \n1. 📺 [**Linux Crash Course - The apt Command** – YouTube](https://youtu.be/1kicKTbK768)\n2. 📺 [**Linux Package Management | Debian, Fedora, and Arch Linux** – YouTube](https://youtu.be/lkii2cGuKao)\n3. 📄 [**sudo apt-get update vs upgrade – What is the Difference?** – freeCodeCamp](https://www.freecodecamp.org/news/sudo-apt-get-update-vs-upgrade-what-is-the-difference)\n4. 📄 [**Repositories in Ubuntu**](https://help.ubuntu.com/community/Repositories/Ubuntu)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Bash scripts\n\n    You can use scripts to automate the sequential input of any number of commands. In [Bash](\u003chttps://en.wikipedia.org/wiki/Bash_(Unix_shell)\u003e) you can create different conditions (branching), loops, timers, etc. to perform all kinds of actions related to shell input.\n\n    -   [Basics of Bash Scripts](https://github.com/cheatsnake/bash-scripts-by-example)\n        \u003e The most basic and frequently used features such as: variables, I/O, loops, conditions, etc.\n    -   Practice\n        \u003e Solve challenges on sites like [HackerRank](https://www.hackerrank.com/domains/shell) and [Codewars](https://www.codewars.com/join?language=shell).\n        \u003e Start using Bash to automate routine activities on your computer. If you're already a programmer, create scripts to easily build your project, to install settings, and so on.\n    -   [ShellCheck](https://github.com/koalaman/shellcheck) script analysis tool\n        \u003e It will point out possible mistakes and teach you best practices for writing really good scripts.\n    -   Additional resources\n        \u003e Repositories such as [awesome bash](https://github.com/awesome-lists/awesome-bash) and [awesome shell](https://github.com/alebcay/awesome-shell) have entire collections of useful resources and tools to help you develop even more skills with Bash and shell in general.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**Shell Scripting for Beginners** – freeCodeCamp](https://www.freecodecamp.org/news/shell-scripting-crash-course-how-to-write-bash-scripts-in-linux/)\n2. 📺 [**Bash Scripting Full Course 3 Hours** – YouTube](https://youtu.be/e7BufAVwDiM)\n3. 📄 [**HackerRank challenges for Bash with solutions**](https://github.com/Thomas-George-T/HackerRank-The-Linux-Shell-Challenges-Solutions)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Users, groups and permissions\n\n    Linux-based operating systems are multi-user. This means that several people can run many different applications at the same time on the same computer. For the Linux system to be able to \"recognize\" a user, he must be logged in and therefore each user must have a unique name and a secret password.\n\n    -   Working with users\n        ```sh\n        useradd [name] [flags] # create a new user\n        passwd [name] # set a password for the user\n        usermod [name] [flags] # edit a user\n        usermod -L [name] # block a user\n        usermod -U [name] # unblock a user\n        userdel [name] [flags] # delete a user\n        su [name] # switch to other user\n        ```\n    -   Working with groups\n        ```sh\n        groupadd [group] [flags] # create a group\n        groupmod [group] [flags] # edit group\n        groupdel [group] [flags] # delete group\n        usermod -a -G [groups] [user] # add a user to groups\n        gpasswd --delete [user] [groups] # remove a user from groups\n        ```\n    -   System files\n        ```sh\n        /etc/passwd # a file containing basic information about users\n        /etc/shadow # a file containing encrypted passwords\n        /etc/group # a file containing basic information about groups\n        /etc/gshadow # a file containing encrypted group passwords\n        ```\n\n    In Linux, it is possible to share privileges between users, limit access to unwanted files or features, control available actions for services, and much more. In Linux, there are only three kinds of rights - read, write and execute - and three categories of users to which they can be applied - file owner, file group and everyone else.\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/linux/chmod_eng.png\" alt=\"chmod\"/\u003e\u003c/p\u003e\n\n    -   Basic commands for working with rights\n        ```sh\n        chown \u003cuser\u003e \u003cfile\u003e # changes the owner and/or group for the specified files\n        chmod \u003crights\u003e \u003cfile\u003e # changes access rights to files and directories\n        chgrp \u003cgroup\u003e \u003cfile\u003e # allows users to change groups\n        ```\n    -   Extended rights [SUID and GUID](https://en.wikipedia.org/wiki/Setuid), [sticky bit](https://en.wikipedia.org/wiki/Sticky_bit)\n    -   [ACL (Access control list)](https://en.wikipedia.org/wiki/Access-control_list)\n        \u003e An advanced subsystem for managing access rights.\n\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**Managing Users, Groups and Permissions in Linux**](https://omarrrz-lounge.hashnode.dev/managing-users-groups-and-permissions-in-linux)\n2. 📄 [**Linux User Groups Explained** – freeCodeCamp](https://www.freecodecamp.org/news/linux-user-groups-explained-how-to-add-a-new-group-a-new-group-member-and-change-groups/)\n3. 📺 [**Linux Users and Groups** – YouTube](https://youtu.be/b-9j2jiCOEA)\n4. 📄 [**An Introduction to Linux Permissions** – Digital Ocean](https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-permissions)\n5. 📄 [**File Permissions in Linux – How to Use the chmod Command** – freeCodeCamp](https://www.freecodecamp.org/news/file-permissions-in-linux-chmod-command-explained/)\n6. 📺 [**Understanding File \u0026 Directory Permissions** – YouTube](https://youtu.be/4e669hSjaX8)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Working with processes\n\n    Linux processes can be described as containers in which all information about the state of a running program is stored. If a program hangs and you need to restore it, then you need the skills to manage the processes.\n\n    -   Basic Commands\n        ```sh\n        ps # display a snapshot of the processes of all users\n        top # real-time task manager\n        [command] \u0026 # running the process in the background, (without occupying the shell)\n        jobs # list of processes running in the background\n        fg [PID] # return the process back to the active mode by its number\n         # You can press [Ctrl+Z] to return the process to the background\n        bg [PID] # start a stopped process in the background\n        kill [PID] # terminate the process by PID\n        killall [program] # terminate all processes related to the program\n        ```\n        \n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**How to Show Process Tree in Linux**](https://linuxhandbook.com/show-process-tree/)\n2. 📄 [**How to Manage Linux Processes** – freeCodeCamp](https://www.freecodecamp.org/news/how-to-manage-linux-processes/)\n3. 📄 [**How To Use ps, kill, and nice to Manage Processes in Linux** – Digital Ocean](https://www.digitalocean.com/community/tutorials/how-to-use-ps-kill-and-nice-to-manage-processes-in-linux)\n4. 📺 [**Linux processes, init, fork/exec, ps, kill, fg, bg, jobs** – YouTube](https://youtu.be/TJzltwv7jJs)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Working with SSH\n\n    [SSH](https://en.wikipedia.org/wiki/Secure_Shell) allows remote access to another computer's terminal. In the case of a personal computer, this may be needed to solve an urgent problem, and in the case of a server, it is generally the primary method of connection.\n\n    -   Basic commands\n        ```sh\n        apt install openssh-server # installing SSH (out of the box almost everywhere)\n        service ssh start # start SSH\n        service ssh stop # stop SSH\n        ssh -p [port] [user]@[remote_host] # connecting to a remote machine via SSH\n        ```    \n    -   [Passwordless login](https://www.redhat.com/sysadmin/passwordless-ssh)\n        ```sh\n        ssh-keygen -t rsa # RSA key generation for passwordless login\n        ssh-copy-id -i ~/.ssh/id_rsa [user]@[remote_host] # copying a key to a remote machine\n        ```\n    -   Config files\n        ```sh\n        /etc/ssh/sshd_config # ssh server global config\n        ~/.ssh/config # ssh server local config\n        ~/.ssh/authorized_keys # file with saved public keys\n        ```\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**What the hell is SSH?**](https://codingpastor.hashnode.dev/what-the-hell-is-ssh)\n2. 📺 [**Learn SSH In 6 Minutes - Beginners Guide to SSH Tutorial** – YouTube](https://youtu.be/v45p_kJV9i4)\n3. 📺 [**SSH Crash Course | With Some DevOps** – YouTube](https://youtu.be/hQWRp-FdTpc)\n4. 📄 [**SSH config file for OpenSSH client**](https://www.ssh.com/academy/ssh/config)\n5. 📄 [**Awesome SSH** – GitHub](https://github.com/moul/awesome-ssh)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Network utils\n\n    For Linux there are many built-in and third-party utilities to help you configure your network, analyze it and fix possible problems.\n\n    -   Simple utils\n        ```bash\n        ip address # show info about IPv4 and IPv6 addresses of your devices\n        ip monitor # real time monitor the state of devices\n        ifconfig # config the network adapter and IP protocol settings\n        traceroute \u003chost\u003e # show the route taken by packets to reach the host\n        tracepath \u003chost\u003e # traces the network host to destination discovering MTU\n        ping \u003chost\u003e # check connectivity to host\n        ss -at # show the list of all listening TCP connections\n        dig \u003chost\u003e # show info about the DNS name server\n        host \u003chost | ip-address\u003e # show the IP address of a specified domain\n        mtr \u003chost | ip-address\u003e # combination of ping and traceroute utilities\n        nslookup # query Internet name servers interactively\n        whois \u003chost\u003e # show info about domain registration\n        ifplugstatus # detect the link status of a local Linux ethernet device\n        iftop # show bandwidth usage\n        ethtool \u003cdevice name\u003e # show detalis about your ethernet device\n        nmap # tool to explore and audit network security\n        bmon # bandwidth monitor and rate estimator\n        firewalld # add, configure and remove rules on firewall\n        ipref # perform network performance measurement and tuning\n        speedtest-cli # check your network download/upload speed\n        wget \u003clink\u003e # download files from the Internet\n        ```\n    -   [`tcpdump`](https://en.wikipedia.org/wiki/Tcpdump)\n        \u003e A console utility that allows you to intercept and analyze all network traffic passing through your computer.\n    -   [`netcat`](https://en.wikipedia.org/wiki/Netcat)\n        \u003e Utility for reading from and writing to network connections using TCP or UDP. It includes port scanning, transferring files, and port listening: as with any server, it can be used as a [backdoor](\u003chttps://en.wikipedia.org/wiki/Backdoor_(computing)\u003e).\n    -   [`iptables`](https://en.wikipedia.org/wiki/Iptables)\n        \u003e User-space utility program that allows configure the IP packet filter rules of the Linux kernel firewall, implemented as different Netfilter modules. The filters are organized in different tables, which contain chains of rules for how to treat network traffic packets.\n    -   [`curl`](https://en.wikipedia.org/wiki/CURL)\n        \u003e Command-line tool for transferring data using various network protocols.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**21 Basic Linux Networking Commands You Should Know**](https://itsfoss.com/basic-linux-networking-commands/)\n2. 📄 [**Using tcpdump Command in Linux to Analyze Network**](https://linuxhandbook.com/tcpdump-command/)\n3. 📺 [**tcpdump - Traffic Capture \u0026 Analysis** – YouTube](https://youtu.be/1lDfCRM6dWk)\n4. 📺 [**tcpdumping Node.js server** – YouTube](https://youtu.be/g_tmQ5G-T2w)\n5. 📄 [**Beginner’s guide to Netcat for hackers**](https://medium.com/@HackTheBridge/beginners-guide-to-netcat-for-hackers-55abe449991d)\n6. 📄 [**Iptables Tutorial**](https://linuxhint.com/iptables-tutorial/)\n7. 📄 [**An intro to cURL: The basics of the transfer tool**](https://blog.logrocket.com/an-intro-to-curl-the-basics-of-the-transfer-tool/)\n8. 📺 [**Basic cURL Tutorial** – YouTube](https://youtu.be/7XUibDYw4mc)\n9. 📺 [**Using curl better - tutorial by curl creator Daniel Stenberg** – YouTube](https://youtu.be/I6id1Y0YuNk)\n10. 📄 [**Awesome console services** – GitHub](https://github.com/chubin/awesome-console-services)\n\u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Task scheduler\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/linux/cron_eng.png\" alt=\"cron\"/\u003e\u003c/p\u003e\n\n    Schedulers allow you to flexibly manage the delayed running of commands and scripts. Linux has a built-in [cron](https://en.wikipedia.org/wiki/Cron) scheduler that can be used to easily perform necessary actions at certain intervals.\n\n    -   Main commands\n        ```bash\n        crontab -e # edit the crontab file of the current user\n        crontab -l # output the contents of the current schedule file\n        crontab -r # deleting the current schedule file\n        ```\n    -   Files and directories\n        ```sh\n        /etc/crontab # base config\n        /etc/cron.d/ # a dir with crontab files used to manage the entire system\n\n         # dirs where you can store scripts that runs:\n        /etc/cron.daily/ # every day\n        /etc/cron.weekly/ # every week\n        /etc/cron.monthly/ # every month\n        ```\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**How to schedule and manage tasks using crontab** – dev.to](https://dev.to/shaikh/how-to-schedule-and-manage-tasks-using-crontab-20dj)\n2. 📺 [**Cron Jobs For Beginners | Linux Task Scheduling** – YouTube](https://youtu.be/v952m13p-b4)\n3. 📄 [**How to Check Crontab logs in Linux**](https://linuxhandbook.com/check-crontab-logs/)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### System logs\n\n    [Log files](https://en.wikipedia.org/wiki/Logging_(computing)) are special text files that contain all information about the operation of a computer, program, or user. They are especially useful when bugs and errors occur in the operation of a program or server. It is recommended to periodically review log files, even if nothing suspicious happens.\n\n    -   Main log files\n        ```bash\n        /var/log/syslog or /var/log/messages # information about the kernel,\n        # various services detected, devices, network interfaces, etc.\n        /var/log/auth.log or /var/log/secure # user authorization information\n        /var/log/faillog # failed login attempts\n        /var/log/dmesg # information about device drivers\n        /var/log/boot.log # operating system boot information\n        /var/log/cron # cron task scheduler report\n        ```\n    -   [lnav utility](https://lnav.org/)\n        \u003e Designed for easy viewing of log files (highlighting, reading different formats, searching, etc.)\n    -   Log rotation with [logrotate](https://github.com/logrotate/logrotate)\n        \u003e Allows you to configure automatic deletion (cleaning) of log files so as not to clog memory.\n    -   [Demon journald](https://manpages.ubuntu.com/manpages/bionic/man1/journalctl.1.html)\n        \u003e Collects data from all available sources and stores it in binary format for convenient and dynamic control\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📺 [**Linux Crash Course - Understanding Logging** – YouTube](https://youtu.be/6uP_f_z3CbM)\n2. 📺 [**Linux Monitoring and Logging** – YouTube](https://youtu.be/kZ5LhS6fThM)\n3. 📄 [**3 ways to watch logs in real time in Linux**](https://linuxhandbook.com/watch-logs-real-time/)\n4. 📄 [**Analyzing logs in Linux with journalctl command**](https://linuxhandbook.com/journalctl-command/)\n5. 📄 [**Linux File Structure Explained**](https://shubhsharma19.hashnode.dev/linux-file-structure-explained)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Main issues with Linux\n\n    -   Software installation and package management issues\n        \u003e - [Unmet dependencies](https://fedingo.com/how-to-resolve-unmet-dependencies-in-ubuntu/) - occurs when package fails to install or update.\n        \u003e - [Dependency errors and conflicts](https://ubunlog.com/en/how-to-fix-dependency-errors-in-ubuntu-and-derivatives/)\n    -   [Problems with drivers](https://askubuntu.com/a/496654)\n        \u003e All free Linux drivers are built right into its kernel. Therefore, everything should work \"out of the box\" after installing the system (problems may occur with brand new hardware which has just been released on the market). Drivers whose source code is closed are considered proprietary and are not included in the kernel but are installed manually (like Nvidia graphics drivers).\n    -   File system issues\n        \u003e - Check disk space availability using the `df` command and ensure that critical partitions are not full.\n        \u003e - Use the `fsck` command to check and repair [file system inconsistencies](https://www3.rocketsoftware.com/rocketd3/support/documentation/d3nt/91/refman/index.htm#definitions/file_inconsistency.htm).\n        \u003e - In case of data loss or accidental deletion, utilize data recovery tools like [`extundelete`](https://extundelete.sourceforge.net/) or [`testdisk`](https://github.com/cgsecurity/testdisk).\n    -   Performance and resource management\n        \u003e - Check system resource usage, including CPU, memory, and disk space, using `free`, `df`, or `du` commands.\n        \u003e - Identify resource-intensive processes using tools like `top`, `htop`, or `systemd-cgtop`.\n        \u003e - Disable unnecessary [startup services](https://askubuntu.com/questions/48321/how-do-i-start-applications-automatically-on-login) or [background processes](https://askubuntu.com/questions/636129/how-can-i-see-background-process-in-ubuntu-and-kill-unnecessary-processes) to improve performance.\n    -   Network connectivity issues\n        \u003e - Use the ping command to check network connectivity to a specific host or IP address.\n        \u003e - Check the [network settings](https://ubuntu.com/server/docs/network-configuration), such as IP configuration, [DNS settings](https://unix.stackexchange.com/questions/494324/how-to-setup-dns-manually-on-linux), and [firewall rules](https://www.redhat.com/sysadmin/firewalld-linux-firewall).\n    -   Problems with kernel\n        \u003e [Kernel panic](https://en.wikipedia.org/wiki/Kernel_panic) - can occur due to an error when mounting the root file system.\n        \u003e This is best helped by the skill of reading the logs to find problems (`dmesg` command).\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📺 [**Linux Drivers Explained** – YouTube](https://youtu.be/s8t0AWmHvUM)\n2. 📺 [**How Do Linux Kernel Drivers Work?** – YouTube](https://youtu.be/juGNPLdjLH4)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n## General knowledge\n\n-   ### Numeral systems\n\n    [Numeral system](https://en.wikipedia.org/wiki/Numeral_system) is a set of symbols and rules for denoting numbers. In computer science, it is customary to distinguish four main number systems: binary, octal, decimal, and hexadecimal. It is connected, first of all, with their use in various branches of programming.\n\n    -   [Binary number](https://en.wikipedia.org/wiki/Binary_number)\n        \u003e The most important system for computing technology. Its use is justified by the fact that the logic of the processor is based on only two states (on/off, open/closed, high/low, true/false, yes/no, high/low).\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/common/binary.png\" alt=\"Binary\"/\u003e\u003c/p\u003e\n\n    -   [Octal](https://en.wikipedia.org/wiki/Octal)\n        \u003e It is used e.g. in Linux systems to grant access rights.\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/common/octal.png\" alt=\"Octal\"/\u003e\u003c/p\u003e\n\n    -   [Decimal](https://en.wikipedia.org/wiki/Decimal)\n        \u003e A system that is easy to understand for most people.\n    -   [Hexadecimal](https://en.wikipedia.org/wiki/Hexadecimal)\n        \u003e The letters A, B, C, D, E, F are additionally used for recording. It is widely used in low-level programming and computer documentation because the minimum addressable memory unit is an 8-bit byte, the values of which are conveniently written in two hexadecimal digits.\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/common/hex.png\" alt=\"Hex\"/\u003e\u003c/p\u003e\n\n    -   Translation between different number systems\n        \u003e You can try [online converter](https://cheatsnake.github.io/NSConverter/) for a better understanding.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📺 [**Number Systems Introduction - Decimal, Binary, Octal \u0026 Hexadecimal** – YouTube](https://youtu.be/FFDMzbrEXaE)\n1. 📄 [**Number System in Maths** – GeeksGorGeeks](https://www.geeksforgeeks.org/number-system-in-maths/)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Logical connective\n\n    [Logical connective](https://en.wikipedia.org/wiki/Logical_connective) are widely used in programming to handle boolean types (true/false or 1/0). The result of a boolean expression is also a value of a boolean type.\n\n    \u003ctable\u003e\n    \u003ctr\u003e\u003ctd width=33% valign=top\u003e\n    \n    AND\n    | a | b | a AND b |\n    |---|---|:-------:|\n    | 0 | 0 | 0       |\n    | 0 | 1 | 0       |\n    | 1 | 0 | 0       |\n    | 1 | 1 | 1       |\n    \n    \u003c/td\u003e\u003ctd width=33% valign=top\u003e\n\n    OR\n    | a | b | a OR b |\n    |---|---|:-------:|\n    | 0 | 0 | 0       |\n    | 0 | 1 | 1       |\n    | 1 | 0 | 1       |\n    | 1 | 1 | 1       |\n    \u003c/td\u003e\u003ctd valign=top\u003e\n\n    XOR\n    | a | b | a XOR b |\n    |---|---|:-------:|\n    | 0 | 0 | 0       |\n    | 0 | 1 | 1       |\n    | 1 | 0 | 1       |\n    | 1 | 1 | 0       |\n    \u003c/td\u003e\u003c/tr\u003e\n    \u003c/table\u003e\n\n    -   Basic logical operations\n        \u003e They are the basis of other all kinds of operations. \u003cbr\u003e\n        \u003e There are three in total: [Operation AND (\u0026\u0026, Conjunction)](https://en.wikipedia.org/wiki/Logical_conjunction), [operation OR (||, Disjunction)](https://en.wikipedia.org/wiki/Logical_disjunction), [operation NOT (!, Negation)](https://en.wikipedia.org/wiki/Negation).\n    -   Operation [Exclusive OR (XOR, Modulo 2 Addition)](https://en.wikipedia.org/wiki/Exclusive_or)\n        \u003e An important operation that is fundamental to coding theory and computer networks.\n    -   [Truth Tables](https://en.wikipedia.org/wiki/Truth_table)\n        \u003e For logical operations, there are special tables that describe the input data and the return result.\n    -   Priority of operations\n        \u003e The `NOT` operator has the highest priority, followed by the `AND` operator, and then the `OR` operator. You can change this behavior using round brackets.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📺 [**Logical Operators − Negation, Conjunction \u0026 Disjunction** – YouTube](https://youtu.be/6kYngPvoGxU)\n2. 📺 [**Logical Operators − Exclusive OR** – YouTube](https://youtu.be/m2mf6I3g2-c)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Data structures\n\n    [Data structures](https://en.wikipedia.org/wiki/Data_structure) are containers in which data is stored according to certain rules. Depending on these rules, the data structure will be effective in some tasks and ineffective in others. Therefore, it is necessary to understand when and where to use this or that structure.\n\n    -   [Array](\u003chttps://en.wikipedia.org/wiki/Array_(data_structure)\u003e)\n        \u003e A data structure that allows you to store data of the same type, where each element is assigned a different sequence number.\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/common/array_eng.png\" alt=\"Array\"/\u003e\u003c/p\u003e\n\n    -   [Linked list](https://en.wikipedia.org/wiki/Linked_list)\n        \u003e A data structure where all elements, in addition to the data, contain references to the next and/or previous element. There are 3 varieties:\n        \u003e\n        \u003e -   A [singly linked list](https://en.wikipedia.org/wiki/Linked_list#Singly_linked_list) is a list where each element stores a link to the next element only (one direction).\n        \u003e -   A [doubly linked list](https://en.wikipedia.org/wiki/Doubly_linked_list) is a list where the items contain links to both the next item and the previous one (two directions).\n        \u003e -   A [circular linked list](https://en.wikipedia.org/wiki/Linked_list#Circular_linked_list) is a kind of bilaterally linked list, where the last element of the ring list contains a pointer to the first and the first to the last.\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/common/linked-list.png\" alt=\"Linked list\"/\u003e\u003c/p\u003e\n\n    -   [Stack](\u003chttps://en.wikipedia.org/wiki/Stack_(abstract_data_type)\u003e)\n        \u003e Structure where data storage works on the principle of _last in - first out_ (LIFO).\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/common/stack_eng.png\" alt=\"Stack\"/\u003e\u003c/p\u003e\n\n    -   [Queue](\u003chttps://en.wikipedia.org/wiki/Queue_(abstract_data_type)\u003e)\n        \u003e Structure where data storage is based on the principle of _first in - first out_ (FIFO).\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/common/queue.gif\" alt=\"Queue\"/\u003e\u003c/p\u003e\n\n    -   [Hash table](https://en.wikipedia.org/wiki/Hash_table)\n        \u003e In other words, it is an associative array. Here, each of the elements is accessed with a corresponding key value, which is calculated using [hash function](https://en.wikipedia.org/wiki/Hash_function) according to a certain algorithm.\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/common/hash-table_eng.png\" alt=\"Hash Table\"/\u003e\u003c/p\u003e\n\n    -   [Tree](\u003chttps://en.wikipedia.org/wiki/Tree_(data_structure)\u003e)\n        \u003e Structure with a hierarchical model, as a set of related elements, usually not ordered in any way.\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/common/tree.png\" alt=\"Tree\"/\u003e\u003c/p\u003e\n\n    -   [Heap](\u003chttps://en.wikipedia.org/wiki/Heap_(data_structure)\u003e)\n        \u003e Similar to the tree, but in the heap, the items with the largest key is the root node (max-heap). But it may be the other way around, then it is a min heap.\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/common/heap_eng.png\" alt=\"Heap\"/\u003e\u003c/p\u003e\n\n    -   [Graph](\u003chttps://en.wikipedia.org/wiki/Graph_(discrete_mathematics)\u003e)\n        \u003e A structure that is designed to work with a large number of links.\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/common/graph_eng.png\" alt=\"Graph\"/\u003e\u003c/p\u003e\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📺 [**10 Key Data Structures We Use Every Day** – YouTube](https://youtu.be/ouipSd_5ivQ)\n2. 📺 [**CS50 2022 - Lecture about Data Structures** – YouTube](https://youtu.be/X8h4dq9Hzq8)\n3. 📺 [**Data Structures Easy to Advanced Course** – YouTube](https://youtu.be/RBSGKlAvoiM)\n4. 📄 [**Free courses to learn data structures and algorithms in depth** – freeCodeCamp](https://www.freecodecamp.org/news/these-are-the-best-free-courses-to-learn-data-structures-and-algorithms-in-depth-4d52f0d6b35a/)\n5. 📄 [**Data Structures: collection of topics** – GeeksForGeeks](https://www.geeksforgeeks.org/data-structures/)\n6. 📄 [**JavaScript Data Structures and Algorithms** – GitHub](https://github.com/trekhleb/javascript-algorithms)\n7. 📄 [**Go Data Structures** – GitHub](https://github.com/emirpasic/gods)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Basic algorithms\n\n    [Algorithms](https://de.wikipedia.org/wiki/Algorithmus) refer to sets of sequential instructions (steps) that lead to the solution of a given problem. Throughout human history, a huge number of algorithms have been invented to solve certain problems in the most efficient way. Accordingly, the correct choice of algorithms in programming will allow you to create the fastest and most resource-intensive solutions.\n\n    \u003e There is a very good book about algorithms for beginners – [Grokking algorithms](https://edu.anarcho-copy.org/Algorithm/grokking-algorithms-illustrated-programmers-curious.pdf). You can start [learning a programming language](#programming-language) in parallel with reading it.\n\n    -   [Binary search](https://en.wikipedia.org/wiki/Binary_search_algorithm)\n        \u003e Maximum efficient search algorithm for sorted lists.\n    -   [Selection sort](https://en.wikipedia.org/wiki/Selection_sort)\n        \u003e At each step of the algorithm, the minimum element is searched for and then swapped with the current iteration element.\n    -   [Recursion](https://en.wikipedia.org/wiki/Recursion)\n        \u003e When a function can call itself and so on to infinity. On the one hand, recursion-based solutions look very elegant, but on the other hand, this approach quickly leads to stack overflow and is recommended to be avoided.\n    -   [Bubble sort](https://en.wikipedia.org/wiki/Bubble_sort)\n        \u003e At each iteration neighboring elements are sequentially compared, and if the order of the pair is wrong, the elements are swapped.\n    -   [Quicksort](https://en.wikipedia.org/wiki/Quicksort)\n        \u003e Improved bubble sorting method.\n    -   [Breadth-first search](https://en.wikipedia.org/wiki/Breadth-first_search)\n        \u003e Allows to find all shortest paths from a given vertex of the graph.\n    -   [Dijkstra's algorithm](https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm)\n        \u003e Finds the shortest paths between all vertices of a graph and their length.\n    -   [Greedy algorithm](https://en.wikipedia.org/wiki/Greedy_algorithm)\n        \u003e An algorithm that at each step makes locally the best choice in the hope that the final solution will be optimal.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**Code for the book Grokking Algorithms** – GitHub](https://github.com/egonSchiele/grokking_algorithms)\n2. 📺 [**Algorithms and Data Structures Tutorial** – YouTube](https://youtu.be/8hly31xKli0)\n3. 📄 [**Largest open-source algorithm library**](https://the-algorithms.com/)\n4. 📺 [**Sorting Algorithms Explained Visually** – YouTube](https://youtu.be/RfXt_qHDEPw)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Algorithm complexity\n\n    \u003cp align=\"center\"\u003e\u003cimg src=\"./files/common/BigO_eng.png\" alt=\"BigO\"/\u003e\u003c/p\u003e\n\n    In the world of programming there is a special unit of measure [Big O notation](https://en.m.wikipedia.org/wiki/Big_O_notation). It describes how the complexity of an algorithm increases with the amount of input data. Big O estimates how many actions (steps/iterations) it takes to execute the algorithm, while always showing the worst case scenario.\n\n    -   Main types of complexity\n        \u003e -   Constant O(1) – the fastest. \u003cbr\u003e\n        \u003e -   Linear O(n) \u003cbr\u003e\n        \u003e -   Logarithmic O(log n) \u003cbr\u003e\n        \u003e -   Linearimetric O(n \\* log n) \u003cbr\u003e\n        \u003e -   Quadratic O(n^2) \u003cbr\u003e\n        \u003e -   Stepwise O(2^n) \u003cbr\u003e\n        \u003e -   Factorical O(!n) – the slowest. \u003cbr\u003e\n    -   [Time complexity](https://en.wikipedia.org/wiki/Time_complexity)\n        \u003e When you know in advance on which machine the algorithm will be executed, you can measure the execution time of the algorithm. Again, on very good hardware the execution time of the algorithm can be quite acceptable, but the same algorithm on a weaker hardware can run for hundreds of milliseconds or even a few seconds. Such delays will be very sensitive if your application handles user requests over the network.\n    -   [Space complexity](https://en.wikipedia.org/wiki/Space_complexity)\n        \u003e In addition to time, you need to consider how much memory is spent on the work of an algorithm. It is important when you working with limited memory resources.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📄 [**Big O Algorithm Complexity cheatsheet**](https://www.bigocheatsheet.com/)\n2. 📺 [**Big O Notation - Full Course** – YouTube](https://youtu.be/Mo4vesaut8g)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Data storage formats\n\n    Different file formats can be used to store and transfer data over the network. Text files are human-readable, so they are used for configuration files, for example. But transferring data in text formats over the network is not always rational, because they weigh more than their corresponding binary files.\n\n    -   Text formats\n\n        -   [JSON (JavaScript Object Notation)](https://en.wikipedia.org/wiki/JSON)\n            \u003e Represents an object in which data is stored as key-value pairs.\n        -   [XML (eXtensible Markup Language)](https://en.wikipedia.org/wiki/XML)\n            \u003e The format is closer to HTML. Here the data is wrapped in opening and closing tags.\n        -   [YAML (Yet Another Markup Language)](https://en.wikipedia.org/wiki/YAML)\n            \u003e The format is close to markup languages like HTML. Minimalist, because it has no opening or closing tags. Easy to edit.\n        -   [TOML (Tom's Obvious Minimal Language)](https://en.wikipedia.org/wiki/TOML)\n            \u003e A minimal configuration file format that's easy to read due to obvious semantics. TOML is designed to map unambiguously to a hash table. TOML should be easy to parse into data structures in a wide variety of languages.\n\n    -   Binary formats\n        -   [Message Pack](https://msgpack.org/)\n            \u003e Binary analog of JSON. Allows you to pack data 15-20% more efficiently.\n        -   [BSON (Binary JavaScript Object Notation)](https://en.wikipedia.org/wiki/BSON)\n            \u003e It is a superset of JSON, including additionally regular expressions, binary data and dates.\n        -   [ProtoBuf (Protocol Buffers)](https://en.wikipedia.org/wiki/Protocol_Buffers)\n            \u003e Binary alternative to XML text format. Simpler, more compact and faster.\n\n    -   Image formats\n        -   [JPEG (Joint Photographic Experts Group)](https://en.wikipedia.org/wiki/JPEG)\n            \u003e It is best suited for photographs and complex images with a wide range of colors. JPEG images can achieve high compression ratios while maintaining good image quality, but repeated editing and saving can result in loss of image fidelity.\n        -   [PNG (Portable Network Graphics)](https://en.wikipedia.org/wiki/PNG)\n            \u003e It is a lossless compression format that supports transparency. It is commonly used for images with sharp edges, logos, icons, and images that require transparency. PNG images can have a higher file size compared to JPEG, but they retain excellent quality without degradation during repeated saves.\n        -   [GIF (Graphics Interchange Format)](https://en.wikipedia.org/wiki/GIF)\n            \u003e Used for simple animations and low-resolution images with limited colors. It supports transparency and can be animated by displaying a sequence of frames.\n        -   [SVG (Scalable Vector Graphics)](https://en.wikipedia.org/wiki/SVG)\n            \u003e XML-based vector image format defined by mathematical equations rather than pixels. SVG images can be scaled to any size without losing quality and are well-suited for logos, icons, and graphical elements.\n        -   [WebP](https://en.wikipedia.org/wiki/WebP)\n            \u003e Modern image format developed by Google. It supports both lossy and lossless compression, providing good image quality with smaller file sizes compared to JPEG and PNG. WebP images are optimized for web use and can include transparency and animation.\n\n    -   Video formats\n        -   [MP4 (MPEG-4 Part 14)](https://en.wikipedia.org/wiki/MP4_file_format)\n            \u003e Widely used video format that supports high-quality video compression, making it suitable for streaming and storing videos. MP4 files can contain both video and audio.\n        -   [AVI (Audio Video Interleave)](https://en.wikipedia.org/wiki/Audio_Video_Interleave)\n            \u003e Is a multimedia container format developed by Microsoft. It can store audio and video data in a single file, allowing for synchronized playback. However, they tend to have larger file sizes compared to more modern formats.\n        -   [MOV (QuickTime Movie)](https://www.adobe.com/creativecloud/video/hub/guides/what-is-an-mov-video.html)\n            \u003e Is a video format developed by Apple for use with their QuickTime media player. It is widely used with Mac and iOS devices. MOV files can contain both video and audio, and they offer good compression and quality, making them suitable for editing and professional use.\n        -   [WEBM](https://en.wikipedia.org/wiki/WebM)\n            \u003e Best for videos embedded on your personal or business website. It is lightweight, load quickly and stream easily.\n        \n    -   Audio formats\n        -   [MP3 (MPEG-1 Audio Layer 3)](https://en.wikipedia.org/wiki/MP3)\n            \u003e The most popular audio format known for its high compression and small file sizes. It achieves this by removing some of the audio data that may be less perceptible to the human ear. Suitable for music storage, streaming, and sharing.\n        -   [WAV (Waveform Audio File Format)](https://en.wikipedia.org/wiki/WAV)\n            \u003e Is an uncompressed audio format that stores audio data in a lossless manner, resulting in high-quality sound reproduction. WAV files are commonly used in professional audio production and editing due to their accuracy and fidelity. However, they tend to have larger file sizes compared to compressed formats.\n        -   [AAC (Advanced Audio Coding)](https://en.wikipedia.org/wiki/Advanced_Audio_Coding)\n            \u003e Is a widely used audio format known for its efficient compression and good sound quality. It offers better sound reproduction at lower bit rates compared to MP3. AAC files are commonly used for streaming music, online radio, and mobile devices, as they deliver good audio quality while conserving bandwidth and storage.\n\n\u003cdetails\u003e\n    \u003csummary\u003e🔗 \u003cb\u003eReferences\u003c/b\u003e\u003c/summary\u003e\n\n1. 📺 [**Data Formats: XML, JSON, and YAML** – YouTube](https://youtu.be/JQO-x8rzNVI)\n2. 📺 [**Serialization formats: JSON and Protobuf** – YouTube](https://youtu.be/uGYZn6xk-hA)\n3. 📺 [**Protocol Buffers Crash Course** – YouTube](https://youtu.be/46O73On0gyI)\n4. 📺 [**Explaining Image File Formats** – YouTube](https://youtu.be/WblPwVq9KnU)\n5. 📺 [**What's the difference between a JPEG, PNG, GIF, etc...?** – YouTube](https://youtu.be/ww12lImOJ38)\n \u003c/details\u003e\n\n\u003cdiv align=\"right\"\u003e\u003ca href=\"#top\"\u003eContents ⬆️\u003c/a\u003e\u003c/div\u003e\n\n-   ### Text encodings\n\n    Computers work only with numbers, or more precisely, only with 0 and 1. It is already clear how to convert numbers from different number systems to binary. But you can't do that with text. That's why special tables called [encodings](https://en.wikipedia.org/wiki/Ch","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcamerodev%2Fbackend-cheats","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcamerodev%2Fbackend-cheats","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcamerodev%2Fbackend-cheats/lists"}