整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

相伴Java许多年,我也曾在SSM之时迷茫很久

相伴Java许多年,我也曾在SSM之时迷茫很久



我当初接触编程的时候,因为喜欢玩手机游戏,在诺基亚制衡市场的时代,大部分精良的手机游戏都由Java语言进行编写的,那些游戏傻傻的都带着那杯咖啡的图标,我也顺理成章以Java作为编程的母语进行学习。

那时候学习Java从JavaSE开始学起,if判断/for循环/面向对象/多态/多线程/TCP/UDP,虽然多态难为了我很长时间,但不妨碍我沉迷进了编程这个奇妙的世界。学习Java GUI界面编程的时候终于脱离了黑窗口和命令行,终于可以把自己制作的东西交给父母看一看,让他们知道自己儿子在学什么东西,似乎还学的很不错一样!到学习JavaEE的Servlet/JDBC/HTML/CSS/JS/JSP/MySQL至此可以做出来一些小型的网页和博客。那时候特别高兴,感觉终于能够通过自己的技术制作出来一些符合自己想法的东西了,感觉自己就是造物主,自己可以创造一整个世界!

初期工作开始接触使用Hibernate代替JDBC,以Struts2代替Servlet的形式进行编程,逐渐接受各种框架的洗礼,密密麻麻的框架需要学习,排不完的加班和数不清的复杂查询,到现在我仍然想吐槽曾经十几个表联查还觉得理所应当的各个架构师!处理着各种冗余数据与历史代码,每天都掉许多头发,但是当时劝自己,既然刚入行,赚的就是这个钱,我能坚持下去!

后续工作时使用SpringMVC代替Struts2,使用MyBatis代替Hibernate,使用Jedis整合Redis增加缓存,使用POI生成Excel表格,使用dom4j解析XML文件,使用SOAP协议的WebService接口代替HTTP协议进行服务器之间的数据传输,最后使用Spring管理所有的引入框架。让整体项目越来越完善,似乎越来越接近所有人所说的那种企业级开发的程度了。但这段时间的旅程给人的感受并不美好,此时虽然每天晚上我都保持最少2个小时的长久学习状态,但始终没有我在JavaSE与JavaEE时感受到的那种“接受新鲜事物的感觉”。诚然,我的技术不断在完善,我所了解的框架越来越多,我也胜任了市场上要求三年开发经验的面试门槛和工作基础。但于我个人而言,通过JDBC/Hibernate/MyBatis去读取MySQL中的数据有什么区别?Servlet/Struts2/SpringMVC换来换去有什么意义么?只不过换了个框架换了个写法而已,得到的结果并无不同啊。那我此时此刻浪费的时间来干嘛?我很焦虑,在擅长SSM之后,我技术的增长停滞了很长一段时间。那时候可能每天想的最多的就是通过考研来提高自己工资。毕竟单纯从技术上我似乎已经没有什么办法提高工资了。要么考研,要么等待自己的工作年龄生长到一定程度才行。

但后来发现35岁开始,似乎各个公司又不喜欢用你了,这就很尴尬了。我当时已经工作三年左右,二十五六岁了,考研连考试带学习两三年的时间,我还能再干几年?可是不考研的话,等待工龄涨工资我能涨几年?那时候我迷茫的不得了。

后来发现大牛不外乎本公司内自研框架和引擎的高龄程序员们,可是当我与他们一起开发银行管理系统的时候发现他们仍然在用JDK1.4版本,我对整个职业生涯都很绝望,是啊,我们的项目要求的是稳定,哪来那么多潮流技术新技术去给你替换尝试?而且所谓各种大牛研制的引擎或框架来说,始终离不开读取数据库/生成web页面一系列功能,我都不需要回头看就知道其中肯定包括了单点登录/AES对称加密/RSA非对称加密/HTTPS协议/Freemaker生成HTML页面/账号对应权限/审批功能/跑批功能,来来去去做的这些就是我人生的意义么?他们只是工作早了一些,这样的框架换我我也能做啊!我们每天干的都是这些事!等我年纪大了只能和他们一样么?我还年轻我不服啊,我不能只涨年龄不涨技术,但是那时候的Java除了不常用的框架之外的的确确没有什么所谓的“技术”再可以让我学习的了。

