瞭解你所面試的公司:產品,成立時間,融資,競爭對手;公司列表java
分析算法的時間和空間複雜度(Big-O);python
java/c++ 熟練掌握一門,python面試算法題其實也ok。linux
對語言的細節特性有足夠的理解,理解語言之間的差別,好比解釋執行vs編譯執行,java jvm, garbage collection等;c++
最好熟悉一門腳本編程語言如Python/ruby;面試
至少知道兩種n*log(n)的排序算法,好比快速排序和歸併排序。merge sort 很重要,好比K-way merge sorts;算法
掌握二分查找思想及應用場景,靈活處理相似問題,好比search in a sorted array查找、實現sqrt()等問題;sql
Hashtable: 透徹理解Hashtable的原理、性能、碰撞處理,並能用array (in your favorate language) 來實現一個簡單的hashtable,考慮多線程的狀況;對於java的hashmap 要了解java hashmap和hashtable區別,concurrenthashmap, linkedhashmap.數據庫
Binary Search Tree的基本操做好比添加、刪除節點,樹與其餘數據結構的相互轉化, BST刪除節點操做基本都會掛。編程
二叉樹的各類遍歷算法(前序、中序、後序、層序),根據遍歷結果重建二叉樹;設計模式
K-ary trees(一個樹有k個children)/trie-tree的實現算法和應用場景;
大致瞭解一種平衡樹,好比(red/black tree, splay tree or AVL tree) , 好比知道treemap的內部實現是red/black tree, 瞭解database index 所用的b+ tree/b tree.
理解Min/Max heap的實現、各類操做時間複雜度和應用場景,熟練解決查找top(N)類型問題;
Graph在內存中的三種構造方式(objects and pointers, matrix, and adjacency list);
遍歷算法BFS/DFS,分析時間和空間複雜度,以及具體實現
結合Graph常考的算法好比拓撲排序,最短路徑以及最小生成樹算法
掌握基本的Dynamic programing的思想,熟練解決基本的DP問題,好比兩字符串的最長子串,字符串之間的edit distance等;
理解操做系統中的進程、線程、以及它們之間的區別,理解系統併發操做中的常見問題(死鎖),以及如何使用locks, mutexes, semaphores來解決併發問題。
理解面向對象設計(封裝、繼承、多態),能把一個模糊定義的業務需求用OO的方式抽象(好比設計電梯、停車場等);設計模式:Singleton(線程安全版本)、factory等;
java primitive type的內存(boolean: 1 byte, int: 4 bytes, long: 8 bytes),瞭解基本位操做;
理解分佈式系統的基本概念,解決的問題以及分佈式系統設計中CAP(Consistency, Availability, Partition)一致性、可用性、高性能之間的trade-offs;
瞭解一些網絡的基本知識tcp/ip三次握手, http/https區別,輸入http://www.google.com 這個網址後會發生什麼;
linux基本命令: kill -9, scp, ps -ef, netstat;
sql數據庫基本知識:join,index,簡單的sql語句:從table中找出成績第二好的學生姓名;sql與nosql數據庫區別,簡單瞭解幾種nosql數據庫;