Anxion Webtech Private · Software Engineer
Updated · 2026-10-02

Anxion Webtech Private Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Candidates describe Anxion Webtech Private as a company that runs web-based services. The Software Engineer role builds and maintains the code behind those services: turning business requirements into working features, with work that mixes front-end pages and back-end database handling. Candidates list PHP or Python, SQL and HTML/CSS as the skills the role asks for, with Git, basic web security and familiarity with web frameworks as extras.

This guide is for a candidate applying as a Software Engineer at Anxion Webtech Private. It covers the two reported rounds, the nine reported questions on PHP sessions, SQL, client versus server scripting, database connectivity, HTML/CSS and form validation, and a week of preparation built around the hands-on task. It does not cover other roles or levels.

Candidates report two rounds, an Initial Assessment followed by a Hands-on Technical Task, spread over roughly 2-4 weeks.

PHPSQLPython

34 min read

Browse Software Engineer questions

See the practice prompts

15Practice promptsAcross five skill areas

Candidates describe the Software Engineer job as day-to-day web development: writing and testing code, deploying it, troubleshooting features that already exist, and building new ones from internal requirements. They also mention code reviews and talking to product colleagues to understand what users need. For interview purposes this means the reported questions are practical rather than abstract: how a PHP page starts a session, how a SQL query behaves under a web application, why a database connection fails, how a page rotates and resizes in a browser.

The stack candidates report is PHP or Python on the server, SQL for storage, and HTML/CSS in the browser. Git, basic web security and familiarity with web frameworks are listed as extras. Pick the server language you use daily and prepare every answer in it, because the hands-on stage asks you to produce working code, not to describe it. Have a local environment ready that can serve a page, talk to a SQL database and run your language's debugger or error output.

The nine reported questions fall into two groups. The first is server-side fundamentals: starting a session in PHP, how PHP interacts with the server, writing and optimizing SQL for a web application, client-side versus server-side scripting, and debugging a connection between an application and its database. The second is front-end and project work: the rotate tool in HTML/CSS, responsive components across browsers, a recent UI feature you built, and client-side versus server-side form validation. That last one is filed in the behavioral section, but its subject is technical, so answer it with a rule-by-rule explanation and then a project example.

Candidates also describe two scenario prompts to rehearse: securing a user login session, and a time you optimized a slow database query. Both connect to the SQL and session questions, so one set of well-practised answers covers several prompts. Because candidates describe the loop as centred on fundamentals, precision on small things (what a function does, where a check belongs, what an error message says) is where preparation pays off.

01

Initial Assessment

reported

Candidates report that the process opens with an initial assessment of foundational knowledge and skills, described as a conversational technical screening that moves from verbal questions toward a task-based stage. The kind of material this stage covers is the technical-fundamentals group: PHP or Python basics, session handling, how server-side code reaches a database, SQL for web applications, and what runs in the browser versus on the server. Approach it as a precise conversation. Give the direct answer first, then the reason you would choose that method, then one edge case. For the PHP session question, that means naming session_start(), saying it must run before any output is sent, explaining that it issues a session identifier cookie and loads the stored session data, and adding that you regenerate the identifier after login.

What to demonstrate

  • Foundational knowledge of your main server language (PHP or Python) and its standard functions
  • Understanding of session management and how application code connects to a SQL database
  • Ability to explain why you chose a method, not only which one
  • Clear, step-by-step spoken reasoning, including when you do not know an answer

How to prepare

  • Answer aloud: which function starts a PHP session, what it does with the cookie and session storage, and why it must come before output
  • Explain the request path from browser to web server to PHP or Python to database and back, naming what happens at each hop
  • Write a short SQL optimization answer: select only needed columns, filter on indexed columns, check the plan with EXPLAIN, bind parameters, avoid one query per row
  • Prepare a debugging order for a failing database connection: error text, host and port reachability, credentials, database name, privileges, connection limits
Anxion Webtech Private Software Engineer candidate reports ↗
02

Hands-on Technical Task

reported

Candidates report a hands-on evaluation of practical coding ability, where the task has specific requirements and you are observed while you work. The areas candidates list for it are completing the task as specified, keeping the code readable and organized, and finding out why code is not behaving as expected. Candidates describe user logins, database CRUD operations and basic UI manipulation as typical practice material for a practical test. Read the requirements fully before typing, build the smallest working version first, then tidy it, and say what you are doing as you go so a wrong turn is visible and recoverable.

What to demonstrate

  • Following the written requirements of the task exactly
  • Readable, maintainable code organization rather than a single tangled script
  • Debugging: locating why a piece of code misbehaves
  • Speed and accuracy while being observed

