Thursday, December 15, 2016

Radix Sort - Code Review

Dec. 15, 2016

Introduction


Review the radix sort - in C#, a blog written in May, 2016.

Since last workout Julia took 4 hours to understand the algorithm, Julia likes to do warmup in short future; design the algorithm better for easy to understand, and then, post the algorithm on stackexchange.com code review.

Will come back very soon.

Come back on Dec. 16:

Julia came cross one question related to radix sort, and she decided to make learning more meaningful, planned to answer the question.

Code review - first teacher badge


Julia made it happen to choose a most popular post view 10,000 views, she got one up-vote by answering the question. 

After she got first teacher badge on stackexchange.com, and she tries to get second approval for answering the "radix sort" one in JavaScript.  

Julia used to be a teaching assistant in Florida Atlantic University when she worked on computer science Ph.D. program. 

Radix sort in Javascript


To answer the current question, Julia took close to 2 hours to work on the code. She learned a few things. 

Time spent: 3+ hours

Actionable Items:


No response on code review, so Julia will continue to study the radix sort, and continue to improve the answer until she gets one up-vote. 


Read  more radix sort on code review. 

Favorite ones:
1. Radix sort question in C

2. Radix sort

3. Radix sort in C#

4. Read more about this talent - My JavaScript teacher

Favorite answer

5. Julia found another JavaScript teacher







Wednesday, December 14, 2016

Leetcode 322: Coin Change - Find minimum number of coins

Dec. 14, 2016

Julia likes to choose most popular post in code review on stackexchange.com, study the post, write down some notes, and also practice to write her own answer. Try to get into the community as active learner, teacher, and hardworking helper.

Her first post to answer question - no response so far, Dec. 14, 2016 8:19pm
http://codereview.stackexchange.com/a/149598/123986

She likes to write a second one:

Problem: 14 votes, 6 answers, 11K views
http://codereview.stackexchange.com/questions/47397/find-minimum-number-of-coins?rq=1

Same problem:
Leetcode:  Coin Change

http://www.cnblogs.com/grandyang/p/5138186.html

http://blog.csdn.net/liyuefeilong/article/details/50687271

Best solution - using DP, bottom up - Temple Ph.D.
https://github.com/jianminchen/LeetCode-Java-Solutions/blob/master/322.coin-change.java

This may be the best solution - written by MSFT employee, ICPC coach - PH.D.
Time complexity:
Space complexity:
https://github.com/jianminchen/LeetCode-17/blob/master/322_v1.cpp

Post the answer on the code review here. Julia, work on reputation target: 50, right now, 45. Once Julia has 50 reputation, she can leave a comment in any post.

Or click the link:
http://codereview.stackexchange.com/a/150130/123986




Cheat sheet - 10+ advice to review

Dec. 14, 2016

My favorite time to do workout, write down notes from cheat sheet for various positions from well-respected companies.

Share her own experience first before the study.

Julia's personal experience:
1. Always set a small target, work on one small target a time.
2. Focus on one thing a time.
3. Do not get emotional - competition is like sports, the more you play sports, you will get stronger.
4. Work on a long term goal, more controllable things - "personal physical health is most important."
5. Try a new idea everyday.
6. Really enjoy sports activities
7. Be a hackerrank player, build a habit to attend contests
8. Explore new things - 2016 things Julia enjoyed:
      coding blog,
      facebook codelab,
      pramp,
      hackerrank,
      meetup,
      pluralsight.com,
      Udacity,
      Code school,  
      stackoverflow,
      stackexchange.com

9.  Control weight, have best nutrition daily food; keep learning more about healthy lifestyle
10. Learn to relax, watch some movies, write some blog about sports, attend tennis tournaments etc.

----

Amazon
My favorite advice:
Do not be vague - Use some number/ data to make it a case
Don't be stubborn - willing to adapt, open-minded; take hints and go for it.

https://www.bloomberg.com/graphics/2015-cheatsheets/amazon.html

Facebook:
My favorite advice:

How to Ace it
Do engage with your interviewer. "We're very team-oriented. And so the people that do well come in with that attitude, thinking not that we're quizzing them but they're part of the team, and interact with us in a way that they would as if they had the job."

Do know the products. "People that come in with a perspective on our products and ideas on how we can make them better - that's great."

Don't let yourself get stuck - It's OK to ask the interviewer to get their thoughts and ... make it conversational, to get hints.
https://www.bloomberg.com/graphics/2015-cheatsheets/facebook.html

StreetEasy
https://www.bloomberg.com/graphics/2015-cheatsheets/streeteasy.html


Microsoft
https://www.bloomberg.com/graphics/2015-cheatsheets/microsoft.html

The score:
We hire on talent and potential, so they don't need strong sales experience, necessarily.

How to Ace it
Do have a deep a passion for technology.
Do be curious and ask questions.
Do speak with confidence and intelligence.
Don't be overly format. "Don't act like somebody you're not - it's really a come-as-you-are environment."
Don't psych yourself out.

BainCapital
https://www.bloomberg.com/graphics/2015-cheatsheets/bain-capital-ventures.html

Read again, write short notes.

Boeing
https://www.bloomberg.com/graphics/2015-cheatsheets/boeing.html

