自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 优化sql方案

优化sql方案为什么使用索引:1、索引大大减少了存储引擎需要的扫描数据量2、帮助我们进行排序避免使用的临时表3、把随机IO变为顺序IO索引是不是越多越好:1、索引增加写入的成本2、太多索引会增加查询优化器的选择时间索引是在存储引擎层的作用:B-tree索引的特点:1、常见索引,默认的索引,叶子键遍历2、以B+树的结构存储数据3、能加快数据的查询速度4、适合进...

2019-09-28 00:42:14 147

转载 Spring Boot 一个依赖搞定 session 共享

有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你就知道松哥说的是对的了!在传统的单服务架构中,一般来说,只有一个服务器,那么不存在 Session 共享问题,但是在分布式/集群项目中,Session 共享则是一个必须面对的问题,先看一个简单的架构图:在这样的架构中,会出现一些单服务中不存在的问题,例如客户端发起一个请求,这个请求到达 Nginx 上之...

2019-09-28 00:42:05 135

转载 Java类初始化顺序说明

Java类初始化顺序说明一个类中包含如下几类东西,他们前后是有顺序关系的静态属性:static 开头定义的属性 静态方法块: static {} 圈起来的方法块 普通属性: 未带static定义的属性 普通方法块: {} 圈起来的方法块 构造函数: 类名相同的方法 方法: 普通方法初始化顺序public class LifeCycle { // 静态属性 ...

2019-09-28 00:41:55 117

原创 Mybais

一、Mybatis 的理解MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。 MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。 MyBatis 使 用 简 单 的 XML 或 注 解 来 配 置 和 映 射 基 本 体 , 将 接 口 和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象...

2019-09-28 00:39:11 165

原创 Git 与 svn 对比

一、Git的介绍Git和SVN的区别svn:版本库集中存放在中央服务器,服务器容易单点故障,容错性差git:有本地版本库的概念,远程版本库的区别,完全分布式​svn命令:commit checkout update git命令:push clone pull 两个本地命令: add新增内容到本地仓库 commit提交本地仓...

2019-09-28 00:25:28 765 1

转载 基数排序(Radix Sort)

基数排序也是非比较的排序算法,对每一位进行排序,从最低位开始排序,复杂度为O(kn),为数组长度,k为数组中的数的最大的位数;基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收集,所以是稳定的。1...

2019-09-26 00:26:51 163

转载 桶排序(Bucket Sort)

桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排1.算法描述人为设置一个BucketSize,作为每个桶所能放置多少个不同数值(例如当BucketSize==5时,该桶可...

2019-09-26 00:25:53 428

转载 计数排序(Counting Sort)

计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。它只能对整数进行排序。1.算法描述找出待排序的数组中最大...

2019-09-26 00:24:52 453

转载 堆排序(Heap Sort)

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。7.1 算法描述将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区; 将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,……Rn-1)和新的有序区(Rn),且满...

2019-09-26 00:23:29 137

转载 快速排序(Quick Sort)

快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。6.1 算法描述快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:从数列中挑出一个元素,称为 “基准”(pivot); 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素...

2019-09-26 00:23:00 187

转载 归并排序(Merge Sort)

和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个...

2019-09-26 00:22:25 252

转载 希尔排序(Shell Sort)

希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序是把记录按下表的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键...

2019-09-26 00:21:54 288

转载 插入排序(Insertion Sort)

插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。3.1 算法描述一般来说,插入排序都采用in-pl...

2019-09-26 00:21:22 264

转载 选择排序(Selection Sort)

表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻...

2019-09-26 00:20:48 121

转载 冒泡排序(Bubble Sort)

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。1.1 算法描述比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这...

2019-09-26 00:20:03 128

转载 Spring IOC是什么

IoC是什么Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:●谁控制谁,控制什么:传统Java ...

2019-09-24 22:36:55 126

转载 排序算法(2)冒泡排序

冒泡排序分从大到小和从小到大两种排序方式。它们的唯一区别就是两个数交换的条件不同,从大到小排序是前面的数比后面的小的时候交换,而从小到大排序是前面的数比后面的数大的时候交换。我这里只说 从小到大的排序方式。冒泡排序的原理:从第一个数开始,依次往后比较,如果前面的数比后面的数大就交换,否则不作处理。这就类似烧开水时,壶底的水泡往上冒的过程。一、 图解分析现以数组[8,7,6,4,5]为...

2019-09-24 22:36:41 3582

原创 有关于死锁的知识

什么是死锁(1) 打个比方,假设有 P1 和 P2 两个进程,都需要 A 和 B 两个资源,现在 P1 持有 A 等 待 B 资源,而 P2 持有 B 等待 A 资源,两个都等待另一个资源而不肯释放资源,就 这样无限等待中,这就形成死锁,这也是死锁的一种情况。给死锁下个定义,如 果一组进程中每一个进程都在等待仅由该组进程中的其他进程才能引发的事件, 那么该组进程是死锁的。(2) 竞争不可抢...

2019-09-24 22:36:25 155

原创 Nginx

1.Nginx反向代理为什么能够提升服务器性能?对于后端是动态服务来说,比如 Java 和 PHP 。这类服务器(如JBoss 和 PHP-FPM)的IO处理能力往往不高。Nginx有个好处是它会把 Request 在读取完整之前 buffer 住,这样交给后端的就是一个完整的 HTTP 请求,从而提高后端的效率,而不是断断续续的传递(互联网上连接速度一般比较慢)。同样,Nginx...

2019-09-23 16:22:58 218

原创 ApacheShiro权限控制

一、首先什么是Shiro?Shiro是JAVA世界中新近出现的权限框架,较之JAAS和Spring Security,Shiro在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。shiro是apache下面的一个开源项目,下面是其网站上对其的一段说明:Apache Shiro is a powerful and easy-to-use Java security framewo...

2019-09-19 12:43:33 160

原创 数据库

Sql 之连接查询外连接:1) 左连接(左外连接)以左表为基准进行查询,左表数据会全部显示出来,右表 如果和左表匹配 的数据则显示相应字段的数据,如果不匹配,则显示为 NULL;2) 右连接(右外连接)以右表为基准进行查询,右表数据会全部显示出来,右表 如果和左表匹配的数据则显示相应字段的数据,如果不匹配,则显示为 NULL;3) 全连接就是先以左表进行左外连接,然后以右表进...

