@Override
    public Map<Long, TimeWindow> windowsFor(final long timestamp) {
        long windowStart = (Math.max(0, timestamp - sizeMs + advanceMs) / advanceMs) * advanceMs;
        final Map<Long, TimeWindow> windows = new LinkedHashMap<>();
        while (windowStart <= timestamp) {
            final TimeWindow window = new TimeWindow(windowStart, windowStart + sizeMs);
            windows.put(windowStart, window);
            windowStart += advanceMs;
        }
        return windows;
    }
Return a window definition with the original size, but advance ("hop") the window by the given interval, which
specifies by how much a window moves forward relative to the previous one.
The time interval represented by the N-th window is: {@code [N * advance, N * advance + size)}.
<p>
This provides the semantics of hopping windows, which are fixed-sized, overlapping windows.

@param advance The advance interval ("hop") of the window, with the requirement that {@code 0 < advance.toMillis() <= sizeMs}.
@return a new window definition with default maintain duration of 1 day
@throws IllegalArgumentException if the advance interval is negative, zero, or larger than the window size
streams/src/main/java/org/apache/kafka/streams/kstream/TimeWindows.java