Tuesday, May 8, 2018

Being interviewee: Find largest smaller binary search tree key

May 7, 2018


Introduction


It is my algorithm called largest smaller binary search tree key. I have practiced the algorithm over twenty times. What I have learned is that there are so many ideas to work on the algorithm, I should open to new ideas as long as it makes sense. What I have to do is to understand how good I can do to solve this algorithm over twenty times practice in last 12 months.

I still had some difficult time to figure out while loop, what I should loop on. I need to make sure that the search is going to left if the value is bigger than given number, and the search is going to right if the value is smaller than given number. I just quickly apply a test case using given number 17 and root node 20, I like the loop continues as long as possible.

Iteration solution


Here is my C# solution.


I was also very honestly exchanging ideas with the peer how to handle this case if I know the algorithm very well, practice over 20 times recently. He smiled and then he said that it is ok. The interviewer will try to come out the extended algorithm to find out if you are memorizing the solution or not.

I explained to the peer that I already go through the stage to try to memorize the algorithm. When I work on the algorithm, if I do not write down keywords, ask, constraints, I do not write down a list of requirements, I made a few mistakes to mix one algorithm with the other in mock interview platform. I learn from the mistake and know how to play with memorization. Follow the ritural, and then give the first 5 minutes to write down the requirement, and then write down the algorithm afterwards.

I try to work hard to avoid this kind of mistakes.

This time I did on purpose to show the peer how I work on white board testing and make sure that each line of code is correct. No spell error, no syntax error, no logic problem.

Monday, May 7, 2018

Being interviewee: Find largest smaller binary search tree key

May 7 2018

Introduction


It is my algorithm called largest smaller binary search tree key. I had a mock interview at 8:00 PM with a young graduate student in California who had ACM ICPC contest experience. We had chat first after his mock interview algorithm, I did good job to pursuade him to write down a few lines of analysis before he wrote the code for the algorithm, specially keywords, ask, constraints. It is better to gather requirement from the problem statement, instead of memorizing all requirement in the head. It was pretty relax for me to work on the algorithm after the peer worked on his algorithm called Find difference pairs.

I chose to write the iterative solution without considering the recursive solution first, and then I told the peer that I had mocked interview this algorithm over 20 times. I was told that if the interviewer can tell that I memorize the algorithm, it will be no hire by a senior engineer before. So I told the peer that I still memorized the solution, I need to go left or right and I need to get into a loop as well. Only problem I had this time is how to construct a loop, what to loop on?

The peer was very experienced and he smiled, and then he asked me the question. Can you write a recursive solution for your algorithm? I said sure, but I have never written one using recursive solution within a 5 minutes period. So I did write down the recursive solution in less than 5 minutes. And then I argued myself to run test cases using given number 17, root number 20 as a test case. And then the peer ran a few test cases using 14, 17, 27, 25, and then he said that the code should work.

Recursive solution


It is my first time to write a five minute solution using recursive solution for the algorithm called largest smaller binary search tree key. It is definitely a good algorithm for the interview as the first interview algorithm. Compared to the iterative solution, I wrote more than five minutes since I had to argue to myself a few things, while loop construction, and then started from brute force solution to traverse the whole tree.

Here is my C# code.

Sunday, May 6, 2018

Youtube CS Dojo

May 6, 2018

Introduction


I like to spend 30 minutes to go over some videos from CS Dojo. I like to get some tips quickly if I have a few hours. Here is the link.

Udemy - essential code interview questions

May 6, 2018

Introduction


It is the course costing CA $12.99, and the author is a former google engineer. I came cross his video on youtube.com and was amazed how good his teaching is. Here is the author page on udemy.com


10 minutes research


I plan to do some research on this course and also figure out if I need to purchase the course or not. I need to support him since I like his teaching.


K closest points to the original

May 6, 2018

Introduction


It is the algorithm video 10 minutes about the algorithm called K closest points to the original. I could not believe that I learn a few things from the teaching. Unbelievable good quality with 191,875 views.

Algorithm practice


There are 3 solutions which are sorting the array, selection sort, or min/ max heap.

Leetcode 140: Word break II (Add subroutine to check if breakable)

May 6, 2018

Introduction


It is the time to learn the algorithm as quick as possible. I came cross this Chinese blog and I like to generate a gist first, and then write C# code based on the blog.

Algorithm practice


Here is C# code passing online judge of Leetcode 140: word break II.

Leetcode 140: Word Break II (brute force solution)

May 6, 2018

Introduction


It is hard level algorithm called Leetcode 140: Word Break II. I like to go over some ideas through most viewed discuss first. Now it is 9:30 PM, I like to spend 30 minutes to read a few answers.

Now it is 9:39 PM. I decided to go over the blog written in Chinese first, and then make a gist based on the analysis. I like to understand the analysis from the author.

Algorithm practice


Now it is 11:03 PM.  I finally put together C# code using the idea in the above gist. Based on the original author's advice, the solution will time out for a super long string test case. I still need to work on the correct solution to pass all test cases.





Leetcode 139: Work Break (dynamic programming)

May 6, 2018

Introduction


I like the speed I can learn the algorithm using dynamic programming. I came cross this solution through Leetcode discussion, and I like to write one as well. It takes me a minute to understand the solution.




Leetcode 139: Word Break (Using BFS)

May 6, 2018

Introduction


It is my job to make the algorithm learning easy. What I like to do is to read a few ideas through Leetcode 139 Word break, and then write C# practice based on the idea.

First idea


I like to review this idea using breadth first search. The idea is easy to understand and also easy to write. The implementation is to use a queue and also a hash set. The hash set is used to keep track of the visited nodes to avoid repeating the same work.




Being an interviewer: Sentence reverse

May 6, 2018

Introduction


I just could not believe that the peer and I worked together, I tried to help the peer write a bug free code using C++. The algorithm is called sentence reverse. We spent over 55 minutes, there are still bugs in the code.

Mock interview


Here is C++ code.


Being an interviewee: Shift array search

May 6, 2018

Introduction


It is binary search algorithm I wrote for the algorithm called shift array search. I designed a binary search to apply on the array which is not sorted.

Mock interview


Here is my C# code.


Being an interviewee: Array of array products

May 6, 2018

Introduction


It is the algorithm called array of array products for my mock interview. I wrote a solution without any issue to pass all test cases.

Mock interview


Here is the C# code.


Friday, May 4, 2018

Being an interviewer: Find minimum substring containing all characters

May 4, 2018

Introduction


It is very good learning experience to be an interviewer for this hard level algorithm from Leetcode. The algorithm is hard for the first time player to come out the optimal solution using slide window, and also apply time complexity O(n) where n is the string's length.

I just learned one more time to communicate with the peer, worked on brute force solution first, and then moved on optimal solution discussion after 30 minutes.

Mock interview


Here is Java code I reviewed. I also started to ask questions about Java, and ask the peer how long they work on Java, why to choose Java for interview.

I was so glad to introduce the slide window technique to the peer, and also used the example: "AAAAABC", explained that extra four A characters can be removed for minimum substring.



Being an interviewee: Pancake sort

May 4, 2018

Introduction


