Friday, September 2, 2016

Book reading: competitive programming

Sept. 2, 2016

Plan to spend 30 minutes a time, up to 10 hours to read a short book - 152 pages first.

Competitive programming course:

Free download - version 1


Julia spent more than 1 hour to look into lead board of HackerRank, and then, she found the book to read:

https://algo.is/
competitive programming course

https://sites.google.com/site/stevenhalim/

Free download - version 1

Competition course


Julia is looking for a book talking about suffix array etc. advanced data structure. She found one today.

Write down some great ideas after reading. 

1. 10 terms Julia's favorite from the book:
1. Simple array that is pre-preprocessed with Dynamic Programming - Data Structure term (page 7)
2. Page 11, a form of Hash Table - ‘Direct Addressing Table’ (DAT) 

2. Page 8 Question:
2. Given a list of integers L of size up to 1M items, determine whether a value v exists in L?

(More details in Section 2.2.1).

Page 16 - Balanced Binary Search Tree (BST): C++ STL <map>/<set> 
Java TreeMap/TreeSet 
argument: implement a bug-free balanced BST like AVL Tree or Red-Black (RB) Tree is tedious and hard to do under time constrained contest environment. 

3. Look into those typical problems, first, remember the terms - Page 17 - Page 18 
Spend 30 minutes for each problem - warmup, and get traditional problems into daily routine - talk, warmup, and study some implementation using C# as well. (9/11/2016 - 1:21pm)

Programming exercises to practice using basic data structures and algorithms (with libraries):
Static array, C++ STL <vector>, <bitset>, Direct Addressing Table
1. UVa 482 - Permutation Arrays (simple array manipulation)
2. UVa 594 - One Two Three Little Endian (manipulate bit string easily with <bitset>)
3. UVa 11340 - Newspaper (Direct Addressing Table)

C++ STL <algorithm>
1. UVa 146 - ID Codes (use next permutation)
2. UVa 10194 - Football a.k.a. Soccer (multi-fields sorting, use sort)
3. UVa 10258 - Contest Scoreboard (multi-fields sorting, use sort)

Sorting-related problems
1. UVa 299 - Train Swapping (inversion index3 problem solvable with bubble sort)
2. UVa 612 - DNA Sorting (inversion index + stable sort)
3. UVa 10810 - Ultra Quicksort (inversion index - requires O(n log n) merge sort)
4. UVa 11462 - Age Sort (counting sort problem, see [4])
5. UVa 11495 - Bubbles and Buckets (inversion index - requires O(n log n) merge sort)

C++ STL <stack>
1. UVa 127 - “Accordian” Patience (shuffling <stack>)
2. UVa 514 - Rails (use <stack> to simulate the process)
3. UVa 673 - Parentheses Balance (classical problem)
4. UVa 727 - Equation (Infix to Postfix conversion)

C++ STL <queue>
1. UVa 336 - A Node Too Far (<queue> used inside BFS, Section 4.3)
2. UVa 10901 - Ferry Loading III (simulation with <queue>)
3. UVa 11034 - Ferry Loading IV (simulation with <queue>)

C++ STL <map>/<set>
1. UVa 10226 - Hardwood Species (use <map>)
2. UVa 11239 - Open Source (use <map> and <set> to check previous strings efficiently)
3. UVa 11308 - Bankrupt Baker (use <map> and <set> to help managing the data)
4. UVa 11136 - Hoax or what (use multiset in <set>)

C++ STL priority queue in <queue>
1. UVa 908 - Re-connecting Computer Sites (priority queue in Kruskal’s, Section 4.4)
2. UVa 11492 - Babel (priority queue in Dijkstra’s, Section 4.5)
3. LA 3135 - Argus (Beijing04)

Find a website about Ultra quicksort:

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1751


Nov. 24, 2016
C# book reading:


Thursday, September 1, 2016

A drill - Leetcode solution code study

Sept. 1, 2016

 Code reading first, coding writing follows. So Julia designs a drill for her to work on Leetcode algorithm daily. Just use Visual studio to go over the best code in C++ for Leetcode solution, written by a computer science Ph.D.. Find the best code (so many solutions, this one definitely is top 1 in thousands), use the code to train herself in the thinking.

 Give it a try, and see if it works out or not.

