自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

martin-Cao

JAVA学习

  • 博客(37)
  • 资源 (4)
  • 收藏
  • 关注

原创 设计模式总览

1.了解7种设计原则按照功能小划分了一下单一设计原则:一个类只负责一个功能领域的相应职责接口隔离原则:使用多个专门的接口,而不使用单一的总接口开放封闭原则(总纲):软件实体应对 扩展开放,修改关闭里氏代换原则:所有引用基类对象的地方能够透明的使用其子类对象· (子类如果使用继承实现功能扩展的话,不要在子类中改变父类已经实现的方法,可以添加新的方法,然后在其中使用父类的方法进行扩展)依赖倒转原则:抽象不应该依赖于细节,细节应该依赖于抽象 (要面向接口或者面向抽象编程,...

2020-12-18 16:45:42 158 1

原创 创造型设计模式

创造型设计模式总览单例设计模式我之前个人理解主要分为两个部分:懒汉式和饿汉式,因此从懒汉和饿汉出发进行分析

2020-12-18 16:39:40 539 1

原创 手写Mybatis3-引入SqlSession并执行

之前已经完成了关于Configuration的构建,包括引入DataSource,创建Statemet,SqlSource,SqlNode等1.引入Mybatis执行流程图和层次结构图2.由流程图第一步应该是读取配置文件信息,封装到SqlSessionFactory并创建 由于SqlSessionFactory的创建方式有多种,使用构建者模式封装创建细节 在内部完成之前的构建Configuration操作,并一直携带Configuration操作...

2020-12-11 10:16:53 385 1

原创 手写Mybatis解析2-解析Mappers

1.首先根据路径获取对象解析(流程与获取Environment一致)获取资源位置 获取输入流 获取Document对象 创建解析对象,解析Document2.对Mapper文件进行拆分理解rootElement是mapper,存在一个value - namespace 唯一标示一般来说存在子标签<select></select> <update></update> <delete></delete>...

2020-12-10 16:02:31 109

原创 手写Mybatis解析1-读取SqlMapConfig.xml

1.简要思路分析 1.1配置文件的编写 一般存在两种配置文件,分为两份的目的是:利于维护。如果需要修改sql语句,只需要找到针对的映射文件即可 1)全局配置文件(会加载映射文件) 存放数据库相关操作 2)映射文件 返回集,sql 1.2加载配置文件 加载流程如下: 1)获取配置文件路径 ...

2020-12-09 09:29:21 182

原创 批量导出Excel到Zip(基于Jxls)

由于公司业务需求,需要批量导出Excel到Zip中,导出Excel使用的技术是Jxls在此不做jxls的讲解,如有需要看大神的专业讲解:https://www.cnblogs.com/foxlee1024/p/7616987.html附上一个小型Demo:明确一件事情:response目前主要是输出zip的内容 @GetMapping(value = "/export/purchaseOrders") public void purchaseAcceptExports(HttpS

2020-07-21 09:56:59 489

原创 基于Springboot实现不同数据源的操作

1.首先引入依赖 <dependencies> <!-- springboot核心包--> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web --> <dependency&g...

2020-04-11 16:25:10 850

原创 Redis Cluster<二> 安装实现

一.在Linux上安装redis1)在redis官网下载redis.tar.gz2)执行tar -zxvf redis.tar.gz3) 进入redis文件夹,执行,make,make install4)使用redis.conf后台启动将redis.conf里面的daemonize no改成 yes,将protected-mode yes,改为no(开启后台服务和关闭保护模式)在 bind 127.0.0.1前面加上#号 ,修改完按Esc 然后输入:wq5)启动redisredis

2021-01-29 16:46:00 218

原创 Redis Cluster<一> 基础介绍

RedisCluster是Redis推出的官方集群解决方案在此之前,先了解Redis的集群演变过程(不做实现,只分析)一、主从复制缺点:如果主Redis服务器宕机后,从服务器不能晋升为主服务器,从而导致redis服务时效二、Redis哨兵机制在主从复制之间引入哨兵哨兵机制可以通过raft选举将从服务器晋升为主服务器,并通知到客户端。缺点:Redis不好在线扩容,集群容量一旦达到上限,在线扩容就十分麻烦。 实现哨兵模式的配置繁琐三、Redis集群(非官方).

