“ 没有引发任何行动的思想都不是思想,而是梦想。—— 马丁”

1、前言
曾在网上看到很多新人初入职场很没有方向感,在网上留言说,对于领导安排的任务都不清楚怎么下手,心里很恐慌。
把项目的代码发你,让你快速熟悉然后安排一些工作马上上手修改。
让你去看项目的代码,不懂从哪里开始看起。
感觉每天没啥进展,日报、周报没法写,领导问我进度怎么样了,心好慌啊
感觉项目实在太复杂了,把项目跑起来,涉及的东西太多了,搞不懂啊
初入职场,基本上都有过这样恐慌的经历,害怕自己跟不上项目被开除了。自己又不敢频繁的问老同事,问多了老同事也会烦。注意的是,我们在请教老同事的时候,事先自己先思考并且把核心的问题总结,做到有针对性的问,比如具体某个点不是很懂,而不是什么都不懂,需要老同事从头帮你把项目跑起来。
建议 1:收集文档并仔细阅读文档
在稍微正规的公司都会有相关文档的,比如:需求文档、概要设计文档、详细设计文档、数据库文档、接口文档等,都可以问同事或者领导要,并认真阅读,这些文档可以帮助你快速的了解项目的需求、数据库结构、功能流程等等。
建议 2:亲自操作系统,并熟悉需求
一般的公司都会分为本地开发环境、和测试人员专门测试的环境的,可以要测试环境的地址、账号信息,动手点一遍功能,一般的系统即使再复杂,多点点还是能弄的懂的,但是如果涉及到复杂的审批流程,则需要请教测试人员,一般来说测试对流程是最熟的。(我记得我当初开发过一个流程相关的系统,涉及的账号和分支特别多,如果不能完整了解整个流程,压根跑不通)
建议 3:如何去看代码?
其实看代码,需要有针对性的看,比如你想看系统的某个功能如何实现的?一般我都是在浏览器上面 f12 查看请求的地址,然后根据地址去 swagger 接口文档来找到对应的接口并且了解其接口的信息,再根据接口找到对应的代码入口,最后一直顺着思路去看。
建议 4:本地跑项目
JDK、Maven、IDE 的版本要跟同事保持一致,下载好项目需要依赖的 jar,到本地 Maven 仓库
了解项目的基础框架,比如:SpringBoot,则找到启动类即可;如果是 SpringMVC 则通过 Maven 的 Tomcat 插件来跑项目。
修改好配置(注册中心的地址、数据库地址、配置中心地址等等),一般情况下都会修改配置信息才能跑起来的。
理清项目依赖的中间件(比如:Redis、MQ、MySQL 等等),记录好它们的相关信息(比如:ip 地址、账号、密码),一般来说微服务架构的项目都不会在自己电脑上安装这些,有专门的开发服务器。把这些信息用专门的文档记录好。
理清项目依赖的其他服务,服务数量可能非常的多,并且你不可能都有权限的,记录你所负责的项目依赖哪些其他服务,它们的接口是什么?
建议 5:上手开发,领导安排的任务主要分三种
bug 的修复:如果是 bug 的修复,那么则建议先通读一遍 bug 所在位置的代码,打断点调试,找出问题。一般来说都是代码不严谨造成的 bug。
旧功能的升级:这种是最麻烦的,有可能是牵一发而动全身;有可能是之前数据库表设计的不合适导致加表、加字段等等。如果涉及改动很大(涉及数据库表的)则跟领导汇报,汇报之前要心里有个解决方案。
新需求的开发:首先不着急写代码,画好详细流程图、把开发的思路写下来好好斟酌、写注释;到最后其实就是根据套路补上代码即可。当然这看个人水平,如果是新手建议把这些繁琐的工作仔细做好,因为这是会让你慢慢养成良好的思维习惯。
刚进团队一定要自信和积极,不要闷不吭声、不懂也不说,过几天领导一问啥都没有准备好,给领导和同事留下了极不好的印象。如果你能在刚入职的时候有条不紊的做好这些准备工作,你自己也会自信很多。希望能给刚入行或者入行不久还有点迷茫的同学们一点参考的意见吧,毕竟大家都是这么过来的,别人的意见或许不一定适合你,但也许能让你少走点弯路。
2、网盘架构介绍

