LogIn
I don't have account.
Sponsored -53%
Zebronics #1 Best Seller

ZEBRONICS Blanc Slim Wireless Mouse — Rechargeable, BT + 2.4GHz (Black)

Up to 1600 DPI · Silent clicks · 63g · Multicolor LED

★★★★★ 4.0 (9,512) 5K+ bought last month
₹376 M.R.P. ₹799Save ₹423
Buy Now
Adℹ

Adobe Software Engineer 2 Interview Experience

Shashwat Tiwari
263 Views
Amazon Pay offer
Adℹ

A few months ago, I got the opportunity to interview with Adobe for an SDE-2 role. I had been meaning to write about the experience for a while, but somehow kept putting it off. So, I’m finally sharing it now while I still remember the interview rounds, the questions, and, more importantly, the areas where I struggled.

I think those moments are often more useful to share than just saying, “I cleared the interview.” They give a more realistic picture of what to expect and what you can learn from the experience.

Detail Info
Role SDE-2
Experience level Mid-level (2-4 YOE range)
Total rounds 4
Coding problems 5, plus 1 pure LLD round
Total duration ~4.5 hours across all rounds
Mode Remote (all rounds)
Language used Java (C++ theory tested verbally in Round 3)
Difficulty Medium overall, a few follow-ups pushed into hard territory
Result Selected

Alright, let's get into the actual rounds.

Round 1: DSA Round (60 mins, Remote, 2 Problems)

Two coding problems, back to back, no small talk really. Straight into it.

Problem 1: Nested List Weight Sum

Ask: You get a nested list , some elements are plain integers, some are lists inside lists. Each integer's weight equals how deep it sits (outer list = depth 1). Return the total sum, where each integer counts multiple times based on its depth.

The second I read it, my brain went "this is just a tree, right?" and yeah, that instinct held up. A nested list is basically a tree with integers as leaves. So I did a DFS, dragging the current depth along as I go deeper.


public int depthSum(List<NestedInteger> nestedList) {
    return dfs(nestedList, 1);
}

private int dfs(List<NestedInteger> list, int depth) {
    int sum = 0;
    for (NestedInteger item : list) {
        if (item.isInteger()) {
            sum += item.getInteger() * depth;
        } else {
            sum += dfs(item.getList(), depth + 1);
        }
    }
    return sum;
}

Time complexity: O(n), where n is the total number of integers across all nested lists , every integer gets visited exactly once. Space complexity: O(d) for the recursion stack, where d is the maximum depth of nesting.

This one went smoothly, no real hiccups. The interviewer did ask one follow-up though: "What if the nesting was extremely deep, like thousands of levels , would recursion still be fine?" I said recursion could hit a stack overflow at that depth and that I'd switch to an iterative approach using an explicit stack instead of relying on the call stack. He seemed satisfied with that and we moved on , no need to actually code the iterative version.

Problem 2: Valid Palindrome III

Ask: Given a string and a number k, figure out if you can turn the string into a palindrome by deleting at most k characters.

This is the one that actually got me. My first move was to treat it like the regular "valid palindrome" two-pointer check , like, move pointers from both ends and if characters don't match, try skipping one side or the other. I started explaining this out loud.

The interviewer stopped me and asked: "Okay and what's the time complexity of that approach if you keep branching on every mismatch?"

That's the exact moment I realized I'd messed up. I paused, did the math in my head and admitted , "actually, this branches into two options every mismatch, so worst case this is exponential." He didn't say anything, just kind of waited to see what I'd do next, which honestly felt more nerve wracking than if he'd just told me the answer.

I sat with it for a bit and then thought , okay, "minimum deletions to make a palindrome" smells like a DP problem, similar to longest common subsequence style problems. I connected it to Longest Palindromic Subsequence , find the longest subsequence of the string that's already a palindrome and the leftover characters (string length minus that) are exactly what you'd need to remove.


public boolean isValidPalindrome(String s, int k) {
    int n = s.length();
    int[][] dp = new int[n][n];

    for (int i = n - 1; i >= 0; i--) {
        dp[i][i] = 1;
        for (int j = i + 1; j < n; j++) {
            if (s.charAt(i) == s.charAt(j)) {
                dp[i][j] = dp[i + 1][j - 1] + 2;
            } else {
                dp[i][j] = Math.max(dp[i + 1][j], dp[i][j - 1]);
            }
        }
    }
    int longestPalinSubseq = dp[0][n - 1];
    int removalsNeeded = n - longestPalinSubseq;
    return removalsNeeded <= k;
}

Time complexity: O(n²), since we fill an n×n DP table. Space complexity: O(n²) for the table, though it can be optimized to O(n) if you only keep the last two rows , I mentioned this optimization out loud but we didn't code it since he seemed satisfied with the base solution.

How I actually caught the mistake: it wasn't a sudden lightbulb , it was the interviewer's complexity question that forced me to slow down and actually calculate it instead of assuming my first idea was fine. Once I said the word "exponential" out loud, I sort of embarrassed myself into fixing it. Lesson I took from this , the moment your own solution sounds "branchy" with no memoization in sight, stop and ask yourself if this is secretly a DP problem before you keep going.

Key Takeaways from Round 1

  • A "nested" data structure is almost always a tree in disguise , DFS with a state variable (like depth) is usually the cleanest fix.
  • "Minimum deletions/insertions to make X a palindrome" is a strong signal for a DP problem, specifically tied to Longest Palindromic Subsequence , don't try to force a two-pointer greedy fix onto it.
  • If an interviewer asks about complexity mid-explanation, treat it as a signal, not just a question , it usually means your current approach has a real problem.

Round 2: LLD Round , Design a Chess Game (60 mins, Remote, No Coding)

Zero coding this round, just pure design talk and honestly it was kind of fun once I got into the flow of it.

The prompt was open ended: "design chess." That's genuinely all he said at first. So I asked a few things back , did he want full rules like castling, en passant, check/checkmate, or just the core skeleton with movement and turns? We agreed to start with the skeleton and go deeper if time allowed.

I sketched out the main pieces (pun intended):

  • Board , the 8x8 grid, knows what's sitting where
  • Piece (abstract) , with Pawn, Knight, Bishop, Rook, Queen, King each handling their own movement rules
  • Player , color, name, list of active pieces
  • GameManager , runs the game loop, tracks turns, validates moves

abstract class Piece {
    protected String color;
    protected Position position;

    abstract boolean isValidMove(Position from, Position to, Board board);
}