但是自那之后虽然Java技术停滞增长了,我便把重心放到了运维工程师的相关技术上,想往我梦想中的“架构”层次再进一步。那时我学会了Nginx + Tomcat + SSM负载均衡的形式,又学会了Keepalived + Nginx + Tomcat + SSM多层负载均衡的形式,学习了WebSocket那种客户端主动推送的协议,学习了Zabbix监控自己的项目,学习了MongoDB这种除了Reids之外的缓存技术,认知了ElasticSearch搜索引擎,认知Git与SVN之间的管理区别。开始不断阅读各种框架的底层源码,例如在Spring代码中设置断点不断的Debug,开始在MyBatis框架中增加代码,定制更适合我自己的MyBatis拦截器(我在原有MyBatis之上增加了拦截器与自定义日志之类的功能)。在这段时间里,对于框架的理解越来越深,对于运维工程师所需的技术了解的越来越多。可是在本职工作中,我仍然感觉,以我当时三四年的工作经验来讲,与那种刚毕业且学习好的学生来说,区别并不大,尤其类似POI/Jedis/MongoDB这一类工具与框架的学习成本很低,快的两天一个,慢的两周也能搞定,学习速度很快,在未来我的优势能在哪里?难道我的优势只能是我能兼职干运维工程师和研发工程师两种工作么去和其他程序员硬卷么?这种优势与我能疯狂加班有什么区别?这并不是我想要的!我并不想只是技术的“量”在增长,技术的“质”仍然处于那个SSM的阶段,我与毕业生写的代码仍然没有任何不同之处!

在我工作五六年的时候,市面上Java研发常用的服务器软件与Java框架已经大部分了解,我开始接了不少私活,其中包括游戏服务器/IM软件后台/OA软件后台/电商后台等等一系列项目,白天上一份班晚上熬夜接着干,得到了不少人的不少赏识,任何一套系统需求分分钟能在脑内形成拓扑图的时候,我极其自大,觉得自己已经无人能及了,对于新出的Spring Boot与Spring Cloud技术不屑一顾,几周内几乎全部学下,其中包括Consul注册中心/Kafka/FastDFS/Spring cloud Ribbon/Spring Data JDBC/缓存与持久化保持一致性/分布式通讯Feign/分布式断路器Hystrix/分布式的任务调度Quartz等等吧。

很多人认为分布式不是新出的概念么?其实早好几年前我在做SOAP的时候就已经使用了这种分布式服务的形式,在我看来分布式微服务和我当初做的分布式服务没任何区别。思想上都是一样的,那时也通过注册中心管理各个SOAP的WebService服务提供者,这种技术只是实现方式在变,可思想以前就有。只是现在实现的更加具体更加成熟了。刚好那时候有一个大项目拆分重做,整套项目大概区分六十多个微服务,那一年多我通过Spring Boot + Spring Cloud的架构独立连续制作了四十几个微服务,听起来数量很多,其实过程十分轻松,并且我还有闲暇时间去看书。那时候我在想,我的技术也就这样了,最多重新学习一下HTML5/CSS3/VUE/Bootstrap/AngularJS回头当个全栈就好了。

再后来有一段时间身体不好在家休养,顺手整理了下自己学习Spring Boot + Spring Cloud的过程,编纂成册出版了《微服务分布式架构基础与实战——基于Spring Boot + Spring Cloud》一书,写书之余学习了Python扩展了下编程语言。



还有在蓝桥杯的云课堂出了一个《Java多线程实战基础》的课程。又重新买了《算法之美》/《算法基础》一系列算法书,从第一页开始仔仔细细的学习,每一道题都回Eclipse中重新编写代码,当然后期陆陆续续的也都忘了。恕我直言,迄今为止我也背诵不出来快排的代码。

那时开始不断审视着我工作之中我遇到厉害的人物,思考他们技术上的优点,当时想着我既然不知道如何去学习了,那就用他们的优点填补自身,起码勉强能够进步。想想那其中包括通过自己手写简易多线程计算机系统的大佬!能够背诵一点点Linux代码的项目经理!自己手写协议的同事!从零到一实现MySQL!从零到一实现Tomcat的各种人才。虽然一个个都很厉害,但是好多学习的内容纯粹都是靠时间堆砌起来的!都没法让我再惊讶起来!因为虽然我没写过,但是我心里都有个大概,有些我学不会也不想学,因为工作上实在用不到!有些我也可以做到!至此我几乎已经放弃了Java方面的学习,再怎么学也不过如此了。

此后来到现任公司被现任领导面试的时候,领导问我:“你当初写的Spring Boot项目最高承载并发(TPS)能达到多少?”