Inside github, search HackerRank, find this: (MSFT, top performer, ACM/ICPC coaches (2010 - 2012), with time spent for each algorithm)

https://github.com/jianminchen/LeetCode-17

Julia spends hours, days to work on a solution, a best performer is there to play it with less than 20 minutes.

The practice is to find things to improve, one algorithm a time. Or find things to learn, write down one by one.

Review algorithms:
1. LC98    validate binary search tree - Sept. 12, 2016
2. LC61    rotate list
3. LC200  number of islands



Wednesday, August 31, 2016

CSS - responsive background image

August 31, 2016

Spent over 3+ hours to work on the research on CSS - responsive background image. Take time to learn CSS and enjoy the workout.

Learn to design a nice menu page with header and footer, with responsive background image, it is a fun journey. How to make it pragmatic solution? Julia has her own journey recently.

Step 1:
Study the idea to design CSS -

https://www.smashingmagazine.com/2013/07/simple-responsive-images-with-css-background-images/ 

use a span element, and set padding top to aspect ratio of image -

Step 2: box model issues - footer is cut off, and background image is cut off on mobile devices.

1. Read stackoverflow article to address the issues -

http://stackoverflow.com/questions/8916148/ipad-iphone-full-page-background-image-shows-cut-off-screen-shot-link-includ

https://dev.opera.com/articles/an-introduction-to-meta-viewport-and-viewport/

2. study the blogs:

How div container behaves - box model -

http://stackoverflow.com/questions/9061520/auto-height-on-parent-container-with-absolute-fixed-children

problem:  here is the website:
http://jsfiddle.net/dPCky/

Here is the solution blog:
http://jsfiddle.net/blowsie/dPCky/1/

http://www.gsmarena.com/lg_nexus_5-5705.php

The lesson Julia learned is that body is the container - root of DOM tree. The height of body should be bigger than inside elments' height. Otherwise, footer is missing since it is out of box of DOM element - body.

Editorial Notes:
Learn how to search github more often:
1. CSS reading blog:
https://github.com/YuanXiaosong/Front-End-Interview

A small research on HackerRank - seek excellence

August 30, 2016

  Go over HackerRank world code sprint lead board, from ranking 230 to 430, go over one by one, and see how Julia can make it in short future. To be one of them, what is missing, what should learn from those people.

  From different backgrounds, computer professors, Google employees, Microsoft employees, and a lot of others, university students. But, most of them attended more than 4 contests, and showed strong interest in things:

  1. Some of them take Coursera courses - More than 10 of courses
  2. Some of them document their HackerRank contests on Linkedin profile.
  3. Some of them are excellent coding, one of them finishes Leetcode over 200 questions.
     Julia just forked solution in the next minute, will study the code.
  4. Some of them are from Intel, Intuit, Cisco, etc.
      Read code, study styles, that is Julia's favorite thing to do.

  Julia has to take into consideration, work on difficult level algorithm on HackerRank. She prefers to stay in easy, medium level up to August 31, 2016.

Blogs to read:

1. practice, drills, strategies - a computer science course to help
https://cs.illinois.edu/news/illinois-team-advances-icpc-world-finals
http://goo.gl/ZdJ8C0

2. https://algo.is/
competitive programming course

https://sites.google.com/site/stevenhalim/

Free download - version 1
http://www.comp.nus.edu.sg/~stevenha/myteaching/competitive_programming/cp1.pdf

http://linc.nus.edu.sg/search~S16?/aVerdu%2C+Elena./averdu+elena/-3%2C-1%2C0%2CB/frameset&FF=averdu+elena&1%2C1%2C

Julia is looking for a book talking about suffix array etc. advanced data structure. She found on today.

2B:
http://www.stanford.edu/~liszt90/

Interview:
https://www.youtube.com/watch?v=tZRWUesgqFc&feature=youtu.be

2C: questions and answers about practicing:
https://www.quora.com/profile/Bohdan-Pryshchenko

