logo Online Learner
  • Home
  • Learning Paths
  • Notes
  • Free Resume Builder
  • Portfolio
  • About Us
  • Contact Us
  • Login
  • Sign Up
  1. Learning Paths
  2. Java Interview Questions
  3. What is the Record Class in Java 14/17?

What is the Record Class in Java 14/17?

Records are immutable data carriers that provide a concise way to create classes that are simple data aggregates. Introduced in Java 14 as preview, finalized in Java 16/17.

Record Basics

// Before Records (verbose - ~40 lines)
class PersonOld {
    private final String name;
    private final int age;
    
    public PersonOld(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String name() { return name; }
    public int age() { return age; }
    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        PersonOld person = (PersonOld) o;
        return age == person.age && Objects.equals(name, person.name);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
    
    @Override
    public String toString() {
        return "PersonOld[name=" + name + ", age=" + age + "]";
    }
}

// With Records (concise - 1 line!)
record Person(String name, int age) {}

// A record is equivalent to a final class with:
// - Private final fields for each component
// - Canonical constructor
// - Public accessor methods (name(), age())
// - equals(), hashCode(), toString()

public class RecordBasics {
    public static void main(String[] args) {
        Person person1 = new Person("Alice", 25);
        Person person2 = new Person("Alice", 25);
        Person person3 = new Person("Bob", 30);
        
        System.out.println(person1);                    // Person[name=Alice, age=25]
        System.out.println("Name: " + person1.name());  // Accessor (NOT getter)
        System.out.println("Age: " + person1.age());
        System.out.println("Equals: " + person1.equals(person2));  // true
        System.out.println("Same object? " + (person1 == person2)); // false
        System.out.println("HashCode: " + person1.hashCode());
        
        // Records are final - cannot extend
        // class ExtendedPerson extends Person { } // ERROR
        
        // Records can implement interfaces
        // record NamedPerson(String name) implements Serializable {}
        
        // Records are immutable - cannot change fields
        // person1.name = "Bob"; // ERROR - final fields
        // person1.age = 30; // ERROR - final fields
        
        // To "change" a record, create a new one with modified values
        Person older = new Person(person1.name(), person1.age() + 1);
        System.out.println("Older: " + older);
    }
}

Customizing Records

import java.util.*;

// 1. Compact constructor (validation/normalization)
record Employee(String name, int id, double salary) {
    // Compact constructor - automatically invoked before field assignment
    public Employee {
        // Validation
        if (name == null || name.isBlank()) {
            throw new IllegalArgumentException("Name cannot be blank");
        }
        if (id <= 0) {
            throw new IllegalArgumentException("ID must be positive");
        }
        if (salary < 0) {
            throw new IllegalArgumentException("Salary cannot be negative");
        }
        
        // Normalization
        name = name.trim();
        if (salary == 0) {
            salary = 30000; // Minimum salary
        }
        // Fields are automatically assigned
    }
    
    // 2. Additional constructor
    public Employee(String name, int id) {
        this(name, id, 30000); // Default salary
    }
    
    // 3. Custom methods
    public double annualSalary() {
        return salary * 12;
    }
    
    public String greeting() {
        return "Hello, I'm " + name + " (ID: " + id + ")";
    }
    
    // 4. Override accessor (rare)
    @Override
    public String name() {
        return name.toUpperCase();
    }
    
    // 5. Static fields and methods
    static String company = "Tech Corp";
    static void setCompany(String c) { company = c; }
}

// 2. Record with generics
record Pair(K key, V value) {
    public Pair {
        Objects.requireNonNull(key);
        Objects.requireNonNull(value);
    }
    
    public Pair(K key) {
        this(key, null);
    }
    
