π My Tekion Frontend Engineer Interview Experience (2025) | Software Engineer II

π Role: Software Engineer II (Frontend)
π’ Company: Tekion Corp
π― Topics Covered: JavaScript DSA, Currying, Polyfills, Machine Coding, System Design
ποΈ Total Rounds: 4 (DSA, Machine Coding, LLD + HLD, HM Discussion)
π§ Round 1: Data Structures & Algorithms
1οΈβ£ Polyfill for bind()
Method in JavaScript
π Concept Tested: Understanding of this
, closures, and function binding.
// β
Polyfill for Function.prototype.bind
Function.prototype.myBind = function (thisContext, ...argsArray) {
const parentFunction = this; // π Store the original function (the one we're binding)
// π Return a new function that captures both initial & later arguments
return function bindedFun(...funArgs) {
// π Use apply() to call the original function with 'thisContext' and combined arguments
return parentFunction.apply(thisContext, [...argsArray, ...funArgs]);
};
};
const obj = {
name: 'Gourav',
};
function test(age) {
console.log(this.name, age); // π 'this' refers to the bound context
}
let bindedFunc = test.myBind(obj); // π Bind 'obj' as the context
bindedFunc(29); // β
Output: Gourav 29
Problem Statement
π‘ Key Takeaways
apply(context, args)
allows dynamic function invocation with customthis
.- The polyfill ensures:
this
context is fixed.- Arguments can be passed in two stages: at bind time and at call time.
- This is helpful in React event handlers, callbacks, and more.
π‘ JavaScript Tip: .bind()
returns a new function with a fixed this
context. Closures help preserve context across invocations.
2οΈβ£ Currying Function in JavaScript
π Concept Tested: Higher-order functions, recursion, and argument handling.
// β
Generic Curry Function in JavaScript
function curry(func) {
// Returns a new function that handles currying
return function myCurried(...args) {
// π If enough arguments are provided, call the original function
if (args.length >= func.length) {
return func(...args); // β
Call original function with collected args
} else {
// π Not enough args yet β return a function that takes more
return (...args2) => myCurried(...args, ...args2); // π Keep collecting
}
};
}
function test(a, b, c) {
return a + b + c; // Simple function that takes 3 arguments
}
const curriedFunction = curry(test);
console.log(curriedFunction(1, 2, 3)); // β
Output: 6
console.log(curriedFunction(1, 2)(3)); // β
Output: 6
console.log(curriedFunction(1)(2)(3)); // β
Output: 6
Problem Statement
π§ JavaScript Tips
func.length
gives the number of expected parameters for a function.- This technique is useful when:
- You're building functional pipelines.
- You want partial application (pre-filling some arguments).
- Currying helps make your code more modular and reusable β»οΈ
π‘ Note: Currying transforms a multi-argument function into a series of unary functions.
3οΈβ£ Machine Coding β π Stopwatch Component (React)
π Functionalities:
- Play / Pause β―οΈ
- Stop βΉοΈ
- Reset π
π‘ Tip: Use useRef
to persist timers and useEffect
for cleanup.
π§© Round 2: Low-Level Design (LLD)
1οΈβ£ Word Guess Game π©π¨β¬ (Similar to Wordle)
π UI-Driven Machine Coding Task