2. Top 50 - blogs about programming competition:
http://sd-invol.github.io/Archives/
http://sd-invol.github.io/
http://sd-invol.github.io/2015/02/14/Palindromic-tree/

Talk about algorithms - in contest - SRM641 - ?
http://sd-invol.github.io/2015/01/10/Topcoder-SRM-641-650/

SRM
https://github.com/jianminchen/TopCoder

3. Read the algorithm  - enjoy time to read
https://threads-iiith.quora.com/

Tutorial on Trie and example problems

4. Look into those contests the contestant chose to take part in - anything interesting?

26 gold medals - read code first
https://www.hackerrank.com/rantd

5. Read one algorithm first:  Excellent blog about algorithm - great sharing!

https://aleigorithms.wordpress.com/

https://aleigorithms.wordpress.com/2016/03/11/hfcq2016-problem-analysis/

6.  Choose one of algorithms to work on this week:
http://basicjahid.blogspot.ca/search/label/Algorithm%20Tutorials

7. MCSD programming in C#
https://www.microsoft.com/en-us/learning/exam-70-483.aspx

Monday, August 29, 2016

Beautiful 3 set - code study

August 29, 2016

Plan to work on difficult level algorithm - world code sprint #6. Plan to work on world code sprint some day, be able to solve difficult/ advanced algorithm.

https://www.hackerrank.com/contests/world-codesprint-6/challenges/beautiful-3-set

Will come back very soon to work on this algorithm.


Sunday, August 28, 2016

C# StringBuilder Class - study

August 28, 2016

Work on C# StringBuilder class APIs.

https://msdn.microsoft.com/en-us/library/system.text.stringbuilder(v=vs.110).aspx

Will work on the APIs 30 minutes a time. Try to memorize all of them, understand the design in detail: function signatures, overload, optional arguments etc.


Bonetrousle - HackerRank world code sprint #6 - Time complexity

August 28, 2016

Worked on the algorithm over 3 hours, Bonetrousle. HackerRank code sprint #6.

 Julia started to train herself to get smart on algorithm problem solving - contest level. First and big lesson is to put the time complexity analysis first - she experienced the pain and valued the lesson she learned through 3+ hours.

 Editorial notes from HackerRank:

https://www.hackerrank.com/contests/world-codesprint-6/challenges/bonetrousle/editorial

Will work on this blog later!

Come back on Sept. 1, 11:15pm.

The problem is about loops, and let us work on the example used in the editorial notes:

N = 15, K = 8, B =3, in other words, find 3 distinct numbers from set {1, 2, ..., 8}, and the sum is 15.

First idea: brute force one 
Brute force, 3 number, each one is chosen from 1-8, 3 time, then, simple combinatorics: 8 * 7 * 6, K (K-1)(K-2), , the order does not matter, so it is should C(8,3).

As we know, N < 10^18, K<=10^18, so, Julia, you like to make any points, try to avoid any brute force solution like the above.

Second idea: How low it can be? 
Find B numbers, as we know, from the example,
N = 15, K = 8, B = 3, there are more than 1 solution.

But, there is one definitely taking minimum time. That is to find maximum number in B number set first, and it takes O(1) time. Then, in decreasing order, find one by one. The total time can be  small as O(B).

Simple math, we can analyze first if N is in the range of minimum value and maximum value range first.

if B > K, not possible;

Assuming B <= K,
Minimum value = 1 + 2 +... +B,
Maximum value = K + (K-1) + (K-B+1)




C# string class - API study

August 28, 2016

Previous blog about string class study for C#, Java, JavaScript, C++:

http://juliachencoding.blogspot.ca/2016/07/c-c-javascript-java-string.html

Go over all APIs in string class - C# programming language:

https://msdn.microsoft.com/en-us/library/system.string_methods(v=vs.110).aspx

40 APIs - Go over it 30 minutes a time - start to memorize them: function signature etc.

Clone
Compare
CompareTo
Concat
Contains
Copy
CopyTo
EndsWith
Equals
Format

GetEnumerator
GetHashCode
GetType
GetTypeCode
IndexOf -        (8 overloaded version)
IndexOfAny    (3 overloaded version)
Insert
Intern
IsInterned
IsInterned

