在当今互联网高速发展的时代,程序员的薪资水平也在不断提高。对于月薪20K的程序员来说,他们不仅需要具备扎实的编程基础,还需要掌握一系列与工作相关的技能和能力。
月薪20K的程序员应具备怎样的技能和水平?
相信这是一个很多人都比较关注和重视的问题。程序员的发展方向可以划分为技术专家、架构师、技术管理管理。薪资20K的程序员相对来说是比较资深的程序员,具备的技能远超初级程序员。现在来介绍一下薪资20K的程序员应具备的技能及相应的水平。
一、算法
算法是衡量程序员技术水平的重要标准之一,技术、面试、笔试都考算法题,所以一个月薪20K的程序员应该在Leetcode (力扣)至少得刷两三百道,《剑指offer》所有题目都练习一遍,做过ACM更好,掌握基本的数据结构和算法知识,现在很卷的面试官也只能通过算法题来加大筛选。
二、数据结构
不要求你手写红黑数,但AVL、哈希表堆这些简单的数据结构自己必须操作实现过,链表、线性表必须熟悉到不能再熟悉,语言的标准库实现得了解。
三、计算机系统知识
必须具备扎实的计算机系统知识,内存、堆栈、函数调用、数的表示等等,至少《CSAPP》得过一遍。操作系统:操作系统有哪些构成?进程的状态、切换、调度进程间通信方式(共享内存、管道、消息)、进程和线程的区别、线程的实现方式(一对一、多对一等)等等。尤其是校招,对于操作系统方面知识的考察是非常多的。
四、计算机网络
计网知识比较繁杂,很多同学都反映网络很难学,一大堆的网络协议依次学完后,还是不知道网络是怎么构成。推荐学习《计算机网络:自顶向下方法》这本书从我们最常接触的HTTP、FTP、SMTP等应用层协议讲起,可以清晰看到引入各个层的作用。学习每层协议的时候,最好自己抓包看下,wireshark抓包遇到三次快速重传会怎么样?这样印象会更加深刻。
五、数据库
SQL得会写,推荐《SQL必知必会》,几个范式有没有正式运用过?如何进行领域建模、数据库设计,才能够使得每次查询的开销最小?
六、索引存储结构
B树、B+树索引、Hash索引。索引的使用:主键索引、覆盖索引、最左前缀原则、索引下推等,锁:乐观锁、悲观锁、表锁、行锁、意向锁、读锁、写锁等等。
七、网络编程
后台开发基本是离不开网络编程的,其实甚至整个后台开发也可以看作是在做网络编程。只不过别人的框架帮我们做了协议解析、网络数据传输、解封包这些底层操作。
八、进程间通信方式
信号量、管道、共享内存、socket等多线程编程,互斥锁、条件变量、读写锁、线程池等,还有五大IO模型,同步、异步、阻塞、非阻塞信号驱动。
九、编程语言
熟练掌握至少一种后端编程语言,如Java、Go、C++等,并且能够自力完成项目,对所使用的技术框架有深入的理解。推荐C++的必看书籍Effective三部曲:《Effective C++》、《More Effective C++》、《Effective STL》。
十、项目经验
至少有6个以上的项目经验,能够独立完成项目,并且对需求有较好的理解能力。如果只是用几个框架,建议不要写到简历上,不如去github上参与开源项目GSOC学习。任何一个花上半年时间去实现一个简陋的原型(如实现一个简单的内核)都是非常好的简历加分项。
除了以上这些,一个月薪20K的技术员还应具备架构设计能力,问题解决能力,良好的沟通协调能力、问题排查能力、线上运维能力和项目管理能力等等,以适应不断变化的工作需求。
这些技能和水平不是一成不变的,随着技术的发展和个人经验的积累,程序员需要不断更新自己的技能,只有不断提升自己的技能水平和综合素质,才能在竞争激烈的职场中脱颖而出。