Flexport | SDE (2) | Bengaluru | April 2024 | [Reject]
Interview Experience
Current experience: Education: 2021 Grad, IIIT College Position: SDE1 at Fintech Location: Bengaluru, IN Interview experience: Applied Position: SDE2 at Flexport Location: Bengaluru, IN Date: April, 2024
Round 1 Technical [1 hour] Question: Consider an infinite grid. There are two...
Full Details
Current experience:
Education: 2021 Grad, IIIT College
Position: SDE1 at Fintech
Location: Bengaluru, IN
Interview experience:
Applied Position: SDE2 at Flexport
Location: Bengaluru, IN
Date: April, 2024
**
Round 1 Technical [1 hour]**
Question:
Consider an infinite grid. There are two types of queries,
1. A letter will drop from top (in a column) and settle at the bottom (or above a already present letter)
2.
Return TRUE, if there are three same letter in any column, else return FALSE.
Follow-up 1:
1.
Return TRUE, if there are three same letter in any column, else return FALSE.
2.
Return TRUE, if there are three same letter in any row, else return FALSE.
Follow-up 2:
1.
Return TRUE, if there are three same letter in any column, else return FALSE.
2.
Return TRUE, if there are three same letter in any row, else return FALSE.
3.
Return TRUE, if there are three same letter in any diagonal, else return FALSE.
Follow-up 3:
Extend the "Follow-up 2" to match N (not just 3) letter.
My Solution:
===================================
Board Class
===================================
package Board;
import Game.Disc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class GridBoard {
HashMap<Integer, List<Disc>> board;
Integer NumberOfMatches;
public GridBoard(Integer N) {
NumberOfMatches = N;
board = new HashMap<>();
}
public boolean put(Integer column, Disc disc) {
// Check for empty column
if (!board.containsKey(column)) {
board.put(column, new ArrayList<>());
}
// Put the disc in given column
board.get(column).add(disc);
if (isWinningMoveLastNColumn(column, disc)) {
System.out.println("Game finished with Column match!");
**return** true;
} else if(isWinningMoveLastNRow(column, disc)) {
System.out.println("Game finished with Row match!");
} else {
System.out.println("Next Player turn!!!");
}
**return** false;
}
private boolean isWinningMove(Integer column, Disc disc) {
List<Disc> discs = board.get(column);
int discsSize = discs.size();
if (discsSize < 3 || !(discs.get(discsSize-1)==discs.get(discsSize-2) && discs.get(discsSize-2)==discs.get(discsSize-3)))
**return** false;
**return** true;
}
private boolean isWinningMoveLastNColumn(Integer column, Disc disc) {
List<Disc> discs = board.get(column);
int discsSize = discs.size();
if (discsSize < NumberOfMatches)
**return** false;
// 5 elements, N = 3
// 0, 1, 2, 3, 4 => Check for 2, 3, 4
for (int i = discsSize-2; i >= discsSize - NumberOfMatches; --i) {
if (discs.get(discsSize-1) != discs.get(i))
**return** false;
}
**return** true;
}
private boolean isWinningMoveLastNRow(Integer column, Disc disc) {
List<Disc> discs = board.get(column);
int currRow = discs.size();
int totalMatches = 1;
int leftColumn = column-1;
while (board.containsKey(leftColumn)) {
List<Disc> leftColumnDisc = board.get(leftColumn);
if (leftColumnDisc.size() < currRow || leftColumnDisc.get(currRow-1) != disc)
break;
++totalMatches;
if (totalMatches >= NumberOfMatches)
break;
leftColumn--;
}
int rightColumn = column+1;
while (board.containsKey(rightColumn)) {
List<Disc> rightColumnDisc = board.get(rightColumn);
if (rightColumnDisc.size() < currRow || rightColumnDisc.get(currRow-1) != disc)
break;
++totalMatches;
if (totalMatches >= NumberOfMatches)
break;
rightColumn++;
}
**return** (totalMatches >= NumberOfMatches);
}
}
===================================
Disc ENUM
===================================
package Game;
public enum Disc {
R,
G,
B,
W,
Y;
}
===================================
Main Class
===================================
import Board.GridBoard;
import Game.Disc;
public class Main {
/*
R
B R B
R B R R B
- - - - - - - - -
... -3 -2 -1 0 1 2 3 4 5 ...
*/
public static void main(String[] args) {
System.out.println("Connection Board Game!");
GridBoard gridBoard = new GridBoard(4);
// Starting game
gridBoard.put(-2, Disc.Y);
gridBoard.put(-3, Disc.R);
gridBoard.put(-1, Disc.R);
gridBoard.put(0, Disc.R);
gridBoard.put(0, Disc.Y);
gridBoard.put(-1, Disc.Y);
gridBoard.put(-2, Disc.Y);
gridBoard.put(-3, Disc.B);
gridBoard.put(2, Disc.R);
gridBoard.put(1, Disc.R);
// TC: O(N) , where N is number of matches
}
}
Verdict: Moved to
next round
**
Round 2 Project Discussion + LLD [1 hour]**
- Discussed first 30 mins on any project doing in current job.
Note: They were looking for something you\'ve build from scratch in your organisation (for ex, writing code for MOON Landing mission).
- Design Chess Validator.
Focus Ares: Use best design principles, Modular code, etc.
Verdict: Moved to
next round
**
Round 3 Managerial round + HLD [1 hour]**
-
A few question on current work experience, projects, and technical aspects.
-
Design Notification Scheduler.
Focus Ares: Use best technologies, describe about each component.
Verdict: Interviewer didn\'t seem to be happy, maybe they\'re looking for more work experience.
Result: After a week, received rejection mail. No feedback on which round went well or not well.
About This Question
This is a candidate experience report from a flexport interview for a swe role (new grad level) during the phone screen round reported in 2024.
It covers the following topics: Hash Table, Arrays, Matrix, Strings .
Topics
About Flexport Interview Reports
This question was reported by a candidate who interviewed at Flexport. LeakCode aggregates interview reports from 10+ sources, including 1Point3Acres, Glassdoor, LeetCode Discuss, Blind, Reddit, Indeed, and Nowcoder. Each report is translated where necessary, deduplicated against existing entries, and tagged by company, role, round type, and reporting date.
Use this question as one calibration data point, not a memorization target. Companies typically rotate their question pools every 2-4 months; the exact wording of a 2024 question may differ from what you encounter today. The underlying pattern, difficulty level, and follow-up depth at Flexport are the higher-signal extractions to take from this report.
For broader preparation context, the Flexport interview process typically includes a recruiter screen, one or two technical phone screens, and a 4-5 round on-site loop covering coding, system design (at L4+ levels), and behavioral. Reports tagged on LeakCode show the round-by-round distribution and typical difficulty calibration. To browse questions filtered by round type and seniority, use the company hub linked above.
How To Practice This Type of Question
Solve similar problems on LeetCode under timed conditions (25-35 minutes per medium difficulty). The goal is pattern recognition: recognize the underlying technique (sliding window, two-pointer, BFS, memoized recursion, etc.) within 60-90 seconds of reading. Strong candidates verbalize their hypothesis out loud before coding, then iterate based on feedback. Weak candidates dive into implementation immediately, lose time on the wrong approach, and run out of time for follow-ups.
Companies update their question pools every 2-4 months. The exact wording of any given question may have been retired by the time you interview. Focus your prep on the pattern, not the specific problem. The patterns that appear in Flexport reports consistently are the ones worth investing in; one-off niche problems are not.
During Your Flexport Round
Apply the standard interview round template: clarify requirements (2-3 minutes), state your approach out loud and confirm direction with the interviewer (3-5 minutes), code with narration (15-25 minutes), test with concrete examples including edge cases (5 minutes), discuss optimization or trade-offs if time permits (5 minutes). This template is universally accepted across FAANG and adjacent companies; deviating from it produces weaker interviewer feedback signal.
The single most predictive failure mode in Flexport reports tagged "no hire": not asking clarifying questions. Interviewers are explicitly trained to weight this. Strong candidates ask 3-5 clarifying questions even on problems that look obvious; weak candidates dive into code immediately. The clarifying-question check is often the first signal recorded in the interviewer's written notes.