Про те як мій знайоми пройшов співбесіду в Гугл

Одразу скажу – ні, це не я, це справді знайомий з яким ми недалеко сидимо одне від одного. Я поки йти нікуди не збираюся, але в майбутньому звісно усе можливо.

Ну так от, ось цей мій знайомий на днях пройшов інтерв’ю в гуглі, отримав офер і переходить до них працювати через пару тижнів.

Звісно ми з ним обговорювали як проходив весь процес, що питали і таке інше. І я згадав що недавно тут у блозі мене питали як проходять інтерв’ю в американських софтверних компаніях, що питають, які вміння очікують. Отже можна знову трошки про це поговорити.

Перше що треба повторити це те що у великих компаніях типу Microsoft, Google, Amazon, тощо вас не беруть за те що ви добре знаєте якусь мову чи якийсь фреймворк. У якихось дуже окремих випадках вас можуть взяти за якісь специфічні знання типу вміння писати компілятори чи менеджер пам’яті в ОС. Але у більшості випадків компанії шукають просто розумних людей які б могли розв’язувати проблеми та знаходити рішення. Бо мови, фреймворки та проекти виникають і зникають, а продукти клієнтам треба продовжувати продавати.

Тому коли ви починаєте процес інтерв’ю з тим же гуглом то не очікуйте що у вас будуть питати знання хоч якоїсь мови чи технології (знову ж таки якщо ви не в команду компілятор/ядро/залізо йдете) і задачі які вам будуть давати можна розв’язувати будь-якою мовою якою вам зручно. Також дуже важливо те що це не процес прийнятий в гуглі в цілому – може бути що у кожної команди чи офіса свій процес, я просто переказую те що почув.

Так ось цей мій знайомий він переважно С++ програміст, місцями щось робив на Java, але ніколи її не вчив. Гумор ситуації в тому що співбесіда проходила в офісі в Кікрланді, а працювати він буде в іншому штаті де і буде його команда. І коли він питав які мови/інструменти і таке інше треба буде використовувати йому відповідали “а звідки ми знаємо? на місці і спитаєш”. Скоріше за все проте буде Java бо це внутрішній проект, ну та то таке. Це я до того щоб в черговий раз повторити що софтверні компанії які знають як писати софт і вміють це робити наймають людей не на задачу чи проект, а в компанію в цілому – тобто людей яких можна буде при необхідності використати будь-де.

Ну а тепер до самого інтерв’ю та питань.

Звісно спочатку було телефонне інтерв’ю де ХР задають питання по своїй якійсь внутрішній анкеті щоб відсіяти зовсім безнадійних. Ну може бути ще інтерв’ю з представником команди що наймає, але оскільки це телефонне інтерв’ю то там або писати код не треба взагалі, або писати щось дуже умовне у вікні чату. Для такого інтерв’ю треба знати основні алгоритми пошуку/сортування/обходу графу і структури даних як вектор, список, бінарне дерево, черга, стек, хеш-таблиця і так далі. Також треба розуміти що таке “О велике”, як воно вимірюється і що означає.

Після проходження телефонного інтерв’ю (називається “скріннінг” – screening) запрошують on site. Тепер інтерв’ю проходять в кімнатах з дошками де інтерв’юери дають задачі, а ви їх розв’язуєте. Усього відбувається 5 інтерв’ю по 45 хвилин кожне з перервою на обід та 15 хвилин відпочинку між зустрічами. За ці 45 хвилин треба зрозуміти задачу, задати уточнюючі питання, знайти рішення, написати його на дошці і обговорити додаткові питання стосовно рішення. Повторюся що оцінюють ваші вміння розв’язувати задачі в принципі і написання 100% працюючого коду не є гарантією найму. Краще не дописати щось чи написати умовно, але показати що ви на шляху до правильного рішення і розумієте усі недоліки, переваги та обмеження рішення яке пропонуєте.

Тепер безпосередньо до задач.

Перша задача така. У нас є сейф з кодом з чотирьох цифр. Кожна наступна введена цифра зміщує введену комбінацію на одну позицію вліво (тобто старша цифра втрачається). Перше питання – якої мінімальної довжини має бути послідовність цифр щоб гарантовано відкрити сейф? Ну тут треба зрозуміти що з наявного коду ми можемо взяти три останні цифри і додати до них четверту щоб утворилася нова комбінація. Тобто для 10000 можливих комбінацій нам треба усього 10003 цифри.