Do be you.
Do ask for clarification. "Ask to have the question repeated if you don't understand it. We'd rather have you understand the question than answer the wrong one."
Do pose your own questions "at the end of the interviews to make sure you understand what the job is and if you're a good fit for it."
Do some homework. Boeing wants to know "if you're going to have the right thought process, you're going to develop into a good leader." Do not overprepare either.
Don't drag the past along with you. "Don't complain about your prior job or boss. That's always a bad one. Don't be negative. Don't reveal any confidential information about your prior employer or any prior experience you'v had."
Don't make the interviewers dig. "Don't rely on the panel to pull information from you. Make sure that you answer the question, you answer it fully." Don't bore the interviewers, but take your time. "Expand upon the points that highlight your skill set."

Uber
https://www.bloomberg.com/graphics/2015-cheatsheets/uber.html

First round: the standout skills and weakness

The Score:
Can the candidate really help identify a problem and ... drive toward clarity?

Don't leap to solution without grasping the issue. "The best interviews actually spend more time defining the problem."

Amtrak
https://www.bloomberg.com/graphics/2015-cheatsheets/amtrak.html

Don't pose generic questions on Amtrak. The questions that you can find out on the internet in five seconds, do not waste it by asking questions.

Salesforce
https://www.bloomberg.com/graphics/2015-cheatsheets/salesforce.html

Don't brag about being a star. "When candidates tell me about how they took over a project, that doesn't show collaboration. Tell me about a disagreement you had, how you compromised with your teammates and figured it out."

Don't freak out if you don't have all the answers.

Novo Nordisk
https://www.bloomberg.com/graphics/2015-cheatsheets/novo-nordisk.html

Don't be fake.
Don't ignore the rest of the world.
Don't neglect your elevator pitch. "If the person can't represent themselves well and provide me with a coherent picture of their background, I have concerns about their communication skills, especially in situations where there may be controversy."

Boston Consulting Group
https://www.bloomberg.com/graphics/2015-cheatsheets/boston-consulting-group.html

Do look at all the angles of a case. "We're impressed by someone who is creative and hypothesis-driven, not necessarily the person who gets the right answer the fastest."

Don't over-prepare. "Planning everything you're going to say and do in the case study portion of the interview makes for a stale presentation and misses the mark. The point of the case is to see how you approach problems in real time."

Don't fumble your elevator pitch. "Know your personal stories inside and out, because you'll only have time to give the interviewer one or two anecdotes to take away from the interview."

Walmart
https://www.bloomberg.com/graphics/2015-cheatsheets/walmart.html

Mobile web developer

Do live and breathe coding. "We want to see you submit your own apps to the app store, speak at conferences or write a blog, and compete in hackathons."

Don't expect buzzwords alone to be impressive.
Don't be a hero. "Be able to articulate your specific contributions instead of doing everything yourself."
Don't arrive wearing a suit. "It'll seem like you don't fit in here."


Pinterest
https://www.bloomberg.com/graphics/2015-cheatsheets/pinterest.html

Don't panic if a problem stumps you. "We're really trying to assess your thought process, so if you get stuck or make a mistake, don't stress out - nobody is perfect."

Don't stop thinking when the interviewer stops talking. "We'll leave time for candidates to ask questions, and sometimes people don't prepare for that, so make sure you have a couple of questions lined up."

Third Round:
Culture interview:  "startup" mentality

HERSHEY
https://www.bloomberg.com/graphics/2015-cheatsheets/hershey.html

Data scientist

Do know how to mine social media for information.
Do speak authoritatively.
Don't tiptoe around bad news in the case study.
Don't get too stuck in your own area.
Don't second-guess yourself. "You have to have confidence in your ability to make connections, because executives are going to challenging your recommendations. You'll be expected to back them up."

General Electric
https://www.bloomberg.com/graphics/2015-cheatsheets/general-electric.html

Experience Designer

How to Ace it
Do take a Myer-Briggs Type indicator personality test. The best user experience professionals tend to be intuitive types, according to the test. "You have to be able to observe the needs, emotional states, and goals of the people you're designing for."

Do practice your delivery.
Don't act like you know everything.
Don't take credit for things you didn't do.
Don't go it alone. "it's always a bonus if the candidate decides to do the case study with somebody. It shows a willingness to be open with others."

Adidas
https://www.bloomberg.com/graphics/2015-cheatsheets/adidas.html

senior design director

"three C's" - Adidas values: creativity, confidence, and collaboration

Do be tuned in to popular culture.
Do flaunt your underground experience.
Don't try to be someone you're not.
Don't be afraid to think abstractly.

Etsy
https://www.bloomberg.com/graphics/2015-cheatsheets/etsy.html

Engineering Manager
Lead a small team of engineers who will improve Etsy's browsing feature and make the website intuitive for sellers who aren't web experts.

"The interview isn't grading you on your improv skills, but whether you steer difficult conversations forward without falling for distraction."

Do bring your war stories.
Do explain how you tackled a complex project.
Don't understate your self-improvement goals. "Do you read Peter Drucker, Bob Sutton, or the RAND blog?" Not that we have a prescription philosophy, but we do think of leadership as a craft.
Don't stress if you're not a 10X coder. "Managers should understand the architecture of code and be able to help someone who is more junior, but the role does not involve coding on a day-to-day basis."
Don't be full of yourself. Like to see a bit of humility.

Yelp
https://www.bloomberg.com/graphics/2015-cheatsheets/yelp.html

Search and data mining engineer

Do research the challenges of aggregating stream-of-consciousness narratives into readable data.
Do talk about your side gig.
Don't pretend you know everything. "We love learning and have internal hackathons three times a year to encourage developers to collaborate with others and try something new."

