Как бы вы протестировали решение
Вопрос
How would you test this function before shipping it?
Как бы вы протестировали эту функцию перед выкаткой?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Называет обычные случаи (happy path)
Перечисляет edge cases: пусто, один элемент, дубликаты, отрицательные, огромный ввод
Говорит про некорректный ввод
Упоминает тест производительности на большом вводе
Предлагает автоматизировать: unit-тесты, property-based
Что могут спросить следом
- Which test would you write first?
- How would you test performance?
Разбор
I'd start with a couple of happy-path tests from the examples we discussed, just to lock in the expected behavior.
Then edge cases: an empty array, a single element, all elements equal, negative numbers, and a case where there's no valid answer. I'd also check invalid input, for example null, depending on what the contract says.
Since the whole point was getting it to linear time, I'd add a test with a large input, say a million elements, to make sure it runs well within the time limit.
Finally, if the logic is tricky, a property-based test is really useful: generate random arrays, compare the result with the brute-force version and let the tool find counterexamples.
Сложные места:
- lock in the expected behavior: зафиксировать ожидаемое поведение.
- the whole point was: весь смысл был в том, чтобы.
- counterexamples: контрпримеры.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.