В принципе, я бы даже понял, если бы они захотели проверить, знаю ли я этот алгоритм. Алгоритмический кругозор еще никому не повредил. Но там речь была о том, чтобы я о нем догадался в реальном времени. Embedded developer все же за свою карьеру немного другие навыки.
Покажите мне, пожалуйста, продакшен код, который использует подобные решения. «Бесконечный» — в смысле нельзя сказать «скисок не может быть больше N» (а обычно не может, а в embedded N скорее всего будет еще и достаточно маленьким).
Эм… Ну я знаю что такое односвязный список, и в разных вариантах его реализовывал в девайсах. В работе программисту приходится вставлять/удалять в списки, конкатенировать, сливать, инвертировать. Если уж понадобилось искать зацикливания, то нормальное рабочее решение — добавить флажок «пройдено» к структуре и закрыть на этом вопрос. Или положить, что список не может быть больше N и если мы прошли больше N шагов, значит мы заблудились. Честно, ни разу не видел в коде таких «решений», это правда больше похоже на олимпиадную задачку.
Нет. Память, впрочем нужна только для списка, а время пропорционально его длине, но сам список просто односвязный и добавять в него поля никак нельзя.
Рассказываю решение: берете два указателя, и пускаете их в цикле по списку от головы вперед, один со скоростью два (три, четыре, всё равно) элемента за итерацию, второй — по одному элементу. Если второй указатель «столкнулся» с первым, значит есть зацикливание, если дошел до конца — нет. Ну, в общем, или догадаешься или не догадаешься. Головоломка.
Живо себе представляю программиста, который таким образом решает задачу в реальном проекте. Особенно в embedded.
Ну, я потом выяснил, что многие так делают и открыл для себя целый мир «вопросов для собеседований», но все равно не понимаю, зачем так делать. Мне ближе более деловой подход, когда у компании есть конкретная работа, которую нужно делать, и она проверяет, можешь ли ты ее делать, и насколько хорошо (качество кода, там, best practices). Хотя это больше для продуктовых компаний, наверное.
Вот-вот. Самое идиотское собеседование, которое я проходил (хотя, по правде сказать, у меня за всю карьеру было всего три собеседования), было как раз в дочке Люксофта. Я пришел туда на позицию embedded software developer с опытом, не для студентов. По телефону было нормальное такое собеседование, задавали вопросы про проекты на прошлой работе, язык C и, собственно, Linux, все прошло хорошо, пригласили на очное.
А вот на очном было что-то странное. Или вопросы по C, но из серии «что будет, если написать так, как нормальный программист на C не напишет никогда». Или же задачки как бы по программированию, но в совершенно нереалистичных условиях, вроде «найти зацикливание в бесконечном списке за бесконечное время с бесконечной памятью», те же головоломки по сути. Справедливости ради, я так офигел от происходящего, что на пару нормальных вопросов тоже не ответил.
Спасибо!
Было бы круто, если бы вы добавили еще несколько ссылок на ту литературу по которой вас учат (если в открытом доступе есть учебные материалы — вообще шикарно).
Да все так делают. Это общее место, что если хочешь больше получать — нужно менять работу. Почему — загадка, возможно, работодателям тоже надоедает видеть одни и те же лица в офисе.
Я помню на экзамене по английскому в институте (был у нас такой странный предмет) мне снизили оценку за то, что я перевел «current version», как «текущая версия». Текущей бывает только река, сказала мне экзаменатор.
Но ведь действительно предлагают. Причем одна и та же компания может нового человека с опытом брать на большую зарплату, чем платит своим сотрудникам с тем же опытом. Возникает подозрение, что текучка на самом деле всем нравится.
Человек, который чуток поучится и потом «свалит» на большую зп — да, удержать нельзя, но выглядит это не совсем честно.
Вот этого я в IT-менеджменте совершенно не понимаю. Неужели нельзя заранее посчитать, сколько будет стоить на рынке человек, который получил у нас опыт, и заложить соответствующее повышение зарплаты в расходы сразу? Зачем заставлять человека «скакать»?
Для поиска работы в LinkedIn не нужно ничего платить, только за дополнительные плюшки вроде фильтра по зарплате. Вот размещение вакансии — да, платное.
По-моему, профиль в LinkedIn — это способ разместить свое резюме в открытом доступе не вызывая ненужных вопросов. Будет жаль, если он загнется.
>> Согласен, но в мелких фирмах иногда роль админа исполняет кто-нибудь из персонала
Мой point был исключительно в том, что если такой человек захочет профессионально развиваться в сфере IT, то от Linux ему никуда не деться.
А так да, некоторым фирмам не нужен админ в штате, достаточно переставлять винду периодически =)
А зачем вам тогда разные операционные системы? Наоборот, нужен предельно интегрированный загончик навроде Android, чтобы никаких лишних телодвижений юзер сделать не мог. Фирменная ОС, фирменное железо, всякиe сторонние девайсы тоже фирменные или «approved». У пользователя никаких проблем ценой как раз нестандартных фич и скорости развития. Жаль, что до сих пор это удавалось реализовать только на планшетах и телефонах.
Погодите, вы недавно говорили, что вы не профессионал. Я запутался.
Не то, чтобы я хотел (и мог) давать вам советы по профессиональному развитию. Если вы занимаетесь поддержкой компьютеров, которые сами не контолируете, то тут вам знание Linux действительно мало что добавит — разве что вы сможете брать клиентов с Линуксом, а не только с Виндой. Если же вы администратор, то Линукс мог бы многое вам упростить, если не на пользовательских машинах (не всегда под Linux есть весь нужный софт для тех же дизайнеров, к примеру), то на сервере точно.
Поддерживать линуксовые машины проще, чем виндовые. В описанном вам случае вы можете:
— Подключиться по ssh и выполнить всю установку самостоятельно (это если вы администратор и у вас есть рутовый доступ).
— Написать юзеру все необходимые операции в письме. По-моему это проще, чем управлять движениями мышки пользователя на экране — открыл почту и терминал, copy, paste и готово.
— Вариация предыдущего: послать пользователю shell-скрипт, который все сделает за него.
С законами это очень плохая идея. Не знаю даже, кто будет от этого в выигрыше, кроме государства. Стандарты должны вырастать из профессиональной среды, а не навязываться ей извне. Сейчас есть разные группы, которые ставят себе целью стандартизацию, например, freedesktop или рабочая группа Linux Standard Base. Не слышал, чтобы кто-нибудь занимался стандартизацией GUI, но мне кажется, что для непрофессионалов Ubuntu с GNOME уже стандарт де факто.
Да я ж и не говорю, что забавы ради.
Скажем так, есть люди, которые пользуются операционной системой, и есть люди, которые пользуются только программами (не исключая оконный менеджер, файловый менеджер и пр.), написанными под операционную систему. Вторым по большому счету нет дела до операционной системы, главное — экосистема; никто же не говорит, что Windows Phone лучше Android, потому что под Андроидом лежит Linux. А тем, кому по долгу службы (ну или по призванию) приходится общаться с самой операционной системой, Unix-подобные системы предлагают то, чего они больше нигде не найдут.
Да я и сам с радостью признаю недружелюбность Unix. Не нужна никому (почти) эта дружелюбность сегодня. Linux дружелюбен к программистам, администраторам и всем, кто хочет делать со своей системой что-то нетривиальное. Ко всем остальным дружелюбны Windows, OSX (говорят, не проверял) и всяческие domain-specific штуки вроде Android (которые могут строиться в т.ч. и на Linux, это не забота пользователя). Никаких оскорблений, я люблю менеджеров по продажам, без них у программистов не было бы зарплаты =)
Рассказываю решение: берете два указателя, и пускаете их в цикле по списку от головы вперед, один со скоростью два (три, четыре, всё равно) элемента за итерацию, второй — по одному элементу. Если второй указатель «столкнулся» с первым, значит есть зацикливание, если дошел до конца — нет. Ну, в общем, или догадаешься или не догадаешься. Головоломка.
Живо себе представляю программиста, который таким образом решает задачу в реальном проекте. Особенно в embedded.
А вот на очном было что-то странное. Или вопросы по C, но из серии «что будет, если написать так, как нормальный программист на C не напишет никогда». Или же задачки как бы по программированию, но в совершенно нереалистичных условиях, вроде «найти зацикливание в бесконечном списке за бесконечное время с бесконечной памятью», те же головоломки по сути. Справедливости ради, я так офигел от происходящего, что на пару нормальных вопросов тоже не ответил.
Было бы круто, если бы вы добавили еще несколько ссылок на ту литературу по которой вас учат (если в открытом доступе есть учебные материалы — вообще шикарно).
Вот этого я в IT-менеджменте совершенно не понимаю. Неужели нельзя заранее посчитать, сколько будет стоить на рынке человек, который получил у нас опыт, и заложить соответствующее повышение зарплаты в расходы сразу? Зачем заставлять человека «скакать»?
По-моему, профиль в LinkedIn — это способ разместить свое резюме в открытом доступе не вызывая ненужных вопросов. Будет жаль, если он загнется.
Мой point был исключительно в том, что если такой человек захочет профессионально развиваться в сфере IT, то от Linux ему никуда не деться.
А так да, некоторым фирмам не нужен админ в штате, достаточно переставлять винду периодически =)
Не то, чтобы я хотел (и мог) давать вам советы по профессиональному развитию. Если вы занимаетесь поддержкой компьютеров, которые сами не контолируете, то тут вам знание Linux действительно мало что добавит — разве что вы сможете брать клиентов с Линуксом, а не только с Виндой. Если же вы администратор, то Линукс мог бы многое вам упростить, если не на пользовательских машинах (не всегда под Linux есть весь нужный софт для тех же дизайнеров, к примеру), то на сервере точно.
Поддерживать линуксовые машины проще, чем виндовые. В описанном вам случае вы можете:
— Подключиться по ssh и выполнить всю установку самостоятельно (это если вы администратор и у вас есть рутовый доступ).
— Написать юзеру все необходимые операции в письме. По-моему это проще, чем управлять движениями мышки пользователя на экране — открыл почту и терминал, copy, paste и готово.
— Вариация предыдущего: послать пользователю shell-скрипт, который все сделает за него.
С законами это очень плохая идея. Не знаю даже, кто будет от этого в выигрыше, кроме государства. Стандарты должны вырастать из профессиональной среды, а не навязываться ей извне. Сейчас есть разные группы, которые ставят себе целью стандартизацию, например, freedesktop или рабочая группа Linux Standard Base. Не слышал, чтобы кто-нибудь занимался стандартизацией GUI, но мне кажется, что для непрофессионалов Ubuntu с GNOME уже стандарт де факто.
Скажем так, есть люди, которые пользуются операционной системой, и есть люди, которые пользуются только программами (не исключая оконный менеджер, файловый менеджер и пр.), написанными под операционную систему. Вторым по большому счету нет дела до операционной системы, главное — экосистема; никто же не говорит, что Windows Phone лучше Android, потому что под Андроидом лежит Linux. А тем, кому по долгу службы (ну или по призванию) приходится общаться с самой операционной системой, Unix-подобные системы предлагают то, чего они больше нигде не найдут.