А друге питання – згенерувати таку послідовність. Тут думайте самі :)

Друга задача. Згенерувати лабіринт заданого розміру так щоб у нього був гарантований вхід і вихід і вони були б поєднані. Існує багато алгоритмів генерації лабіринтів, мабуть найпростіший буде модифікований пошук в глибину з поверненням до попередніх позицій (backtracking), щось типу такого – https://en.wikipedia.org/wiki/Maze_generation_algorithm#Depth-first_search. Якщо не хвилюватися і спокійно подумати то цей алгоритм можна “винайти” самостійно доволі швидко. Ну або можна уявити кожну позицію в лабіринті як вузол у дереві і почати будувати зв’язки між ними.

Третя задача. Реалізувати BigInt. Це такий тип даних де розмір числа не обмежений. Тобто треба скажімо створити клас, додати підтримку усіх арифметичних операції, конвертацію типів, конвертацію в/з рядка. Але додаткова вимога – реалізувати операцію додавання довільної кількості BigInt’ів (наприклад вектору) у найбільш ефективний спосіб. Теж нічого надзвичайного, але якщо ви знаєте якісь хитрощі цілочисельних операцій для якоїсь платформи то це дуже стане у нагоді і допоможе позитивно вразити інтерв’юера.

Четверта задача. Спроектувати архітектуру (ніякого кодінгу) сервісу обміну повідомленнями: клієнти, повідомлення що десь зберігаються і їх можна шукати і таке інше. Тобто усе включно з тим як і де зберігаються дані, як усе це передається та підтверджується, і усі інші нюанси про які можна подумати. Звісно тут є великий простір для обговорень усього що завгодно. До того ж таке питання показує область знань та інтересів кандидата. І мабуть як і в Microsoft четверте і п’яте інтерв’ю проводять лише якщо три попередні пройшли добре, хоча компанії кажуть що це не так :)

П’ята задача. Тут я не всі деталі зловив, але склалося таке враження що інтерв’ю це було вже не надто обов’язкове. Задача як така стосувалася внутрішнього представлення чисел типу double (мантиса, експонента, ну ви в курсі) та як можна реалізувати певні арифметичні операції з ними на платформі де нема підтримки такого формату “з коробки”. На цьому інтерв’ю той хто дав задачу пояснював усе включно з тим як числа представлено і як вони нормалізуються і просто треба було показати що розумієш як працювати з бітами та байтами та де можна зробити оптимізації.

Ну ось таке от :)

Про плавання

Плавання як вид спорту входить разом з бігом, велоспортом, тріатлоном, біговими лижами та греблею до невеликої групи так званого спорту “на витривалість”. Звісно в кожному з вище названих видів є і швидкісні підвиди, але переважно усі сприймають будь-який з цих видів фізичної активності як щось що роблять протягом години і більше. І такі види вимагають довгої підготовки тіла до того щоб ефективно витрачати енергію, або мінімізувати її витрати при максимальному результаті.

І навіть з усіх вищеназваних видів активності плавання стоїть окремо…

Тут треба зробити невеличкий відступ і одразу сказати що у плаванні я чайник, не маю ніяких ілюзій щодо свого рівня та умінь і навіть близько не ставлю себе на один рівень разом з людьми хто хоч скількись займалися плаванням. А тому і вам треба сприймати усе далі написане критично.

Отже… Головне що відрізняє плавання – це техніка. Причому не скільки техніка рухів як її розуміють у, наприклад, бойових мистецтвах, а саме координація рухів. У плаванні дуже велику важливість має час активізації кожного м’язу і здійснення кожного руху. Причина в тому що вода є набагато щільнішим середовищем ніж повітря і кожен невчасно чи невірно зроблений рух помітно гальмує плавця.

Також у мене є для вас погані новини. Якщо ви не навчилися нормально плавати у дитинстві (тобто у секції і з тренером) тим менше результатів ви зможете досягти чим більший ваш вік. Тобто чим пізніше ви почали вчитися плавати тим нижчий ваший потенційний максимум. Тому якщо ви хоч якось плаваєте і робите це (чи думаєте що робите це) регулярно – негайно біжіть шукати тренера!

