Notion logo

Notion Software Engineer Coding Questions

28 practice questions for Notion Software Engineer interviews

Notion software engineer interviews cover algorithms, data structures, system design, and coding problems drawn from real interview rounds.

All Roles Software Engineer Backend Engineer Frontend Engineer Full Stack Engineer Mobile Engineer Data Engineer Data Scientist ML Engineer DevOps Engineer DevOps Engineer Product Manager SRE Security Engineer Engineering Manager Data Analyst UX/UI Designer QA Engineer

No verified questions yet for Notion.

coding Hard backtracking #1

1. [OA] Backtracking — Generate Notion-like Markdown from block types

Notion allows users to create various types of blocks that can include textual content, images, and to-do lists. We want to generate all possible Markdown representations from given block types.
The task is to implement a function to produce all combinations of Markdown representations for these blocks using backtracking.
Function Signature:
- def generateMarkdown(blocks: List[str]) -> List[str]:
where blocks contains strings representing different block types like 'text', 'image', 'todo'.
Example 1:
Input: blocks = ['text', 'image']
Output: ['text', 'image', 'text
image', 'image
text']

Explanation: Each block can occupy a position individually or combined in a sequence.
Example 2:
Input: blocks = ['text', 'todo']
Output: ['text', 'todo', 'text
todo', 'todo
text']
Constraints:
- 1 <= blocks.length <= 10
- blocks[i] consists of unique types only.
coding Hard sliding window #2

2. [OA] Sliding Window — Calculate current view state in Notion’s real-time collaboration

In Notion, when many users are editing a shared document, we need to maintain a view of their changes in real time. Using the sliding window technique can help us efficiently track the changes.
The problem is to implement a function that can track the number of changes made within a specific viewing window of time.
Function Signature:
- def countChanges(changes: List[Tuple[int, int]], window: int) -> int: where changes is a list of tuples representing changes with start and end times.
Example 1:
Input: changes = [(1, 4), (2, 5), (5, 7)], window = 3
Output: 3
Explanation: Changes are made at times 1, 2, 4, 5, 6, 7; within the window [1, 4], there are 3 changes.
Example 2:
Input: changes = [(1, 2), (2, 6), (5, 10)], window = 5
Output: 3
Explanation: All changes occur within the single 5 unit time frame.
Constraints:
- 1 <= changes.length <= 10^5
- 1 <= changes[i][0], changes[i][1] <= 10^9

Related Notion Software Engineer interview prep

Start practicing Notion questions

Sign up for free to access walkthroughs, AI-generated questions, and more.

Get Started Free