public long checkPhyPos(long timeStartMs, long maxOffset) {
        long minFirst = Long.MAX_VALUE;
        int firstSlotIndex = getSlotIndex(timeStartMs);
        for (int i = 0; i < slotsTotal * 2; i++) {
            int slotIndex = (firstSlotIndex + i) % (slotsTotal * 2);
            localBuffer.get().position(slotIndex * Slot.SIZE);
            if ((timeStartMs + i * precisionMs) / precisionMs != localBuffer.get().getLong()) {
                continue;
            }
            long first = localBuffer.get().getLong();
            long last = localBuffer.get().getLong();
            if (last > maxOffset) {
                if (first < minFirst) {
                    minFirst = first;
                }
            }
        }
        return minFirst;
    }
@Test
    public void testCheckPhyPos() {
        long delayedTime = defaultDelay + precisionMs;
        timerWheel.putSlot(delayedTime, 1, 100, 1, 0);
        timerWheel.putSlot(delayedTime + 5 * precisionMs, 2, 200, 2, 0);
        timerWheel.putSlot(delayedTime + 10 * precisionMs, 3, 300, 3, 0);

        assertEquals(1, timerWheel.checkPhyPos(delayedTime, 50));
        assertEquals(2, timerWheel.checkPhyPos(delayedTime, 100));
        assertEquals(3, timerWheel.checkPhyPos(delayedTime, 200));
        assertEquals(Long.MAX_VALUE, timerWheel.checkPhyPos(delayedTime, 300));
        assertEquals(Long.MAX_VALUE, timerWheel.checkPhyPos(delayedTime, 400));

        assertEquals(2, timerWheel.checkPhyPos(delayedTime + 5 * precisionMs, 50));
        assertEquals(2, timerWheel.checkPhyPos(delayedTime + 5 * precisionMs, 100));
        assertEquals(3, timerWheel.checkPhyPos(delayedTime + 5 * precisionMs, 200));
        assertEquals(Long.MAX_VALUE, timerWheel.checkPhyPos(delayedTime + 5 * precisionMs, 300));
        assertEquals(Long.MAX_VALUE, timerWheel.checkPhyPos(delayedTime + 5 * precisionMs, 400));
    }