Tech Articles – (please note these posts are collated from AmigosCode, Alex Xu and many others. Full copyright to the owners of their material)
1 – O(1) This is the constant time notation. The runtime remains steady regardless of input size. For example, accessing an element in an array by index and inserting/deleting an element in a hash table.
2 – O(n) Linear time notation. The runtime grows in direct proportion to the input size. For example, finding the max or min element in an unsorted array.
3 – O(log n) Logarithmic time notation. The runtime increases slowly as the input grows. For example, a binary search on a sorted array and operations on balanced binary search trees.
4 – O(n^2) Quadratic time notation. The runtime grows exponentially with input size. For example, simple sorting algorithms like bubble sort, insertion sort, and selection sort.
5 – O(n^3) Cubic time notation. The runtime escalates rapidly as the input size increases. For example, multiplying two dense matrices using the naive algorithm.
6 – O(n logn) Linearithmic time notation. This is a blend of linear and logarithmic growth. For example, efficient sorting algorithms like merge sort, quick sort, and heap sort
7 – O(2^n) Exponential time notation. The runtime doubles with each new input element. For example, recursive algorithms solve problems by dividing them into multiple subproblems.
8 – O(n!) Factorial time notation. Runtime skyrockets with input size. For example, permutation-generation problems.
9 – O(sqrt(n)) Square root time notation. Runtime increases relative to the input’s square root. For example, searching within a range such as the Sieve of Eratosthenes for finding all primes up to n.
Step 1: The process starts with a product owner creating user stories based on requirements.
Step 2: The dev team picks up the user stories from the backlog and puts them into a sprint for a two-week dev cycle.
Step 3: The developers commit source code into the code repository Git.
Step 4: A build is triggered in Jenkins. The source code must pass unit tests, code coverage threshold, and gates in SonarQube.
Step 5: Once the build is successful, the build is stored in artifactory. Then the build is deployed into the dev environment.
Step 6: There might be multiple dev teams working on different features. The features need to be tested independently, so they are deployed to QA1 and QA2.
Step 7: The QA team picks up the new QA environments and performs QA testing, regression testing, and performance testing.
Steps 8: Once the QA builds pass the QA team’s verification, they are deployed to the UAT environment.
Step 9: If the UAT testing is successful, the builds become release candidates and will be deployed to the production environment on schedule.
Step 10: SRE (Site Reliability Engineering) team is responsible for prod monitoring.
1 – It all starts with CI/CD pipelines that deploy code to the server instances. Tools like Jenkins and GitHub help over here.
2 – The user requests originate from the web browser. After DNS resolution, the requests reach the app servers. 3 – Load balancers and reverse proxies (such as Nginx & HAProxy) distribute user requests evenly across the web application servers.
4 – The requests can also be served by a Content Delivery Network (CDN).
5 – The web app communicates with backend services via APIs.
6 – The backend services interact with database servers or distributed caches to provide the data.
7 – Resource-intensive and long-running tasks are sent to job workers using a job queue.
8 – The full-text search service supports the search functionality. Tools like Elasticsearch and Apache Solr can help here.
9 – Monitoring tools (such as Sentry, Grafana, and Prometheus) store logs and help analyze data to ensure everything works fine.
10 – In case of issues, alerting services notify developers through platforms like Slack for quick resolution.
How to load your websites at lightning speed? Check out these 8 tips to boost frontend performance:
1 – Compression Compress files and minimize data size before transmission to reduce network load.
2 – Selective Rendering/Windowing Display only visible elements to optimize rendering performance. For example, in a dynamic list, only render visible items.
3 – Modular Architecture with Code Splitting Split a bigger application bundle into multiple smaller bundles for efficient loading.
4 – Priority-Based Loading Prioritize essential resources and visible (or above-the-fold) content for a better user experience.
5 – Pre-loading Fetch resources in advance before they are requested to improve loading speed.
6 – Tree Shaking or Dead Code Removal Optimize the final JS bundle by removing dead code that will never be used.
7 – Pre-fetching Proactively fetch or cache resources that are likely to be needed soon.
8 – Dynamic Imports Load code modules dynamically based on user actions to optimize the initial loading times.
How to load your websites at lightning speed? Check out these 8 tips to boost frontend performance:
1 – Compression Compress files and minimize data size before transmission to reduce network load.
2 – Selective Rendering/Windowing Display only visible elements to optimize rendering performance. For example, in a dynamic list, only render visible items.
3 – Modular Architecture with Code Splitting Split a bigger application bundle into multiple smaller bundles for efficient loading.
4 – Priority-Based Loading Prioritize essential resources and visible (or above-the-fold) content for a better user experience.
5 – Pre-loading Fetch resources in advance before they are requested to improve loading speed.
6 – Tree Shaking or Dead Code Removal Optimize the final JS bundle by removing dead code that will never be used.
7 – Pre-fetching Proactively fetch or cache resources that are likely to be needed soon.
8 – Dynamic Imports Load code modules dynamically based on user actions to optimize the initial loading times.