JAVA
DavidQian谛听
后端编程爱好者。
展开
-
幂等性原理
什么是幂等性HTTP/1.1中对幂等性的定义是:一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。Methods can also have the property of “idempotence” in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the s翻译 2020-09-14 22:49:01 · 913 阅读 · 0 评论 -
静态代理、动态代理和反射
静态代理、动态代理和反射一、解析代理的含义要讲清楚代理,最好想说一下比喻。代理类就像是中介,委托类就是客户,中介直接跟房主沟通(相当于委托类的原始方法操作,原始方法就是客户跟房主沟通的),中介顺便抽一下油水(相当于代理类的增强操作,所谓增强操作就是附加在原始方法前后的操作,让原来的操作得到增强),然后中介就代客户完成了买房沟通的操作,这就是代理的意思。二、静态代理静态代理就是代理类和目标类实现同一个接口,让代理类持有目标类对象,在代理类中执行目标类方法,实现增强。比如有个Student接口,Stud原创 2020-08-20 18:24:35 · 377 阅读 · 0 评论 -
关于java异常及全局异常处理实现
关于java异常一般来说,当程序遇到错误,应该尽量处理错误,然后按照正确的姿势退出程序。否则,你可以想象一下当客户使用系统的时候,突然系统异常,直接报了一堆用户不知道的代码提示,这是多么难堪的局面。一、异常的结构异常有一个共同的祖先Throwable,其关系结构如下如图所见,Throwable有两个重要的子类,Error和Exception。ErrorError代表的错误是程序无法处理的,这表示程序中出现了严重的问题,比如OutOfMemoryError、ThreadDeath,当出现这些原创 2020-08-19 16:36:32 · 1255 阅读 · 0 评论 -
Spring Boot整合分布式Shiro
Spring Boot整合分布式Shiro1. shiro基础知识Shiro是Apache下的一个开源项目,我们称之为Apache Shiro。它是一个很易用与Java项目的的安全框架,提供了认证、授权、加密、会话管理,与spring Security 一样都是做一个权限的安全框架,但是与Spring Security 相比,在于 Shiro 使用了比较简单易懂易于使用的授权方式。shiro属于轻量级框架,相对于security简单的多,也没有security那么复杂。Subject:主体,代表了当原创 2020-07-29 19:38:58 · 1198 阅读 · 0 评论 -
使用shiro时发生的报错处理
1.Unable to evaluate the expression Method threw 'org.hibernate.LazyInit no SessionHibernate 懒加载在查询实体的时候,不立即加载关联属性,但是在一次主体查询完成后立即关闭Session。比如说user和role多对多关联采用懒加载,在查询user的时候就不会立即查询加载user的role,但是查询完user后Session就关闭了。想要避免这种错误就要保持操作的事务性,即在查询user时一直保持session。只需原创 2020-07-29 11:36:17 · 554 阅读 · 0 评论 -
JPA+MySQL详解
JPA+mySQL详解首先明确两个端的关联关系,在java实体类定义中,含有mappedBy属性的时关系被维护端,含有关联字段的是关系维护端。一、OneToOne关联关系假设有实体People和Address,他们的关系是一对一,再设定People实体是关系的维护端,应有如下设计//People.java@Entity@Table(name = "people")public class People { @Id @GeneratedValue(strategy = Gener原创 2020-06-28 23:45:56 · 3679 阅读 · 0 评论 -
Spring Boot Maven profile
Spring Boot Maven profile一、配置pom.xml配置与pom文件中与dependencies属性同级的profile<profiles> <profile> <id>dev</id> <properties> <!-- 自定义字段,这里用来代表当前环境 --> <profiles.active>dev<原创 2020-06-28 10:08:04 · 1271 阅读 · 0 评论 -
mongotemplate聚合操作 - Specified class is an interface
这是我在使用MongoTemplate时使用管道操作unwind发生的,一开始我以为是返回的对象有问题,无法映射上去。实际上,使用unwind确实是带来数据结构的变化,例如:{ "_id" : ObjectId("5951ca15567ebff0d5011fbb"), "name" : "陈晓婵", "address" : "北京朝阳", "lunch" : [ ...原创 2020-04-03 13:13:34 · 432 阅读 · 0 评论 -
数据库、数据源、数据库连接、数据库连接池的关系
数据库、数据源、数据库连接、数据库连接池的关系数据库数据库就是包含了很多数据的容器,当然这些数据可能存在不同的小容器(表)里面,总之,如果用水来形容数据,那么数据可就是水库。数据源数据源是连接到数据库的一类路径,它包含了访问数据库的信息(地址、用户名、密码)。数据源就像是排水管道。数据库连接数据库连接是根据数据源产生的实际连接上数据库的路径,数据库连接就像是管道里面的水管,这些水管都按...原创 2020-02-07 15:18:01 · 2763 阅读 · 0 评论 -
关于SpringBoot 2.x的@Autowire注解的问题
关于SpringBoot 2.x的@Autowire注解的问题1. 为什么@Autowire最好注解在接口而不是实现类Spring中使用了大量的AOP技术,默认使用的是JDK动态代理,JDK动态代理只能对实现接口的类生成代理,而不能针对类,得到的代理类是实现类的增强(也就是多了一些功能)。如果注解在实现类上将不能使用JDK动态代理技术。并且,当注解在接口上的时候才会按@Autowire的注入B...原创 2019-12-19 15:37:47 · 773 阅读 · 0 评论 -
浅谈Redis分布式锁
Redis分布式锁为什么需要分布式锁在java代码中,synchronized关键字和一些java类型锁都是线程级别的,只能对同一个JVM中的线程有效。假如在同一个操作系统中有两个不同的进程中的两个线程对共享资源进行访问,线程锁是不起作用的。但是现代软件系统在很多情况下更为复杂,不仅是在同一操作系统中的不同进程的不同线程可能对共享资源进行访问,在分布式系统环境下,不同操作系统的中不同进程的不同...原创 2019-11-20 10:37:41 · 159 阅读 · 0 评论 -
Spring Boot JPA
Spring Boot JPAJPA(Java Persistence API)意即Java持久化API,主要包括三方面的技术ORM元数据API:操作实体对象进行CRUD操作查询语言:通过面向对象的JPQL查询数据JPA与Hibernate、Spring Data JPAJPA是一种ORM规范,提供了一些API接口,并不是ORM实现。Hibernate Jpa则是Hibernat...原创 2019-11-18 11:34:01 · 313 阅读 · 0 评论 -
面向切面编程AOP
面向切面编程AOPAOP的理念AOP(Aspect Orientd Programming)面向切面编程,是指将分散在各业务逻辑代码中相同代码块抽取出来,在业务流程执行需要时,再将这段代码块注入到业务流程的指定位置。AOP的实现关键是AOP代理,AOP代理分为静态代理和动态代理。AOP静态代理AOP静态代理的代表是Aspect,与Spring AOP的主要区别是其基于字节码操作。Aspec...原创 2019-10-10 22:33:35 · 136 阅读 · 0 评论 -
自己整理的Spring Boot的注解
Spring Boot注解注解解析@MapperScan@MapperScan加在应用程序类上,通过指定路径表明对该路径所有的接口都具有@Mapper注解@Mapper可以不用再写mapper的xml映射文件,自动生成@Mapper标注的接口的实现类,生成的实现类自带@Component注解@RequestBody接收的参数来自requestBody,通常用...原创 2019-09-27 15:58:00 · 185 阅读 · 0 评论 -
Spring Boot 定时任务和邮件任务
Spring Boot 定时任务和邮件任务Spring Boot真是一个贴心的快速开发框架,你还在为设置Linux定时任务烦恼吗,你还在为寻找合适的邮件插件烦恼吗,对不起,我没有这些烦恼,因为我使用spring boot定时任务首先要在主程序类加上启用定时任务的注解@EnableScheduling@EnableScheduling @SpringBootApplicationpu...原创 2019-09-27 11:25:27 · 275 阅读 · 0 评论 -
JDK安装和环境变量配置
安装JDK网址:https://www.oracle.com/technetwork/java/javase/downloads/index.htmlJava SE就是Java Standard Edit,翻译过来就是Java的标准版,点击DOWNLOAD。这个是JDK8,翻译过来是Java标准版开发者工具包第8版,要先选择接受证书条款才能下载,下载完直接安装,可以自己指定安装JDK的文...原创 2019-02-19 15:31:24 · 141 阅读 · 0 评论 -
JAVA == 和 equal() 详细解释
关于 ==当使用 == 判断两个主数据类型(byte,int,double … )的变量时, == 号判断的是两个变量的值是否相等。当使用 == 判断除了两个引用类型的两个变量时, == 号判断的是两个引用变量所指向的地址是否相等。关于 equals()equals()方法是超类Object的一个方法(),所有JAVA的类都继承于Object,意味着所有JAVA的类都有equals(...原创 2019-07-24 11:40:33 · 3910 阅读 · 0 评论 -
关于cookies、session、token(JWT)的浅薄理解
关于cookies、session、token(JWT)的浅薄理解无状态的HTTPWeb应用程序是使用HTTP协议传输数据的,而HTTP是无状态的,在一次数据通信完成后,客户端和服务器端的连接就会关闭,再一次需要通信交换数据就需要重新建立新的连接。也就是说,当前HTTP通信无从得知历史的HTTP通信交换过什么数据,这就是无状态。Cookies由于现在大部分的应用中需要前后的操作具有关联性,...原创 2019-08-06 11:33:19 · 285 阅读 · 0 评论 -
Spring Boot集成redis(redsiTemplate操作Value,List,Set,Hash,缓存注解,事务,流水线)
Spring Boot集成redis(redsiTemplate,缓存注解,事务,流水线,redis分布式锁)redis是一个高性能的NoSQL的key-value内存数据库,主要被用作缓存,支持丰富的数据结构如String、List、Set、ZSet、Hash。Spring Boot对于redis集成有两种使用方式:一种是手动操作RedisTemplate,另一种是使用redis缓存注解。...原创 2019-09-06 15:20:01 · 897 阅读 · 0 评论 -
Spring Boot集成MongoDB
Spring Boot集成MongoDB关于MongoDBMongoDB是由C++编写的,基于分布式文件存储的NoSQL数据库。它将数据存储为一个文档,文档的数据结构由key-value组成,因而MongoDB文档类似JSON对象。MongoDB支持海量存储,性能很高,查询很快。MongoDB可以快速并且安全的实现故障节点转移,具有高可用性;MongoDB支持地理位置、二维空间索引;当数据规模...原创 2019-09-18 18:05:29 · 202 阅读 · 0 评论 -
Java 多线程 初阶
Java 多线程 初阶并发与并行并发:多个线程在一段时间内交替运行,某一时刻只有一个线程在运行并行:多个线程在某一时刻同时运行进程和线程进程:是拥有系统资源的基本单位,有独立的地址空间,切换开销较大线程:是系统调度的基本单位,线程本身不拥有系统资源,同属一个进程的多个线程共享进程中的资源,没有独立的地址空间,只是进程的不同执行路径,切换开销较小多线程的优缺点优点:多线程可...原创 2019-09-20 16:51:28 · 153 阅读 · 0 评论 -
BeanNotOfRequiredTypeException: Bean named 'consumerServiceImpl' is expected to be of type
在测试Spring Boot功能代码的时候,出现了这个错误Unsatisfied dependency expressed through field 'consumerService';nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'consu...原创 2019-09-26 17:05:05 · 7026 阅读 · 0 评论 -
Spring Boot消息队列之RabbitMQ
消息队列什么是消息队列(message queue)消息队列是应用系统之间通信的方法,本质是队列,具有先进先出(FIFO)的特点,队列的元素是消息,所以叫消息队列,是一种中间件。应用场景场景说明:用户注册后,需要发送邮件和短信,然后返回客户端完成验证,传统方式有串行和并行方式。(异步处理)串行方式:将注册信息写进数据库后,再发送邮件,然后发送短信,三个操作完成后才返回客户端,很慢。...原创 2019-09-26 17:31:51 · 725 阅读 · 0 评论 -
Head First JAVA 读书笔记
一JAVA程序执行过程:源代码(.java) 经过编译形成字节码组成的 .class文件,启动JAVA虚拟机(JVM)来运行.class文件。JVM会将字节码转换成平台所能理解的形式来运行,所以JAVA是平台无关的。二JAVA中所有东西都会属于某个类,源文件.JAVA会被编译为类文件.class,真正被执行的是类文件。main()函数是程序的起点。三...原创 2018-12-20 00:18:22 · 201 阅读 · 0 评论