上面的架构图,是网盘系统的真实架构了,可以清晰的了解到项目的部署架构和涉及的技术栈。
前端是基于 Vue.js+ElementUI 来实现
使用 Nginx 做请求转发,类似网关的作用;它也可以实现 Tomcat 集群的搭建
主要是基于 SpringBoot+Jpa 作为项目的基本技术框架
Dubbo 作为分布式服务治理框架,主要解决服务的远程调用、负载均衡、容错等
Zookeeper 作为注册中心,主要目的是服务地址管理、服务监听等功能
Nacos 作为配置中心,把配置和项目解耦,方便项目的部署、迁移等等
Redis 作为数据的缓存;分享记录的过期、回收站的过期数据的监听;分布式锁的实现;
FastDFS,阿里开源的分布式文件系统,它可以动态扩容、冗余副本等等。它的性能非常的好,好多的电商平台都是基于 FastDFS 来存储商品图片。因此,我们的网盘系统也选择它来存储我们的文件。
Solr,基于 Lucene 实现的分布式全文检索框架,为了提高检索效率,目前通常都是基于类似 Solr 这样的 nosql 库去做全文检索,而不是传统的 sql 查询。
OpenOffice 主要是用来做 Office 文档的转换
当然,还有一些细的技术就不展开详细介绍了
这样的架构好处是什么呢?
安全性,网盘是前后端分离的,前端项目肯定需要部署在外网,因为网盘对外使用,用户肯定要访问的到页面。那么我们的服务要不要暴露在外网呢?其实为了安全考虑,接口服务一般都是部署在局域网,前端页面部署在外网,通过 Nginx 作为请求转发即可。
灵活部署,如果开发好的项目要丢给运维的同事来进行上线部署,部署的时候,肯定需要更改好多的 IP 地址啥的,你还得跟运维沟通 Redis 部署哪台服务器、MySQL 部署哪台服务器等等,把所有的配置改好,再打包丢给运维来部署,如果出问题,肯定少不了扯皮。这样的做法非常的麻烦,而 Nacos 可以让这一切变的更加的灵活,项目构建的时候,把上线需要变动的配置抽取到 Nacos,上线的时候,开发只需要从 Nacos 导出配置和打包项目丢给运维,运维可以自己去 Nacos 修改配置,还有一个好处就是 Nacos 的配置在线修改可以实时生效,不用重启项目,非常的方便。
性能问题,分布式架构、Redis、Solr、FastDFS 等等这些中间件技术方案都是可以提高我们系统性能的,当然提高系统性能还有好多方案,系统调优会详细说明。
3、项目亮点介绍
至于网盘系统的功能,我就不详细说明了,大家可以访问网址进行查看,核心是包括:个人网盘、后台管理、接口提供三个部分。这里主要核心的讲解的是网盘涉及的核心业务,面试时聊项目的时候,大家可以聊聊这些。
业务场景 1:文件的上传
文件上传,相信很多同学都做过这样的功能,但是基本上都不会考虑大文件上传的问题,做的也只是普通的小文件上传。通过学习网盘系统,你将学会如何实现大文件的切块上传。
业务场景 2:文件的下载
文件下载,相信很多同学都做过这样的功能,但是大文件的下载、多个大文件的下载应该怎么去实现呢?如果你没有思路,则本专栏将会给你详细的介绍。
业务场景 3:文件的切块、合并、压缩
通过学习本专栏,你将会掌握如何进行文件的切块、合并、压缩。其实文件的操作,底层就是 IO、NIO 的使用了。
业务场景 4:文件的搜索
如果您掌握了使用 Solr 去实现文件的搜索功能,那么当你面对这样类型的业务场景时,你可以延伸到其他需求上,比如:商品的搜索等。
业务场景 5:日志的采集
讲解通过 Aop 的思想教你如何实现系统行为日志的采集,可以基于 Aop 做很多业务场景,关键是掌握这种思想。
业务场景 6:分布式锁
讲解基于 Redis、Zookeeper 两种方式去实现分布式锁,并且懂得什么样的场景适合使用分布式锁。
业务场景 7:消息的推送
讲解基于 WebSocket+Netty 来实现 Web 页面的消息推送;并且深入讲解 WebSocket 集群架构的解决方案。
业务场景 8:过期监听
讲解如何通过 Redis、Zookeeper 分别实现分享、回收站数据的过期监听,你可以把这种思想运用到自己的项目。
业务场景 9:设计模式的使用
讲解责任链设计模式、策略设计模式的使用及业务场景
4、小结
本节主要简单介绍网盘系统的架构、所涉及的技术、还有各种业务场景。这些比较典型的业务场景,可以运用到自己的项目当中,同时也可以在面试的时候去把它作为项目亮点来聊。
为了照顾没有接触过这些技术的同学,我们会提前回顾一轮基础,让基础不是很好的同学也可以看的懂整个项目。
纸上得来终觉浅,绝知此事要coding...