LYA
https://www.bloomberg.com/graphics/2015-cheatsheets/lyft.html

software engineer

The score:
communication skills - how well they can describe their thought processes

How to Ace it
Don't pretend you like everything about Lyft.
Do be pumped about Lyft's stated values.
Do keep your cool through several rounds of coding tests.
"Can this person think on their feet and come up with solutions ... and can they code up these solutions neatly and efficiently?"
Do keep a lid on your loner tendencies and show that you can work in a team. "You'll be working in a fast-paced, open, collaborative environment."

January 5, 2016

Review notes, write down most favorite ones:

1. Don't be overly format. "Don't act like somebody you're not - it's really a come-as-you-are environment."
2. Don't second-guess yourself. "You have to have confidence in your ability to make connections, because executives are going to challenging your recommendations. You'll be expected to back them up."
3. Don't act like you know everything.
4. Don't stress if you're not a 10X coder.
5. "The interview isn't grading you on your improv skills, but whether you steer difficult conversations forward without falling for distraction."
6. Don't be a hero. "Be able to articulate your specific contributions instead of doing everything yourself."
7. Don't over-prepare. "Planning everything you're going to say and do in the case study portion of the interview makes for a stale presentation and misses the mark. The point of the case is to see how you approach problems in real time."
8. Don't panic if a problem stumps you. "We're really trying to assess your thought process, so if you get stuck or make a mistake, don't stress out - nobody is perfect."

HackerRank - Year-End warmup practice

Dec. 14, 2016

Plan to choose 10 algorithms worked in 2016, and find ways to do workout.

Focus on basics BFS, DFS, tree, sorting, time complexity, space complexity.

Will come back very soon.

Blog reading:

1. http://codereview.stackexchange.com/questions/47397/find-minimum-number-of-coins?rq=1

2. http://codereview.stackexchange.com/questions/147122/stacklistt-implementation

Segment Tree - kindergarten adventures algorithm - Make my mark

Dec. 14, 2016


Problem statement:
https://www.hackerrank.com/contests/university-codesprint/challenges/kindergarten-adventures

Introduction:
Kindergarten adventure algorithm is the algorithm on HackerRank university codespring contest in November, 2016, and it is medium level difficulty. Julia spent over one hour to think about the algorithm in the contest, but she did not come out the idea using binary indexed tree or segment tree to solve it. After the contest, she likes to master the algorithm.

The Previous two blogs about the algorithm and solutions:

HackerRank - university codesprint - kindergarten adventures (after the contest)

http://juliachencoding.blogspot.ca/2016/11/hackerrank-university-codesprint_16.html

Here is one C# solution she chose to study, here are her workout experience:
1. Put some analysis together,
2. Review code
3. Put together a new version
4. Share on stackexchange.com code review section.

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

5. Post the question on the stackexchange.com as well.

Post the question on stackexchange.com code review:
http://codereview.stackexchange.com/questions/149613/hackerrank-university-codesprint-2016-kindergarten-adventures

6. StackExchange.come code review feedback:

put on hold as off-topic by PeilonrayzforsvarirBCdotWEBVogel612t3chb0t 2 days ago

This question appears to be off-topic for this site. While what’s on- and off-topic is not always intuitive, you can learn more about it by reading the help center. The users who voted to close gave this specific reason:


8. Julia knew that she has to work on one algorithm a time, and this algorithm takes time. She started her own practice, failed 3 times:

8.1. Wrote my own version of segment tree, first try: 2.18 (maximum score 30)
only pass 4 test cases.
https://gist.github.com/jianminchen/3fc3df275c903e94b780e1612f0171f6

8.2. Second practice, score 1.08 max-score: 30, pass test case 0 and 1.
https://gist.github.com/jianminchen/98f38cfb31bace070184b641c95d14b9

8.3. Third practice, score 0  max-score: 30, pass test case 0, 1
https://gist.github.com/jianminchen/1411dc08a2a2c059454f788add19bceb

It is a really good study case for understanding depth of problem solving. Timeout issue is critical, at the beginning of construction of segment tree, the time complexity should be O(n^2), not O(n), n is the people in the group, n < 100000.

Better score 0 to write your own code, comparing to copy other's code score 30. Do not underestimate your own practice, the mistakes made, time spent all counts to the good learning experience.  

8. Go back to the study code C#: 

And google and try to find some article to help.
The solution is classical, some one already did research how to store the value in segment tree most efficient way, almost O(n) to build up a segment tree.

Find the article using similar idea: 

http://codeforces.com/blog/entry/18051?

Workout: 

1. Show some graph on analysis of solution provided:

2. Get out from the first breakdown on stackexchange.com code review: 
Have some sports therapy - 30 minutes 

Watched the video of Genie Bourchard interview twice while she did some stretch in the living room, for a sports workout. 
Eugenie Bouchard Live: 
https://www.youtube.com/watch?v=w02BSPblBEs&t=320s

(Eugenia is a young player, 20 years old when she was interviewed. She talked about in the interview Nick is her great coach, when she was 12 years, she was taught how to deal with mental issues in sports - stay at moment on the court, no matter what happens )

Do not be lazy. Work hard, fail a few times and then get better. Julia, if you are in uncomfortable zone, that is the learning zone. Do not miss the learning opportunities.

Fail to post, the algorithm written is not mine. Need to come out my own solution first, and then, get code review. Tried various solutions, failed all times. Get to know the algorithm better.