IsNormalized
IsNullOrWhiteSpace
Join (5 overload)
LastIndexOf (8 overloaded version)
Normalize
PadLeft
PadRight
Remove
Replace
Split (6 overloaded version)

StartsWith (3 version)
Substring
ToCharArray
ToLower
ToLowerInvariant
ToString
ToUpper
ToUpperInvariant
Trim
TrimEnd

TrimStart








Bonetrousle - HackerRank world code sprint #6 - code study

August 28, 2016


Study 5+ C# submission code, put some notes here as well.

1. Use Queue, using structure, excellent code to study -
C# submission to study.

 rank before 190/ 5332




Great workout using Queue, Julia came out this idea through practice, but she could not write down code. She tried to write recursive function.

2. a while loop, less than 40 lines code
C# submission

rank before 200/ 5332, score around 250/380

3. C# submission

4. C# submission

5. Great code! C# submission


rank in range of 270 - 300/ 5332 participants (score in range of 

180- 200/380)

Time to go over C# string class: 


C# string class join method



Motivation talk:


work hard! 

Julia ranks 1112 on world code sprint #6. If she can work out the algorithm - Bonetrousle, based on her current score is 100, she can score another 50, from score of 100 to 150, then, she can get into top 1100 to top 550 - 650 ranking. 

Bonetrousle - HackerRank world code sprint #6 - Practice 3

August 28, 2016


Practice 3:

https://gist.github.com/jianminchen/da8be63104ef404e82733669a3d60370

Highlights of practice:
1. Add hashset to filter out the boxes

Statistics:

Score 0 out of 50.


Bonetrousle - HackerRank world code sprint #6 - Practice 2

August 28, 2016

Problem statement:
https://www.hackerrank.com/contests/world-codesprint-6/challenges/bonetrousle


Try to make any progress on timeout issue, wrong answers issue. Add additional checking to shorten the time to do processing:

https://gist.github.com/jianminchen/ff048969b7b69948eb3dc4db59119591

Highlights of practice: 
1. line 113

Statistics:
score 0 out of 50 points.

Bonetrousle - HackerRank world code sprint #6 - Practice 1

August 28, 2016

Problem statement:
https://www.hackerrank.com/contests/world-codesprint-6/challenges/bonetrousle

Julia was naive on planning, management of time, tried to solve this algorithm, without any hesitation. She tried to score any point above 0, found the idea to write code using stack, but with additional 2+ hours to review code, stayed overnight, from 12:00am - 2:45am, a brute force solution. She did not make any (over 10 test cases: 5+ wrong answer, 4+ time out). So, she wrote down the experience to celebrate her weekend, over middle night struggling with an algorithm.

Share some statistics of world code sprint #6 workout:
Current Rank: 1112 - score 100/ 380 (score first 4 algorithms full score)

First practice:

Use stack, brute force, each box has two choice, join or skip. She tried to implement the brute force solution first, and then, she recalled the previous work on algorithm Leetcode: phone number:

https://gist.github.com/jianminchen/872bf70039fa8c61ff208b34a591c8ec

Only pass the test cases provided in the problem description.

https://gist.github.com/jianminchen/e3fc7d23a62274b207ddc41a06030cd4

Statistics:
score 0 out of 50 points.

Brute facts:
A brute force solution does not score any points - even pass the basic test case - test case 1.

Actionable Item:

Write a blog about this algorithm, document the importance of time complexity analysis; how to plan to spend time to work on a solution.

http://juliachencoding.blogspot.ca/2016/08/bonetrousle-hackerrank-world-code_75.html

Abbreviation - HackerRank world code sprint #6

August 26, 2016

Problem statement:
https://www.hackerrank.com/contests/world-codesprint-6/challenges/abbr


C# practice:
https://gist.github.com/jianminchen/12e7c74b57c5780a069b0e9df66f77c3

Study editorial notes about the algorithm, using dynamic programming, a DP solution.

Study other submissions through HackerRank.

Saturday, August 27, 2016

Blog writing - aiming for good writing talent