Років 20 з чимось тому мене навчили основним хитрощам плавання вільним стилем: як дихати на обидва боки, як тримати темп, що робити з ногами і таке інше. Але тривало все це усього три місяці і після того часу я плавав дуже рідко. І аж коли по переїзду в США зайнявся тріатлоном то почав знову плавати більш-менш регулярно в басейні. Через пару років я відчув що функціонально мабуть готовий перейти на інший рівень і найняв собі і Олені тренера. Усього пари занять з відеозйомкою вистачило щоб забезпечити нас матеріалом для самовдосконалення ще на кілька років. А минулого року знову найняли тренера на кілька занять і знову цього схоже вистачить надовго.

Ви можете спитати – для чого ж тоді взагалі тренери та самовдосконалення якщо все одно не наблизишся до людей які навчилися плавати нормально в дитинстві? У мене є кілька причин. Перша – чим краще ви плаваєте тим більше задоволення від цього отримуєте. І в більшості випадків цього достатньо щоб хотіти продовжувати вдосконалюватися. Друга причина – якщо ви приймаєте участь у змаганнях чи просто масових стартах з плавання, тріатлону, акватлону, тощо то у вас з’являється можливість витрачати набагато менше енергії на етапі плавання і використати її на бігові чи велосипеді.

І третя причина на якій я хочу зупинитися окремо – це менша травматичність плавання ніж інших спортивних видів на витривалість. В плаванні нема постійних ударів по м’язах та суглобах як у бігові, нема перегрівання як у тому ж бігові чи лижах, нема божевільного темпу серцебиття як у велоспорті чи лижах, нема надмірного навантаження на поперек та хребет як у греблі і так далі. У воді у вас завжди не шокова температура, нормальне серцебиття завдяки рівномірному диханню – а без рівномірного дихання ви просто не зможете проплисти скільки-небудь довгу дистанцію. Так, правильне дихання є ще однією перевагою плавання – ви можете не вміти правильно дихати у інших видах і це вас уповільнить звісно, але лише у плавання правильно дихати – обов’язково.

З іншого боку є певна психологічна проблема пов’язана з плаванням. І проблема ця дуже серйозна, навіть не сподівайтеся що вона вас омине якщо ви почнете займатися плаванням. Проблема пов’язана саме з неефективністю техніки та розсинхронізованості рухів. Плавання це не один з тих видів спорту де можна зціпити зуби і терпіти і додавати зусиль щоб покращити результат. Ні, з неправильною технікою ваші додаткові зусилля підуть на те щоб сильніше вас гальмувати. Ось і проблема – треба зупинитися, визнати що ви не уявляєте як правильно плавати і бути готовим до того що пройде дуже багато часу і тренувань до того як ви зможете самостійно пропливати довгі дистанції і отримувати при цьому задоволення від того як саме ви це робите.

В інтернеті, спортивних журналах та книгах можна знайти багато порад як саме починати плавати і що робити, але я знову закликаю вас не витрачати марно час і знайти собі тренера хоча б на кілька занять. Тренер не поставить вам ідеальну техніку, це взагалі вже не можливо, але він зможе вказати вам на найбільші проблеми (читай “гальма”) і скаже над чим працювати. Потім, через кілька місяців вам ще раз знадобиться кілька занять, потім ще, ще і так далі. Але ефективність буде незрівнянно вищою. І не тіште себе ілюзіями – плаваючи неправильно (і навіть не знаючи що саме неправильно у вас) ви не досягнете абсолютно ніякого прогресу скільки б та як часто ви б не плавали. Це не біг де можна потроху збільшувати дистанцію та/чи швидкість і ставати трошки кращим бігуном за якийсь розумний відрізок час (мова йде про роки).

І так, вміти дихати в обидва боки по черзі – це обов’язково для плавання вільним стилем і цьому треба вчитися одразу, а не “потім, коли буду плавати трохи краще”. Вміння правильно дихати якраз і дозволить вам працювати над іншими елементами техніки не звертаючи вже уваги на дихання і не обмежуючи себе.

