ICog Preparation Guide

Below is a tightly curated, beginner-friendly reading list—each resource takes less than an hour to grasp the essentials. Work through one or two items per topic per day, and you'll cover the fundamentals in time for your interview.

Your Learning Progress

0 of 30 resources completed

Topic-Specific Resources

1. Clean Architecture

Learn about Uncle Bob's layer-based approach to software architecture.

The Clean Architecture — Beginner's Guide

Walks you through Uncle Bob's layer-based approach with clear diagrams and examples.

Content from The Clean Architecture — Beginner's Guide

The Clean Architecture — Beginner's Guide

Clean Architecture is a software design philosophy that separates the elements of a design into ring levels. The main rule of clean architecture is that code dependencies can only come from the outer levels inward.

The Layers of Clean Architecture

Clean Architecture consists of four main layers:

  • Entities: These are the business objects of your application. They encapsulate the most general and high-level rules.
  • Use Cases: These contain application-specific business rules. They orchestrate the flow of data to and from the entities.
  • Interface Adapters: These convert data from the format most convenient for the use cases and entities, to the format most convenient for some external agency such as the database or the web.
  • Frameworks and Drivers: This is where all the details go. The web framework, database, UI, etc.

The Dependency Rule

The most important rule in Clean Architecture is the Dependency Rule: Source code dependencies can only point inwards. Nothing in an inner circle can know anything at all about something in an outer circle.

Benefits of Clean Architecture

  • Independent of Frameworks: The architecture does not depend on the existence of some library of feature-laden software.
  • Testable: The business rules can be tested without the UI, database, web server, or any other external element.
  • Independent of UI: The UI can change easily, without changing the rest of the system.
  • Independent of Database: You can swap out Oracle or SQL Server for MongoDB, BigTable, or something else.
  • Independent of any external agency: Your business rules don't know anything about the outside world.

No notes yet. Click edit to add some.

The Beginner's Guide to Clean Architecture

Provides a concise video walkthrough of the key layers and dependencies.

Content not available for offline viewing. Please visit the original resource.

No notes yet. Click edit to add some.

2. Overfitting

Understand why models memorize noise and how to detect and prevent it.

Overfitting and Underfitting in Machine Learning

Explains why models memorize noise and how to detect and prevent it with validation techniques.

Content from Overfitting and Underfitting in Machine Learning

Overfitting and Underfitting in Machine Learning

In machine learning, models are trained to make predictions or decisions based on input data. However, these models can sometimes perform poorly due to overfitting or underfitting.

What is Overfitting?

Overfitting occurs when a model learns the training data too well, including its noise and outliers. As a result, the model performs well on the training data but poorly on new, unseen data.

Signs of overfitting include:

  • High accuracy on training data but low accuracy on test data
  • The model is too complex for the problem
  • The model captures noise in the training data

What is Underfitting?

Underfitting occurs when a model is too simple to capture the underlying pattern in the data. It performs poorly on both training and test data.

Signs of underfitting include:

  • Low accuracy on both training and test data
  • The model is too simple for the problem
  • The model fails to capture important patterns in the data

The Bias-Variance Tradeoff

The bias-variance tradeoff is a central problem in supervised learning:

  • High Bias: Leads to underfitting. The model makes strong assumptions about the data.
  • High Variance: Leads to overfitting. The model is too sensitive to variations in the training data.

No notes yet. Click edit to add some.

Overfitting Explained

Offers a hands-on example showing overfit vs. well-generalized models in Python.

Content from Overfitting Explained

Overfitting Explained | Beginners Tutorial

This tutorial provides a practical demonstration of overfitting in machine learning models using Python and scikit-learn.

What is Overfitting?

Overfitting happens when a model learns the training data too well, including its noise and outliers. The model becomes too complex and fails to generalize to new data.

Practical Example

Let's create a simple dataset and demonstrate overfitting with polynomial regression:


            import numpy as np
            import matplotlib.pyplot as plt
            from sklearn.preprocessing import PolynomialFeatures
            from sklearn.linear_model import LinearRegression
            from sklearn.pipeline import Pipeline
            from sklearn.model_selection import train_test_split
            
            # Generate a simple dataset
            np.random.seed(0)
            X = np.sort(np.random.rand(100, 1), axis=0)
            y = np.sin(2 * np.pi * X).ravel() + np.random.normal(0, 0.1, X.shape[0])
            
            # Split the data
            X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
            

No notes yet. Click edit to add some.

3. Support Vector Machines (SVM)

Learn about SVM theory, kernels, and practical classification examples.

Support Vector Machines: A Guide for Beginners

