2020 年 01 月 - 55 文章

设计模式学习笔记之适配器模式

  |   0 评论   |   0 浏览

前言 这是一篇学习笔记,内容很多是来源于网上的资料,然后按照自己学习情况进行的总结,有些是自身的感受,有些是网上比较好的资料的引用。 如果有人看到我写的笔记有不对的地方欢迎留言指出来,是真的欢迎指出来,因为我可能会错很久,然后才发现。学习技术不能闭门造车,要多交流,多讨论,多思考才能成长的快,学的快。 我的个人博客:海加尔金鹰 什么是适配器模式 适配器模式的定义 适配器模式有时也称包装器模式,指的是将一个类的接口转换成我们需要的接口。根据不同的实现方式适配器可以分为三种:继承类的叫类适配器,持有类的叫对象适配器,实现接口的叫接口适配器。 适配器模式适用场景 系统需要使用现有的类,但现有的类却不兼容。 需要建立一个可以重复使用的类,用于一些彼此关系不大的类,并易于扩展,以便于面对将来会出现的类. 需要一个统一的输出接口,但是输入类型却不可预知。1 适配器模式的结构 目标接口(Target):调用方所期待得到的接口。 适配器(Adaper):核心角色,适配器把源接口转换成目标接口。 被适配者(Adaptee):即真正的接口,需要通过适配器进行调用。 类适配器 被适配者(Adap....

webservice接口开发学习笔记(二)

  |   0 评论   |   0 浏览

@[toc] 前言 在webservice服务发布之后,通过soapUI工具测试成功之后。这个服务就可以在其他项目当中进行调用了。那么如何在只知道webservice的WSDL情况下进行调用呢? 项目中webservice服务的调用 目前在项目当中进行通信基本都是通过HTTP请求的方式,所以通过dk 自带wsimport.exe生成客户端代码的方法显得不是很实用。需要通过在项目当中进行编码的方式构建一个soap请求来调用webservice服务。只需要知道webservice服务的wsdl描述就可以了。 环境说明: webservice服务是通过JDK自带的Endpoint发布的 (CXF框架的未进行测试) JDK版本1.8 第一步 引入对应的jar <dependency> <groupId>com.predic8</groupId> <artifactId>soa-model-core</artifactId> <version>1.6.0</version> </dependency&gt....

webservice接口开发学习笔记(一)

  |   0 评论   |   0 浏览

前言 有一段时间没有好好学习了,因为遇到一些糟心的事情,上班一直在划水摸鱼,本来打算摸鱼摸到事情尘埃落定。但想到与其摸鱼,还不如多学习点东西,不断的成长提升自己。 webservice简介 webservice:一种跨语言和跨平台的远程调用技术,即JAVA应用程序可以通过websrvice调用PHP或者Python等程序提供的服务,反之亦然。 实现一个webservice需要了解它的几个重要点(SOAP,WSDL,UDDI) SOAP 简单来说: SOAP = HTTP + XML 就是一个简单的数据交换协议 客户端通过发送一个HTTP请求,这个HTTP请求里面包含一个XML,服务端接收到请求后解析这个XML然后来调用对应的服务和方法,返回对应的数据。 WSDL 简单来说:WSDL就是告诉调用者应该怎么填写SOAP当中的XML文件里面的内容。服务端具体提供了什么服务,该怎么调用这个服务,该传递什么类型的参数。会返回什么类型的数据等等。 UDDI 简单来说:UDDI是用于描述、发现、集成Web Service的技术。 webservice相关框架 JWS:JAVA语言对WebServi....

AXURE RP EXTENSION For Chrome下载安装,程序包无效:“CRX_HEADER_INVALID”

  |   0 评论   |   0 浏览

Chrome 无法打开原型图 提示需要下载AXURE RP EXTENSION For Chrome 这个插件 百度网盘链接: https://pan.baidu.com/s/1Dvq0q1leKUpXwVQyyrAbtA 提取码: 666z 注意事项: 安装时提示 程序包无效:“CRX_HEADER_INVALID” 无法安装插件 这时可以将对应的crx文件后缀变成rar或者zip 解压出来,然后通过加载已经解压的扩展程序完成安装。

Http,Https,Restful,Webservice,WebSocket,Rpc,Rmi,SOA,分布式,微服务,集群等概念

  |   0 评论   |   0 浏览

前言 在JAVA开发学习过程当中,总是会接触到很多概念性的名词。特此简单的总结记录一下相关名词对应的概念。 HTTP协议和HTTPS协议,RESTFUL接口 HTTP协议:是Hyper Text Transfer Protocol(超文本传输协议)的缩写,这是非常常见的一种协议,简单来说就是一个无状态的基于TCP/IP协议实现的应用层协议。 HTTPS协议: 由于HTTP协议的安全性问题而出现的协议,可以理解成HTTP + 加密 + 认证 + 完整性保护 = HTTPS 通常表现为:HTTP+SSL/TLS=HTTPS。 PS:(现在打开一个网站,如果不是以https开头,而是以http开头的话,浏览器基本都会提示你网站不安全什么的!!!) RESTFUL:简单来说就是对HTTP请求的方式和路径的一种约束规则,一种思想。 只要是符合这种思想的HTTP接口都可以叫做RESTFUL接口 即同一个路径,相同的参数,请求方式的不同,得到的结果也就不一样。 相关资料: 关于HTTP协议,一篇就够了 HTTP和HTTPS协议,看一篇就够了 RESTful介绍和使用教程 WebSocket WebS....

springboot整合MongoDB

  |   0 评论   |   0 浏览

什么是MongoDB? MongoDB是为现代应用程序开发人员和云时代构建的基于文档的通用分布式数据库 MongoDB Windows下的安装 网上安装教程一大堆,不过官方网站的教程最详细:官网windows下安装MongoDB 安装完毕之后如果不出错的话,就可以在计算机的服务里面找到一个:MongoDB Server 的服务。 MongoDB 数据库 成功安装之后,可以通过安装目录bin下的mongo.exe 连接上MongoDB 数据库。输入help 可以查看相关帮助信息。 常用操作: show dbs 查看全部数据库 use dbname 切换到指定名称数据库,如果没有就创建 show collections 获取指定数据库下的所有集合 db.createCollection("user") 在当前数据库下创建一个名为 user的集合 db.user.insert({"name":"hjljy","age":18}) 向user集合里面插入一条数据 db.user.find() 查看user集合全部数据 其他操作见help或者官方网站说明:https://docs.mong....

设计模式学习笔记之组合模式

  |   0 评论   |   0 浏览

什么是组合模式? 组合模式的定义 Compose objects into tree structures to represent part-whole hierarchies.Composite lets clients treat individual objects and compositions of objects uniformly. 将对象组合成树形结构以表示 “部分-整体” 的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 主要优缺点 优点: 当需要在组合内添加新对象的时候,不需要修改源码,复合开闭原则。 对外提供的是同一个对象,使用起来不必关心使用的是单个对象还是组合对象。 缺点: 设计起来比较复杂,需要理清类之间的层次关系。 使用场景 系统对象之间存在整体--部分的关系,并有一定的相同行为。(JAVA中的swing,公司组织架构等等) 组合模式的结构和实现 组合模式结构 抽象根角色(Component):定义系统层级之间的相同行为,是树枝和叶子构建角色的公共抽象接口。 树枝角色(Composite):定义树枝角色的行为,可以存储子节点,子节点可以是....

Nginx学习日志(四)自定义404,500,502,503等错误页面

  |   0 评论   |   0 浏览

Nginx 错误页面自定义 通常在项目当中会自定义项目的错误界面,当请求不对或者请求错误什么的就会返回一个对用户比较友好的提示界面。 今天打算升级自己的博客客户端,发现在关闭博客程序后再次访问会跳转到Nginx的502错误界面,就想着能不能自定义一下错误界面。 第一步:准备错误界面 文件名为:50x.html <!DOCTYPE html> <html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>系统出错或升级当中</h1> <p>请稍后尝试或联系hjljy@outlook.com</p> </body> </html> 第二步:修改配置文件 修改ng....

设计模式学习笔记之外观模式

  |   0 评论   |   0 浏览

什么是外观模式? 定义:为子系统中的一组接口提供一个一致的界面,用来访问子系统中的一群接口。 外观模式主要组成 外观角色(Facade):负责子系统的的封装调用 子系统类(Subsystem Classes):具体的子系统,实现由外观模式Facade对象来调用的具体任务 外观模式代码实现 代码略。。。。。。 在实际开发当中,外观模式基本可以说一直在使用。在MVC架构的项目当中,在controller层通过service层来操作dao层就是外观模式的具体表现。 service 就相当于Facade对象 ,dao就相当于子系统。 外观模式注意事项和细节 外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性。 外观模式对客户端与子系统的耦合关系 - 解耦,让子系统内部的模块更易维护和扩展 通过合理的使用外观模式,可以帮我们更好的划分访问的层次 当系统需要进行分层设计时,可以考虑使用Facade模式 在维护一个遗留的大型系统时,可能这个系统已经变得非常难以维护和扩展,此时可以考> 虑为新系统开发一个 Facade 类,来提供遗留系统的比较清晰简单的接口,让....

springboot整合dubbo2.7.x版本

  |   0 评论   |   0 浏览

什么是Dubbo? Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 是的,是 Apache Dubbo,不在是Alibaba Dubbo。原因简单来说就是Alibaba 将dubbo 移交给Apache开源社区进行维护。 详情见这两篇文章: Dubbo正式进入Apache开源孵化器 从遇见到信任 | Apache Dubbo 的毕业之旅 Dubbo2.7.x版本变化 JDK版本需求上升到1.8 包名更换:com.alibaba.dubbo - > org.apache.dubbo 注册中心一分为三,变成注册中心,元数据中心,配置中心 异步支持优化 服务治理规则优化 ...... Dubbo生态系统 此图来源于Dubbo官网 SpringBoot 整合Dubbo2.7.x 环境信息: JDK 1.8 SpringBoot 2.2.1 Dubbo 2.7.4.1 准备工具:zookeeper 官网下载地址,新版dubbo_admin 官网下....

设计模式学习笔记之过滤器模式

  |   0 评论   |   0 浏览

过滤器模式学习总结 过滤器模式(Filter Pattern),又叫标准模式(Criteria Pattern),是一种结构型模式。 这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来,它可结合多个标准来获得单一标准。 优点:简单,解耦,使用方便。 使用场景:需要进行筛选时。 在开发当中接触过很多的过滤器,或者使用过stream的filter方法就非常容易理解这个模式。

一点小感触

  |   0 评论   |   0 浏览

做火车回家,有个老奶奶没买到坐票,列车长路过看到了,给老奶奶找了一个空位让老奶奶坐下,然后说有人问的话就说是我让坐的。 在这个信息爆炸的互联网时代,看多了网上各种不好言论和信息,莫名的有点小感触。 不是社会变坏了,而是好事不出门,坏事传千里。 记于2019年2月16日。D5184次列车

成长就是不停的翻山越岭

  |   0 评论   |   0 浏览

2015年11月底大四课程学完出来实习,到如今回首过往,是艰辛,是苦难,也是成长。 2016年 这一年,没钱,没技术,和室友挤在一个10多平的小房间,过年也没有回家(因为啥都没有如何回家)总之就是穷开心。 这一年,浑浑噩噩过日子,一片迷茫不知身在何处。 2017年 这一年,开始一点一点的成长。但依旧没钱,过年最终还是回家了(因为有钱没钱回家过年)。 这一年,依旧迷茫,但路灯已亮。 2018年 这一年,终于不再是月光族。 这一年,不断在成长,也会有所迷茫,但信念的种子已然种下。 这一年,收获爱情。 2019年 生活还在继续,人生还在前行。。。。。。。 感受 感受到了大城市的繁华,见识到了小城镇的落后,但是我依旧想归家。 感受到了同龄人的差距,发觉自己除了努力提升自己,别无它法。 感受到了肩膀上的责任,是压力也是动力。 ------- 记于2019/02/12

Nginx学习日志(三)配置SSL证书(网站由http转成https)

  |   0 评论   |   0 浏览

Nginx学习日志 Nginx学习日志(一)简单入门 Nginx学习日志(二)通过反向代理将不同域名映射到不同的端口 发现现在很多网站都变成了https,并且在浏览器当中如果是http类型的网站,还会提示网站不安全,所以打算将自己的博客换成https类型。 记录一下HTTP升级到HTTPS的过程。 网上看着很简单,但实际上还是遇到了不少的问题,不过还好,最终都一一解决了 什么是SSL证书? SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。 参考资料: https://yq.aliyun.com/articles/602965 https://www.sohu.com/a/225956682_596521 如何获取免费的SSL证书? 11种免费获取SSL证书的方式: https://www.toolmao.com/get-free-ssl (一篇非常详细的文章) 由于我是使用的阿里云服务器,所以是通过阿里云当中获取的免费SSL证书。 nginx里面如何配置SSL证书? 由于我在阿里云服务器上的网站使用了Nginx,这里主....

设计模式学习笔记之原型模式

  |   0 评论   |   0 浏览

前言 这是一篇学习笔记,内容很多是来源于网上的资料,按照自己学习情况进行的总结。 我的个人博客:海加尔金鹰 什么是原型模式 原型模式:通过已有的实例对象进行复制来创建新的相同对象。 特点: 1 必须已经有一个实例对象存在。 2 通过原型模式创建的对象避免了构造器的约束,即不会调用构造器。 3 通过原型模式创建的对象和原始的对象属性值是一样的。 原型模式的实现 核心结构  (1)Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类,它可是抽象类也可以是接口,甚至可以是具体实现类。 (2)ConcretePrototype(具体原型类):它实现抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。 (3)Client(客户端):在客户类中,让一个原型对象克隆自身从而创建一个新的对象。[^1] 核心代码 1 实现Cloneable接口 2 clone()方法 在java当中Object类种就有clone()方法 浅克隆和深克隆 浅克隆:当原型对象被复制时,只复制它本身和其中包含的值类型的成员变量,而引用类型的成员变量并没有复制。 深克隆:除了对象....

由Mybatis的时间类型计算报错引出的jdbcType

  |   0 评论   |   0 浏览

问题说明 最近在工作中有一个业务需求:传入一个时间,和数据库某个时间字段进行运算,返回相差的天数。很简单的一个需求,之前sql方面比较菜,都是现将数据查询出来然后在进行计算,刚好最近写了很多的sql,有所成长,知道可以通过ceil函数直接一条sql就能查询出我想要的数据,不需要查询出来之后在进行运算。 oracle 两个时间相减 出现的错误 sql和代码都写好之后,测试报错: ==ORA-00932: 数据类型不一致== 然后检查数据库字段类型,检查参数类型,都是Date类型。这个时候有点蒙圈 问题原因 最后一想,既然类型一致,那么在传参的时候传的是什么类型呢?查看mybatis sql日志。sql日志第二行,参数后面的类型显示为:timestamp。就想到了在传参的时候就指定参数类型,也就是jdbcType。设置了jdbcType=DATE之后问题就解决了。 下面是在网上找的jdbcType关系说明 JDBC Type Java Type CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDec....

六月再见,七月你好

  |   0 评论   |   0 浏览

毕竟西湖六月中,风光不与四时同。 接天莲叶无穷碧,映日荷花别样红。 不知不觉六月份就完结了,炎炎夏日的七月到来了。 六月再见 仔细回想六月份还是有不少的感悟值得记录下来。 工作上 到七月份,我就满三个月转正了,但是我可能要被迫离职了,据说公司业务重组失败了,五月份的工资还没有发,也不知道公司能不能坚持下去。 对微服务架构有一些简单的使用,但是就我们公司的目前项目情况来说,尽管用了微服务,还存在很多的冗余服务。也感受到微服务的一些好处和坏处,对我来说更多的是坏处,感觉调试起来非常麻烦。也可能是我的项目对基础服务的依赖比较大造成的。 如果你知道你的代码哪里可能存在问题,或者业务有些不对,有时间的话经量去修改完善。测试也好方便通过,后期也没有太多的麻烦要处理。 开始学习设计模式,提高自己的能力吧,来应对可能会到来的离职。不过最近不知道怎么回事IDEA破解失败了,需要重新破解了。 最后这一点,真的是有点受不了了,公司租的的华润大厦的办公楼,400多号人在一层,重点来了,一层楼就只有三个小便池,三个大便坑。你可以想象一下上个小便,有10%的几率排队,上个大便基本排队,是一种什....

quartz定时调度任务持久化到数据库后立即执行报错,更新任务报错引出的任务自动删除的相关问题

  |   0 评论   |   0 浏览

最近修改项目BUG,定时任务这一块有很多的BUG,改了很久,记录一下相关BUG 问题1 问题场景: 新建一个定时任务,设置定时任务执行时间:2019-06-26 18:00:00 (即只在这个时间点执行一次,然后就再也不执行了) 在到达执行时间之前,进行更新和立即执行都不存在任何问题。 在到达执行时间之后,进行更新和立即执行都报错 错误信息: org.quartz.JobPersistenceException: Couldn’t store trigger: The job (DEFAULT.task-etl-19) referenced by the trigger does not exist. 问题具体原因查找过程: 创建一个周期任务,设置任务每分钟执行一次。发现不会出现这种情况。 查看任务持久化物理表,发现定时任务(只执行一次的定时任务),在执行后会自动删除。 进行代码断点,查看在何处进行的删除,没找到。 进行各种任务属性对比初步推断是quartz框架自身的一种设计,如果没有下次执行时间的任务,会自动进行删除。 在网上查找很久,找到了一篇文章,Quartz Sche....