自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 资源 (1)
  • 收藏
  • 关注

原创 算法系列--贪心算法

一、贪心算法  上一节讲了动态规划,这里再讲一个和动态规划相似的算法,有时候也很容易搞混,即贪心算法。  贪心算法和动态规划算法,都是用来求解最优化问题。但是在很多问题上,使用动态规划会有大炮打蚊子的感觉,而且使用贪心算法可以使问题更简单化。  贪心算法,会做出局部最优的解,然后利用局部的解,得到全局的最优解。贪心算法的两个关键要素:贪心选择性质最优子结构下面将介绍下这两个关键要素二、贪心选择性质  贪心选择性质,是贪心算法区别于动态规划的一个重要要素之一。贪心算法通常采用自顶向下,每做

2021-03-28 22:45:38 234

原创 算法系列--动态规划

一、动态规划  动态规划,dynamic programming。其实还是蛮头疼的,写这句话的时候也还没有完全搞懂,写这篇希望自己也可以彻底搞懂动态规划的套路。  动态规划,通常用来求解最优化问题,是通过组合子问题的解来求解原问题,与分治方法很相似。虽然都是将一个问题拆分为一堆更小的子问题,但动态规划更强调的是拆分出的子问题是否可以被重复调用。这样,对每一个子问题的计算结果保存起来,避免不必要的计算。  所以,其实动态规划的本质是穷举法,求解最优化问题,必然会将所有结果都结算出来,比较最值。但动态规划

2021-03-27 21:48:31 207

原创 Java8新特性

Java8在平时工作中被普及的越来越多了,而且Java8也是Java的一次重大版本升级。平时工作中的项目都已经使用了jdk1.8版本,但是关于新特性基本没怎么用到,鉴于平时工作时开始慢慢推行Java8新特性编程,面试中有时候也会涉及到这方面的问题。在此做一个总结,希望自己能有所提高也能帮助别人。一、Lambda表达式先看一个lambda表达式的简单例子//老版本List<String> fruits = Arrays.asList("apple", "banana", "orange",

2020-12-13 18:59:10 209

原创 Spring Security实战--(五)认证和鉴权过程

标准的身份验证方案:用户使用用户名和密码登录;系统验证用户的额密码正确,成功登录;获取该用户的上下文,即该用户的角色列表;为用户建立安全的上下文用户可能会继续执行某些操作,该操作可能会受到访问控制机制的保护,该访问控制机制会根据当前安全上下文信息检查该操作所需的权限其中,前四个步骤构成了认证过程,在SpringSecurity中流程如下:获取用户名和密码,并将其组合到一个Use...

2020-04-02 22:41:00 1048

原创 Spring Security实战--(四)密码加密