It was my 8:00 PM mock interview algorithm called Pancake sort. I was very happy to work with a peer who is an engineer in Silicon Valley. The coding takes me 20 minutes to write. I enjoyed the discussion with the peer about technology he used. The company is called Hortonworks. Even though the peer stays anonymous, but I learn a few things about technologies.

Mock interview 


Here is my C# practice.


The birth of Julia's coding blog

May 4, 2018

I could not believe that I read the blog I wrote 2 years ago why I start the coding blog in 2015. I just copy and paste here from the blog written 2 years ago. 


Introduction


It is exciting to write the sliding window search algorithm with time complexity O(N),  N is the string's length. The similar algorithm is here on geeksongeeks.com, and also it is very close to the Leetcode 76: Minimum Window Substring.

There is a short story about the sliding window algorithm. Julia still remembered that 2 years ago in 2015 January, Julia asked to get her first onsite interview after a tech talk social event, she could not pass phone screen from top four software companies. But she likes to find out what if she has one and what she should learn.

She was asked to solve the algorithm to search a minimum substring as the second algorithm, but she failed to solve the problem on onsite interview and she could not write any code with a lot of hints. This is the first onsite coding interview she managed to get in the city of Vancouver after working full time over 5 years.

After a week analysis of the algorithm, Julia decided to start to write a coding blog, practice coding every day.

A coding blog starting January 2015


The only way Julia can think about improving the algorithm and data structure problem solving is related to learn from her tennis sports practice in the city of Vancouver. What she did is to work on tennis sport practice over one hundred hours, two hundreds hours, and then she started to play double matches and met over hundred people on the tennis court.

She understood that onsite interview is such a great help for her to understand that she needs to make life style change. She needs to find those people working hard on algorithm and data structure practice, work on something together, practice together.

She likes to give back to others, shows her generous to share, most likely she will share her failure, struggle at the beginning.

She started to write day by day, now her coding blog is like a tree planted by the water that sends out its roots by the stream (Jerimiah 17:8).

Here is the blog about the algorithm to find minimum substring using sliding window technique written 2 years ago, January 2015. This is the time Julia understood that it is important for her to start to write a coding blog to help herself. She felt so frustrated on the onsite interview but she quickly learned something related to her tennis sports practice.

This time Julia came out the idea in less than 1 minute, but she still needs to work on a few implementation details.

Follow up 


August 30, 2019

Onsite interview place - 

Time: 2015 January 
Place: Westin hotel in the city of Vancouver downtown
One hour coding interview: 

Thursday, May 3, 2018

Leetcode 269: Alien dictionary

May 3, 2018

Introduction



Plan to spend time to review the algorithm again. I like to make the algorithm my favorite graph algorithm in May, 2018.

I know that it takes a lot of sacrifice from a friend who coached me through mock interview, how to pay attention to detail. I like to write the blog to express my thankfulness to those people. Like my hitting partner on tennis court, those algorithm practice trains me to think harder, work harder.

One day I wish I can use my mathematics training over years and be able to use some of them in the work. First I have to learn how to be a good software programmer first, my crafting skills has to be improved first.


Learn how to talk in Chinese about the algorithm


It is interesting to learn how to express the algorithm in Chinese first. I did 10 minutes study and made a gist based one a blog. Here is the gist. The algorithm with some improvement is here.

Plan to write a C# solution based on the above Java code.

Past practice


Here is my past practice. I need to warm up and write a solution. It is such great warmup to review code written more than 2 years ago, here is code I reviewed and wrote this time.


Leetcode: Zigzag level traversal

May 3, 2018

Introduction

It takes me 30 minutes to rewrite the code based on my last practice more than 2 years ago. I plan to read more discussion and learn a few ideas to write the solution.

Here is my C# code written for zigzag level traversal

Leetcode 102: Binary tree level order traversal

May 3, 2018

Introduction


I like to work on three ideas to implement the algorithm called binary tree level order traversal. The peer gave me honest feedback after he mock interviewed me on May 2, 2018. It should take you less than five minutes to write, and then you have chance to move on the second question. But you actually did take 20 minutes.

To train myself to work on this algorithm, I plan to spend time to read a few hours on the discussion panel of the algorithm first.

Using extra node null to separate the level


I like to write a C# practice using extra node null to separate the level. Here is my C# practice.


Being an interviewee: find pairs with given difference

May 3, 2018

Introduction


It is a small world and the mock interview just forms a bridge for people to meet and learn from each other. I like the algorithm in mock interview, it is not too difficult but it provides us a problem to work on. Today the peer told me that he thinks that it is very important for interview to try out how two people can work together, how they communicate and work on the problem.

Mock interview


I spent first 30 minutes to work with the peer when he worked on sentence reverse. And then he helped me to work on the algorithm called Find pairs with given difference.

Here is my code with the discussion how to output the pair using original array order of small number in the pair.


Being interviewer: Sentence reverse

May 3, 2018

Introduction


I was mock interviewer and the interviewee worked on the sentence reverse. And then we moved on the discussion of remove leading, trailing middle spaces.

Here is the code I used for me to be interviewer from Leetcode 151: reverse words in a string.

Mock interview


The interviewee wrote python solution and then we had discussion, work on coding to fit into removing extra space.

Here is python code, I lost it again before I saved it gist. I should save it without any name or description first.

Mock interview


It is so interesting I met a young graduate who is preparing Google onsite in a month. I had chance to talk and learn something from the mock interview. The mock interview lasted one hour fourty minutes. I tried to figure out how good a candidate is, but somehow I understood it. The way the peer handles the problem solving, he definitely can write good code using python, also he can work on the improvement right away once I pointed out.

The peer told me that one of the important things about interview is to communicate on the algorithm, and ask questions, clarify the problem, and also talk about things.

Chit chat about my performance



He likes my way to write down analysis using keywords, ask for:, constraints. I told him that I trained myself to spend first 5 minutes to write down the analysis, like system design, talk about keywords, constraints, and what to ask for. And then I can figure out how to design the algorithm. I tried to fully use the first 5 minutes, push myself to write down things, do not memeorize algorithm, do not assume the things, write down constraints.

And also the peer likes me to talk about the algorithm, and gave out the ideas to solve the problems. I told the peer that I have worked on coding skills so many times, definitely I feel comfortable now to write most common algorithm and data structure. For me, I have to make it real, write down the analysis, and then have discussion to find the optimal solution.

The peer gave me his idea to solve the problem. It is much better than me and simple. And then we had discussion, I asked if we can do better compared to his idea. Later, I shared array quadruplet post I did on code review website with the peer.

I have worked on those interview algorithm more than ten times. I already went through the stage to memorize the algorithm, and then made mistakes to mix algorithms. I treat all the algorithms are the same. From scratch, word by word, read the problem statement first.

I got complaint about deletion distance, dynamic programming algorithm, I memorized the solution and got complaint by an Intel senior engineer, Ph.D., he told me that it is no hire if I memorize the algorithm, write something before I fully understand the problem.

Now I try to act like a teacher, a lawyer, write down the keywords, constraints. I do have lessons from hackerrank contest since I missed some important words in the paragraph. It is also good time to demo how good I can read.





