Search
Write a publication
Pull to refresh
14
0
Send message
Ответ конечно получился не для собеседования :), но в жизни скорее это будет так.

Я не согласен с тем что вы ставите разницу между понятиями «для собеседования» и «для жизни».

Собеседование — не викторина. Завтра, если вы мне понравитесь, вы придете на работу, и если я что-то неправильно понял о вас на собеседовании, то либо мне придется доучивать вас, вместо того что бы писать любимый код, либо идти на крайне неприятные разговоры с HR.

Поэтому подразумевается, что задачки на собеседовании — не «брейнфитнес», а эмуляция реальных событий и рассмотрение вашей реакции.

>Что-бы проводить оптимизации нужно понимать, что делает программа, так как без этого не понятно куда прикладывать профайлер, непонятно, нужен ли он вообще (может быть сервер перегружен на все 146% или приложение активно читает/пишет на диск, а диски не справляются или проблема в сети по которой приложение получает какие-то данные или ...), а может быть в программе сортируются гигабайты пузырьковой сортировкой и нужные оптимизации на самом деле алгоритмические, которые без анализа алгоритма не сделать.

Ну вообще iostat+gclog — и вы за минуту узнаете — есть ли overcommit по диску, есть ли излишняя нагрузка на gc, есть ли излишняя нагрузка на проц, не уходит ли ваша программа в своп. Кроме того, я вам уже подсказал, что у меня есть серьезные подозрения что проблема именно в gc — т.к. характерные паузы в работе приложении говорят именно об этом.

Если вам повезло, и gclog показал проблемы с gc, то вы уже можете что-то улучшить. Да, конечно, возможно ваша программа криво написана и клепает короткоживущие объекты. Но если ситуацию можно временно улучшить потратив 10 минут на игру с параметрами gc, почему бы это не сделать?
— Те у Вас даже требований по необходимой производительности/отзывчивости системы нет? (возможный вариант продолжения разговора).
— Да, именно так. У меня есть java-программа, я хочу понять, можно ли ускорить ее работу потратив скажем 2 часа рабочего времени? А что такого… Поскольку время ограничено, а программа довольно большая, я даже не предлагаю вам разбираться что она делает. Тем не менее, я полагаю что можно предпринять набор тривиальных и быстрых мероприятий, что бы устранить наиболее вероятные проблемы. Под «ускорить» я понимаю сократить итоговое время работы(предположим моя программа запускается, делает свое дело и выдает результат)
О, это зависит от должности кандидата.
Если вы нанимаете технического директора или человека которого будете водить к партнерам, то вероятно это действительно очень важно.
Если же вы нанимаете программиста… Понимаете, программисты пишут код. Хорошие пишут код, плохие пишут код, и гениальные тоже пишут код. Именно код выражает результат труда программиста. Код это то, что запускается на компьютере когда вы ставите свою программу. Именно баги в коде буду донимать ваших пользователей. Именно продуманность кода даст вам конкурентное преимущество, когда вы перейдете на новую платформу и выпустите новую версию за неделю, в то время как ваши конкуренты второй месяц пытаются понять что там теперь падает.
Не так страшно, если программист плохо выражает свои мысли в словах. Страшно, если он плохо выражает их в коде.
Эмм, разумеется это то же хорошие ответы.
Какая формулировка в статье заставила вас подумать, что я считаю единственно допустимым течением беседы то, которое я привожу как пример?

Тут скорее идея была в том, что одного ответа на вопрос мало — ответ (или вопрос) кандидата порождает ответную реакцию от вас и так далее.

— вы запустили программу с хипом в 2 гигабайта и она работает медленно, что будете делать?
— а что за программа? какие инструменты есть в моём распряжении? почему вы считаете важным размер кучи?
— Ну интуитивно мне кажется что реализация упирается в память(скажем, я вижу что ответы идут с характерными паузами). Хотя может и нет. На самом деле я даже не уверен что она работает «медленно» — может быстрее эта задача в принципе не решается. Но все же, хочется ускорить. Так как вы начнете выяснять в чем проблема? (инструменты — любые)
не существует «правильных» ответов

Да, но именно это я и имел ввиду когда говорил, что цель таких простых вопросов — понять образ мыслей кандидата.
Заметил, что на собеседованиях гоняют по быстродействию/оптимальному использованию памяти. На практике — в 99% случаев никто об этом не думает.

Это как раз плохие вопросы. Я думаю если по работе вы ни разу не «утыкались» в gc то и спрашивать об этом кандидата нет смысла. Наверняка в вашей работе есть и другие нюансы — о них и надо спрашивать.\

Про то что для определенного уровня нормально писать не задумываясь — с этим не согласен.

Information

Rating
Does not participate
Registered
Activity