Accusol Technologies · Software Engineer
Updated · 2026-10-02

Accusol Technologies Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Accusol Technologies is described to candidates as a company that delivers software products to clients. The Software Engineer description covers database design, application logic and system support, with some roles reaching from data integration up to the user-facing screens. In practice that means one engineer is expected to follow a feature from a table, through server code, to the page a user sees, and to help when users or internal support teams report problems.

This guide is for candidates applying as a Software Engineer at Accusol Technologies, at junior or senior level. It covers the four reported rounds, the nine reported technical questions (object-oriented programming, SQL and database work, and front-end and web technologies), a behavioral section for the face-to-face stage, and a seven-day plan. The language and tool requirements candidates describe are C#, JavaScript, jQuery and SQL with database design.

Candidates report four rounds over roughly 3-5 weeks: an Aptitude Assessment, a Technical Assessment, Face-to-Face Discussions with senior engineers, and an HR and Salary Discussion.

Object-Oriented Programming (OOP)CRUD Operations (Insert/Update/Delete)Polymorphism

35 min read

Browse Software Engineer questions

See the practice prompts

17Practice promptsAcross five skill areas

The reported questions cluster in three areas. The first is object-oriented programming: overriding versus overloading, abstraction versus interfaces, and polymorphism in a real-world scenario. The second is database work: basic create, read, update and delete statements, query optimization, and how data travels from a database into a front-end component. The third is the browser side: jQuery versus vanilla JavaScript, jQuery selectors, and the role of web services between client and back end. The requirements candidates describe name C#, JavaScript, jQuery and SQL, so examples in those languages are the natural choice.

These nine questions are broad definition-plus-example questions rather than puzzles. A bare definition is the weakest possible answer to any of them. A strong answer gives the rule, a small piece of code or a query that shows it, the trade-off against the alternative, and one case where the rule bites. Candidate tips on this loop point the same way: explain why you chose a design, not only what you wrote.

Two other parts of the loop deserve their own time. The first round is an aptitude assessment of logical reasoning, and candidates describe it as a gate before the technical stages, so it should not be left to chance. The last round is a salary conversation with HR, which rewards having your own expectations and constraints written down beforehand.

The day-to-day duties candidates read about include design and database modelling, coding and testing, code review, and troubleshooting issues raised by users or support teams. That is why the plan includes a refactoring story, a slow-query story and a debugging story from your own history, in addition to the definitions.

01

Aptitude Assessment

reported

Candidates report that the process opens with an assessment of logical reasoning, and the role requirements add that it covers mathematical reasoning as well. It is described as a gate before the technical stages. The format is a test rather than a conversation, so preparation is mostly practice with reasoning problems and a calm approach to unfamiliar ones.

What to demonstrate

  • Logical reasoning, as the round's name and description state
  • Mathematical reasoning, which candidates report alongside the logical part
  • Accuracy on a test that comes before any technical conversation

How to prepare

  • Work through reasoning sets covering number series, percentages, ratios, simple probability and arrangement or syllogism puzzles, and keep a log of the types you get wrong.
  • Practise without a calculator and decide in advance when you will skip a problem and return to it.
  • Do a few sets in the same sitting so that concentration, not only method, is rehearsed.
Accusol Technologies Software Engineer candidate reports ↗
02

Technical Assessment

reported

Candidates report hands-on technical tasks meant to show coding skills and problem-solving. Candidate tips mention writing code on a whiteboard or a computer, with attention to syntax and logical flow. A coding stage is where coding and SQL practice pays off, so rehearse writing statements and functions by hand.

What to demonstrate

  • Working code written during the stage, as the hands-on format implies
  • Problem-solving: breaking a requirement into steps and handling edge cases
  • Command of the languages the role lists, such as C#, JavaScript and SQL