Leetcode 102: Binary tree level order traversal

May 3, 2018


Introduction


It was my mock interview algorithm on May 2, 2018. I was told very honestly that I should memorize the common queue technique, using breadth first search, two loops, outer loop for each level, inner loop for each node in the level.

I decide to write a few solutions based on Leetcode 102 discussion.

Algorithm practice


Here is my C# practice to use the idea of two loops, outer loop for each level, inner loop for all elements in the level.


Wednesday, May 2, 2018

Leetcode 18: 4 sum

May 2, 2018

Introduction


My young sister always criticized how selfish I am when we have time to argue about things on wechat recently. I like to refer this personality to the algorithm I practice. I noticed that I spent time to track how many views on code review web page related to the algorithm called array quadruplet, it is waste of the time. And then I decided to move on. I need to spend attention to other people who have shared their code on Leetcode discussion on this algorithm. So I studied over 30 minutes since there are so many of them I cannot finish all, and then I wrote my first post on the algorithm Leetcode 18: 4 sum discussion panel.


My post 


Here is my sharing. I like to write down my ideas to share as all others do on leetcode discussion panel on Leetcode 18: 4 sum. I also wrote C# code to pass the online judge. Here is the C# code.

I read one post from Microsoft intern, and here is the link. What I like to say is that I learn something from the author's experience.

Being an interviewer: Leetcode 152 Maximum product subarray

May 2, 2018

Introduction


It is so interesting to work as an interviewer. I did interview a ICPC contest silver medal winner, facebook intern using the algorithm a few days ago. And today I had chance to interview a 15-years professional software engineer.

What I like to do is to tell the difference? How to approach the goal to be a super talent programmer? Experience, education, what is most important part to play the role? We can not tell, but we can do tell through problem solving on the algorithm related to dynamic programming problem.

Mock interview


Here is the transcript I reviewed.


Two stories to give out major hint of dynamic programming idea 


The subproblem is to define the subarray ending at index i, what is maximum subarray product? Why is this subproblem defined? Since it can be constructed in the series of index i, and easy to do it. Our solution is to get global maximum value for each index i.

But it is not easy for me to teach or tutor the candidate in mock interview on this idea. Basically it is not good idea to tutor peers on mock interview. But sometimes I have to learn how to give major hint, how to define the hints to make it easy for the peer to understand.

I tried on my last two mock interview but I did not do very well. Here is more detail story.

Learning to be a good interviewer is so much fun. I did talk to the peer on mock interview, while the peer worked on the test case and tried to understand my hint, I was surfing Leetcode 152 discussion, and see if there is any tip for me to share with the peer. I could not believe that the peer could not understand my hint, and let him try a few more times to get the solution by himself. Actually he could not do it.

The same thing happened a few days ago with the peer who has much strong analysis skill set. He did say that he understood my hint. But then he moved on to explain his original idea and made a few modification. I could not understand his idea fully, but he showed no interest on my hint.

Learning the algorithm together is so much fun. It is not easy, specially for people over 10 years experience but lack of constant challenge on algorithm and data structure.

I have to learn how to encourage the peer, make him less stress and get out comfortable zone to try something new.

Being interviewer: Sales path

May 2, 2018

Introduction


I am very experienced interviewer on this algorithm called Sales path. When the peer told me that he likes to write a breadth first search, and later he gave me his analysis for optimized idea, I know that he is very talent programmer. It turns out that he is currently working for Amazon two years.

Anyway, it is a good lesson for us to learn the algorithm written in Java.

Mock interview


Here is Java code I reviewed. I did not make any comments on coding style, I did ask how to remove hashmap.


Why I work on mock interview and choose to be an interviewer?

May 2, 2018

Introduction


I had a mock interview this 10:00 PM. At the end of interview, the peer asked me why I choose to be an interviewer on mock interview. So I like to write a small research on this topic.

Will continue to work on it.

Sudoku solver algorithm 


Learning one algorthm very well. It takes determination to learn one algorithm over years since I could not believe that I am too busy and I have to constantly remind me to work on the same algorithm and get better and better. This will make my life as a software programmer much easy.

It is very important for me to learn the algorithm very well in order to sustain my career as a software programmer. I like the mock interview since I love learning and teaching, and also I do see the opportunities to improve through each mock interview.

I like to write down my experience of learning Suodku solver algorithm. I started to work on the algorithm and documented my practice in a few of blogs in 2015. I thought that I did very well to master the algorithm.

I got to know the truth once I start to practice mock interviews.  To work on the sudoku solver algorithm in mock interview, one time a senior developer who works for fortune 500 gave me a rating of 1 out of 4, and later in mock interview the peer told me that I should work on the structure of depth first search algorithm. I have worked on 10 rounds of mock interview, so I have chance to work on the mock interview over 20 times. I also asked the question on code review website.

It is very important for me to learn the algorithm very well in order to sustain my career as a software programmer. I like the mock interview since I love learning and teaching, and also I do see the opportunities to improve through each mock interview.

Learning and teaching 



I remember that I used to read a post by a high school teacher in early 2006 when I worked on computer science Ph.D. in Florida, who is my second elder sister Jianhua's friend. My sister Jianhua has over 30 years teaching experience. Basically the friend wrote in her post is that learning and teaching is kind of repetition. You got so many feedbacks coming in, bad or good. You have to work on those feedback, integrate them to next teaching or learning.

Learning algorithm is kind of the same thing. You practice the algorithm through mock interview, work with different people who is also hard working. And then you will get a lot of things to work on.

Do not stop. Keep continue. Work on the same algorithm again and again. You will find things to work on besides memorizing the solution. There are a lot of challenging issues.

My mental toughness


I had a mock interview with a friend on May 2, 2018. After more than one hour mock interview, the peer gave me honest feedback. I should memorize the common solution for those algorithms. If the competitor makes it in five minutes, I take 20 minutes, I will be in trouble. I will not have chance to get the second question.

Also here is the quote:"Must do interview questions
Each topic has some building block questions which end up being used by a lot of solutions. It is important that you already know solutions to all these problems so you don't waste time thinking up the solution to these problems and focus on the question interviewer has given you because you will be judged on that. I have included some of  these questions but if you go through Interview Bit in detail you would eventually come across/cover most of these questions"


I gave my thoughts as well. Here is my argument:

I always watch those tennis professional player up and down, so that I will not get disappointed too long if I fail. I used to hit rackets to the net but opponent complained to me. I like to practice better than real interview.


I like to practice than real interview



I like to write a few sentences for this argument. I do think that the more I meet peers through mock interview, I know better to do current job. My achievement is tremendous and make me grounded. I am not trying to achieve unachieveable target, serve others if need, teach or learn.

Share the experience


I like to document my own practice. It looks like that I am the luckiest one to be able to document my algorithm practice more than a few years. I treat the code like commodity. I can produce and consume any time. I do not need to worry too much how good my code is. If it is not, I will get better next blog or next practice. If it is good, then it will be such a fascinating marketing tool for me to get connected to more people.

Love to code every day


It is like sports activity. To maintain the physical health and mental health, I always play sport and also matches to encourage myself to get in teams, and continuously learn new things.