一、密码安全的重要性密码加密是一个很重要的安全性问题,当数据库存储密码时,应该使用可以安全存储用户密码的意识,防止数据库的明文密码泄露造成严重灾难二、加密机制PasswordEncoder接口public interface PasswordEncoder { /** * 加密过程 String encode(CharSequence rawPassword); /** ...

2020-03-22 15:25:36 526

原创 Spring Security实战--(三)图形验证实现

一、图形验证码上一节实现了自定义数据库的验证,这里使用过滤器实现图形验证码。图形验证码也是登录时,常用的项目之一。这里使用验证码(CAPTCHA),验证码就是为了防止恶意用户暴力重试而设置的,防止恶意用户使用程序发起无限重试,使系统遭到破坏二、图形验证码实现2.1 图形验证码添加这里使用kaptcha组件来获取验证码添加依赖...

2020-03-15 19:07:18 222

原创 Spring Security实战--(二)数据库实现

一、数据库的实现Spring Security提供了默认数据库模板和自定义数据库两种方式二、默认数据库2.1 不同权限controller建立建立下相关controller,为不同权限做准备代码如下,注释已经解释清楚了,就不多说了@RestController@RequestMapping("admin/api")public class AdminController { ...

2020-03-11 21:55:17 409

原创 Spring Security实战--(一)简单Security应用

123一、Spring Security简介应用程序的安全性通常体现在两个方面:认证和授权认证是确认某主题在某系统中是否合法、可用的过程。这里的主题既可以是登录系统的用户,也可以是接入的设备或者其他系统授权是指当主体通过认证后,是否允许其执行某项操作的过程,认证和授权是应用安全的基本关注点...

2020-03-03 22:16:46 273

原创 并发源码解析(七)--Semaphore

一、SemaphoreSemaphore信号量–同CountDownLatch和CycleBarrier类似,但是它的计时器是递增的。二、源码分析2.1 继承关系有3个内部类,实现了公平锁和非公平锁,关系如下。会不会有点眼熟,很像ReentrantLock的公平锁和非公平锁的实现。2.2 属性属性很简单private static final long serialVersi...

2019-10-19 10:58:09 158

原创 并发源码解析(六)--CyclicBarrier

一、CyclicBarrierCyclicBarrier–回环屏障:有点类似于CountDownLatch,但是比CountDownLatch更厉害一点。CountDownLatch是一次性的计数器,计数到0就会立刻返回。而CyclicBarrier的计数器达到0了之后可以重用。二、源码分析2.1 继承关系无2.2 属性 /** 可以看出基于独占锁实现 */ private...

2019-10-18 16:01:49 138

原创 并发源码解析(五)--CountDownLatch

一、CountDownLatch

2019-10-18 11:18:52 134

原创 并发源码解析(四)--ReentrantLock

一、ReentrantLockReentrantLock是可重入的独立锁,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞而被加入该锁的AQS阻塞队列里面。可以实现公平锁和非公平锁二、源码分析2.1 继承关系实现了lock接口和序列化接口还有3个静态内部类其中的关系如下:其中Sync的lock方法为抽象方法,交给子类去实现2.2 构造方法无参构造方法publ...

2019-10-17 20:08:42 168

原创 并发源码解析(三)--AQS条件队列

一、条件队列AQS的一个锁可以对应多个条件变量。使用时先使用lock.newCondition()来new出来一个在AQS内部声明的ConditionObject对象,ConditionObject是AQS的内部类,可以访问AQS内部的变量和方法。而在每个条件变量内部都维护了一个条件队列,用来存放调用条件变量的await()方法时被阻塞的线程。这个条件队列和AQS队列不是一样东西!二、源码分...

2019-10-17 15:22:26 306

原创 并发源码解析(一)--抽象同步队列AQS

一、AQSAQS,即AbstractQueuedSynchronizer抽象同步队列,是实现同步器的基础组件,并发包中锁的底层就是使用AQS实现的,因此这个类非常重要。因此在谈到并发包的源码时,先讲一下AQS二、源码分析2.1可以看到AQS继承了AbstractOwnableSynchronizer。由线程独占的同步器,这个类为创建锁和相关同步器提供了基础,这个类比较简单。publ...

2019-10-17 09:05:15 174

原创 Java集合系列源码分析(八)-- TreeMap(红黑树)

一、TreeMapTreeMap是有序的,可以实现自定义的比较器来决定升序还是降序。存储key-value,内部使用红黑树。强烈建议先看之前的二叉搜索树和平衡二叉树,了解二叉搜索树和平衡二叉树再看这篇,否则红黑树有点难理解二、TreeMap常用方法2.1 属性实现了NavigableMap接口,而NavigableMap又继承于SortedMap,又此可知,这个map是有序的。因...

2019-10-15 22:54:07 258

原创 Java集合系列源码分析(七)-- 平衡二叉树

一、平衡二叉树平衡二叉树(Balanced Binary Tree)是为了防止树的高度增长过快,出现类似于上一节最后举出的那种特殊情况,降低了二叉排序树的性能。于是人们规定,保证任意节点的左、右子树高度差的绝对值不超过1,这样的二叉树成为平衡二叉树。二、平衡二叉树的方法首先,平衡二叉树操作中始终需要保持平衡,因此必须要准守平衡原则,平衡二叉树的平衡原则是:每次需要调整的都是最小不平衡二叉...

2019-10-15 17:01:28 251

原创 Java集合系列源码分析(六)-- 二叉查找树

之前讲了部分集合源码,有涉及到红黑树,一下就讲红黑树有点不好讲,先从简单点的树开始讲,以下就从二叉查找树开始讲一、 二叉查找树二叉查找树(Binar Search Tree),又称二叉搜索树,二叉排序树二叉查找树特性:若左子树非空,则左子树上所有的节点关键字值均小于根节点的关键字值若右子树非空,则右子树上所有节点关键字值均大于根节点的关键字值左右子树本身也分别是一颗二叉查找树简单...

2019-10-12 22:03:19 142

原创 Java集合系列源码分析(四)--HashSet

一、HashSetHashSet是基于HashMap实现的,他的方法比较简单,但是大部分方法都和HashMap有关。需要先了解HashMap在了解HashSet。关于HashMap在上一篇源码分析有介绍。了解完HashMap再来看HashSet会发现其实HashSet会比较简单二、源码分析2.1 继承结构和分析实现了Set接口,继承AbstractSet2.2 HashSet属性...

2019-10-11 15:12:44 191

原创 Java集合系列源码分析(三)--HashMap

一、HashMap基于数组和链表实现的HashMap,当链表数据过多时,会转为红黑树提高查询效率。实现采用了多种数据结构,所以HashMap在增删改查上的效率都很高,不考了哈希冲突时间复杂度可以达到O(1)二、源码分析2.1 继承结构和层次实现了Map接口,克隆接口和序列化接口2.2 HashMap属性/** * 默认初始容量 */static final int DEFA...

2019-10-10 14:05:06 148

原创 Java集合系列源码分析(二)--LinkedList

一、LinkedListlinkedlist底层是双向链表,插入和删除操作较快,查询和随机查询操作较慢。非线程安全。二、源码分析2.1 继承结构和层次实现了序列化、克隆、list接口。Deque:双端队列接口,扩展自Queue2.2 LinkedList属性//集合元素个数transient int size = 0;/** * 首节点指针transient Nod...

2019-10-10 10:06:58 164

原创 Java集合系列源码分析(一)--ArrayList

一、ArrayListArrayList是非常常用的集合类之一,其对数组进行封装,并进行动态的增加和缩减长度。因为底层是数组,所以写的效率要低点,因为涉及到新内存的开辟和数组元素的拷贝,但是查询效率非常高。非线程安全二、源码分析2.1 继承结构和层次可以看到Arraylist继承抽象类AbstractList,而AbstractList继承自AbstractCollection其中:...

2019-10-09 23:24:36 214

原创 Spring实战--Bean的装配&切面

一、装配Bean1.1 Spring配置的可选方案Spring主要提供三种主要的装配机制:在XML中进行显式配置在java中进行显式配置隐式的bean发现机制和自动装配1.2 自动化装配BeanSpring从两个角度来实现自动化装配:组件扫描:Spring会自动发现应用上下文中所创建的bean自动装配:Spring会自动满足bean之间的依赖这两种方法组合在一起就能发挥...

2019-09-22 10:06:47 1135

原创 Redis(二)--数据安全与性能保障

一、Redis持久化选项Redis提供了两种不同的持久化方法来讲数据存储到硬盘里面。一种是快照,可以将存在于某一时刻的所有数据都写入硬盘里面。另一中方法叫只追加文件,他会在执行写命令时,将被执行的写命令复制到硬盘里面。1.1 快照持久化通过创建快照来获得存储在内存里面的数据在某个时间点上的副本。在创建快照以后,用户可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本...

2019-09-20 16:57:20 141

原创 Redis(一)--基础内容

一、Redisredis是一个速度非常快的非关系数据库,他可以存储键(key)与5种不同类型的值(value)之间的映射(mapping),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能。二、Redis的数据结构5种数据类型分别为STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)、ZSET(有序集合)。...