How to prepare

  • Build a small app from scratch in your chosen language: registration, login with a session, and create/read/update/delete on one table, using parameterized SQL
  • Practise a small UI task in HTML/CSS and a little JavaScript, such as a rotating element, a responsive layout and a form with validation
  • Rehearse debugging out loud: reproduce, read the error, narrow the cause, fix, re-test
  • Make small Git commits while you build so your work is organized and you can step back from a mistake
Anxion Webtech Private Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Answering the PHP session question with only the function name

Say that session_start() must run before any output, that it sets the session identifier cookie and loads stored data, and that you call session_regenerate_id(true) on login and destroy the session on logout. The same answer then covers the securing-a-login-session scenario.

02

Calling SQL optimization 'add an index' without showing how you know

Describe the sequence: run EXPLAIN, check that the filter column is indexed and the predicate can use it, select only needed columns, replace per-row queries with a join, and add LIMIT for list pages. Practise one slow-query story with the before and after plan.

03

Trusting client-side checks, or building SQL by joining strings, in the hands-on task

Validate on the server every time, bind parameters in every query, escape output, and store passwords with a hashing function such as password_hash. Do this by habit in your practice builds so it shows up under time pressure.

04

Guessing at fixes for a database connection failure

Work through a fixed order and state it: read the exact error, confirm the host and port are reachable, check credentials and database name, check the account's privileges, then connection limits and the server's state. Say what each step rules out.

05

Coding silently, or starting before reading the task requirements fully

Restate the requirements, build the smallest working version, then tidy it, naming what you are doing as you go. Practise with your own timer so that checking requirements is part of your routine, not an afterthought.

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

12 technical prompts0 include a worked solution

Identify the heaviest tenants in a five-minute window under memory pressure

medium
top-kheavy hittersstreaming

The edge service handles about 3,000 requests per second across roughly 50,000 tenants, peaking near 9,000. Expose the 50 heaviest tenants by request count over the trailing five minutes so limits can be tightened before one tenant's backfill starves the fleet. You may not retain five minutes of raw records. Give the exact solution and its memory, then the bounded-memory approximation with its error stated as a formula, and say which you would ship and at what tenant cardinality that choice changes.

Approach
  1. Do the exact version first, because it is affordable at this cardinality: a ring of 300 one-second counters per tenant, advanced lazily, is 1,200 bytes of counters per tenant and roughly 60 to 90 MB for 50,000 tenants with overhead. Carry a running total and subtract the bucket you overwrite so a window read is O(1) rather than 300 adds.
  2. Extract the top 50 with a size-k min-heap over the tenant sums: O(d log k) for d tenants, against O(d log d) to sort them all. Maintaining the heap continuously instead of on query requires a tenant-to-heap-index map, because incrementing a count already inside the heap means sifting from a known position, and without that map you rebuild the heap on every request.
  3. State the approximation precisely rather than gesturing at sketches. Misra-Gries with m counters retains every item whose true count exceeds N/(m+1), and each retained count underestimates the truth by at most N/(m+1). With m = 1,000 and N = 900,000 requests in the window the error is roughly 900 requests, which is fine for spotting a tenant sending 50,000 and useless for ranking two tenants 200 apart.
  4. Say what breaks when the window slides: Misra-Gries and Space-Saving are insert-only and cannot be decremented as records age out. The workable construction is one summary per sub-window, say ten seconds, with 30 summaries merged at query time, and the merged error is the sum of the per-summary errors, so the bound degrades linearly in the number of sub-windows.
Follow-up
  • The heaviest tenant is heavy because of one export job rather than user traffic. Should the limiter treat those as the same tenant?
  • Two tenants sit tied at the boundary of the top 50. Does your answer flap, and does the flapping matter?

Diff a projection against the primary without per-row point reads

hard
reconciliationrange hashingthrottling

The listing projection has drifted and some rows show a stale version. The primary holds 40,000,000 resource rows across 12,000 tenants while serving 1,200 writes and 14,000 reads per second. The obvious repair, reading each resource row and comparing its version against the projection, is correct and would eventually finish. Explain precisely why it is unacceptable here, then give a diff that finds the differing rows, state its complexity, and make it safe to run against a live primary. Replication lag is usually under 100 ms and is not bounded.