I got feedback from binary tree level order traversal from my mock interview performance on May 2, 2018 9:40 PM. I use extra node null to mark the end of level, but there is more popular trick to use a nested loop for the current level, and leave the outside loop for the level update. I missed that part, and the peer told me the truth, honest feedback. He asked if I like honest feedback or nice sayings. I chose the honest feedback.

I practiced the algorithm over 2 years ago. I just reviewed my past practice, and also spent hours to go over Leetcode discussion first time on this algorithm called binary tree level order traversal.

Here is my C# code written for binary tree level order traversal.

Here is my C# code written for zigzag level traversal.

Being interviewee: Budget cut

May 1, 2018

Introduction


It is the algorithm I still have some confusion how to get the optimal solution. I tried to draw something and explained the algorithm starting from sorted array first element, checked if it can survive for new budget.

The peer did not ask me questions and challenge me. I like the peer to challenge me and question me if I memorize the algorithm. I like to see if I need to figure out something new to work on.

Mock interview


Here is my mock interview C# code.


Actionable Items


I need to come out some analysis about my approach. Since the requirement is to get minimum impacted recipients, the biggest number of impacted recipients is the total number of grants array. So sort the array first in ascending order, iterate the array, the first one is to consider worst case, maximum impacted recipients is 5 in the sample test case. If the budget is available then move to next iterated element.

Monday, April 30, 2018

System design: Messenger service like whatsapp or wechat - interview question

April 30, 2018

Introduction


It is so good feeling to watch a 25 minutes system design video again. The title is called Messenger service like Whatsapp or Wechat, here is the link. The author is an Amazon software engineer Ramon Lopez.


Code review: Array quadruplet

April 30, 2018

Introduction


It is so happy for me to continue to practice Array quadruplet algorithm since last March. What I have learned through over 10 rounds mock interview is that I have to continue to learn the algorithm through each practice.

It is the big surprise when I chose the algorithm to ask the peer last Saturday 10:00 PM mock interview. I tried to test a senior in the university how good he is since he told me that he had ICPC contest experience in high school.

Build a hashmap on the fly


I like to answer my own question asked five months ago on stackexchange.com. Here is the question's link. Here is my answer's link.

Leetcode 4 sum discussion panel


I have to push myself to learn from others. One drill is to read as many discussion as possible, and try to figure out new ideas, creative thinking process. I spent 30 minutes to read through the discussion, and also wrote a reply. Here is my reply link.

I noticed that I had some issues, since I keep checking code review my answer link. I know that it is waste of my time. I should spend time to read more discussion on Leetcode 4 sum.

Sometimes I notice that I have to push myself to show concern to others, people in the community, and also give out support for other people's good thoughts and work they share.

To be selfish or pessimistic, it is not working very well in this fast-paced software industry. This is the first time I make this argument.


Here is my post to show my idea and answer for Leetcode 18: 4 sum. I did spend 30 minutes to read my submission eleven months ago and then I decided to write a new solution based on my practice on array quadruplet.

One step further


Here is the reply I gave to the most view answer 6.1 K views. I shared the tip to lower down the time complexity to O(n * n).




Sunday, April 29, 2018

Being interviewer: Array quadruplet

April 29, 2018

Introduction


I had a mock interview with a young undergraduate student with ICPC contest experience. So I like to ask him to solve my favorite algorithm Array quadruplet. I think that he did one on dynamic programming, and then I tried to evaluate how good he is.

Biggest surprise was that he gave me the solution I could not understand. And then I asked him a few question, ask him to explain using example. He did perfect job to explain the algorithm.

It turned out the algorithm is optimal solution. I like to post the answer for my own question asked more than 6 months ago. Here is my question link.

Mock interview


Here is the algorithm the peer wrote. At the end of interview, I asked him to connect to linkedin, it turned out that he worked for facebook as an intern already.

I could not believe that my mock interview practice was so many surprise and I just enjoyed the talk. Somehow I complained to the peer that I do not want to study so many system design interview, I do not want to try to memorize so many things, I like to work on the algorithm with the peer on mock interview instead.

We met and talked about one hour fifty minutes until the mock interview terminated the discussion. I could not believe that I enjoyed the discussion of the algorithm so much, I never expected that I will meet a super talent later in Saturday evening.

Time complexity


The algorithm provide by the peer is better on time complexity, since the two sum preprocessing is conducted on the iterating of the array in the same time, what ever in the hashmap should be with smaller indexes. We do not need to go through the list of the items in the key value since any one of them will work. 

It is similar to all other algorithm like merging 2 packages. 


Feedback from the peer


You just do as you do in the mock interview practice session, you should be able to do fine in any interview. That is my advice.

Being interviewer: Leetcode 152 Maximum product subarray

April 29, 2018

Introduction


It was my 10:00 pm mock interview. We both finished our algorithms in first 30 minutes. Then we spent extra one hour 20 minutes to work on algorithms together. I asked two algorithms for the peer to solve.

Here is the first algorithm called Leetcode 152: Maximum product subarray

Mock interview


The peer worked on the solution, and then we had discussion and then our discussion lasted more than 30 minutes.

Here is the transcript.

The peer wrote a brute force solution in less than 2 minutes, code is from line 54 to line 64. Two days ago, I helped a young undergraduate student to work on the brute force solution more than 10 minutes. What is big difference. I was so amazed and could not stop expressing my biggest surprise.

And then we had discussion about optimal solution using time complexity O(n). I tried to explain to the peer that his algorithm is not so good since it could not apply to the double array. And then he said that if it is a double array then it is another problem.

One more argument we had is about the algorithm he proposed from line 88 to line 112. The problem is that I could not understand his algorithm, I was too lazy to think and I need to run a simple example first.

I decided to give out the hint, I wrote the hint from line 32 to line 45. I like to introduce the dynamic programming algorithm, and help the peer to follow the idea.

And then the peer continued to work on his idea, he wrote down the notes from line 66 to line 86. The peer is very good at writing pseudo code and explain thing.

He did told me that he worked on ICPC contest in high school, and he found out that mock interview algorithms are easy etc. We talked about codeforce contest etc.


Being interviewee: H-tree

April 29, 2018

Introduction


It was so nice to have a mock interview at 10:00 PM. I had chance to work on H-tree algorithm, and then I wrote a test case based on the advice of the peer. The peer finished his algorithm open bracket less than 7 minutes, I said so many good things about his performance; and then I told him that once I finish my algorithm, I will ask him a few algorithms and see how good he is. I finished my algorithm in less than 20 minutes.

Mock interview


Here is my C# code.


Being interviewee: Open bracket

April 29, 2018

Introduction


It is my April 28 8:00 PM mock interview, I need to write open bracket algorithm.

Mock interview


Here is my C# algorithm.


Being interviewer: Root of a number

April 29, 2018

Introduction


It is my learning experience to be a nice interviewer to work with a second year undergraduate student who studies in NIT university in India. The peer asked me the hint to solve the root of a number, so I explained to him the algorithm using line 59 to line 66. The peer was very smart and then he came out the idea to apply binary search.

Mock interview