2019-09-20 12:31:42 159

原创 深入理解Java虚拟机--类加载机制

一、类加载的时机类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中验证、准备、解析3个阶段统称为连接其中,加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段以后再开始,这是为了支持java语言的运行时绑定(也称为动态...

2019-09-11 18:06:34 136

原创 深入理解JVM虚拟机--Java内存区域

一、数据区域Java虚拟机在执行Java程序的过程中会把他管理的内存划分为若干个不同的数据区域。如下如所示:1.1 程序计数器程序计数器是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。唯一一个没有规定任何OutOfMemoryError情况的区域是块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这...

2019-09-10 21:35:25 170

原创 深入理解Java虚拟机--垃圾回收机制

一、需要垃圾回收的内存地区1.1 不要考虑的区域Java运行时的内存区域,其中程序计数器、虚拟机栈、本地方法栈3个区域是随线程而生,随线程而灭:栈中的栈帧随着方法的进入和退出有条不紊的执行者出栈和入栈操作。每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的。因此这几个区域的内存分配和回收都具备确定性。所以不需要过多考虑回收问题。1.2 需要考虑的区域Java堆和方法区则不一样,一个接...

2019-09-10 19:55:56 208

原创 设计模式-代理模式

一、代理模式代理模式属于结构性模式,是一个类代表另外一个类的功能。代理模式将创建具有现有对象的对象,以便向外界提供功能接口。使用背景:解决在直接访问对象时带来的问题,在访问一个雷时做一些控制。如window的快捷方式二、简单代理模式实例创建接口,创建实现接口的实体类RealDrawing作为真实类,ProxyDrawing作为代理类。浏览Drawing时,第一次从安全库中取出,以后的人...

2019-08-13 00:05:23 142

原创 设计模式-简单工厂模式&抽象工厂

一、工厂模式是java中最常用的设计模式之一。属于创建型模式。使用工厂模式,在创建对象时不会对客户端暴露创建逻辑,并且是使用同一个共同的接口来指向新创建的对象。使用背景:主要解决接口选择的问题,有明确的计划不同条件下创建不同的实例。定义一个创建对象的接口,让其子类自己决定实例化哪个工厂类,工厂模式使其创建过程延迟到子类进行。二、简单工厂模式步骤:创建Car接口和实现Car接口的的实体...

2019-08-01 23:47:04 107

原创 设计模式--单例模式

一、单例模式是java中最简单的设计模式之一。属于创造型模式,提供了一种创建对象的最佳方式。这种模式是一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。特征:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。使用场景:保证一个类仅有一个实例,...

2019-08-01 19:23:50 128

原创 消息中间件--ActiveMQ

JMS(Java Message Service):

2019-07-22 21:10:59 400

原创 Maven+SSM项目整合(二)--增删改查及搜索

一、增删改查及搜索后端直接放controller层的代码,增删改查基础的操作,control层没有太复杂的package com.cf.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web...

2019-06-28 23:25:59 767

原创 Maven+SSM项目整合(一)--分页显示

一、项目简介上次使用easyui+SSM做了小demo,不过很多功能还是没做完。这次使用AngularJS+Maven+SSM做demo吧,尽量把功能都完善。二、项目搭建新建maven项目,选择war包的方式。项目比较简单,就全部放在一个maven project里面。项目搭建如下:配置文件都和上次的相同,详见 SSM整合实例–(一)项目搭建POM.XML文件如下:<proj...

2019-06-25 22:29:06 338

原创 Spring Boot教程(二)--配置详解

一、配置文件1.1 SpringBoot的全局配置文件SpringBoot的底层会自动配置好全局的配置,需要修改默认配置时,就需要使用一个全局的配置文件来进行修改SpringBoot可以使用以下两个全局配置文件:application.propertiesapplication.yml...

2019-06-18 20:09:23 650

原创 Spring Boot教程(一)--实例入门

一、SpringBoot简介Spring Boot是一个简化Spring开发的框架。用来监护spring应用开发,约定大于配置,去繁就简。我们在使用Spring Boot时只需要配置相应的Spring Boot就可以用所有的Spring组件,简单的说,spring boot就是整合了很多优秀的框架,不用我们自己手动的去写一堆xml配置然后进行配置。从本质上来说,Spring Boot就是Spr...

2019-06-12 23:15:46 3464

原创 SSM整合实例--(四)条件搜索

一、条件搜索商品条目一旦多了起来,就不能一页一页的翻找。需要设置条件,根据条件搜索条目。二、代码实现在原来的查找所有productList的功能基础上添加条件参数,设置条件查询。2.1 JSP页面修改product_list.jsp添加 searchDiv 代码,如下图所示。为搜索前端页面展示效果如下:新增的div中对应的js代码:function resetSearch()...

2019-06-11 19:42:24 2771 1

原创 SSM整合实例--(三)CRUD操作

一、SSM整合的CRUD操作本节操作除了需配置事务管理外,不需要配置额外的配置内容。基本都是jsp页面的js操作和后台代码操作。二、配置内容事务的配置在applicationContext-dao.xml中配置<!-- 定义事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.da...

2019-06-08 14:27:48 799

原创 SSM整合实例--(二)PageHelper分页操作

一、PageHelper分页简介MyBatis 分页插件 PageHelper,如果你也在用MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。摘自官网,听说是最方便的分页插件。二、PageHelper使用2.1 导入jar包使用maven的直接添加依赖就好了,这次没有使用maven,导入以下两个jar包。2.2 页面搭建(...

2019-06-06 18:19:56 911

原创 SSM整合实例--(一)项目搭建

一、框架简介SSM框架,即SpringMVC+Spring+Mybatis,其中SpringMVC与Spring可以更好的正好。对比SSH框架,Mybatis相比Hibernate更加简单易用,也更轻便,配置也较为简单。准备做一个显示商品列表,可以进行CRUD操作的小项目,这一节先搭建环境试运行列表显示。CRUD操作后面更新。二、项目搭建2.1 包结构如下jsp页面2.2 配置详细...

2019-06-05 13:26:27 783

原创 Mybatis(二)--Mapper代理开发

一、Mapper代理传统开发方式跟数据连接使用dao接口,dao接口的实现类存在大量重复语句,且存在硬编码,如Mybatis(一)中的类似语句sqlSession.delete("cn.cf.domain.User.deleteUserById", 3);传入的变量因为sqlSession使用泛型,无法判断是否正确。因此对程序的开发会有些不利。mapper代理因此使用mapper代理改...

2019-05-23 21:17:39 412 1

mysql-connector-java-5.0.8-bin.jar包

mysql-connector-java-5.0.8-bin.jar包,用于java与Mysql数据库连接

2019-03-11

空空如也

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

TA关注的人

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