Interview Experience Part 1


http://www.jianshu.com/p/3b7887f6a3c9
题目是, 设计题目
建立一个王朝。
王朝只有一个皇帝,
皇帝有很多儿子,每个儿子又可以有很多儿子。
这样,我就想起了一棵多叉树。
然后,每个人都会死去的。
下面实现三个函数。
1. 让这个string代表的人,死去。
die(String curr) {}
2. 让string 代表的parent生下一个孩子。
born(String parent) {}
3. 打印整个皇朝,dfs 的方式。
print(Node root) {}
题意差不多就这个意思。
然后让我从头到尾写出来,实现这个系统。
我记得当时我用了两个hashmap + 一个多叉树
一个hashmap, 存 <name, Node> // 这个名字对应的结点
一个hashmap, 存 <Node, boolean> // 这个结点的人死没死
然后多叉树就是
Node {
String name;
LinkedList<Node> children;
}
然后上面三个操作都可以很简单的做出来。
打印的话就用dfs
死亡的话就把对应结点找出来,标记为true
生的话,就找到parent结点,给他加一个孩子。
于是 follow up来了。才是重点。
这棵树有多深?
depth = logD(N),
那么大概有多少个结点?
D ^ depth
如果有100个朝代,大概N在什么数量级?
D ^ depth
那么print的时间复杂度?
O(D ^ depth)
那应该很大吧?
恩。
优化一下?
然后我发现,其实一个人最多能活个两三个朝代。
对于死去的人,我还是简单地存在树里,只是标记为死亡。这样,他们其实浪费了空间时间,而没有任何意义。
所以不能这么做。要把他们从树里面删除。那他们的孩子呢?
在把他们的孩子,一个个移动到 parent 的 children list里面的前面。
这里,一定是插在这个链表的前面,才能保证dfs的时候顺序不变。
这样100代以后,其实活下来的人,也就只有三层这样,会大大减少复杂度。
这道题目不难,但是要完全的写出来,还是有一定难度。还有许多corner case 需要考虑。比如,老皇帝,root死了,怎么办?所以要有一个虚root结点。
当时感觉发挥的还不错,但是还是没有一下子就考虑清楚,然后就开始动笔。真的不好!

所以,当你看到一道题目,觉得自己有把握做出来的话,一定要考虑点时间,想清楚了,任何细节,不想没想清楚就开始写,一边写一边想,往往会出现问题。



下次碰到不会的题目,先好好想想,不要2分钟觉得不会就放弃了,就开始瞎讲。
想想,应该用什么数据结构,用最暴力的解法,该怎么做。
然后把 brute force的解法说出来。讨论这个解法,为什么复杂度这么高。他这么慢,肯定有原因的。找出这个原因。
然后,优化他。 dp, hashmap, 等等。
数据结构就是我的刀剑,我要用好他们

上来是问简历,问了我JPA,这些。我答的还不错。
然后问我在做的一个project,是不是用xml传送信息的。我说是的。
然后看我简历写过json,就开始让我现场写json
其实这个真不难。放在上学期,我肯定写出来了。
但这学期都在忙着写,php, 普通的java,aws等等,json具体的细节我忘记了。
我只记得,他是一个个的键值对。
{"key", "value"} 结果我忘记了,中间不是逗号,是冒号。


(记住, controller 同时还需要负责将用户数据写入db)
问我这个是 model 还是 controller
我当时还没有从json的余波里解放出来,人很失落,脑子短路,想错了,说是 controller
哎,怎么可能是controller 呢。。。
他问我确定吗,我说确定。
然后他跟我说,你在controller里面检查输入输出吧。
我说是的。
然后后来我想了下,改成了model。这的确是model啊。一个人的model。
controller 从view拿来数据,string,传给model
为什么我会答错。
然后我改了。
他说你又觉得他是model了啊。
估计觉得我是傻逼吧。。。水比。
然后问我,为什么在model里面要检查输入。