I was not a very nice interviewer, I surfed my internet to read something about system design interview. But later on I noticed that the peer wrote a very good binary search algorithm. Better than I did when I worked on binary search algorithm first ten times last year.

Just share the fact that I have worked on binary search algorithm over 50 times last 12 months.

But this time the peer and I worked together over five minutes, we could not find the bug. It turned out that Math.pow(base, n) call is wrong, base and n two arguments are switched in the order.

I could not believe that I need to train myself hard to do trouble shooting. I need to train myself to think logically.

Here is the transcript with C++ code. I was so patient and let the peer worked on the algorithm first 40 minutes or so.





Being interviewee: Merging 2 packages

April 29, 2018

Introduction


It is my April 28, 2018 6:00 PM mock interview. I had to write the algorithm called Merging 2 packages. I also met a peer who works in Silicon Valley, and he asked me where I practice the algorithm, so I wrote down a few places I practiced.

Mock interview


Here is my C# code and also a few lines of notes to share my experience. The peer also shared system design link and he strongly recommended it to me.


Saturday, April 28, 2018

Being interviewee: Find smallest substring containing all keys

April 28, 2018

Introduction


It is my algorithm called find smallest substring containing all keys. I was so happy to write a perfect solution in 30 minutes, but I noticed that I had to slow down, work with the interviewee since he was not so strong in terms of coding. I may have to focus on the explanation of the algorithm, and also work on a small example to walk through the algorithm.

Mock interview


The peer actually asked a few questions on the test case I chose. After that, he asked me to give him some advice how to prepare algorithm and data structure interview.

I gave 5 minutes talk at least, and also wrote down some notes.

Here is the transcript.


Being interviewer: Array quadruplet

April 28, 2018

Introduction


It is my job to be friendly to the peer no matter the peer can solve the algorithm problem or not. The algorithm is called Array quadruplet. The peer was nervous since he spent time to write a test case first, and then tried to write a brute force solution after 12 minutes past. I stepped in to help and explain how to write a brute force solution.

Mock interview


I understand that the peer needs more practice on mock interview. As an experienced interviewee, I  will work on small test case, and ask for hint if I cannot solve the problem.

Here is the transcript for our discussion. The mock interview was such great experience.


System design interview questions: DESIGN A PARKING LOT

April 28, 2018

Introduction


It is time for me to watch a system design interview asked at Google, Facebook. Here is the video link. It is 29 minutes video, I finally found time to complete the video from 9:18 PM to 9:47 PM.

System Design

The lecture is very structured. Let me write down some notes.

 Abstract Vehicle
 - string licensePlate
 - enum color

Car implements vehicle, same applies to MotorCycle, Bus, Truck. The size of car is Small, Medium, Large, Extra Large.

class ParkingLot(zipCode: int)
- Spot: placeVehicle(vehicle vehicle)

class Spot(id: Long, size: enum)

4 stacks
  placeVehicle  + put in hashMap
   O(1)
  Spot: removeVehicle(vehicle:Vehicle)
     -> Lookup hashMap





System design introduction for interview

April 28, 2018

Introduction


Learning system design is kind of challenging. What I like to do is to watch a few videos on youtube.com first, and then I like to come out the idea how good those videos are.

This one I chose to watch is made by an Apple engineer. Here is the link. Let me rate this video as 10 out of 10.

I like to write down those topics I need to learn basics.

System design


Here are some notes I like to write down.

Ask good question. What features to work for, how much to implement.
Don't use buzzwords.
Clear and organized thinking
Drive discussion (80-20 rules)

- Features
- Define APIs
- Availability
- Latency performance
- Scalability
- Durability
- Class Diagram
- Security & privacy
- Cost effective

Let us move on the topics for system design:

- vertical vs horizontal scaling
- CAP theorem
- ACID vs BASE
- Partition/ Sharding Data
  - consistent hashing
- Optimistic vs pessimistic locking
- Strong vs Eventual consistency
- Relational DB vs NoSql
- Type of NoSql
   . key value
   . wide column
   . document based
   . graph based
- Caching
- Data center/ Racks/ Hosts
- CPU/ Memory/ Hard drive/ Network bandwidth
- Random vs Sequential read/write on disk
- http vs http2 vs websockets
- TCP/ IP model
- Ipv4 vs ipv6
- TCP vs UDP
- DNS lookup
- Https & TLS
- Public key infrastructure & Certificate Authority
- Symmetrix vs Asymetric key


Being an interviewer: Meeting planner

April 8, 2018

Introduction


It is the algorithm to find the overlap in two intervals. And I like to learn from the peer how he solved the problem first time with the correct algorithm, and also very good skills to write Java code.

The peer has very good working experience to work on biggest software companies in the world, China and USA. I had good understanding the programmer who worked for Tencent, Amazon and Microsoft, compared to my first practice, he is much better and also strong in the analysis of the algorithm.

The algorithm is challenging and very time consuming even for the top talent programmer in the world first time.

Mock interview


Mock interview is fun and I watched a few times through the video, how the peer got family support and work on the mock interview very hard, since his wife passed by behind in the living room. So I talked to the peer that relax, let me play with my medicine ball, take your time to come out the correct algorithm.

The peer was very busy to come out the overlap calculation, and also go through the discussion of advancing the pointer of one slots.

Here is Java code I reviewed. I also like to point out the analysis is perfect. I like to use it as my reference to come out the analysis.




Being an interviewee: Flatten dictionary

April 28, 2018

Introduction


I had 10:00 AM mock interview this morning and I had to work on flatten dictionary algorithm. What I like to do is to avoid memorizing the solution, but I like to learn something from this mock interview.

I cannot believe that I met a peer who had work experience in China, Amazon and Microsoft, :-) I found out after mock interview. But in the mock interview, I still have issues to write down the code, a few of them, I like to work with the talent programmer in 30 minutes. I spent at least 5 minutes to write down the analysis, and then worked on coding around 20 minutes. Last few minutes I worked on bug fixing, code cleaning. I ended my algorithm in 28 minutes.

Mock interview


Let me write down what issues I came cross in the mock interview. Here is my C# practice code with the analysis.

1. I need to look up stackoverflow, and then find C# code:
type check to see if value object is Dictionary<string, object>

2. I need to handle prefix function argument. The definition of prefix is kind of confusing, in algorithm analysis, I did not write down the detail of the design. But in mock interview, I had to play with the code, and then I had a few minutes discussion with the peer. And then I cleaned up the code, wrote three lines of code: line 36 yo line 39.

3. I need to move out the code related to newKey (line 23 to line 27) outside if statement line 29 as the peer advised. I need to remove the redundant code.

Actionable Items


I have 300 mock interview experience, but I still have to learn something each time to work on mock interview. What are those things I have to work on?

I could not believe that I like to practice mock interview, even this Saturday, I have to work on tax return, system design. I still book a few mock interviews to keep myself busy and learn something inside my small home office.

It is time for tax return

April 28, 2018

Introduction


I like to write a few sentences for my tax return of 2018. I really like the Canadian immigration department did good job to process my sponsor application and also the related principle applicant job. As a Canadian citizen, it is my turn to file the tax return in time and also get some help from my friend Jessie this Sunday.