How to prepare

  • Write small C# classes by hand without autocomplete: a base class with a virtual method, a derived override, and an interface with two implementations.
  • Write the four CRUD statements for a table you design yourself, including a parameterized INSERT and an UPDATE and DELETE with a WHERE clause.
  • After each exercise, list the edge cases you skipped, such as null values, empty results and duplicate keys, and rewrite the code to cover them.
Accusol Technologies Software Engineer candidate reports ↗
03

Face-to-Face Discussions

reported

Candidates report discussions with senior members of the engineering team, covering both fit and technical knowledge. Candidate tips ask for reasoning behind choices and for stories from past projects. This is the stage where the OOP, database and web questions are most naturally talked through aloud, alongside a conversation about your experience.

What to demonstrate

  • Technical knowledge, explained verbally rather than only written
  • The reasoning behind design and architecture choices
  • Fit with a team, including how you handle feedback and cross-team communication

How to prepare

  • Rehearse the object-oriented and database questions aloud, each with a definition, a short example and a trade-off.
  • Prepare two project stories in STAR form: one about speeding up a slow query and one about refactoring code toward an interface.
  • Practise explaining a technical decision to a non-technical listener in a few sentences.
Accusol Technologies Software Engineer candidate reports ↗
04

HR and Salary Discussion

reported

The final stage is reported as a conversation with HR about salary and other terms of employment. No technical questions are reported here. Preparation is about knowing your own numbers and priorities before you sit down.

What to demonstrate

  • Salary expectations and other employment terms, as the round's name states
  • Clarity about your notice period, availability and priorities

How to prepare

  • Write down your target range, your minimum and the non-salary terms that matter to you, and be ready to explain how you arrived at them.
  • Prepare short, factual summaries of your experience level and the scope of your recent projects, since offers are discussed against them.
  • List the questions you want answered about the role and the team before you accept.
Accusol Technologies Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Defining overriding and overloading in one sentence each and stopping

Give both a code example. Overloading is chosen at compile time by the argument list; overriding is chosen at run time by the object's real type, and in C# needs virtual on the base method and override on the derived one. Add the case that trips people up: a method hidden with new does not dispatch polymorphically.

02

Writing UPDATE or DELETE statements without a WHERE clause, or building SQL by joining strings

Always write the WHERE clause first, use bind parameters for every value, and mention that you would run the statement inside a transaction or after a SELECT with the same condition. Name what happens when zero rows or many rows match.

03

Answering the query optimization question with 'add an index' and nothing else

Start from measurement: read the execution plan, find the scan or the expensive join, then choose the fix. Cover selecting only needed columns, filtering on indexed columns without wrapping them in functions, avoiding repeated queries inside loops, and the write cost of extra indexes.

04

Treating the jQuery questions as either 'jQuery is obsolete' or 'jQuery is the only way'

Compare concretely: $('.item') against document.querySelectorAll('.item'), how each handles an empty match, event binding, and the added file size. Say when you would keep jQuery (an existing codebase that depends on it) and when plain JavaScript is enough.

05

Giving correct answers with no reasoning, or skipping the first-round reasoning test

Candidate tips stress explaining why behind a choice, so finish every answer with the trade-off you weighed. Candidates also describe the aptitude stage as a gate, so give it dedicated practice sets rather than assuming reasoning problems will be easy.

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

Collapse a redelivered event batch into per-aggregate high-water marks

easy
hashingat-least-onceaggregation

You drain a batch of up to 5,000,000 events, each (aggregate_id BIGINT, aggregate_version INT, event_type, payload). The log guarantees order within one aggregate only; the batch merges 64 partitions, and a relay failover has redelivered a range, so an older version for an aggregate can appear after a newer one. Given a map of last_applied_version per aggregate, produce the events worth applying, at most one per (aggregate_id, version), plus the count discarded. Target O(n) time. State the memory for 2,000,000 distinct aggregates and what you do when it does not fit.

