CertiK · Software Engineer
Updated · 2026-10-02

CertiK Software Engineer
Interview Guide

THE 60-SECOND BRIEF

CertiK works in blockchain security. Candidates describe its product line as smart contract audits, security tools and blockchain infrastructure. A Software Engineer there is described as building software on the security side of decentralized applications: projects meant to keep smart contracts and dApps robust against vulnerabilities and performance bottlenecks. Candidates also describe code review, shaping specifications with cross-functional teams, and work that runs from gathering requirements through release and maintenance.

This guide is for candidates interviewing for the Software Engineer role at CertiK. It covers the three reported rounds (Phone Screen, Technical Interview, Behavioral Interview), the languages and topics candidates link to the role (Python, JavaScript, Solidity, React, algorithms, plus Solidity compiler frontend and formal methods in the topic breakdown), and the reported questions across language concepts, case studies, coding, system design and behavioral prompts.

Candidates report three rounds over about 3-5 weeks: a Phone Screen on background and fit, a Technical Interview that may include coding challenges or case studies, and a Behavioral Interview on fit and interpersonal skills.

Solidity Compiler FrontendFormal MethodsReact

31 min read

Browse Software Engineer questions

See the practice prompts

17Practice promptsAcross five skill areas

The work candidates describe sits where general software engineering meets blockchain security. The product line they list is smart contract audits, security tools and blockchain infrastructure, and the role is described as building secure software for decentralized applications, reviewing code and working through requirements with other teams. That is why the reported questions mix two kinds of material: engineering fundamentals that any backend or full-stack candidate meets (synchronous versus asynchronous code, interfaces, debugging, API design, microservice scalability), and a smaller group with a blockchain flavour (a transaction-processing system, fraud analysis on transaction histories, a dApp for digital identities).

The requirements candidates describe name Python, JavaScript and Solidity, a solid grounding in algorithms and data structures, and experience with web frameworks. Familiarity with blockchain, cloud platforms such as AWS or Azure, and DevOps practice is described as a plus rather than a requirement, and candidates mention 3-5 years of development experience and a computer science degree. The topic breakdown for this loop adds Solidity, Solidity compiler frontend, formal methods, React and algorithmic problem solving. No specific question is reported for compiler frontend or formal methods, so treat them as areas where your resume may be probed and make sure you can explain the basics.

For preparation, split your time across three layers. First, the three reported coding questions (maximum profit from stock prices, hash table implementation and complexities, balanced binary tree check) are small enough to master fully, including edge cases and complexity. Second, the design and case-study questions reward a structured method: scope, components, failure behaviour, then trade-offs. Third, the behavioral round is reported as an assessment of fit and interpersonal skills, with prompts on team conflict, prioritizing across projects and motivation, so each needs a real story or a concrete framework prepared in advance.

01

Phone Screen

reported

Candidates describe the Phone Screen as an opening call about your background and how well you fit the role. No technical content is reported for it, so treat it as the first chance to link your experience to what the role involves: Python, JavaScript or Solidity work, web development, and anything touching security or blockchain. Have a short, structured account of your career and a clear reason for wanting security-focused blockchain work.

What to demonstrate

  • Your background and how it maps to the Software Engineer role
  • How clearly you can summarize your own projects and contributions
  • Fit with the role as candidates describe it, including language and web framework experience

How to prepare

  • Write a concise career narrative that ends with why security-focused blockchain engineering, and rehearse it aloud until it holds together without notes.
  • List your projects with the language, your specific contribution and one concrete outcome each; mark which ones used Python, JavaScript, Solidity or a web framework.
  • Skim blockchain basics (blocks, transactions, hashing, signatures, smart contracts) so you can follow and join a conversation about them even if you have not built on a chain.
  • Ask what the later stages cover, so you know whether coding or case studies are expected next.
CertiK Software Engineer candidate reports ↗
02

Technical Interview

reported

Candidates describe the Technical Interview as a stage that may include coding challenges or case studies. It is where the reported coding questions are practised: maximum profit from stock prices, hash table implementation with its complexities, and the balanced binary tree check. The reported case-study and design questions cover a blockchain transaction-processing system, fraud analysis over transaction histories, a digital-identity dApp, API design factors and microservice scalability. Language and engineering concept questions (synchronous versus asynchronous, interfaces, debugging a complex issue) are also reported for this loop. Practise writing working code first, then explaining it, and for design questions state scope and assumptions before components.