August 27, 2016

  It is a nice journey to write a lot of blogs in last 12 months. Julia learns to handle a lot of stress, spend a lot of time to proofread, feel headache about the content, organization of ideas etc. Sometimes, she notice that she writes something she does not know, she does not have best solution, since she is still developing, in the cooking process. Or she just pushes herself, just do it. It may be an interesting topic, start first, come back to work on.

  What is about good writing talent? It is not just English writing, also about communication skills, inspiration to share, good language skills.
  A true short story about her personal experience:

  She went through 3 IELTS test in 2008 from June to August in order to score 2 of 7/ 9 on English (reading, writing, speaking, listening) - apply Canadian immigration. She did 3 tests in 3 months, because Fort Lauderdale test center only gives one test a month. She even filed an appeal against the scoring result after 2nd test, costed her $160 dollars, same amount as the test fee. She practiced old tests in the time range of 3 month - 3 hours for one test, she did again and again.

More detail about IELTS:
http://www.ielts-blog.com/ielts-results-competition-winners-2008/
  End of the true short story.

  And then, in 2015, Julia learned that in order to
get best result of
build up some writing talent continuously in long term,
grow up from a junior software developer to talent programmer,
she has to write down her coding practice everyday, speak out her unique experience, ideas/ practice log, show her progression, weakness, highlights, one step a time, one practice a time. There is no way to avoid hard work, embrace it. She learns from her favorite tennis sports. 

  So, she try to push herself to work on writing. Being a good software programmer, writing code is much more challenging. 

Here are some ideas:

  From blog - how to improve your blog writing skills 

 1. Make writing a habit
As the old saying goes: Practice Makes Perfect.
 2. Get back to basics
 3. Proofread your articles
 4. Remove the filler - tighten your article and make it easier to read
 5. Evaluate your writing
 6. Be an avid reader
 passionate writer should be a passionate reader.
 7. Establish good writing habits

Google search keyword:
blog writing help English writing

Second blog - Improve writing skills


Notes:

1. Brush up on the basics

2. Write like it's your job
Keep practising, writing is no exception.
diminish your fear of the blank page (or blinking cursor)
develop a unique style
even if nobody reads it, keep writing.

3. Read like it's Your Job
reading on a regular basis
pay attention to sentence structure, word choice, and how the material flows.

4. Find a writing partner
a solitary activity - writing?
cast an eye over your work?
spot mistakes that you may overlooked

5. Join a workshop or take a night class - not applicable right now

6. Dissect writing that you admire

7. Imitate writers you admire
use humour to spice up dry topics?
use pop culture references to make their work entertaining and useful?

8. Remember that outlines are your friend - outline?
solid outline plan? When, who, what, where, why, how? 7 W

9. Edit your work ruthlessly

be your own harshest critic?
editing is a tough skill to learn for beginner?
writing or rewriting?
the cold, hard eye of an editor will serve you well?
discipline to eliminate extraneous words?
resist the temptation to wax lyrically and get to the point?

10. Accept that first draft are almost always crap

write down on paper first, clean up later. Iterative process. Do not beat yourself up.

11. Find a good patient editor

12. Eliminate unnecessary words

13. Take a stroll down memory lane

14. Don't be afraid to say what you think

15. Do your research

16. Don't take weeks to finish a post

Actionable items:

Try 3 ideas first:

14. Don't be afraid to say what you think
testimony:
Share personal IELTS test experience in 2008 


Html, CSS style guideline study

August 27, 2016

 Always work on code guidelines first, then write more code everyday.

 Plan to spend 2+ hours to study html, CSS code guide.

http://codeguide.bootcss.com/

https://google.github.io/styleguide/htmlcssguide.xml



Java Design Pattern - code study

August 27, 2016

 Plan to spend 3+ hours to go over some Java Design Pattern.

https://github.com/jianminchen/java-design-patterns


Programming Principles - study

