How a scheduler interprets cron
Each field is an independent constraint. The scheduler walks forward in time and at every minute checks: does the current minute match field 1? Does the hour match field 2? And so on. If all fields match, it fires.
The exception is the day-of-month vs day-of-week pair. Standard cron OR-joins them: 0 0 1 * 1 fires on the 1st of every month OR on every Monday — usually not what you want. Quartz / AWS forbid both being values to avoid this ambiguity, requiring ? in one of them.