What to demonstrate

  • Working, correct code for algorithm and data structure problems
  • Structured reasoning from requirements to design in a case study
  • Command of core concepts such as asynchronous execution, interfaces and debugging method
  • How well you explain technical choices and their trade-offs

How to prepare

  • Solve the stock-price profit, hash table and balanced-tree problems in your strongest language until you can state the complexity and list edge cases without prompting.
  • Write a one-page outline for the blockchain transaction-processing design: submission, validation, ordering, confirmation, retries and failure handling.
  • Prepare a fraud-analysis plan for transaction histories: what counts as fraud, which features and rules you would start with, how you would validate findings.
  • Practise explaining synchronous versus asynchronous behaviour and the purpose of interfaces using a concrete example in Python or JavaScript.
CertiK Software Engineer candidate reports ↗
03

Behavioral Interview

reported

Candidates describe the Behavioral Interview as an assessment of fit with the company culture and of interpersonal skills. The reported prompts are about handling a conflict in your team, prioritizing across multiple projects and what motivates you; a prompt about persuading teammates to adopt your approach is also mentioned. Prepare specific stories in which you made the decisions, and give each one a clear situation, the options you weighed, the action you took and a result you can state.

What to demonstrate

  • Fit with the company culture, as the round is described
  • Interpersonal skills: handling disagreement, persuading peers, working with a team
  • How you reason about priorities and your own motivation

How to prepare

  • Write three stories with named decisions and results: a team conflict, a prioritization under competing deadlines, and a time you persuaded others to adopt your approach.
  • Prepare a spoken answer for what motivates you, backed by two real examples from your work history.
  • Review the responsibilities candidates describe (code review, cross-functional specification work) and pick a story from your own experience that shows each.
  • Rehearse each story aloud so the situation takes a couple of sentences and the rest covers your decisions and what changed.
CertiK Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Answering the synchronous-versus-asynchronous or interfaces question with a textbook definition only

Pair each definition with a concrete example in a language you use, such as Python asyncio or JavaScript promises. Say when blocking code is the right choice, and show an interface decoupling a caller from an implementation you can swap, for instance a test double.

02

Giving hash table complexity as plain O(1) and missing the balanced-tree edge cases

Separate average from worst case for the hash table, mention load factor, resizing and collision handling, then state the cost of each operation. For the balanced-tree question, avoid recomputing heights at every node; return height and balance status in one pass. For the stock prices question, handle empty input and falling prices, where the best profit is zero.

03

Opening the blockchain transaction-processing or digital-identity design with buzzwords instead of scope

Ask who submits transactions, how many, and what finality the user needs. Then separate submission, validation, ordering and confirmation, and say what happens on retries, duplicates and failures before you add components.

04

Treating the fraud-analysis case as 'train a model' without defining fraud

Define what fraud means for these transactions, list the features and rules you would examine first (amounts, velocity, counterparties, timing), choose a baseline, and say how you would validate findings and cost false positives.

05

Telling behavioral stories where you were a bystander, or where the conflict has a villain and no resolution

Choose stories where you made the decision, give the other side's reasonable position, show the evidence you used, and state the outcome and what you would change.

Choose a category, try a prompt, then open its approach, worked solution or follow-up when you need it.

14 technical prompts0 include a worked solution

Explain the differences between synchronous and asynchronous programming.

medium
Technical / Domain Questions

Explain the differences between synchronous and asynchronous programming.

Approach
  1. Define both precisely: a synchronous call blocks the caller until the result is ready, so control follows source order; an asynchronous call starts the work and returns at once, and the result arrives later through a callback, a promise/future, or resumption after await.
  2. Separate asynchrony from parallelism: a single-threaded event loop (JavaScript, Python asyncio) interleaves tasks at await points, which is concurrency without parallel execution. CPU-bound work still blocks the loop, so I move it to worker threads or processes (worker_threads, ProcessPoolExecutor).
  3. Give the case where it pays: I/O-bound fan-out. Issuing ten RPC or HTTP calls with Promise.all or asyncio.gather makes total latency roughly the slowest call instead of the sum of all ten.
  4. Name the pitfalls: a missing await (an unhandled rejected promise in JS, a coroutine that never runs in Python), errors that surface far from their cause, shared state changing between await points even on one thread, and unbounded concurrency that needs a semaphore or pool limit.
Follow-up
  • If one call inside Promise.all rejects, what happens to the others, and when would you use Promise.allSettled instead?
  • How would you call a blocking library from inside async code without stalling the event loop?
  • Would making a CPU-heavy hashing routine async make it faster? Why or why not?