August 27, 2016

 Through leetcode practice Algorithm 125 in August 2015, Julia noticed that she still stumbled badly on easy question. Because ..., wild guess?:-) she does not have good understanding of programming principles.

 She wrote blogs about the practice of Leetcode 125, 11 practice, through continuously hard word through 3 days, she finally came into realization of best solution - extract one more function  called removed noise. She read the code written in C++ in her github forked solution more than 6 months ago. She could not find the best solution through google/ bing, and she studied stackoverflow related articles more than 2 hours, but she just did not come out the idea.

  Apply Separation of concerns principle? optimal solution to Leetcode 125. 

 The above is enough for her to dedicate herself to read more about programming principles.

Programming Principles

https://github.com/jianminchen/programming-principles

 Plan to work on reading 3+ hours, write down some notes here.


Thursday, August 25, 2016

CSS - Responsive background image

August 31, 2016

 Spent over 10+ hours to work on responsive background image issues. So, Julia likes to spend time to serve herself better using CSS.

Google keyword search:

 css responsive background image


Code study: Leetcode blogs

August 25, 2016

 Compile a list of Leetcode blogs to read, 10 minutes a time, look for excellence through blogs:

1. http://bangbingsyb.blogspot.ca/   (Microsoft, C++)
2. http://fisherlei.blogspot.ca/          (facebook, blogs, C++)

C++ solutions in github:
1. https://github.com/jianminchen/leetcode-1 (C++, ex-amazoner)
2. https://github.com/liaoxl/leetcode/tree/master/code  (Neteaze, C++, China)
3. https://github.com/jianminchen/Leetcode-13  (UBC, C++)
4. https://github.com/jianminchen/myleetcode (China, Microsoft, C++)
5. https://github.com/jianminchen/LeetCode-IIII  (C++, HackerRank Silver medal)
6. Inside github, search HackerRank, find this: (MSFT, top performer, with time spent for each algorithm)
https://github.com/jianminchen/LeetCode-17

Java solutions in github:
1.  https://github.com/jianminchen/LeetCode-Java-Solutions
2.  https://github.com/jianminchen/LeetCode-Java-Solutions  (Java, computer PH.D.)
3.  https://github.com/jianminchen/LeetCode-Sol-Res  (Nine chapter etc., Java)
4.  https://github.com/jianminchen/leetcode-3   (Java solution, Googler)

C# solution:
1. https://github.com/jianminchen/LeetSharp
2. https://github.com/jianminchen/Qilu-leetcode
2. https://github.com/jianminchen/LeetCodeInCSharp
Motivation talk: 
1. Sometime, google, bing search do not provide best source code, so, it is time to look up github forked solutions. 

Friendly remind: 
Julia, you should use github's search - use keyword: Leetcode to find solutions - 

2. Look for optimal solution, do not miss the best solution in practice of Leetcode algorithm. Do not rush, try to go through all kinds of practices, search for great ideas out there. Get the best idea to practice. One algorithm a time. 

3. Follow more people through github, easy to fork leetcode solutions. Sometimes, it is hard to tell best code, just get some code running first, write first C# practice, and then, ideas will come, what to search, issues etc.

4. Evaluate practices (junior/middle/senior level practice), and then compare to 5-10 practices. (0-3 junior practice, 4-7 middle level, 1-2 optimal solution, senior level practice)

4. Look up stackoverflow to get more ideas, specially from high reputation/ high voted opinions, terms to know when practicing Leetcode algorithms. Try to expand the things to work on through the practice, one algorithm can bring good study about coding style. See the blog:
http://juliachencoding.blogspot.ca/2016/08/leetcode-125-valid-palindrome-summary.html


5. When practicing Leetcode questions, try to work on more through the practice. There is an idea that if you work on thoroughly on one problem a time, you may be able to solve unseen problems as well.

Actionable Items:

1. Study programming principles:
Programming principles
https://github.com/jianminchen/programming-principles









Leetcode 348: Design Tic-Tac-Toe

August 25, 2016
Problem statement:

Design a Tic-tac-toe game that is played between two players on a n x n grid.
You may assume the following rules:
  1. A move is guaranteed to be valid and is placed on an empty block.
  2. Once a winning condition is reached, no more moves is allowed.
  3. A player who succeeds in placing n of their marks in a horizontal, vertical, or diagonal row wins the game.
Will work on the algorithm very soon. 

System Design: Design a URL shortening service

