Много лет назад как раз релоцировался в Mail.RU. Так же оплачивали все стартовые вещи, никакого года отработки не требовалось.
Потом поработал в Яндексе, и самое смешное, что с моей колокольник оба автора правы, если не во всём, то во многом. И способ собеседований такой какой он есть не просто так, и кажется мне более адекватным, чем казался раньше. И система ревью тоже не от хорошей жизни родилась. И при этом очевидно, как любая механическая система при работе с реальными людьми, она встречается с кучей способов ее абьюзить, что выливается в достаточно неприятные явления, как у первого автора.
Новичок, строго говоря, вряд ли готов гарантировать, что вообще будет программировать. Изучить язык (до какого-то условного стартового уровня) кажется все-таки первично. Затем может последовать обучение программированию. А может не последовать.
Если можно, немножко позанудствую: в java нет запретов на несколько классов в одном файле. Единственное ограничение: не более одного класса верхнего уровня, видимого за пределами пакета.
Я бы добавил еще один пункт: неистовое желание следовать переменчивой технологической моде. Несколько раз видел кашу из нагромождения хипстерских решений, сменяющих друг друга со скоростью, не позволяющей разобраться хотя бы в одном из них.
Для меня — однозначно да. Даже если одна строка. Мне настолько комфортнее нажимать на кнопки, чем держать в руках ручку, что я просто буду меньше нервничать и, соответственно, больше внимания уделять самому вопросу.
Действительно, как-то не подумал. Конечно, еще останется проблема с нативным кодом, использующем понимание Java Thread = OS Thread. Ну и в целом, в неведомом коде может быть куча логики вокруг currentThread, какие-нибудь свои велосипедные ThreadLocal'ы.
Кажется, совсем не обязательно наслушиваться Шипилева, чтобы начать говнокодить сразу в несколько потоков. И как раз эта категория разработчиков вполне может сделать медленнее на файберах, чем просто линейно. Но да, быстрее, чем на тредах)
Нельзя бездумно возвращать тот же самый shadow thread в currentThread. Можно поломать какой-нибудь хитрый happens-before в чужой логике оптимизаций, где будет currentThread == previousThread -> optimized branch; else -> common branch.
Блокирование на большинстве IO-операций и reentrant lock'ах будут «отдавать» текущий тред на корм другим Fiber'ам. Даже уже написанный код. И да, Main не станет Fiber'ом. Однако запустить Fiber на ForkJoinPool'е так же просто, как и запустить Runnable. При этом его не потребуется аккратно разбивать на части — внутри может выполнятся «как бы последовательный» код, в том числе легаси, в том числе уже скомпилированный до нас. Т.е. запускаем миллион Fiber'ов (вместо Runnable) и они перестают блокировать друг друга ожиданиями IO и прочими lock'ами. Упираемся дальше фактически в CPU, что много лучше, чем упираться в конфигурацию ThreadPool'а.
Ну все-таки каждая строчка перебор, кажется, что переключение контекстов файберов хоть и дешевле тредов, но не бесплатно. Думать головой, к сожалению, все еще придется.
Тем не менее, в большинстве случаев, средневзятому пользователю пары тысяч потоков вполне хватит. (нисколько не хочу умалять потребность в кооперативной многозадачности)
Потом поработал в Яндексе, и самое смешное, что с моей колокольник оба автора правы, если не во всём, то во многом. И способ собеседований такой какой он есть не просто так, и кажется мне более адекватным, чем казался раньше. И система ревью тоже не от хорошей жизни родилась. И при этом очевидно, как любая механическая система при работе с реальными людьми, она встречается с кучей способов ее абьюзить, что выливается в достаточно неприятные явления, как у первого автора.
Если можно, немножко позанудствую: в java нет запретов на несколько классов в одном файле. Единственное ограничение: не более одного класса верхнего уровня, видимого за пределами пакета.
А проект на гитхаб выложен? Я недавно сменил стек технологий, но очень скучаю по Java, мог бы попробовать законтребьютить по фану.