“当时的项目大概六千多吧,主要看数据查询量大小与复不复杂。这也不光是程序的事,重在服务器,硬件性能配置的上跟不上,代码再好也白费。而且当时业务逻辑也比较复杂,需要穿插数个系统,所以这方面不太好直说。”

“让你开发Redis,16核CPU,32G内存的情况下,你单节点并发(TPS)能上6万么?”

“这实在太恐怖了,这种机器Redis单节点并发应该也就10万吧?我虽然可以完全实现Redis所有功能包括事务/链表/信息推送,但是确实性能不能和真正Redis进行比较。而且人家还是一个团队在做的东西,一个人肯定完不成!”在我回答之时,别说让我拿自己的产品和Redis进行比较,就算放在一起相提并论我都觉得脸上烧的慌。我一直工作也都是实现业务逻辑而已……

“那你和应届生的区别是什么?这点业务逻辑哪个应届生做不出来?Redis一共才几万行代码,允许你两年制作一个阉割版的Reids,不需要那么多的链表/队列/事务,只是达到最基础的set/get/消息通讯三个功能的情况下,代码肯定更少,那你能不能做到Redis的并发?”

应该……做不到吧?不可能的,不现实的,怎么可能!!!

“你知道么?同样都是Java语言,在不同人手里,完全不一样!青龙偃月刀虽好,但是有些人只能拿它切了自己的脑袋!不是Java厉害,框架厉害,公司厉害,你就厉害!不会性能上的测试与优化!你能仿照的,永远都是只是实现了业务逻辑的残次品!”

为了寻找这个面试官所言的真实性,我来到了当前这家公司,跟着面试我的这名领导优化一套类似Redis的中间件。一开始多少以看笑话且随时走人的心态来的,毕竟在我眼里,这几乎是一件不可能完成的任务。

感谢现任领导,几乎手把手教我各种性能测试的方式,虽然我曾经了解一些,但是在这个项目中始终不够看,改变原有编程观念,不断的优化着接口里每一个小接口,关掉所有的日志输出,尽可能减少循环减少递归次数,几乎全部的线程都为多线程异步使用,一个接口用了十数个队列进行调用,优化其中任何一丝GC可能不会清除掉的垃圾!高并发项目不存在任何Debug行为,线程全在大脑里转。听着似乎很简单吧?但其实一个接口每天需要测几十次,连续测试半年时间去优化里面任何一点细节。

越制作现在手上的这款中间件越觉得自己当初如何可笑,面对曾经不知天高地厚的自己恨不得回去好好抽自己几个嘴巴子。当然,抽的时候一定要把现在学习路线告诉曾经的自己,省的再走太多弯路了。

我是如何做到这样的并发的?很简单,秘密就在我编写的《高性能Java架构:核心原理与案例实战》这本书里。谢谢我的编辑安娜,是她给了我写这本书的机会,也是她不断的帮我修改其中的文字,让这本书更好的呈现给大家。



如今这款中间件诚如当时所说在16核CPU,32G内存的情况下每秒带宽推送至少5个G,可承接6万以上HTTP请求无任何压力,无报错无内存溢出无丢失数据,甚至CPU和内存还有相当多的剩余量,在单机性能达到这个程度时,我又陆续为这个中间件编写集群版本/主从复制版本。

《高性能Java架构:核心原理与案例实战》这本书我在写之前构思过无数次,但开始的时候始终无法达到我所想要讲的那种优化程度。

SQL优化怎么讲?这一条SQL我教你优化之后,下一条你仍然不知道怎么优化!

逻辑优化怎么讲?业务就是那么要求的?难不成教怎么和产品经理打架让他改需求?

架构优化怎么讲?我把我所有架构过的程序交代出来让读者挨个朗读并背诵?

在我不断练习之后,与不少程序员进行沟通,沟通具有实际意义的问题后,我才逐渐形成这本书。

“你知道if判断是否影响性能么?”

“你知道for循环与foreach循环性能是否相同么?”

“你知道JDK的Stream流是否影响性能么?”

“你知道lambda表达式是否影响性能么?”

“你知道工厂模式是否影响性能么?如果影响大概到什么程度?”

“你知道几种缓存形式?哪种性能最好?为什么不能一味的用性能最好的那种缓存形式么?”

“假如让你做一套小说网,那每一个章节那么多字数,你都从缓存中获取数据么?缓存不会崩溃么?Redis承受的住么?”