2019-09-17 23:27:15 138

原创 JDBC流程

1、 加载 JDBC 驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到 JVM(Java 虚 拟机), 这通过 java.lang.Class 类的静态方法 forName(String className)实现。2、 提供 JDBC 连接的 URL连接 URL 定义了连接数据库时的协议、子协议、数据源标识。 - 书写形式:协议:子协议:数据源标识协议:...

2019-09-17 22:27:37 129

转载 排序算法(1)选择排序法

原理选择排序法属于排序算法中常见的也是大家最容易理解的排序算法,可以作为排序算法的入门来学习。那么选择排序法的原理是什么呢?选择排序就是当n个数字需要由大到小排序时,首先以第1个位置的数字,依次与2、3、4……n个位置的数字作比较。如果第1个位置的数字大于或等于某一个位置的数字,则两个位置的数字不变,反之则将两个位置的数字进行互换。 当第一轮比较大小完成后,此时第1个位置的数字即为此排序数...

2019-09-17 18:17:16 668

原创 Dubbo

1. Dubbo 的容错机制有哪些?Dubbo 官网提出总共有六种容错策略1)Failover Cluster 模式失败自动切换,当出现失败,重试其它服务器。(默认)2)Failfast Cluster快速失败,只发起一次调用,失败立即报错。 通常用于非幂等性的写操作,比如新增记录。3)Failsafe Cluster失败安全,出现异常时,直接忽略。 通常用于写入审计日...

2019-09-17 17:58:31 264

原创 消息队列 ActiveMQ

如何使用 ActiveMQ 解决分布式事务? 在互联网应用中,基本都会有用户注册的功能。在注册的同时,我们会做出如下操作:1. 收集用户录入信息,保存到数据库2. 向用户的手机或邮箱发送验证码等等如果是传统的集中式架构,实现这个功能非常简单:开启一个本地事务,往本地数据库中插入一条用户数据,发送验证码,提交事物。但是在分布式架构中,用户和发送验证码是两个独立的服务,它们都有各自的数...

2019-09-17 17:51:08 179

原创 Springmvc 控制器的作用

Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC( 控制反转)和 AOP(面向切面编程)为内核。mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。mybatis通过xml或注解的方式将要执行...

2019-09-17 17:45:23 2199 1

原创 FastDFS

什么是FastDFS?FastDFS是一个开源的轻量级分布式文件系统,它可以对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS由哪些组件组成?Storage server(存储服务器)Storage server一般都是以组(group)为组织单位,...

2019-09-17 17:39:16 155

原创 Zookeeper

ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。ZooKeeper其他的使用方法:配置维护、组服务、分布式消息队列、分布式通知/协调等。在我们的项目中Zookeeper作为服务注册中心,他的主要任务是负责地址的注册以及查找,相当于一个服务目录,服务的提供者与服务的消费者只在启动时与注册中心进行交互,注册中心也不会转发请求,所以...

2019-09-17 17:37:07 190

原创 Solr

solr简介Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 Web-service 的 API 接口。 用户可以通过 http请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引;也可以 通过 Http Get 操作提出查找请求,并得到XML 格式的返回结果。 特点: Solr 是一个高性能,采用 Java5 开发,基于 Luce...