Ну а тепер мабуть кілька слів чому плавання не завжди ідеальний вибір серед інших згаданих видів спорту. По-перше, далеко не усюди є доступ до басейнів чи відкритої води де можна було б плавати цілий рік. І особливо ця проблема вражає невеликі міста де або нема взагалі, або є лише літні чи зимові басейни.

Друга причина – плавання вимагає більше часу ніж біг. Потрібен час на дорогу, до того ж в басейнах можна плавати лише у спеціально відведені години. Порівняйте з бігом де вам усього лише потрібні кросівки, а далі виходите на вулицю при будь-якій погоді у будь-яку годину дня і біжите по будь-якому покриттю.

Третя причина – для багатьох людей плавання є дуже нудним видом спорту і плавати впродовж години буде для них тортурами через неможливість з кимось поговорити чи хоча б щось послухати. У мене такої проблеми нема, мені навпаки ізоляція така подобається, але не можна не визнати що у порівнянні з тим же велосипедом ви будете впродовж тривалого часу бачити лише плитку на дні басейну, а це не для всіх. Частково допомогти з цією проблемою можуть музичні плеєри для плавання, щось типу FINIS DUO чи  Aerb 4G Waterproof MP3 Music Player, але тут може зіграти наступна причина…

Також не можна відкидати вартість – для багатьох людей в Україні на жаль басейн може бути розкішшю яку не кожна родина зможе собі дозволити.

А які у вас думки щодо плавання?

Доповнення від 2023/06/27: на момент написання цього доповнення найкращими навушниками для плавання вважаю AfterShokz Xtrainers і раджу саме їх. У воді вони звучать набагато краще і чути стільки деталей, що аж дивно, що таке можливо.

[english] FNG

FNG, скорочено від “Fucking New Guy” (довбаний новачок) – термін який означає як не важко вгадати новачка у команді яка вже має велику кількість недокументованих правил і ритуалів.

 

Термін з’явився під час війни у В’єтнамі. На той час у армії США (ще призовній, нагадаю) було прийнято практику тренування і релокації цілих підрозділів де люди проводили багато часу тренуючись та навчаючись і приймаючи участь в бойових діях разом. Коли війна затягнулася виникла необхідність в ротації окремих людей, а не цілих підрозділів і в групи почали додавати новачків одразу кидаючи їх у бойові дії.

Такі новачки не маючи досвіду і не знаючи правил поведінки групи створювали небезпеку не лише для себе, але і для всієї групи. Тому найрозумнішим було думати і ставитися до таких новачків як розхідний матеріал який лише шкодить і заважає – не давати їм важливих завдань, не притягати їх до діяльності групи і так далі. І лише після певного часу якщо новачок виживав його визнавали за свого і приймали у коло.

Зараз цей термін означає не надто бажаного новачка у групі яка вже доволі давно працює разом. Наприклад менеджер бачить що програмісти у запарці і не встигають з проектами і приймає “геніальне” рішення додати людину в групу. Програмісти звісно будуть не надто раді – вони вже і так не встигають та завантажені по вуха, а тут ще новачок якого треба вчити, ознайомлювати з найпростішими речами, налаштовувати йому робоче оточення і відповідати на дурні питання. От і називають такого ласкаво FNG.

У словника:

Як дешево відправляти посилки з США в Україну

 

Питання про те як найдешевше відсилати посилки з США в Україну мені задають доволі регулярно (раз на місяць як мінімум) і тому  я нарешті вирішив “задокументувати” той спосіб яким користуємося ми. Одразу скажу що не буду стверджувати що це саме найдешевший спосіб, але кращого ми поки що не знайшли і якщо ви знаєте такий то будь-ласка дайте знати.

Також треба одразу сказати що мова йде про коробки розмірами мінімум 50 см на кожну сторону, а у нас як правило посилки в 3-4 рази більші. Якщо ж говорити про звичайні коробочки з книжкою/футболкою/мишкою то рекомендую відсилати звичайною поштою (USPS) і не морочитися з різними FedEx та UPS. Вийде відносно не дорого. Час доставки в Україну звичайною поштою – 3-4 тижні, швидше ніколи не було, навіть коли ми додатково оплачували швидшу доставку.