“你知道一个Java应用程序,什么框架都不引用的情况下,只写入main方法与for循环HelloWord输出,那在8核CPU,16G内存的情况下最多能输出多少次么?”

“你知道MySQL单表达到一亿条数据,在8核CPU,16G内存的情况下,总数据体积达到几个G,使用limit10字段,那需要多长时间获取出来?真如网络上所说的,MySQL单表4000条之后读取速度就降级了么?”

以上问题,在任何搜索引擎上都不可能找到相应答案,但答案就在《高性能Java架构:核心原理与案例实战》这本书里,更重要的是,获取答案的方式方法就在这本书里!

我将我所学的架构思想与测试方式都置入其中,文章简短可能并不齐全,可能在学习此书的过程中您的学习笔记会比这本书写的更加厚重,更厚重几倍,若非如此可能效果不佳。原本我还想补充些内容,但想想无用之文可能几十本都放不下,更重要的是将方式方法告诉大家,将扩展视野的方式告诉大家。日后工作到什么程度,再看个人造化。

此书行文粗糙暂且见谅。愿您在读此书之时可以领略到我在后期成长所体会到的一个个惊喜,愿您读此书之后可以自信的说出前言中的答案,愿您在技术成长的道路上不会像我一直在走弯路。

愿您幸福。

张方兴

行文于2021年4月某夜

、选题背景及意义

随着信息化社会的形成和微电子技术日新月异的发展,为开发心理学网站系统提供了良好的环境。在当前的技术和社会需求环境下,心理学网站系统将具有长足的发展。特别是在互联网高度发展和应用的今天,随着心理关爱需求的越来越多,也正因此,心理学网站系统应运而生,可以为心理健康有效的解决很多实际问题。在软件开发过程中最为重要的就是数据库的应用部分。

随着网络行业的快速发展,心理学网站系统涵盖的领域广泛,因此难以管理。传统的心理学管理方法的效率无法适应现在的发展,反而更加繁琐,所以需要建立并且完善心理学网站系统。

系统设计的主要意义在于,一方面,系统上线后可以带来很大的便利性,心理学网站系统属于非常细致的管理模式,要求数据量大,计算机管理可以提高精确性,更为便利的就是信息的查询,大大的提高了工作效率,改善了管理质量;另一方面,通过系统的设计,自己对软件设计有了更加深入的了解,并且产生了浓厚的学习兴趣,在对问题分析方面有了独特的方式,是进入社会之前一次很好的锻炼机会。

二、文献综述(归纳、整理及分析比较搜集到的文献资料,阐明有关主题的历史背景、现状和发展方向,并对这些问题进行评述。完稿时请删除括号内说明。)

[2]姚文杰.基于微信公众平台的医院预约健康咨询系统研究[J].数码世界,2020(04):29.

随着社会的进步,人们对健康认识的不断提高,对心理健康的需求也在不断增加。而经济水平的快速发展,使得人们心理健康出现越来越多的问题。无论是家庭还是社会,都把自己的身体看作唯一的根本,只有拥有健康的心理,才能更好的学习和工作。虽然,各地体检机构也越来越多,如学生的入学定期检查,教职工入职体检,以及所有社会群众的定期体检工作在一定程度上保障了个人身体健康,但是这种体检活动费时费力,无法满足高强度,快节奏的生活水平。

[3]戴铭孚. 基于MVC模式的医院预约健康咨询管理系统的设计与实现[D].广西大学,2019.

随着心理健康业务的需求和规模越来越大,其原来简单、单一的工作方式的体检信息管理已经难以满足工作的需要。而全球以信息技术为主导的科技革命进程的加快,人类社会逐步由工业社会进入信息社会。信息技术是当代最具潜力的新的生产力,信息资源是经济和社会发展的重要战略资源。把心理健康风险业务转移到信息化管理上来,是当前信息化发展的必然过程。

[4]刘磊,何志华.医院健康咨询系统设计与实现[J].医学信息学杂志,2019,40(04):33-36.