Counting down the time


Let me count down the time. I like to start to work on it 30 minutes a time.

April 29, 2018

I spent over two hours to go over the documents, review my rental business, and also other documents. It takes me a lot of effort to understand how I performed last year in the city of Vancouver.


Object oriented design interview question: Design a Car Parking Lot

April 28, 2018

Introduction


It is the Saturday morning. I browsed some wechat posts and then moved on this 30 minutes video. Since I came cross this quora post first, how to approach object oriented design questions in programming?

Here is the link of 30 minutes presentation.

Design is getting easy


I like to learn design and relate to my current job experience.

Time I spent is from 8:30 AM - 9:00 AM. I like to play the video again and write down some notes here.


Friday, April 27, 2018

Cap theorem and system design

April 27, 2018

Introduction


It is my task to study system design and I am planning to write 10 blogs related to system design study. One is to study CAP theorem and learn that it is important to consider CAP theorem in system design.

I like to learn first, reading is the first step. I read some funny story about CAP theorem today, so I found one with more technical detail. Here is the link.


CAP theorem 


I still remembered that I got second interview on interviewing.io, and the interviewer told me that I should start to work on system design. Cap theorem is one of topics he told me to work on first.

What is CAP theorem?

Among Consistency, Availability, Partition-tolerance - pick any two.

Here is the answer on quora.com, here is another answer for CAP theorem related to ACID, SQL, NoSQL.


Yup education software startup study

April 27, 2018

Introduction


I like to do some research on education software startup. The company is named as Yup.com. I had two mock interview on April 26, 2018 evening. First one is at 8PM, I met a peer who works for Microsoft and stayed in California area. And then I had a mock interview as an interviewer at 10pm, I met a programmer who stays in California as well.

I was so glad that I have time to reach out to people and then have time to work on algorithm and data structure together. It is also good time for me to learn more about startup companies in silicon valley area.


Short research


I plan to do research like 20 - 30 minutes.




Good news of my sponsor application

April 27, 2018

Introduction


It is 12:14 AM. 14 minutes past 12:00 AM, I need to stop working and go to bed to prepare for tomorrow's work.

I like to write down good news, I got emails from my sponsor application for my nephew on April 25, 2018. The principal application is updated with physical examination and other documents.

I need to spend time to catch up all related issues.

Being a very good sponsor


I like to be super talent sponsor. Actually I have to read the document and understand the process first. I need to provide document as well as a sponsor.

Proud to be a sponsor


I know that life will give me a surprise if I choose to give up a lot of things in my life. I start to give up a lot of things in my life after I got in Canada.




Be humble and stay positive

April 27, 2018

Introduction


It was a busy week, I had one week vacation from April 12 to April 18. I came back from China vacation last Wednesday, and I enumerated my three mistakes after I came back from vacation.

I like to get myself time to recover, specially on my hay fever, coughing problem and also jet lag etc.

My three mistakes I shared multiple times, I just like to share that I am a human being. I need to forgive and also be forgiven.

First mistake I had is that I took the skytrain from Richmond airport to water front station in April 18 after I got off from international flight over 10 hours, I got on skytrain around 1:30 PM, I fell sleep on my seat but I was safe with my luggage and handbag. When I woke up around 2:20, I was back to one station to Richmond airport, another direction.

Second mistake I made is that I called the second day after I got back from China vacation, I had to go to office later, and then I noticed that my computer showed that it is Thurday August 19. I got extra 15 hours since time difference between China and Canada. I still have one more vacation day since the time difference.

Virus software 


I experienced the virus software malfunction issue. This Monday I was so busy to recover from the bug on my daily duty website maintenance. I had to deal with the issue, the commercial virus software found a virus on my database file, and then deleted the file last Friday. I was luck since I came back my vacation last Wednesday, I had time to recover since I was in the office whole week, I fixed temporary until Tuesday we decided to remove virus software from website database server.

Let me write down some virus threat information here:



Source: AvastCloudCare
Description: AV has detect a threat.

Virus_action2: "DELETE"
virus_type2: "MALWARE"

threat_description: HTML: HideMe-F[Trj]
virus_action2: DELETE
virus_type: MALWARE


The commercial virus software makes this kind of error? Unbelievable! I am confused and then spent more than one hour to look into this virus called HTML: HideMe-F[Trj].


Thursday, April 26, 2018

Being interviewer: Leetcode 152: Maximum Product Subarray

April 26, 2018

Introduction


It was very nice experience to be an interviewer. I helped the interviewer learn a brute force solution first and then we had very good discussion on the optimal solution using dynamic programming. The peer is preparing Google phone screen, I may come cross a Google future employee this time.  I met a senior undergraduate student who also works full time for a startup company in silicon valley area.

Mock interview


Of course I could not tell from the person how good she will be, specially when a peer is undergraduate student. But it is very easy to communicate with the peer.

Here is JavaScript code we worked on together, around 60 minutes. I also had chance to learn JavaScript from the interviewee.

I also learned from the peer. I challenged her code using comment line 63, I told her that line 68, temp_max *= arr[i] * arr[j], and then she added a few lines of comments from line 64 to 67, and then I understood her idea to use dynamic programming. She fixed the bug, and line 68: temp_max *= arr[j], arr[i] is removed from the product.





Being interviewer: Busiest time in the mall

April 26, 2018

Introduction 


It is my 8:00 PM mock interview. I was the interviewer and then I learned most important lesson. No matter how many years you work, what company you work for, you have to go through the learning process by yourself in order to be a very good problem solver.

You can be a senior developer, you may go through Google onsite, but you still have to work on those foundation algorithm, practice and get good feedback, work on improvements.

I did not copy the code written in C#. But I experienced the pain the peer went through and struggle he had.

Mock interview


It was the great experience for me as well.

Being interviewee: Matrix spiral copy

April 26, 2018

Introduction


It is my most favorite algorithm called Matrix spiral copy. I told the peer that I like to write a solution to automate direction change but use extra array to store visited information.

I was nervous since last time I wrote the solution was months ago. I am kind of memorizing the solution. What I did is to use wisdom learned through 300 mock interview experience, I tell the peer that I like to visit first row 5 elements 1, 2, 3, 4, 5. How will I do it?

Mock interview


I had discussion with the peer and the peer questioned me the problem I had to visit first element 1 twice. I missed the reset of row and column variables from line 44 and line 45, and also line 42 to set visited array on nextRow, nextCol true.

How come I discussed the solution with the peer with 2 most important task missing? I told the peer that my code will pass all test cases.

I failed last test case and then I noticed that I need to add line 44 and line 45. I need to reset row and col variables. And then I still failed another test case, I noticed that I need to set visited array; and then I still failed the test case, I noticed that I need to set [nextRow, nextCol] instead of [row, col].

What a mock interview!

I need to structure my mock interview better, guard with the whiteboard testing.

Here is my C# code.

Good thing is that I spent less than 20 minutes to write the code with the analysis. The bugs is very easy to fix and code is minimum. It took me less than five minutes to fix all the bugs.

The challenge part is to write correct code and do whiteboard testing by myself.


Wednesday, April 25, 2018