Тепер щодо великих коробок. Скажімо ви набрали усякого в магазинах на більше ніж 10 кг, прийшли на пошту і тут вже з’ясували що доведеться заплатити $150, а може і більше. Ось тут саме час подумати про те ” як дешево відправляти…” і далі те що в заголовку.

Ми користуємося послугами компанії MEEST (Міст) – http://meest.us/, українська версія – http://meest.us/ukr/index.html.

Працює це так. Ви знаходити контакти тих людей хто займається прийомом посилок поблизу вас на сторінці http://www.meest.net/. Ніякої різниці в цінах не буде, ціни стандартні, а різняться “агенти” лише тим де розташовані та коли можуть прийняти вашу посилку. Бо ті “агенти” то звичайні люди які підробляють таким чином приймаючи і накопичуючи у себе коробки.

Отже ви знаходите телефон, дзвоните і домовляєтеся коли можна буде привезти ваші коробки. Далі везете їх, зважуєте і тут же на місці платите чеком або налічкою. Вам дають квитанцію з номером за яким можна відстежувати пересування посилки. Але оскільки ми говоримо про найдешевший спосіб доставки то треба бути готовим що усе буде дуже довго.

З якоюсь періодичність, скажімо раз на місяць, до агентів приїздить вантажівка яка забирає усі коробки. Далі їх через кілька станцій везуть у якийсь порт (скоріше всього на східному березі США) і вантажать у великі контейнери які потім стають на баржу. І далі все це пливе через океан, розвантажується десь у Європі і розвозиться по адресам.

В Україні людина номер телефону якої ви вказали коли оформлювали відправлення отримає повідомлення і дзвінки на телефон про те коли буде доставлено посилку. Як правило на останньому етапі це чи звичайні машини чи невеличкі вантажівки де водій сам заносить коробки у квартиру.

Ціна тих же 10+ кілограм буде від $40, тривалість доставлення – 3-4 місяці. Ось і все власне.

Ще треба сказати що у “Міста” (чи “Моста”, не суттєво) є доставка повітрям, але там є обмеження на мінімальну вагу. Тобто зовсім маленькі посилки переслати не вийде. До того ж ні ціни ні час доставки суттєво від пошти США не різняться в цьому випадку.

Інший цікавий сервіс “Міст” це доставка товарів з американських аукціонів та інтернет-магазинів в Україну. Це про ebay, amazon і таке подібне.

А також у них є послуга коли можна для когось в Україні купувати продуктові набори. Скажімо ви хочете комусь допомогти матеріально через скрутне становище, але не хочете відсилати гроші та і не надто довіряєте отримувачу який може витратити їх на щось ніше. Тоді ви платите за продуктовий набір в США, а в Україні вашому адресату привозять продукти (гречка, консерви, олія, тощо – набори можна вибрати в каталозі) або побутову хімію.

Ну от у мене власне і все.

[english] wet blanket

 

Дословно словосполучення перекладається як “мокра ковдра”, а означає людину яка усім псує настрій, вбиває ентузіазм і взагалі ламає свято. Тобто перекладається за значенням як “кайфолом”.

 

У словниках:

 

[english] balls to the wall

Дослівно словосполучення перекладається як “кулі до стіни”, а означає воно “повний привід”, “максимально”, “що сили” і так далі. Сам вираз походить з авіації і його використовували пілоти кажучи що треба прискоритися по максимуму. “Куля”, вона ж ball це набалдашники на ручках дроселя, а пересовування їх “до стіни”, тобто до упору і означає “оберти на максимум”.

Цей же вираз у словниках:

А ще це відома пісня групи Accept.

Bodies: виставка людських тіл

Ще коли я вперше почув про цю виставку я захотів на неї піти, але у нас поблизу ніде її не було, а якщо ми бували там де вона є то дуже швидко і проїздом. І ось нарешті коли ми були останнього разу у Вегасі (почитати можна тут – 2016-04 – ЛАС ВЕГАС) і побачили що у готелі Люксор можна її відвідати я таки затягнув Олену туди. Ось сайт тієї виставки що конкретно в Люксорі – https://www.luxor.com/en/entertainment/bodies-the-exhibition.html.