And then, Julia gave her 30 minutes therapy, chose one of top tennis players to motivate herself. Work on algorithm is not easy, to be competitive, Julia has to learn what to work on. No shortcut. Hands on experience, stay at moment. When practice, make as many mistakes as you can. If you can afford the time. 




Sunday, December 11, 2016

Array Construction - Code Review

Dec. 11, 2016

Introduction

Array construction is the first advanced algorithm Julia tried to work on in the contest, she did try to work on over 10 hours, but she scored 0 (maximum score 80). Through the contest, she started to understand the algorithm and built up strong interest in problem solving.

Later, she read one of solution, and then, spent over 4 hours to understand the pruning idea to avoid timeout issue.

Later, she did very intensive research on recursive function. But, she needs to get it on stackexchange.com, share her interest and questions, and then, see if she will get any surprise. Success after team work, Julia likes to practice the belief.

Previous blogs about the algorithm:
Labels: Array Construction (Series 1 of 5)

http://juliachencoding.blogspot.ca/2016/11/hackerrank-codesprint-array.html

Workout:

Plan to post a question on stackoverflow.com code review for code review.


StackExchange.com code review - program challenge ( new school day 5)

Dec. 11, 2016

Julia loves to find the top talent on code review to score high on program-challenge. She found one today:

http://codereview.stackexchange.com/users/66571/twohundredping

Programming-Challenge    Score 38  posts 10 posts %37

She plans to read as many as possible from the talent, meanwhile, try to find most talent person on programming-challenge.

Her most favorite post from the talent:
http://codereview.stackexchange.com/questions/149096/given-n-and-m-find-all-stepping-numbers-in-range-n-to-m/149456#149456

Always program the general case before edge cases. After you have an implementation of the general case see if it handles the edge case or if not, what minimally invasive changes you can make to the general case to handle edge cases. As a last resort, handle the edge case separately.


Julia likes to do some research on programming challenge, how to find great posts?

http://codereview.stackexchange.com/tags/programming-challenge/topusers

Start to read program-challenge answers by user 9357:

http://codereview.stackexchange.com/search?q=user:9357+[programming-challenge]


Algorithm: Given n and m, find all stepping numbers in the range

Dec. 11, 2016

Introduction:
Julia start to have good time to read code review post. She started to check her post, no update; but quickly she started to look for good ones to read, and give out a few of upvotes. She earned 36 reputation, after she got more than 30 reputation, she can upvote/ downvote any post.

Here is the post she loves to read. The way she can support people's code review, is to give a upvote.

http://codereview.stackexchange.com/questions/149096/given-n-and-m-find-all-stepping-numbers-in-range-n-to-m/149456

Workout:

Julia learns a few things through the code review. Will write down here.

Her favorite code review:

1. http://codereview.stackexchange.com/a/149157/123986

2. This one is better

http://codereview.stackexchange.com/a/149456/123986

Julia really likes the code review: Advanced topic, so she write the C# version,

https://gist.github.com/jianminchen/28b656f16aa58a00687e823eb0aaf212

She likes to share the code with comment, but she needs 50 reputation in order to post a comment.
So, Julia just wrote an answer for the question.

Here is the link:
http://codereview.stackexchange.com/a/149598/123986

Actionable Items:

1. There are over hundreds programmers write good answers on stackExchange.com code review. Julia, work with them, try their ideas first using C# code, and then, try to improve, and enhance the work. Add code with some test cases, and question some variable names, and write down the ideas to make code more quick to follow.

2. Read more badges - what they are, how they are defined, come out filters to search, find most valuable posts.

    Badges - read, learn, memorize, and enjoy the searching using badges knowledge.












Saturday, December 10, 2016

Segment Tree - kindergarten adventures algorithm - code review

Dec. 10, 2016

Problem statement:

Introduction

Kindergarten adventure algorithm is the algorithm on HackerRank university codespring contest in November, 2016, and it is medium level difficulty. Julia spent over one hour to think about the algorithm in the contest, but she did not come out the idea using binary indexed tree or segment tree to solve it. Julia was very lucky to find a C# solution actually implemented using segment tree.

The Previous two blogs about the algorithm and solutions:

HackerRank - university codesprint - kindergarten adventures (after the contest)



Julia found out that her learning of binary indexed tree is missing most important part, the experience to play and learn from a simple concrete example; she read a lot about segment tree, or binary index tree, but she needs to have some time to play with an example, have some fun. The skills will come afterwards, she believes.

Here is one C# solution she chose to study, here are steps:
1. Put some analysis together,
2. Review code
3. Put together a new version
4. Share on stackexchange.com code review section.

C# code

Plan to work on the algorithm 2 hours. Dec. 10, 2016, 11:36am - 1:36pm

Put some references together for further study.

Workout


C# code - Julia tries to figure out how to build a segment tree through sample test
case:
3
1 0 0
The segment tree in an array: {0,0,2,2,1,1}

Segment Tree:

C# code

Julia's concerns about segment tree:

Questions:

1. Why does Modify function skip one and only add value on odd number?

Line 114 - line 125,

        public void Modify(int start, int count, int value)
        {
            int size = tree.Length / 2;
            int left = start + size;
            int right = start + count + size; // open border

            for (; left < right; left >>= 1, right >>= 1)
            {
                if (left  % 2  == 1) tree[left++]   += value;
                if (right % 2 == 1) tree[--right]  += value;
            }
        }

