初级程序员规划

准备编码面试

在编程世界有些概念是基础。大多数技术面试的目的都是为了发现你的问题解决技能以及看看你是否了解那些概念,所以除了掌握一门编程语言之外,你应该熟悉一些在程序员军火库中必须的一些概念。

要想为编码面试做好成功准备,你应该对以下领域有自信:
算法与数据结构
计算机组织&操作系统
编码
系统设计

算法&数据结构

这是程序眼最迫切需要的技能集。以下是每一位程序员都应该熟悉的主题:
算法复杂性:大O的概念以及如何计算算法复杂性;基于复杂性知道哪一种算法更好,比方说O(N) vs O(logN)。
基本数据结构&适配器:数组、链接表、堆栈、队列。
排序&搜索:知道各种排序算法可帮助你识别项目的最佳的实现。作为练习,不妨试着实现以下插入排序选择排序或者合并排序,然后识别线性搜索与折半搜索的不同。
数&图:树和图无所不在,可以从Facebook的“朋友图谱”和Google Search的“知识图谱”开始。
哈希表:作为世界上最有效的数据结构之一,哈希表一直都是一个好选择。你应该能够实现一个哈希表并且熟悉解决冲突的技巧。

计算机组织&操作系统

强烈建议你要熟悉的主题包括:
逐位运算
CPU是如何执行机器代码的
RAM与动态RAM之间的区别时什么
有哪些类型的OS内核
“互斥”与“信号量”之间的区别是什么
什么是死锁,什么是活锁

编码

你应该至少对一门语言有着非常好的了解。要知道你喜欢的语言所有的优缺点,最佳实践,这有助于你写出优雅高效可读性强的代码。

高度推荐你通过解决有挑战性的问题来进练习,比如:
约瑟夫斯问题
汉诺塔
字符串压缩
平衡括号(Balanced Parenthesis)
孪生素数

系统设计

知道面向对象编程对现代程序员来说是必须的。
系统设计意味着要考虑整个系统,能够设计其架构、对其按类进行详细分析,定义对象的交互。

要准备好回答下述问题:
——让你设计Google Search的话你会怎么设计?如果每秒钟有数百万的并发请求该怎么办?
——你会如何去实现Facebook的朋友查找?
——为什么你需要使用关系式数据库管理系统?
——为什么你要使用NoSQL DB?

高度建议你了解和使用正确的设计模式。比方说,你应该知道Composite(组成)与Decorator(装饰)这两种结构型模式的不同。

尽管初级开发者基本上需要的是有好的问题解决技能,而且你的第一份工作不会要求你上述所有的东西都懂,但是这个列表对于你的职业生涯规划还是会起到很好的帮助作用。

你可能感兴趣的:(未来计划)