java能开发硬件程序吗,跳槽薪资翻倍
正⽂
在写这个⽂章之前,我花了点时间,⾃⼰臆想了⼀个电商系统,基本上算是⿇雀虽⼩五脏俱全,我今天就⽤它开⼑,⼀步步剖析,我会讲⼀下我们可能会接触的技术栈可能不全,但是够⽤,最后给个学习路线。
Tip:请多欣赏⼀会,每个点看⼀下,看看什么地⽅是你接触过的,什么技术栈是你不太熟悉的,我觉得还算是⽐较全的,有什么建议也可以留⾔给我。
不知道⼤家都看了⼀下没,现在我们就要庖丁解⽜了,我从上到下依次分析。
前端
你可能会会好奇,你不是讲后端学习路线嘛,为啥还有前端的部分,我只能告诉你,傻⽠,肤浅。
我们可不能闭门造车,谁告诉你后端就不学点前端了?
前端现在很多也了解后端的技术栈的,你想我们去⼀个⽹站,最先接触的,最先看到的是啥?
没错就是前端,在⼤学你要是不到专门的前端同学,去做系统肯定也要⾃⼰顶⼀下前端的,那我觉得最基本的技术栈得熟悉和了解吧,丙丙现在也是偶尔会开发⼀下我们的管理系统主要是VUE和React。
在这⾥我列举了我⽬前觉得⽐较简单和我们后端可以了解的技术栈,都是⽐较基础的。
作为⼀名后端了解部分前端知识还是很有必要的,在以后开发的时候,公司有前端那能帮助你前后端联调更顺畅,如果没前端你⾃⼰也能顶⼀下简单的页⾯。
HTML、CSS、JS、Ajax我觉得是必须掌握的点,看着简单其实深究或者去操作的话还是有很多东西的,其他作为扩展有兴趣可以了解,反正⼊门简单,只是精通很难很难。
在这⼀层不光有这些还有Http协议和Servlet,request、response、cookie、session这些也会伴随你整个技术⽣涯,理解他们对后⾯的你肯定有不少好处。
Tip:我这⾥最后删除了JSP相关的技术,我个⼈觉得没必要学了,很多公司除了⽼项⽬之外,新项⽬都不会使⽤那些技术了。
前端在我看来⽐后端难,技术迭代⽐较快,知识好像也没特定的体系,所以⾯试⼤⼚的前端很多朋友都说难,不是技术多难,⽽是知识多且复杂,不到⼀个完整的体系,相⽐之下后端明朗很多,我后⾯就开始讲后端了。
⽹关层:
互联⽹发展到现在,涌现了很多互联⽹公司,技术更新迭代了很多个版本,从早期的单机时代,到现在超⼤规模的互联⽹时代,⼏亿⼈参与的春运,⼏千亿成交规模的双⼗⼀,⽆数互联⽹前辈的造就了现在互联⽹的辉煌。
微服务,分布式,负载均衡等我们经常提到的这些名词都是这些技术在场景背后⽀撑。
单机顶不住,我们就多点服务器,但是怎么将流量均匀的打到这些服务器上呢?
负载均衡,LVS
我们机器都是IP访问的,那怎么通过我们申请的域名去请求到服务器呢?
DNS
java源代码加密⼤家刷的抖⾳,B站,快⼿等等视频服务商,是怎么保证同时为全国的⽤户提供快速的体验?
CDN
我们这么多系统和服务,还有这么多中间件的调度怎么去管理调度等等?
zk
这么多的服务器,怎么对外统⼀访问呢,就可能需要知道反向代理的服务器。
Nginx
这⼀层做了反向负载、服务路由、服务治理、流量管理、安全隔离、服务容错等等都做了,⼤家公司的内外⽹隔离也是这⼀层做的。
我之前还接触过⼀些⽐较有意思的项⽬,所有对外的接⼝都是加密的,⼏⼗个服务会经过⽹关解密,到真的路由再去请求。
这⼀层的知识点其实也不少,你往后⾯学会发现分布式事务,分布式锁,还有很多中间件都离不开zk这⼀层,我们继续往下看。
服务层:
这⼀层有点东西了,算是整个框架的核⼼,如果你跟我帅丙⼀样以后都是从事后端开发的话,我们基本上整个技术⽣涯,⼤部分时间都在跟这⼀层的技术栈打交道了,各种琳琅满⽬的中间件,计算机基础知识,Linux操作,算法数据结构,架构框架,研发⼯具等等。
我想在看这个⽂章的各位,计算机基础肯定都是学过的吧,如果⼤学的时候没好好学,我觉得还是有必要再看看的。
为什么我们⽹页能保证安全可靠的传输,你可能会了解到HTTP,TCP协议,什么三次握⼿,四次挥⼿。
还有进程、线程、协程,什么内存屏障,指令乱序,分⽀预测,CPU亲和性等等,在之后的编程⽣涯,如果你能掌握这些东西,会让你在遇到很多问题的时候瞬间get到点,⽽不是像个⽆头苍蝇⼀样乱撞(然⽽丙丙还做得不够)。
了解这些计算机知识后,你就需要接触编程语⾔了,⼤学的C语⾔基础会让你学什么语⾔⼊门都会快点,我选择了⾯向对象的JAVA,但是也不知道为啥现在还没对象。
JAVA的基础也⼀样重要,⾯向对象(包括类、对象、⽅法、继承、封装、抽象、 多态、消息解析等),
常见API,数据结构,集合框架,设计模式(包括创建型、结构型、⾏为型),多线程和并发,I/O流,Stream,⽹络编程你都需要了解。
代码会写了,你就要开始学习⼀些能帮助你把系统变得更加规范的框架,SSM可以会让你的开发更加便捷,结构层次更加分明。
写代码的时候你会发现你⼤学⽤的Eclipse在公司看不到了,你跟⼤家⼀样去⽤了IDEA,第⼀天这是什么玩意,⼀周后,真⾹,但是这玩意收费有点贵,那免费的VSCode真的就是不错的选择了。
代码写的时候你会接触代码的仓库管理⼯具maven、Gradle,提交代码的时候会去写项⽬版本管理⼯具Git。
代码提交之后,发布之后你会发现很多东西需要⾃⼰去服务器亲⾃排查,那Linux的知识点就可以在⾥⾯灵活运⽤了,查看进程,查看⽂件,各种Vim操作等等。
系统的优化很多地⽅没优化的空间了,你可能会尝试从算法,或者优化数据结构去优化,你看到了HashMap的源码,想去了解红⿊树,然后在算法⽹上看到了⼆叉树搜索树和各种常见的算法问题,刷多了,你也能总结出精华所在,什么贪⼼,分治,动态规划等。
这么多个服务,你发现HTTP请求已经开始有点不满⾜你的需求了,你想开发更便捷,像访问本地服务
⼀样访问远程服务,所以我们去了解了Dubbo,Spring cloud。
了解Dubbo的过程中,你发现了RPC的精华所在,所以你去接触到了⾼性能的NIO框架,Netty。
代码写好了,服务也能通信了,但是你发现你的代码链路好长,都耦合在⼀起了,所以你接触了消息队列,这种异步的处理⽅式,真⾹。
他还可以帮你在突发流量的时候⽤队列做缓冲,但是你发现分布式的情况,事务就不好管理了,你就了解到了分布式事务,什么两段式,三段式,TCC,XA,阿⾥云的全局事务服务GTS等等。
分布式事务的时候你会想去了解RocketMQ,因为他⾃带了分布式事务的解决⽅案,⼤数据的场景你⼜看到了Kafka。
我上⾯提到过zk,像Dubbo、Kafka等中间件都是⽤它做注册中⼼的,所以很多技术栈最后都组成了⼀个知识体系,你先了解了体系中的每⼀员,你才能把它们联系起来。
服务的交互都从进程内通信变成了远程通信,所以性能必然会受到⼀些影响。
此外由于很多不确定性的因素,例如⽹络拥塞、Server 端服务器宕机、挖掘机铲断机房光纤等等,需要许多额外的功能和措施才能保证微服务流畅稳定的⼯作。
Spring Cloud 中就有 Hystrix 熔断器、Ribbon客户端负载均衡器、Eureka注册中⼼等等都是⽤来解决这些问题的微服务组件。
你感觉学习得差不多了,你发现各⼤论坛博客出现了⼀些前沿技术,⽐如容器化,你可能就会去了解容器化的知识,像
**Docker,Kubernetes(K8s)**等。
微服务之所以能够快速发展,很重要的⼀个原因就是:容器化技术的发展和容器管理系统的成熟。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论