2021-01-29 11:27:23 222

原创 行为型设计模式

行为型设计模式在此简单介绍下策略模式和模版模式策略模式策略模式可以说开发过程中用到的比较多的设计模式什么是策略模式? 类似于锦囊妙计,对外来说,这些精囊妙计长得完全一样 策略模式的组成? * 抽象策略角色: 策略类,通常由一个接口或者抽象类实现。 * 具体策略角色:包装了相关的算法和行为。 * 环境角色:持有一个策略类的引用,最终给客户端调用。应用场景: 1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。 2、 需要在

2020-12-18 19:16:40 158

原创 结构型设计模式

结构型设计模式主要讲下适配器模式,装饰模式,代理模式 加 委托模式(不属于23种设计模式,但是特别常见,注意与代理模式的区分)适配器模式适配器模式(adapter) 作用:将一个类的接口转换成另外一个客户希望的接口 适配器模式分为两种: 类的适配器模式:基于继承 对象的适配器模式:基于组合模式或者委托模式 角色: 目标接口:客户希望看到的统一接口 Adaptee:被适配的类 Adapter:适配器 也就是说

2020-12-18 19:09:52 181 1

原创 Mybatis插件开发

1.插件配置在Xml中声明plugin在XmlConfigBuilder中会扫描到插件并循环插入到拦截器队列中2.插件应用在Executor,ParameterHandler,ResultSetHandler,StatementHandler处都会进行插件的全匹配应用3.编写自定义插件只需要实现Intercepor接口,注意一定要加注解...

2020-12-14 09:28:45 115

原创 线程池(值得收藏)

1.说一说你使用的是什么样的线程池,自定义线程池的几个参数是什么一般使用默认线程池,有四种线程池:newCacheThreadPool 缓存线程池,超出部分如果有空闲部分则回收,如果没有则新建 newFixedThreadPool (共享无界)提交一个开辟一个新线程,如果满了就进入到线程池队列 newSingleThreadPool 单线程线程池,确保FIFO线程执行,一个线程结束会顺序执行下一个 newScheduleThreadPool 定长线程池,支持定时的周期的执行线程策略注意如

2020-05-29 14:01:00 267

原创 关于Volatile见解

1.基础volatile就可以说是java虚拟机提供的最轻量级的同步机制(1)Synchronized:保证可见性和原子性 Synchronized能够实现原子性和可见性;在Java内存模型中,synchronized规定,线程在加锁时,先清空工作内存→在主内存中拷贝最新变量的副本到工作内存→执行完代码→将更改后的共享变量的值刷新到主内存中→释放互斥锁。(2)Volat...

2020-04-29 18:04:15 334

原创 目前常见的认证机制

常见的认证机制HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被使用的越来越少。因此,在开发对外开放的RESTful API时,尽量避免采用HTTP Basic Aut...

2020-03-23 15:08:52 232

原创 使用切面进行方法执行展示