Write a function to calculate the maximum profit from an array of stock prices.

medium
Coding / Algorithms

Write a function to calculate the maximum profit from an array of stock prices.

Approach
  1. Clarify the variant: the standard version allows one buy followed by one later sell and returns 0 when no profit is possible; empty or single-price arrays also return 0.
  2. Name the brute force: try every buy/sell pair with i < j, O(n^2) time, O(1) space.
  3. Give the one-pass solution: keep the minimum price seen so far and, at each price, update best = max(best, price - minPrice), then update minPrice. O(n) time, O(1) space; a strictly decreasing array correctly yields 0.
  4. Be ready for the other variants: unlimited transactions is the sum of all positive day-to-day differences, O(n); at most two transactions is a four-variable DP in O(n); at most k transactions is a DP in O(n*k); a cooldown or fee is a small hold/cash state machine.
  5. Test aloud with edge cases: [7,1,5,3,6,4] gives 5, [7,6,4,3,1] gives 0, a single element gives 0, and equal prices give 0.
Follow-up
  • How does the solution change if you may make as many transactions as you like?
  • Now allow at most two transactions. What state do you track?
  • Return the buy and sell days as well as the profit. What changes?

Explain how you would implement a hash table and what its time complexities are for various operations.

medium
Coding / Algorithms

Explain how you would implement a hash table and what its time complexities are for various operations.

