自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(51)
  • 收藏
  • 关注

原创 在Spring环境中使用注解实现策略模式,避免过多的if-else代码

1 适用场景 平时写代码,if else是经常用到的语法,是针对不同的条件,运行不同的代码。在条件分支不多的情况下,这肯定是绝佳的选择,但如果分支过多,需要写几十甚至上百的if-else,不仅可读性不好,也不利于维护。这时,可以用到策略模式。本篇文章介绍的策略模式不仅可以省去if-else的代码,还可以将不同的策略内容封装到不同的Class中,在调用不同的策略时也十分方便简洁。2 实现思路 实现思路是这样的,将不同的策略的代码内容封装到不同的Class里面,并声明自...

2021-05-05 14:31:43 930

原创 在Java中通过线程池实现异步执行

1 什么是通过线程池实现代码的异步执行1.1 什么是同步执行 与异步相对的是同步,这里先解释一下同步执行,同步执行就是平时执行我们的代码,由上至下顺序执行,中间如果有异常或错误出现不会继续往下执行。这也是绝大多数代码的执行方式。比如如下代码。 System.out.println("a"); Thread.sleep(2000); System.out.println("b"); System.out.println("c"); 这四...

2021-03-02 22:40:14 6500

原创 Alibaba限流组件——Sentinel核心概念与流量控制

Sentinel是阿里巴巴开源的组件,以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。本文主要介绍Sentinel的核心概念与流量控制等内容。

2020-05-05 09:56:17 2693 2

原创 Reids实现消息队列的思路与方式

前言 Redis是现在最流行的key-value数据库,有诸多应用场景,包括缓存、分布式锁、计数器等,本文介绍的是用Redis实现消息 队列。消息队列有专门的中间件,包括RabbitMQ、RocketMQ、kafka等,它们都属于重量级。在项目中,如果需求没必要用到重量级的消息中间件,可以考虑使用Redis来实现消息队列。1 队列的特点 队列是一个线性的数...

2020-03-15 19:41:18 3615 17

原创 树(四)详解B+树与B树索引