2. How does the range of start/ end to be determined on this simple test case: 1 0 0?

Line 87 - Line 93:
private static SegmentTree BuildTree(int n, int[] extraMinutes)
    {
        var tree = new SegmentTree(n);
        for (int i = 0; i < n; i++)
        {
            int curr = extraMinutes[i];
            int len  = extraMinutes.Length;

            if (curr >= len) continue;

            int start = (i + 1) % len;
            int end   = (i + extraMinutes.Length - curr) % len;

            if (start <= end)
                tree.Modify(start, end - start + 1, 1);
            else
            {
                tree.Modify(start, len - start, 1);
                tree.Modify(0,     end + 1,     1);
            }
        }

        return tree;
    }

Why start = (i+1) % len? Guessing,  i = 0, ID counts from 1 to 3, not starting from 0.
Why end  = (i + extraMinutes.Length - curr) % len;

3. Question:
Study Query API: Why skip the root node?
for loop, i > 0

Line 132 - Line 139:
public int Query(int index)
        {
            int res = 0;
            int i = index + tree.Length / 2;
            for (; i > 0; i >>= 1)
                res += tree[i];
            return res;
        }


Actionable Items


Julia, only way, better way to learn segment tree, binary index tree, is to work on an algorithm, and then, ask good questions to yourself, and then, post the question on the stackexchange.com as well.

Post the question on stackexchange.com code review:

Code review is here. The code review was closed.

It is not acceptable to ask help to understand other people's code. That is the rule from stackexchange.com. Do not be lazy. Work hard, fail a few times and then get better. Julia, if you are in uncomfortable zone, that is the learning zone. Do not miss the learning opportunities.

Fail to post, the algorithm written is not mine. Need to come out my own solution first, and then, get code review. Tried various solutions, failed all times. Get to know the algorithm better.

1. Wrote my own version of segment tree, first try: 2.18 (maximum score 30)
only pass 4 test cases.

C# practice 1

2. Second practice, score 1.08 max-score: 30, pass test case 0 and 1.

C# practice 2

3. Third practice, score 0  max-score: 30, pass test case 0, 1

C# practice 3

It is a really good study case for understanding depth of problem solving. Timeout issue is critical, at the beginning of construction of segment tree, the time complexity should be O(n^2), not O(n), n is the people in the group, n < 100000.

Better score 0 to write your own code, comparing to copy other's code score 30. But do not understand the design and algorithm. 

References


1. Read the lecture note to help:

Lecture note to study.

2. Read the article about segment tree.



A short research - "Jane the Virgin" - Netflix TV series

Dec. 10, 2016

Julia found out that she did spend over 2 hours to watch Jane the Virgin on netflix.com in December. So many good memory about the place - Miami area, Julia's home town from 1996 to 2010.

Jane the Virgin - https://en.wikipedia.org/wiki/Jane_the_Virgin

Possible ideas to do research:

How to make TV series? What are actor/ actress practicing daily? Can I borrow some good ideas to write blogs?

TV series are very structured, short and focus on one topic each episode.

Will come back very soon.

Friday, December 9, 2016

JavaScript - 2016 Year-End Review

Dec. 9, 2016

Introduction
Learning JavaScript is so much fun; Julia spent over 10 months in 2014 to study the language, but until 2016, she just learned that so many people choose to use JavaScript to solve daily algorithm challenges. Because she likes to write more JavaScript code, she started to think about putting more code/ data in the front end, avoid a trip to web server, and then, she knew that she started to know the power of JavaScript.

Last 2 - 3 days, Julia started to read JavaScript code through 10,000 submission, at least 10 JavaScript code she plans to read.

Problem statement:
https://www.hackerrank.com/challenges/matrix-rotation-algo

Knowing JavaScript Array API very well, plan to read JavaScript code daily, at least one week or two. Everytime Julia warmups JavaScript, she starts to write new code.

Workout: 
What makes good fun workout on learning JavaScript? Also, help to make some additional fun to the holiday. Will find out!

Year-End Review:

Favorite blogs: Search JavaScript through the blog

1. March

HackerRank: Two string - thinking in JavaScript over 10 ways

http://juliachencoding.blogspot.ca/2016/03/hackerrank-two-string-thinking-in.html

JavaScript for C# developer - pluralsight course
http://juliachencoding.blogspot.ca/2016/03/pluralsight-javascript-for-c-developer.html

2. July

http://juliachencoding.blogspot.ca/2016/07/string-primitive-javascript-study.html

3. August:

JavaScript Style Guide Study - Airbnb

http://juliachencoding.blogspot.ca/2016/08/javascript-style-guide-study-airbnb.html

Thursday, December 8, 2016

HackerRank - NCR codesprint - Spiral Message - Code Review

Dec. 8, 2016

Problem statement


Introduction


The spiral message algorithm is an easy algorithm, but Julia stumbled on this algorithm badly in the contest, she missed the important part - the message starts from low-left corner, not upper-left corner. And then, base cases should be tested: one node, one row, one column first, and then, four edges are handled from low-left to upper-left to upper-right to lower-right to lower-left.

Here are two blogs showing her work:

1. Blog about performance in the contest.

After the contest:
3. Blog about things to work on after the contest.

Continue to work on the spiral message algorithm.

Workout:

First review the code after the contest.

Julia spent over one hour to do code review, and then, she put together a new version, ready to post on stackexchange.com code review section, ask help:

C# version:


Highlights of change