Introduces SVM theory, kernels, and practical classification examples.

Content from Support Vector Machines: A Guide for Beginners

Support Vector Machines: A Guide for Beginners

Support Vector Machines (SVMs) are powerful supervised learning models used for classification and regression tasks. They are particularly effective in high-dimensional spaces and cases where the number of dimensions exceeds the number of samples.

How SVMs Work

The core idea behind SVMs is to find the optimal hyperplane that separates different classes with the maximum margin. The margin is the distance between the hyperplane and the nearest data point from either class, known as support vectors.

For linearly separable data, the algorithm works as follows:

  1. Find a hyperplane that separates the classes
  2. Maximize the margin between the support vectors and the hyperplane
  3. The optimal hyperplane is the one with the largest margin

No notes yet. Click edit to add some.

Tutorial on Support Vector Machine (SVM)

Gives a concise, textbook-style overview ideal for quick review.

Content not available for offline viewing. Please visit the original resource.

No notes yet. Click edit to add some.

4. Shortest-Path Finding Algorithms

Explore Dijkstra's, Bellman–Ford, and other shortest path algorithms.

Shortest Path Algorithms Tutorial

Covers Dijkstra's, Bellman–Ford, and more with step-by-step code snippets and practice problems.

Content from Shortest Path Algorithms Tutorial

Shortest Path Algorithms Tutorial

Shortest path algorithms are used to find the shortest path between two nodes in a graph. These algorithms are fundamental in network routing, GPS navigation, social network analysis, and many other applications.

Dijkstra's Algorithm

Dijkstra's algorithm finds the shortest path from a source node to all other nodes in a graph with non-negative edge weights.

Algorithm Steps:

  1. Initialize distances of all vertices as infinite and distance of source vertex as 0. Create an empty priority queue.
  2. Add source vertex to the priority queue.
  3. While the priority queue is not empty:
    1. Extract the vertex with the minimum distance from the priority queue.
    2. For each adjacent vertex of the extracted vertex:
      1. If the distance to the adjacent vertex through the current vertex is less than its current distance, update its distance and add it to the priority queue.

No notes yet. Click edit to add some.

Graph Theory – Dijkstra's Shortest Path Algorithm Explained

Animates each step of Dijkstra's algorithm, making it easy to remember.

Content not available for offline viewing. Please visit the original resource.

No notes yet. Click edit to add some.

5. Object-Oriented Programming in Java

Learn about classes, inheritance, polymorphism, and interfaces in Java.

Object-Oriented Programming in Java – A Beginner's Guide

Lays out classes, inheritance, polymorphism, and interfaces with Java code examples.

Content from Object-Oriented Programming in Java – A Beginner's Guide

Object-Oriented Programming in Java – A Beginner's Guide

Object-Oriented Programming (OOP) is a programming paradigm based on the concept of "objects", which can contain data and code. The data is in the form of fields (attributes or properties), and the code is in the form of procedures (methods).

Core OOP Concepts

1. Classes and Objects

A class is a blueprint for creating objects. An object is an instance of a class.


            // Class definition
            public class Car {
                // Fields (attributes)
                String color;
                String model;
                int year;
                
                // Method
                public void drive() {
                    System.out.println("Driving the " + color + " " + model);
                }
            }
            
            // Creating objects
            Car myCar = new Car();
            myCar.color = "Red";
            myCar.model = "Tesla";
            myCar.year = 2023;
            myCar.drive(); // Outputs: Driving the Red Tesla
            

2. Encapsulation

Encapsulation is the bundling of data and methods that operate on that data within a single unit (class). It also includes the concept of data hiding.


            public class BankAccount {
                // Private fields
                private double balance;
                private String accountNumber;
                
                // Public methods (getters and setters)
                public double getBalance() {
                    return balance;
                }
                
                public void deposit(double amount) {
                    if (amount > 0) {
                        balance += amount;
                    }
                }
            }
            

No notes yet. Click edit to add some.

Java OOP Tutorial

Provides interactive examples of encapsulation, abstraction, and more.

Content from Java OOP Tutorial

Java OOP Tutorial

Java is an object-oriented programming language. Everything in Java is associated with classes and objects, along with its attributes and methods.

OOP Concepts

  • Object: An entity that has state and behavior
  • Class: A template or blueprint for creating objects
  • Inheritance: When one class acquires the properties of another
  • Polymorphism: The ability to take on many forms
  • Abstraction: Hiding the implementation details and showing only functionality
  • Encapsulation: Binding code and data together as a single unit