http://altynai.me/2014/06/google-interview/
开场问了些简历里面的东西,以之前做过什么?某个项目中遇到的最大难题是什么?怎么解决的?等类似方向的问题为主,之前也有为这个做些准备,不过感觉没回答好,主要还是表达能力上的问题。
然后就直接在doc里做题了,这轮面了两题,第一题是TC Div.2 250pt级别的题,一个简单的char array[]处理,从右往左线性的扫描就够了。但是由于当时太紧张了,挂了电话之后才发现把面试官给的一个题目条件忘记了,回想到面试官在提示的时候自己愣是在找bug,而不是重新审视题目的本意。
第二题是实现一个迭代器,前序遍历一个二叉树。一开始扯了一个暴力且最简单的方法,直接遍历树,存结果,再线性扫描。然后面试官当然不满意,提示优化,所以扯了一个手动栈模拟递归的方法,由于时间紧,也来不及写代码,只是大致说了一下思路,不过感觉自己当时也不是表达的很好。具体思路和代码可以参考http://coolshell.cn/articles/9886.html
第一题是给定一个字符集S,有一个映射函数f(x)=y x,y属于S,让你实现一个函数g(y)=x x,y属于S。首先给了一个暴力枚举的做法:对于每个y,枚举集合S,找到一个f(x)=y即可。然后提醒优化,就加开了一个数组,做查询时候的cache。
第二题是个循序渐进的题目,一开始要求实现一个10进制->n进制(2<=n<=16)的转化函数,然后实现一个n进制->10进制(2<=n<=16)的转化函数,最后结合以上两个函数,整合成一个n进制->m进制(2<=n,m<=16)的综合函数,写完之后讨论了一些细节问题,之后就算是结束了这轮面试。




Labels