August 25, 2016

Problem statement:

Design a URL shortening service

  • What do you think the requirements are?
  • What is your high level design?
  • You might be asked to implement interesting portions
  • How do you test it? 
Will work on the design very soon.

1. Read the website first:  5 - 10 minutes

stackoverflow.com - how do short urls services work

2. Hired in tech website - the system design process

Step 1: Constraints and use cases
Step 2: Abstract Design

Start from step 1:

System constraints (Do you clarify?)
Use cases ( the list to satisfy?)
Scope system (agree?)

Gather requirements -> design a solution to cover them well.

Use cases:
1. Shortening:
2. Redirection:
3. Custom Url
4. Analytics
5. Automatic link expiration
6. Manual link removal
7. UI or API

And then, discuss and exchange ideas with requirements:
For example, add one more use case 4, and move 4 - 7 out of scope, not for now.

1. Shortening:
2. Redirection:
3. Custom Url
4. High availability of the system

Out of scope: 
4. Analytics
5. Automatic link expiration
6. Manual link removal
7. UI or API

Constraints: 

Top 10 shorten URL services:

Math to figure out, for example: 

15 billion new tweets in twitter, 

All shortened URLs per month: 1.5BN - 10 percent
Sites below the top 3: shorten 300M per month

1. New urls per month: 100MLN - 100 millions request to shortening
2. 
3. 
4. 
20% urls generate 80% traffic -> 1BN request per month -> 10% shortening, 90% redirection.

4. Requests per second: 400+ requests per second (40: shortens, 360: redirects)
5. 6BN urls in 5 years -
6. 500 bytes per URL (100 to 1000 characters per URL)
7. 6 bytes per hash
8. 3TBs for all urls, 36GB for all hashes (over 5 years, not 10 years)
9. how much data goes through each second?
    New data written per second: 40 *(500 + 6): 20K
10. Data read per second: 360 *506 bytes: 180K

scope the problem beautifully - it takes a while, but 15 minutes in the video, with practice, it takes 5 minutes to clear up everything.

Follow up 


Sept. 3, 2016

Spend 2 hours to watch the video, hiredintech.com, the video link is here. System design - scalability, the link is here.


Take some notes here.




Linked List Queue

Problem:
Implement a Queue using a linked list.

Will come back soon.


Array Queue

August 25, 2016

Problem statement:
Implement a Queue using a circular array.

Read circular array:
http://www.mathcs.emory.edu/~cheung/Courses/171/Syllabus/8-List/array-queue2.html

Will come back very soon!


Monday, August 22, 2016

Leetcode 125: Valid Palindrome (III)

August 22, 2016

Continue to review solutions on Leetcode 125. 

1. study code:

extract one more function - removeNoise - practice #10 

C# practice 


Great idea to extract one more function, SRP - single responsibility principle 
- make the code much more easy to follow, test, static analysis

Two tasks - put into one function - first ask if the function can be broken into two, what is the checkpoints?

Both are with time complexity O(N), N is the string length; 
Two tasks can be separated easily, task 1 can be done first. 

 1. remove noise
 2. compare chars 

Easily, combine the above 1 and 2 cases, there are 4 cases in the function to handle. 


2. use continue keyword -  practice #11

study code: 

C# practice: 

Sunday, August 21, 2016

Leetcode 125 - Valid Palindrome - Code styles study

August 21, 2016

Here is the blog with 5+ practice.

8th practice code

Summary of study: 
Go over blogs, read 2+ hours, and then, write 9th practice; Be able to find issues in 8th practice. 

9th practice

10th practice

- best solution - extract one more function called removeNoise

11th practice

Julia likes to study code style blogs to help better performance on Leetcode 125:

1. if-else discussion on stackexchange.com

2. fail fast

3. a branched arrow head antipattern

4. https://blog.codinghorror.com/flattening-arrow-code/

5. Refactoring: Book: "improving the Design of Existing Code" - if-else structure sections

6. http://programmers.stackexchange.com/questions/167607/how-can-i-reformat-my-condition-to-make-it-better?noredirect=1&lq=1