Approach
  1. One pass, one hash map from aggregate_id to the highest version kept, and a discard counter. An event whose version is at or below last_applied_version for its aggregate is dropped without further work, which is the whole reason the event carries its version rather than a delta. O(n) expected time, O(d) space in distinct aggregates.
  2. Keep the maximum, never the last occurrence. The redelivered range means the final appearance of an aggregate in the batch can be an older version than one seen earlier in the same batch, so last-wins applies stale state over newer state and the projection regresses with no error anywhere.
  3. Cost the memory instead of calling it large: an 8-byte key plus a 4-byte version is 12 bytes of payload, and an open-addressed table held at a 0.7 load factor costs roughly 17 bytes per entry before per-slot metadata, so 2,000,000 aggregates is tens of megabytes in a native layout and several times that in a runtime that boxes both key and value.
  4. If the distinct set exceeds memory, partition on hash(aggregate_id) mod P and reduce each partition independently. Every event for one aggregate hashes to the same partition, so the per-partition result is exact and the merge is concatenation rather than a second reduction.
Follow-up
  • The payload is a patch rather than a snapshot, so applying only the highest version loses the intermediate changes. What changes in your reduction?
  • How do you detect that version 7 arrived while version 6 was never delivered, and what should the consumer do about the gap?

Find overlapping job attempts and peak concurrency from lease records

medium
sweep lineintervalsleases

A day of job_run history yields about 50,000,000 attempt records: (job_run_id, job_type, attempt, started_at, finished_at which is NULL when the worker died, lease_expires_at). Leases expire on a clock, so a job that outran its lease ran twice. Produce (a) every job_run_id whose attempts overlapped in wall-clock time and (b) the peak number of simultaneously running attempts per job_type with the minute it occurred. Target O(n log n). State how you treat a NULL finished_at and what clock skew does to your answer.

Approach
  1. Define the interval before sorting anything: an attempt occupies [started_at, COALESCE(finished_at, lease_expires_at)). finished_at is observed and lease_expires_at is only a promise, so every attempt without a finish contributes an estimate and the whole result is a lower bound on overlap rather than an exact count.
  2. For peak concurrency, sweep: emit 2n endpoints, sort by (timestamp, kind) with ends ordered before starts at equal timestamps, then walk the sequence maintaining a counter per job_type and record each type's maximum with its timestamp. O(n log n) dominated by the sort, O(n) space, or O(1) extra if the sort is external and the walk streams.
  3. For overlap detection, do not compare attempts pairwise. A single global sort by (job_run_id, started_at) gives both the grouping and the order; within a group, keep the maximum end seen so far and report an overlap exactly when the next start is less than that running maximum, which is one linear pass after the sort.
  4. Half-open intervals matter and are easy to get wrong: with closed intervals an attempt ending at the same millisecond another begins reads as concurrency two, and across 50,000,000 records that artefact swamps the real signal.
Follow-up
  • A handler is not idempotent and you have found 400 overlapping jobs. Which of them actually caused damage, and what would you query to find out?
  • Peak concurrency for one job_type is 4 against a configured cap of 4. Is the cap working, or is the data hiding attempts that never started?

Canonicalise a request body into a stable idempotency fingerprint

medium
parsingcanonicalisationhashing

idempotency_key.request_fingerprint is a SHA-256 over the method, path and canonicalised body, and a retry whose fingerprint differs must be rejected with 422 rather than served the stored response. Write the canonicaliser. Bodies are JSON up to 256 KB nested at most 32 levels; clients vary key order, whitespace and unicode escaping, and some send 64-bit ids as JSON numbers. Produce a deterministic byte string such that semantically identical bodies match and any semantic difference does not. State your complexity and name two normalisations you refuse to perform.