当前,传统的心理健康风险评估沿用的是手工管理的方式,长期的使用,存在很多的问题。首先心理健康风险评估的工作量比较大,检查的人群多,登记台的效率相当低下,全部手工书写各种健康风险评估数据、考核资料单,不可避免的造成排长队等候的混乱现象。其中手工作业过程非常繁琐,重复性强,工作量大,消耗大量的人力和时间,且容易出错。其次,健康风险评估项目繁多,需要专门抽调多名医务人员对健康风险评估结果进行反复的收集、校对、整理,再由医生逐一书写健康风险评估结论。手工汇总健康风险评估资料劳动强度较大,效率极低。最重要的是医务工作的忙碌又使医生无暇对每一位健康风险评估者作详细的健康指导。受检者面对健康风险评估单上的各种数据,在没有一定医学知识的前提下,很难了解自身的身体状况以及如何进行疾病的防治。最后,传统的健康风险评估不能充分的利用原始资料进行各种统计和数理分析,缺少对结果的综合分析,凭主观分析与实际情况有偏差。

随着全球以信息技术为主导的科技革命进程的加快,人类社会逐步由工业社会进入信息社会。信息技术是当代最具潜力的新的生产力,信息资源是经济和社会发展的重要战略资源。计算机科学、通信技术、网络技术的不断发展,已经应用到各个领域,心理学网站系统也在此时应用而生了。

三、主要研究内容(阐明研究的内容框架。完稿时请删除括号内说明。)

伴随着信息行业的蓬勃发展和人们心理健康意识的增强,心理健康风险管理的工作也越来越繁重,原来的心理健康风险评估方式已不能满足当前的需求。为了协助心理健康风险评估行业开展健康工作,提高工作效率,开发心理学网站系统势在必行。

基于SSM技术的心理学网站系统采用B/S结构、结合网络数据库开发技术来设计本系统。开发语言采用JAVA,数据库使用Mysql数据库。完成以下基本功能:

前台功能:

1. 新闻速递:展示学校学院新闻内容以及涉及心理学的最新新闻;

2. 心理文章:展示心理学知识相关文章;

3. 心理书籍:介绍心理学热门书籍,推荐学习的信息。

4. 心理预约:为学生提供心理预约的渠道;查看预约信息。

5. 活动公告:提供工作室近期开展活动的公告通知;

6. 站点搜索:提供对整个网站站点信息关键字搜索并显示结果。

7. 注册登录:为用户通过注册登录的功能;

8. 在线交流,发布心理问题,查看信息,和用户进行交流。

后台管理:

1. 新闻速递管理:管理员对最新新闻进行录入,修改或者删除。

2. 心理文章管理:管理员对心理文章进行录入,修改或者删除。

3. 心理书籍管理:管理员对心理书籍进行录入,修改或者删除。

4. 心理预约管理:心理老师查看预约自己的学生;并进行预约审核。

5. 活动公告管理:管理员对活动公告进行录入,修改或者删除。

6. 用户管理:管理员管理学生、管理心理老师。

7. 系统管理:管理系统数据库信息。

8. 在线交流管理:管理交流信息。

四、方案(设计方案或研究方案或研制方案)论证(阐明研究的主要过程。完稿时请删除括号内说明。)

本系统从以下几方面研究:

(一)开发技术

软件开发技术包括:HTML5、JAVA、SSM框架、CSS3、DIV、VUE等。

数据库开发技术包括:MySql等。

(二)研究方法

1. 文献调查法。查阅相关文献资料,了解基于SSM技术的心理学网站系统的总体架构和工作原理,为开发基于SSM技术的心理学网站系统做准备。

2. 实验法。动手实验,首先下载开发基于SSM技术的心理学网站系统的开发平台,Eclipse和Mysql软件,进行安装。然后导入现成的JAVA项目,学习开发方法和思路。

3. 比较研究法。比较编程语言,是JAVA还是C#等主流语言,发现JAVA平台比较成熟和稳定,而且开源免费,最终选择JAVA为系统编码语言。

五、总体安排和进度计划(阐明完成毕业设计或毕业论文的时间安排。完稿时请删除括号内说明。)

第1-2周:课题的需求分析、总体设计。

第3-4周:确定设计内容,分析功能模块,画出所有的视图页面,明确数据来源;设计合理的数据库,建立各数据表和视图的关系。

第5周:系统优化和详细设计。

第6周:实现系统框架的设计。

第7-9周:实现具体功能模块的设计。

第10-11周:完成系统优化,测试与运行。

第12-13周:撰写毕业论文。

第14-15周:提交论文、成果验收。

第16周:毕业答辩



<script src="https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>

网上商城系统(SSM+MYSQL+JSP+HTML5)(毕业论文16000字以上,程序代码,MySql数据库,数据库脚本)

开发环境:Eclipse Mars

JDK: JDK1.8Web服务器:Tomcat8数据库:MySQL


项目运行截图: