Placement Prep
Accenture Internship OA

Accenture On-Campus Internship OA

A Java-first crash plan for the 16 November 2026 assessment, with MCQs, SQL, frontend tasks, games, and two coding mocks.

Research checked: 13 November 2026. Personal target: 16 November 2026, India on-campus internship; 4–5 hours per day. Your confirmed sections are technical MCQs, coding, and games. Communication gets a short daily practice slot. These priorities and timings are study recommendations; your invitation controls the actual assessment.

Start here, work through the modules, and save your progress with the checklists. Progress is stored in this browser on this device; it is not synced. Each page has its own checklist, separate from the Amazon track. Clearing site storage resets it.

What to prioritize

Prepare all three coding skills: Java arrays/strings, SQL joins, and DOM edits. Practise reading an unfamiliar schema and changing an existing page. Keep MCQ tracing and games in the daily schedule because your drive includes them. Add one basic DP exercise after the foundations: an internship candidate reported House Robber, but this does not predict your question.

Use a 20-minute independent attempt, then a hint, then the collapsed solution. Close the answer and implement it again. For each mistake, record the failed input and the reason: concept, reading, syntax, edge case, or time. The practice below is original study material, not an Accenture question bank or proprietary test replica.

Three-day crash plan

Every day totals 270 minutes (4½ hours) including short breaks. If starting late on 13 November, do the must-do items first and use the optional resources only for a specific gap.

13 November — foundations

BlockMinutesMust-do output
Java65Read the survival notes; attempt J1–J4
SQL60Load the shared data; solve S1–S3
Technical45Pseudocode revision and Q1–Q10
Frontend45Read the DOM notes; complete F1
Games / communication25Arithmetic set A, one read-aloud and one speaking prompt
Error log and breaks30Re-run failed examples and write tomorrow's top two gaps
  • Complete the 13 November foundation blocks and record mistakes.

14 November — complete the core

BlockMinutesMust-do output
Java60J5–J8; learn the include/skip DP recurrence
SQL45S4–S6, especially grouping after joins
Frontend55F2 and F3; test empty input and repeated actions
Technical50Q11–Q30, reviewing every explanation
Games / communication30Route and key drills; one email
Review and breaks30Re-solve the two weakest exercises
  • Complete the 14 November core blocks and re-solve two mistakes.

15 November — timed rehearsal

BlockMinutesMust-do output
Mock A60Java + SQL + frontend; answers closed
Review25Test failures; explain one fix per task
Technical35Reattempt the 30 MCQs with answers closed; review misses
Mock B60A second independent three-task rehearsal
Review25Reimplement weak solutions without copying
Games / communication35Arithmetic set B, route/key retry, speaking and email
Breaks30Spread across blocks
  • Complete Mock A and review its failed cases.
  • Complete Mock B and review its failed cases.
  • Reattempt all missed MCQs and explain why the other choices fail.

Optional only after the must-do work: selected SQL 50 join problems, extra Java collection practice, and targeted linked lessons on the module pages. Do not attempt an entire course before the OA.

Two mixed coding mocks

Use 60 minutes per mock as a practice assumption, not a verified duration for your invitation. A suggested split is 5 minutes to inspect everything, 20 Java, 15 SQL, 15 frontend, and 5 final checks. Reallocate if a task is blocked. There is no evidence here for a fixed passing score; aim to complete and test all three tasks.

Use the SQL page's shared database for both mocks. For Java, put each method inside class Solution and call it from your own main; follow the supplied method signature or input format in the real test. Frontend code is plain HTML/CSS/JS, not React. Reserve these tasks until 15 November.

Mock A

A1 — Java: earliest distinct reading. Given an integer array of sensor readings (at most 100,000), return the index of the first value occurring exactly once, or -1. Preserve input order. Example: [4, 7, 4, 9, 7] → 3. Test empty input, all duplicates, and negative readings.

A2 — SQL: paid total per customer. Return customer_id, name, and paid_total for every customer, counting only paid orders. Customers without paid orders get zero. Order by customer ID. Expected rows: (1, 'Asha', 150), (2, 'Ben', 80), (3, 'Chen', 0).

A3 — Frontend: bounded ticket counter. Starting at zero, enable the Add button, give it class action, style that class with background #5b21b6 and white text, and increment the displayed count on click up to a maximum of 3. Further clicks leave 3 unchanged.

<!doctype html>
<html lang="en"><meta charset="utf-8"><title>Tickets</title>
<style>/* TODO: style .action */</style>
<button id="add" disabled>Add ticket</button>
<output id="count" aria-live="polite">0</output>
<script>
  // TODO: register the click handler and keep count in 0..3.
</script></html>
Mock A solutions — open after the timer

A1: Count every value first, then scan indices in their original order. Picking the first map entry would not reliably give the earliest index.

static int firstDistinctIndex(int[] a) {
    java.util.Map<Integer, Integer> counts = new java.util.HashMap<>();
    for (int x : a) counts.put(x, counts.getOrDefault(x, 0) + 1);
    for (int i = 0; i < a.length; i++) {
        if (counts.get(a[i]) == 1) return i;
    }
    return -1;
}