Approach
  1. Parse once into a tree, then re-serialise under fixed rules: object keys sorted, array order preserved, one escaping convention, no insignificant whitespace. Parsing is O(n) and sorting keys is O(k log k) per object, so O(n log n) overall with O(depth) stack, and the 32-level cap is enforced during parsing because hostile nesting is how a canonicaliser becomes a stack overflow.
  2. Sort keys by their UTF-8 bytes and say why the obvious implementation is wrong in some runtimes: a default string comparison that orders by UTF-16 code units places surrogate pairs, meaning code points from U+10000 up, below U+E000 to U+FFFF, which is not UTF-8 byte order, so two services written in different languages disagree on the same document.
  3. Do not re-encode numbers through a double. IEEE-754 binary64 represents integers exactly only up to 2^53, so normalising a 19-digit id through a float changes it, and 1 against 1.0 cannot be reconciled without deciding whether they are the same value. Preserve the literal token, and require ids as strings at the API boundary if you want them comparable.
  4. Reject duplicate keys rather than picking one. JSON permits them and parsers disagree, most keeping the last, so any choice you make ties the fingerprint to a parser detail that the code handling the request does not necessarily share.
Follow-up
  • A client sends the same logical request with an extra field your API ignores. Same key, different fingerprint, so you return 422. Is that the right answer?
  • Where does the fingerprint get computed relative to request decompression and the body-size limit?

The plan follows the reported order: reasoning practice for the first round, then OOP, SQL, query performance and web topics for the technical stages, and finally stories and a pay conversation for the last two rounds. Practice drills from PracHub's reviewed library are attached where they train the same skill.

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 four rounds and start reasoning practice
  • Write the four reported rounds on one page, and next to each, what you will do to prepare for it.
  • Complete two sets of logical and mathematical reasoning problems without a calculator and mark every miss by type (series, ratios, percentages, arrangements).
  • Plan how the next six days fit around your weakest area.

Deliverable: A one-page round map and an error log listing the reasoning problem types you missed.

02Overriding, overloading, abstraction and interfaces
  • Write a C# example with a virtual method overridden in a derived class and an overloaded method with two signatures, and state which choice is made at compile time and which at run time.
  • Write an abstract class and an interface for the same scenario, and list what each can hold (state, constructors, default behavior, multiple inheritance).
  • Say aloud your rule for choosing between them, with one example where each is the better choice.

Deliverable: One compiled C# file with both examples, plus a written rule for choosing an abstract class or an interface.

Practice prompt ↗Practice prompt ↗
03Polymorphism in a real scenario and refactoring to an interface
  • Pick a scenario you can explain in one minute, such as several payment or report types behind one interface, and write the code with a switch statement first and the polymorphic version second.
  • Describe the refactoring steps from a class that hard-codes its dependency to one that takes an interface, and what that change makes testable.
  • Record yourself explaining polymorphism using the scenario, without reading from notes.

Deliverable: A before-and-after code pair and a one-minute spoken explanation of polymorphism built on it.

Practice prompt ↗
04CRUD statements and table design
  • Design a two-table schema with a primary key, a foreign key and a unique constraint, and write the CREATE TABLE statements.
  • Write parameterized INSERT, SELECT, UPDATE and DELETE statements for it, then write down what each does when zero rows match and when a constraint is violated.
  • Do the PracHub practice drill on stopping joins from fanning out a page, then explain why a one-to-many join inflates row counts.

Deliverable: A schema, four tested CRUD statements, and a note on constraint and zero-row behavior.

Practice prompt ↗Practice prompt ↗
05Query optimization and the path from database to UI
  • Take a slow query on a table you can create locally, read its execution plan, add an index, and compare plans before and after.
  • Write the end-to-end path for populating a front-end component: query, server code or web service, JSON response, client rendering, and where you would handle errors, loading state and paging.
  • Work the PracHub debugging drill on listing latency, and note what you check first.

Deliverable: Before and after execution plans with a written explanation, and a labelled diagram of the data path from table to component.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
06jQuery, vanilla JavaScript and web services
  • Rewrite five jQuery snippets (a selector with a class and child, an attribute filter, an event handler, an AJAX call, and a show/hide) in vanilla JavaScript, and compare them.
  • Write the selector rules you rely on: ID, class, descendant, child, attribute and filter selectors, and how to cache a selection instead of repeating it.
  • Explain what a web service does between a browser and a database, including request, validation, query, serialization and response codes.

