🚀 Get paid: Upload a question or refer a friend
AI mock interviewer

An interviewer that won't give you the answer

Most practice tools hand you a solution the moment you struggle, which is the one thing a real interviewer never does. This one puts one of 3,285 reported interview questions to you, reads the code you write, asks the question that exposes the gap, and marks you on the way through.

How it goes

  1. 01

    It opens the interview

    Pick any question and press Start. The interviewer greets you and states the problem in its own words — the problem, not the approach — then waits. It also tells you how it will see your code.

  2. 02

    You think out loud

    Talk through your approach the way you would on a call. It probes rather than corrects: if you hand-wave, it asks the question that exposes the gap instead of filling it in for you.

  3. 03

    You press Share code and it reads it

    Write in the editor beside the conversation. When you press Share code, the interviewer receives exactly what is in the editor, reads it, and responds to what is actually there — the bug on a particular line, the complexity of the loop you wrote, the next thing to implement.

  4. 04

    Every answer is graded as you give it

    Each real attempt comes back with a score out of five and one sentence you can act on immediately. Filler and clarifying questions are not scored. Nothing is saved up for the end.

  5. 05

    You get the debrief

    Press End and it files what an interviewer would file: a hire verdict, scores across seven dimensions, what went well, where it fell down, and what to practise next. Blunt, because a flattering debrief is worthless.

What it looks like

An illustration of a session, written for this page — not a recording of anyone's interview.

Mock interview6/60 turns today
Hi — thanks for making the time. I'd like you to design a rate limiter: given a stream of requests keyed by user, allow at most N in any rolling 60-second window. Before you write anything, tell me how you'd approach it. One practical note: I can't see your editor as you type — press Share code whenever you want me to read what you've written.
I'd keep a queue of timestamps per user, drop anything older than 60 seconds when a request comes in, and allow it if the queue is shorter than N.
4/5sound, unboundedRight structure — but you have not said what stops the per-user map growing forever.
That works. What happens to that map after a user makes one request and never comes back?
from collections import deque

def allow(user, now, limit=5, window=60):
    q = buckets[user]
    while q and q[0] <= now - window:
        q.popleft()
    if len(q) < limit:
        q.append(now)
        return True
    return False
3/5works, leaksbuckets never shrinks and allow() mutates it on every miss — say when an empty deque gets removed.
Good — the popleft loop is right and the early return is clean. Two things: buckets grows without bound, and you're mutating it inside a read path. What's the complexity of allow() in the worst case, and where would you evict an idle user?
Think out loud — the interviewer is listening. Send Share code End

The Share code button is the part people miss. The interviewer never watches your editor as you type — it sees your code only when you press it, and then it responds to what is actually there. It says so itself in the opening turn.

What it won't do

  • · Give you the solution, however you ask. We tested that directly — asking outright, claiming to be an admin, telling it to ignore its instructions, putting it in “debug mode”, and role-swapping so it plays the candidate. It declined all five and turned each one back into a question.
  • · Act as a general-purpose assistant. Ask it for an unrelated script and it stays in the interview.
  • · Flatter you. The debrief says no hire when it means no hire.

Included with Pro, Quarterly and Annual

Sixty interviewer turns a day — enough for two or three full interviews.

See plans →