1. Function name is changed to match the requirement: 

SpiralMessageFromLowerLeftClockWise

2. Test cases are added to spiral message, ensure that the order is correct, not just
how many words in the spiral message.

Important Link to get some feedback from the community on stackexchange.com code review.

Tuesday, December 6, 2016

Matrix Rotation - Code Review - Series 3 of 10+

Dec. 6, 2016
Problem statement:
https://www.hackerrank.com/challenges/matrix-rotation-algo

Study code:
https://gist.github.com/jianminchen/1c1c07b5454a43d493264c6db4444ea3

Because there are over hundred C# solution to review, Julia likes to go over them first, mark good solutions to study first.

1. jaygundy
https://www.hackerrank.com/rest/contests/master/challenges/matrix-rotation-algo/hackers/jaygundy/download_solution

2. pableFomenta - similar to code review #2
https://www.hackerrank.com/rest/contests/master/challenges/matrix-rotation-algo/hackers/PabloFomenta/download_solution

Ideas to study code submissions:
1. Study all submissions using JavaScript with full score.
  30+ solutions

2. Study submissions - using filters:

Carnegie Mellon University, Pittsburgh(30+)
MIT ()
Stanford University
University of California, Berkeley

Amazon (20+)
Google  (20+)
Facebook (5)
     Facebook - Player-1

Look for code with good style and design ideas:

Facebook:
1. Java
Define Set function, line 65 - 69.
https://gist.github.com/jianminchen/5e7796bce5a9420472bec31a2cc6e30b

Google

2. C++
line 25, int lt_corner - variable is very clear and meaningful
https://gist.github.com/jianminchen/d8843e292df6e9070e5f55c907ad0f69

3. C++
Matrix at most 300x300, so total size at most is 300*300*4bytes = 360MB, 360KB, HackerRank maximum space is 512MB.
line 8: int M[300][300]
Declare a global variable - jagged array, the code is very easy to read.
Use the condition:  n <= 300
https://gist.github.com/jianminchen/15ff14b51ab1c9f86084dbba4a036684

4. C

For any element in the array, use one for loop to rotate k steps. Very smart handling - code from
line 29 - 45, total 16 lines of code
https://gist.github.com/jianminchen/137807675ba27fd532ffaed4f98a68df

5. Java
Cannot believe!
https://gist.github.com/jianminchen/6e84dfcf2fb222d84900bda27687e6a1

Amazon

Java
6. Design a class: LinkedListLight, with an API  - RotateBy(int steps)
https://gist.github.com/jianminchen/b7cb950b70563b56cb37909e72e0b48c

Standford:

JavaScript
7. https://gist.github.com/jianminchen/ae14bc0d764240d03831e6429337199a

HackerRank - Matrix Rotation - Code review - Series 2 of 10+

Dec. 6, 2016

Problem statement:
https://www.hackerrank.com/challenges/matrix-rotation-algo

Study code:
https://gist.github.com/jianminchen/fd5e7e7e4a031971e56dc30a949e5421

Code review:

Julia took 20 minutes to go over the code, and then understood the code.

A few changes:
 /*
     * Code review:
     *  a -> matrix - function argument
     *  amount -> steps
     *  k -> step, for loop statement
     *  buffer -> prev
     *  buffer1 -> cur
     *
     * Good ideas to study:
     * 1. height, width variables are declared
     * 2. go through the ring: start from second row, first column, anti-clockwise, one-by-one
     *    if/else if statement - 4 lines - very easy to follow
     */
Study do while loop, and also if/else if to do anti-clockwise rotation starting from left-upper corner.

https://gist.github.com/jianminchen/91719129b81eefb19f662615b4e3ab95

Great tip Julia likes to share:
Instead of using four for loop to go through the ring, use if/else if to make it one loop - using do/ while. Easy to write, only 4 lines.

Compare two solutions:

Current one in the blog: smart choice, using one loop - do while - 4 if/else  (Excellent!)
This solution can be memorized, and cut the time to write in less than 10 minutes. 
https://gist.github.com/jianminchen/91719129b81eefb19f662615b4e3ab95

Previous one:   kind of verbose, dumb, 4 for loops.
https://gist.github.com/jianminchen/e943a9e7b86d24e9f36c04f1f3502941

HackerRank - Matrix Rotation - Code Review Series 1 of 10+

Dec. 6, 2016

Problem statement:
https://www.hackerrank.com/challenges/matrix-rotation-algo

Review first 10 C# submissions, and code review one by one:

Study code:
https://gist.github.com/jianminchen/8ee835834a9a6cdb68331695a3c1abb1

Review code, and make the change:
https://gist.github.com/jianminchen/e943a9e7b86d24e9f36c04f1f3502941

Main changes:

Use meaningful names, and declare one extra variable: actualSteps, line 63.
line 67, variable name: firstOneInStrip

Express the intent.

HackerRank - Matrix Rotation (Series 5 of 5)

Dec. 6, 2016

Introduction:
Julia has more talent now after she attended her new school - stackexchange.com code review for code review on stackexchange.com. She did post two questions, and the first one, she learned a few things. One most important one is "Do not use abstract variable name. Do not let user guess what the variable name does".

Julia spent 30 minutes to review the practice in April 2016, and then, she went through the code, found the bug.

Last practice scoring 8 of 80:
(more than 1 hour, still having bugs, score 8.89/ wrong answer)
https://gist.github.com/jianminchen/57572227dafe939060f7cc81b193cd9b

