热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2017-java程序媛的流水账-一个程序媛的不断学习

我曾想过如果由我负责一个项目,我会采用一下技术的组合:1.项目规模中小型,需求改动较多,对技术有一定追求,同时要求快速springboot,springdata
我曾想过如果由我负责一个项目,我会采用一下技术的组合:
1.项目规模中小型,需求改动较多,对技术有一定追求,同时要求快速
spring boot,
spring data jpa(考虑团队成员技术成熟度可考虑mybatis),
mysql,
shiro + cas(考虑权限控制和单点登入 这需要较为成熟技术方可进入,不然建议自己实现简单的token)
 
2.项目中规中矩,偏管理系统,不过分追求技术
springmvc + maven多模块(spring boot)
mybatis(sql语句较为灵活)
mysql
 
3.项目规模较大,服务较多,通信频繁
spring boot
spring data jpa(mysql 统一使用之中方可)
mysql
redis, mongodb(spring集成方便,典型的键值对高速内存数据库和文件存储数据库)
cas + shiro(对比spring security 较轻和集成简单)
rabbitmq(spring cloud选择,涉及到spring cloud bus 默认使用),grpc(可支持高并发和负载均衡)
eureka(服务发现和注册 ap)
根据需求可慢慢接入其他框架
 
 
对于协调前后对接,我考虑为:
swagge(api 文档管理维护调用,取代postman等),
git+maven+nexus+jenkins(搭建一套自动构建打包发布环境,节省每次拉取代码打包构建发布的时间)
 
理由如下分析:
 
 
对比ssh,springmvc,spring boot
ssh:这个是我初入大学的时候学的框架,Spring+Struts+Hibernate,这几个分开来看搭建框架麻烦,太重太繁琐的各种xml配置,Hibernate相对于其他orm来说需要注意的事项也比较多,如一级,二级缓存,事务之类的,现在几乎都看不到这种组合了。
 
springmvc:毕业后开始用springmvc,对于这个发现搭建项目的时候就快多了,比如处理ajax信息返回很方面,直接用注解返回响应信息,恩,至少在接触spring boot之前,我很喜欢用springmvc + maven多项目模块的形式搭建项目。
 
spring boot:就是这么一个喜新厌旧的人哇,接触spring boot之后发现,基本上如果是使用的是ide是idea就是一键式的搭建简单的服务,没有xml的配置就可以简单的完成一个restful 接口,并且开始使用yml这种形式的配置文件,相对于properties较为有层次感,还有神奇的starts一族的jar包,简单的解决jar依赖冲突快速引入web,orm等,注意约定优于配置。
 
 
 
-------------------------------------------- 我是一条分界线 --------------------------------------------------------------
 
 
对比hibernate,mybatis,spring data jpa
一开始我学的就是hibernate,第一次知道数据库表与表之间不要设置外键,其关系应用系统维护就好,它的优点:
1.比起mybatis,hibernate的封装程度较高,使得对象-关系映射变得较为简单,说直白点就是把数据库的表当做对象看待,如果我的对象增加了属性,我并不需要去数据库更改字段,只需要在类文件中加上该属性(前提是xml 的配置文件设置是否更新数据库这个属性设置为true)
 
2.它有较为完善的缓存机制,如session一级缓存,sessionFactory二级缓存(分为内外两种),对于外部缓存一般使用Ehcache,它们之间的集成比较简单,简单点说就是比如一个查询语句,在dao接口层使用关于cache的注解则可以放入这次查询的数据集合在二级缓存中,下次再次调用这个接口的时候则会先查询二级缓存,如果没有方可查询数据库
 
缺点:
1.肯定有人说配置麻烦,xml文件过多
2.维护对象和关系映射需要一定的基础,maybe要有点设计的感念
3.缓存虽然可能用的少,但是如果用起来还是要小心,很容易出现问题(亲测)
4.事务控制
 
接下来实习啦,开始接触mybatis,它的优点:
1.对于映射关系简单的使用 resultMap 则可对应,因为采用xml的形式,所以对于sql语句可进行更为细致的SQL优化,可以减少查询字段。
2.都说上手容易(恩,我要吐槽下,如果数据库字段设计要为频繁的更改呢,接着下看)
 
 
缺点:
1.在我接触使用mybatis-generator-maven-plugin这个插件之前,每次更改数据库字段都是非常痛苦的机械化在xml文件中一点点修改,因为当年无知的自己在自动化生成xml之后尽然去写了个别查询语句,所以导致我修改字段后还有保留自己手写的sql,傻啊,现在使用example,Criteria,再也不用担心更改字段了(除非很吊的存储过程,当然很少见)
 
2.缓存问题了,我接触到的几乎都没什么缓存,mybatis对缓存的支持有点差
 
 
spring data jpa,底层依旧使用了 Hibernate ,对jpa规范的再次封装,在某些可偷懒的时候我是特别喜欢使用的。优点:
1.基于Spring Data的数据访问对象, 只需定义和编写一些查询方法的接口,dao层代码少,把约定优于配置用到了一定高度,方法按约定好的名字规范就可以啦。
2.对于复杂一点的可使用@query之类的
3.spring boot 对其支持集成相当简单
 
