首先,你必须有很好的技术。扎实的技术是做这个行业的基本条件。身边有同事,面试的时候经常会被慰劳一下,关于什么框架的代码,有没有熟悉框架的源码?现在很多公司也喜欢面试算法。所以说,面试常问的一些问题在网上搜一下,都清楚。这个要提前准备好。
其次,你要看你面试的这个行业的基本水准是多少?比如一些公司,如果是做算法,刚毕业的研究生就可以达到2万左右。
如果说bat,其实没有啥意思,大部分人都不在bat,针对普通程序员该如何做到20K,我觉得才有意义,至于说一毕业就年薪30-50W,不在讨论范围。
本人新建一个技术交流圈子,群主是10年老技术人员,某上市公司的技术负责人,群里面每天会给群友解答疑问,招聘内推,点击即可加入圈子 验证码 cs
如果是Java岗位
第一,对java基础非常熟悉,多线程,包括concurrent包,线程池,actor、forkjoin模型都要熟悉,知道原理。还有各种基础数据结构,list、map等实现原理。
第二,对常用框架和工具类原理非常熟悉,spring最常问,框架中也是最复杂的。
第三,对jvm内存模型,内存结构,gc原理非常熟悉,能够调优,使用jstack,jmap之类分析问题。
第四对数据库除了使用,要了解原理,比如innodb的原理,索引、页、buffer pool、刷盘机制、锁、事务隔离级别。能够调优,分析死锁。能够配置读写分离,主从。知道binlog,redolog,undolog都干啥的。
第四,对缓存非常了解,当然还是除了使用,要知道淘汰原理,比如redis数据结构都怎么实现的,集群怎么实现的。并且能够处理热key和bigkey。
第五对消息队列非常了解,一样会使用,还得知道原理,比如kafka分区,分片,怎么重置offset,为啥它不会丢消息,什么情况消息是顺序的,什么情况不是顺序的。qos怎么做的。都要会。
第六,对分布式框架和原理要非常了解,比如cap,base都要知道原理,2pc 3pc tcc要能说明白并且知道优缺点,能用代码实现出来。要知道etcd或者zk的原理,会用其sdk。要用过dubbo或spring cloud,要能讲出原理。
第七,要熟悉linux操作系统,除基本命令,要会写脚本,sed awk都要会。同时会用top,vmstat等命令分析系统性能。能够对系统进行基线加固和性能调优。要理解epoll和select原理,还有零拷贝这样常用的内核层面性能优化方案。
第八,熟悉tcp和http协议。至少把三次握手和四次挥手产生的状态都要说的出来。知道滑动窗口,拥塞控制这些原理性东西。然后对http协议头要非常了解。同时会抓包分析数据。
第九,能够搭建负载均衡,四层和七层都要会,同事要知道负载均衡算法和原理。
第十,要熟悉git,知道merge和rebase区别,要常用rebase。熟悉gitflow。
最后,要有一定的架构设计思维能力,对领域模型驱动设计有一些认识。能够拆分业务需求,选型制定方案。包括形成设计文档。
总结:
第一,要有技术,扎实的技术,
第二,学历越高越好
第三,要有一定的工作年限,
第四,要有一定的运气。