Final review for Exam Drill #21 · 7 Oct 2026 · 14 misses · 63 drills, ending with a 24-question final paper

Final review for #21 — you know the facts. The last step is answering one option at a time

Revision 3 came out at 49/63 (78%). You got 14/14 on the true-or-false block, but several of those same facts went wrong when they were options in a list. This page closes off #21: what's fixed, every rule on one screen, the last weak spots, and a final paper in new wording that covers the whole of #21.

14/14
One statement at a time
17/19
Exact retries
18/30
New questions with option lists
0/5
Exclusions block
Exam #21 → three revisions

How the scores moved

RoundOverallNew questionsExact retriesTrue or false
Exam #2141/60 (68%)———
Review page drills41/66 (62%)———
Revision 134/59 (58%)15/34 (44%)19/25 (76%)—
Revision 243/62 (69%)23/37 (62%)20/25 (80%)—
Revision 349/63 (78%)18/30 (60%)17/19 (89%)14/14

The pass mark is 76%, and revision 3 overall was 78%. But the column that predicts the real exam is "new questions", and it has stayed around 60%. So the knowledge is there, but it isn't yet reliable when the wording is new and there's a list of options.

Fixed, and confirmed more than once

The same fact, right on its own and wrong in a list

On the same page, on the same day:

FactAs a true/false statementAs one option in a list
The circular-references property doesn't rescue a constructor cycle✓ "False"✗ ticked it as a fix, twice
@ComponentScan filters don't remove auto-config✓ "False"✗ ticked it, for the 4th time
exclude and excludeName take different types✓ "False, different types"✗ "None — they're aliases"
The before-init hook gets an object, not definitions✓ "False"✗ picked it as "the hook that gets definitions"
@ContextConfiguration doesn't bring in auto-config✓ (retry)✗ ticked in a five-option list

You don't need more facts for these. You need the 14/14 way of answering. On every "select all", read each option as a sentence on its own, "X is true", and give it a yes or no before you look at the next one. You've already shown that this works.

Every rule from #21, on one screen

Read this before the final paper, and again before your next exam

My drill progress on this page

Order: weak spots → split-it → retry → final paper last. Aim for 22/24 or better on the final paper; that's about the level the exam needs, with some margin. On every "select all", give each option a yes or no first.

Drill blockQsLastBestRunsLast done
Loading…

The last weak spots 14 misses on revision 3

Exclusions · 6 misses (0/5 on the block + 1 retry)

Two questions settle every exclusion question

You pickedWhat's true
excludeName "fails to compile" when the jar is missingThe .class literal fails. A string is just text, and the compiler never resolves it
"they're aliases"Class<?>[] vs String[]. Same effect only when the class is present
Scan filters can't remove auto-config because "auto-config runs before scanning"It's the other way round: auto-config is processed after your own configuration. The scan filter fails because auto-config classes are imported from a list, never scanned
@ComponentScan filter ticked (4th time); exclude and then the property left outAll three switches work when the class is present
left out server.servlet.context-pathIt's real — anything under server. that you've seen in the docs is
Q1  Is it a scan filter?          → never removes auto-config. Cross it out.
Q2  Does the question say the class/jar is MISSING?
      no  → exclude, excludeName and spring.autoconfigure.exclude all work
      yes → only the strings: excludeName and the property (exclude = Foo.class won't compile)

Why "after" matters: Boot imports auto-config with a deferred import selector, so it's processed after all your own @Configuration. That's what lets @ConditionalOnMissingBean back off when you've defined your own bean. If auto-config ran first, it couldn't see yours.

Rule: "Cross out the scan filter. Then: is the class missing? No → all three. Yes → strings only."
Cycles · 3 misses

You ticked the property as a constructor-cycle fix twice, and left @Lazy on a class out again

Read the property's name: allow-circular-references. The references are the early references, the half-built objects that resolve setter/field cycles. The property switches that mechanism back on. A constructor cycle can't use an early reference, because no object exists yet, so switching it on changes nothing. You also left out "the property exists only in Boot", and it does: plain Spring has no spring.main.* properties.

@Lazy @Service class Mailer is the original use of @Lazy: the bean is created on first use, not at startup. You've now got the injection-point form right, so don't lose the class form. All placements are valid.

Rule: "The property switches early references back on, and constructors can't use them. @Lazy is valid everywhere."
Silent proxy cases · 2 misses · both left one out

Three silent cases. You named two each time, a different two

Block 4 left out the self-call. The retry left out the private method. Learn the three as a set: F-P-S, final method, private method, self-call. All three have a proxy, and the call slips past it. When you see a "silent" question, check all three letters.

Rule: "Silent = F-P-S. Loud = final class with no interface."
BPP / BFPP · 2 misses

"Before Initialization" is still after the object exists, and before afterPropertiesSet()

You picked postProcessBeforeInitialization as "the hook that gets definitions". The word "Before" probably made it sound early, as if it ran before the bean existed. But it's before initialisation, not before creation. The only hook that sees definitions has BeanFactory in its name. And afterPropertiesSet() is one of the initialisation steps, so it runs after the before-hook.

Rule: "Before-init: the object exists and is injected, init hasn't run. Definitions = only postProcessBeanFactory."
@ContextConfiguration · 1 miss

It loads the classes you give it. Any auto-config comes from those classes

If you pass it your @SpringBootApplication class, auto-config loads, because that class's annotation brings it in. Pass it a plain config class and there's no auto-config. On "which bring in auto-config", ask: would it do that on its own, given a plain class?

Split it: list options as true or false

These are the options from your revision-3 misses, one at a time. This is the 14/14 way of answering, used on exactly the options that went wrong in a list. When an option appears in a list, give it the answer you give here.

Retry the 14, exact wording

The 14 you missed on revision 3, reshuffled.

The final paper: all of #21, new wording

24 questions covering every topic from the #21 paper and its revisions, none of them in a wording you've seen. Do it last, in one sitting, without the rules screen open. 22/24 or better means #21 is closed, and the next step is a fresh practice exam.

After the final paper. 22/24 or better means #21 is done, so take a new practice exam next. That will show whether the 14/14 habit holds on questions you've never seen. Paste the result as usual and the review page will compare it with #21. If the final paper comes out lower, paste this page instead and I'll target exactly what's left.
← Dashboard ← Revision 3 Revision 2 Revision 1 Review #21