Code review done by Julia on Dec. 6, 2016
1. Do not use abstract variable names. Please use meaningful name
line 16, s1
line 17, sA
line 20, T
line 22, arr
line 27, aA

In the function rotateArrayOneStepAntiClockwise
line 53, cnt
int 53, arr
line 71, ci
line 73, startR
line 74, startC
line 75, endR
line 76, endC
line 78, tmpVal
line 81, i
line 85, i,
line 89, i,
line 94, i,

2. function name should use
rotateArrayOneStepAntiClockwise
Should use PascalCased
RotateArrayOneStepAntiClockwise

"In C#, method names should be PascalCased, not camelCased"

Workout:
c# solution: pass all test cases
https://gist.github.com/jianminchen/6fabef7436097552e35633a549b0268a

Discussion:

Use meaningful variable name - The code is much easy to understand, therefore, static analysis should be much more easy.

For example, Julia reviewed the code on Dec. 6, 2016, line 53 cnt, the variable name is not meaningful, so she decided to replace the name using "steps". Line 114, there is some calculation, so in order to avoid timeout, there is actual steps taken < strip size. So, she decided to add a new variable name on line 114, called actualSteps. Just those two changes, Julia fixed the bug she could not fix in April, 2016 over 1 hour.




Monday, December 5, 2016

Algorithm: Print all nodes at distance k from a give node

Dec. 5, 2015

Julia likes to do some research on this algorithm:

http://www.geeksforgeeks.org/print-nodes-distance-k-given-node-binary-tree/

Recently, she came cross this algorithm through code review:

http://codereview.stackexchange.com/questions/60765/print-all-nodes-that-are-at-distance-k-from-a-leaf-node/60894#60894

a blog:
Another source code reference:
http://k2code.blogspot.ca/2015/09/print-all-nodes-that-are-at-distance-k.html

http://www.geeksforgeeks.org/print-nodes-at-k-distance-from-root/

Do some research on this type of algorithm.




Cracking the coding interview challengs - on HackerRank

Dec. 5, 2016

Julia watched the videos over 3 times.

She likes to take down some notes, and then, continue to do some researches on some ideas:

1. How Companies Evaluate Technical Interviews

2. How to Approach Behavior Questions

3. 7 Steps to Solve Algorithm Problems
1. Listen
Do you use every detail?

2. Example
big, no special case

3. Brute Force
Better to have a brute force than nothing at all

4. Optimize

5. Walk through your algorithm

6. Code
Whiteboard:
- write straight
- use space wisely

Whiteboard or computer:
- Coding style matters

- Modularize
(before, not after!)
  void doSomething(a, b){
  }

7. Test
   1. Analyse-> think about each line
                    -> Double check things that look wierd
   1. Use test cases
        - small test-case first
        - edge cases
        - big test cases

    Remember
      1. think as you test -> don't be a bot!
   

4. 3 Algorithms Strategies
1. B. U. D.

B - Bottlenecks
U - unnecessary work
D - Duplicate work

2. Space/ Time Tradeoffs

3. D. I. Y.

Do it yourself

Blog reading:

https://www.bloomberg.com/graphics/2015-cheatsheets/





Sunday, December 4, 2016

Tennis ATP World Tour Uncovered - Julia's study of sports

Dec. 4, 2016

Introduction:
Julia always turns to tennis sports when she tries to improve her knowledge how to compete, in sports, on HackerRank, and other things like algorithm problem solving - time spent.

Right now, Julia is only 10% of best performer in the world by her study and research through HackerRank leaderboard. She enjoys the study and also tries different ways to improve herself.

Most helpful are to study how ATP players try to reach top 100, top 20, top 10, and enjoy the career as well.

Study of players and coaches:

Also, Julia likes to catch up more ATP tour videos, and then, she likes to know how ATP players think/ compete in the sports.

She enjoys the ATP uncovered series.


1. Double players are more social, close to each other; more social than single.
Part I:
https://www.youtube.com/watch?v=iF-Dwg0ZL-U
Part II
https://www.youtube.com/watch?v=rjg52fZe6SU


Good feeling, good chemistry is good and important. Know your partner so well, we communicate each point; feel other at each point; ...
Good thing - we enjoy play with top single player, not having chance to play single to beat, but double is possible.
Know how to motivate when time is difficult.

What you will do?
Double player, take single player out-of-comfortable zone; make them think differently.


What makes good partnership?

So many pressure points.
How to count on the person? Learn more when you travel together, ...
tennis partnership - work with partner, week out/ week in
Enjoy sports, maybe the result is not good.
Tough journey, get along well.



2. How player handles competitions?

Write down all ATP players in this video:
Andy Murray, Roger Federal, ...,
https://www.youtube.com/watch?v=dX6ytiyhWz4

3.   Top 10 player - Dimitrov  - Julia's favorite player
What to work on? Get back to Top 20? Top 10?
Most important is to keep working, stay healthy, and everything will come. Be there, done that.

Body feel excellent, do not think how old, maturity will come. Just get result.


Coach:
https://www.youtube.com/watch?v=iepe7vytYLo


4. Mat Wilander in the spotlight uncovered 2016
https://www.youtube.com/watch?v=7sNvBUC_rGM&list=PLG1T9f6z4fzQ5PPYGS9-x1Gyo2fncA1Wi&index=44

Mats Wilander: Tennis Legend on Trans World
https://www.youtube.com/watch?v=cnqn9cF3E3k