LeetCode (1432) GeeksforGeeks (1122) LeetCode - Review (1067) Review (882) Algorithm (668) to-do (609) Classic Algorithm (270) Google Interview (237) Classic Interview (222) Dynamic Programming (220) DP (186) Bit Algorithms (145) POJ (141) Math (137) Tree (132) LeetCode - Phone (129) EPI (122) Cracking Coding Interview (119) DFS (115) Difficult Algorithm (115) Lintcode (115) Different Solutions (110) Smart Algorithm (104) Binary Search (96) BFS (91) HackerRank (90) Binary Tree (86) Hard (79) Two Pointers (78) Stack (76) Company-Facebook (75) BST (72) Graph Algorithm (72) Time Complexity (69) Greedy Algorithm (68) Interval (63) Company - Google (62) Geometry Algorithm (61) Interview Corner (61) LeetCode - Extended (61) Union-Find (60) Trie (58) Advanced Data Structure (56) List (56) Priority Queue (53) Codility (52) ComProGuide (50) LeetCode Hard (50) Matrix (50) Bisection (48) Segment Tree (48) Sliding Window (48) USACO (46) Space Optimization (45) Company-Airbnb (41) Greedy (41) Mathematical Algorithm (41) Tree - Post-Order (41) ACM-ICPC (40) Algorithm Interview (40) Data Structure Design (40) Graph (40) Backtracking (39) Data Structure (39) Jobdu (39) Random (39) Codeforces (38) Knapsack (38) LeetCode - DP (38) Recursive Algorithm (38) String Algorithm (38) TopCoder (38) Sort (37) Introduction to Algorithms (36) Pre-Sort (36) Beauty of Programming (35) Must Known (34) Binary Search Tree (33) Follow Up (33) prismoskills (33) Palindrome (32) Permutation (31) Array (30) Google Code Jam (30) HDU (30) Array O(N) (29) Logic Thinking (29) Monotonic Stack (29) Puzzles (29) Code - Detail (27) Company-Zenefits (27) Microsoft 100 - July (27) Queue (27) Binary Indexed Trees (26) TreeMap (26) to-do-must (26) 1point3acres (25) GeeksQuiz (25) Merge Sort (25) Reverse Thinking (25) hihocoder (25) Company - LinkedIn (24) Hash (24) High Frequency (24) Summary (24) Divide and Conquer (23) Proof (23) Game Theory (22) Topological Sort (22) Lintcode - Review (21) Tree - Modification (21) Algorithm Game (20) CareerCup (20) Company - Twitter (20) DFS + Review (20) DP - Relation (20) Brain Teaser (19) DP - Tree (19) Left and Right Array (19) O(N) (19) Sweep Line (19) UVA (19) DP - Bit Masking (18) LeetCode - Thinking (18) KMP (17) LeetCode - TODO (17) Probabilities (17) Simulation (17) String Search (17) Codercareer (16) Company-Uber (16) Iterator (16) Number (16) O(1) Space (16) Shortest Path (16) itint5 (16) DFS+Cache (15) Dijkstra (15) Euclidean GCD (15) Heap (15) LeetCode - Hard (15) Majority (15) Number Theory (15) Rolling Hash (15) Tree Traversal (15) Brute Force (14) Bucket Sort (14) DP - Knapsack (14) DP - Probability (14) Difficult (14) Fast Power Algorithm (14) Pattern (14) Prefix Sum (14) TreeSet (14) Algorithm Videos (13) Amazon Interview (13) Basic Algorithm (13) Codechef (13) Combination (13) Computational Geometry (13) DP - Digit (13) LCA (13) LeetCode - DFS (13) Linked List (13) Long Increasing Sequence(LIS) (13) Math-Divisible (13) Reservoir Sampling (13) mitbbs (13) Algorithm - How To (12) Company - Microsoft (12) DP - Interval (12) DP - Multiple Relation (12) DP - Relation Optimization (12) LeetCode - Classic (12) Level Order Traversal (12) Prime (12) Pruning (12) Reconstruct Tree (12) Thinking (12) X Sum (12) AOJ (11) Bit Mask (11) Company-Snapchat (11) DP - Space Optimization (11) Dequeue (11) Graph DFS (11) MinMax (11) Miscs (11) Princeton (11) Quick Sort (11) Stack - Tree (11) 尺取法 (11) 挑战程序设计竞赛 (11) Coin Change (10) DFS+Backtracking (10) Facebook Hacker Cup (10) Fast Slow Pointers (10) HackerRank Easy (10) Interval Tree (10) Limited Range (10) Matrix - Traverse (10) Monotone Queue (10) SPOJ (10) Starting Point (10) States (10) Stock (10) Theory (10) Tutorialhorizon (10) Kadane - Extended (9) Mathblog (9) Max-Min Flow (9) Maze (9) Median (9) O(32N) (9) Quick Select (9) Stack Overflow (9) System Design (9) Tree - Conversion (9) Use XOR (9) Book Notes (8) Company-Amazon (8) DFS+BFS (8) DP - States (8) Expression (8) Longest Common Subsequence(LCS) (8) One Pass (8) Quadtrees (8) Traversal Once (8) Trie - Suffix (8) 穷竭搜索 (8) Algorithm Problem List (7) All Sub (7) Catalan Number (7) Cycle (7) DP - Cases (7) Facebook Interview (7) Fibonacci Numbers (7) Flood fill (7) Game Nim (7) Graph BFS (7) HackerRank Difficult (7) Hackerearth (7) Inversion (7) Kadane’s Algorithm (7) Manacher (7) Morris Traversal (7) Multiple Data Structures (7) Normalized Key (7) O(XN) (7) Radix Sort (7) Recursion (7) Sampling (7) Suffix Array (7) Tech-Queries (7) Tree - Serialization (7) Tree DP (7) Trie - Bit (7) 蓝桥杯 (7) Algorithm - Brain Teaser (6) BFS - Priority Queue (6) BFS - Unusual (6) Classic Data Structure Impl (6) DP - 2D (6) DP - Monotone Queue (6) DP - Unusual (6) DP-Space Optimization (6) Dutch Flag (6) How To (6) Interviewstreet (6) Knapsack - MultiplePack (6) Local MinMax (6) MST (6) Minimum Spanning Tree (6) Number - Reach (6) Parentheses (6) Pre-Sum (6) Probability (6) Programming Pearls (6) Rabin-Karp (6) Reverse (6) Scan from right (6) Schedule (6) Stream (6) Subset Sum (6) TSP (6) Xpost (6) n00tc0d3r (6) reddit (6) AI (5) Abbreviation (5) Anagram (5) Art Of Programming-July (5) Assumption (5) Bellman Ford (5) Big Data (5) Code - Solid (5) Code Kata (5) Codility-lessons (5) Coding (5) Company - WMware (5) Convex Hull (5) Crazyforcode (5) DFS - Multiple (5) DFS+DP (5) DP - Multi-Dimension (5) DP-Multiple Relation (5) Eulerian Cycle (5) Graph - Unusual (5) Graph Cycle (5) Hash Strategy (5) Immutability (5) Java (5) LogN (5) Manhattan Distance (5) Matrix Chain Multiplication (5) N Queens (5) Pre-Sort: Index (5) Quick Partition (5) Quora (5) Randomized Algorithms (5) Resources (5) Robot (5) SPFA(Shortest Path Faster Algorithm) (5) Shuffle (5) Sieve of Eratosthenes (5) Strongly Connected Components (5) Subarray Sum (5) Sudoku (5) Suffix Tree (5) Swap (5) Threaded (5) Tree - Creation (5) Warshall Floyd (5) Word Search (5) jiuzhang (5)

Popular Posts