Creating Classes and Objects


            // Create a class
            public class Main {
              int x = 5;
            
              public static void main(String[] args) {
                // Create an object of class Main
                Main myObj = new Main();
                System.out.println(myObj.x); // Outputs 5
              }
            }
            

No notes yet. Click edit to add some.

6. DOM Freezing Solution

Learn how to capture and inspect the page state by freezing the DOM.

Freeze DOM

Chrome extension that lets you capture and inspect the page state by freezing the DOM.

Content from Freeze DOM

Freeze DOM - Chrome Extension

Freeze DOM is a Chrome extension that allows you to capture and inspect the page state by freezing the DOM. This is particularly useful for debugging dynamic web pages where elements change rapidly.

Features

  • Freeze the DOM at any point to inspect elements
  • Examine elements that might disappear or change quickly
  • Debug hover states and dynamic content
  • Simple one-click activation

How to Use

  1. Install the extension from the Chrome Web Store
  2. Click the extension icon to freeze the current page
  3. Use Chrome DevTools to inspect the frozen state
  4. Click the extension icon again to unfreeze

No notes yet. Click edit to add some.

Freezing the DOM?

Reddit thread sharing quick DevTools tips to diagnose and fix freeze issues.

Content not available for offline viewing. Please visit the original resource.

No notes yet. Click edit to add some.

7. Use-Case & Sequence Diagrams (ATM System)

Study UML diagrams for ATM systems including use-case and sequence diagrams.

UML Diagrams for ATM System

Presents both use-case and sequence diagrams for common ATM operations like withdraw and transfer.

Content not available for offline viewing. Please visit the original resource.

No notes yet. Click edit to add some.

Bank ATM UML Use-Case Diagram Example

Offers a clean, web-hosted example you can study and adapt.

Content from Bank ATM UML Use-Case Diagram Example

Bank ATM UML Use-Case Diagram Example

This example shows a UML use case diagram for a bank ATM (Automated Teller Machine) system. It illustrates the main functions that a typical ATM should be able to perform.

Primary Actors

  • Bank Customer: The person who uses the ATM to perform banking operations
  • Bank: The financial institution that provides the ATM service
  • Maintenance Technician: The person responsible for maintaining the ATM

Main Use Cases

  • Withdraw Cash: Customer withdraws money from their account
  • Deposit Funds: Customer deposits money into their account
  • Check Balance: Customer checks their account balance
  • Transfer Funds: Customer transfers money between accounts
  • Change PIN: Customer changes their Personal Identification Number

Relationships

  • Include: A relationship where one use case includes the functionality of another use case
  • Extend: A relationship where one use case extends the behavior of another use case

No notes yet. Click edit to add some.

8. Quick Sort

Learn about the Quick Sort algorithm, its implementation and analysis.

Quick Sort Algorithm

Gives the standard partition approach, animated illustrations, and code in multiple languages.

Content from Quick Sort Algorithm

Quick Sort Algorithm

QuickSort is a Divide and Conquer algorithm. It picks an element as a pivot and partitions the array around the pivot.

How QuickSort Works

  1. Choose a pivot element from the array
  2. Partition the array around the pivot (elements less than pivot go to the left, elements greater than pivot go to the right)
  3. Recursively apply the above steps to the sub-arrays

Implementation


            // Java implementation of QuickSort
            class QuickSort {
                // Function to partition the array
                int partition(int arr[], int low, int high) {
                    // Choosing the pivot
                    int pivot = arr[high];
                    
                    // Index of smaller element
                    int i = (low - 1);
                    
                    for (int j = low; j < high; j++) {
                        // If current element is smaller than the pivot
                        if (arr[j] < pivot) {
                            i++;
                            
                            // Swap arr[i] and arr[j]
                            int temp = arr[i];
                            arr[i] = arr[j];
                            arr[j] = temp;
                        }
                    }
                    
                    // Swap arr[i+1] and arr[high] (or pivot)
                    int temp = arr[i + 1];
                    arr[i + 1] = arr[high];
                    arr[high] = temp;
                    
                    return i + 1;
                }
                
                // The main function that implements QuickSort
                void sort(int arr[], int low, int high) {
                    if (low < high) {
                        // pi is partitioning index
                        int pi = partition(arr, low, high);
                        
                        // Recursively sort elements before and after partition
                        sort(arr, low, pi - 1);
                        sort(arr, pi + 1, high);
                    }
                }
            }
            

No notes yet. Click edit to add some.

Learn Quick Sort in 13 Minutes

Walks through pivot selection and recursive partitioning with live coding.

Content not available for offline viewing. Please visit the original resource.

No notes yet. Click edit to add some.

