It took the total of 5 recruiters to arrange the interview. Yep, literally, 5 (!) different people talked to me so far.
Time-wise it took ~30 days
This was the third time I’m applying to Google, still, they make me go through the screening call.
Why? Screening is supposed to be a very rough filter to check the lowest bar. It’s fine once, but why force it every year on the people you know have already passed it?
I chose Java as my main language.
3 out of 3 technical interviewers didn’t know about `var` keyword (available since Java 10). They thought I accidentally switched to Kotlin.
1 out of 1 didn’t know about records (in preview since Java 14)
I know, it’s a strange feeling that Java is a language that is actively changing now and you have to follow the updates to stay in the loop. But it is!
For an algorithmic problem, I managed to come up with a solution so simple even the interviewer was surprised.
He said that most of the people have FP background and come up with a much more complex design.
System design interviewer didn’t know about Consistent Hashing, despite asking me a textbook problem it’s used for.
Well, no matter what the outcome will be, I’m happy I had a chance to teach Google some Computer Science
3 out of 5 interviewers were Russian-speaking. Did they do that on purpose? Would be nice if they do (I’m also Russian)
One interviewer went to the same uni I went to, albeit 10 years later!
Overall, no matter the outcome, it was a fun day, talking to smart people who share your passion for the programming, and solving challenging problems. 10/10 would do again.
That’s it for now, will continue when they come back with the feedback.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
1. Cache invalidation 2. Naming things 3. Off-by-one errors 4. “Back” button 5. Smooth scroll 6. Remembering scroll position 7. Smooth web animations 8. Sound in a video conference 9. Email layout 10. Aligning text next to the icon
[1/4]
11. File paths with spaces 12. Remembering “Remember me” 13. Not writing yet another package manager 14. Logging in Java 15. Managing dependencies 16. Building programs 17. Text selection in PDF 18. Estimating time in progress bars 19. Not stealing focus
[2/4]
20. Writing to a file (reliably) 21. Parsing XML (reliably) 22. Switching video modes in Windows 23. Looking for the path where Visual Studio was installed 24. Remembering which monitor window should open on 25. Syncing files in iCloud 26. Smooth window resizing
Emoji are the biggest innovation in human communication since the invention of the letter 🅰️.
Curious how they work under the hood? 🧵👇
As you might know, all text inside computers is encoded with numbers. One letter—one number. The most popular encoding we use is called Unicode, with the two most popular variations called UTF-8 and UTF-16.
Unicode allocates 2²¹ (\~2 mil) characters called codepoints. Sorry, programmers, but it’s not a multiply of 8 🤷. Out of those 2 million, actually defined are \~150k characters.
“Performance is a feature that enables using a tool in robust ways. When actions are instantaneous, users will use them more.“
“breaking backwards compatibility should be done rarely. [...] significant, clear benefits should exist and no reasonable way to maintain compatibility”
“The interface should be uncluttered, to the point, and consistent. Putting everything as a button, icon or tab can be as much of a detriment as having nothing visible. When many different things beg for the user’s attention, they start becoming noise.”
“[upside] to owning so much of our stack is that we can often tweak and fix things that are out of practical reach of other projects. We have no large open source projects we need to convince that our feature is worth the implementation. We can make that decision ourselves.”
Вот вам мой тред по осознанному потреблению для программистов. Тред ↓
Старайтесь не заводить объектов, отвечающих только за одну функцию. Каждый объект должен выполнять хотя бы две-три функции, в идеале пять-шесть. Это поможет вам сократить количество необходимых объектов.
Вместо обновления библиотек на новые версии попробуйте обходиться теми, что у вас уже есть. Например, поставьте себе задачу не обновлять и не добавлять новых библиотек в проект в течение года.
Very interesting case study in 5 parts when a man tries to implement a sudoku puzzle but got overwhelmed by TDD and OOP and haven’t got any tangible result except “board representation” ravimohan.blogspot.ru/2007/04/learni… (first five links)
I was ready to bet he’s just a junior getting familiar with Ruby but turned out he’s Ron Jeffries, one of the founders of eXtreme Programming. Here’s what he thinks of himself
What’s the takeout? Don’t get stuck in the design too much I guess. Whatever works, get to the meat as quick as you can, improve later if needed. Also: methodologies, TDD and OOP won’t replace thinking about the problem at hand