Being interviewee: Word count practice

April 25, 2018

Introduction


It is my favorite algorithm but also it is hard to write a complete solution in 30 minutes. The algorithm is to lower the sentence, remove special char \', and then split words by delimiters such as chars in the string " .:;,!", and then save the words to the dictionary, and then sort them by value. From the dictionary, apply the sentence word order, save words in the bucket to apply bucket sort, and then output in descending order of value.

Mock interview


I tried to write the code and pass test cases in 38 minutes, but I could not make it. After the mock interview, I spent over 20 minutes to debug and fix bugs in two places.

Here is C# code written in today's mock interview 8:00 PM. On line 48, I need to remove the statement: if(item.Length == 0), actually the statement: continue is deleted by cleaning process; and on line 106, the word may not be in the dictionary.


And here is C# code written after the mock interview to fix the bugs.

Chatting


It is such a nice experience to practice the algorithm with a software engineer from expedia.com. I was asked if I work for Microsoft since I choose to use C# programming language. I couldn't believe that the peer wrote the optimal solution quick and correctly. I just could not believe that I keep meeting a very talented programmer again, in an ordinary Wednesday. I spent 38 minutes on my algorithm, the peer spent less than 20 minutes on his algorithm meeting planner.

Action items


I need to design some drills for me to work on those algorithms similar to those mock inerview algorithm, play with the error message, so I can think about how to identify issues quickly once I read some error message.

Train myself to read the error message, and also get used to pinpoint the place by interpreting the error message correctly, specially for those error message without line of code information.

My ideal practice is to fix bugs in one minute. I should be able to quickly identify the code's issue.

Tuesday, April 24, 2018

FLAG salary research

April 24, 2018

Introduction


It is so interesting to have a mock interview this 8:00 PM. The peer told me that I am such a nice algorithm and data structure teacher, I should go for a teacher job. No one spends over 3 years to learn algorithm and data structure so well. I laughed about it, and then I said that the teaching is paid by a course.

We had a few minutes to discuss about the code review, what kind of feedbacks I got from the Sudoku algorithms?

So my research of today from 10:50 PM - 11:10 PM twenty minutes is about the salary of FLAGS. Let me review the article again. Here is the link.

FLAGS salary


Here is the article in Chinese.

Follow up 


April 28, 2018

I met a person through mock interview 12:00 PM, so I was told to check the website called levels.fyi. I plan to spend 30 minutes to look into the website.

May 7, 2018

Here is the survey called Canada new graduate offers 2017 - 2018.

Being interviewee: Busiest time in metro town

April 24, 2018

Introduction


It is the algorithm I like so much called linear scan algorithm, by checking next row to make sure that current time stamp is the last row to finalize count of people left in the mall.

Mock interview


I had good time to write and test the code. I tried to write down some notes before I wrote the code in the mock interview.

Here is my C# code. Here is my feedback.



Being interviewer: Sudoku solver

April 24, 2018

Introduction


It is so interesting to meet the peer second time in less than a week. I had good time to learn Go language through the peer's performance. One major advice I had after the peer ran the web compiler test cases is to add back tracking on line 35, so the code could pass all test cases. I explained to the peer that parent node will ask child node to back track the element to its original dot value since parent node will try its next option.

Mock interview


This mock interview is so much fun, since last time I was complained not to give out any hint, leave first 30 minutes for the peer to reach his full potential. The peer gave the time complexity analysis and mentioned that he learned the recursive tree through cracking code interview book.

Here is Go code I reviewed, which also passes all test cases.


10+ rounds of mock interviews

April 24, 2018

Introduction


It took me more than one hour to figure out how many rounds of mock interview I had starting from March 2016. I learn that it is important for me to get organized, and try to get some insights from those mock interviews.

Mock interview 


Here is the summary to show my ten rounds of mock interview.


Learning is so much fun


I used to attend church and had good time in Willingdom small group from 2010 to 2015. I used to go out with over twenty people to hiking and enjoyed trails near the city of Vancouver. But I never imaged that learning algorithm and data structure can be the similar experience. You can learn from one peer a time, and then learn from hundreds of players. Only thing is that I have to force myself to work on those 30 algorithms again and again. But it surprises me that I learn better from those 30 algorithms.

What I believe is that once you learn how to master a hard algorithm like Leetcode 10: regular expression matching and Edit distance, you just apply to other algorithms.

Bible teaching always uses seven to remind us to forgive a person. But learning algorithm Leetcode 10: regular expression matching takes me more than 7 times, more than 14, 21 times. With so many peers to work together on the algorithm, I start to think and understand how I learn the algorithm thoroughly. That is a lot of hard work and a lot of patience to allow myself master the algorithm.

C# source code


It takes time for me to put together all C# source code I wrote for each round of mock interview. Here is the folder to check on github. I will add one by one for each algorithm or all algorithms for each round.


Reference:


All the algorithm and problem statements can be looked up here.

Monday, April 23, 2018

Being interviewee: Find smallest subarray length containing all numbers in target array

April 23, 2018

Introduction


It is the classical algorithm called find smallest substring containing all keys. I have practice the algorithm over ten times last 12 months. I learn so many things through the practice, and it is my most favorite algorithm.

I wrote an algorithm using exactly same idea to apply to integer array.

Mock interview


Here is my C# code.


Follow up after mock interview


It took me a while to write and simplify the code from line 60 to line 66 during mock interview. What I did is to go over in detail if the left char of sliding windows is not in the dictionary, or in the dictionary. And then discuss one step a time.

Other way to think to expedite the process is asking myself four critical question:
1. When to break the while loop 51?
2. When to decrease the variable numbersFound
3. when to decrease the dictionary for the key if the left char is in the dictionary
4. Please move the left point one step forward to start a new sliding window

Being interviewee: Find smallest length of subarray

April 23, 2018

Introduction


I spent 30 minutes to write a brute force solution and I learned something from the interviewer.

Mock interview


Here is my C# code.

Follow up after mock interview


My mock interview experience is very good learning experience. First of all I made a mistake on brute force solution. The subarray should start with value equal to first element of target value, and the last value should be equal to the last element of target array. 


What I did is wrong. Any position of the array can be start of subarray, any position of the array bigger than start value can be the end of the subarray. I did not consider the target value to filter out those unmatched values. 

The time complexity of brute force should be O(n^2) instead of O(n^3). 

After line 76, I should add one more statement.

77   break; 


What if



It is the first time I experienced the strong connection to one of peers I met on mock interview. Since we practiced mock interview together more than three times, I know that he is my best connection right now.

It does not matter how good I am, if I keep meeting strong players on the market to prepare next important phone interview or onsite interview, I will definitely learn how to catch up to match the skills of peers.

This year 2018 is so special. First three months I experience over 10 people to prepare for Google onsite or phone screen, I did tell myself calm down, and learn from those peers, and also ask myself what to work on. I remembered that I thought about a dynamic programming algorithm while I took skytrain to Vancouver donwtown Microsoft to attend a hackerthon event, I was busy thinking about the solution.

My training of 2018 first 3 months are top of world classical training, I only used two mock interview platoform and then I connected to peers over the world. I believe that best of training or education of algorithm and data structure I got for myself is such revolutional, and help me to gain so rich experience.