7. http://stackoverflow.com/questions/1364946/what-is-the-highest-cyclomatic-complexity-of-any-function-you-maintain-and-how

8. A lot of discussions:
http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement

9. Guard clauses

10. Try this tool - static analysis tool

Study notes:
Get some keywords for google search, or ideas to help review of function:

1. inconsistent levels of abstraction
2. prevent inclusion in if
3. two calls to one function violate DRY principle

Execution paths concern: 
1. multiple returns - avoid it
2. only return from a function in one spot  - (Good ? Bad?)
     Julia made a terrible mistake in 2 sum algorithm, about the return issue - took more than 20 minutes to find out return issue.
3. multiple return paths
4. early returns help to avoid the arrowhead anti pattern.

Readable code

1. use a flag variable to avoid giant expression/ gross if statement.
2. orthogonal ?
3. early returns help to avoid the arrowhead anti pattern.
4. flattening arrow code
5. cyclomatic complexity value - execution paths
6. reduce a module's cyclomatic complexity make code easy to test

Avoid If statement
1. replace conditions with guard clauses.
2. decompose conditional blocks into separate functions
3. convert negative checks into positive checks
4. always opportunistically return as soon as possible from the function.
5. the goal to make code more flat, scroll vertically not horizontally  

Book "code complete" about cc - cyclomatic complexity value:
If the score is:
  • 0-5 - the routine is probably fine
  • 6-10 - start to think about ways to simplify the routine
  • 10+ - break part of the routine into a second routine and call it from the first routine
Might be a good idea to write unit tests as you break up the original routine.

A quick comparison image:
Leetcode 125 8th practice vs 9th practice on the change - if conditions inside a while loop:


Continue to review solutions on Leetcode 125. (August 22, 2016)

1. study code: 
C++ code - valid palindrome

extract one more function - removeNoise - practice #10 

Julia wrote a C# version

Great idea to extract one more function, SRP - single responsibility principle 
- make the code much more easy to follow, test, static analysis

Two tasks - put into one function - think if the function is designed for more than 1 task. 
Both are with time complexity O(N), N is the string length; 
Two tasks can be separated easily, task 1 can be done first. 

 1. remove noise
 2. compare chars 

Easily, combine the above 1 and 2 cases, there are 4 cases in the function to handle. 

2. use continue keyword -  practice #11

study code: 
using continue - C++ valid palindrome

Julia wrote a C# solution




Saturday, August 20, 2016

Confidence and determination coaching - Nishikori Kei and his coach

August 20, 2016

Review Nishikori and his coach's video.
https://www.youtube.com/watch?v=LfoYUQIsrg4&feature=youtu.be

Nishikori: 
Not tall, ...

Coach's talk:
You are a little bit smaller, but ability to cover more court, quicker. Use speed to be many many advantages.

Early in the career, have a book, write down who to play with, write down strength/ weakness, why I lose, be prepared, be smart; It is not hitting a good forehand or backhand; Tennis, at the end of day, it is to find the way to win.

People interviewed you before the final match, you told that you admired Roger Federal.

First of mistake, not ready in mental to play final. Your opponent should not be your admire.  A great achievement to play final; admire Roger Federal, should be off the court.

Mentality and determination:
But, you are in my way. I do not care about what you have accomplished, prior achievements, no matter whoever is, find the way to beat the guy.

More videos to watch:
1. https://www.youtube.com/watch?v=s36vSwgn9A0
2. https://www.youtube.com/watch?v=fQBTvSqpRCI
3. https://www.youtube.com/watch?v=zMokexfhTIY
4. https://www.youtube.com/watch?v=mBluyNvnSlc
IMG - how to build a champion?

Most favorite coaching - on-court coaching:
1. https://www.youtube.com/watch?v=zfZGX_f3BOs

Coach - great motivator/ ...
2. https://www.youtube.com/watch?v=g-wKFSkHl3Q
3. https://www.youtube.com/watch?v=2REF6qaUSG4#t=93.0502
4. https://www.youtube.com/watch?v=iK6MMYnNr-M

5. Novak Djokovic
https://www.youtube.com/watch?v=9rHV9nDGHXM