186
Karma
0
Rating
Андрей Манкевич @andrei_mankevich

Google Certified Android Developer

Как я нашел пасхалку в защите Android и не получил работу в Google

+1
Интервьювер спросил про другие решения, собеседуемый не придумал ничего другого. Возможно даже были подсказки. Потом, ведь надо же какое-то решение написать, да?

Вот вы сейчас зачем-то придумываете то, чего не было :)

Интервьюера устроил мой ответ с base64 для экранизации разделителей, и я его реализовал в google docs. После этого мне предложили реализовать base64. А вот дальше с подсказками интервьюера с горем пополам я написал что-то похожее на base64.

Даже если бы я сходу наизусть выдал base64 — это не гарантировало бы прохождение телефонного интервью. Потому что это так себе решение для исходной задачи, мягко говоря.

Чисто формально я решил исходную задачу. Но ведь цель собеседования не в этом же :) Увеличить размер исходных данных на треть и ничего не сказать про это, не оценить плюсы и минусы такого решения, остановиться на первой попавшейся идее — это все плохо и не для Гугла. Поэтому я и не попал дальше по конвееру собеседований, а не из-за незнания внутренностей base64.

Говорят, что очень возможна и обратная ситуация: можно не решить исходную задачу, но пройти собеседование. Охотно верю.

Как я нашел пасхалку в защите Android и не получил работу в Google

+1
И вот именно людей с подобным подходом и было призвано отсеять собеседование.

Да я только «за». Я еще раз хочу уточнить: я этот пост не потому написал, мол посмотрите, вот я непризнанный гений, а меня Google обидел. Просто Google — не мой уровень.

На собеседовании все было честно и справедливо. Чтобы найти пасхалку нужно только много свободного времени, больше ничего. Я безработный, времени у меня в избытке.

Это же хорошо, что в индустрии много людей, как я («с подобным подходом»). Пока нас много, у вас будет хорошая работа :) Если все были бы лучшими, то кто тогда работал бы в топовых компаниях?

Как же все задолбали выдёргиванием этой фразы из контекста.

Зачем так сразу категорично? Я видел цитату про преждевременную оптимизацию в контексте этой статьи.

Communications of the ACM CACM Volume 17 Issue 12, Dec 1974

Тут как раз про излишнюю оптимизацию и рост сложности.

Computer Programming as an Art by Donald E. Knuth
Another important aspect of program quality is
the efficiency with which the computer's resources are
actually being used. I am sorry to say that many people
nowadays are condemning program efficiency, telling
us that it is in bad taste. The reason for this is that we
are now experiencing a reaction from the time when
efficiency was the only reputable criterion of goodness,
and programmers in the past have tended to be so
preoccupied with efficiency that they have produced
needlessly complicated code; the result of this unnecessary complexity has been that net efficiency has gone
down, due to difficulties of debugging and maintenance.

The real problem is that programmers have spent
far too much time worrying about efficiency in the
wrong places and at the wrong times; premature
optimization is the root of all evil (or at least most of it)
in programming.


We shouldn't be penny wise and pound foolish, nor
should we always think of efficiency in terms of so
many percent gained or lost in total running time or
space. When we buy a car, many of us are almost
oblivious to a difference of $50 or $100 in its price,
while we might make a special trip to a particular
store in order to buy a 50¢ item for only 25¢.

Как я нашел пасхалку в защите Android и не получил работу в Google

+2
Я могу только сказать, что Base64 было первым, что пришло мне в голову :) Простое готовое решение из коробки, а весь код задачи занимает три строчки. Страшно признаться, но я даже не знал, на сколько именно вырастут исходные данные. Всю жизнь использовал и в голову не приходило посмотреть, что из 3 байт выходит 4, а размер увеличивается на треть.

Я так привык: есть задача — решаем, есть проблема — оптимизируем. «Преждевременная оптимизация — корень всех зол.» (с) Дональд Кнут.

Это плохо и точно не характеризует меня как хорошего разработчика. Поэтому с Гуглом нам оказалось не по пути.

Десятки миллионов закачек моих приложений — к сожалению, это не моя заслуга. Просто время раньше такое было: можно было выложить что угодно в Google Play и получить миллионы бесплатных инсталлов.

