From January 2015, she started to practice leetcode questions; she trains herself to stay focus, develops "muscle" memory when she practices those questions one by one.
2015年初, Julia开始参与做Leetcode, 开通自己第一个博客. 刷Leet code的题目, 她看了很多的代码, 每个人那学一点, 也开通Github, 发表自己的代码, 尝试写自己的一些体会.
She learns from her favorite sports – tennis, 10,000 serves practice builds up good memory for a great serve. Just keep going.
Hard work beats talent when talent fails to work hard.
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.
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).
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.
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.
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 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
The peer worked on the solution, and then we had discussion and then our discussion lasted more than 30 minutes.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
- 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
- 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
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 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.
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.
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.
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.
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.
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?
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.
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.
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.
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.
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:
Description: AV has detect a threat.
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.
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.
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.
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.
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?
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
All the algorithm and problem statements can be looked up here.
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.
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
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.
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.
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.
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.
I like to write something about friendship. Life is such a great teacher.
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.
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.
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.
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.
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.
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.
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.
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.
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.
It is hard level algorithm called Leetcode 10: regular expression matching. I had a mock interview 8:00 PM and the peer told me that I should hurry and complete everything in 30 minutes. I did finish coding and ran my own test case. But my code failed last test case "abaa" with pattern string "a.*a*".
I had difficult time to play with dynamic programming table. I have to match the index of text and pattern string to the dynamic program table, and then I need to build the recurrence formula.
Being a programmer, I learn to be patient again since I could not memorize the thing. I have to make mistake first and run a few simple test cases and fix the bug.
The first twenty minutes was so exciting and nerve breaking. I just write down what I like to do. For example, I wrote something like // base case "" match "a*" or "a*b*", and then I can write code by looking up the comment.
I confused myself about -1, so I wrote down on line 20 as a comment, // pattern[col - 1]. Because I cannot declare an explanation variable because it may be out-of-range of the array. On line 21, I wrote down dp[0, col - 3] which should be dp[0, col - 2] because I confused dp table index with pattern string index.
It is kind of training I like under stress, work on whiteboard, and also work on communication with the peer, manage the peer to make sure the whole process is up to standard.
I wrote a comment like the following:
// base case "a" does not match "" - do not need to do anything - default false
Good thing I did in the mock interview is to run a few simple test case first. When I ran the test case "b" match "b*", I ran into index-out-of-range error, so I fixed the bug on line 21.
My code passes all four test cases I wrote, but failed mock interview platform test case: "abaa", "a.*a*".
Here is the code I fixed the bug. All my practice on Leetcode 10: regular expression matching can be looked up here.
Please compare my last practice March 29, 2018, here is the blog.
How to deal with tough interviewer?
I had a peer who has more than five year work experience at Microsoft. He is very strict on time limit 30 minutes, so I was in the rush to complete the code and run test cases. At the end of 30 minutes, the interviewer told me that he was very happy for my performance, and he thought that I should be able to fix the bug quickly.
Once a while I like to do a small research, write something for an interesting topic. I have completed more than 250 mock interviews. I have reinvented myself by getting connected to the world.
I was so busy in weekends and evening, I booked the mock interview on a few platforms, and in-between I had some one-to-one session mock interview to help a peer to prepare for important interview.
I used to stay alone and do not talk to people about coding every day. Somehow I have some bad habits formed and then I got complained about.
I used to call my mom every day from 2000 to 2010. I do not have a person to call every day. My sisters are super busy and they do not like to take my calls. One time my sister told me that I called her more than 3 times when I tried to plan to travel to China. Now I call her zero time and I just go ahead to plan things better and efficient.
I like to check wechat or wenxuecity.com website daily. I attend church and get connected to friends regularly. But I like to get more connected to the world, specially those hard working people who likes to advance their software programmer career, where to find those people?
I started to work on mock interview last March 31, 2017 again. It was not easy to build a new habit, specially I have to meet a stranger and also I have to work on algorithm problem solving. It was challenging and it takes some time to get used to practice mock interview. I did not practice from any mock interview from January to March 2017, even though I was advised to practice on mock interview platform.
Once I get used to practice mock interview, and I know that it is an excellent tool for me to learn algorithm, I set up mock interview 5 or 6 times a day in the weekend starting January. 2017.
It is not easy to write down every mock interview practice. I was too busy and I did give over 10 mock interview as an interviewer to ask same algorithm "Spiral matrix print" from January to March 2018. I did not write down one blog for each mock interview, good thing is that I can replay the video on the mock interview platform.
It is 12:00 PM mock interview. The peer worked on the algorithm called Decrypt the message. I noticed something is different. The way the peer presented the algorithm is so clear and then I know that I met a very talent programmer.
I also joined the analysis of the algorithm with the peer. We talked about the difference between those numbers on line 8 and line 9.
Here is the analysis and python code. The peer managed to pass all test cases.
It is 12:00 PM mock interview. I have experience to work on the algorithm root of a number over 10 ten times, 5 for interviewer, 5 for interviewee. The peer has strong talent with 1st place twitter big data hackathon. The peer worked on decrypt the message algorithm first, I rated him top 5 - 10% in all over 200 peers I worked last 12 months.
I like to write a binary search and also apply some technique I saw recently using integer to count the numbers.
The peer challenged me about the termination base case, 0.001 is the error range, how I assert that two values are equal using 0.001?
It is my algorithm called Find the duplicate in two cases, both sorted arrays has the size close to each other, or one is much larger than the other one. I had the mock interview, after the peer solved the Sudoku solver, I solved my algorithm next.
What I did is great, I gave the analysis of the algorithm for those two cases, I wrote down the analysis from line 95 to line 110. But I came cross a bug of out of memory for my solution to use two pointers. Usually it is show time for me to solve the problem in one try, less than one minute.
Based on my past experience, I was complained one time by a Ph.D. student of University of Florida who prepared for Google phone screen, he told me that I should focus on the error message, and then think about the possible places for the bug. Do not do wild guess trouble shooting.
Related to out of memory bug, it is not index-out-of-range, what is possible reason?
Actually it is a dead loop, but I turned to my first thought. I wrote brute force solution to replace duplicate.ToArray() on line 40 instead at the first try. I did not use my analysis in this trouble shooting.
After more than 250 mock interviews, I found another issue today for my practice.
After a few minutes, the peer told me that I missed two lines of code if the duplicate item is found. I need to advance two pointers.
Here is my C# code and the code passes all test cases.
It is my 10:00 AM mock interview. The peer worked on Sudoku solver, and then he chose swift language. What he did is to check given numbers on the board are following the rules - row/ column, small grid 3 x 3 matrix not duplicate.
The code he wrote for preprocessing is kind of buggy, so we started to talk and communicate on this piece of code. And then I told him that most of people do not do this preprocessing.
The interviewee wrote code but could not pass the test case, and then I walked through the code, and pointed out on line 18, variable name i is used the second time.
Here is the swift code I reviewed for the peer as well. The code passed all test cases.
I gave the advice to write readable code, use meaningful variable names, and also I advised the peer to communicate more with the interviewer. I told him that I met a young master graduate, who was preparing Google onsite, and then he got offer. When I mocked interview him, he kept asking me "am I in right check", "do you think that my coding looks ok", he has determined goal, to write code to pass all test cases he prepared, he likes to develop a complete solution in less than 30 minutes.
I had a small chat with the peer who is preparing Uber phone screen. The peer got the Amazon offer but chose another offer a few years ago. Interesting story, a small world, stay anonymous, smart and hard working young programmer.
It is the first time I start to look into how to run marathon, since I have hay fever recently and it brings my concern how to overcome the difficulty. I had chance to talk to one of my friends in 30 years reunion, and he shared his experience to run marathon.
April 27, 2018
BMO Vancouver Marathon
I like to do some research on 8KM Race, here is the link. Here is the link called training room traing clinics.
It is the hard level algorithm and I like to spend time to go over a few more ideas through Google search and Leetcode discussion panel. What I like to do is to go over more detail how to address time and memory limit exceeded problem.
I spent over 30 minutes already to go over my past practice and a few ideas, I like to go over this blog.
I like to go over the notes written in Chinese in the blog, and then rewrite some of them, make it my own.
As a programmer, most of important for me right now is to be a good thinker. I like to search the blogs and find the idea to help me think clearly. Here is the notes:
LeetCode中为数不多的考图的难题。尽管题目看上去像字符串匹配题，但从“shortest transformation sequence from start to end”还是能透露出一点图论中最短路径题的味道。如何转化？
1. 将每个单词看成图的一个节点。 2. 当单词s1 改变一个字符可以变成存在于字典的单词 s2 时，则s1与s2之间有连接。 3. 给定s1和s2，问题I转化成了求在图中从s1->s2的最短路径长度。而问题II转化为了求所有s1->s2的最短路径。 How do I go over the notes above? 1. Google search the shortest path in the graph. 2. How to define a graph? Every word is a node in the graph. 3. Node s1 and node s2 have a connection -> how to define it? Let me work on the notes in the following: 无论是求最短路径长度还是求所有最短路径，都是用BFS。在BFS中有三个关键步骤需要实现:
It is the reunion to celebrate the birth of Shanghai Jiaotong university 122 years, and also we met in Shanghai to celebrate 30 years since we graduated together back in 1988 with mathematics degree, we stayed together from 1984 to 1988, and took all courses together. For my case, I stayed with other six girls in the same dorm, and we discussed so many math problems together, and we went out together for so many activities.
One thing I like to do is related to my experience to the current China highly developed as a country and also open to new entrepreneurship. What I like to do is to relate my class 70141 to one of top celebrity in Forbes 2018, therefore it is very easy to make connection to the whole world, how education helps people to grow, nurture future leaders and motivate each other to work hard.
I sat in the front row, and rest of my class was in the classroom, including the third row Shen Neil, a billionaire and a Yale graduate. Great thanks to the math professorXiang Longwan, our instructor of mathematics course took the picture and shared with us after 30 years, on April 14, 2018. My favorite reading of professor Xiang is here, who wrote the recommendation letter for my Florida Atlantic University mathematics Ph.D. program back in 1996.
It is so interesting to write down my one week vacation experience from April 12 to April 18. I learned so many things from my classmates, Shanghai Jiaotong University alumni. We got together from April 13 to April 15, 2018.
I just came back to the city of Vancouver, Canada this April 18 around 1:00 PM. I had so exciting one week vacation, using Air Canada, GaoTie train with speed over 250KM/ h, and met so many friends in the class of SJTU 70141. We shared stories and fond memory, one of professors showed up a picture of whole class, I sat in the front row, I could not believe that every one of us found in the picture, laughing and such great experience.
One campaign I like to do is to work on ten algorithms to celebrate the China vacation. Also I like to see ideas to recover hay fever I still have and hopefully I can recover sooner and go to work healthy. I have to work on seriously to recover.
It is the algorithm I choose to work on after one week vacation from China. First, I like to study one of blogs related to the algorithm. Here is the blog's link.
I like to go over the blog about Google onsite interview, and find some interesting algorithms to work on.
It is my favorite time to play mock interview with a peer third time. I know that it is very hard for me to improve a lot in less than one month. The algorithm I was asked is to find the duplicate number.
Here is my mock interview transcript. I will add some notes later.
It is my favorite algorithm and it is hard level algorithm in Leetcode.com. I chose this algorithm to interview a friend met on mock interview. He is preparing next week Google onsite, and I gave him another hour mock interview.
I practiced the algorithm recently, but I found out that I still missed something important. The optimal time complexity is O(n), and it has to use stack to save the index of rectangle left boundary when ascending. The stack is always keeps non-descending heights. Here is the link for my past practices.
Learning is fun
The peer is very organized and also very good at explaining the algorithm. I specially like the way he structured the content.
I spent 14 years to live in Florida from 1996 to 2010. I miss the fun to live in the city of Boca Raton and like to document some fun memory. I also like to clean up all photos and videos I took for those years. I like to get some idea how to make good memory for my life events.
It is such a fascinating world. I had such great time in Florida from 1996 to 2010, I always stayed near Florida Atlantic University campus, so I worked on my computer science PH.D. study from 2001 to 2010, so I hanged out with Ph.D. students and scholars all the time. I landed to Canada in April 18, 2010. At that time, I did not have a job waiting for me, I just landed as a permanent resident.
In May 24, 2018, after one month I landed in Vancouver, looking for a software programmer job in the city of Vancouver. I was invited to go out hiking with my Shanghai Jiaotong university's classmate Zhuang and her family.
First time challenge
I used to stay in Florida all the time. So it is so surprising that I had difficult time to do hiking trip with a group of 20 people. So amazing, I experienced the joy and nature beauty of Canada and people I started to get to know.
At that time, I only had two Shanghai Jiaotong university graduates I knew working in the city of Vancouver.
I like to post some photos for the hiking trip. And also one video.
I talked to my roommate Emma and she said that my voice is not aging at all. I like my voice. Here is the video I recorded at the top of mountain with my friend Zhuang and all other families. I missed the fun.
I spent a lot of time to read wechat group 500 people of Shanghai Jiaotong university just setup for Shanghai Jiaotong university 1988 graduated students. Suddenly, I had to challenge my memory to recall all those faces. I have no clue who they are. But once the pictures together with 30 years before/ after, my memory is coming back.
Life is such a beautiful thing with so many talent friends graduated in 1988 sharing the memory together using wechat.
Not all of us are huge success and very good career. We do have some of us to complain that they work for the big manufacture business, and went through the hard time to lose the stable job, and then the transition to the challenging life.
But we do have a lot of successful stories, in my class 70141, there are principal scientist, professors, deans of universities, math teacher and bankers one of 3600 banks in China top executive etc. We are lucky since we chose to study mathematics, we had less than 30 people in the mathematics major in Shanghai Jiaotong university admitted in 1984. But at that time, we have more than 6 class of mechanical engineering major, material science major etc.
It is hard level algorithm called Leetcode 312: Burst Balloons. And the video is 20 minutes, I spent the time to watch the video, staying at home for one day vacation. I enjoyed the learning of the algorithm.
It is interesting for me to learn the dynamic programming through the video. I like to evaluate the author and see how good he is. I know that he is working for Facebook.
Leetcode 312: Burst Balloons
I like to talk about a screenshot and discuss the layout of dynamic programming algorithm presented by basksetwangcoding.
First step, I need to define state for the dynamic programming algorithm.
Next step, I need to define initialization step.
Third step, I need to define the function, problem and subproblem how to connect each other.
[left][right] = Max(i: [left + 1, right - 1])
For each subproblem, coin[i] * coin[left] * coin[right] + [left][i] + [i][right - 1]
Fourth step, I need to define result: [n - 1]
I need to put together a simple example to explain the solution to the peer. Here it is the example:
It is a hard level algorithm called Leetcode 312: Burst Balloons in Leetcode.com. I like to study the algorithm again by watching the teaching video here.
I could not believe that I finally have time to write code for the algorithm on April 25, 2018.
Leetcode 312: Burst Balloons Algorithm practice
I started to work on the algorithm on April 24, 2018. I have to learn the algorithm by working on a simple test case [3, 1, 5, 8] with the maximum value 167 based on Leetcode 312 problem statement. What I did is to write C# code based on the idea based on the video provided by a facebook engineer.
I calmed down and thought about how to write this dynamic programming solution, I told myself that I should take the time to think and do not rush, read other people's source code.
Basic ideas are simple. Define the base cases first, and then bottom up build the dynamic programming table.
I spent more than 40 minutes to write down the code on the paper. I put the code in Visual studio and debug the code. Apply the test case [3, 1, 5, 8]. But the code does not work, the value is much bigger than 167. Actually it is 218.
Here is my C# practice with some bugs. I need to figure out my problem in the algorithm.
I could not believe that I could not count the correct number. The number is too big. In theory, it should be the error from the base case, the logic of recurrence is simple and I copied from the facebook engineer presented in the above video. But I need to train myself on this bug finding process.
Find the bug
It is time for me to read discussion panel of Leetcode 312, I read a few of them, but the dynamic programming idea is different. So I continued to google and read a few blogs. One of blogs is very good since the blogger works for Microsoft.
But I still could not apply my case. The dynamic programming method in those blogs are inclusive, not exclusive.
Questioning the base case
Finally I started to question my base case, what is the value dp[i, i+1], in other words, keep ith and (i + 1)th balloon, then there is no balloon to burst. My answer is numbers[i] * numbers[i + 1], that is too much. So I changed to one. I ran the code still not the correct. So I finally know that it should be 0.
Although it takes me a lot of hours to learn the algorithm, but I think that I do right thing for myself.
Here is my C# code to pass Leetcode 312 online judge.
It is very surprising that those videos are very well prepared by a facebook engineer in Chinese language. I really like to learn something from the teaching.
Here is the video feed. Here is the author's profile on leetcode.com.
10 most favorite algorithms
I like to choose my 10 most favorite algorithms and write down some notes here. I like to study some algorithms so that I can prepare some good questions to be a mock interviewer for a peer who prepares for Google phone interview second round.
I just could not believe that I had last 2 mock interviews as interviewer, and two peers are preparing for Google onsite in a week. I can tell how good they are to prepare for the interview.
It is time for me to learn this hard level algorithm again. I know that it takes at least 10 practice for me to learn a hard level algorithm. Today I chose to study the video prepared by basketwangcoding in Chinese. My last practice was on January 18, 2018. Here is the blog.
30 minutes video lesson
I like to write down some notes from the lecture.
Brute force solution
In order to learn the algorithm very well this time, I like to work on the test case, [2, 4, 6, 5, 3], explain to myself how to solve the algorithm using O(n^2) brute force solution first.
How many rectangles to be calculated? What is the maximum rectangle area's value?
Iterate the end position from i = 0 to 4.
i = 0, the rectangle is 2.
i = 1, the rectangle is 4.
i = 2, the rectangle is 6.
i = 3, the rectangle is 5 + 5 = 10
i = 4, the rectangle is 3 + 3 + 3 + 3 = 12.
So the maximum rectangle is 12.
For each end index, we can go backward to search until the array's value is less than end index's value.
Or I also can think about the alternative idea. It is to iterate the start position from i = 0 to 4,
i = 0, the rectanlge is 2 + 2 + 2 + 2 + 2 = 10.
i = 1, the rectangle is 4 + 4 + 4 = 12.
i = 2, the rectangle is 6.
i = 3, the rectangle is 5
i = 4, the rectangle is 3
It is my favorite algorithm in March, 2018. I had two practices on this algorithm, one is to write the algorithm in 30 minutes mock interview, and the second one is to review the peer's practice. I chose the algorithm to interview the peer on April 4, 2018 10:00 PM, but I could not give out the solution based on the peer's code.
Here is the code I reviewed in mock interview. The peer asked my advice, but I could not tell at that time the code was bug free.
Now it is 9:20 PM April 5, 2018, I like to write a C# solution based on the simple idea, using negative to represent that the tree does not have same value. Here is my C# code.