class Knight extends Piece {
    @Override
    boolean isValidMove(Position from, Position to, Board board) {
        int rowDiff = Math.abs(from.row - to.row);
        int colDiff = Math.abs(from.col - to.col);
        return (rowDiff == 2 && colDiff == 1) || (rowDiff == 1 && colDiff == 2);
    }
}

class Board {
    private Piece[][] grid;

    Piece getPieceAt(Position pos) {
        return grid[pos.row][pos.col];
    }

    void movePiece(Position from, Position to) {
        grid[to.row][to.col] = grid[from.row][from.col];
        grid[from.row][from.col] = null;
    }
}

class GameManager {
    Board board;
    Player currentPlayer;

    boolean makeMove(Position from, Position to) {
        Piece piece = board.getPieceAt(from);

        if (piece == null || !piece.color.equals(currentPlayer.color)) {
            return false;
        }
        if (!piece.isValidMove(from, to, board)) {
            return false;
        }
        board.movePiece(from, to);
        switchTurn();
        return true;
    }
    private void switchTurn() {
        // swap currentPlayer to the other side
    }
}

I made Piece abstract on purpose, so each piece owns its own movement logic , adding a new piece type or a weird custom variant later doesn't touch anything else. I said this out loud specifically, since design rounds are really about showing you thought about "what happens when requirements change," not just solving today's version of the problem.

Then came the part where I got stuck. He asked: "How would you detect check or checkmate?" I gave a fairly hand-wavy answer, something like "we'd check if the king is under attack after a move." He followed up with, "Under attack by what and how do you compute that without checking every single piece every single time?"

That's when I realized my answer was too shallow , I hadn't actually thought about the cost of checking "is this square attacked." I sort of stumbled for a few seconds, then worked through it live: simulate the move, then loop through the opponent's pieces and check if any of their valid moves land on the king's square and if the move puts your own king in check, disallow it. He nodded and said "yeah, that works, just wanted to see you get there," which told me he already knew I hadn't fully thought it through and was giving me room to work it out rather than just moving on.

Looking back: I should've flagged the complexity concern myself before he asked, instead of waiting to get caught out. If you're doing a design round, try to preemptively poke holes in your own answer , it makes you look sharper than waiting for the interviewer to find the hole for you.

Key Takeaways from Round 2

  • Making Piece abstract with per-piece movement logic is the single most important design decision in a Chess LLD , call it out explicitly, don't just write it silently.
  • Always think through the cost of "is this square/state under attack" style checks before you're asked , naive checking-every-piece approaches are the first thing interviewers probe.
  • It's fine to work through an answer live and imperfectly. What the interviewer is often testing is whether you can get there at all, not whether you have it memorized.

Round 3: The Long One , Project Talk + C++ Grill + 2 Problems (90 mins, Remote)

This round was a marathon. Ninety minutes of project talk, rapid fire C++, code reading and two coding problems.

Project Discussion

Started with him asking about the most critical project I've worked on , the actual technical decisions, not just "what did it do." I kept my answers specific, mentioning real numbers and real tradeoffs instead of staying vague.

C++ Rapid Fire

Then a burst of quick-fire theory:

  • Null pointer vs dangling pointer
  • What a void pointer actually is and why you need to cast it before use
  • Stack vs heap memory and who's responsible for cleanup
  • Smart pointers , unique_ptr vs shared_ptr and how they save you from manual delete calls

This part moved fast enough that there wasn't much room to think , it really was testing whether this stuff was second nature or not.

Snippets and Debugging

He showed me a couple of small C++ snippets and asked me to say what they'd print. One had pointer arithmetic mixed with a pre-increment and I got it wrong on the first pass , said the wrong value out loud immediately, too quickly, without actually tracing it.

He gave me a small hint: "Walk through it line by line instead of guessing , what does the pointer actually point to before the increment happens?" That hint was basically him telling me to slow down. Once I actually traced it step by step instead of pattern-matching from memory, I caught my own mistake and corrected the answer. I remember feeling a bit embarrassed about it in the moment, but he didn't seem to mind , he just wanted to see if I could self-correct once nudged, which I think matters more than getting it right instantly.

Problem 1: Better Compression of String

Ask: Given a string like "a2b1c1a3" , a character followed by digits, possibly with the same character showing up more than once , combine the counts for each character and output the result in alphabetical order.

I used a 26-length array to keep running totals while parsing through the string, since we're dealing with lowercase letters only.


public String betterCompression(String s) {
    int[] counts = new int[26];
    int i = 0;

    while (i < s.length()) {
        char ch = s.charAt(i);
        i++;

        int num = 0;
        while (i < s.length() && Character.isDigit(s.charAt(i))) {
            num = num * 10 + (s.charAt(i) - '0');
            i++;
        }
        counts[ch - 'a'] += num;
    }
    StringBuilder result = new StringBuilder();
    for (int j = 0; j < 26; j++) {
        if (counts[j] > 0) {
            result.append((char) ('a' + j)).append(counts[j]);
        }
    }
    return result.toString();
}

Follow-up he threw in: "What if the count could be zero, like a0? Does your code handle that correctly?" I traced through my own code and confirmed that yes, since I'm just adding zero to the running count, it naturally works without extra handling , I didn't need to change anything, just had to prove it to him with an example.

Time complexity: O(n), a single pass through the string, plus O(26) at the end to build the result, which is effectively constant. Space complexity: O(1) extra space, since the counts array is a fixed size of 26 regardless of input size.

Problem 2: Compare Version Numbers

Ask: Compare two version strings like "1.01" and "1.001" and say which is bigger, accounting for leading zeros not mattering.


public int compareVersion(String version1, String version2) {
    String[] parts1 = version1.split("\\.");
    String[] parts2 = version2.split("\\.");

    int maxLength = Math.max(parts1.length, parts2.length);
    for (int i = 0; i < maxLength; i++) {
        int num1 = i < parts1.length ? Integer.parseInt(parts1[i]) : 0;
        int num2 = i < parts2.length ? Integer.parseInt(parts2[i]) : 0;

        if (num1 != num2) {
            return num1 > num2 ? 1 : -1;
        }
    }
    return 0;
}

He asked what happens with something like "1..1" (a double dot) or a trailing dot. I said I'd add input validation before splitting and that as written, Integer.parseInt on an empty string would actually throw an exception , I flagged this myself rather than waiting for him to catch it, which felt like a small redemption after fumbling the pointer snippet earlier.

Time complexity: O(m + n), where m and n are the lengths of the two version strings , we split and scan each once. Space complexity: O(m + n) for storing the split arrays.