目标:使用切面将调用方法开始+方法结束展示,并显示关联参数@Aspect@Component()@Slf4jpublic class MethodExecutionLogAspect { @Pointcut(value = "execution(public * org.hzqisheng.controller..*Controller.* (..)))") private ...

2020-03-23 15:08:24 761

原创 基于BCrypt进行密码加密

之前写了一篇文章关于MD5加密的文章MD5+盐,但是如果知道加盐的规则,很容易进行反向破解,也不安全。因此引入BCrypt加密算法进行加密1.为什么BCrypt比MD5+盐更加安全? BCrpyt也是输入的字符串+盐,但是与MD5+盐的主要区别是:每次加的盐不同,导致每次生成的结果也不相同。无法比对!2.使用Bcrypt(注解开发) 结合SpringSec...

2020-01-10 11:41:08 1221

原创 SpringBoot实现自定义注解并解析

注解1.什么是注解(annotation) 最常见的注解就是@Override 覆盖超类的方法。 注解和源码结合在一起,可以经过编译和测试,附带有额外的功能。 自定义注解可以搭配注解处理器生成一些特定的信息和功能。 注解可以使代码变得更加简洁和比编译器的类型检查等。2.注解的基本知识注解主要有四种元注解,主要作用就...

2019-12-25 14:25:22 1051

原创 单点登录SSO登录原理

近期公司的一个项目接入了SSO单点登录系统,于是了解了下SSO单点登录的原理。一、共享Session使用场景:子系统少,应用场景简单。使用方法:使用Redis存储sessionId实现session共享缺陷:扩展性弱,使用场景小二、基于Cookie携带OpenId使用场景:在同一个顶级域名下的SSO登陆使用方法:将OpenId放到顶级域名的Cookie中,访问不同...

2019-11-04 09:53:20 180

原创 MD5+随机盐

由于传统的MD5加密,黑客可以通过查散列值字典(例如彩虹表),得到某用户的密码。因此目前可以用MD5加密配合上随机盐值,可极大的防止密码被破解。public static String generate(String password, String salt) { password = md5Hex(password + salt); char[] cs = new cha...

2019-10-29 16:05:17 1755

原创 分布式Id解决方案

1.UUID常见的方式。可以利用数据库也可以利用程序生成,一般来说全球唯一。优点:1)简单,代码方便。2)生成ID性能非常好,基本不会有性能问题。3)全球唯一,在遇见数据迁移,系统数据合并,或者数据库变更等情况下,可以从容应 对。缺点:1)没有排序,无法保证趋势递增。 2)UUID往往是使用字符串存储,查询的效率比较低。3)存储空间比较大,如果是海量数据库,就需要考虑存储量的...

2019-08-03 10:14:11 162

原创 关于mysql无法导入数据量很大的sql文件

在导入商城的sql文件的时候,经常会报错,查看报错信息是因为sql文件未完全读取,只读取了大概2M。通过查看文件,mysql默认的读取sql文件就是1024*1024*2因此默认的最大读取就是2M,要通过修改mysql的设置或者配置文件单次解决方案(重启后失效):用cmd进入mysqlset global max_allowed_packet=160*1024*1024;这...

2019-08-02 10:25:44 451

转载 JDK8.0新特性

转自:https://blog.csdn.net/u014470581/article/details/54944384

2019-07-30 09:57:52 413

原创 关于抽象类和接口的一些知识

1. 抽象类举一道常见的java基础面试题:抽象类必须要有抽象方法吗?答案是不需要,抽象类中可以有非抽象的方法,可以正常编译。abstract class Cat { public static void sayHi() { System. out. println("hi~"); }}2.接口在看完上面的关于抽象类的问题后,一般会习惯性的联...

2019-06-24 14:55:06 151

转载 JAVA实现简单的RPC

1.远程调用方式无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?常见的远程调用方式有以下几种: RPC:Remote Produce Call远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型 Http:http其实是一种网络传输协议,基于...

2019-06-13 09:32:06 259

原创 ajax的跨域问题解决二:利用CORS

1.了解什么是CORSCORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。 浏览器端: 目前,所有浏览器都支持该功能(IE...

2019-06-10 18:45:19 212

原创 ajax的跨域问题解决一:利用jsonp解决

关于jsonp的一些原理,大家可以百度下面贴出一个我找到的jsonp详解传送门关于jsonp的用法:$.ajax({ type : "get", url : url, data : {detailMddm:detailMddm}, dataType : "jsonp", j...

2019-06-10 18:39:56 149

原创 springcloud开发过程中遇到的跨域问题

首先我们得明白为什么会出现跨域问题:跨域问题是浏览器对于ajax请求的一种安全限制:当一个页面发起ajax请求时,只能是当前页面路径下的页面可以获得数据,能有效防止跨站攻击解决办法:目前常见的解决办法有三种:1.jsonp 最早的解决方案,利用script标签实现跨域的原理。 限制: 1)需要服务的支持。 2)只能发起Get请求2...

2019-06-09 21:39:43 566

转载 Restful风格的常用四种请求方式

1、GET[select]请求会向数据库发索取数据的请求,从而来获取信息,其只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容。无论进行多少次操作,结果都是一样的。2、PUT[update]请求是向服务器端发送数据的,从而改变信息,其用来修改数据的内容,但是不会增加数据的种类等,无论进行多少次PUT操作,其结果并没有不同。3、POST[insert]请求同PUT请求类似,...

2019-05-31 16:43:48 3432

原创 IntelliJ IDEA 使用(2)

通过昨天一天的学习,然后将IDEA中的快捷键设置为了eclipse的快捷键。为了验证idea的使用,我设计开发了一个Maven项目的Demo。在开发过程中还是遇到了点麻烦,简单的说一下:1.tomcat的配置,与eclipse不同,不是直接addprojiect,他是有一个development,这里的选项是一个arifacts,在project struct中我们可以选择该属性,我是...

2019-05-07 10:50:58 125

原创 IntelliJ IDEA 使用(1)

第一天解除IDEA,对于我这个使用了很久的Eclipse的人来说,有点不适应。在此记录下我的学习日志,主要是和eclipse进行对比:1)project和module相对于eclipse中的对应关系: project相当于eclipse中的workspace,module相当于eclipse的project。这种使用方法,能够更好的适应模块化开发。 比如我在学习...

