当前位置: 首页 > 后端技术 > Java

353颗Java项目!Java初学者必看!Austin的介绍【第一章】

时间:2023-04-02 00:34:06 Java

好几个群友问我为什么最近更新变慢了。一方面工作忙,另一方面自己更新文章的动力确实有所下降。《对线面试官》系列,更新近半年,至今40篇。老实说,当时我更新系列主要是为了我自己的采访。既然入职了,短时间内不会换工作,更新系列的动力自然就少了。话说回来,前段时间面试的时候,我按照《对线面试官》系列准备的知识基本没有什么大问题。最近工作上做的事情还需要很多时间去沉淀,短时间内写不出更好的文章与大家分享。基于以上问题,这段时间似乎进入了一个死循环,出不来了。01.想了很久,一直在想要不要写一个“小项目”,不断迭代。这样我就可以在空闲时间继续写代码,在写项目的过程中,会下意识地督促自己继续学习。之前空闲时间写代码文章和学习,基本没写多少代码(:工作中一直在写代码,但是写的代码不是我喜欢的。虽然我的代码写的很烂,但是我难道我不觉得我的代码不好吗,很多时候我觉得我的代码很好,但是同事进来提个要求,我又觉得代码不好,有没有人和我有一样的想法?毕业和工作以来,越来越发现自己掌握的知识是片面的,大部分人到公司,技术环境搭好,相应的技术打包,我们只是在已有的基础上.修修补补。很多时候我们没办法,公司用什么就用什么。除非我们开始一个新的项目,做新的功能,经过研究,说不定我们想要的技术栈在我们自己的项目中有用。02困难我还记得我的大领导曾经在一次会议上说:现在你能做这么多事情,很大的原因是你有公司的整个环境。如果你离开公司,你能不能完美地建设和运行?我站在我当时维护的系统的角度去想,觉得真的很难。当时在维护touch系统(简单理解为给用户发消息),功能听上去很简单,但其实里面用到的技术栈还是挺多的:RPC调用、分布式配置中心、Redis、Flink、MySQL、SSM开发环境、MQ、规则引擎、ELK日志、分布式定时任务调度、Hive、Elasticsearch等基本都是用主流的Java后端技术栈(:有人可能会有疑问是的;你的核心功能就这么简单(发个信息就行),你真的在??生产环境中用过上面说的技术栈吗?你不会就写个博客在这里吹牛吧?我不信,其实真的用过就这么多,各个技术栈都有存在的必要性:RPC调用:比如营销消息需要依赖DMP(用户画像系统)数据,需要调用DMP接口。微信消息需要accessToken,需要调用用户服务相关接口等,这些依赖都需要远程调用(代码端比较优雅的远程调用是RPC调用)。分布式配置中心:灵活配置各种信息,这个技术框架就是YYDS。例如:你可以在分布式配置中心写入限流的值,那么限流的速率就可以灵活的改变。Redis:高性能内存读写,可用于去重过滤或统计数据。例如:使用Redis做去重功能(TTL时间很适合消息传递业务)Flink:实时流处理平台,可以用来清理埋点消息(所谓埋点消息其实就是消息链路数据信息,消息传递过程中记录关键链接信息)MySQL:存储需要事务支持数据或较少变化的元信息。例如:小程序模板的元信息可以存储在MySQLMQ中:系统解耦、异步、调峰的好帮手(接收埋点信息或提高Response接口速度)。例如:大量的日志数据可以先抛给Kafka规则引擎:结合分布式配置中心,无需系统发布即可实现通用需求。例如:在规则引擎中编写短信接入的逻辑,新增短信接入无需发布系统ELK日志框架:故障排查的好帮手。比如:在关键地方登录,不再登录每台机器查看日志,直接通过关键字搜索分布式定时任务调度:cluster定时更新数据,触发环??境中的任务。例如:营销信息会根据时间定时发送。在集群环境下,使用定时任务调度框架,指定某台机器触发Hive:离线数据存储,帮助数据仓库获取平台数据Elasticsearch:访问后台页面,通过content/title查询数据..可以看到列出的技术栈,每一项技术都可以深入研究(在有一定规模的公司,上面提到的每一项技术都会有专门的开发人员进行迭代维护)。一个相对成熟的项目除了列出的后端技术栈外,还有很多细节,包括但不限于:监控告警、自动化集成部署(发布)、负载均衡(Nginx)等运维端的东西。一个人一个人把这些事情做的比较完整确实很难(:03.从入行以来,我一直充满好奇,想知道某些业务场景是如何工作的,某些技术是如何工作的,在哪里?自己负责的事情中存在的缺陷,可以改进的地方,与其他公司的同类系统相比如何,如何继续改进。但是由于公司相关内容不能随意公开,所以大部分当时是“闭关锁国”,自己做的。(至于系统好不好,我自己感觉还不错,不知道和别人差多少。)现在我看到我的公众号有小白,还有很多大公司大哥,假设我有好的经验可以分享,小白看了以后可以借鉴我的经验,提高自己,感觉自己写的东西值得。当我的代码实现或者思路已经落后的时候,如果有人能帮我指出来,我会继续学习调整,再赚一波血。04.项目内容我以前是做广告和联系人系统的,其他项目不太了解。学生时代的shoppingmall项目在网上很火(不过现在好像很火)。我工作之前一直不明白为什么网上有那么多的商场项目。现在我工作了,我什至不明白。是的。互联网业务其实有很多,电子商务只是其中之一。过去有幸当过面试官。我面试了一些实习生,很多简历也是写商场的。对于这类项目,我在询问项目或技术细节时,几乎都表示(像商城这样的项目很多功能都是在真实的开发场景业务中,感谢商城,这些系统还是有点晦涩难懂)beginners)(:像秒杀之类的,据我所知,在生产环境中使用还远没有想象中那么复杂。这一次,我从头开始编写项目。我认为[触摸系统]是主要的。这个东西比较好理解,几乎每个公司都会有这种系统(如果没有,那你换一个有的)05,文章更新项目不会很快迭代形成。打算以博客的形式迭代更新。这个过程中还有很多话要说。有些内容我可能不太确定,我会一起贴出来讨论讨论,比如:建项目的时候,我会讲为什么用Maven,写业务代码的时候为什么会用SpringBoot,我会讲为什么喜欢写单表结构,不喜欢join或者各种Subquery这种场景为什么要用分布式配置中心,为什么要用规则引擎,能带来什么好处。。思路很多,很多都不熟悉(我说的可能不对,但是经过交流和深入学习之后,我可以重新梳理一下自己的思考过程发出来),我觉得在这个过程中,对于新手来说,是会有收获的。其实很多细节我都没有考虑。比如前端就让我很头疼(不过最近两个月估计没接触过)。我发现有不少人关心我在前端用什么技术。到时候怎么写。老实说,我也不知道。上大学的时候做过前端HTML+CSS+JavaScript+jQuery+Ajax+BootStrap,大概做后台页面用。毕业后听说过很多Vue+Angular+React,还有Node.js环境等等,这些我都没学过(暂时没兴趣学)。前端还有很多细节敲定,到时候再说吧。说不定到时候就有大佬可以撑腰了?但是很有可能是我自己写的。毕竟,我一个人能做到的事,没必要麻烦别人。那么,今天就更新一下Austin的介绍和Q4的Austin项目安排吧。整理完这个Q后,我会继续补充第零部分。从我的角度来说,我认为:austin项目的业务很简单,可玩性很强,可以使用的技术栈也很丰富,比较适合初学者。后面写的时候会穿插一些我认为的项目亮点。我的目标是:这个项目将成为Java小白简历上的一个项目(不再是一体商城项目)06.项目介绍奥斯汀项目的核心功能:消息发送项目的意义:只要公司有发消息的需求,应该有类似austin的项目统一发送和处理各种消息。这样有利于功能的汇集和业务需求开发效率的提升。07.项目流程图austin项目核心流程:austin-api收到请求发送消息,直接将请求发送到MQ中。austin-handler消费MQ消息后,由各个消息的Handlers发送处理。问题一:为什么发送消息需要MQ?答1:发送消息其实就是调用各个服务提供的API。假设某个消息的服务超时了,如果austin-api直接调用该服务,存在超时的风险,会拖累整个接口的性能。MQ就是来做异步解耦的,一定程度上抵制业务流量。问题二:austin-stream和austin-datahourse的作用是什么?回答2:austin-handler在发送消息的过程中会做一些通用的业务处理和发送消息。这个过程会产生大量的日志数据。日志数据会收集到MQ,由austin-stream流处理模块消费,最后写入austin-datahourse问题3:austin-admin和austin-cron的作用是什么?答3:autsin-admin是austin项目的管理后台,负责管理消息,查看消息发送状态。业务方可以直接通过austin-admin管理后台定时发送消息,而austin-cron就是承载定时任务的工作。08.项目技术架构图2021-11~2021-12实现功能:实现功能所需技术栈:Gitee链接:gitee/austinGitHub链接:github/austin关注我的微信公众号【Java3y】聊聊项目!【在线面试官+从头写一个Java项目】持续高强度更新!明星原创不易!!一连求三!!

猜你喜欢