Practice
1. What is the main purpose of using AOP for performance monitoring in Spring Boot?
easy
Solution
Step 1: Understand AOP's role in performance monitoring
AOP allows adding extra code around methods without modifying their original code.Step 2: Identify the purpose of timing code
Timing code measures how long methods take to run, helping find slow parts.Final Answer:
To measure method execution time without changing the method code -> Option AQuick Check:
AOP measures time without code changes [OK]
Hint: AOP adds timing code outside main methods [OK]
Common Mistakes:
- Thinking AOP changes method logic
- Confusing AOP with adding endpoints
- Assuming AOP caches database queries
2. Which annotation is used in Spring AOP to wrap method execution for timing?
easy
Solution
Step 1: Recall Spring AOP advice types
@Before runs before method, @After runs after, @Around wraps method execution.Step 2: Identify which advice can measure execution time
@Around can run code before and after method, so it can measure duration.Final Answer:
@Around -> Option CQuick Check:
@Around wraps method for timing [OK]
Hint: Use @Around to wrap and time methods [OK]
Common Mistakes:
- Using @Before or @After which can't measure duration
- Confusing @Pointcut with advice annotation
- Assuming @After runs before method
3. Given this AOP method, what will be printed if the target method takes 150ms to execute?
@Around("execution(* com.example.service.*.*(..))")
public Object measureTime(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
Object result = pjp.proceed();
long end = System.currentTimeMillis();
System.out.println("Execution time: " + (end - start) + " ms");
return result;
}medium
Solution
Step 1: Understand timing calculation
The code records start time, runs the method, then records end time and prints the difference.Step 2: Match timing with method duration
If method takes 150ms, printed time is 150 ms.Final Answer:
Execution time: 150 ms -> Option DQuick Check:
Printed time matches method duration [OK]
Hint: Printed time equals method run duration [OK]
Common Mistakes:
- Assuming time is zero or double counted
- Thinking no output prints
- Confusing start and end time order
4. What is wrong with this AOP advice for measuring execution time?
@Around("execution(* com.example..*(..))")
public void measure(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
pjp.proceed();
long end = System.currentTimeMillis();
System.out.println("Time: " + (end - start));
}medium
Solution
Step 1: Check method signature for @Around advice
@Around advice must return the result of pjp.proceed() to maintain method behavior.Step 2: Identify missing return statement
Method returns void but should return Object from pjp.proceed().Final Answer:
The method should return Object, not void -> Option BQuick Check:
@Around advice must return method result [OK]
Hint: @Around methods must return Object from proceed() [OK]
Common Mistakes:
- Forgetting to return pjp.proceed() result
- Thinking pointcut syntax is wrong
- Believing System.currentTimeMillis() is invalid
5. You want to monitor execution time of all service methods but exclude methods annotated with
@SkipTiming. Which AOP pointcut expression correctly achieves this?hard
Solution
Step 1: Understand pointcut logic for inclusion and exclusion
We want all service methods except those with @SkipTiming annotation.Step 2: Use && with negation to exclude annotated methods
Use 'execution(...) && !@annotation(...)' to include methods but exclude those annotated.Final Answer:
execution(* com.example.service..*(..)) && !@annotation(com.example.SkipTiming) -> Option AQuick Check:
Exclude annotated methods with !@annotation [OK]
Hint: Use && !@annotation to exclude methods [OK]
Common Mistakes:
- Using || which includes annotated methods
- Using && @annotation which includes only annotated
- Negating execution pointcut incorrectly