Deliverable: A side-by-side jQuery and vanilla JavaScript cheat sheet, and a one-paragraph description of a web service's role.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
07Stories, mock run and the HR conversation
  • Write two STAR stories: one on a slow query you improved and one on legacy code you made more modular, each with the decision you made and the result.
  • Run a full mock: reasoning set, one handwritten coding task, then three of the reported questions answered aloud.
  • Write your salary range, your minimum, your priorities among other terms, and questions about the role.

Deliverable: Two written STAR stories, a mock-run scorecard listing weak answers to redo, and a one-page note for the HR discussion.

Practice prompt ↗Practice prompt ↗

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

The face-to-face stage is described as a discussion with senior engineers about fit and technical knowledge, and the candidate tips ask for the reasoning behind your choices and for details from your past projects. Prepare stories where you made a technical decision, say why, and say what happened. Candidates are also advised to use the STAR structure and to explain how they would find an answer when they do not know it.

Argue against a design, lose, and commit anyway

medium
disagreementservice boundariesdecision records

Describe a design you argued against and lost. State the failure you predicted as a named mechanism, not a feeling about complexity: two services that would need one transaction, a projection with no rebuild path, a write path with no idempotency key. Say what evidence you brought, what the decision maker weighed instead, and what you did after the decision was made: what you instrumented, what you wrote down, and whether the prediction came true. Five minutes.

Approach
  1. State the prediction in falsifiable form up front: the mechanism, the condition that triggers it, and the observable outcome. A prediction that cannot be checked also cannot be credited to you later.
  2. Show the evidence you had at the time and label each piece honestly as measured, analogous, or intuition. Keeping the intuition is fine; disguising it as data is the thing that erodes your standing in the next argument.
  3. Represent the opposing case at full strength, including the constraint you did not control: a fixed date, a team boundary, or the fact that the decision was cheap to reverse and yours was not.
  4. Make disagree-and-commit concrete. Name the artefact you left behind so the prediction could be settled without you: the alert and its threshold, the counter on the dashboard, the decision note that recorded the trade-off and the condition that would revisit it.
Follow-up
  • What threshold on that alert would have proved you right, and did anyone ever look at it?
  • If the same proposal arrived tomorrow with the same deadline, would you argue it the same way?

Unblock an engineer without taking the keyboard

easy
mentoringleasesat-least-once

A teammate has spent two days on a job handler that occasionally writes duplicate rows. They are certain the queue is delivering twice by mistake. You suspect a lease expiring under a slow handler, so the job is running concurrently with itself. Describe how you have unblocked someone in this position: what you asked before offering a hypothesis, what you showed them rather than told them, and what you left them owning. Then say what you would do if their theory turned out to be the right one.

Approach
  1. Ask before diagnosing, and ask for things answerable from data they already have: the attempt count on the job rows that produced duplicates, the handler's observed duration against its lease expiry, and whether the duplicate rows share a natural key that a unique constraint could have caught.
  2. Teach the shape rather than the answer. A lease cannot distinguish a dead worker from a slow one, so a handler that outruns its lease is running twice by design, and deploys deliver the other half by killing handlers mid-run on every rollout. Both of their candidate theories produce identical duplicate rows, which is why the evidence has to come from timings rather than from argument.
  3. Hand over a checklist they execute: a natural key on every write the handler performs so the second copy collides rather than appends, the record of intent written before any external effect, a lease heartbeat while running, and the metric that shows it working.
  4. Keep ownership with them deliberately. Pair on the first write, then step back; if you finish it yourself you have closed one ticket and left the same person stuck on the next redelivery.
Follow-up
  • How would you distinguish a genuine double-delivery from a lease expiry using only the data already stored?
  • Their handler calls an external endpoint before recording that it did. What do you tell them to change first?

Ship under a deadline and bound the debt you chose

medium
paginationtechnical debttradeoffs

