默认序列化器序列化器:RedisTemplate的默认序列化器是JdkSerializationRedisSerializer
可以通过查看RedisTemplate源码查证
数据转换:该序列化器会将数据序列化成对象,在redis中是以二进制的方式进行存储的。
注意:要保存的数据对象必须要实现Serializable,否则会提示没有序列化。
优点: 可以保存任意Java对象,并且序列化后的数据体积相对较小。
缺点: 由于以二进制方式存储,所以数据的可读性非常差。且序列化和反序列化过程相对较慢。
假设我们要存储一组数据,key为”name”,value为”橘生淮南”,在Java中代码如下:
123456redisTemplate.opsForValue().set("name","橘生淮南");/** //这里的redisTemplate在类中已经进行自动装配* @Autowired* private RedisTemplate redisTemplate;*/
运行后我们查看存入数据库的内容
可见,默认序列化器对key和v ...
Entity:与数据库表一一对应的实体类含义: 也写为po、pojo、domain,代表系统中的一个具体的实体,如用户、订单、产品等。通常是将其映射到数据库表的对应实体,包含该实体的属性和相关方法。
个人理解: 即数据表有什么字段,entity实体类就有对应的字段,entity与数据库是一一对应的关系。
DTO:接收前端传来的数据含义: DTO(Data Transfer Object,数据传输对象),在这里泛指用于展示层与服务层之间的数据传输对象。
个人理解: DTO定义前端发送回来的消息,这些消息被放到一个DTO实体类中,这个实体可能包含了多个实体类的字段。
Tip: 数据传输对象,这个概念来源于 J2EE 的设计模式,原来的目的是为了 EJB 的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载。但目前泛指用于展示层与服务层之间的数据传输对象。
VO:返回给前端的数据含义: VO(View Object,视图对象),用于在展示层显示数据,通常是将表示数据的实体对象中的一部分属性进行选择性的组合形成的一个新对象,目的是为了满足展示层数 ...
问题描述在使用AOP实现日志记录功能时,用到了JSON.toJSON()将joinPoint.getArgs()数据转换为Json串,运行时抛出异常Caused by: java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false)
原因分析及解决方法原因分析抛出该异常的主要原因是JSON.toJSON()转换数据时要求入参必须是能够进行序列化的数据,如果入参不能序列化,则会抛出上述异常。
解决方法将不能进行序列化的入参对象过滤掉,只要留下我们所需数据即可。对于这里的joinPoint,我们只需要去除request和response对象即可
判断request和response的代码:
1234567//object为遍历出来的参数,逐个判断是否为request或responseif (object instanceof HttpServle ...
简述:
Handler(处理器):Handler是处理请求的组件,常见形式是一个Controller类或方法。**Handler是直接参与请求处理的主体,其负责接收具体的请求并执行相应的业务逻辑,然后返回响应结果。除了Controller,一般还有异常处理类(如:GlobalExceptionHandler,可对Controller抛出的异常进行处理,并可像Controller返回结果)。
注意,Controller是Handler,但Handler不一定是Controller。
Interceptor(拦截器):Interceptor是Spring框架提供的一种基于AOP的拦截机制,它可以在请求的处理过程中进行预处理和后处理。Interceptor可以在请求到达Handler之前(preHandle)、在Handler执行后返回结果之前(postHandle)、以及在响应返回给客户端之后(afterCompletion)进行拦截操作。Interceptor可以对请求进行修改、记录日志、进行权限验证等操作。
AOP(Aspect-Oriented Programming):面 ...
一、快速使用指南1.1 使用模板new PriorityQueue<>(k,Comparator)
(可选)k表示初始容量,默认容量为11
(可选)Comparator为比较器,用于告诉编译器如何比较大小或者修改为大根堆(默认是小根堆)
12PriorityQueue<ListNode> pq = new PriorityQueue<>(lists.length,(a,b)->(a.val-b.val));//这里定义比较器是明确如何比较两个ListNode的大小,否则编译器不知道如何比较。仍然是小根堆。
1.2 操作说明1.2.1 增
方法
返回值
插入失败时抛出异常
add
无
是
offer
布尔型(boolean)
否,返回false
注意,不能插入null对象,否则会抛出NullPointerException
没有容量限制,可以插入任意多个元素,其内部可以自动扩容
实际上因为优先队列会自动扩容,队列不会满(除非硬盘空间不足),所以对于优先队列而言,add和offer没啥区别
1.2.2 删出队:E ...
一、搭建环境
VMware虚拟机(Ubuntu 16.04 64位)(自备)
Java Development Kit(JDK)1.8
二、实验步骤与实验结果1.创建Ubuntu16.04虚拟机选择典型安装,选中提前准备好的Ubuntu16.04镜像文件
这里创建名为sorange的用户
硬盘内存分配40GB,处理器2个、2核,其余保持默认即可。
点击完成后进入Ubuntu安装界面。
2.修改Ubuntu语言为简体中文
*如果安装过程中已经选择了中文,则可以跳过该步骤。
安装完成中文语言包后,需要将“汉语(中国)”拖动到第一位,并点击Apply System-wide应用到全局。
之后点击Regional Fomats修改区域格式为汉语(中国),修改完成后重启虚拟机。
重启完成后会提示是否更新标准文件夹名称,这里选择更新名称。
三、修改Ubuntu软件和更新镜像节点为中国镜像服务器 打开Ubuntu的“设置-软件和更新”选择“中国的服务器”,如果弹出框要选择具体域名,则选择带有aliyun的镜像域名。
四、在Ubuntu中创建hadoop用户 打开Ubu ...
一、基本数据类型的存储方式1.1 作为成员变量时 如果没有被 static 修饰的话,就存放在堆中。
不建议如此使用,应当使用基本数据类型对应的包装类型
被static修饰,就存放在方法区中。
什么是static?
Java中的static关键字用于修饰成员变量和成员方法,表示它们属于类而不是对象。在Java中,每个类都有一个对应的Class对象,当类被加载时,它的Class对象会被创建并保存在方法区(Method Area)中。static成员变量和方法都存放在方法区中的Class对象中,而不是存放在堆内存中的对象中。
1.2 作为局部变量时 存放在 Java 虚拟机栈(VM Stack)中的局部变量表中。
Tip:一个虚拟机栈帧包含局部变量表、方法返回地址、操作数栈、动态链接和一些附加信息
二、包装类型的存储方式 包装类型属于对象类型,我们知道几乎所有对象实例都存在于堆中。
为什么说是几乎所有对象实例都存在于堆中呢?
这是因为 HotSpot 虚拟机引入了 JIT 优化之后,会对对象进行逃逸分析,如果发现某一个对象并没有逃逸到方法外部,那么就可能 ...