Кілька слів про саму виставку. Експонатами на ній є справжні людські тіла спеціальним чином оброблені та розрізані, а також частини тіла. Про всяк випадок повторюся що тіла та органи справжні, а не пластикові муляжі. А на питання звідки вони беруться дам коротку відповідь – люди самі заповідають їх. А більш розгорнуту відповідь читайте на вікіпедії (https://en.wikipedia.org/wiki/Bodies:_The_Exhibition) та сайті самої виставки (http://www.premierexhibitions.com/exhibitions/4/4/bodies-exhibition).

Людські фігури як правило представлені у активних позах: на велосипеді, з м’ячем, тощо. З усіх них знято шкіру, а також м’язи на різних рівнях.

Тіла зберігають спеціальним чином їх оброблюючи і потім покривають чимось типу воску. В реальності усі кольори доволі тьмяні і не такі яскраві як на фото – усе якесь блякле і жовтувате і відрізнити кістки від м’язів чи сухожиль це треба приглядатися.

Виставку поділено на кімнати: голова (мозок, вуха, обличчя і так далі), дихальні органи, серце, руки-ноги, статеві органи, шлунок і так далі. Крім власне повно розмірних фігур як я вже сказав ще є багато органів, причому поруч зі здоровими (нормальними) часто розміщено кілька прикладів хворих органів (рак, отруєння, механічні пошкодження і так далі). Дивлячись на те як все це розташовано та пов’язано у справжніх тілах розумієш усю складність та не ідеальність нашої природи, а також як еволюція знаходила шляхи буквально затрамбувати усе це в нас.

Також представлено у більш наочному вигляді різні комплекси кровопостачальних судин у вигляді кольорової тривимірної сітки.

Особливо мене вразило як у тісну купу зібрано серце, легені, печінку, шлунок, а там же ще і судини треба додати, і кишки, і нирки і ще усього-усього напхано. А зверху і по боках все це прикрито решіткою ребер, знизу розділяється та підтримується діафрагмою і м’язами пресу…

Якщо ж спитаєте чи не страшно і чи не противно то скажу що абсолютно ні. Нам було цікаво, там якось усе так представлено що єдине почуття яке виникає це інтерес і нічого противного чи такого що зіпсує апетит нема. Більше того – ми з Оленою активно усе обговорювали і одразу по виходу пішли обідати :)

Нажаль виставка доволі невелика і навіть якщо зупинятися біля кожного експонату то все одно її можна легко за 30-40 хвилин усю пройти. І хотілося б щоб експонати яскравіше “розфарбовано” було. А так дуже раджу.

Фотографувати на виставці не можна, тому усі фото з інтернету, вибачайте.

[english] red herring

Дословно словосполучення red herring перекладається як “червоний оселедець”, а означає воно щось що відволікає увагу, додано для заплутування. Наприклад герой книги чи фільму на якому акцентують увагу, а в результаті ключовим персонажем виявляється не він. Можна перекласти як “хибний слід”, “обманка”.

Звідки походить це словосполучення невідомо, але є повір’я що за допомогою підгнившої рибини тренували мисливських собак, або збивали чи направляли їх на слід. Скоріше за все так ніхто насправді не робив і таке “тренування” придумав британський письменник Вільям Коббет після чого вираз і розійшовся в народ.

 

У словниках:

[english] bum, bummer

 

Хоча обидва ці слова є в словнику проте їх частіше використовують більше за їхнім неформальним значенням ніж тим що прописано у книгах.

Отже bum яке перекладається як “ледар” чи “бомж” також може означати “дупа”, “зад”. Причому це слово не лайливе і можна ним користуватися у будь-якій аудиторії. У нас наприклад інструктор з йоги говорить підтягнути ноги ближче перед тим як стати в колесо як “bring you feet closer to your bum”.

Що ж стосується bummer яке в словниках перекладається як “ледащо” та “нероба” то воно також часто означає “облом”, “невезуха”, “западло”. Так, наприклад, фраза “От облом!” може звучати як “It’s a bummer”.

Ну а якщо говорити про “ледащо” то американці скоріше скажуть lazy ass (ледача дупа) ніж bummer.