Approach
  1. Quantify the naive cost rather than calling it slow: 40,000,000 point reads at even 0.5 ms each is over five hours serialised, and the only lever is concurrency, which is exactly what you cannot spend. The primary's pool is sized for the write path, and 40,000,000 random reads evict the buffer cache that sustains the 85 percent cache hit rate, so the audit degrades the system it is auditing.
  2. Replace random access with one ordered pass per side. Both sides can be read in (tenant_id, resource_id) order, which is a sequential scan on each and a merge join in O(n) time and O(1) memory. For a dense diff that is the whole answer, and it reads the primary once instead of 40,000,000 times.
  3. For the expected sparse case, compare range hashes instead of rows: partition the key space, compute per range an order-independent aggregate over hash(resource_id, version), compare aggregates, and descend only into ranges that differ. With d differing rows and branching factor B, at most d ranges mismatch per level, so the drill-down examines O(d log_B(n/d)) ranges and reads full rows only in mismatching leaves.
  4. Aggregate with a sum modulo 2^64 or a multiset hash, never XOR. XOR is order-independent but self-cancelling, so two rows wrong in the same way, or a row duplicated on one side, leave the range aggregate matching and the range is declared clean.
Follow-up
  • The diff reports 900 stale rows. How do you decide between patching those rows and rebuilding the projection from resource_revision?
  • Same job, but the projection lives in a search index that cannot be scanned in key order. What changes?

Track a rolling failure rate per destination for circuit decisions

easy
sliding windowring buffercircuit breaker

The egress service delivers about 1,500 webhooks per second across roughly 40,000 destinations, each call bounded by a 10 second timeout. Maintain, per destination, the failure rate over the trailing 60 seconds so a caller can ask before dispatch whether the circuit should open. Attempts arrive as (destination_id, finished_at_ms, outcome). Requirement: amortised O(1) per attempt, with total memory bounded by the destination count rather than by traffic. Give the structure, its exact memory, and the rule that stops a destination with three attempts from opening a circuit.

Approach
  1. Name the exact-deque version and then reject it as the default. Holding timestamps and advancing a tail pointer past anything older than now minus 60 seconds is a correct two-pointer window at amortised O(1) per attempt, but its memory tracks in-window traffic, so one destination in a retry storm holds hundreds of thousands of entries while thousands of quiet destinations hold none.
  2. Use a ring of 60 one-second buckets per destination, each bucket a pair of counters for attempts and failures. On an attempt, advance the ring by the elapsed whole seconds, zeroing at most min(elapsed, 60) buckets, then increment the head. That is amortised O(1) with a fixed footprint per destination.
  3. State the footprint: 60 buckets times two 4-byte counters is 480 bytes of payload per destination, so 40,000 destinations is roughly 20 to 25 MB with per-entry overhead, bounded by the catalogue rather than by the rate. The cost is granularity, since the oldest bucket ages out in whole seconds, which is far tighter than the decision needs.
  4. Require a minimum sample before the circuit may open. A destination with three attempts and three failures reads as 100 percent and is not evidence; a floor of roughly 20 attempts in the window makes the ratio meaningful, and below that floor use a run of consecutive failures as the trigger instead.
Follow-up
  • The fleet is 30 instances and each sees roughly a thirtieth of a destination's traffic. Where does the rate actually live, and what does a per-instance answer get wrong?
  • A destination answers in 9.5 seconds and succeeds. It is not failing but it is consuming your per-destination concurrency. What signal should open the circuit here?

The plan is built around the two reported rounds: Days 1 to 5 cover the spoken fundamentals (sessions, SQL, database debugging, HTML/CSS, form validation), Day 6 is a full hands-on build, and Day 7 rehearses project stories and a spoken run-through.

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 two rounds and set up your environment
  • List the nine reported questions and sort them into server-side fundamentals and front-end/project groups
  • Choose PHP or Python as your single answer language for the whole week
  • Set up a local environment that serves a page, connects to a SQL database and shows errors clearly

Deliverable: A one-page map of the two rounds with your question groups, and a working hello-world page that reads one row from a database table.

02Sessions, server interaction and client versus server scripting
  • Write a login and logout flow using sessions: start the session, store the user id, regenerate the identifier on login, destroy it on logout
  • Draw the request path from browser to web server to your language runtime to database and back, and label what runs where
  • Write a short contrast of client-side and server-side scripting with an example of work that must stay on the server

Deliverable: A working login/logout script, a labelled request-path diagram, and a written contrast of client-side and server-side scripting you can say aloud.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
03SQL for web applications
  • Create a small users and orders schema and write list, detail and search queries with bound parameters
  • Run EXPLAIN on a slow query, add an index, run it again and record what changed
  • Work through the join fan-out practice question and explain why a one-to-many join inflates totals

Deliverable: A schema, six parameterized queries, and a before-and-after EXPLAIN note for one optimized query.