9. APIs

Understand RESTful concepts, HTTP methods, and real-world API examples.

APIs for Beginners

Explains RESTful concepts, HTTP methods, and real-world examples in under 10 minutes.

Content from APIs for Beginners

APIs for Beginners

API stands for Application Programming Interface. It's a set of rules that allows different software applications to communicate with each other.

What is an API?

Think of an API as a waiter in a restaurant. You (the client) give your order to the waiter (the API), who then takes your request to the kitchen (the server). The kitchen prepares your meal and gives it to the waiter, who then brings it back to you.

Types of APIs

  • Web APIs: Accessible over the internet using HTTP
  • REST APIs: Follow REST architectural style (Representational State Transfer)
  • SOAP APIs: Use Simple Object Access Protocol
  • GraphQL APIs: Query language for APIs

HTTP Methods

  • GET: Retrieve data from a server
  • POST: Send data to a server to create a resource
  • PUT: Update an existing resource
  • DELETE: Delete a resource

No notes yet. Click edit to add some.

How to Use an API (Full Course)

A 2-hour deep dive into practical API consumption and testing.

Content not available for offline viewing. Please visit the original resource.

No notes yet. Click edit to add some.

10. Git & GitHub

Learn about version control, repositories, commits, and collaboration workflows.

Hello World Quickstart

Walks you through creating a repo, making commits, and opening a pull request in minutes.

Content from Hello World Quickstart

Hello World Quickstart

This quickstart guide will walk you through creating your first GitHub repository, making a commit, and opening a pull request.

Step 1: Create a Repository

  1. In the upper-right corner of any page, click the + icon, then click "New repository"
  2. Name your repository "hello-world"
  3. Write a short description
  4. Select "Add a README file"
  5. Click "Create repository"

Step 2: Create a Branch

  1. Click the "Code" tab of your repository
  2. Click the dropdown at the top of the file list that says "main"
  3. Type a branch name, "readme-edits", into the text box
  4. Click "Create branch: readme-edits from main"

Step 3: Make and Commit Changes

  1. Click the README.md file
  2. Click the pencil icon to edit the file
  3. Write something about yourself in the editor
  4. In the "Commit changes" box, write a commit message
  5. Click "Commit changes"

No notes yet. Click edit to add some.

Git and GitHub Tutorial for Beginners

Covers basic commands, branching, merging, and collaboration workflows.

Content not available for offline viewing. Please visit the original resource.

No notes yet. Click edit to add some.

General Areas

Database Systems

Learn about ER modeling, normalization, SQL queries, and storage concepts.

DBMS Tutorial

Teaches ER modeling, normalization, SQL queries, and storage concepts with hands-on examples.

Content from DBMS Tutorial

DBMS Tutorial

A Database Management System (DBMS) is a software system that enables users to define, create, maintain, and control access to databases. This tutorial covers the fundamental concepts of database systems.

Introduction to DBMS

A DBMS serves as an interface between the database and its end-users or application programs, ensuring that data is consistently organized and remains easily accessible.

Key Features of DBMS:

  • Data Definition: It allows users to define the database structure and data types.
  • Data Manipulation: It enables users to insert, modify, delete, and retrieve data from the database.
  • Data Security: It provides a system to enforce data security and privacy.
  • Data Integrity: It maintains the consistency and integrity of the data.
  • Data Recovery: It protects data from system failures and crashes.
  • Concurrency Control: It allows simultaneous access to the database by multiple users.

No notes yet. Click edit to add some.

SQL Tutorial

Lets you practice queries in an interactive editor covering SELECT, JOIN, and more.

Content from SQL Tutorial

SQL Tutorial

SQL (Structured Query Language) is a standard language for storing, manipulating, and retrieving data in relational databases.

SQL Syntax


            SELECT column1, column2, ...
            FROM table_name
            WHERE condition;
            

SQL Commands

  • SELECT: Extract data from a database
  • UPDATE: Update data in a database
  • DELETE: Delete data from a database
  • INSERT INTO: Insert new data into a database
  • CREATE DATABASE: Create a new database
  • ALTER DATABASE: Modify a database
  • CREATE TABLE: Create a new table
  • ALTER TABLE: Modify a table
  • DROP TABLE: Delete a table
  • CREATE INDEX: Create an index (search key)
  • DROP INDEX: Delete an index

No notes yet. Click edit to add some.

AI/ML

Explore machine learning concepts, algorithms, and practical applications.

Machine Learning Crash Course

A free, 15-hour self-study series with videos, visualizations, and exercises on core ML concepts.

Content from Machine Learning Crash Course

