Nooks Software Engineer Interview Experience
Nooks · Entry level
Interview process
Remeber to speak up about what you are doing while solving the technical questions. Besides that it's not too bad.
Interview rounds · 2
- 1
Recruiter screen
- Q1. Why Nooks?
- Q2. Why do you want to work at a startup?
- Q3. What do you know about our company?
- Q4. Felt more like an intro/pitch of what they do than a recruiter screen
- 2
Technical round
Q1. Merge Intervals
How they answeredI copied the description of the question, so this is the correct answer to that question based on AI. I also got the right answer, but perhaps I didn't speak enough during the interview.
from typing import List, Tuple
from collections import defaultdict
class ConsensusError(Exception):
"""Raised when consensus cannot be reached"""
pass
Segment = Tuple[float, float, str]
LABELS = {"human", "silence", "machine"}
def find_consensus(
*labelers: List[Segment],
) -> List[Segment]:
"""
Combine the labels from different labelers into a single
consensus labeling, or raise a ConsensusError.
"""
# Find every boundary where any labeler changes
boundaries = set()
for segments in labelers:
for start, end, label in segments:
boundaries.add(start)
boundaries.add(end)
boundaries = sorted(boundaries)
# positions[j] tracks which segment labeler j is currently on
positions = [0] * len(labelers)
result = []
# Look at every interval between consecutive boundaries
for i in range(len(boundaries) - 1):
start = boundaries[i]
end = boundaries[i + 1]
counts = defaultdict(int)
# Get the vote from each labeler
for j in range(len(labelers)):
segments = labelers[j]
# Move forward if this labeler's current segment
# has already ended
while (
positions[j] < len(segments) - 1
and segments[positions[j]][1] <= start
):
positions[j] += 1
# Get this labeler's current label
label = segments[positions[j]][2]
counts[label] += 1
# IMPORTANT:
# We are now OUTSIDE the labeler loop.
# All 3 votes have been collected.
consensus_label = None
# Part 1: 2 out of 3 labelers must agree
for label, votes in counts.items():
if votes >= 2:
consensus_label = label
break
# If nobody has at least 2 votes, consensus fails
if consensus_label is None:
raise ConsensusError(
f"No consensus from {start} to {end}"
)
# Merge adjacent intervals with the same consensus
if result and result[-1][2] == consensus_label:
result[-1] = (
result[-1][0],
end,
consensus_label
)
else:
result.append(
(start, end, consensus_label)
)
return result
Tips from the candidate
See the code. That's the question they asked me. Besides that the recruiter screen was free. I think future rounds would've had some AI enabled coding but I didn't pass the screen.
Company culture
Seemed very laid back. The senior recruiter who interviewed me had a full tatoo sleeve.