Key Takeaways from Round 3

  • C++ fundamentals (pointers, memory management, smart pointers) get tested even in Java-heavy interviews if your resume mentions C++ , don't skip revising them just because you code in Java day to day.
  • When reading code snippets out loud, trace step by step instead of pattern-matching from memory. That's exactly where I slipped on the pointer arithmetic question.
  • For string/parsing problems, always mention the zero-count or malformed-input edge case yourself before the interviewer asks , it shows you're already thinking defensively about your own code.

Round 4: Behavioral + a Real-World Caching Problem (60 mins, Remote, 1 Problem)

Behavioral

Started with a question about a past project, but the framing was more "walk me through a specific moment" than "tell me what you built." I stuck to one concrete story instead of jumping between projects.

The Cache Problem, Disguised

Instead of saying "implement LRU Cache," he framed it as: "imagine your system has limited memory and needs to cache frequently used data , how would you decide what to keep and what to throw away?"

I actually like this style of question more than the direct version, because it stops you from just pattern-matching to a memorized answer. We talked through a few eviction ideas , random eviction, least frequently used, least recently used and I explained the tradeoffs of each before settling on LRU as the right fit for what he described.


class LRUCache {
    class Node {
        int key, value;
        Node prev, next;
        Node(int key, int value) {
            this.key = key;
            this.value = value;
        }
    }

    private Map<Integer, Node> map;
    private int capacity;
    private Node head, tail;

    public LRUCache(int capacity) {
        this.capacity = capacity;
        map = new HashMap<>();
        head = new Node(-1, -1);
        tail = new Node(-1, -1);
        head.next = tail;
        tail.prev = head;
    }

    public int get(int key) {
        if (!map.containsKey(key)) return -1;

        Node node = map.get(key);
        remove(node);
        insertAtFront(node);
        return node.value;
    }

    public void put(int key, int value) {
        if (map.containsKey(key)) {
            remove(map.get(key));
        }

        if (map.size() == capacity) {
            Node lru = tail.prev;
            remove(lru);
            map.remove(lru.key);
        }

        Node newNode = new Node(key, value);
        insertAtFront(newNode);
        map.put(key, newNode);
    }

    private void remove(Node node) {
        node.prev.next = node.next;
        node.next.prev = node.prev;
    }

    private void insertAtFront(Node node) {
        node.next = head.next;
        node.prev = head;
        head.next.prev = node;
        head.next = node;
    }
}

HashMap for instant lookup, doubly linked list to track recency without shifting anything around , removing or inserting a node when you already have a reference to it is O(1). Every get or put moves that node to the front and whenever we're full, whatever sits at the back is the actual least recently used item and that's what gets evicted.

One follow-up here too: "What if two threads call get and put at the same time , is this thread-safe?" I said no, not as written , I'd need to either synchronize the critical sections or use a concurrent-safe structure and mentioned ConcurrentHashMap combined with proper locking around the linked list operations as a starting point, though we didn't code it out.

Time complexity: O(1) for both get and put, since HashMap lookups and doubly linked list insert/remove are both constant time when you already have a node reference. Space complexity: O(capacity), since we store at most capacity nodes in the map and the linked list at any time.

Key Takeaways from Round 4

  • When a "classic" problem gets dressed up as a real-world scenario, walk through the tradeoffs of a few approaches before naming the pattern , that's what the framing is actually testing.
  • Thread-safety follow-ups are common on cache/data-structure questions , have a rough answer ready (locking, concurrent collections) even if you're not asked to code it.
  • For behavioral answers, one detailed, specific story beats three vague ones every time.

How the Whole Thing Felt, Looking Back

If I'm honest, this process tested way more "can you think on your feet when someone pokes a hole in your first answer" than "do you know the answer already." Almost every round had at least one moment where the interviewer pushed back on something I said and how I responded in that moment mattered more than the initial answer itself.

Things I'd Tell Past-Me

  • When your solution starts sounding "branchy" or exponential, stop and ask if it's secretly a DP problem , that's exactly where I lost time on Valid Palindrome III.
  • Try to catch the holes in your own design before the interviewer does. I got asked about checkmate detection cost because I hadn't thought about it myself first , next time, I'll poke at my own answer before presenting it as final.
  • If you get a code-reading question wrong, don't just blurt a correction , trace through it slowly out loud. That's literally what the interviewer hinted at and it worked.
  • When a "textbook" problem gets disguised as a real scenario, resist the urge to jump straight to the memorized solution. Talk through the tradeoffs first, like they actually want you to.
  • Staying calm after a wrong answer is genuinely part of what's being evaluated, not just a nice-to-have. Nobody expects a perfect run.

FAQs About the Adobe SDE-2 Interview

Is the Adobe SDE-2 interview difficult?

It's medium difficulty overall, but the follow-up questions are where it gets tough. The main problems weren't the hardest LeetCode-style questions out there, but interviewers keep pushing with "what if latency mattered" or "what if this needed to be thread-safe" type questions, so the real difficulty is in how deep you can go, not just solving the base problem.

Does Adobe ask LLD (Low-Level Design) in SDE-2 interviews?

Yes. In my case, an entire round was dedicated to designing a Chess game with no coding involved , just class structures, method signatures and reasoning about extensibility. Expect at least one round focused purely on design if you're interviewing for SDE-2 or above.

What coding questions does Adobe ask for SDE-2?

Based on my experience, expect a mix of medium-level DSA (arrays, strings, recursion, DP) and practical, real-world-framed problems like caching (LRU Cache) rather than always naming the pattern directly. Topics like Nested List Weight Sum, Valid Palindrome III, string parsing/compression problems and version comparison came up for me , string manipulation and DP showed up more than I expected.

How many rounds are there in the Adobe SDE-2 interview process?

I went through 4 rounds total: a DSA round, an LLD round, a longer mixed round (project discussion + C++ fundamentals + coding) and a final behavioral-plus-coding round with the hiring manager. All of mine were remote.

That's the full story , four rounds, one chess board, an embarrassing pointer mistake and a cache that thankfully didn't evict me from the process. Hope this helps if you've got something similar coming up.

Responses (0)

Write a response

CommentHide Comments

No Comments yet.

"},"4":{"id":4,"name":"ZEBRONICS Blanc mouse ad","otherData":"{}","contentFormat":2,"content":"
Sponsored -53%
Zebronics #1 Best Seller

ZEBRONICS Blanc Slim Wireless Mouse — Rechargeable, BT + 2.4GHz (Black)

Up to 1600 DPI · Silent clicks · 63g · Multicolor LED