А вообще мне интервью понравилось, и интервьюер тоже. Приятный парень, я после интервью был уверен, что я его прошел. У меня из моего опыта общения с сотрудниками гугла пока складывается впечатление, что главный критерий отбора у них — это быть приятным в общении :) После статьи несколько человек из Цюрихского офиса отписались, посоветовали, как готовиться и т. д.

Как я нашел пасхалку в защите Android и не получил работу в Google

+1
Я в миграционном законодательстве не очень, но насколько я понимаю, нужен только residence permit. Но он в любой стране Евросоюза нужен, если живешь там больше 90 дней, а не туристом. Ну и для Болгарии и Румынии больше каких-то ограничений.

Вообще это наименьшая из проблем (если можно назвать это проблемой). Ни разу не слышал, чтобы какая-то бумажная волокита стала препятствием в устройства на работу.

Разве что в штатах сложнее, да. Знакомый прошел собеседование, а с квотой пролетел.

Как я нашел пасхалку в защите Android и не получил работу в Google

+1
На самом деле я это собеседование проходил 2 года назад. Просто никак не мог побороть лень и написать статью :) Сейчас активнее ищу работу и наконец собрался с силами.

А из Google за два года я больше никаких сообщений не получал.

Как я нашел пасхалку в защите Android и не получил работу в Google

0
Спасибо за позитивный коммент! :)

Понимаю, может Google компания не самая выгодная, но это лучше, чем ничего (я последние пару лет безработный).

Мне уже написал один человек из Amazon, предложил пойти к нему в команду. Правда, там энтерпрайз в Канаде. Не знаю, может не тратить попытку и подать резюме в Amazon на что-то более релевантное моему опыту мобильного разработчика :)

Да, H1B нужен, конечно. Я в Цюрих метил прежде всего потому, что у меня гражданство Евросоюза и мне не надо никаких дополнительных разрешений-виз и т. д.

Как я нашел пасхалку в защите Android и не получил работу в Google

+3
Вот именно с этого я и начал (хранить размер массива, длину каждой строки и т. д.). Условие задачи было дополнено, мол строки прям бесконечно длинные. Настолько длинные, что нельзя хранить их размер, слишком он большой.

Насчет того, что хотел интервьюер. Я слышал такую версию, что их главная задача — нащупать предел компетентности кандидата. То есть будут менять условия и углубляться, пока не завалят. А оценивают по тому, как далеко удалось при этом уйти.

Как я нашел пасхалку в защите Android и не получил работу в Google

Как я нашел пасхалку в защите Android и не получил работу в Google

Как я нашел пасхалку в защите Android и не получил работу в Google

+1
вы наверняка даже не знаете про литкод

Да не то чтобы я был прям такой дремучий :)

Вот сейчас открыл глянуть свою статистику — 60 задачек на литкоде я решил, пока готовился. Много информации о прохождении собеседования, в том числе и на русском языке. На английском еще больше, это же не проблема.

Ну и может не совсем насчет комьюнити… Но мне уже два человека отписались из Цюрихского офиса Google, посоветовали как лучше готовиться и т. д. Так что взаимопомощь есть.

Как я нашел пасхалку в защите Android и не получил работу в Google

Как я нашел пасхалку в защите Android и не получил работу в Google

Как я нашел пасхалку в защите Android и не получил работу в Google

Как я нашел пасхалку в защите Android и не получил работу в Google

+1
Я все-таки должен отметить, что само общение было очень вежливым и корректным :) Но общение ограничилось вопросом «зачем», взыванию к совести и благоразумию и просьбой не шарить наработки с плохими людьми.

Как я нашел пасхалку в защите Android и не получил работу в Google

+1
Скажем так, я немного дальше зашел, чем эти сообщения. Дальше там тоже ничего интересного нет, к сожалению. Цели полностью симулировать работу DroidGuard у меня не было. Плюс у Google есть отличная возможность ответного хода — просто обновить эту нативную библиотеку, и все наработки по реверсу превратятся в тыкву.

Как я нашел пасхалку в защите Android и не получил работу в Google