    @Override
    public String toString() {
        return key + "=" + value;
    }
}

// 3. Record with annotations
record User(
    @NotNull String username,
    @Email String email,
    @Min(18) int age
) {}

// 4. Local record (inside method)
public class RecordCustomization {
    public static void main(String[] args) {
        System.out.println("=== Record Customization ===
");
        
        // Using custom constructors
        Employee emp1 = new Employee("  Alice  ", 101, 50000);
        Employee emp2 = new Employee("Bob", 102);  // Default salary
        Employee emp3 = new Employee("Charlie", 103, 0); // Min salary applied
        
        System.out.println(emp1);
        System.out.println("Annual salary: $" + emp1.annualSalary());
        System.out.println(emp1.greeting());
        System.out.println("Name (overridden): " + emp1.name()); // UPPERCASE
        
        System.out.println("
" + emp2);
        System.out.println(emp3);
        
        // Generic record
        Pair pair1 = new Pair<>("Age", 25);
        Pair pair2 = new Pair<>("Count");  // Value null
        System.out.println("
" + pair1);
        System.out.println(pair2);
        
        // Local record (inside method)
        record Point(double x, double y) {
            double distanceFromOrigin() {
                return Math.sqrt(x * x + y * y);
            }
            
            Point add(Point other) {
                return new Point(x + other.x, y + other.y);
            }
        }
        
        Point p1 = new Point(3, 4);
        Point p2 = new Point(1, 2);
        Point p3 = p1.add(p2);
        
        System.out.println("
Point distance: " + p1.distanceFromOrigin());
        System.out.println("p1 + p2 = " + p3);
        
        // Records in collections
        List users = List.of(
            new User("john_doe", "john@example.com", 25),
            new User("jane_smith", "jane@example.com", 30)
        );
        
        System.out.println("
Users:");
        users.forEach(System.out::println);
    }
}

Records vs Traditional Classes

import java.util.*;
import java.util.stream.*;

public class RecordsVsClasses {
    
    // Traditional mutable class (not recommended for data)
    static class MutablePerson {
        private String name;
        private int age;
        
        MutablePerson(String name, int age) {
            this.name = name;
            this.age = age;
        }
        
        void setName(String name) { this.name = name; }
        void setAge(int age) { this.age = age; }
        String getName() { return name; }
        int getAge() { return age; }
        
        @Override
        public String toString() {
            return name + "(" + age + ")";
        }
    }
    
    // Record (immutable by design)
    record ImmutablePerson(String name, int age) {}
    
    public static void main(String[] args) {
        System.out.println("=== Records vs Traditional Classes ===
");
        
        // Mutable - can be changed (may cause bugs)
        MutablePerson mPerson = new MutablePerson("Alice", 25);
        System.out.println("Mutable: " + mPerson);
        mPerson.setName("Bob");  // Changed! Could be unintended
        System.out.println("After mutation: " + mPerson);
        
        // Immutable - cannot change
        ImmutablePerson iPerson = new ImmutablePerson("Alice", 25);
        System.out.println("
Immutable: " + iPerson);
        // iPerson.name = "Bob"; // No such field - immutable
        
        // To change, create new record
        ImmutablePerson updated = new ImmutablePerson("Bob", iPerson.age());
        System.out.println("Updated: " + updated);
        
        // Use cases for records
        System.out.println("
=== Use Cases for Records ===");
        System.out.println("✓ Data Transfer Objects (DTOs)");
        System.out.println("✓ Value objects");
        System.out.println("✓ Keys in maps (immutable)");
        System.out.println("✓ Multiple return values from methods");
        System.out.println("✓ Tuple-like structures");
        System.out.println("✓ Configuration objects");
        System.out.println("✓ Event/Message objects");
        
        // Map with record as key
        System.out.println("
=== Record as Map Key ===");
        Map employeeMap = new HashMap<>();
        employeeMap.put(new ImmutablePerson("Alice", 25), "Developer");
        employeeMap.put(new ImmutablePerson("Bob", 30), "Manager");
        employeeMap.put(new ImmutablePerson("Charlie", 35), "Architect");
        
        System.out.println("Alice: " + employeeMap.get(new ImmutablePerson("Alice", 25)));
        
        // Multiple return values
        System.out.println("
=== Multiple Return Values ===");
        var result = divideAndRemainder(10, 3);
        System.out.println("10 / 3 = " + result.quotient() + " remainder " + result.remainder());
        
        // Stream operations with records
        System.out.println("
=== Stream Operations ===");
        List people = List.of(
            new ImmutablePerson("Alice", 25),
            new ImmutablePerson("Bob", 30),
            new ImmutablePerson("Charlie", 25),
            new ImmutablePerson("David", 35),
            new ImmutablePerson("Eve", 28)
        );
        
        // Group by age
        Map> byAge = people.stream()
            .collect(Collectors.groupingBy(ImmutablePerson::age));
        System.out.println("Group by age: " + byAge);
        
        // Filter and map
        List namesOver28 = people.stream()
            .filter(p -> p.age() > 28)
            .map(ImmutablePerson::name)
            .collect(Collectors.toList());
        System.out.println("Names over 28: " + namesOver28);
    }
    
    static DivResult divideAndRemainder(int a, int b) {
        return new DivResult(a / b, a % b);
    }
    
    record DivResult(int quotient, int remainder) {}
}

Records in Advanced Scenarios

import java.io.*;
import java.time.*;
import java.util.stream.*;

// 1. Serializable Record
record SerializablePerson(String name, int age) implements Serializable {
    // Records are automatically serializable if components are serializable
    private static final long serialVersionUID = 1L;
}

// 2. Record with defensive copying for collections
record Order(String id, List items) {
    // Defensive copy in compact constructor
    public Order {
        // Create immutable copy to prevent external modification
        items = List.copyOf(items);
    }
    
    public List getItems() {
        return items; // Already immutable
    }
}

// 3. Record implementing interface
interface HasName {
    String name();
    String fullName();
}

record Student(String firstName, String lastName, int grade) implements HasName {
    @Override
    public String name() {
        return firstName;
    }
    
    @Override
    public String fullName() {
        return firstName + " " + lastName;
    }
}

// 4. Nested Records
record Company(String name, Address address) {
    record Address(String street, String city, String zipCode, String country) {
        public String fullAddress() {
            return street + ", " + city + ", " + zipCode + ", " + country;
        }
    }
}

// 5. Record with LocalDate
record Event(String name, LocalDate date, EventType type) {
    enum EventType { CONFERENCE, WORKSHOP, MEETUP }
    
    public boolean isUpcoming() {
        return date.isAfter(LocalDate.now());
    }
}

public class AdvancedRecords {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        System.out.println("=== Advanced Record Usage ===
");
        
        // 1. Serialization
        System.out.println("1. Record Serialization:");
        SerializablePerson person = new SerializablePerson("Alice", 25);
        
        // Serialize
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(person);
        
        // Deserialize
        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
        SerializablePerson deserialized = (SerializablePerson) ois.readObject();
        System.out.println("  Deserialized: " + deserialized);
        System.out.println("  Same object? " + (person.equals(deserialized)));
        
        // 2. Defensive copying
        System.out.println("
2. Defensive Copying:");
        List items = new ArrayList<>();
        items.add("Item1");
        items.add("Item2");
        
        Order order = new Order("ORD-001", items);
        System.out.println("  Order: " + order);
        
        // Trying to modify original list doesn't affect the record
        items.add("Item3");
        System.out.println("  Modified original list: " + items);
        System.out.println("  Order unchanged: " + order);
        
        // 3. Interface implementation
        System.out.println("
3. Interface Implementation:");
        Student student = new Student("John", "Doe", 12);
        System.out.println("  Name: " + student.name());
        System.out.println("  Full name: " + student.fullName());
        
        // 4. Nested records
        System.out.println("
4. Nested Records:");
        Company.Address address = new Company.Address(
            "123 Main St", "New York", "10001", "USA"
        );
        Company company = new Company("Tech Corp", address);
        System.out.println("  Company: " + company);
        System.out.println("  Full address: " + company.address().fullAddress());
        
        // 5. Pattern matching with records (Java 17+ preview)
        System.out.println("
5. Pattern Matching (requires preview):");
        Object obj = new Student("Alice", "Smith", 10);
        
        // Traditional instanceof
        if (obj instanceof Student) {
            Student s = (Student) obj;
            System.out.println("  Traditional: " + s.firstName());
        }
        
        // Pattern matching (Java 16+)
        // if (obj instanceof Student(String firstName, String lastName, int grade)) {
        //     System.out.println("  Pattern matching: " + firstName);
        // }
        
        // 6. Records in streams
        System.out.println("
6. Records in Streams:");
        List events = List.of(
            new Event("Java Conference", LocalDate.of(2024, 6, 15), Event.EventType.CONFERENCE),
            new Event("Spring Workshop", LocalDate.of(2024, 7, 20), Event.EventType.WORKSHOP),
            new Event("Meetup", LocalDate.of(2024, 8, 10), Event.EventType.MEETUP)
        );
        
        events.stream()
            .filter(Event::isUpcoming)
            .forEach(e -> System.out.println("  Upcoming: " + e));
    }
}

When to Use Records - Best Practices

public class RecordsBestPractices {
    
    // GOOD: Simple data carrier
    record Point(int x, int y) {}
    
    // GOOD: Value object
    record Money(String currency, BigDecimal amount) {
        public Money add(Money other) {
            if (!currency.equals(other.currency)) {
                throw new IllegalArgumentException("Currency mismatch");
            }
            return new Money(currency, amount.add(other.amount));
        }
    }
    
    // GOOD: DTO for API
    record UserDTO(Long id, String name, String email, LocalDateTime createdAt) {}
    
    // GOOD: Key in cache
    record CacheKey(String userId, String resourceType) {}
    
    // BAD: Complex behavior (use class instead)
    // record BankAccount(String number, double balance) {
    //     void transfer(double amount) { ... }  // Behavior in record - not ideal
    // }
    
    // GOOD: Simple operations are fine
    record Temperature(double celsius) {
        public double toFahrenheit() {
            return celsius * 9/5 + 32;
        }
        
        public double toKelvin() {
            return celsius + 273.15;
        }
    }
    
    // BAD: Mutable component without defensive copying
    // record Cache(String key, List values) {
    //     // List is mutable if not copied
    // }
    
    // GOOD: Proper defensive copying
    record SafeCache(String key, List values) {
        public SafeCache {
            values = List.copyOf(values);  // Immutable copy
        }
    }
    
    // BAD: Extending record (impossible)
    // class MyPoint extends Point { }  // ERROR - records are final
    
    // GOOD: Records as keys in maps
    record GeoLocation(double lat, double lon) {
        public GeoLocation {
            if (lat < -90 || lat > 90) throw new IllegalArgumentException("Invalid latitude");
            if (lon < -180 || lon > 180) throw new IllegalArgumentException("Invalid longitude");
        }
    }
    
    public static void main(String[] args) {
        System.out.println("=== When to Use Records - Best Practices ===
");
        
        System.out.println("IDEAL USE CASES:");
        System.out.println("✓ Data transfer between layers (DTOs)");
        System.out.println("✓ Temporary grouping of values");
        System.out.println("✓ Multiple return values from methods");
        System.out.println("✓ Keys in maps (immutable + proper equals/hashCode)");
        System.out.println("✓ Value objects in domain modeling");
        System.out.println("✓ Configuration/property objects");
        System.out.println("✓ Event/message objects");
        System.out.println("✓ Result objects from computations");
        
        System.out.println("
NOT IDEAL FOR:");
        System.out.println("✗ Objects with complex state that changes");
        System.out.println("✗ Objects that need to be mutated frequently");
        System.out.println("✗ JPA entities (requires mutable fields)");
        System.out.println("✗ Large inheritance hierarchies (records are final)");
        System.out.println("✗ Objects with many fields (records are best for 2-5 components)");
        System.out.println("✗ When you need lazy initialization");
        System.out.println("✗ When you need to control serialization format");
        
        System.out.println("
=== Performance Considerations ===");
        System.out.println("Records are generally as fast as regular classes");
        System.out.println("- Field access: same performance as final fields");
        System.out.println("- equals/hashCode: optimized by compiler");
        System.out.println("- Memory: similar to regular objects");
        
        // Example usage
        System.out.println("
=== Example: Temperature Conversion ===");
        Temperature temp = new Temperature(25.0);
        System.out.println("25°C = " + temp.toFahrenheit() + "°F");
        System.out.println("25°C = " + temp.toKelvin() + "K");
        
        System.out.println("
=== Example: Money Operations ===");
        Money m1 = new Money("USD", new BigDecimal("10.50"));
        Money m2 = new Money("USD", new BigDecimal("5.25"));
        Money total = m1.add(m2);
        System.out.println(m1.amount() + " + " + m2.amount() + " = " + total.amount());
        
        System.out.println("
=== Example: GeoLocation Validation ===");
        try {
            GeoLocation loc = new GeoLocation(100, 200); // Invalid
        } catch (IllegalArgumentException e) {
            System.out.println("Validation works: " + e.getMessage());
        }
    }
}

Master Java Records with Online Learner!



X (Twitter)
0 likes
Your Feedback

Help us improve by sharing your thoughts

IT and Digital Marketing
keyboard_arrow_left Previous: What are the Key Features of Java 17 (LTS)?
Online Learner Logo

Online Learner helps developers master programming, database concepts, interview preparation, and real-world implementation through structured learning paths.

Quick Links

  • Frontend Development
  • Backend Development
  • Learning Paths
  • Notes
  • Free Resume Builder
  • Portfolio

Company

  • About Us
  • Contact Us
  • Terms & Conditions
  • Disclaimer

© 2023 - 2026 OnlineLearner.in | All Rights Reserved.

logo
  • code Frontend
  • storage Backend
  • live_help Interviews
  • work_outline PHP Frameworks
  • settings Routine Use
  • book Blogs
Frontend
  • HTML Tutorial
    • HTML Introduction
    • HTML Tags
    • HTML Elements
    • HTML Attributes
    • HTML Heading
    • HTML Paragraph
    • HTML Formatting
    • HTML Quotations
    • HTML Comments
    • HTML Styles
    • HTML Color
    • HTML CSS
    • HTML Images
    • HTML Favicon
    • HTML Links
    • HTML DIV
    • HTML Tables
    • HTML Table Size
    • HTML Table Head
    • Table Padding & Spa...
    • Table colspan rowspsn
    • HTML Table Styling
    • HTML Colgroup
    • HTML List
    • HTML Block & Inline
    • HTML Classes
    • HTML Id
    • HTML Iframes
    • HTML Head
    • HTML Layout
    • HTML Semantic Elements
    • HTML Style Guide
    • HTML Forms
    • HTML Form Attribute
    • HTML Form Element
    • HTML input type
    • HTML Computer code
    • HTML Entity
    • HTML Symbol
    • HTML Emojis
    • HTML Charset
    • HTML Input Form Att...
    • HTML URL Encoding
  • CSS Tutorial
    • CSS Introduction
    • CSS Syntax
    • CSS Selector
    • How To Add CSS
    • CSS Comments
    • CSS Colors
    • CSS Background color
    • CSS background-image
    • CSS Borders
    • CSS Margins
    • CSS Height, Width a...
    • CSS Box Model
    • CSS Outline
    • CSS Text
    • CSS Fonts
    • CSS Icon
    • CSS Links
    • CSS Tables
    • CSS Display
    • CSS Maximum Width
    • CSS Position
    • z-index Property
  • JavaScript Tutorial
    • What is JavaScript
    • JS Syntax
    • JS Variables
    • JS Data Types
    • JS Operators
    • JS Control Flow - IF
    • JS Control Flow - S...
    • JS Control Flow - Loop
    • JS Function
    • JS Object Methods
    • JS Anonymous Funct...
    • JS Recursive Function
    • JS Default Parameters
    • JS this Keyword
    • What is an Array in...
    • What are JavaScript...
    • Error Handling in J...
    • DOM Selection in Ja...
    • DOM Traversal in Ja...
    • Manipulating Elemen...
    • Event Handling in J...
    • JavaScript Event Li...
    • JavaScript Event Pr...
    • Form Handling in Ja...
    • Dynamic Styling in ...
    • JavaScript DOM Elem...
    • Window Object in Ja...
    • What is Local Storage?
    • Regular Expressions...
  • Jquery Tutorial
    • What is jQuery?
    • Benefits of using j...
    • Include jQuery
    • Selectors.
    • Methods.
    • The $ symbol and sh...
    • Selecting elements
    • Getting and setting...
    • Adding and removing...
    • Modifying CSS and c...
    • Binding and Unbindi...
    • Common events: clic...
    • Event delegation
    • Using .on() for dyn...
    • Showing and hiding ...
    • Fading elements in ...
    • Sliding elements up...
    • .animate()
    • Understanding AJAX
    • .ajax()
    • .load(), .get(), .p...
    • Handling responses ...
    • Parent
    • Chlid
    • Siblings
    • Filtering Elements
    • Using find
    • Selecting form elem...
    • Getting form values
    • Setting form values
    • Form validation
    • Handling form submi...
    • jQuery plugins
    • Sliders plugins
    • $.each()
    • $.trim()
    • $.extend()
    • Data attributes
    • Debugging jQuery code
  • Bootstrap 4
    • What is Bootstrap
    • Benefits of using
    • Setting up
    • Container
    • Row and Column
    • Grid Classes
    • Breakpoints
    • Offsetting Columns
    • Column Ordering
    • Basic Typography
    • Text Alignment
    • Text colors
    • Backgrounds
    • Display
    • Font Size Utilities
    • Buttons
    • Navs and Navbar
    • Forms
    • Cards
    • Alerts
    • Badges
    • Progress Bars
    • Margin
    • Padding
    • Sizing
    • Flexbox
    • Dropdowns
    • Modals
    • Tooltips
    • Popovers
    • Collapse
    • Carousel
    • Images
    • Tables
    • Jumbotron
    • Media Object
  • Git
    • Understanding Versi...
    • Download and Instal...
    • Git Configure
    • Git Initialize
    • Add Changes to Staging
    • Commit Changes
    • Branching
    • Merging
    • Remote Repository
    • Understanding Git C...
    • Stashing Changes
    • Viewing Commit History
    • Undoing Changes
  • Ajax Tutorial
    • Ajax Fundamentals
    • Ajax Working
    • XMLHttpRequest Fetch
    • Synchronous vs Asyn...
    • Ajax Advantages
    • Ajax Disadvantages
    • $.ajax() method
    • Ajax GET request
    • Ajax POST Request
    • Json Response
    • Ajax Errors
    • Ajax Form
  • React Tutorial
    • What is React? Begi...
    • React Environment S...
    • React Fundamentals:...
    • Functional vs Class...
    • Props in React Expl...
    • State and setState ...
    • React Event Handling
    • React Conditional R...
    • React Lists and Keys
    • Styling in React In...
    • Styling in React Us...
    • Styling in React Us...
    • Tailwind CSS with R...
    • Tailwind vs CSS Mod...
    • React Hooks
    • React useState Hook
    • React useEffect Hook
    • React useRef Hook
    • React useContext Hook
    • React useReducer Hook
    • Custom Hooks in React
    • React Router – In...
    • Installing React Ro...
    • React Router – Ro...
    • React Router – Ne...
    • React Router URL Pa...
    • React Router Protec...
    • React Router Redire...
    • State Management in...
    • Redux State Managem...
    • Redux Toolkit Expla...
    • Redux Toolkit vs Re...
    • Controlled vs Uncon...
    • Handling Form Input...
    • API Integration in ...
    • Axios in React – ...
    • Handling Loading an...
    • Async Await in Java...
    • Displaying API Data...
    • CRUD Operations in ...
    • React Performance O...
    • React Performance O...
  • Tailwind
    • Introduction to Tai...
    • Utility-First CSS E...
    • Tailwind CSS vs Boo...
    • When and Why to Use...
    • Real-World Use Case...
    • Tailwind CSS Instal...
    • Installing Tailwind...
    • Tailwind CSS with V...
    • Setting Up Tailwind...
    • Install Tailwind CS...
    • Tailwind CSS Colors...
    • Tailwind CSS Backgr...
    • Tailwind CSS Paddin...
    • Tailwind CSS Margin...
    • Tailwind CSS Width ...
    • Tailwind CSS Height...
    • Tailwind CSS Border...
    • Tailwind CSS Border...
    • Tailwind CSS Text S...
    • Tailwind CSS Box Sh...
    • Tailwind CSS Opacit...
    • Tailwind CSS Cursor...
    • Tailwind CSS Overfl...
    • Tailwind CSS Font S...
    • Tailwind CSS Font W...
    • Tailwind CSS Text A...
    • Tailwind CSS Line H...
    • Tailwind CSS Letter...
    • Tailwind CSS Text T...
    • How to Use Google F...
    • Flexbox with Tailwi...
    • Justify Content in ...
    • Align Items in Tail...
    • Flex Direction in T...
    • Gap in Tailwind CSS...
    • Flexbox with Tailwi...
    • Grid System in Tail...
    • Grid System in Tail...
    • Responsive Design i...
    • Positioning & Z-Ind...
    • Background Colors i...
    • Background Images i...
    • Gradients in Tailwi...
    • Image Object-Fit in...
    • Image Overlay Effec...
    • Buttons in Tailwind...
    • Hover & Focus State...
    • Buttons and Forms i...
    • Cards and Sections ...
    • Navbar and Footer D...
Backend
  • PHP Tutorial
    • PHP Introduction
    • PHP Installation
    • PHP Syntax
    • PHP Comments
    • PHP Variable
    • PHP Echo
    • PHP Data Types
    • PHP Strings
    • PHP Constant
    • PHP Maths
    • PHP Number
    • PHP Operators
    • PHP if else & if el...
    • PHP Switch
    • PHP Loops
    • PHP Functions
    • PHP Array
    • PHP OOps
    • PHP Class & Object
    • PHP Constructor
    • PHP Destructor
    • PHP Access Modfiers
    • PHP Inheritance
    • PHP Final Keyword
    • PHP Class Constant
    • PHP Abstract Class
    • PHP Superglobals
    • PHP Regular Expression
    • PHP Interfaces
    • PHP Static Method
    • PHP Static Properties
    • PHP Namespace
    • PHP Iterable
    • PHP Form Introduction
    • PHP Form Validation
    • PHP Complete Form
    • PHP Date and Time
    • PHP Include Files
    • PHP - Files & I/O
    • File Upload
    • PHP Cookies
    • PHP SESSION
    • PHP Filters
    • PHP Callback Functions
    • PHP JSON
    • PHP AND Exceptions
    • PHP Connect database
  • PHP Functions
    • strlen
    • strtoupper
    • strtolower
    • ucfirst
    • ucwords
    • substr
    • str_replace
    • strpos
    • trim in php
    • explode
    • implode
    • count in php
    • array_merge
    • array_push
    • array_pop
    • array_shift
    • array_unshift
    • in_array
    • array_keys
    • array_values
    • array_filter
    • array_map
    • sort
    • asort
    • ksort
    • abs
    • round
    • ceil
    • floor
    • rand
    • mt_rand
    • max
    • min
    • pow
    • sqrt
    • date
    • time
    • strtotime
    • mktime
    • date_diff
    • getdate
    • fopen
    • fread
    • fwrite
    • fclose
    • file_get_contents
    • file_put_contents
    • file_exists
    • unlink
    • filesize
    • is_readable
    • is_writable
    • urlencode
    • urldecode
    • parse_url
    • http_build_query
    • isset
    • empty
    • is_numeric
    • is_array
    • is_string
    • filter_var
    • htmlspecialchars
    • md5
    • sha1
    • password_hash
    • password_verify
    • die
    • exit
    • var_dump
    • print_r
    • include
    • require
    • json_encode
    • json_decode
    • sleep
  • PHP and MySQL Functions
    • mysqli_connect
    • mysqli_select_db
    • mysqli_query
    • mysqli_prepare
    • mysqli_stmt_execute
    • mysqli_multi_query
    • mysqli_fetch_assoc
    • mysqli_fetch_array
    • mysqli_fetch_row
    • mysqli_fetch_object
    • mysqli_num_rows
    • mysqli_real_escape_...
    • mysqli_insert_id
    • mysqli_affected_rows
    • mysqli_error
    • mysqli_close
    • mysqli_commit
    • mysqli_rollback
  • Python Tutorial
    • What is Python?
    • Install Python on W...
    • Install Python on L...
    • Install Python on m...
    • IDE Setup
    • Python syntax
    • Python Comments
    • Python Indentation
    • Python Variables
    • Python Data Types
    • Python Numeric
    • Python Boolean
    • Python String
    • Python List
    • Python Tuple
    • Python Range
    • Python Dictionary
    • Python Arithmetic O...
    • Python Assignment O...
    • Python Comparison O...
    • Python Logical Oper...
    • Python Bitwise Oper...
    • Python if condition
    • Python if else cond...
    • Python For Loop
    • Python While Loop
    • Python break, conti...
  • MYSQL
    • SQL Introduction
    • Syntax
    • Select statement
    • Select Distinct
    • WHERE Clause
    • Order By
    • SQL AND Operator
    • SQL OR Operator
    • SQL NOT Operator
    • SQL LIKE
    • SQL IN
    • SQL BETWEEN
    • SQL INSERT INTO
    • SQL NULL Values
    • SQL UPDATE
    • SQL DELETE
    • SQL TOP, LIMIT, FET...
    • SQL MIN() and MAX()...
    • SQL COUNT() Function
    • SQL SUM()
    • SQL AVG()
    • SQL Aliases
    • SQL JOIN
    • SQL INNER JOIN
    • SQL LEFT JOIN
    • SQL RIGHT JOIN
    • SQL FULL OUTER JOIN
    • SQL Self Join
    • SQL UNION
    • SQL GROUP BY
    • SQL HAVING
    • SQL EXISTS
    • SQL ANY and ALL
    • SQL SELECT INTO
    • SQL INSERT INTO SELECT
    • SQL CASE
    • SQL NULL Functions
    • SQL Stored Procedures
    • SQL Comments
    • SQL Operators
    • SQL CREATE DATABASE
    • SQL DROP DATABASE
    • SQL BACKUP DATABASE
    • SQL CREATE TABLE
    • SQL DROP TABLE
    • SQL ALTER TABLE
    • SQL Constraints
    • SQL NOT NULL
    • SQL UNIQUE Constraint
    • SQL PRIMARY KEY
    • SQL FOREIGN KEY
    • SQL CHECK Constraint
    • SQL CREATE INDEX
    • SQL AUTO INCREMENT
    • SQL Dates
    • SQL Views
    • SQL Injection
    • SQL Hosting
    • SQL Data Types
  • Node Js
    • What is Node.js?
    • Why use Node.js?
    • Installing Node.js
    • First Node.js progr...
    • Event Loop
    • Understanding npm
    • What are Modules?
    • fs (File System)
    • Http Module
    • Path Module
    • Creating custom mod...
    • Exporting and impor...
    • Setting up a basic ...
    • Handling requests a...
    • Serving HTML
    • Serving CSS
    • Serving JavaScript
  • Python MySQL
    • Database Connection
    • Table Creation
    • Insert Query
    • Select Query
    • Update Query
    • Delete Query
    • Where Clause Query
    • Limit Clause Query
    • Join Tables
    • Order By Query
    • Group By Query
    • Aggregate Functions
    • Parameterized Query
  • Java Tutorials
    • Java Introduction
    • Java Installation
    • Java Syntax
    • Java Comments
    • Java Variables
    • Java DataTypes
    • Java Operators
    • Java Conditionals
    • Java Looping
    • Java Arrays
    • Java Methods
    • Java Classes
    • Java Objects
    • Java Constructors
    • Java Inheritance
    • Java Polymorphism
    • Java Encapsulation
    • Java Abstraction
    • Java Exception
    • Java Interfaces
    • Java File Handling
    • Java Threads
    • Java Access Modifiers
    • Java Static Keyword
    • Java Final Keyword
    • Java Nested Class
    • Java Synchronization
  • Docker
    • Introduction to Docker
    • Installing Docker
    • Docker Architecture
    • Docker Images
    • Docker Containers
    • Dockerfile Basics
    • Docker Volumes
    • Docker Networking
    • Docker Compose
    • Docker Hub & Registry
    • Multi-Stage Builds
    • Docker with Nginx
    • Docker with MySQL
    • Docker with PHP & L...
    • Docker Environment ...
    • Docker Logs & Debug...
    • Docker Security Bes...
    • Docker Swarm Basics
    • Docker vs Virtual M...
    • Real World Docker P...
Interviews
  • PHP Interviews
    • What is PHP?
    • What does PHP stand...
    • PHP Advantages
    • Difference between ...
    • Start a PHP script?
    • Commenting in PHP
    • Variable in PHP
    • Different types of ...
    • Different types of ...
    • Array in PHP
    • Difference between ...
    • Retrieve data from ...
    • PHP handle errors
    • Sessions in PHP
    • PHP Cookie
    • What are the main f...
    • What are the differ...
    • What are the differ...
  • Java Interview Questions
    • Java Basics – Wha...
    • What is the differe...
    • What are the OOP co...
    • Why is the main met...
    • What are the differ...
    • What is the differe...
    • What is Method Over...
    • What is the Differe...
    • What is the Constru...
    • What are the Access...
    • What is the this Ke...
    • What is the super K...
    • What is the static ...
    • What is the final K...
    • What is Exception H...
    • What are Checked an...
    • What is the Differe...
    • What are Multithrea...
    • What is the Java Co...
    • What is the Differe...
    • What is the Differe...
    • What is the Differe...
    • What is the Differe...
    • How Does HashMap Wo...
    • What is the Differe...
    • What is the Differe...
    • What is the String ...
    • What is the Differe...
    • What is Garbage Col...
    • What is the Differe...
    • What is a Lambda Ex...
    • What is the Stream ...
    • What are Optional C...
    • What is the Differe...
    • What are the Key Fe...
    • What is the Record ...
  • React Interviews
    • What is React.js
    • Help In Interviews
    • Features of React
    • What is JSX
    • React's Virtual DOM
    • State and Props
    • React handle data b...
    • React Component
    • setState() method.
    • Controlled Components
    • Lifecycle Methods
    • Significance of keys
    • What are the differ...
  • Laravel Interviews
    • What is Laravel?
    • What are the key fe...
    • Explain the concept...
    • What is a controlle...
    • What is Blade templ...
    • How does Eloquent O...
    • Explain the concept...
    • What are middleware...
    • How do you create a...
    • What is CSRF protec...
    • What is the purpose...
    • What is the purpose...
    • Explain the concept...
    • How do you create a...
    • What is the purpose...
    • How do you define r...
    • What are named rout...
    • Explain the use of ...
    • What is the purpose...
    • What are service pr...
  • SQL Interviews
    • What is SQL?
    • What are the differ...
    • What is the differe...
    • What is a primary key?
    • What is a foreign key?
    • What are the differ...
    • What is the differe...
    • What is the use of ...
    • What is the differe...
    • What is an index in...
    • What types of index...
    • What is a subquery?
    • How do you use the ...
    • How can you find th...
    • Explain the use of ...
    • What is a view?
    • What are the limita...
    • Write a query to fe...
    • Write a query to fe...
    • Write a query to co...
    • Write a query to fe...
    • Write a query to fe...
    • Write a query to fi...
    • Write a query to fe...
    • Write a query to re...
    • Write a query to ge...
    • Write a query to ge...
    • Write a query to li...
    • Write a query to fi...
    • Write a query to fi...
    • Write a query to ge...
    • Write a query to fi...
    • Write a query to co...
    • Write a query to fi...
    • Write a query to li...
    • Write a query to fe...
    • Write a query to fi...
    • Write a query to fe...
    • Write a query to ge...
    • Write a query to co...
    • Write a query to fe...
  • JavaScript Interview Questions
    • What Exactly is Jav...
    • What are the data t...
    • What is the differe...
    • JavaScript double e...
    • What is a Closure i...
    • What is Hoisting in...
    • Understanding "this...
    • What Are JavaScript...
    • Null vs Undefined i...
    • How Does JavaScript...
    • What is a Promise i...
    • Async/Await in Java...
    • Event Delegation in...
    • JavaScript Modules ...
    • How to Prevent a Fu...
    • JavaScript Intervie...
    • JavaScript Intervie...
    • What is bind() in J...
    • Event Bubbling vs. ...
    • Deep Copy vs Shallo...
    • What is the new Key...
PHP Frameworks
  • Laravel
    • Laravel Topics
    • Laravel 7 Installation
    • Install laravel 8
    • Laravel 8 Routing
    • Laravel Controllers
    • Views and Blade lar...
    • Database and Eloque...
    • Authentication and ...
    • CSRF Protection
    • Laravel Model
    • Database: Query Bui...
Routine Use
  • Linux
    • How to Delete a Fil...
    • Install lemp in ubu...
    • How to check packag...
    • Navigating the File...
    • Managing Files and ...
    • Viewing and Editing...
    • Managing Processes ...
    • Scheduling Tasks wi...
    • Disk Usage Analysis...
    • File and Directory ...
Blogs
  • Blogs
    • Free Hosting on AWS...
    • What is SEO?
    • Zoho Free Mail
    • Speed Up Your Appli...
    • What is a JavaScrip...
    • Laravel vs Lumen: T...
    • MySQL vs PostgreSQL...
    • Automate Free MySQL...
    • How to Use Google A...
    • What is n8n?
    • Cloud Platform Comp...
    • Top Common Mistakes...
    • PHP 8.5: The Pipeli...
    • Google Antigravity ...
    • How to Optimize Que...
    • React vs Angular vs...
    • Base44: Features, P...
    • Difference Between ...
    • HTTP Status Codes E...
    • Build Native Mobile...
    • Top 10 JavaScript F...
    • JIRA, Waterfall, an...
    • WebSockets in Moder...
    • A Complete Real-Wor...
    • Why Developers Shou...
    • Service-Based Compa...
    • Bootstrap vs Tailwi...
    • Direct Prompt vs St...
    • Top 25 SEO HTML Tag...
    • Docker Commands Che...
    • Authentication vs A...
    • Top AI Portals in 2...
    • What is Replit? Com...
    • Laravel 13 Released...