Expected O(n) time and O(n) auxiliary space. Empty and all-duplicate arrays return -1.

A2: Put the paid filter in ON so the LEFT JOIN still preserves customers with no paid orders. COALESCE replaces the NULL sum with zero.

SELECT c.id AS customer_id, c.name,
       COALESCE(SUM(o.amount), 0) AS paid_total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id AND o.status = 'paid'
GROUP BY c.id, c.name
ORDER BY c.id;

A3: Keep numeric state, clamp the increment, and render with textContent. This is a complete replacement file.

<!doctype html>
<html lang="en"><meta charset="utf-8"><title>Tickets</title>
<style>.action { background: #5b21b6; color: white; }</style>
<button id="add" class="action">Add ticket</button>
<output id="count" aria-live="polite">0</output>
<script>
  let count = 0;
  document.getElementById('add').addEventListener('click', () => {
    count = Math.min(3, count + 1);
    document.getElementById('count').textContent = String(count);
  });
</script></html>

Check initial zero, one click, three clicks, and five clicks. The final count stays 3; the button is enabled and styled.

Mock B

B1 — Java: balance point. Return the first index whose elements strictly to the left sum to the same value as those strictly to the right. Return -1 if none exists. Empty array returns -1; a singleton returns 0. Values may be negative; at most 100,000 values, each between -1 billion and 1 billion. Example: [1, 7, 3, 6, 5, 6] → 3.

B2 — SQL: completed category revenue. Using all four shared tables, return category and revenue from paid orders only, where revenue is the sum of quantity * unit_price. Keep categories with revenue at least 50 and sort revenue descending, then category ascending. Expected rows: ('Tools', 150), ('Books', 80).

B3 — Frontend: message length. Set the input's maximum length to 20; style #length with color #075985; on every input event show the current number of characters. Add a Clear handler that empties the field and resets the count to zero. Assume ASCII text for this exercise.

<!doctype html>
<html lang="en"><meta charset="utf-8"><title>Message length</title>
<style>/* TODO: style #length */</style>
<label for="message">Message</label><input id="message">
<output id="length" aria-live="polite">0</output>
<button id="clear">Clear</button>
<script>
  // TODO: update on input and reset on click.
</script></html>
Mock B solutions — open after the timer

B1: With the total known, the right sum at index i is total - left - a[i]. Compare before adding the current value to the left sum. Use long to avoid overflowing an int total.

static int balanceIndex(int[] a) {
    long total = 0, left = 0;
    for (int x : a) total += x;
    for (int i = 0; i < a.length; i++) {
        if (left == total - left - a[i]) return i;
        left += a[i];
    }
    return -1;
}

O(n) time, O(1) extra space. Test [0, 0] → 0, [-1, 0, -1] → 1, [1, 2] → -1, and a large sum.

B2: Follow customer → order → item → product keys. Aggregate item revenue, not the whole order amount, which would be duplicated by the item join. The customer join is included to practise the full relationship chain.

SELECT p.category, SUM(i.quantity * i.unit_price) AS revenue
FROM customers c
JOIN orders o ON o.customer_id = c.id
JOIN order_items i ON i.order_id = o.id
JOIN products p ON p.id = i.product_id
WHERE o.status = 'paid'
GROUP BY p.category
HAVING SUM(i.quantity * i.unit_price) >= 50
ORDER BY revenue DESC, p.category ASC;

B3: Read .value.length, update with textContent, and call the same render function after a programmatic reset. Assigning .value does not itself fire the input event.

<!doctype html>
<html lang="en"><meta charset="utf-8"><title>Message length</title>
<style>#length { color: #075985; }</style>
<label for="message">Message</label><input id="message" maxlength="20">
<output id="length" aria-live="polite">0</output>
<button id="clear">Clear</button>
<script>
  const message = document.getElementById('message');
  const length = document.getElementById('length');
  function renderLength() { length.textContent = String(message.value.length); }
  message.addEventListener('input', renderLength);
  document.getElementById('clear').addEventListener('click', () => {
    message.value = '';
    renderLength();
  });
</script></html>

Check empty input, typing, deletion, a 20-character value, and Clear. maxlength constrains normal user entry; it does not truncate arbitrary values assigned by a script.

16 November — short final check

  • Review the error log, SQL join keys, Java numeric types, and DOM event syntax for 20–30 minutes.
  • Read the invitation for reporting time, venue, ID, allowed equipment, language/runtime, and permitted materials.
  • Complete the official system/mock check as instructed; confirm microphone/audio, network, charger, and required browser if applicable.
  • Use the invitation's rules for rough work and tools; online reports do not establish your permissions.
  • Stop new topics and allow time to arrive or sign in comfortably.

After the OA, use a separate session for project walkthroughs and interview preparation. The Amazon track remains available alongside this one.

On this page