+2
Хороший вопрос про софт скиллз. Недооцениваю, факт :) Я все время считал, что главное — это техническая часть и решить все задачи. Но мне уже объяснили, что не совсем так (особо для Google).

Как я нашел пасхалку в защите Android и не получил работу в Google

+3
Так я вроде и не писал, что я — недооцененный гений, а интервьюер спрашивает какую-то ерунду :) Все было честно и справедливо, а Google — просто не мой уровень. Это нормально, люди разные. Если бы все были одинаково умные, то как бы в Google попадали лучшие?

Получаем сертификат Google Associate Android Developer

0
Это много или мало? :) Честно говоря, там задание и сейчас не state-of-the-art (все-таки нужен Kotlin), а через 3 года разработку под Android будет опять не узнать.

Как я нашел пасхалку в защите Android и не получил работу в Google

+1
Проблема в том, что байт-код для проверки у гугла каждый раз новый и разный, а платный контент — уникальный и один на всех. После того, как виртуальная машина его расшифрует и он окажется в незашифрованном в виде в памяти, можно будет снять дамп и дальше его распространять.

Конечно, смотря о каком контенте идет речь и как этот контент используется. В том же DroidGuard даже значения переменных в памяти хранятся в зашифрованном виде. Но это не мешает с помощью дебагера перехватить их значения в тех местах где они используются.

Как я нашел пасхалку в защите Android и не получил работу в Google

0
Вот насчет заточки под прям конкретное устройство — я это не очень представляю. Но в целом вы сейчас еще раз описали принцип работы DroidGuard :)

Данные (строки, например) внутри байт-кода можно считать тем самым контентом. Байт-код несет в себе логику по работе с этими данными, а виртуальная машина исполняет команды.

Получаем сертификат Google Associate Android Developer

Как я нашел пасхалку в защите Android и не получил работу в Google

Как я нашел пасхалку в защите Android и не получил работу в Google

+3
Во-первых, у меня не было цели обмануть DroidGuard, я просто решил хорошо провести время :)
Во-вторых, защиту SafetyNet вполне успешно обходят, и это совсем не новость. Есть даже опенсорс реализация всех проприетарных гугловых сервисов microG Project.

Как я нашел пасхалку в защите Android и не получил работу в Google

0
Не совсем так. Например, в виртуальной машине есть команды: загрузить строку, загрузить через reflection класс с определенным именем, выполнить через reflection метод с определенным именем. Вот откуда это имя берется — это логика байт-кода. Чтобы узнать имя класса и имя метода, надо интерпретировать команды байт-кода, которые работают со строками.

Как я нашел пасхалку в защите Android и не получил работу в Google

+2
А его же вроде сейчас прикрыли (временно):
foobar is currently down for extended maintenance. If you'd like to be notified when we are back online, please sign up here.

Но вообще да, все эти приколюхи никаких преимуществ не дают. У Гугла все равны.

Как я нашел пасхалку в защите Android и не получил работу в Google

+7
Честно говоря, я после отказа наоборот понял, что в таком интервью куда больше смысла, чем в стандартных вопросах про Android SDK и про всякий синтаксический сахар Kotlin. Мне хоть и обидно, но их подход вполне оправдан. Завтра выйдет новый фреймворк, а фундаментальные знания не устареют.

Я пока пару лет делал игры на Unity, так в Android успела революция произойти: вместо Java пришел Kotlin, RxJava стал золотым стандартом, Android SDK распался на Android Jetpack Components… Ничего, все можно довольно быстро освоить. Даже сертификат получил красивый от Google.

Насчет перезвонят я так скажу. Собеседование я проходил чуть больше года назад :) Не перезвонили. Но я им сам недавно повторно написал. Если посмотреть правде в глаза, они мне нужнее, чем я им: Google в резюме — он такой один, а из таких как я у них очередь стоит.

Как я нашел пасхалку в защите Android и не получил работу в Google

+2
А смысл? :) Это же не дает ровным счетом ничего, никаких преимуществ. Если нет знакомых работающих в Google, можно просто попробовать в linkedin написать кому-нибудь и попросить отправить резюме эйчарам. Будет ровно такой же результат.

Как я нашел пасхалку в защите Android и не получил работу в Google