2019-05-06 10:36:57 103

原创 springmvc和struts2的区别

1.struts2的入口主要是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter过滤器 springmvc的入口主要一个servlet前端过滤器org.springframework.web.servlet.DispatcherServlet2.springmvc主要是根据url进行开发,可以为...

2019-05-04 08:58:03 288

原创 hibernate与mybatis的区别

1.hibernate是一个完全的orm框架,利用的是完全面向对象的思想。mybatis是要在mapper.xml中书写sql语句的,mybatis的执行思路是通过xml配置sql语句,用java对象和sql语句映射最终执行sql语句,再将sql语句映射为java对象2.mybatis学习简单,特别是mybatis的逆向工程,可以一步生成,然后使用example可以简洁开发。h...

2019-05-03 08:54:41 290

原创 mybatis中使用逆向工程

在开发过程中,我们使用mybatis时,书写mapper文件里面的sql语句时,会特别繁琐,特别是表如果特别多,我们书写pojo包都需要很久,因此mybatis集成了一个逆向工程,可以直接生成pojo包和对应的mapper文件。接下来我们了解其怎么实现:1.导入逆向工程项目 里面的GeneratorSqlSqlmap.java是其主程序,与其相关的是generator...

2019-05-03 08:15:10 193

转载 不推荐使用JDBC的原因

1.数据库连接创建、释放频繁会造成资源的浪费,从而影响系统的性能。如果使用数据库连接池技术可能会使其好转。2.sql语句中存在硬编码问题,造成代码的不易维护,实际应用中sql变化的可能较大,容易造成整体的java代码的改变3.使用prepreparedStatement向占位符传递参数存在硬编码问题,因为sql中的where条件可能不一定,可能多和少,很容易要造成修改sql代码,系统不易维...

2019-04-29 09:35:31 774

原创 MAVEN中servletFilter报错

今天刚刚接触到MAVEN,然后把MAVEN相应的配置好,创建第一个MAVEN项目并启动时,在控制台报错java.lang.ClassCastException:……通过网络很多大佬的blog,发现这是因为我在整合struts2时,依赖使用了jsp-api 和 servlet-api有重复,因此会报出此类错误。但是我们不能少这两个依赖的任意一个,否则会出现报错。解决方案...

2019-04-24 08:34:04 1187

原创 当数据库存在外键关联,后台处理list或者map,转换为json时候的死循环问题

在进行一个AJAX请求时,我在后台处理好数据后,得到一个list集合,利用gson转换为json传到前台进行显示。 但是发现,前台的json一直为空,所以进入debug,发现在gson.toJson(list);这一步一直是死循环。通过查看他人bolg和经验贴,发现如果list得到的数据,是存在外键,然后封装数据用对象封装的话,会造成外键的互相关联,导致死循环。解决方案一:直接取了...

2019-04-12 18:39:27 377

化妆品购物网页

可以看一下展示的页面https://blog.csdn.net/qq_38035507/article/details/80900047

2018-07-03

在线点赞系统

稍加修饰和加一点拓展,就可以改成毕业设计样式。也可以扩展为问卷调查系统!

2018-06-08

模拟科目一进行答题

利用mvc开发模式,创造的一个模拟科目一考试的demo,修饰下前端,和加入一些自己的功能,可以做一个项目。

2018-06-08

jsp实现的模拟考试系统

小项目但是其中一些小的知识点的掌握还是很必要的,1分支持下,谢谢。

2018-06-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除