A Career Retrospective


SNEI(Sony)

Design Principles for Ingestors
Simple
Independent
- Ingesters are independent and can be ran at same time

Idempotent
- Able to rerun ingester (with new change/logic), not impact to clients
- Generate HashId

Testablity
Visibility - monitoring

Design Mistakes
Use Dynamodb to store data
Solr schema for the unique field
Why happened? 
- Only considered current requirements, didn't plan/think features that we need in near future, like need query and export data





How to Evaluate Job Opportunities - Worth trying?


Know the team
What the team is doing/tech stack
The manager
  - like work experience, how long he worked in this company and team, management style, tech talk
The team members
  - how diversity is the team, team members tech blog/talk
  - We can get this info from recruiter, friends, or linkedin

Know the interview
How many rounds of interview
Whether all (on-site) interviews will happen in one day
Whether decision maker(manager) is there
- In rare cases, some companies wants to have 2 rounds of onsite-interview, then if goes well, do the remaining on-site interview on another day
- Ask recruiter whether they can arrange all interviews on same day
The interviewers
  - Diversity of the interviewers

Reject it kindly if it doesn't match your expectation/skills, as for most companies, you can interview for just one team. If it fails, you have to wait till next year.

Ask Interviewer
How many coding questions will be asked
- Some interviewers/companies like to first ask some simple coding question then move on to a difficult one.
- In this case, you want to finish the first one quickly so you have time to work on the next one.

Learning from Interview


Talking aloud
Communication


- Have a good/friendly/happy conversation with the interviewer
- Eye contact, real discussion
- Make interviewer like you: your personality, your skills etc
- Show the process how you tackle the problem

Always think whether there are different/better approaches
- If you find it (even after you finish your current approaches) , still say it

If there are somethings that you didn't solve or understand
- Ask for hints/solutions 
- if possible
- Even that questions maybe not that important: that shows you want to learn in any cirsumstances

Before interview
- Know how many questions they would ask
- Some companies/interviewers likes to ask simple code questions as warm up, if you spend too much time on it, there may be no much time left for the next real question.
- Though, personally lots of warm up coding questions is not that useful - as it only causes confusion.
- Good warm up questions: 
-- different types: simple dfs/recursion question

When write code
What expectations from the interviewers:
- Do they care about details such as sanity check, corner cases
- Or they focus on the high level algorithm and your problem solving skills
- If they ask you simple coding questions, pay more attention to details when you write the code and later when re-check

- If possible - depend on timings
- Always say: let me check the code again after you finish your first draft code
- Always run some examples:
  - Generalize your example: isPalindromOneDiff

Never say:
I don't know
- Try to solve it, infer from your existing knowledge 

Even after you finish your code/design, think aloud what you can improve
What's the time/space complexity of your current approach
How you can improve it:
- your current approach: O(1) time, O(n) time,  can you use lesser space but still O(1) time, or lesser space but more time: like O(logn) time

When find/realize there are something you can improve: in the code, design
- Say it,
- Fix it 
- in the code, if possible before the interviewer takes the picture

Even after all this, ask the interviewer:
- Take this as a chance to learn something
Is there any better approach?
Did I miss anything in the design?

Reflection
- Think what you can do better, what mistakes you made, what lessons you learned after interview

When write code
What states/variables/invariants you are trying to maintain

Source of bugs
loop variables 
- forget to change them: next=current.next; 

Labels

adsense (5) Algorithm (69) Algorithm Series (35) Android (7) ANT (6) bat (8) Big Data (7) Blogger (14) Bugs (6) Cache (5) Chrome (19) Code Example (29) Code Quality (7) Coding Skills (5) Database (7) Debug (16) Design (5) Dev Tips (63) Eclipse (32) Git (5) Google (33) Guava (7) How to (9) Http Client (8) IDE (7) Interview (88) J2EE (13) J2SE (49) Java (186) JavaScript (27) JSON (7) Learning code (9) Lesson Learned (6) Linux (26) Lucene-Solr (112) Mac (10) Maven (8) Network (9) Nutch2 (18) Performance (9) PowerShell (11) Problem Solving (11) Programmer Skills (6) regex (5) Scala (6) Security (9) Soft Skills (38) Spring (22) System Design (11) Testing (7) Text Mining (14) Tips (17) Tools (24) Troubleshooting (29) UIMA (9) Web Development (19) Windows (21) xml (5)