5. ATP World Tour Uncovered Norman Wawrinka 2016


https://www.youtube.com/watch?v=h56g6GdanAc&list=PLG1T9f6z4fzQ5PPYGS9-x1Gyo2fncA1Wi&index=116

Coach:  Magnus Norman
stay humble, keep learning. So many competitions.

6. Greats of The Game Share Best Advice 2016
https://www.youtube.com/watch?v=tgc3-ujQ12A&index=118&list=PLG1T9f6z4fzQ5PPYGS9-x1Gyo2fncA1Wi

Write down wise words:


Andy Murray - Do not be too hard on myself -
 a lot of people gave to Andy
Bernard Tomic -
Work hard
It is just a sport, enjoy the game.
Fabio -  Learn to listen
Jack Sock  - Can not get back to yesterday
Jeremy Chardy - If you want to be really good, you have to really participate hard.
Marcin  - Use best of day, think harder, train harder
Milos Ronic -
Rafael Nadal - his father told him long time ago, create something is so difficult, copy!
Roger Federal - Learn everything at the begin of career
Stan Warinka - Enjoy the tennis, love the tennis.
Tommy Robredo -

StackExchange Code Review - Julia's new school (Day 4)

Dec. 4, 2016

Julia likes to focus on C# question:

1. Questions answered by Eric Lippert:

C# Score 53, 803  Posts 2,873   Posts % 94

http://stackoverflow.com/search?q=user:88656+[c%23]

Try relevance, newest, votes, active and see which one is best to find best posts to study.

Write down most favorite posts. Write down 10 first.
  http://stackoverflow.com/questions/8717582/why-use-ilist-or-list/8717782#8717782

2. senior google engineer -  Author: C# in Depth

coding blog:
http://stackoverflow.com/users/22656/jon-skeet

C#  SCORE 177,801 POSTS 18,295 POSTS % 55

http://stackoverflow.com/search?q=user:22656+[c%23]


Java
http://stackoverflow.com/search?q=user:22656+[java]

3. Study C# question  the talent answered:
C#
SCORE 738
POSTS 353
POSTS % 98




 

http://codereview.stackexchange.com/users/59161/t3chb0t




codereview.stackexchange.com - Julia's new school (Day 3)

Dec. 4, 2016

Plan to work on code review section, try to know more top-talents, and what are most valuable things to look into.

Day 3:

Part A: 
1.Study google employer and questions he answered:

http://codereview.stackexchange.com/users/26190/ruds

segmented tree,

1.  Travelling Salesman with Four Cities
http://codereview.stackexchange.com/questions/39353/travelling-salesman-with-four-cities/39354#39354

Great teaching about modularity, function design (DRY principles), and

2. Algorithm: K distance from leaf
http://codereview.stackexchange.com/questions/60765/print-all-nodes-that-are-at-distance-k-from-a-leaf-node/60894#60894

Algorithm: K distance from leaf

Another source code reference:
http://k2code.blogspot.ca/2015/09/print-all-nodes-that-are-at-distance-k.html

Practice the algorithm - 15 minutes.

3. Teach dividing different abstraction levels -
Code should be organized in terms of abstractions

http://codereview.stackexchange.com/questions/37478/improve-this-image-file-browser-remove-redundancy/37481#37481


4. Binary Search Tree
http://codereview.stackexchange.com/questions/67014/binary-search-tree/67155#67155



Lose weight and stay healthy - December schedule

Dec. 4, 2016

Julia plans to attend more activity this holiday season, she likes to meet people, get connected to friends, coworkers, and other activities.

Put a tentative schedule here:

1. Dec. 3 attended a wedding - connecting to Chinese church friends - Willingdon church
2. Tech meetup Dec. 7 - connect
3. Dec. 13 Microsoft woman tech
4. ...
5. ...




Saturday, December 3, 2016

Meetup talks - downtown Vancouver

Dec. 3, 2016

Introduction:
  One thing Julia started to do after Oct. 2016 is to spend some time to attend meetups, so that she can spend more time to go out and relax, meet people and learn something new. She enjoys outdoor cold weather very much, specially walk is a great exercise to a programmer.

  She went to "Why Microsoft Loves Java", and another one is "Hack/ Study/ Mentor Night". She did two meetups, one thing is common. She could not find the place, with people's help, she found the place.

  First mistake is that Microsoft has multiple offices in downtown; Julia assumed that the one she knew is the place, but actually it is more than 3 blocks away on Georgia street.

 Second mistake is that she took the bus to a meetup on 163 Hasting street, Mizilla YVR office, but she got off on Pender street, bus No.19, and then, she started to look for the address on Pender street instead.

 Things learned:

Hack/ Study/ Mentor night - December 1, 2016

Julia learned some open source tool, and then, check astexplorer.net, and learn how the language is compiled by the compiler. That is interesting stuff.

http://astexplorer.net/

And one term she heard is mutation testing.

Udacity has some good course about interview.

She had chance to listen some presentation written by Python, and also had chance to know UBC computer science program and got to know a talent student as well.


Friday, December 2, 2016

Book reading: The productive programmer

Dec. 2, 2016

 Julia knows the importance to keep searching good books to read. She found a book to read.

 Productive programmer  by Neal Ford

 She found the explanation of cyclomatic complexity (chapter 6: Test Driven Design , page:103) is very easy to follow, the example is very helpful.

 Plan to read more. Reading is so much fun, this book is very well-written.