Practice prompt ↗Practice prompt ↗
04Debugging a database connection
  • Break your own connection in turn: wrong host, wrong port, wrong password, missing database, missing privilege, stopped server
  • Record the exact error text each failure produces in your language's driver
  • Turn the results into a diagnosis order and say it aloud as a spoken answer

Deliverable: A table of six connection failures with their error messages and a spoken diagnosis sequence.

Practice prompt ↗
05HTML/CSS: rotate, responsive layout and form validation
  • Rotate an element with the CSS transform property, set the transform origin, and animate it with a transition
  • Build a card layout that adapts with flexbox or grid and media queries, then check it in at least two browsers
  • Build a sign-up form with client-side validation and matching server-side validation, and test it with JavaScript turned off

Deliverable: One page containing a rotating element, a responsive layout and a form validated on both layers, with a note on what each layer catches.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
06Hands-on build under your own timer
  • Write a requirement sheet for a small app: registration, login, and CRUD on one table, with a form and a list page
  • Build it from scratch, committing to Git in small steps, and speak your reasoning as you work
  • Debug one deliberately introduced fault and describe how you located it

Deliverable: A working repository with small commits, parameterized queries, server-side validation and a short list of what you would tidy next.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
07Project stories and a spoken run-through
  • Prepare a walkthrough of one UI feature you built: the requirement, your choices, the bug and the result
  • Prepare answers for 'Explain how you would secure a user login session' and 'Describe a time you had to optimize a slow database query'
  • Practise the estimation and reversed-decision stories from the behavioral practice set, then run through the reported fundamentals questions aloud

Deliverable: Two written project stories, two scenario answers, and one recorded spoken run-through of the reported questions.

Practice prompt ↗Practice prompt ↗Practice prompt ↗

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

Candidates describe a collaborative setting where you explain your own projects and the reasons behind your technical choices, and where saying how you would find an answer you do not know is acceptable. For a web developer this means being ready to walk through a feature you built, a query you tuned, and a decision about where a rule belongs.

How do you handle form validation on the client side versus the server side?

medium
Frontend and Practical Application

How do you handle form validation on the client side versus the server side?

Approach
  1. Answer as two layers with different jobs. Client-side validation gives fast feedback: required, type=email, minlength and pattern attributes, the Constraint Validation API (checkValidity, setCustomValidity) or a small script showing inline messages. Server-side validation is the enforcement point, because a browser check can be bypassed with disabled JavaScript, developer tools or a direct HTTP request.
  2. Make the server layer concrete. In PHP: check presence, type, length, format and allowed values (filter_var with FILTER_VALIDATE_EMAIL, in_array), trim and normalize, bind parameters in SQL, and htmlspecialchars on output. In Python, use the framework's form or schema validation. On failure, re-render the form with errors and earlier input, or return a 422 with one error per field.
  3. Cover what only the server can check: uniqueness (an email already registered), authorization, values derived from other records such as a price, real file type and size, and a CSRF token on state-changing forms. For uniqueness, add a unique index as well as a pre-check, since two simultaneous sign-ups can both pass the pre-check.
  4. Keep the layers in step: reuse one rule list or schema where the stack allows, and treat the server rules as the source of truth. Avoid over-strict client patterns, such as a complicated email regex that rejects valid addresses.
  5. Finish with a real example from your own work: a form you built, which rule lived where, and a bug or bypass that taught you why the server check mattered. Pick a case where you made the decision yourself and say what changed afterwards.
Follow-up
  • A user has JavaScript disabled or posts directly with curl. What happens to your form?
  • How do you stop the client rules and server rules from drifting apart as the form changes?
  • Where do you check that an email is unused, and how do you handle two simultaneous sign-ups for the same address?

Estimate work you have never done and defend the range

hard
estimationbackfillsexpand-contract

You are asked to estimate a change you have never attempted: add a column to a 100-million-row table, populate it, move reads across, and drop the old shape. Give a range with the assumptions that generate it, including batch size, the signal your backfill throttles on, and wall-clock hours, and name the three unknowns that would move the number most. Then describe a real estimate you gave under comparable ignorance: how you expressed its uncertainty, what you committed to, and how wrong you turned out to be.