+6
А почему «отомстил»? Я свое обещание (не болтать лишнего) в целом-то сдержал. Кода виртуальной машины нет, как работает интерпретатор не рассказал… А вся остальная информация и так была в интернете — про запрос, про protobuf, про apk и так далее. Разве что про спрятанные сообщения никто не писал.

Как я нашел пасхалку в защите Android и не получил работу в Google

+5
Вот именно этим DroidGuard и занимается: отличает настоящие живые устройства от эмуляторов, рутованные девайсы или нет и так далее.

Как я нашел пасхалку в защите Android и не получил работу в Google

+2
Защититься от ботов, которые делают вид, что они настоящие Android устройства.
Для этого DroidGuard собирает определенную информацию о девайсе. Какую именно информацию — это решает логика, заложенная в байт-код. Байт-код каждый раз новый возвращается с сервера. По итогу чтобы написать бота, надо реализовать виртуальную машину, которая сможет интерпретировать байт-код DroidGuard.

Как я нашел пасхалку в защите Android и не получил работу в Google

Как я нашел пасхалку в защите Android и не получил работу в Google

+6
Спасибо, очень приятный комментарий! :)

Хотя точно могу сказать, что мне подготовка пошла все-таки в плюс. Теперь каждый раз когда пишу код, автоматом думаю о сложности O(n). Раньше такие вопросы приходили в голову только если что-то медленно работало и это дело надо оптимизировать.

Как я нашел пасхалку в защите Android и не получил работу в Google

+2
Я вот об этом не подумал, поэтому такого вопроса не ожидал :) А вообще вопрос очень логичный в контексте проекта DroidGuard. Битовые операции, все дела.

Как я нашел пасхалку в защите Android и не получил работу в Google

+17
Насчет корпоративной машины и шаблонного подхода так и было, но другого пути у них в принципе не существует.

Когда-то Макса Хоувел (разработчика Homebrew) не взяли в Google. Он по этому поводу такой твит выдал:
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.

Я уже немного наелся самореализации, хотелось обратно в уютный мир, где каждый месяц за работу платят деньги :) Увы, пока не сложилось.

Как я нашел пасхалку в защите Android и не получил работу в Google

+32
При этом гении-олимпиадники внутри Google не могут родить ничего дельного (я на Google в обиде, имею право так считать).
Насколько я понимаю, тот же DroidGuard — проект компании Impermium. Google поглотил Impermium, команда перешла в Google, а в Android появилась толковая защита от фрода.

Как я нашел пасхалку в защите Android и не получил работу в Google

+37
Для меня вообще собеседования — это жуткий стресс. Поэтому я по ним не хожу и опыта прохождения не имею :) Я могу по пальцам одной руки перечислить все свои собеседования в жизни.
Но я бы и в спокойной обстановке не выдал Base64, просто потому что понятия не имел как он работает и всю жизнь воспринимал его как данность. А ведь это так, только цветочки перед 5 ягодками настоящего очного собеседования.
Мне процесс собеседования показался очень сложным, и я бесконечно далек от этого уровня. Не знаю, зачем Гуглу нужны все эти гении-олимпиадники, но им виднее.

Патентные тролли начинают и выигрывают: как я остался без игры

0

Компания "Паритет лифт" зарегистрировала товарный знак "Балда" в отношении перечня товаров, куда вошли "программы для компьютеров; программы игровые для компьютеров" только 27 августа 2018 года. Мои игры были удалены раньше этой даты: 3 января 2018 года из Google Play и 19 февраля 2018 года из App Store.

Патентные тролли начинают и выигрывают: как я остался без игры

+3
Хватит выдавать вашу фантазию за мою позицию. Я не просил никого заступаться и не призывал устраивать «охоту на ведьм». Я просто решил поделиться интересной историей.

Почитайте статью, там написано, чего я хотел от Гугла.

Патентные тролли начинают и выигрывают: как я остался без игры

+4
Совет «идти в суд» просто гениальный, до такого еще никто не додумался (нет).

Но спасибо вам, что я вашей истории всего-лишь пирожками у метро торговал, а не в публичном доме работал.

Патентные тролли начинают и выигрывают: как я остался без игры

1 There