前言很早就想写这期了,但是因为时间关系,一直拖到现在。原以为一两天就能写完,结果从构思到整理资料再到写作用了将近一周的时间。你也知道我哥一向是创作天才,我肯定不会认真写的。想了几个切入点,最后还是决定用一个完整的电子商务系统作为切入点。我给你看看,我们需要学什么,我还搜集了配套的视频资料,暖男施锤,这期是个苦活,别白嫖了。正文在写这篇文章之前,我花了一些时间自己想象一个电子商务系统。基本上,麻雀虽小,五脏俱全,今天就用它来一步步分析。我会说说我们可能接触到的东西。技术栈可能不完整,但也够用了,最后给个学习路线。提示:请大家欣赏一会,每个点都看一下,看看自己接触过哪些地方,不熟悉哪些技术栈。我觉得比较全面。如果您有任何建议,可以给我留言。如果有什么不懂的技术问题,可以随时问薇薇。不知道大家有没有读过。现在我们要解决这个问题。我会从上到下分析它。前端你可能很好奇,你不是讲了后端的学习路线吗,怎么还有前端的部分,我只能告诉你,笨蛋,肤浅。闭门造车造不了车,谁告诉你不要学前端的?现在很多前端的人也了解后端的技术栈。你觉得我们去一个网站,首先接触的是什么,首先看到的是什么?没错,就是前端。如果在大学里找不到专门做前端的同学,就必须自己做前端搭建系统。那么我觉得最基础的技术栈一定要熟悉理解。冰冰现在也是偶尔发育起来的。再来看看我们的管理系统主要是VUE和React。这里我罗列一下我觉得比较简单的,我们后台能看懂的技术栈,都是比较基础的。作为后端,了解一些前端知识还是很有必要的。在以后的发展中,公司有前端可以帮助大家更顺利的调试前后端。如果你没有前端,你也可以自己推送一个简单的页面。我觉得HTML、CSS、JS、Ajax是必须要掌握的点。看起来很简单,但要学习或操作的东西还是很多的。其他的可以作为扩展来学习。反正入门容易,精通非常难。在这一层,不仅有这些,还有Http协议和Servlet、request、response、cookie、session等,将伴随你的整个技术生涯。了解它们一定会让你以后受益匪浅。提示:这里最后删除了JSP相关的技术。我个人认为没有必要学习它们。除了老项目外,很多公司不会在新项目中使用这些技术。在我看来,前端比后端更难,技术迭代更快,知识似乎没有一个特定的体系,所以很多面试过大厂前端的朋友都这么说很难。一个完整的系统,相对于后端要清晰很多,后面我会开始讲后端。网关层:互联网发展到现在,出现了很多互联网公司,技术更新迭代了很多版本。从早期的单机时代到现在的超大规模互联网时代,亿万人参与的春节,千亿两位数的交易规模十一,无数互联网前辈创造了辉煌今天的互联网。微服务、分布式、负载均衡等我们经常提到的名词,背后都有这些技术的支持。如果单机受不了,我们会找更多的服务器,但是如何把流量均匀的发到这些服务器上呢?负载均衡,LVS我们的机器都是通过IP访问的,那么如何通过我们申请的域名来请求服务器呢?抖音、哔哩哔哩、快手等视频服务商如何保证全国用户同时提供极速体验?我们在CDN里面有那么多的系统和服务,那么多的中间件调度等等怎么去管理呢?zk的服务器那么多,如何统一访问,可能需要知道反向代理的服务器。Nginx层做了反向加载、服务路由、服务治理、流量管理、安全隔离、服务容错等,我们公司的内外网隔离也是在这一层做的。之前也接触过一些有意思的项目。所有对外接口都是加密的,几十个服务会被网关解密,在请求前找到真正的路由。这一层其实有很多知识点。后面你会学习发现分布式事务,分布式锁,还有很多中间件。Service层:这一层有东西,是整个框架的核心。如果你像我帅冰一样从事后端开发,我们整个技术生涯的大部分时间基本上都是在这一层技术栈上度过的,各种中间件,计算机基础知识,Linux操作,算法数据结构,架构框架,研发工具等等。我想看到这篇文章的每个人都必须学习计算机基础知识。如果你在大学里没有好好学习,我觉得有必要再读一遍。为什么我们的网页能保证安全可靠的传输,你可以了解一下HTTP,TCP协议,三次握手,四次挥手。还有进程、线程、协程、内存屏障、指令乱序、分支预测、CPU亲和性等等,在以后的编程生涯中,如果你能掌握这些东西,会让你遇到很多问题。瞬间进入正题,而不是像无头鸡一样乱撞乱撞(不过,冰冰做得还不够)。了解了这些计算机知识之后,就需要接触编程语言了。大学的C语言基础,让你学任何语言都很快。我选择了面向对象的JAVA,但是不知道为什么现在还没有对象。JAVA基础同样重要,面向对象(包括类、对象、方法、继承、封装、抽象、多态、消息解析等)、通用API、数据结构、集合框架、设计模式(包括创建型、结构型,Behavioral),多线程和并发,I/O流,Stream,网络编程你都需要了解。一旦你知道如何编写代码,你需要开始学习一些框架,这些框架可以帮助你使系统更加规范。SSM可以让你的开发更方便,结构层次更清晰。写代码的时候,你会发现你大学用的Eclipse在公司已经看不到了。您像其他人一样使用IDEA。第一天这是什么情况?VSCode真的是一个不错的选择。写代码的时候会接触到代码仓库管理工具maven和Gradle,提交代码的时候会写项目版本管理工具Git。代码提交发布后,你会发现很多东西需要自己在服务器上检查,然后Linux的知识点就可以在里面灵活运用,比如检查进程,查看文件,各种Vim操作等等,系统优化的很多地方都没有优化的余地。你可能会尝试从算法上优化或者优化数据结构。你看了HashMap的源码想了解红黑树,又看了二叉树查找树和各种……这是常见的算法题。看多了也能总结出本质,比如贪心,分而治之,动态规划等等。服务那么多,你发现HTTP请求已经开始不能满足你的需求了。你想更方便的开发,像访问本地服务一样访问远程服务,所以我们学习了Dubbo和Springcloud。在了解Dubbo的过程中,你发现了RPC的本质,于是你接触到了高性能的NIO框架Netty。代码写好之后,服务可以通信了,但是你发现你的代码链接那么长,而且都是耦合在一起的,所以你接触到了消息队列。这种异步处理方式真香。也可以帮你在突发流量的时候用队列做缓冲,但是如果你发现分布式事务很难管理,你就会了解分布式事务,什么是两阶段,三阶段,TCC,XA,阿里的全球交易服务GTS等等。说到分布式事务,你会想了解一下RocketMQ,因为它自带了分布式事务的解决方案,在大数据场景下又看到了Kafka。我在上面提到了zk。像Dubbo、Kafka这样的中间件就是以它作为注册中心,所以很多技术栈最终形成了一个知识体系。您必须先了解系统的每个成员,然后才能集成它们。保持联系。服务的交互从进程内通信变成了远程通信,性能必然受到影响。此外,由于网络拥堵、服务器端服务器宕机、机房挖掘机铲光纤等诸多不确定因素,需要增加很多功能和措施来保证微服务的顺畅稳定工作。在SpringCloud中,有Hystrix熔断器、Ribbon客户端负载均衡器、Eureka注册中心等,都是用来解决这些问题的微服务组件。你感觉自己学的差不多了,你发现各大论坛和博客上都出现了一些前沿技术,比如容器化,你可能会学习容器化,比如Docker,Kubernetes(K8s)等。其中之一微服务能够快速发展的最重要原因是:容器化技术的发展和容器管理系统的成熟。这个层次上的东西,其实远不止于此。我不会重复太多。如果我写得太多,我会像一个半途而废的人。去了解,去深入。好了,我们继续往下看图,接下来呢?数据层:数据库可能是整个系统中最有价值的部分。在我打文的前一天,一个微盟程序员刚好删库跑路了。删库跑路其实是我们网上最常说的笑话,没想到现实中也有体现。我在这里也提一点。36小时的失败其实应该是互联网公司的一个笑话。rm-rf、fdisk、drop等高危命令,如果没有做好权限控制,可以实时拦截。备份、全量备份、增量备份、延迟备份、异地容灾都应该考虑。不应该是这样的。上市公司还是不要做。![Uploading...]()数据库的基本事务隔离级别、索引、SQL、主从同步、读写分离等可能是你学习时需要知道的。我们在上面提到了安全性。每个人都应该知道你不应该把所有的鸡蛋放在一个篮子里的原因。分库的重要性不言而喻。然后你会发现表中的数据随着时间的推移在增加,你就会想到联系分表。TDDL、Sharding-JDBC、DRDS等任何插件都会接触到。当你发现流量很大,或者热点数据打到数据库的时候,还是有点吃不消,压力太大了,这时候非关系型数据库就派上用场了。当然Redis是首选,但是MongoDB和memcache也有各自的应用场景。使用Redis后,确实又香又快,但是你会开始担心开头提到的安全问题。这个东西快是因为它是在内存中运行的,万一下断点数据丢了怎么办?你开始阅读官方文档了解RDB、AOF等持久化机制。在线使用时,会遇到缓存雪崩击穿、穿透等问题。如果单机不满意,可以使用。它的集群模式也可能会担心集群的健康,所以你要了解Sentry,它的主从同步。时间长了,key多了,内存淘汰机制也得懂了。......他的大容量存储有问题,你可能需要学习一下Pika......其实远没有结束,我点了每个点,但实际上需要很长时间学习每一点,让我们往下看。实时/离线/大数据等你整理好几个关系型和非关系型数据库的知识点,你会发现数据还是很大的,数据场景也越来越多样化。你必须了解中间件。你会发现有很多场景是不需要实时数据的。比如你查看去年和上个月的支付宝账单,这些都是不会变的数据,不需要实时数据。那你可能会接触到像ODPS这样的中间软件,做离线数据分析。那么你可能会接触到Hadoop系列相关的东西,比如Hive,一个基于Hadoop的数据仓库工具(HDFS),它是一个构建在Hadoop文件系统上的分布式列式数据库HBase。对于写的比较多的场景,适合做一些简单的查询,但是用起来有点大材小用,所以Cassandra再完美不过了。离线数据分析不能满足一些实时的常见问题,比如风控,所以要对Flink有所了解,它的窗口思维还是很有意思的。数据接触结束后,就放不下计算引擎Spark……搜索引擎:传统关系型数据库和NoSQL非关系型数据,有些问题是解决不了的。比如我们在百度、淘宝上搜索东西的时候,经常会用几个关键词一起搜索的话,除非把几次的结果在数据库中相交,否则是很难实现的。然后全文搜索引擎就诞生了,要解决搜索问题,你就得想怎么把数据库实时同步到ES上,那你可能会想到logstash定时跑脚本同步,或者联系假装做一个MySQLFrom服务的Canal,他会订阅MySQL主服务的binlog,然后自己对Es中的数据进行分析操作。这些都做完了,如何解决可视化后台查询呢?Kibana,他是一个可视化平台,甚至可视化了Es集群的健康管理。许多公司将其用于日志查询系统。Narrative如果想去好的公司,但是目前的硬实力还不够,我觉得还需要努力。技术能力的高低可以决定你能走多远,平台的高低可以决定你的高度。如果你通过努力成功进入了心仪的公司,千万不能懈怠。职业发展与学习新技术一样。不进则退。我发现在工作中我身边的人真的是那些更坚强、更努力、最自律、最享受孤独的人。总结一下我提到的技术栈。你想知道这一切。我觉得几个月就够初步了解了。这里的理解仅限于你知道它,它有什么作用,以及如何使用它。并不代表你对它的底层原理、常见问题、问题解决方案等有深入的了解。要想达到后者,基本上只能靠时间的积累,或者不断尝试积累经验,没有速成法,谁都知道欲速则不达。技术这条路很枯燥,很难说实话,但是薪水会比其他一些基础岗位高。所以老实说,我在大学里学这个只是为了兴趣。我从小就喜欢电子和电脑,现在打磨好了,现在是为了钱。现实吗?如果家境殷实,谁愿意流离失所。但至少因为做了软件,改变了家庭的困境,自己的生活也一步步走向了小康。说做程序员改变了我和家人的生活可能有些夸张,但我总有一种幻想,下班后的生活会因为我选择走这条路而改变。
