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 completedTopic-Specific Resources
1. Clean Architecture
Learn about Uncle Bob's layer-based approach to software architecture.
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.
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.
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.
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.
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:
- Find a hyperplane that separates the classes
- Maximize the margin between the support vectors and the hyperplane
- The optimal hyperplane is the one with the largest margin
No notes yet. Click edit to add some.
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.
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:
- Initialize distances of all vertices as infinite and distance of source vertex as 0. Create an empty priority queue.
- Add source vertex to the priority queue.
- While the priority queue is not empty:
- Extract the vertex with the minimum distance from the priority queue.
- For each adjacent vertex of the extracted vertex:
- 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.
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.
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.
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.
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
- Install the extension from the Chrome Web Store
- Click the extension icon to freeze the current page
- Use Chrome DevTools to inspect the frozen state
- Click the extension icon again to unfreeze
No notes yet. Click edit to add some.
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.
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.
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.
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
- Choose a pivot element from the array
- Partition the array around the pivot (elements less than pivot go to the left, elements greater than pivot go to the right)
- 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.
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.
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.
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.
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
- In the upper-right corner of any page, click the + icon, then click "New repository"
- Name your repository "hello-world"
- Write a short description
- Select "Add a README file"
- Click "Create repository"
Step 2: Create a Branch
- Click the "Code" tab of your repository
- Click the dropdown at the top of the file list that says "main"
- Type a branch name, "readme-edits", into the text box
- Click "Create branch: readme-edits from main"
Step 3: Make and Commit Changes
- Click the README.md file
- Click the pencil icon to edit the file
- Write something about yourself in the editor
- In the "Commit changes" box, write a commit message
- Click "Commit changes"
No notes yet. Click edit to add some.
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.
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.
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.
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.
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.
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
- HTML Basics: Learn how to structure web content
- CSS Basics: Learn how to style web pages
- JavaScript Basics: Learn how to add interactivity
- Web Forms: Learn how to create forms for user input
- Accessibility: Learn how to make websites accessible to all users
- Tools and Testing: Learn about developer tools and testing
- Server-side: Learn about server-side programming
No notes yet. Click edit to add some.
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.
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.
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.
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.
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.