1 B树1.1 B树是什么 首先,B树不属于二叉树,它的节点可以拥有大于2的子节点。 B树是一种平衡的多叉树,又叫做多路平衡搜索树,一棵m叉的B树具有如下特性。 (1)树中的每一个节点最多包含m个子节点; (2)除根节点与子节点外,每个节点至少包含ceil(m/2)个子节点,这里ceil表示向上取整(比如一个7叉B树,每个节点至少...

2020-03-05 17:25:02 2473 4

原创 Java8 Lambda表达式(三)Lambda表达式与Stream API

1 Stream基本概念1.1 什么是Stream Stream与Lambda表达式同为Java8的新特性,是一个来自数据源的元素队列并支持聚合操作,通过对Stream的操作可以以类似写SQL的方式对Java集合进行包括筛选、排序、聚合等运算。1.2 Stream的特点 (1)Stream不存储数据; (2)Stream不会改变源数据;...

2020-02-26 22:00:21 856 1

原创 Java8 Lambda表达式(二)System.out::println与Lambda表达式

1 System.out::println在哪里出现 在Java中,执行System.out.println("hello world");会在控制台打印“hello world”;而在Java8引入了Lambda表达式这一新特性后,是可能出现System.out::println这样的代码的,比如下面这段代码。public class TestPrint { pu...

2020-02-25 20:22:28 11757 4

原创 Java8 Lambda表达式(一)Lambda表达式基础知识

1 Lambda表达式简介1.1 Lambda表达式是什么 JDK1.8是目前最流行的JDK版本,在这一个版本中引入了Lamda表达式。Lambda表达式可以简化代码,让我们的代码更为优雅,而Lambda表达式之所以“优雅”,是因为使用Lambda表达式可以对接口进行简洁的实现,Lamdba表达式本身就是一个匿名函数。1.2使用Lambda表达式实现Runnable接口...

2020-02-25 16:21:34 972 1

原创 树(三)红黑树与平衡二叉树的区别

树(一):二叉查找树树(二)平衡二叉树1 什么样的数据结构称为红黑树 红黑树(Red Black Tree)是一种自平衡的二叉查找树,它与平衡二叉树相同的地方在于都是为了维护查找树的平衡而构建的数据结构,它的主要特征是在二叉查找树的每个节点上添加了一个属性表示颜色,颜色有两种,红与黑。1.1 性质每个节点是红色或者黑色; 根节点是黑色; 所有叶子节点都是黑色(...

2020-02-12 13:19:41 8586

原创 树(二)平衡二叉树

树(一):二叉查找树1为什么有平衡二叉树 二叉查找树(二叉搜索树)的构造是为了加快查询的效率,其查找的思想类似于折半查找法。而搜索树节点不同的插入次序会导致不同的查找效率。也就是拥有相同的数据内容,由于树的插入次序的不同导致了不同的树的深度与平均查找长度。 比如有8个数据分别是1,2,3,4,5,6,7,8,如果按照由小到的的顺序依次插入,构造的树是...

2020-02-07 17:15:26 857 1

原创 web系统中常见的密码加密方式

1 用户密码加密的必要性 web系统中通常都会有登录的功能,登录功能的逻辑是这样的:一个用户拥有一个用户名为zhangsan,密码为123456的账号,在登录时,前端去调用后端的登录接口,并传入zhangsan与123456作为参数;在后端代码内容运行时,会根据zhangsan这一用户名去查询数据库的用户表,查询出的内容会包含密码,将这一个密码与用户所输入的密码做一个比对,如果相...

2020-02-04 16:32:37 13787

原创 RSA算法——使用私钥签名,公钥验签

1. 对称加密与非对称加密 加密技术是最常见的安全保密手段,数据加密技术的关键在于加密/解密算法和密钥管理。数据加密的基本过程是对原来为明文的文件或数据按某种加密算法进行处理,使其成为不可读的一段代码,通常成为“密文”。“密文”只能在输入相应的密钥之后才能显示出原来的内容,通过这样的途径保证被加密的内容不被窃取。 对称加密的特点是文件或数据加密和解密使用相同的密...

2020-02-02 20:14:18 17815

原创 docker的安装与基本使用

1. docker简介 这里先对docker做一个简介。Docker ——一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。2. 安装 这里介绍的是centos7环境下对于docker的安装,安装分为...

2020-01-13 20:41:37 250 2

原创 使用CORS解决跨域问题

1 跨域问题是什么 先说跨域,跨域是指跨域名(通信协议+域名+端口)的访问;而跨域不一定会产生跨域问题,跨域问题的产生是浏览器对于ajax请求的一种安全限制,一个页面发起的请求必须是与当前域名一样,否则,会产生跨域问题。1.1 发生跨域问题时,浏览器的console会报出什么错Access to XMLHttpRequest at 'http://localhost:80...

2019-12-31 12:10:13 1079 3

原创 redis为什么要做持久化及持久化的方式

1. redis为什么要做持久化 许多小伙伴会去了解redis做持久化的方式,因为这确实非常有用,但是,我们为什么要对redis做持久化?明明我们在本地自己搭环境的时候有重启过计算机,但是在重启后甚至过了几个月后redis中的数据仍然存在。没错,当我们在本地装了redis,并且在redis中写了数据,重启后数据依然会存在。redis本身运行时的数据时保存在内存中的,而redis默...

2019-12-14 21:49:50 2911 1

原创 Linux中配置Redis外网访问

步骤一: 确保Linux系统中Redis的端口已经放开(此处是centOS环境),可以使用以下命令查看6379的端口是否放开。firewall-cmd --zone=public --query-port=6379/tcp 如果该命令返回的是no,则需要开放端口,若返回的是yes,则端口已开放。 开放端口的命令如下:firewall...

2019-12-14 12:52:18 1561 2

原创 树(一):二叉查找树

树(二)平衡二叉树一、二叉查找树的定义 二叉查找树(BST,Binary Search Tree),也称为二叉排序树或者二叉搜索树,是二叉树的一种。二叉查找树与二叉树一样,可以为空;另外,如果不为空,作为二叉查找树需满足以下性质: 1. 非空左子树的所有键值小于其根节点的键值; 2. 非空右子树的所有键值大于其根节点的键值; ...

2019-12-13 16:12:19 589 1

原创 Java实现折半查找(二分查找)

一、折半查找是什么? 折半查找是一种在有序数组中查找某一特定元素的搜索算法。它的设计思想是这样的:设查找的范围是数组的第一个元素(下标为minIndex)到数组的最后一个元素(下标为maxIndex),首先看处于这个范围正中间的元素(下标为midIndex)是否就是要搜索的元素,如果是,直接返回这一个下标;如果不是,分为两种情况,一种是比中间的这一个元素要小,此时查找的范围修改第...

2019-12-13 13:15:06 1245 1

原创 举例说明Java实现线程通信的几种方式

线程之间的通信是什么样的?假设有两个线程A和B,这两个线程在各自执行一个动作之后要让对方知道自己执行了这个动作,又或者这两个线程操作的是同一资源,这就是线程间的通信了。下面,我就用一个例子的多种实现来说明Java如何实现线程间的通信。 例子是这样的,用两个线程,一个输出字母,一个输出数字,交替输出,这样得到的结果就是类似这样的字符串"A1B2C3D4E5...26...

2019-12-10 13:42:39 520 1

原创 这样写sql避免索引失效

合理地对mysql数据表加上索引可以大大加快数据的访问效率,但也并不是在给表加上索引后就可以在sql中随心所欲地对加上索引的字段进行各种查询;如果sql的结构不当,会导致原本设置的索引失效。所以为避免采坑,写下此文,以做记录。以下用到的例子假设有这样一张表:CREATE TABLE `user_info` ( `id` bigint(32) NOT NULL, `nam...

2019-11-30 10:45:17 510 1

原创 在Java中合并两个集合,取两个集合的并集

在开发中,有时会碰到这样的需求,取两个集合的并集,也就是说如果其中一个集合中的元素是[1,2,3,4,5],另一个集合中的元素是[4,5,6,7,8],那么取这两个集合的并集得到的结果就是[1,2,3,4,5,6,7,8]。 合并两个集合的代码如下:/** * 取两个集合的并集,并返回 * @param listOne List * @param li...

2019-11-24 16:37:27 8081 1

原创 SQL优化——MySQL中执行计划的使用

查看执行计划是很有效的sql优化手段。通过查看执行计划可以知道索引有没有生效、走的哪张表的索引、具体哪个字段的索引等十分有用的信息。

2019-11-17 18:40:03 344

原创 代码中避免“硬编码”的必要性

对于硬编码的定义不同的理解可能会有所不同,这里的硬编码指的是在代码中将一些数字或字符串常量直接写入代码中。比如一个查询语句需要以一个字段搭配一个常量作为条件查询,使用类似这样的sql语句去查询:“SELECTname,age,salaryFROMuserWHEREid!=?”,这里如果在代码中写“死”一个id(比如:SELECTname,age,salary...

2019-11-13 21:51:34 1835

原创 解决vue+el-element二级联动,选项选择后不显示的问题

一、问题描述 vue的二级联动可以采用v-if的方式去实现,也就是在第一级选项的值发生变化后,清空第二级选项所关联的model的值,并将第二级选项所取的变量数组变更。会产生的问题是,第二级选项的值有时候会出现值已改变但是页面上并不显示改变值的情况。二、跟踪问题 产生问题的原因为vue是基于数据驱动的,这么做有可能会导致数据刷新不及时。如果要测试去跟踪问...

2019-09-20 15:02:21 5632

原创 面向对象开发必会UML类图

1 UML类图是什么 在很早之前就在书中见过类图,只不过当时不知道是具体叫什么,对于书上所绘的类图所描述的意思也是一知半解,没有真正理解作者所要表达的类与类之间的关系。如下从书中所截的就是一个UML类图,所描述的就是ConnectionManager类实现了IConenectionManager接口(泛化关系),DataTransfer类实现了IDataTransfer接口(泛化关...

2019-09-14 19:48:12 442

原创 osi参考模型与TCP/IP分层模型

1ISO/OSI网络体系结构1.1 简介 ISO是国际标准化组织(International Organization for Standardization)的简称,是一个全球性的非政府组织,是国际标准化领域中一个十分重要的组织。而OSI为开放系统互联(Open System Interconnection)的简称,由ISO制定了OSI参考模型,该模型将网络分层,使庞大而...

2019-09-08 19:12:27 1955 1

原创 耦合与内聚的分类

一、内聚与耦合 作为一名程序员,想必从学习程序基础开始就听说过“高内聚、低耦合”,今天就从理论的角度来记录一下内聚与耦合。内聚:指的是一个模块内部各成分之间相关联程度的度量;耦合:指的是程序结构中各个模块之间相互关联的度量。在软件系统的划分模块时,应尽量做到高内聚,低耦合,提高模块的独立性。二、内聚的分类内聚可以分为以下七种类型,内聚性由高到低分别是:功能内聚:指...

2019-08-31 20:37:06 7830

原创 vue使用笔记——video标签引用地址数据不实时更新的问题

一、问题描述 前些天用到了h5的<video>标签实现了视频展示的功能,这一个<video>的值是某个列表数据中的一个属性,当点击查看其中一条数据后,再去查看另一条数据的详情,理论上从后台传过来的视频url地址应该是不一样的,结果取到的值确是和上一条数据同样的url,也就是<video>标签的src属性的值没有正确更新。二、产生原因及...

2019-08-25 18:35:27 1660

原创 分库分表简介

1. 什么是分库分表 目前互联网应用每天产生的数据量是非常大的,尤其是像淘宝、京东这样的大流量的应用。不说其他,单就历史订单表来说,它的数据可能不止几十亿,而对于mysql,达到几千万数据量时,查询效率就会慢,如果有夺标联查,很可能会卡住,甚至出现将整个系统拖垮的现象。分库分表就是针对这一情况,按照一定的规则,对原有的数据库或者数据表进行拆分,把原本存储在一个库或者一个表的数据存...

2019-08-18 16:45:28 258

原创 BeanUtils与PropertyUtils的copyProperties方法的差别

1. copyProperties org.apache.commons.beanutils包中有两个工具类,BeanUtils与PropertyUtils,这两个工具类中各自有一个copyProperties(Object dest, Object orig)方法,这两个方法可以将两个对象当中相同的属性的值由源对象赋值至目标对象中。用到这个类的场景一般是由前台传到后台的一个包...

2019-08-11 17:15:44 1273

原创 Eureka注册中心——搭建简单的Eureka环境

1. Eureka简介 Eureka一词出自古希腊的词汇,词性为感叹词,意思是“我找到了!我发现了!”。据传,阿基米德在洗澡时发现了浮力原理,高兴得来不及穿上裤子,跑到街上大喊:“Eureka(我找到了)!" 在现在的微服务的架构中都会有一个注册中心,原因是微服务数量众多,要在微服务间进行远程调用需要知道服务端的ip和端口,注册中心可以管理这些服务地址和端口;另外...

2019-08-03 20:10:11 608

原创 linux环境下安装redis

一、下载tar包先去网站下载需要版本的tar包,并上传至linux服务器中,下载地址如下:http://download.redis.io/releases/通过Xftp将tar包传到linux中,如下图所示。二、解压tar包使用tar命令将tar包解压至目标目录tar -xzvf redis-3.2.13.tar.gz -C /usr/soft三、编译进入r...

2019-07-28 20:16:07 136

原创 在修改redis配置文件的情况下启动redis需指定配置文件

一、在windows环境下设置密码 在Windows环境下启动redis服务端,只需执行redis目录中的redis-server文件即可,而设置密码,可以打开redis.windows.conf文件,搜索“password”,找到如图所示的这一行。 放开该行的注释,如下图所示。 那么,此时的密码就是“redis123456”。二、使...

2019-07-21 14:05:16 9688 1

原创 elasticsearch启动常见问题汇总

一、max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]每个进程最大同时打开文件数量太小,可使用以下命令进行查看ulimit -Hnulimit -Sn解决方法:修改/etc/security/limits.conf文件,在末尾加上如下两行...

2019-06-30 13:50:57 1123

原创 centos环境安装elasticsearch单机版

一、下载tar包在官网的这个目录可以下载elasticsearch的历史版本https://www.elastic.co/cn/downloads/past-releases#elasticsearch二、创建用户linux环境下,elasticsearch是不允许root用户运行的,所以使用另外的用户。三、解压tar包将tart包上传至linux环境中...

2019-06-30 13:12:45 377

原创 zookeeper图形化客户端——ZooInspector

一、下载下载地址如下:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip二、解压并运行解压后的ZooInspector文件夹目录结构如下图所示:三、运行在本地环境已经安装java的环境下,进入ZooInspector-->build,直接双击打开zookeepe...

2019-06-23 17:30:02 1821

原创 在linux上安装tomcat8

一、下载安装包首先在apache下载tomcat8的压缩包http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz二、将安装包上传到linux这里推荐使用Xftp三、解压文件使用tar命令加压压缩包tar -zvxf apache-tomcat-8...

2019-06-16 19:53:36 551

原创 centos上zookeeper的安装配置

一、下载安装包下载zookeer的tar包,并传到centos系统中。下载地址如下:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz二、解压压缩包解压命令:tar -xvzf zookeeper-3.4.14.tar.gz -C /usr/so...

2019-06-16 17:39:04 2620

原创 在linux上安装jdk1.8

一、获取jdk安装包从java官方网站(现以被oracle收购)下载安装包,地址为:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html二、将安装包上传至目标linux系统这里推荐使用Xftp进行上传三、解压安装包使用tar命令将jdk安装包解压...

2019-06-16 13:21:53 629

原创 在Oracle VM VirtualBox上加载centos镜像文件

Oracle VM VirtualBox是一个很强大的虚拟机产品,在Oracle VM中可以安装windows或者linux操作系统。本文就以在VM上安装centos的过程做一个记录。一、新建打开Oracle VM VirtualBox,单击新建按钮,输入名称并选择类型、版本。二、选择内存大小三、选择现在创建虚拟硬盘四、选择虚拟硬盘文件类型五、建议选择动态分...

2019-06-16 12:07:01 3010

空空如也

空空如也

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

TA关注的人

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