Approach
  1. Decompose into independently deployable steps before estimating anything: add the column nullable, write both shapes, backfill in batches, verify, move reads, stop writing the old shape, drop it. That is four deploys spread over days, and the calendar estimate is dominated by them rather than by the loop's runtime.
  2. Do the arithmetic aloud for the part that has arithmetic in it: batch size times number of batches times per-batch duration, at a write rate the primary can absorb alongside roughly 1.2k writes per second of production traffic. The loop is throttled by replication lag and lock waits, not by how fast it can issue statements.
  3. Price the schema step by its lock rather than its statement duration. In PostgreSQL an ALTER TABLE taking ACCESS EXCLUSIVE waits for every open transaction on that table while later queries queue behind it, so a millisecond change issued during a thirty-second analytics query stalls that table for thirty seconds. Adding a nullable column with a non-volatile default avoids a rewrite from version 11; a new index wants CREATE INDEX CONCURRENTLY, which cannot run inside a transaction block and leaves an invalid index behind if it fails.
  4. Express the answer as a range whose endpoints each trace to a stated assumption, then name the cheapest experiment that collapses it, which is almost always running one real batch against the real table and multiplying.
Follow-up
  • How do you verify the backfill genuinely finished, given rows written by production traffic while it ran?
  • Where does the backfill resume from after a worker is killed mid-batch, and what makes that resume point trustworthy?

Reverse your own decision and price the reversal

medium
reversibilitymeasurementmigrations

Describe a technical decision you made and later reversed. Pick one that cost something: a service you split and merged back, a cache you added and removed, an index you created that pushed the planner onto a worse plan, a projection you rebuilt from scratch. State what you believed when you decided, the measurement that changed your mind, how long the wrong version ran in production, and what the reversal cost in migrations, dual writes, and a deprecation window for callers you did not own.

Approach
  1. State the original rationale without irony, in the version you would still defend given what was known then. If it is not defensible, the story is about carelessness rather than judgement, and a different example serves you better.
  2. Give the measurement that moved with a before and after: the p99 that did not improve, the cache hit rate that sat at 40%, the plan that flipped to a sequential scan once the table passed a size you can name.
  3. Cost the reversal in steps, not adjectives: expand-and-contract deploys, the dual-write window, the callers who had to be notified, the rows already written in the wrong shape that had to be backfilled or abandoned.
  4. Distinguish reversal from rewrite by naming what you kept. Most good reversals preserve the schema or the interface and undo one decision inside it, which is also why they were affordable.
Follow-up
  • What in that decision was irreversible, and did you know it was irreversible when you made it?
  • How did you tell the people who had already built on top of the original decision?
  • 01

    How do you handle form validation on the client side versus the server side?

  • 02

    Explain how you would secure a user login session.

  • 03

    Describe a time you had to optimize a slow database query.

  • 04

    Walk through a recent project in which you built a specific UI feature: the requirement, your options, what you chose, and what you would change.

  • 05

    Tell me about a question or bug you could not solve right away, and describe how you went about finding the answer.

PracHub preparation framework ↗
How difficult are the technical questions?

Candidates describe the reported questions as fundamentals: starting a PHP session, explaining how PHP works with the server, SQL optimization, client versus server scripting, debugging a database connection, and basic HTML/CSS. That makes precision the differentiator. Prepare each answer in your own words with a reason and an edge case instead of a one-line definition.

Anxion Webtech Private Software Engineer candidate reports ↗
How should I prepare for the hands-on task?

Build small web applications from scratch in your chosen language, covering a login with sessions, create/read/update/delete on a SQL table, and a form with validation. Keep the code organized into small functions or files, use parameterized queries, and practise debugging and explaining as you go. The plan's Day 6 is a full rehearsal of this.

Anxion Webtech Private Software Engineer candidate reports ↗
How long does the process take?

Candidates report two rounds over roughly 2-4 weeks, with an Initial Assessment first and a Hands-on Technical Task after it. No more detailed schedule is reported, so check the timing with the recruiter when you are contacted.

Anxion Webtech Private Software Engineer candidate reports ↗
Which topics should I cover first?

Candidates list PHP, SQL, Python, practical coding tasks and backend web development as the main topics, with HTML/CSS named as a must-have skill. Start with your server language's session handling and database access, then SQL optimization, then the HTML/CSS and form-validation questions.

Anxion Webtech Private Software Engineer candidate reports ↗
Do I need to know both PHP and Python?

The requirements candidates describe ask for proficiency in PHP or Python, so one is enough as your main language. Pick the one you know best and prepare all answers and the practice build in it. Still read the other language's session and database basics, since the question about the basics of PHP and the server is reported.

PracHub Software Engineer practice ↗
Is front-end preparation needed for a back-end leaning role?

Yes. Candidates report HTML/CSS questions such as the rotate tool, responsive components across browsers and a UI feature walkthrough, and they describe the role as mixing front-end responsiveness with back-end database work. Practise a rotating element, a responsive layout and a validated form so that these answers are concrete.

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.