2019-09-17 17:31:13 180

原创 SpringMVC

SpringMVC的工作原理1. 用户向服务器发送请求,请求被springMVC前端控制器DispatchServlet捕获; 2. DispatcherServle对请求URL进行解析,得到请求资源标识符(URL),然后根据该URL调用HandlerMapping将请求映射到处理器HandlerExcutionChain;3. DispatchServlet根据获得Handler选择一...

2019-09-16 17:53:00 155

原创 Redis

Redis的特点Redis 是由意大利人 Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库。Redis 全称为:Remote Dictionary Server(远程数据服务),该软件使用C语言编写,典型的NoSQL数据库服务器,Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sor...

2019-09-16 17:42:41 153

原创 Hibernate

Hibernate的开发流程第一步:加载 hibernate 的配置文件,读取配置文件的参数(jdbc 连接参数,数据 库方言,hbm 表与对象关系映射文件) 
 第二步:创建 SessionFactory 会话工厂(内部有连接池) 
 第三步:打开 session 获取连接,构造 session 对象(一次会话维持一个数据连接, 
也是一级缓存) 
 第四步:开启事务...

2019-09-16 17:37:00 147

原创 FreeMarker

freemarker 是一个模板化引擎语言,传统项目中,后台页面基本上都是 list 列表,页面都是类似的,只是展示的数据不一样。这样我们就可以把他 的样式做成一个 freemarker 模板,然后传入数据就可以展示不同的页面。他 的模板一般是以.ftl 结尾的。如果使用这个呢,可以使我们开发人员不需要 太关注前台。但是对于很多门户或商城类项目,每个页面都是不一样,所以 用他也不是很方便。另外,由...

2019-09-16 16:55:47 211

原创 session和cookie的区别

Session 是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存 在集群、数据库、文件中;Cookie 是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现 Session 的一种方式。cookie 数据存放在客户的浏览器上,session 数据放在服务器上。cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗考虑到...

2019-09-16 16:51:56 150

原创 Spring

对Spring的理解Spring是一个开源框架,为简化企业级应用开发而生。Spring可以是使简单的JavaBean实现以前只有EJB才能实现的功能。Spring是一个IOC和AOP容器框架。Spring容器的主要核心是: 控制反转(IOC),传统的java开发模式中,当需要一个对象时,我们会自己使用new或者getInstance等直接或者间接调用构造方法创建一个对象...

2019-09-16 16:49:44 171

原创 单点登录

单点登录的主要是应用在分布式架构的场景中,在之前传统的一站式架构中,我们解决用户信息共享的方案就是在用户登录之后将用户的信息加入到session中,只要在一个会话的过程中用户的信息都可以从服务器端直接获取,避免重复要求用户登录的过程。相比之下,分布式架构中我们会把不同的模块分布在不同的服务器中,那不同的服务器之间的session是不一样的, 如果继续延用一站式用户信息共享的方案很显然没有...

2019-09-16 16:46:20 183

原创 springmvc框架的工作流程

1、用户向服务器发送请求,请求被 SpringMVC 的前端控制器 DispatcherServlet 截获。2、DispatcherServlet 对请求的 URL(统一资源定位符)进行解析,得到 URI(请求资源标识符), 然后根据该 URI,调用 HandlerMapping 获得该 Handler 配置的所有相关的对象,包括 Handler 对象以及 Handler 对象对应的拦截器,...

2019-09-16 16:42:55 186

原创 Spring框架AOP执行原理及在事务管理方面的实现方法

Spring AOP 使用的动态代理,所谓的动态代理就是说 AOP 框架不会去修改字节码,而 是在内存中临时为方法生成一个 AOP 对象,这个 AOP 对象包含了目标对象的全部方法,并 且在特定的切点做了增强处理,并回调原对象的方法。Spring AOP 中的动态代理主要有两种方式,JDK 动态代理和 CGLIB 动态代理。JDK 动 态代理通过反射来接收被代理的类,并且要求被代理的类必须实现...

2019-09-16 16:40:54 273

原创 Spring Boot的特点

Springboot 是从无数企业实战开发中总结出来的一个更加精炼的框架,使得开发更加简单, 能使用寥寥数行代码,完成一系列任务。1)Springboot 解决那些问题a) 编码更简单 i. Spring 框架由于超重量级的 XML,annotation 配置,使得系统变得很笨重,难以维护 ii. Springbo...

2019-09-16 16:32:10 133

原创 多线程以及线程池

同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC), 线程切换开销小。线程分为五个阶段:创建、就绪、运行、阻塞、终止。 Java 线程有五种基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 就绪状态(Runnable): 当调用线程对象的 start()方法(t.start();),线程即 进入就绪状...

2019-09-16 16:20:02 138

空空如也

空空如也

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

TA关注的人

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