★★★★★ 4.0 (9,512) 5K+ bought last month
₹376 M.R.P. ₹799Save ₹423
Buy Now
"},"2":{"id":2,"name":"Crousal Ads","otherData":"{}","contentFormat":2,"content":"
Sponsored -34%
iQOO Amazon's Choice

iQOO Z10 Lite 5G — Cyber Green, 4GB RAM, 128GB Storage

Dimensity 6300 · 50MP Sony AI Camera · 6000 mAh · IP64

★★★★★ 4.0 (2,052) 500+ bought last month
₹18,997 M.R.P. ₹28,999Save ₹10,002
Buy Now
"},"1":{"id":1,"name":"Banner Ads","otherData":"{}","contentFormat":2,"content":"\n
\n \n \n \"Amazon\n \n
"}}},"blogDetails":{"isWriter":false,"likes":0,"isLikedByUser":false,"tagIds":[134,145,177,189,344,361,363,455],"tags":[{"id":134,"name":"Interview","maskingName":"interview","isFeatured":true},{"id":145,"name":"Adobe","maskingName":"adobe","isFeatured":false},{"id":177,"name":"DSA","maskingName":"dsa","isFeatured":true},{"id":189,"name":"System Design","maskingName":"system-design","isFeatured":true},{"id":344,"name":"Low-Level Design (LLD)","maskingName":"lld","isFeatured":true},{"id":361,"name":"SDE 2","maskingName":"sde-2","isFeatured":false},{"id":363,"name":"Interview Experience","maskingName":"interview-experience","isFeatured":true},{"id":455,"name":"Experienced Candidate Intervie","maskingName":"experienced-candidate-interview","isFeatured":true}],"comments":[],"bookmark":{"isBookmarked":false,"count":0},"author":{"userId":"MjlfNF84LVsxMDVdMm4tdENfQU5nZV9fSXQ=","name":"Shashwat Tiwari"},"viewCount":262,"showBannerImage":false,"seoTags":"Adobe SDE-2 interview experience, Adobe Software Engineer interview experience, Adobe Software Engineer 2 interview, Adobe SDE-2 coding interview, Adobe interview questions, Adobe DSA interview, Adobe LLD interview, Adobe low level design interview, Adobe Java interview questions, Adobe C++ interview questions, Adobe hiring manager interview, Adobe behavioral interview, Adobe technical interview, Nested List Weight Sum, Valid Palindrome III, Chess game low level design, LRU Cache interview, Better Compression String, Compare Version Numbers, DFS interview, dynamic programming interview","content":"

A few months ago, I got the opportunity to interview with Adobe for an SDE-2 role. I had been meaning to write about the experience for a while, but somehow kept putting it off. So, I’m finally sharing it now while I still remember the interview rounds, the questions, and, more importantly, the areas where I struggled.

\n

I think those moments are often more useful to share than just saying, “I cleared the interview.” They give a more realistic picture of what to expect and what you can learn from the experience.

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
DetailInfo
RoleSDE-2
Experience levelMid-level (2-4 YOE range)
Total rounds4
Coding problems5, plus 1 pure LLD round
Total duration~4.5 hours across all rounds
ModeRemote (all rounds)
Language usedJava (C++ theory tested verbally in Round 3)
DifficultyMedium overall, a few follow-ups pushed into hard territory
ResultSelected
\n

Alright, let's get into the actual rounds.

\n

Round 1: DSA Round (60 mins, Remote, 2 Problems)

\n

Two coding problems, back to back, no small talk really. Straight into it.

\n

Problem 1: Nested List Weight Sum

\n

Ask: You get a nested list , some elements are plain integers, some are lists inside lists. Each integer's weight equals how deep it sits (outer list = depth 1). Return the total sum, where each integer counts multiple times based on its depth.

\n

The second I read it, my brain went \"this is just a tree, right?\" and yeah, that instinct held up. A nested list is basically a tree with integers as leaves. So I did a DFS, dragging the current depth along as I go deeper.

\n
\npublic int depthSum(List<NestedInteger> nestedList) {\n    return dfs(nestedList, 1);\n}\n\nprivate int dfs(List<NestedInteger> list, int depth) {\n    int sum = 0;\n    for (NestedInteger item : list) {\n        if (item.isInteger()) {\n            sum += item.getInteger() * depth;\n        } else {\n            sum += dfs(item.getList(), depth + 1);\n        }\n    }\n    return sum;\n}\n
\n

Time complexity: O(n), where n is the total number of integers across all nested lists , every integer gets visited exactly once. Space complexity: O(d) for the recursion stack, where d is the maximum depth of nesting.

\n

This one went smoothly, no real hiccups. The interviewer did ask one follow-up though: \"What if the nesting was extremely deep, like thousands of levels , would recursion still be fine?\" I said recursion could hit a stack overflow at that depth and that I'd switch to an iterative approach using an explicit stack instead of relying on the call stack. He seemed satisfied with that and we moved on , no need to actually code the iterative version.

\n

Problem 2: Valid Palindrome III

\n

Ask: Given a string and a number k, figure out if you can turn the string into a palindrome by deleting at most k characters.

\n

This is the one that actually got me. My first move was to treat it like the regular \"valid palindrome\" two-pointer check , like, move pointers from both ends and if characters don't match, try skipping one side or the other. I started explaining this out loud.

\n

The interviewer stopped me and asked: \"Okay and what's the time complexity of that approach if you keep branching on every mismatch?\"

\n

That's the exact moment I realized I'd messed up. I paused, did the math in my head and admitted , \"actually, this branches into two options every mismatch, so worst case this is exponential.\" He didn't say anything, just kind of waited to see what I'd do next, which honestly felt more nerve wracking than if he'd just told me the answer.

\n

I sat with it for a bit and then thought , okay, \"minimum deletions to make a palindrome\" smells like a DP problem, similar to longest common subsequence style problems. I connected it to Longest Palindromic Subsequence , find the longest subsequence of the string that's already a palindrome and the leftover characters (string length minus that) are exactly what you'd need to remove.

\n
\npublic boolean isValidPalindrome(String s, int k) {\n    int n = s.length();\n    int[][] dp = new int[n][n];\n\n    for (int i = n - 1; i >= 0; i--) {\n        dp[i][i] = 1;\n        for (int j = i + 1; j < n; j++) {\n            if (s.charAt(i) == s.charAt(j)) {\n                dp[i][j] = dp[i + 1][j - 1] + 2;\n            } else {\n                dp[i][j] = Math.max(dp[i + 1][j], dp[i][j - 1]);\n            }\n        }\n    }\n    int longestPalinSubseq = dp[0][n - 1];\n    int removalsNeeded = n - longestPalinSubseq;\n    return removalsNeeded <= k;\n}\n
\n