Machine Learning Crash Course

Google's Machine Learning Crash Course is a self-study guide for aspiring machine learning practitioners. It features a series of lessons with video lectures, real-world case studies, and hands-on practice exercises.

Course Content

  • ML Concepts: Learn the fundamental concepts of machine learning
  • TensorFlow API: Get hands-on experience with TensorFlow
  • Feature Engineering: Understand how to transform raw data into useful features
  • Neural Networks: Learn about the architecture and training of neural networks
  • Fairness in ML: Explore the ethical considerations in machine learning

Prerequisites

  • Basic knowledge of Python programming
  • Basic understanding of linear algebra and statistics

No notes yet. Click edit to add some.

The Lifewire Guide to Online Free AI Courses

Curates top free courses from Google, IBM, Harvard, and Andrew Ng for every skill level.

Content not available for offline viewing. Please visit the original resource.

No notes yet. Click edit to add some.

Web Development

Learn about HTML/CSS basics, front-end frameworks, and full-stack development.

Learn Web Development

Mozilla's structured, up-to-date path from HTML/CSS basics to advanced front-end tooling.

Content from Learn Web Development

Learn Web Development

Welcome to the MDN learning area. This set of articles aims to provide complete beginners to web development with all they need to start coding websites.

Getting Started

Web development is the process of creating websites or web applications. It involves several technologies and skills:

  • HTML: The structure of web content
  • CSS: The styling and layout of web pages
  • JavaScript: The programming language of the web
  • Server-side languages: Like Node.js, Python, PHP, etc.
  • Databases: For storing and retrieving data

Learning Path

  1. HTML Basics: Learn how to structure web content
  2. CSS Basics: Learn how to style web pages
  3. JavaScript Basics: Learn how to add interactivity
  4. Web Forms: Learn how to create forms for user input
  5. Accessibility: Learn how to make websites accessible to all users
  6. Tools and Testing: Learn about developer tools and testing
  7. Server-side: Learn about server-side programming

No notes yet. Click edit to add some.

Learn Web Development Free Full-Stack Courses

Outlines their hands-on, project-based curriculum from responsive design to APIs.

Content not available for offline viewing. Please visit the original resource.

No notes yet. Click edit to add some.

Data Structures & Algorithms (DSA)

Study graph algorithms, sorting techniques, and other fundamental DSA topics.

Graph & Shortest-Path Algorithms

For end-to-end graph coverage and coding practice.

Content not available for offline viewing. Please visit the original resource.

No notes yet. Click edit to add some.

Quick Sort & Other Sorting

For divide-and-conquer, greedy, and recursive DSA topics.

Content not available for offline viewing. Please visit the original resource.

No notes yet. Click edit to add some.

Software Design

Learn about SOLID principles and other software design concepts.

SOLID Principles in Programming

Covers SRP, OCP, LSP, ISP, and DIP with real-world analogies and code samples.

Content from SOLID Principles in Programming

SOLID Principles in Programming

SOLID is an acronym for five design principles intended to make software designs more understandable, flexible, and maintainable.

S - Single Responsibility Principle (SRP)

A class should have only one reason to change, meaning it should have only one job or responsibility.


            // Bad example - multiple responsibilities
            class User {
                void createUser() { /* ... */ }
                void saveUser() { /* ... */ }
                void sendEmail() { /* ... */ }
                void generateReport() { /* ... */ }
            }
            
            // Good example - single responsibility
            class User {
                void createUser() { /* ... */ }
                void saveUser() { /* ... */ }
            }
            
            class EmailService {
                void sendEmail() { /* ... */ }
            }
            
            class ReportGenerator {
                void generateReport() { /* ... */ }
            }
            

O - Open/Closed Principle (OCP)

Software entities should be open for extension but closed for modification.


            // Bad example
            class Rectangle {
                double width;
                double height;
            }
            
            class AreaCalculator {
                double calculateArea(Rectangle rectangle) {
                    return rectangle.width * rectangle.height;
                }
                
                // If we want to add a circle, we need to modify this class
            }
            
            // Good example
            interface Shape {
                double calculateArea();
            }
            
            class Rectangle implements Shape {
                double width;
                double height;
                
                double calculateArea() {
                    return width * height;
                }
            }
            
            class Circle implements Shape {
                double radius;
                
                double calculateArea() {
                    return Math.PI * radius * radius;
                }
            }
            

No notes yet. Click edit to add some.

SOLID

Provides a concise, authoritative overview of each principle's origin and importance.

Content not available for offline viewing. Please visit the original resource.

No notes yet. Click edit to add some.