Saturday, January 2, 2021

Restart Writing

Happy new year 2021!

This holiday allowed me to get some times to clean up my mess including this blog. My domain setting was broken and my blog was inaccessible for quite long, 2-3 years at least. Fixed it finally.

So I have decided to restart my writing, good to begin with this blog, I'm not quite sure if I will continue using blogger or I should look at other options, will see!

Whatever I am writing next, I hope it will be more technical :).

Saturday, March 21, 2015

My Onsite Interview Experience with Google Sydney, Australia

I've been to the Google onsite interview twice, for the Software Engineer role. The first time was in late 2013 and the second time was in March 2015. Both interviews were in Sydney, Australia. Unfortunately, I didn't make it to get the offer. However, I feel proud to have these experiences with Google, getting to onsite interview or into Google office is something I couldn't imagine when I was a student. I believe the main reason why I've got these opportunities are those programming competitions that I attended when I was in university. The one changing my life was that my ACM ICPC team got to the World Final 2013 in Saint Petersburg, Russia. It was my biggest accomplishment when I was a student.

[First]

In March 2013, a Google recruiter contacted me via LinkedIn, we talked via phone and then he told me to continue working on my English skills. Then, when I graduated in summer 2013, I wanted to apply and Google recruiter contacted me a few weeks after I was referred by a friend who has been working for Google in Mountain View, CA. He's is Felix Halim, who is also a great competitive programmer with a well-known website http://uhunt.felix-halim.net/. I knew him by using his site and uHunt APIs to build a tool for UVa OJ (http://umt.boocode.com - I haven't maintained and updated it for a long time), we also met in person in Saint Petersburg. Thank you so much, Felix (and also sorry since I didn't make it).

I was invited to the phone interview after that. I reviewed most of algorithms and data structures I had learned to prepare for the interview. I was struggling coding and talking with the interviewer in English for 50 minutes. After hanging up the phone, I felt I would fail this.

Surprisingly, 2 weeks after that, I received the email that invited me to the onsite interview in Google Sydney, Australia. I was so excited. I had nearly 2 months to apply for the Australian visa and prepare for the interview. It's awesome that Google covered all expenses for the trip including visa fee, airfares, hotel, food, taxies...

It was my first time to travel alone to a foreign country. And I decided to stay in Sydney for only 2 nights, which was covered by Google. I wanted to stay some more days but I couldn't because of my tiny budget. I arrived to Sydney on Thursday noon, it was a great hotel located right on Darling Harbour where attracts lots of tourists. I had a good night in the luxury room. The interview was on the next day - Friday. Friday morning, I got up early, had breakfast in the hotel and walked to the office address. It's quite near the hotel, only 10 minutes of walking. I got there about 1 hour before the interview. I found a seat in the park nearby and enjoyed the view there. Before the interview 15 minutes, I got in the building and headed to Google Reception on Level 5.


Like most other onsite interviews, it consisted of five rounds: 4 rounds were about coding and algorithms, the last round was a system design challenge. I can't write about the questions details as I signed the NDA. The interview room had both the whiteboard and a Chromebook. I could use both to solve the problems. I was a bit confused of what to use since from what I had read from all the internet tips about Google interview, there was only the whiteboard. So I decided better to use the whiteboard to discuss the solution and use the Chromebook to write code. The coding platform was still Google Docs as the phone interview, and it was still much better than coding on whiteboard since I didn't have to deal with erasing, saving spaces or bad hand writing. After 3 rounds, one guy came and took me to lunch. Yeah, the food was tasty with lots of choices. It was also a great chance for me to ask lots of questions. I also asked him to took some photos for me in the office. The office had a very wonderful view to the city.


Back to the interview, the last 2 rounds were more difficult, especially the last round required analysis and system design skills. The last round, the question was something about distributed systems, building a large scale system with servers around the world. Overall, I think I got about 80% questions answered, I was stuck on some and didn't find the correct answers.

After the interviews, I spent that night there and I flew back to Vietnam on Saturday. It was a short journey to such a far and beautiful country as Australia. Luckily, I had time to visit the famous Opera House before returning.



I got the rejected letter after that 2 weeks. I was disappointed but I had prepared for that result since it's not easy to get a job at such company as Google. The recruiter told me to keep learning algorithms, data structures, system designs,... and re-apply after 2 years.


[Second]

In December 2014, an ACPC recruiter contacted me for another chance and he told me that he was aware of my past interview with Google. I thought I had to wait 2 years, but then, they called me back just after more than one year. He advised me to choose Google office in Mountain View where they have plenty of projects and opportunities. However, this time I also wanted to try again with Google in Sydney.

Similar to the last experience, the first interview was a technical phone interview with an engineer with the same role. The question was related to infinite string matching. I didn't manage to get to the most optimized solution which uses KMP. I had learned KMP before but I didn't remember how to implement it correctly. I started from brute-force solution and then optimized it using hashing. And it took me some times to explain the hashing formula. Anyway, I felt good about the interview. I had been to the onsite interview once and I believed that this time I would make it to the onsite again.

The outcome was that, a month of the phone interview, I was invited again to Google Sydney office for the onsite interview. This time it also took me nearly 2 months to prepare all stuff for the journey to Sydney. As the Australian visa allows me to stay for 3 months, this time I decided to stay longer after the interview to travel around (I've worked for one year and I can afford it this time). And Google was totally fine with that, to book my returning day long after the interview day.

The interview was scheduled on Monday, in March 2015. And I wanted to arrive 2 days earlier to have more time to adjust the routine and relax before the interview. I departed on Friday evening and arrived at Sydney on Saturday. I had half of Saturday and the whole Sunday in Sydney before the interview.

This time the interviews took place in another building, on Darling Island Rd. Haha, the first time reading the address in the email, I thought it would be on an island, actually it's just a few steps from the Accenture building. It seems that Google Sydney is expanding, they have more spaces there. As I know, there're totally 3 buildings in that area.

Everything happened in the same ordered but certainly with different interviewers and questions. Most of algorithms questions, the interviewers expected the candidate to approach from the simplest solution. It's all solvable with a few loops or simple recursion. There was a question about game, after asking some clarify questions, I started with using game theory, something with NIM and other techniques. Unfortunately, it's definitely not an expected way to attack the problem like that in the interview. And after having some hints, my answer was a simple recursive method and it took me 5 minutes to write it. There were other questions about string, trees traversal,... and I managed to solve all of them. However, nothing is perfect, I did made some mistakes while solving them, but finally I got the clean and correct code. The interviewers seemed to be happy with that. The system design question was also the most difficult one, and as usual, the interviewer was someone who has a lot of experience. I was not supposed to use the Chromebook because there was no coding in the system design problem. All I needed to do was to use the whiteboard to discuss, analyze the problem. Although I didn't know if I did well or bad in the system design problem, I felt happy after that. The guy who had lunch with me was friendly, he took me around the office and showing all stuff he could. Their office is really a fun place to work.





I believe that I did the interviews much better than the last time. However, getting the offer is something that's unpredictable, as I've read lots of tips, articles, heard other people's experience and I've prepared for any outcome. Of course, I did hoped and wished I could get the offer this time.

As you know from the beginning, I didn't make it. I received the announcement one week after that. I was disappointed again, but the feedback from the recruiter at least made me happy since the overall feedback from interviewers was positive. They mentioned about my analytical ability and coding ability and were happy to work with me. It's just I made mistakes and sometimes over-complicated the solutions. It was a constructive feedback that I was very happy to hear. Anyway, I want to thank to Google for great experience with the interview, their time, effort and money to bring me onsite.

At the moment I'm writing this blog, I'm still somewhere in Australia after this 2nd onsite interview. :) People may wonder about my recent job, I would say that I'm a geek and I can work remotely, anywhere with the laptop and Internet.

Friday, March 28, 2014

Chrome Extension - Maps URL Converter

My current work at SkedGo is related to many Maps tools, including all popular Maps: Google Maps, Bing Maps, OpenStreetMaps.
Sometimes I need to compared maps/roads in a specific location between those maps tools, and I was struggled with getting the same lat/long/zoom from this map to another map, for example, from Google Maps to OpenStreetMaps. Of course, it takes only a few seconds to copy the lat/lng/zoom in the URL of the current tab and paste them to other tab to view the same location. But I hate to do it everytime switching between maps, because I do it frequently and that copying/pasting is really boring and wasting time.
That's why I wrote this tool, it will take the lat/long/zoom of current opening map tab and give you links to other Maps tool, keeping the same lat/long/zoom. By using this tool, I don't have to copy/paste anymore. Switching between Map tools becomes easier than ever before.
You can install it at Chrome Web Store.
Note that this tool catches the lat/long/zoom from the URL on the tab. That means it can parse lat/long/zoom only if the URL contains those information and dynamically changes it when you move the map.

Wednesday, August 21, 2013

Game MineSweeper - Basic C# Windows Form - Framework 2.0

This game version works the same as the Windows version. I named it My MineSweeper.

It was done using basic C# Windows Form programming techniques on Visual Studio. The main algorithm, Depth-first search (DFS) is used here to expand the safe area when player click on the an empty cell.

This small game is one of my first completed projects using C#. Thanks to it, I got an A for the 1st academic project in university. I made it in spring 2010.

Here are some photos:
Main Interface - My MineSweeper 
Game play (Beginner) - My MineSweeper
Game play (Advanced) - My MineSweeper
Pause game - My MineSweeper

You can download it here.

Monday, June 3, 2013

Chrome Extension - UVa Quick Access Tool

[Tool for UVa Online Judge] This tool helps you quick access to the live judge, submissions, quick submit form and problem details

After installing this extension, no need to open a new tab, just in ONE CLICK, you can:
  1. Submit your problem solution to UVa Online Judge.
  2. Have detailed information of one problem: name, time limit, some statistics (best running time, number of AC/WA/TLE/RE submissions) and some useful quick links related to the problem.
  3. Watch UVa Online Judge live submissions (auto updated).
  4. Keep track of submissions of a specific user (auto updated).
Got many CEs for testing this :)


If you have any feedback, please email to lamphanviet@gmail.com or leave comments here. Any suggestions/feedback will be appreciated.

Additional information: This tool is developed based on some components of UVa Management Tool, which is also a tool for UVa Online Judge; and uHunt APIs, which provides lots of useful data and statistics on UVa Online Judge.

This is the source code of UVa Quick Access Tool.

Have fun solving problems :).

Wednesday, January 2, 2013

Chrome Extension - VOJ Linking Tool

VOJ is one of the most popular online judges for Vietnamese based on SPOJ. Most Vietnamese students use this judge to train for Olympiad in Informatics and ACM ICPC.

VOJ Linking Tool is a simple Chrome extension which provides quick links to problems on VOJ like problem statement, submit/submissions page, problem rank list.

voj-linking-tool

This is my first Chrome extension so it's very simple. This is the source code.