Asked:
- Error & success handling logic
- Grid rendering performance
- Keyboard UX design
π‘ Tip: Use a 2D array to represent the board state, map user input to that structure, and validate against the correct word using character-wise comparisons.
2οΈβ£ Polyfill for componentDidUpdate()
in Functional Components
import { useEffect, useRef } from 'react';
/**
* π useComponentDidUpdate
* A custom React hook that mimics `componentDidUpdate` lifecycle behavior.
* It skips the initial render and only runs the callback on updates.
*
* @param {Function} callback - Function to be called on update.
* @param {Array} deps - Dependency array to watch for changes.
*/
function useComponentDidUpdate(callback, deps) {
const hasMounted = useRef(false); // π§ Keeps track if component has mounted
useEffect(() => {
if (hasMounted.current) {
// β
Run callback only on updates (not initial mount)
callback();
} else {
// π Skip the first render
hasMounted.current = true;
}
}, deps); // π Watch these dependencies
}
Code Block
π‘ Note: Mimics class-based componentDidUpdate()
for functional components by skipping the first render.
ποΈ Round 3: High-Level Design (HLD)
1οΈβ£ tekion.com Performance Optimization π
- Lazy Loading & Code Splitting β with
React.lazy
and dynamic imports - SSR & Caching β Reduce FCP & TTFB
- CLS, LCP, TBT fixes β Optimize image loading, reduce heavy JS
- Debounce API Calls & use
IntersectionObserver
for lazy UI
2οΈβ£ Machine Coding: π§± Dynamic Grid Component
π Build a reusable grid based on:
- Row/column input
- Efficient rendering on large data
π‘ Use memoization (React.memo
, useMemo
) and virtualization (react-window
) to handle large datasets.
π€ Round 4: Hiring Manager Discussion
Topics Discussed:
- Current architecture & tech stack at my company
- System Design for π Flipkart Search Bar (pagination, throttling, autocomplete)

- Verbal Design of π LinkedIn Notification Section
- Real-world conflict handling with dev teams
- My motivation to join Tekion
πΈ Offer Details
Component | Value |
---|---|
π§βπ» Designation | Software Engineer II |
π’ Mode | Hybrid |
π° Fixed CTC | βΉ36L |
πΈ Joining Bonus | βΉ3L |
πͺ Retention Bonus | βΉ1L |
π ESOPS | βΉ44L (6000 units @ $9) |
π¦ Total 1st Year | βΉ51L |
Hey there from LearnYard! π
Glad to see you exploring the free content from our course! Weβve shared 10 valuable articles at no cost to help you get a real feel of whatβs inside.
If youβve found these helpful, weβd love to know! π¬
Share your thoughts or key takeaways on LinkedIn, Twitter, or Instagram β and donβt forget to tag Gourav Hammad & Mohammad Fraz. Weβll personally respond to your post!
Thanks for being part of the LearnYard journey. Keep learning, keep growing! π
Loved the free content? Want access to the full course β for free? πΈ
Hereβs how: share the course with your friends using your affiliate link (youβll find it on your profile or home page), and earn 20% commission on each sale.
Just 4β5 sales and youβll recover the full course price of βΉ999/- π
So why wait? Start sharing, start earning, and unlock the rest of the course effortlessly! π οΈπ
π‘ Tips to Crack the Tekion Interview
- Master JavaScript fundamentals: closures,
this
, promises, async/await - Practice Polyfills for core JS methods (
bind
,call
,apply
,debounce
,throttle
) - Build and refactor real-world UI components (e.g., Stopwatch, Grid, Wordle)
- Focus on DSA with JavaScript β arrays, strings, maps, recursion
- Be ready for machine coding and system design discussions
- Show clarity in code structuring, naming, and performance optimizations
- During HM round: Highlight ownership, decision-making, and team collaboration
π Recommended Topics to Prepare
- JavaScript ES6+ (spread, rest, destructuring, arrow functions)
- React Hooks (
useEffect
,useMemo
,useCallback
, custom hooks) - Component lifecycle and render optimizations
- Low-Level Design (LLD): Modals, Search Bar, Grid, Wordle
- High-Level Design (HLD): Architecture of scalable apps
- Problem Solving with recursion, sliding window, and frequency maps
- Event loop, microtasks/macrotasks, and async behavior
π’ Hashtags for Visibility
#TekionInterview #FrontendInterview #JavaScriptDSA #ReactMachineCoding #SystemDesignFrontend #TechInterviewTips #FrontendEngineering #WebDevelopment #JavaScriptMastery #TechJourney #LearnYard