那些年美帝码农找工作不能忘记的知识点

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:Sugar Su
链接:http://zhuanlan.zhihu.com/ms15213/20544226
来源:知乎

    1. 了解你所面试的公司:产品,成立时间,融资,竞争对手;公司列表

    2. 分析算法的时间和空间复杂度(Big-O);

    3. java/c++ 熟练掌握一门,python面试算法题其实也ok。

    4. 对语言的细节特性有足够的理解,理解语言之间的差异,比如解释执行vs编译执行,java jvm, garbage collection等;

    5. 最好熟悉一门脚本编程语言如Python/ruby;

    6. 至少知道两种n*log(n)的排序算法,比如快速排序和归并排序。merge sort 很重要,比如K-way merge sorts;

    7. 掌握二分查找思想及应用场景,灵活处理类似问题,比如search in a sorted array查找、实现sqrt()等问题;

    8. Hashtable: 透彻理解Hashtable的原理、性能、碰撞处理,并能用array (in your favorate language) 来实现一个简单的hashtable,考虑多线程的情况;对于java的hashmap 要了解java hashmap和hashtable区别,concurrenthashmap, linkedhashmap.

    9. Binary Search Tree的基本操作比如添加、删除节点,树与其他数据结构的相互转化, BST删除节点操作基本都会挂。

    10. 二叉树的各种遍历算法(前序、中序、后序、层序),根据遍历结果重建二叉树;

    11. K-ary trees(一个树有k个children)/trie-tree的实现算法和应用场景;

    12. 大体了解一种平衡树,比如(red/black tree, splay tree or AVL tree) , 比如知道treemap的内部实现是red/black tree, 了解database index 所用的b+ tree/b tree.

    13. 理解Min/Max heap的实现、各种操作时间复杂度和应用场景,熟练解决查找top(N)类型问题;

    14. Graph在内存中的三种构造方式(objects and pointers, matrix, and adjacency list);

    15. 遍历算法BFS/DFS,分析时间和空间复杂度,以及具体实现

    16. 结合Graph常考的算法比如拓扑排序,最短路径以及最小生成树算法

    17. 掌握基本的Dynamic programing的思想,熟练解决基本的DP问题,比如两字符串的最长子串,字符串之间的edit distance等;

    18. 理解操作系统中的进程、线程、以及它们之间的区别,理解系统并发操作中的常见问题(死锁),以及如何使用locks, mutexes, semaphores来解决并发问题。

    19. 理解面向对象设计(封装、继承、多态),能把一个模糊定义的业务需求用OO的方式抽象(比如设计电梯、停车场等);设计模式:Singleton(线程安全版本)、factory等;

    20. java primitive type的内存(boolean: 1 byte, int: 4 bytes, long: 8 bytes),了解基本位操作;

    21. 理解分布式系统的基本概念,解决的问题以及分布式系统设计中CAP(Consistency, Availability, Partition)一致性、可用性、高性能之间的trade-offs;

    22. 了解一些网络的基本知识tcp/ip三次握手, http/https区别,输入 这个网址后会发生什么;

    23. linux基本命令: kill -9, scp, ps -ef, netstat;

    24. sql数据库基本知识:join,index,简单的sql语句:从table中找出成绩第二好的学生姓名;sql与nosql数据库区别,简单了解几种nosql数据库;

posted @ 2016-02-10 13:22  Jonas0608  阅读(212)  评论(0编辑  收藏  举报