ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java开发岗还不会这些问题,下载量瞬秒百万

2021-07-09 07:51:58  阅读:158  来源: 互联网

标签:Java s2.51 jpg 20210709 瞬秒 https 下载量 cto com


## 正文 在写这个文章之前,我花了点时间,自己臆想了一个电商系统,基本上算是麻雀虽小五脏俱全,我今天就用它开刀,一步步剖析,我会讲一下我们可能会接触的技术栈可能不全,但是够用,最后给个学习路线。 **Tip**:请多欣赏一会,每个点看一下,看看什么地方是你接触过的,什么技术栈是你不太熟悉的,我觉得还算是比较全的,有什么建议也可以留言给我。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787621243903.jpg) 不知道大家都看了一下没,现在我们就要庖丁解牛了,我从上到下依次分析。 ### 前端 你可能会会好奇,你不是讲后端学习路线嘛,为啥还有前端的部分,我只能告诉你,**傻瓜**,肤浅。 我们可**不能闭门造车**,谁告诉你后端就不学点前端了? 前端现在很多也了解后端的技术栈的,你想我们去一个网站,最先接触的,最先看到的是啥? 没错就是前端,在大学你要是找不到专门的前端同学,去做系统肯定也要自己顶一下前端的,那我觉得最基本的技术栈得熟悉和了解吧,丙丙现在也是偶尔会开发一下我们的管理系统主要是**VUE**和**React**。 在这里我列举了我目前觉得比较简单和我们后端可以了解的技术栈,都是比较基础的。 作为一名后端了解部分前端知识还是很有必要的,在以后开发的时候,公司有前端那能帮助你前后端联调更顺畅,如果没前端你自己也能顶一下简单的页面。 **HTML**、**CSS**、**JS**、**Ajax**我觉得是必须掌握的点,看着简单其实深究或者去操作的话还是有很多东西的,其他作为扩展有兴趣可以了解,反正入门简单,只是精通很难很难。 在这一层不光有这些还有**Http协议**和Servlet,**request**、**response**、**cookie**、**session**这些也会伴随你整个技术生涯,理解他们对后面的你肯定有不少好处。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787621631917.jpg) **Tip**:我这里最后删除了**JSP**相关的技术,我个人觉得没必要学了,很多公司除了老项目之外,新项目都不会使用那些技术了。 前端在我看来比后端难,技术迭代比较快,知识好像也没特定的体系,所以面试大厂的前端很多朋友都说难,不是技术多难,而是知识多且复杂,找不到一个完整的体系,相比之下后端明朗很多,我后面就开始讲后端了。 ### 网关层: 互联网发展到现在,涌现了很多互联网公司,技术更新迭代了很多个版本,从早期的单机时代,到现在超大规模的互联网时代,几亿人参与的春运,几千亿成交规模的双十一,无数互联网前辈的造就了现在互联网的辉煌。 **微服务**,**分布式**,**负载均衡**等我们经常提到的这些名词都是这些技术在场景背后支撑。 单机顶不住,我们就多找点服务器,但是怎么将流量均匀的打到这些服务器上呢? **负载均衡,LVS** 我们机器都是IP访问的,那怎么通过我们申请的域名去请求到服务器呢? **DNS** 大家刷的抖音,B站,快手等等视频服务商,是怎么保证同时为全国的用户提供快速的体验? **CDN** 我们这么多系统和服务,还有这么多中间件的调度怎么去管理调度等等? **zk** 这么多的服务器,怎么对外统一访问呢,就可能需要知道反向代理的服务器。 **Nginx** ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787621192471.jpg) 这一层做了**反向负载、服务路由、服务治理、流量管理、安全隔离、服务容错**等等都做了,大家公司的**内外网隔离**也是这一层做的。 我之前还接触过一些比较有意思的项目,所有对外的接口都是加密的,几十个服务会经过网关解密,找到真的路由再去请求。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787621503932.jpg) 这一层的知识点其实也不少,你往后面学会发现**分布式事务,分布式锁**,还有很多中间件都离不开**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**。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787621338811.jpg) 我上面提到过**zk**,像**Dubbo**、**Kafka**等中间件都是用它做注册中心的,所以很多技术栈最后都组成了一个知识体系,你先了解了体系中的每一员,你才能把它们联系起来。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787621512110.jpg) 服务的交互都从进程内通信变成了远程通信,所以性能必然会受到一些影响。 此外由于很多不确定性的因素,例如网络拥塞、Server 端服务器宕机、挖掘机铲断机房光纤等等,需要许多额外的功能和措施才能保证微服务流畅稳定的工作。 **Spring Cloud**?中就有?**Hystrix 熔断器、Ribbon客户端负载均衡器、Eureka注册中心**等等都是用来解决这些问题的微服务组件。 你感觉学习得差不多了,你发现各大论坛博客出现了一些前沿技术,比如容器化,你可能就会去了解容器化的知识,像**Docker,Kubernetes(K8s)**等。 微服务之所以能够快速发展,很重要的一个原因就是:容器化技术的发展和容器管理系统的成熟。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787622262710.jpg) 这一层的东西呢其实远远不止这些的,我不过多赘述,写多了像个劝退师一样,但是大家也不用慌,大部分的技术都是慢慢接触了,工作中慢慢去了解,去深入的。 好啦我们继续沿着图往下看,那再往下是啥呢? ### 数据层: 数据库可能是整个系统中最值钱的部分了,在我码文字的前一天,刚好发生了微盟程序员删库跑路的操作,删库跑路其实是我们在网上最常用的笑话,没想到还是照进了现实。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787622628064.jpg) 这里也提一点点吧,36小时的故障,其实在互联网公司应该是个笑话了吧,权限控制没做好类似**rm -rf 、fdisk、drop**等等这样的高危命令是可以实时拦截掉的,**备份,全量备份,增量备份,延迟备份,异地容灾**全部都考虑一下应该也不至于这样,一家上市公司还是有点点不应该。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787623300421.jpg) 数据库基本的**事务隔离级别**,**索引,SQL,主被同步,读写分离**等都可能是你学的时候要了解到的。 上面我们提到了安全,不要把鸡蛋放一个篮子的道理大家应该都知道,那**分库**的意义就很明显了,然后你会发现时间久了表的数据大了,就会想到去接触分表,什么**TDDL**、**Sharding-JDBC**、**DRDS**这些插件都会接触到。 你发现流量大的时候,或者热点数据打到数据库还是有点顶不住,压力太大了,那非关系型数据库就进场了,**Redis**当然是首选,但是**MongoDB、memcache**也有各自的应用场景。 Redis使用后,真香,真快,但是你会开始担心最开始提到的安全问题,这玩意快是因为在内存中操作,那断点了数据丢了怎么办?你就开始阅读官方文档,了解**RDB,AOF**这些持久化机制,线上用的时候还会遇到**缓存雪崩击穿、穿透**等等问题。 单机不满足你就用了,他的集群模式,用了集群可能也担心集群的健康状态,所以就得去了解**哨兵**,他的**主从同步**,时间久了Key多了,就得了解**内存淘汰机制**…… 他的大容量存储有问题,你可能需要去了解**Pika**…. ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787623578470.jpg) ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787623257673.jpg) 其实远远没完,每个的点我都点到为止,但是其实要深究每个点都要学很久,我们接着往下看。 ## 实时/离线/大数据 等你把几种关系型非关系型数据库的知识点,整理清楚后,你会发现数据还是大啊,而且数据的场景越来越多多样化了,那大数据的各种中间件你就得了解了。 你会发现很多场景,不需要实时的数据,比如你查你的支付宝去年的,上个月的账单,这些都是不会变化的数据,没必要实时,那你可能会接触像**ODPS**这样的中间件去做数据的离线分析。 然后你可能会接触Hadoop系列相关的东西,比如于**Hadoop(HDFS)**的一个数据仓库工具**Hive**,是建立在 Hadoop 文件系统之上的分布式面向列的数据库**HBase**?。 写多的场景,适合做一些简单查询,用他们又有点大材小用,那**Cassandra**就再合适不过了。 离线的数据分析没办法满足一些实时的常见,类似风控,那**Flink**你也得略知一二,他的窗口思想还是很有意思。 数据接触完了,计算引擎**Spark**你是不是也不能放过…… ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787623487904.jpg) ### 搜索引擎: 传统关系型数据库和NoSQL非关系型数据都没办法解决一些问题,比如我们在百度,淘宝搜索东西的时候,往往都是几个关键字在一起一起搜索东西的,在数据库除非把几次的结果做交集,不然很难去实现。 那全文检索引擎就诞生了,解决了搜索的问题,你得思考怎么把数据库的东西实时同步到**ES**中去,那你可能会思考到**logstash**去定时跑脚本同步,又或者去接触伪装成一台**MySQL**从服务的**Canal**,他会去订阅MySQL主服务的**binlog**,然后自己解析了去操作Es中的数据。 这些都搞定了,那可视化的后台查询又怎么解决呢?**Kibana**,他他是一个可视化的平台,甚至对Es集群的健康管理都做了可视化,很多公司的日志查询系统都是用它做的。 ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787623965877.jpg) ### 最后 **经过日积月累, 以下是小编归纳整理的深入了解Java虚拟机文档,希望可以帮助大家过关斩将顺利通过面试。** 由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。如有需要获取资料文档的朋友,[可以点击这里免费获取](https://gitee.com/vip204888/java-p7) ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787623734151.jpg) ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787624179951.jpg) ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787624135971.jpg) ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787624842721.jpg) ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787624607348.jpg) ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787624594710.jpg) ![](http://www.icode9.com/i/li/?n=2&i=images/20210709/1625787624707210.jpg) **由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!**

标签:Java,s2.51,jpg,20210709,瞬秒,https,下载量,cto,com
来源: https://blog.51cto.com/u_15293102/3019294

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有