缺点:
1.底层依旧是Hibernate ,封装程度高,同时也会带来偏向于底层的调优比较麻烦,比如缓存机制
 
 
 
 
-------------------------------------------- 我是一条分界线 --------------------------------------------------------------
sql和nosql
mybatis:现在常见的sql数据库一般为mybatis,对于sql调优方面,这块我知道的较少,比如sql语句的where条件是从后开始执行的所以越是精准的判断越是要放置在后,简单知道分库分表 sharding-jdbc框架,停留小demo层次,实际项目并未操作过
 
 
redis:接触使用redis 是在做验证码发送这个需求中,redis内部支持五中数据类型,String一般用于保存用户登录session,验证码之类的信息,hash适用于保存对象信息,List队列优选(短信队列),set
无序哈希去重,sorted set有序哈希,权重排序,我现在项目中偏爱使用spring集合的RedisTemplate,它对redis 的client操作封装后使用简单容易上手。不过使用过程中redis对内存要求比较高,服务器选择和配置根据实际情况配置选择。
 
mongodb:是一个基于分布式文件存储的数据库,支持的数据结构类似 jsonbson格式,项目日志,用户评论等偏文件读取比较频繁的可使用,面向集合存储,易存储对象类型的数据,支持文件内部搜索,动态查询,查询功能还是很强大的。
 
 
 
-------------------------------------------- 我是一条分界线 --------------------------------------------------------------
安全认证权限:
cas:安全认证,实现了单点登录的项目中遇到并学习,并对cas进行二次开发,就拿充电桩项目来说,用户访问前端页面,在前端发起请求在后台.后台接收到请求,拿到session和service,session里有ticket,然后在后台内部使用grpc 的方式去访问cas服务器,判断其ticket是否为空或者已经过期,如果已经过期则跳转到登入页面,如果为正常状态则可继续访问,在应用端要注意的就是cas 的配置文件中要实现一些必要的方法比如casAuthFilterRegistration,和AuthenticationRedirectStrategy重定向配置等,资料可查。
 
spring security :权限控制框架,都说和shiro相比spring secutity相对来说显得的配置繁琐笨重,不过可能是我比较菜一点,没有完全体会到shiro 的轻便,不过在配置方便shiro确实是较为简便,最开始接触权限控制框架确实为spring secutity,不过后来学习使用rest api 的时候,我发现spring secutity对rest api并没有shiro强大,如restful接口我喜欢是 get(查询),put(修改),post(新增),delete(删除),而spring secutity我只控制到角色,权限这层,进一步对rest的get,put等访问的细分shiro略胜一筹(rest[user:create])。
 
 
-------------------------------------------- 我是一条分界线 --------------------------------------------------------------
服务间通信
netty:提供异步的、 事件驱动的网络应用程序框架和工具,基于nio(同步非阻塞),可以顺便了解一下bio(同步堵塞),aio(异步非堵塞),第一次接触netty是充电桩项目,后台通过与桩建立tcp连接进行消息通讯。Reactor模型主要由多路复用器(Acceptor)、事件分发器(Dispatcher)、事件处理器(Handler)组成,可以分为三种。同时也有单线程,多线程,主从多线程(这个理论我也没有完全明白)。简单实现:实例化两个NioEventLoopGroup,通常第一个称为“boss”,用来accept客户端连接,另一个称为“worker”,处理客户端数据的读写操作,ServerBootstrap 是启动服务的辅助类,channel,然后由于事件驱动所以要为其添加handler
 
 
grpc:GRPC是google开源的一个高性能、跨语言的RPC框架,基于HTTP2协议,基于protobuf 3.x,基于Netty 4.x,内部自己实现负载均衡,HTTP/2协议标准而设计,基于ProtoBuf,相对比thrif而言更具有未来的趋势,资料较多,同时生成的代码少,同时thrif最大的特色为多语言服务,现实并不会一个系统较多的语言,并且它的每种语言都略微不同。
 
 
-------------------------------------------- 我是一条分界线 --------------------------------------------------------------
部署运维( DevOps)
git: 从git仓库拉取相对于分支的代码(我刚接触git在一个对代码管理较为严格的团队,要求能正确的切换分支拉取代码,提交分支,合并分支,节点不能混乱,要求能按功能回滚,嗯,还好当时用的是hibernate,数据库表结构不需要过多操心,心酸)
 
maven + nexus:jar版本等管理,本地私服仓库可规避网络等因素
 
jenkins:持续集成,我偏认为它是一个脚本集成工具,协调各种脚本调用和资源传输
 
 
 
 
 
 
 
突发奇想开始写文章,看过的人都说是流水账,嗯嗯,我知道,不过用于日常随记,第一步~
 
 
 
 

推荐阅读
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • Java毕业设计项目:“传情旧物”网站(含源码与数据库)
    本项目介绍了如何配置和运行“传情旧物”网站,包括所需的技术栈、环境配置以及具体的操作步骤。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • Nacos 0.3 数据持久化详解与实践
    本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 本文详细探讨了几种常用的Java后端开发框架组合及其具体应用场景。通过对比分析Spring Boot、MyBatis、Hibernate等框架的特点和优势,结合实际项目需求,为开发者提供了选择合适框架组合的参考依据。同时,文章还介绍了这些框架在微服务架构中的应用,帮助读者更好地理解和运用这些技术。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
author-avatar
美丽女人一起来_381
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有