自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 SpringBoot项目中自定义Redis的序列化方式以及封装RedisUtil

我们项目中经常用到Redis,而且存的值很多是json格式。所以这边我就自定义了RedisTemplate来修改Redis的序列化方式。而且封装了常用的Redis的操作。一、创建自定义配置类RedisConfigpackage com.riemann.springbootdemo.config;import com.fasterxml.jackson.annotation.JsonAuto...

2020-03-30 22:20:01 482

转载 CSDN如何编辑数学公式

1、四则运算$a+b$ 显示效果 a+ba+ba+b$a-b$ 显示效果 a−ba-ba−b$a*b$ 显示效果 a∗ba*ba∗b$\frac{a}{b}$ 显示效果 ab\frac{a}{b}ba​2、幂指对$x^n$显示效果 xnx^nxn$\log_a^b$显示效果 log⁡ab\log_a^blogab​$\ln x$显示效果 ln⁡x\ln xlnx由此可以知道:上...

2020-03-29 22:01:16 347

原创 数据结构与算法分析:(十一)散列表(上)
原力计划

文章目录一、散列表概念二、散列函数三、散列冲突一、散列表概念散列表(Hash Table),我们平时叫它哈希(Hash)表。散列表的实现常常叫做散列(hashing)。散列是一种用于以常数平均时间执行插入、删除和查找的技术。但是,那些需要元素间任何排序信息的树操作将不会得到有效的支持。散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如...

2020-03-29 21:47:44 376

原创 源码解读之(七)BeanUtils.copyProperties
原力计划

一、前言关于对象的复制我们有好几种方式,最近在做推荐系统,有这样的一个功能点,根据手机的唯一标识imei,copy 目标手机的 imei,置换imei 画像。这种复制、克隆另一个对象的属性在我们后台开发经常遇得到。我这里提供两种方式:1、实现Cloneable接口重写clone()方法public class Image implements Cloneable { private ...

2020-03-26 00:36:30 368 2

原创 数据结构与算法分析:(十)跳表
原力计划

一、前言上一篇我们讲了关于数组的二分查找算法,数据结构与算法分析:(九)二分查找算法。二分查找的底层依赖的是数组随机访问的特性,所以只能用数组来实现。如果数据存储在链表中,就真的没法用二分查找算法了吗?答案是有办法的,我们只需要对链表稍加改造,就可以支持二分查找算法,改造后的数据结构我们称之为跳表(Skip List)。我们先说下跳表这个数据结构的优缺点后再来分析详细过程。对于一个需要频繁...

2020-03-21 21:07:44 299

原创 数据结构与算法分析:(九)二分查找算法
原力计划

一、前言二分查找算法是针对有序数据集合的查找算法,将原本时间复杂度是线性时间提升到了对数时间范围,大大缩短了搜索时间。二分查找算法的思想非常简单,但细节是魔鬼。也就是你想写成没有bug的二分查找算法很难,出错原因主要集中在判定条件和边界值的选择上,很容易就会导致越界或者死循环的情况。1、思想二分查找又称折半查找,它是一种效率较高的查找方法。折半查找的算法思想是将数列按有序化(递增或递减)排列...

2020-03-20 01:05:25 635 2

原创 手写Redis客户端
原力计划

一、前言要想手写Redis客户端,必须先了解清楚Redis的通信协议是什么。我的理解就是客户端与服务端按照双方约定的规则来进行的编码方式,客户端将要发送的命令进行编码,然后服务端收到后,使用同样的协议进行解码,服务端处理完成后,再次编码返回给客户端,客户端解码拿到返回结果,这样就完成了一次通信。博主这里为了方便小伙伴们理解,画了一张客户端与服务端通信的结构图,如下:理解了这个通信结构图,我们...

2020-03-15 17:59:55 295

原创 分布式架构下基于Redisson实现Redis分布式锁

一、前言作为后台开发,相信大家都对 Redis 并不陌生了。Redis 有三个客户端 Jedis、Redisson、Lettuce。也就是提供基本的驱动来连接操作 Redis 数据库的。我们先简单介绍下这几个客户端的异同。Jedis:是Redis 的 Java 实现客户端,提供了比较全面的 Redis 命令的支持。Redisson:实现了分布式和可扩展的 Java 数据结构。Lettuc...

2020-03-10 00:17:54 423

原创 数据结构与算法分析:(八)如何写好递归代码?

一、前言相信大家在真实项目中,很少用递归,宁愿把这个递归代码改写成迭代循环的非递归写法。笼统的讲,所有的递归代码都可以改写为迭代循环的非递归写法。如何做?抽象出递推公式、初始值和边界条件,然后用迭代循环实现。为啥我们宁愿改成迭代循环的非递归写法呢?因为在实际项目中用递归,一不小心就容易搞成堆栈溢出抛异常。我们这么怕写递归代码是因为我们可能还没有掌握透递归的精髓。其实也没有那么可怕,不信和我一起开...

2020-03-07 21:17:59 332

原创 线程池中各个参数如何合理设置

一、前言在开发过程中,好多场景要用到线程池。每次都是自己根据业务场景来设置线程池中的各个参数。这两天又有需求碰到了,索性总结一下方便以后再遇到可以直接看着用。虽说根据业务场景来设置各个参数的值,但有些万变不离其宗,掌握它的原理对如何用好线程池起了至关重要的作用。那我们接下来就来进行线程池的分析。二、ThreadPoolExecutor的重要参数我们先来看下ThreadPoolExecutor...

2020-03-06 23:06:00 8764 21

原创 INSERT ... ON DUPLICATE KEY UPDATE ... 批量插入与更新(存在则更新,不存在则插入)

一、前言作为后台开发,相信大家在做业务开发时,经常会遇到这样的场景。那就是数据库没有该数据的话就做插入操作,有的话就做更新操作。方法1:遍历集合,判断里面的对象是否存在存在则单个update,不存在则单个insert。这样的逻辑看着貌似没问题,其实问题大着呢。要是数据量多的话,你哟一个个判断,一个个执行update或者insert操作,这样频繁操作数据库的话,性能影响超级大,直接会超时。所以...

2020-03-06 17:12:41 1779

原创 数据结构与算法分析:(七)队列
原力计划

一、队列的定义队列是一种特殊的线性表,是一种先进先出(FIFO)的数据结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。我们知道,栈只支持两个基本操作:入栈 push()和出栈 pop()。队列跟栈非常相似,支持的操作也很有限,最基本的操作也是两个:入队 enqueue()...

2020-03-04 23:20:10 337

原创 数据结构与算法分析:(六)栈

一、栈的定义栈是限定仅在表尾进行插入和删除操作的线性表。允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。栈的插入操作,叫做进栈,也称压栈、入栈。 栈的删除操作,叫做出栈,也有的叫做弹栈。了解完栈的定义后,小伙伴们似乎发现了栈相对于数组和链表来说好像有点鸡...

2020-03-01 23:09:43 264

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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