Approach
  1. Describe the structure: an array of buckets, with index = hash(key) mod capacity (or hash & (capacity - 1) when capacity is a power of two, which needs a hash whose low bits are well mixed), plus an equality check to confirm the key.
  2. Explain collision handling: separate chaining keeps a list per bucket (Java's HashMap converts a bucket to a red-black tree at 8 entries once the table has at least 64 buckets); open addressing probes for the next free slot (linear, quadratic or double hashing), is cache-friendly, and needs tombstones for deletion. CPython's dict uses open addressing.
  3. State complexities: insert, lookup and delete are O(1) on average with a good hash and a bounded load factor; worst case is O(n) when keys collide (O(log n) per bucket with Java's treeified bins).
  4. Cover resizing: when the load factor passes a threshold (0.75 by default in Java's HashMap) I allocate a larger array, typically double, and rehash every entry. That insert costs O(n), but doubling keeps inserts amortized O(1).
  5. Mention the edge cases: mutating a key after insertion strands it in the wrong bucket, and attacker-chosen keys can force collisions (hash flooding), which is why Python uses keyed SipHash for str and bytes.
Follow-up
  • How do you delete under linear probing without breaking later lookups?
  • How would you make the table safe for concurrent readers and writers?
  • Why does a power-of-two capacity help, and what does it demand of the hash function?

Given a binary tree, write a function to check if it is balanced.

medium
Coding / Algorithms

Given a binary tree, write a function to check if it is balanced.

Approach
  1. Pin the definition: a tree is height-balanced when, at every node, the heights of the left and right subtrees differ by at most 1. Checking only the root is wrong, because both root subtrees can share a height while a deeper node is unbalanced.
  2. Name the naive version: call a height function at every node top-down. That recomputes heights, costing O(n^2) on a skewed tree and O(n log n) on a balanced one.
  3. Give the optimal version: a post-order recursion that returns the subtree height, or -1 as a sentinel once any subtree is unbalanced, and stops early on -1. Each node is visited once: O(n) time, O(h) stack space.
  4. Handle edge cases: an empty tree is balanced, a single node is balanced, and a degenerate chain of many nodes can exceed Python's default recursion limit of 1000, so an iterative post-order with an explicit stack and a height map is the safe fallback.
  5. Distinguish the term from 'complete' or 'perfect' trees, and note this is the same invariant AVL trees maintain.
Follow-up
  • Write it iteratively without recursion.
  • Return the lowest node at which the balance condition fails.
  • Given an unbalanced binary search tree, how would you rebalance it?

A seven-day plan that follows the three reported rounds: fundamentals and the profile conversation first, coding and concept questions next, then design, role-specific topics and behavioral stories.

Small steps. Visible outcomes.0 / 7 completed
ONE WEEK · YOUR PACE

Prepare, practise & reflect

One practical outcome each day. Spend longer where you need it.

0 / 7 done
01Map the loop and your own profile
  • Write the three reported rounds on one page (Phone Screen, Technical Interview, Behavioral Interview) and note what each stage is described as covering.
  • List each project you could discuss, with its language (Python, JavaScript, Solidity or a web framework), your contribution and a concrete outcome.
  • Write a one-page sheet of blockchain fundamentals: blocks, transactions, hashing, digital signatures, what a smart contract is, and what a fork is.

Deliverable: A one-page loop map, a project inventory with language and outcome, and a blockchain fundamentals sheet.

02Coding fundamentals
  • Solve the stock-price maximum profit problem in one pass, and test it on empty input and on strictly falling prices.
  • Implement a hash table with chaining and resizing; write the average and worst-case cost for insert, lookup and delete.
  • Write the balanced binary tree check in O(n) by returning height and balance together, then compare it with the naive approach.

Deliverable: Three working solutions in your strongest language, each with a complexity note and an edge-case list.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
03Concepts and debugging method
  • Write a short explanation of synchronous versus asynchronous programming with one code example each in Python and JavaScript.
  • Explain the purpose of interfaces with an example where swapping an implementation is useful, such as replacing a real service with a test double.
  • Write a debugging walkthrough from a real bug you fixed: symptom, reproduction, bisection, root cause, fix, regression test.

Deliverable: Two short written explanations with code, and one debugging walkthrough.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
04Blockchain-flavoured design
  • Outline a transaction-processing system: how transactions are submitted, validated, ordered and confirmed, including duplicate handling and retries.
  • Outline a digital-identity dApp: what is stored on-chain, what stays off-chain, and how a user proves ownership without exposing personal data.
  • For each outline, list the first thing that breaks at ten times the load and what you would do about it.

Deliverable: Two design outlines, each with components, failure behaviour and a scaling bottleneck.

Practice prompt ↗Practice prompt ↗
05API, microservices and analysis
  • Write a checklist of API design factors for a service: versioning, idempotent retries, error taxonomy, pagination, authentication.
  • Write a scalability plan for a microservices system: stateless services, queues, caching, database partitioning and observability.
  • Write a fraud-analysis plan for transaction histories, and work the practice SQL question on why an owner filter ignores a listing index to practise query tuning.

Deliverable: An API checklist, a microservice scalability plan, a fraud-analysis plan and a worked query-tuning answer.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
06Role-specific topics
  • Write brief notes on Solidity basics: storage versus memory, require and revert, events, and reentrancy with the checks-effects-interactions fix.
  • Build a small tokenizer and recursive-descent parser for arithmetic expressions to understand the stages of a compiler frontend.
  • Write loop invariants and pre- and postconditions for your day 2 solutions, and define model checking, theorem proving and SMT solving in a sentence each.
  • Build a React component that fetches a list from an API and shows loading, error and empty states.

Deliverable: A Solidity notes page, a working parser, annotated invariants for the day 2 code and one React list component.

07Behavioral stories and a full rehearsal
  • Write the team-conflict story and the prioritization answer in the situation, options, action, result form, and say each aloud.
  • Prepare an answer on what motivates you, with two examples, plus a story about persuading teammates to adopt your approach.
  • Pick your strongest technical challenge for the project question and rehearse it, then run one full spoken pass of the weakest design outline.

Deliverable: Four rehearsed stories (conflict, prioritization, motivation, persuasion), one project story and one spoken design pass.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗

Expand any day for tasks and deliverables. Your progress is saved on this device.

The Behavioral Interview is reported as an assessment of fit and interpersonal skills, and the reported prompts cover team conflict, prioritizing across projects and what motivates you. The role is described as collaborative, with code review and cross-functional specification work, so choose stories that show you working with others and making decisions. Rehearse each as situation, options, action and result.

Describe a time when you had to handle a conflict within your team.

medium
Behavioral / Leadership

Describe a time when you had to handle a conflict within your team.

Approach
  1. Choose a conflict where the disagreement had a technical or delivery stake, such as two designs, a review dispute or a deadline against quality, and where you personally took action rather than observing.
  2. Set the scene briefly: who disagreed, what each side wanted, and why both positions were reasonable. Do not cast the other person as the problem.
  3. Show how you resolved it with evidence: a prototype, a benchmark, a written comparison of options, or a conversation to understand the other person's constraint first.
  4. State the outcome and the relationship afterwards, including any process change that stopped the same conflict from recurring.
  5. The mistake that sinks this answer is a story where you were simply right, or where nothing was resolved. Include what you would adjust in your own behaviour.
Follow-up
  • What would you do differently if you faced the same disagreement again?
  • How do you work with that person now?
  • What if the person you disagreed with had been more senior than you?

How do you prioritize tasks when working on multiple projects?

medium
Behavioral / Leadership

How do you prioritize tasks when working on multiple projects?

Approach
  1. Lead with the method, then prove it with one real example. A usable method: list every commitment with its deadline, impact and who is blocked by it, then rank by impact and urgency.
  2. Show the trade-off being made explicit: what you moved first, what you postponed, and who you told. Name the person you confirmed the ranking with when stakeholders disagreed.
  3. Give a concrete case, for example a production defect that put users at risk against a planned feature, and say how you decided which one went first and what you reported to the other stakeholders.
  4. Cover the follow-through: how you track the list, how you re-rank when something new arrives, and when you ask for help or push back on scope.
  5. The mistake that sinks this answer is saying you work longer hours or multitask; it names no criteria and shows no decision.
Follow-up
  • Two stakeholders each say their request is the top priority. What do you do?
  • What did you drop, and how did you tell the people affected?
  • How do you re-prioritize when something urgent arrives mid-week?

What motivates you to perform at your best?

medium
Behavioral / Leadership

What motivates you to perform at your best?

Approach
  1. Name two or three genuine drivers, such as hard problems, ownership of an outcome, learning from stronger peers, or visible user impact, and pair each with a concrete moment from your work where it showed.
  2. Tie at least one driver to the work this role involves as candidates describe it (security of decentralized applications, code review, collaborating on specs), but only where it is true for you.
  3. Describe the conditions under which you do your best work: the kind of feedback, autonomy and team setting, backed by an example where those conditions produced a result you can state.
  4. Keep it grounded and brief: one example per driver, no list of abstract virtues.
  5. The mistake that sinks this answer is a generic reply (passion, money, teamwork) with no evidence, or a driver that contradicts the role.
Follow-up
  • What demotivates you, and how do you handle it when it happens?
  • Describe a stretch when your motivation was low and what you did about it.
  • How do you stay engaged on repetitive maintenance work?
  • 01

    Describe a time when you had to handle a conflict within your team.

  • 02

    How do you prioritize tasks when working on multiple projects?

  • 03

    What motivates you to perform at your best?

  • 04

    Describe a time you had to persuade others in your team to adopt your approach.

  • 05

    Describe a challenging technical problem you faced in a previous project and how you resolved it.

PracHub preparation framework ↗
How many rounds are there and how long does the process take?

Candidates report three rounds: a Phone Screen, a Technical Interview and a Behavioral Interview. Reported timing is about 3-5 weeks, and one set of reports gives 2-4 weeks. The shape can vary by team and level, so ask the recruiter what each stage covers.

PracHub Software Engineer practice ↗
Which programming languages should I prepare?

The requirements candidates describe name Python, JavaScript and Solidity, with web frameworks and React also mentioned. For coding questions, use the language you are strongest in; for role-specific topics, be able to discuss any of these languages that appear on your resume.

PracHub Software Engineer practice ↗
Do I need blockchain experience?

Candidates describe blockchain familiarity as a nice-to-have, not a requirement. Even so, several reported questions have a blockchain flavour (a transaction-processing system, a digital-identity dApp, fraud analysis on transaction histories), so learn the fundamentals: blocks, transactions, signatures, smart contracts and what finality means.

PracHub Software Engineer practice ↗
What kinds of questions are reported?

They span five groups: language and engineering concepts (synchronous versus asynchronous, interfaces, debugging), case studies, coding (stock-price profit, hash table, balanced binary tree), system design (dApp, API design, microservice scalability) and behavioral prompts. Candidates also mention object-oriented design patterns and optimizing a slow database query as example topics.

PracHub Software Engineer practice ↗
Should I prepare Solidity compiler frontend and formal methods?

They appear in the topic breakdown for this loop, but no specific question is reported for either. Prepare the basics: the stages of a compiler frontend (lexing, parsing, syntax tree, type checking) and what loop invariants, pre- and postconditions and model checking mean. Go deeper if your resume lists them.

PracHub Software Engineer practice ↗
How should I prepare for the Behavioral Interview?

Prepare specific stories rather than general principles. Cover a team conflict, prioritization across competing projects, your motivation and a time you persuaded teammates. For each, state the situation briefly, the options you weighed, what you did and what changed as a result.

PracHub Software Engineer practice ↗
Sources & methodology 3 sources ↗

No official company page is cited. Rounds and questions come from candidate reports and PracHub editorial material; each source shows the date it was read.