Time complexity: O(n²), since we fill an n×n DP table. Space complexity: O(n²) for the table, though it can be optimized to O(n) if you only keep the last two rows , I mentioned this optimization out loud but we didn't code it since he seemed satisfied with the base solution.

\n

How I actually caught the mistake: it wasn't a sudden lightbulb , it was the interviewer's complexity question that forced me to slow down and actually calculate it instead of assuming my first idea was fine. Once I said the word \"exponential\" out loud, I sort of embarrassed myself into fixing it. Lesson I took from this , the moment your own solution sounds \"branchy\" with no memoization in sight, stop and ask yourself if this is secretly a DP problem before you keep going.

\n
\n

Key Takeaways from Round 1

\n\n
\n

Round 2: LLD Round , Design a Chess Game (60 mins, Remote, No Coding)

\n

Zero coding this round, just pure design talk and honestly it was kind of fun once I got into the flow of it.

\n

The prompt was open ended: \"design chess.\" That's genuinely all he said at first. So I asked a few things back , did he want full rules like castling, en passant, check/checkmate, or just the core skeleton with movement and turns? We agreed to start with the skeleton and go deeper if time allowed.

\n

I sketched out the main pieces (pun intended):

\n\n
\nabstract class Piece {\n    protected String color;\n    protected Position position;\n\n    abstract boolean isValidMove(Position from, Position to, Board board);\n}\n\nclass Knight extends Piece {\n    @Override\n    boolean isValidMove(Position from, Position to, Board board) {\n        int rowDiff = Math.abs(from.row - to.row);\n        int colDiff = Math.abs(from.col - to.col);\n        return (rowDiff == 2 && colDiff == 1) || (rowDiff == 1 && colDiff == 2);\n    }\n}\n\nclass Board {\n    private Piece[][] grid;\n\n    Piece getPieceAt(Position pos) {\n        return grid[pos.row][pos.col];\n    }\n\n    void movePiece(Position from, Position to) {\n        grid[to.row][to.col] = grid[from.row][from.col];\n        grid[from.row][from.col] = null;\n    }\n}\n\nclass GameManager {\n    Board board;\n    Player currentPlayer;\n\n    boolean makeMove(Position from, Position to) {\n        Piece piece = board.getPieceAt(from);\n\n        if (piece == null || !piece.color.equals(currentPlayer.color)) {\n            return false;\n        }\n        if (!piece.isValidMove(from, to, board)) {\n            return false;\n        }\n        board.movePiece(from, to);\n        switchTurn();\n        return true;\n    }\n    private void switchTurn() {\n        // swap currentPlayer to the other side\n    }\n}\n
\n

I made Piece abstract on purpose, so each piece owns its own movement logic , adding a new piece type or a weird custom variant later doesn't touch anything else. I said this out loud specifically, since design rounds are really about showing you thought about \"what happens when requirements change,\" not just solving today's version of the problem.

\n

Then came the part where I got stuck. He asked: \"How would you detect check or checkmate?\" I gave a fairly hand-wavy answer, something like \"we'd check if the king is under attack after a move.\" He followed up with, \"Under attack by what and how do you compute that without checking every single piece every single time?\"

\n

That's when I realized my answer was too shallow , I hadn't actually thought about the cost of checking \"is this square attacked.\" I sort of stumbled for a few seconds, then worked through it live: simulate the move, then loop through the opponent's pieces and check if any of their valid moves land on the king's square and if the move puts your own king in check, disallow it. He nodded and said \"yeah, that works, just wanted to see you get there,\" which told me he already knew I hadn't fully thought it through and was giving me room to work it out rather than just moving on.

\n

Looking back: I should've flagged the complexity concern myself before he asked, instead of waiting to get caught out. If you're doing a design round, try to preemptively poke holes in your own answer , it makes you look sharper than waiting for the interviewer to find the hole for you.

\n
\n

Key Takeaways from Round 2

\n\n
\n

Round 3: The Long One , Project Talk + C++ Grill + 2 Problems (90 mins, Remote)

\n

This round was a marathon. Ninety minutes of project talk, rapid fire C++, code reading and two coding problems.

\n

Project Discussion

\n

Started with him asking about the most critical project I've worked on , the actual technical decisions, not just \"what did it do.\" I kept my answers specific, mentioning real numbers and real tradeoffs instead of staying vague.

\n

C++ Rapid Fire

\n

Then a burst of quick-fire theory:

\n\n

This part moved fast enough that there wasn't much room to think , it really was testing whether this stuff was second nature or not.

\n

Snippets and Debugging

\n

He showed me a couple of small C++ snippets and asked me to say what they'd print. One had pointer arithmetic mixed with a pre-increment and I got it wrong on the first pass , said the wrong value out loud immediately, too quickly, without actually tracing it.

\n

He gave me a small hint: \"Walk through it line by line instead of guessing , what does the pointer actually point to before the increment happens?\" That hint was basically him telling me to slow down. Once I actually traced it step by step instead of pattern-matching from memory, I caught my own mistake and corrected the answer. I remember feeling a bit embarrassed about it in the moment, but he didn't seem to mind , he just wanted to see if I could self-correct once nudged, which I think matters more than getting it right instantly.

\n

Problem 1: Better Compression of String

\n

Ask: Given a string like \"a2b1c1a3\" , a character followed by digits, possibly with the same character showing up more than once , combine the counts for each character and output the result in alphabetical order.

\n

I used a 26-length array to keep running totals while parsing through the string, since we're dealing with lowercase letters only.

\n
\npublic String betterCompression(String s) {\n    int[] counts = new int[26];\n    int i = 0;\n\n    while (i < s.length()) {\n        char ch = s.charAt(i);\n        i++;\n\n        int num = 0;\n        while (i < s.length() && Character.isDigit(s.charAt(i))) {\n            num = num * 10 + (s.charAt(i) - '0');\n            i++;\n        }\n        counts[ch - 'a'] += num;\n    }\n    StringBuilder result = new StringBuilder();\n    for (int j = 0; j < 26; j++) {\n        if (counts[j] > 0) {\n            result.append((char) ('a' + j)).append(counts[j]);\n        }\n    }\n    return result.toString();\n}\n
\n

Follow-up he threw in: \"What if the count could be zero, like a0? Does your code handle that correctly?\" I traced through my own code and confirmed that yes, since I'm just adding zero to the running count, it naturally works without extra handling , I didn't need to change anything, just had to prove it to him with an example.

\n

Time complexity: O(n), a single pass through the string, plus O(26) at the end to build the result, which is effectively constant. Space complexity: O(1) extra space, since the counts array is a fixed size of 26 regardless of input size.

\n

Problem 2: Compare Version Numbers

\n

Ask: Compare two version strings like \"1.01\" and \"1.001\" and say which is bigger, accounting for leading zeros not mattering.

\n
\npublic int compareVersion(String version1, String version2) {\n    String[] parts1 = version1.split(\"\\\\.\");\n    String[] parts2 = version2.split(\"\\\\.\");\n\n    int maxLength = Math.max(parts1.length, parts2.length);\n    for (int i = 0; i < maxLength; i++) {\n        int num1 = i < parts1.length ? Integer.parseInt(parts1[i]) : 0;\n        int num2 = i < parts2.length ? Integer.parseInt(parts2[i]) : 0;\n\n        if (num1 != num2) {\n            return num1 > num2 ? 1 : -1;\n        }\n    }\n    return 0;\n}\n
\n

He asked what happens with something like \"1..1\" (a double dot) or a trailing dot. I said I'd add input validation before splitting and that as written, Integer.parseInt on an empty string would actually throw an exception , I flagged this myself rather than waiting for him to catch it, which felt like a small redemption after fumbling the pointer snippet earlier.

\n

Time complexity: O(m + n), where m and n are the lengths of the two version strings , we split and scan each once. Space complexity: O(m + n) for storing the split arrays.

\n
\n

Key Takeaways from Round 3

\n\n
\n

Round 4: Behavioral + a Real-World Caching Problem (60 mins, Remote, 1 Problem)

\n

Behavioral

\n

Started with a question about a past project, but the framing was more \"walk me through a specific moment\" than \"tell me what you built.\" I stuck to one concrete story instead of jumping between projects.

\n

The Cache Problem, Disguised

\n

Instead of saying \"implement LRU Cache,\" he framed it as: \"imagine your system has limited memory and needs to cache frequently used data , how would you decide what to keep and what to throw away?\"

\n

I actually like this style of question more than the direct version, because it stops you from just pattern-matching to a memorized answer. We talked through a few eviction ideas , random eviction, least frequently used, least recently used and I explained the tradeoffs of each before settling on LRU as the right fit for what he described.

\n
\nclass LRUCache {\n    class Node {\n        int key, value;\n        Node prev, next;\n        Node(int key, int value) {\n            this.key = key;\n            this.value = value;\n        }\n    }\n\n    private Map<Integer, Node> map;\n    private int capacity;\n    private Node head, tail;\n\n    public LRUCache(int capacity) {\n        this.capacity = capacity;\n        map = new HashMap<>();\n        head = new Node(-1, -1);\n        tail = new Node(-1, -1);\n        head.next = tail;\n        tail.prev = head;\n    }\n\n    public int get(int key) {\n        if (!map.containsKey(key)) return -1;\n\n        Node node = map.get(key);\n        remove(node);\n        insertAtFront(node);\n        return node.value;\n    }\n\n    public void put(int key, int value) {\n        if (map.containsKey(key)) {\n            remove(map.get(key));\n        }\n\n        if (map.size() == capacity) {\n            Node lru = tail.prev;\n            remove(lru);\n            map.remove(lru.key);\n        }\n\n        Node newNode = new Node(key, value);\n        insertAtFront(newNode);\n        map.put(key, newNode);\n    }\n\n    private void remove(Node node) {\n        node.prev.next = node.next;\n        node.next.prev = node.prev;\n    }\n\n    private void insertAtFront(Node node) {\n        node.next = head.next;\n        node.prev = head;\n        head.next.prev = node;\n        head.next = node;\n    }\n}\n
\n

HashMap for instant lookup, doubly linked list to track recency without shifting anything around , removing or inserting a node when you already have a reference to it is O(1). Every get or put moves that node to the front and whenever we're full, whatever sits at the back is the actual least recently used item and that's what gets evicted.

\n

One follow-up here too: \"What if two threads call get and put at the same time , is this thread-safe?\" I said no, not as written , I'd need to either synchronize the critical sections or use a concurrent-safe structure and mentioned ConcurrentHashMap combined with proper locking around the linked list operations as a starting point, though we didn't code it out.

\n

Time complexity: O(1) for both get and put, since HashMap lookups and doubly linked list insert/remove are both constant time when you already have a node reference. Space complexity: O(capacity), since we store at most capacity nodes in the map and the linked list at any time.

\n
\n

Key Takeaways from Round 4

\n\n
\n

How the Whole Thing Felt, Looking Back

\n

If I'm honest, this process tested way more \"can you think on your feet when someone pokes a hole in your first answer\" than \"do you know the answer already.\" Almost every round had at least one moment where the interviewer pushed back on something I said and how I responded in that moment mattered more than the initial answer itself.

\n

Things I'd Tell Past-Me

\n\n

FAQs About the Adobe SDE-2 Interview

\n
\n

Is the Adobe SDE-2 interview difficult?

\n

It's medium difficulty overall, but the follow-up questions are where it gets tough. The main problems weren't the hardest LeetCode-style questions out there, but interviewers keep pushing with \"what if latency mattered\" or \"what if this needed to be thread-safe\" type questions, so the real difficulty is in how deep you can go, not just solving the base problem.

\n

Does Adobe ask LLD (Low-Level Design) in SDE-2 interviews?

\n

Yes. In my case, an entire round was dedicated to designing a Chess game with no coding involved , just class structures, method signatures and reasoning about extensibility. Expect at least one round focused purely on design if you're interviewing for SDE-2 or above.

\n

What coding questions does Adobe ask for SDE-2?

\n

Based on my experience, expect a mix of medium-level DSA (arrays, strings, recursion, DP) and practical, real-world-framed problems like caching (LRU Cache) rather than always naming the pattern directly. Topics like Nested List Weight Sum, Valid Palindrome III, string parsing/compression problems and version comparison came up for me , string manipulation and DP showed up more than I expected.

\n

How many rounds are there in the Adobe SDE-2 interview process?

\n

I went through 4 rounds total: a DSA round, an LLD round, a longer mixed round (project discussion + C++ fundamentals + coding) and a final behavioral-plus-coding round with the hiring manager. All of mine were remote.

\n
\n

That's the full story , four rounds, one chess board, an embarrassing pointer mistake and a cache that thankfully didn't evict me from the process. Hope this helps if you've got something similar coming up.

","categoryId":363,"subCategoryId":145,"contentFormat":5,"blogId":12,"userId":"MjlfNF84LVsxMDVdMm4tdENfQU5nZV9fSXQ=","title":"Adobe Software Engineer 2 Interview Experience","url":"adobe-software-engineer-2-interview-experience","bannerImage":"","seoDescription":"Adobe SDE-2 interview experience with DSA, LLD, Java, C++, LRU Cache, coding questions, solutions, interview rounds and preparation tips","generatedOn":"2025-09-09T16:43:08","updatedOn":"2026-08-30T06:46:30"},"popularContents":[{"id":165,"title":"Top 50+ SQL Interview Questions and Answers for Intermediate to Advanced","url":"top-sql-interview-questions-and-answers-for-intermediate-to-advanced","description":null,"seoDescription":"Top SQL Interview Questions and Answers for Intermediate to Advanced. Top SQL Interview Questions for experience. Frequently asked SQL interview questions with answers","contentType":2,"generatedOn":"2026-10-14T22:22:11.7529584Z","viewCount":0},{"id":118,"title":"JioHotstar Staff Software Engineer Interview Experience (Bangalore)","url":"jiohotstar-staff-software-engineer-interview-experience-bangalore","description":null,"seoDescription":"JioHotstar Staff Software Engineer interview experience covering Uber system design, API rate limiter LLD, leadership rounds, bar raiser and HR insights.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7578804Z","viewCount":0},{"id":35,"title":"Cursor vs Copilot : Which AI Coding Assistant Wins in 2025?","url":"cursor-vs-copilot-which-ai-coding-assistant-truly-wins-in-2025","description":null,"seoDescription":"Compare Cursor vs GitHub Copilot on speed, context awareness, multi-file support, pricing and code quality to choose the best AI coding assistant for developers","contentType":5,"generatedOn":"2026-10-14T22:22:11.7578756Z","viewCount":0},{"id":173,"title":"Uber SDE-2 Interview Experience : LLD, HLD, DSA & Hiring Manager Round","url":"uber-sde-2-interview-experience-lld-hld-dsa-hiring-manager-round","description":null,"seoDescription":"Read a real Uber SDE-2 interview experience covering DSA, low-level design, high-level system design, behavioral rounds, hiring freeze and key takeaways.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7578901Z","viewCount":0},{"id":166,"title":"System Design Interview – BIGGEST Mistakes to Avoid","url":"system-design-interview-biggest-mistakes-to-avoid","description":null,"seoDescription":"Learn the biggest mistakes to avoid in a system design interview, from unclear requirements to poor trade-off analysis. Includes real-world cases, advanced insights and examples to help you ace your next system design interview.","contentType":2,"generatedOn":"2026-10-14T22:22:11.75296Z","viewCount":0},{"id":135,"title":"Spinny SDE-1 Interview Experience (Selected)","url":"spinny-sde-1-interview-experience-selected","description":null,"seoDescription":"Spinny SDE-1 Interview Experience (Selected) | 4 Rounds Breakdown: Coding, LLD, Java, SQL + Real Interview Questions","contentType":5,"generatedOn":"2026-10-14T22:22:11.7578831Z","viewCount":0},{"id":167,"title":"Meesho SDE-1 Online Assessment Interview Experience (Remote) - Rejected","url":"meesho-sde-1-online-assessment-interview-experience-remote-rejected","description":null,"seoDescription":"Read a real Meesho SDE-1 online assessment experience with coding questions, DSA topics, solutions, difficulty level, preparation tips and interview insights.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7578844Z","viewCount":0},{"id":163,"title":"Top 50 SQL Interview Questions and Answers (Beginner to Intermediate)","url":"top-sql-interview-questions-and-answers-beginner-to-intermediate","description":null,"seoDescription":"Top 50 SQL Interview Questions and Answers (Beginner to Intermediate). Top SQL Interview Questions for fresher. Frequently asked SQL interview questions with answers","contentType":2,"generatedOn":"2026-10-14T22:22:11.7529514Z","viewCount":0},{"id":122,"title":"Zepto SDE-1 Interview Experience (Backend Developer) : Real DSA, LLD, Chess Game Design","url":"zepto-sde-1-interview-experience-backend-developer-real-dsa-lld-chess-game-design","description":null,"seoDescription":" Zepto SDE-1 Backend Interview Experience covering DSA, Dynamic Programming, LLD, API Design, DB Schema, OOP & Product Company Rounds.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7578818Z","viewCount":0},{"id":172,"title":"Google L4 Software Engineer III interview experience | Selected","url":"google-l4-software-engineer-iii-interview-experience-selected","description":null,"seoDescription":"Google L4 Software Engineer III interview experience with API design, Googlyness, route matching, graph coding rounds, follow-up questions and tips.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7578861Z","viewCount":0}],"latestContents":[{"id":219,"title":"6 Tools That Made My Life Easier as a Software Engineer","url":"6-tools-that-made-my-life-easier-as-a-software-engineer","description":null,"seoDescription":"The 6 developer tools I use daily as a software engineer: Git, VS Code, Docker, Postman, Chrome DevTools, and AI assistants, with real tips, mistakes, and trade","contentType":5,"generatedOn":"2026-10-14T22:22:11.7553307Z","viewCount":0},{"id":218,"title":"When Should a Business Use Multiple AI Agents Instead of One?","url":"when-should-a-business-use-multiple-ai-agents-instead-of-one","description":null,"seoDescription":"Single agent or multi-agent AI? Learn the 4 signals that justify splitting agents by knowledge, permissions, and risk, plus routing and handoff tips.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7553347Z","viewCount":0},{"id":216,"title":"AI in Clinical Trials Market Estimated to Experience a Hike in Growth by 2035","url":"ai-in-clinical-trials-market-estimated-to-experience-a-hike-in-growth-by-2035","description":null,"seoDescription":"The exclusive information about market dynamics serves as a valuable guide to predict economic scenarios and initiatives taken to enhance future growth. Our mar","contentType":5,"generatedOn":"2026-10-14T22:22:11.7553394Z","viewCount":0},{"id":217,"title":"AI in Clinical Trials Market Estimated to Experience a Hike in Growth by 2035","url":"ai-in-clinical-trials-market-estimated-to-experience-a-hike-in-growth-by-2035","description":null,"seoDescription":"The exclusive information about market dynamics serves as a valuable guide to predict economic scenarios and initiatives taken to enhance future growth. Our mar","contentType":5,"generatedOn":"2026-10-14T22:22:11.7553406Z","viewCount":0},{"id":215,"title":"What Happens When an AI Agent Doesn't Know the Answer?","url":"what-happens-when-an-ai-agent-doesnt-know-the-answer","description":null,"seoDescription":"Most AI agents fail quietly. They guess instead of saying \"I don't know.\" Here's how to design better fallback and human-handoff behavior.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7553419Z","viewCount":0},{"id":214,"title":"Greedy Algorithms Explained: How They Work, When They Fail and How to Use Them","url":"greedy-algorithms-explained-how-they-work-when-they-fail-and-how-to-use-them","description":null,"seoDescription":"Learn greedy algorithms step by step with C# code Dijkstra, Huffman coding, knapsack and MSTs plus when greedy fails and how to prove it's correct","contentType":5,"generatedOn":"2026-10-14T22:22:11.7553435Z","viewCount":0},{"id":213,"title":"Amazon SDE II Interview Experience (Bangalore, Selected) ~ Aug 2026","url":"amazon-sde-ii-interview-experience-bangalore-selected-aug-2026","description":null,"seoDescription":"Amazon SDE II interview experience from Bangalore covering 4 rounds, DSA, LLD, system design, Leadership Principles, coding questions and selection.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7553448Z","viewCount":0},{"id":212,"title":"How to Get 10x Better AI Answers Without Writing Better Prompts : 10 Proven Techniques","url":"how-to-get-10x-better-ai-answers-without-writing-better-prompts-10-proven-techniques","description":null,"seoDescription":"Get better AI answers without complex prompts. Learn 10 practical techniques using context, examples, tools, feedback, and verification.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7553461Z","viewCount":0},{"id":211,"title":"I Interviewed for a Microsoft SDE I Role. Here's Everything That Happened.","url":"i-interviewed-for-a-microsoft-sde-i-role-heres-everything-that-happened","description":null,"seoDescription":"My real Microsoft SDE I interview experience, all 4 rounds, the exact DSA problems with fully tested solutions, the WhatsApp system design round","contentType":5,"generatedOn":"2026-10-14T22:22:11.7553475Z","viewCount":0},{"id":140,"title":"PolicyBazaar Software Development Engineer (SDE) Interview Experience | DSA, Core CS & System Design","url":"policybazaar-software-development-engineer-sde-interview-experience-dsa-core-cs-system-design","description":null,"seoDescription":"Detailed PolicyBazaar SDE interview experience covering 3 rounds: DSA coding, core CS assessment and system design with key learnings and insights.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7553491Z","viewCount":0}],"relatedContents":[{"id":209,"title":"Adobe Computer Scientist 1 Interview Experience: Real Questions, Solutions & Tips","url":"adobe-computer-scientist-1-interview-experience-real-questions-solutions-tips","description":null,"seoDescription":"Real Adobe CS-1 interview experience covering C++, DSA questions, coding solutions, reschedules, rejection, interview challenges and preparation tips.","contentType":5,"generatedOn":"2026-10-14T22:22:11.762789Z","viewCount":0},{"id":180,"title":"My Adobe Interview Experience for Android MTS-2 (SDE-III Level) ~ Full Breakdown","url":"my-adobe-interview-experience-for-android-mts-2-sde-iii-level-full-breakdown","description":null,"seoDescription":"Adobe MTS-2 Android interview experience covering Android basics, coroutines, DSA, system design, hiring manager round, coding questions and tips.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7627931Z","viewCount":0},{"id":156,"title":"Adobe MTS-2 Interview Experience | DSA, System Design, DevOps & Hiring Manager Round","url":"adobe-mts-2-interview-experience-dsa-system-design-devops-hiring-manager-round","description":null,"seoDescription":"Adobe MTS-2 interview experience with DSA, system design, DevOps, DBMS, OS, OOP, hiring manager round, coding questions and preparation tips.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7627948Z","viewCount":0},{"id":13,"title":"Adobe Software Engineer 2 Interview Experience","url":"adobe-software-engineer-2-interview-experience","description":null,"seoDescription":"Adobe SDE-2 interview experience with Java, DSA, SQL, API basics, testing, behavioral rounds, coding questions, solutions and preparation tips.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7627976Z","viewCount":0},{"id":197,"title":"My Adobe SDE Interview Experience (Aug 2026) 5 Rounds, Selected","url":"my-adobe-sde-interview-experience-aug-2026-5-rounds-selected","description":null,"seoDescription":"Real Adobe SDE interview: 5 rounds, 4 DSA problems (Rotate Array, BSTs, Kth Smallest Matrix), code review & behavioral round. Full solutions + tips.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7627992Z","viewCount":0},{"id":213,"title":"Amazon SDE II Interview Experience (Bangalore, Selected) ~ Aug 2026","url":"amazon-sde-ii-interview-experience-bangalore-selected-aug-2026","description":null,"seoDescription":"Amazon SDE II interview experience from Bangalore covering 4 rounds, DSA, LLD, system design, Leadership Principles, coding questions and selection.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7628007Z","viewCount":0},{"id":211,"title":"I Interviewed for a Microsoft SDE I Role. Here's Everything That Happened.","url":"i-interviewed-for-a-microsoft-sde-i-role-heres-everything-that-happened","description":null,"seoDescription":"My real Microsoft SDE I interview experience, all 4 rounds, the exact DSA problems with fully tested solutions, the WhatsApp system design round","contentType":5,"generatedOn":"2026-10-14T22:22:11.7628022Z","viewCount":0},{"id":140,"title":"PolicyBazaar Software Development Engineer (SDE) Interview Experience | DSA, Core CS & System Design","url":"policybazaar-software-development-engineer-sde-interview-experience-dsa-core-cs-system-design","description":null,"seoDescription":"Detailed PolicyBazaar SDE interview experience covering 3 rounds: DSA coding, core CS assessment and system design with key learnings and insights.","contentType":5,"generatedOn":"2026-10-14T22:22:11.7628037Z","viewCount":0},{"id":135,"title":"Spinny SDE-1 Interview Experience (Selected)","url":"spinny-sde-1-interview-experience-selected","description":null,"seoDescription":"Spinny SDE-1 Interview Experience (Selected) | 4 Rounds Breakdown: Coding, LLD, Java, SQL + Real Interview Questions","contentType":5,"generatedOn":"2026-10-14T22:22:11.7628053Z","viewCount":0}]}}},"source":{"isMobile":false}}; window.__CLIENT_RENDER__ = false;