大家好,我是冰河。 很多读者私信问我,我的时间不短了。 随着工作年限的不断增加,感觉自己的技术水平与工作年限严重不符。 想跳槽,换一个新的环境,但感觉自己的能力达不到心仪公司的标准。 即使我投了简历,也没有人通知我去面试。 就这样,我在原来的公司里一天天混日子。 时间久了,就觉得自己没用了,就这样恶性循环。 如何破解游戏?
首先,如果你认为自己是天才程序员,那你大可不必按我说的去做,因为你是天才,分分钟可以达到甚至超过百万。 如果你认为自己只是一个普通人,那么继续往下看,相信会对你有所帮助。
如何打破技术水平和工作年限之间的僵局?
首先,最重要的是心态。 为什么这么说呢,因为在从事互联网开发的时候,程序员的压力其实还是挺大的。 在高强度的日常工作中,我们需要以良好的心态去面对自己的工作。 其次,就是要学会释放压力,用正确的方式释放或者缓解自己内心的压力。
其次,关键是你要发自内心地问问自己,你对现在的工作是否感兴趣。 其实我们都知道,只要做自己感兴趣的事情,就会事半功倍。 如果我们因为某种原因不得不去做某件事,往往会是我们投入了很多精力,而效果往往是不够的。 太好了,这就是我们常说的事半功倍。
经常有小伙伴在微信私信我:我在学Java吗? ,其实看到朋友的这些问题,我都不知道怎么回答。 为什么? 其实这些问题你心里应该都清楚:只要你足够努力学习,学什么都能找到一份好工作。
本质上,对于我们这些搞技术的人来说,年龄的增长其实并没有外界说的那么可怕。 真正可怕的是你的年龄和你掌握的技术深度不匹配。 如果你的年龄与你的技术深度不匹配,你将很难找到一份令你满意的工作。 试想,如果你工作了5、6年,1、2年工作经验甚至应届生都能胜任这份工作,公司为什么要你来干? 它给你提供养老金吗? 企业要盈利,盈利就是赚米。 如何赚米? 节省成本是赚米的一种方式,对不起,你会被淘汰。
所以,在技术的道路上,你也需要选择一个自己感兴趣的方向。 比如:Java、.、大数据、云计算、云原生等。接下来就是深入学习了。 要知道:技术再牛逼,也敌不过傻子一样的坚持。 只要坚持,就没有学不会的技术。 在学习的过程中,一定要清楚自己在学什么,切记不能三心二意。 今天不学Java,明天还想学。 一定要给自己定一个目标,把目标分解成每天的学习计划。
学什么
调整好心态后,我们再来看看需要学习什么。
打好基础
首先,要夯实自己的基础。 比如对Java集合框架、多线程与并发契约、IO/NIO、JVM、内存模型、泛型、异常、反射等有深入了解的,最好阅读源码了解底层设计。
比如一般面试都会问,线程池、CAS、AQS、虚拟机优化等知识点,因为这些对于互联网公司来说绝对重要。 而大部分人都过不了这一关,还抱怨这些没用,为什么还要面试。
在这里,我给大家举一个我经历过的项目的真实案例。
之前我公司在做一个高并发电商项目的时候,一个开发同学在项目中使用了默认的线程池创建方式,导致在线程池中使用了默认的无界队列。 异常情况会导致内存峰值。 最后通过查看源码定位问题,修改为有界队列,问题解决。 试想,如果连线程池都不会,你怎么玩?
再举个例子,由于对线程安全控制的理解和使用上的错误,未能实现真正的线程安全。 此时,你将如何解决这个问题? 所以,基础很重要,一定要把基础学好。 万丈高楼拔地而起,只有地基牢固,上层建筑才会更加坚固。
深入的互联网技术知识
关于这一点,我们需要从底层做起,你至少要对MySQL、Redis、Nginx、RPC、JMS、Dubbo、、、性能调优、Netty、服务注册发现、服务治理、各种中间件、了解互联网工程、并发编程、分布式、微服务、云原生等。
你必须问你需要知道多少。 在这里,我可以给大家举几个例子: 首先,对于MySQL,你需要了解常用的参数设置,如何选择存储引擎,还需要了解常用的索引引擎,知道如何选择。 知道如何设计表,如何优化SQL,如何根据执行计划进行调优。 掌握分库分表的设计和优化。 一般互联网公司的数据库都是读写分离的,会纵横切分,所以你或多或少需要掌握这些。
那么Redis需要了解原理,调整参数。 Nginx和Nginx几乎都是JAVA互联网开发必备的web服务器。 这或许与阿里选择技术栈不无关系。 至于RPC,还有很多。 必须了解各种网络协议,序列化技术,SOA等等,一定要有深刻的理解。 现在国内广泛使用的RPC框架是dubbo。 小伙伴们可以去Dubbo官网学习,或者下载源码学习。 至于其他的,就需要自己去研究了。 简而言之,掌握它们对您没有任何害处。
培养硬核能力
我这里说的硬核能力是指:编程能力、编程思维、算法能力、架构能力、设计能力、沟通能力、调优能力、系统控制能力、行业影响力。 在这里,我简单说一下,除了互联网技术需要掌握的基础部分和技能外,还有几个是必须要掌握的,那就是:编程能力,编程思维,算法能力,架构能力,设计能力,通信能力、调优能力、系统控制能力、行业影响力。
我觉得评价编程能力不是一件容易的事,但是想出一个5000W的用户按姓名年龄排序这样的题目还是很容易的。 问你AOP和IOC,你至少要清楚。 并不是说每个设计模式你都用过,但你也能理解其中的几个。 对于算法,你需要有算法的基础知识。 其实在开发一个系统的时候,很多地方都需要考虑使用算法来实现。 有的小伙伴认为自己是做业务开发的,不会用算法,也不需要学习算法。 其实这种想法是错误的!!
然后是架构能力。 这并不是说你要设计一个高并发高并发的系统,但至少让你搭建一个秒杀系统,抗重请求的设计可以快速完成,不会有坑。 最后就是提升你的系统设计能力、沟通能力、系统调优能力和系统控制能力,逐步提升你的行业影响力!
好了,今天就到这里吧,我是冰河,有什么问题可以在下方留言,一起交流技术,一起进步,一起进大厂。 稍后我会为你推荐一些书单。 如果你想毕业五年年薪百万以上,欢迎在下方留言告诉我你的想法~
作者; CSDN博主冰河