You have four days to ship a tenant-facing listing endpoint. The version you would defend uses keyset pagination over (tenant_id, status, updated_at DESC, resource_id DESC); the version you can finish uses LIMIT/OFFSET with no matching index. Describe a deadline call you actually made of this shape: what you shipped, what you knowingly deferred, how you bounded the damage with a mechanism rather than an intention, and the specific numeric condition that would force the follow-up. Name who you told and where you wrote it down.

Approach
  1. Name the deferred failure precisely instead of calling it slow. OFFSET n makes the database produce and discard n rows, so cost grows with page depth; without an index matching the sort, every matching row is read and sorted before the limit applies; and rows inserted between two page fetches shift across the boundary so items are skipped or repeated with nothing in the response to signal it.
  2. Bound the blast radius with something mechanical rather than a promise: cap maximum page depth, cap page size, restrict the endpoint to one internal caller, or keep it behind a flag. State which failure each cap removes and which it leaves standing.
  3. Attach a number to the trigger and wire it to an alarm: the first tenant crossing N resources, or the endpoint's p99 crossing its share of the 400 ms budget, so the debt announces itself instead of waiting to be remembered.
  4. Write it where the next engineer looks, which is the code and the ticket, not a chat message: what was deferred, why, the cap, and the trigger.
Follow-up
  • At what page depth does the offset version breach your latency budget, given your page size and row counts?
  • What breaks first when you switch to keyset pagination later, and what does a client holding an old page token see?
  • 01

    How would you refactor this legacy code to use an interface for better modularity?

  • 02

    Describe a time you had to optimize a slow-performing query.

  • 03

    Walk through a past project and the specific technical decisions you made to overcome its biggest challenge.

  • 04

    Tell me about a time you did not know the answer to a technical problem. How did you find the solution?

  • 05

    Describe a time you worked with people from other engineering disciplines and how you kept communication clear.

  • 06

    Tell me about feedback on your code from a review and what you changed because of it.

PracHub preparation framework ↗
How long should I spend preparing for the technical rounds?

Candidate guidance suggests at least two to three weeks on core OOP concepts and coding practice. The seven-day plan here is a condensed version: it works best if you already write C# and SQL regularly and use the week to turn that knowledge into spoken, example-backed answers. Spread the practice over several days; one long session is less effective than daily repetition.

Accusol Technologies Software Engineer candidate reports ↗
What makes an answer stand out on questions like overriding versus overloading?

Candidates are advised to explain their reasoning and discuss alternatives, not just state the correct answer. For a question like this, give the definition, a short code example, the compile-time versus run-time difference, and a case where you would choose one design over the other.

Accusol Technologies Software Engineer candidate reports ↗
What happens in the first round?

Candidates report an assessment of logical reasoning, and the role requirements also mention mathematical reasoning. It comes before the technical stages and is described as a gate. Prepare with timed reasoning sets covering number series, ratios, percentages and puzzles, and review your mistakes by type.

PracHub Software Engineer practice ↗
What topics does Accusol Technologies test in interviews?

Candidates report object-oriented programming (overriding, overloading, abstraction, interfaces, polymorphism), CRUD statements, SQL querying and query optimization, writing code, and front-end topics such as jQuery selectors, jQuery versus vanilla JavaScript, and web services. The requirements candidates describe list C#, JavaScript, jQuery, SQL and database design.

Accusol Technologies Software Engineer candidate reports ↗
What if I don't know the answer to a technical question?

Candidate tips say to explain how you would go about finding the answer. In practice, state what you do know, name the nearest concept, and describe the steps you would take, such as reading the documentation, running a small test or checking the execution plan. Do not guess at details and present them as fact.

PracHub Software Engineer practice ↗
How should I prepare for the HR and salary discussion?

It is the last of the four reported rounds and covers salary and other employment terms. Decide your target range, your minimum and which non-salary terms matter to you, and be ready to explain your experience level with specific projects. Prepare questions about the role so the conversation goes both ways.

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.