技术实力可以分为两层:
- 对技术知识和框架本身的掌握程度,比如你熟悉redis、memcached等的用法。
- 运用技术知识和框架解决实际问题的能力。
很多人觉得,我熟悉这种技术,了解API,会做一些小例子,就有技术实力了。但实际上,一个人的技术实力,练不到第二层,都是瞎扯淡。
所以我们接下来要讨论的是运用技术知识和框架解决实际问题的能力。
提升技术实力,关键的是实践、实践、实践。通常有两种靠谱的方法:
- 找一个能够频繁给你高强度刺激的工作环境,你可以不断去实践,想停下来都不行
- 主动的、有意识的去做专项练习和综合练习
先说第一个,比如你在一个朝九晚五相对悠闲的公司,节奏缓慢,半年出一个版本,那就换到 996 的公司、一周一个版本的那种,Ok,自然你的技术实力就提高得快,HIGH得你不要不要的。
不过很多人是叶公好龙,不会为了提升技术实力而这么残害自己的。然而说实话,这几乎是唯一靠谱的方法。
再说第二种方法,有意练习。这是对一种方法的补充哦。注意,是补充。因为大部分的人,没有主动、有意的练习的能力。简单讲,就是不愿意为了获得某种实力而积极主动给自己加压,总想着哎呀是不是有什么方法、捷径,我照着一学,技术实力就上去了。
我可以坦白讲,没有的事!别做梦了。
所以,这第二种方法,只适用于那些愿意给自己压力、愿意逼迫自己前进的人。而且,它的目的,也是给自己创造实践的机会。
比如你学习了 Netty ,那就在一段时间内,高频度的去使用它,把你的项目的服务器,用它来重写。公司不允许的话,你就自己下班了搞一个自己的项目,反复用反复练啊。
比如你学习了正则表达式,那就把你代码中所有的字符串匹配,都改用正则。这样还不够,还要专门设计一些正则的练习题,用到它的各种匹配方式。甚至你还可以写一个正则表达式的验证工具,给别人去使用,帮助别人学习正则表达式。
这才是主动的、有意的练习。
高频度的外部刺激,加主动的、有意的练习,再加上定期的复盘,就能很快提升技术实力。
这是唯一可行的方法。
所以,你接下来可以:
- 梳理你熟悉的框架,把对知识点的掌握分为三个层次,知道有这回事、了解怎么用、能写DEMO。
- 创造环境,有意练习这三个层次的知识点,练到第四个层次——能在合适的场景下,不假思索第选择合适的知识点解决问题。
这样,你的技术实力就可以再上一个台阶。要想进一步发展,必须在数据结构、高并发、分布式技术等方面提高。最开始学习的时候是很艰难的,基础弱,加上工作中又没有这些技术的使用场景,所以只能在论坛、博客等看零碎的文章,进步比较慢。
要想系统的学习,图书和网络课程是比较好的选择。我买了诸如《java并发编程实践》、《大型分布式网站架构设计与时间》、《Spring Cloud与微服务构建》等书,来来回回看了好几遍。然后在网上看了些视频,有免费的,也有收费的。花近半年时间系统性地学习了一套课程,学完之后对Java相关的技能有了更为体系化的了解。同时,对于非科班出身或基础知识不够扎实的工程师来说,也可以有效起到查漏补缺的作用。
始终保持你的学习欲。对于工程师来说,学习永无止境。但埋头苦学是不够的,你要注意自己的学习一定要有系统性,除了手头的项目和身边“大牛”的指导外,看书和网络课程是最有效的方法,用少量的金钱换取宝贵的时间,是非常值得的。
如果你依然觉得有些茫然,那么以下的福利很适合你,有自己个人学习规划的可以忽略,但是期待提升自己技术栈的也可以看看。
关于专业技能
我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价、拿到的薪水势必也越高。
- 基本语法
- 这包括static、final、transient等关键字的作用,foreach循环的原理等等
- 集合
- 基本上就是List、Map、Set,问的是各种实现类的底层实现原理,实现类的优缺点。
- 设计模式
- 知道常用设计模式的优缺点。
- 能画出常用设计模式的UML图。
- 多线程
- Thread和Runnable的区别和联 系、多次start一个线程会怎么样、线程有哪些状态。
- JDK源码
- List、Map、Set实现类的源代码
- ReentrantLock、AQS的源代码
- AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的
- 线程池的实现原理
- Object类中的方法以及每个方法的作用
- 框架
- 熟练使用三大框架
- 数据库
- SQL基础和SQL优化的内容
- Java虚拟机
- Java虚拟机的内存布局
- GC算法及几种垃圾收集器
- 类加载机制,也就是双亲委派模型
- Java内存模型
- happens-before规则
- volatile关键字使用规则
- 架构师是纵观全局的掌控者,这个层次很熟悉开发,有多年的开发工作经验,并且也有架构设计经验,熟悉架构理念,精通面向对象的设计思想,精通java语言,在高并发,高性能方面有相关开发经验。
一、常用的设计模式
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:
二、开源框架源码分析
程序员每天都和代码打交道。经过数年的基础教育和职业培训,大部分程序员都会「写」代码,或者至少会抄代码和改代码。但是,会读代码的并不在多数,会读代码又真正读懂一些大项目的源码的,少之又少。这也造成了很多错误看源码的方式。
三、分布式架构
迎接高并发大数据的挑战,从深度到广度完善知识体系,成为下一个互联网高薪人才。
理论结合实战,透彻理解分布式架构及其解决方案。
四、微服务架构
微服务架构是一项在云中部署应用和服务的新技术
微服务不需要像普通服务那样成为一种独立的功能或者独立的资源
微服务作为一项在云中部署应用和服务的新技术已成为当下最新的热门话题
微服务的基本思想在于考虑围绕着业务领域组件来创建应用,这些应用可独立地进行开发、管理和加速。在分散的组件中使用微服务云架构和平台,使部署、管理和服务功能交付变得更加简单。
使用微服务构建现代化应用程序是很有意义的,因为它让你既利用了扩展横向扩展架构,也利用纵向扩展架构;还额外得到API的组合,且在整个业务中可重复利用。可能,每一分钟构都在交付新服务,这样你就必须拥有一个敏捷的且响应的应用程序平台,这一平台一直在不断改进中。
五、团队协作
Git
Maven
Jenkins
Sonar
六、项目实战
要想立足于互联网公司,且能在互联网浪潮中不被淹没,对于项目的开发实战演练是不必可少的技能,也是对自身能力的一个衡量,有多少的量对等于获得多少的回报。看似简单的一个项目需求图谱,其中的底层原理,实现原理又能知道多少?你搭建一个完整的B2C项目平台到底需要多少知识?这一切都是需要我们考量的。
在这分享一些资深架构师录制的视频录像以及我总结出了互联网公司java程序员面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料免费分享给大家,需要获取的朋友们可以关注小编,私信“架构资料”获取。
欢迎Java工程师朋友们加入Java架构进阶:777584112
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,
MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)
合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!