fixedRate schedules the next run based on the start time of the previous run (can overlap if too slow). fixedDelay schedules based on the completion time of the previous run (no overlap). cron lets you use cron expressions for calendar‑based schedules.
Expanding on the short answer — what usually matters in practice:
A tiny example (an explanation template):
// Example: discuss trade-offs for "`@scheduled`:-fixedrate-vs-fixeddelay-vs-cron-—-"
function explain() {
// Start from the core idea:
// fixedRate schedules the next run based on the start time of the previous run (can overlap
}