It is most exciting part of my life as an adult last 8 years.

Leetcode 140: word break II

April 23, 2018

Introduction

Here is one post I like to study for Leetcode 140: word break II. I need a few hours to play with the algorithm so that I can understand better.

David Anderson: A well-written article about Amazon leadership

April 23, 2018

Introduction


It is 12:20 AM, 20 minutes past 12:00 AM. I could not stop reading the article written by David Anderson. I like the article since I like to be a better engineer. I like the great thinking and reasoning in the article.

Reading time


Here is the article link.

Sunday, April 22, 2018

The friendship

April 22, 2018

Introduction


I like to write a blog on the friendship over 30 years. My college classmate from 1984 to 1988 visited Vancouver in March 2018, and then I also had chance to visit Shanghai, and enjoyed the visit of my friend's home in Shanghai near high speed railway station. It takes 8 minutes to Pudong international airport from LongYang station to the airport.

Friendship


I like to write something about friendship. Life is such a great teacher.


Amazon architecture

April 22, 2018

Introduction


I like to plan to learn some system design in next four weeks. I know that it is so challenge to do very well on system design. I like to read some article and at least I learn a few concepts first.

Here is my first step to learn system design on April 22, 2018.

Amazon architecture 


I like to read the article called Amazon architecture.


Being an interviewer: Get A different number

April 22, 2018

Introduction


It is my 10:00 PM mock interview on April 21, 2018. I had chance to observe how the peer wrote the perfect solution.

Mock interview



Here is C# code I reviewed. On line 32, I advised the peer to extract an explanation variable so that the code is more readable.


Being an interviewee: Array quadruplet

April 22, 2018

Introduction


It is my favorite algorithm called array quadruplet. I did talk about the analysis of the algorithm and then wrote down the algorithm without any bug and pass all test cases first time. Only thing I did is to include library using ..., I explained to the peer that I have worked on the algorithm multiple times, but one time a young lady who was preparing facebook onsite, she told me that I should simplify the code to check if dictionary contains key or not. So I only need to write three lines of code from line 57 to line 62, before I need to write if/ else and then update list in both cases.

Mock interview


Here is my C# code.

I still remembered that the first time I worked on the algorithm on mock interview platform. I had such difficult time. After I worked with over ten people on this algorithm, I followed every peer and understood how they think and analyze. So it is also very good experience to help the peer to work on the algorithm the first time. Here is the blog I wrote to give the feedback to the peer. 





Being an interviewer: BST inorder successor

April 22, 2018

Introduction


It was my 6:00 pm mock interview. I had chance to help the peer to come out the solution in 40 minutes. I enjoyed to be an interviewer and then helped the peer to come out the optimal solution.

Sometimes it is so relaxing to watch how the peer worked hard, and then took hint quickly and reached the optimal solution.

Feedback


Here is the feedback I wrote on mock interview platform. I like to encourage the peer to work hard.

Things you did well

The peer took the time to think about the solution, started from inorder traversal and then moved to optimal solution by going up or down through height of tree to search. The peer wrote the code with bugs, and then worked on cleaning and removed all bugs and redundant code. 

Good thing the peer did is to stay calm, and also very good communication with the interviewer. The peer took hint quickly and then worked on the detail. It is very good to be able to come out the correct solution first time. 

The peer tested code with four test cases and make sure that the code works perfect. 

Things you should work on

Recommend the peer to work on more mock interviews. There are a lot of talent people out there, you will meet a lot of peers and then find ways to improve and go above the average performance. Work hard! 

You as an interviewer

I presented two solutions, and then the peer chose one for me to write. Also the peer asked a few questions and I think that the peer is very curious and like to improve. Good to work with the peer. 

C# programming language

April 21, 2018

Introduction


I like to do some research how to advance my C# programming skills before I have to move on Java programming language.

I used to tell people and stop learning C# as C# programmer, I rate myself 7 instead of 9 or 10 last July. I know that it is very challenging for me to be trusted to write solid code using C# programming language for a medium size software company.

How to advance my C# skills?


I bring up the topic and will look into next week.





Saturday, April 21, 2018

Being an interviewer: Sudoku solver

April 21, 2018

Introduction


It is challenge for me to train myself to be an excellent interviewer. I noticed that I checked wechat and read my own blog while the peer worked on C++ code. The first 30 minutes the peer could not pass all test cases, I told her that I am not in the rush, let me review her code and find the bug together.

The problem is that I should give the peer hint every step she writes the code, and point out the bug in her process. But the peer was trained and advanced to ICPC national contest in Brazil, and she wrote the idea kind of new to me. I let myself skip the whole process, and then catch up last minute how the code works. Specially she got some help from a friend to play world contest of ICPC.

Mock interview


Here is C++ code. I learned a few things about C++ through mock interview. The peer told me that in C++ 1 means false.

I ended up talking to the peer one hour 40 minutes. She is preparing Microsoft onsite interview in May. I definitely learn a few things through her practice. I understand that ICPC contest is really good tool to help students to advance their problem solving skills in quick and efficient ways, specially before they start to work full time as a software programmer.

Highlights of code review:
1. line 6, k argument is not meaningful, it should say something like digit.
2. line 14, the peer mixed col/3 with row/3.
3. line 61, the peer told me the failed test has two 9 in the same column, so the call of fill should be checked and return false if the duplicate is found.


Being an interviewer: Find overlap interval

April 21, 2018

Introduction


There are a few challenges for me to be a good interviewer. I learn from every mistake. But today I made a few mistakes when the interviewee worked on the algorithm called find overlap interval.

The peer complained to me that I should give the peer chance to get the job, ace the interview, solve the problem. If there is the bug, I should give the hint and let the interviewee solve the problem. There are 30 minutes limit, he still has time. I cannot just give out the solution without considering being a good interviewer.

I learn a few things about Go as a language, and also I learned a few things about being a good interviewer.

Mock interview


I made a mistake and lost the Go code I reviewed.


Being an interviewee: Deletion distance

April 21, 2018

Introduction


It is 10:00 PM mock interview and I had to work on deletion distance algorithm. The peer asked me if I worked on the problem before, since I did very fast. I finished the analysis in less than 10 minutes, I went over the test case "heat" and "hit", and built up a dynamic programming table from scratch. I certainly told the peer that I worked on the algorithm more than 10 times, each time there is a new issue coming out.

I started to code and passed my test case and all test cases on the platform. And then I had a chat with the peer. The peer had very good leadership skills, he showed me how to explain things crystal clean, pay attention to the intonation, kind of like exaggeration.

I told the peer that people complained to me speaking too fast, my sister with over 30 years teaching experience complained to me that I was not in the same channel, sometimes I let my mind shift away. I do not answer people's question directly, rambling, or change the topic without any conscious. I am still working on it.

Sometimes I notice that I do not focus on one thing, do multiple things in the same time. In terms of mock interview, I have to respect the peer, stop playing wechat or checking my email or my blog while the peer is coding.

The peer is very considerate and supportive, he said that it may happen to him as well.

Mock interview


Here is my analysis and C# code.