
java
文章平均质量分 82
xiaxiaomao1981
华中科技大学毕业,十余年行业经验,曾带领团队完成cpn客户管理系统,并完成农业银行网站,乐途旅游网等网站的开发,在.net和java领域有深厚的积累,授课风格深入浅出,直指核心。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spring Security七:授权
授权的方式包括web授权和方法授权,web授权是通过url拦截进行授权,方法授权是通过方法拦截进行授权,他们都会调用accessDecisionManager进行授权决策,若为web授权则拦截器为:FilterSecurityIntecepter,若为方法授权则拦截器为:MethodSecurityIntecepter,如果同时通过web授权和方法授权则先进行web授权再执行方法授权,最后决策通过...原创 2020-02-29 07:58:33 · 333 阅读 · 0 评论 -
Spring Security六:自定义认证
通过前面的学习我们可以使用spring security完成简单的认证和授权,但是实际项目中用户的数据往往都是存在数据库中,登录页面也需要可以自由定制,下面我们就来学习使用spring security如何完成创建mavean项目选择模板 mavean-archetype-webapp 自定义登录页面: 创建登录页面,结构如下:在WEBCONFIG.j...原创 2020-02-26 07:57:28 · 409 阅读 · 0 评论 -
Spring Security五:Spring security原理
Spring security可以进行认证和授权,认证和授权需要针对每一个请求,所以这个功能,可以用过滤器来实现,spring security正是通过一系列过滤器来实现认证和授权功能的。我们来看看其中几个比较重要的过滤器,类和接口。 UserDetails: public interface UserDetails extends Serializable {Coll...原创 2020-02-25 07:51:09 · 383 阅读 · 0 评论 -
SpringSecurity四:Springboot集成SpringSecurity
Spring security也是spring家族中的一员,使用spring boot集成spring security非常的方便,下面就通过一个例子来讲解一下如何在spring boot中集成spring security 创建mavean工程springboot_security Pom.xml<parent> <groupId>org....原创 2020-02-24 07:37:45 · 225 阅读 · 0 评论 -
Spring Security三:Spring Security介绍
Spring Security是企业中使用广泛的认证授权框架,它也是spring家族中的一员,特别是它和spring boot结合开发非常的简单,能够极大的提高我们的生产力1创建一个mavean工程:SpringSecurity022pom中在上一个案例的基础上增加spring Security的依赖:<dependency><groupId>...原创 2020-02-23 06:59:05 · 166 阅读 · 0 评论 -
Spring Security二:Session的认证方式
下面来通过一个实例讲解Session认证的方式创建工程:引入依赖:<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifa...原创 2020-02-22 07:55:05 · 3301 阅读 · 0 评论 -
SpringSecurity一:认证和授权
什么是认证?认证就是取得合法身份,比如京东需要用户登录以后才能才能下订单,这里的登录就是认证。登录成功以后就具有了合法身份可以继续进行下一步的操作。常用的认证方式常用的认证方式有基于session的认证和基于token的认证。先来看一下基于session的认证:用户登录成功后服务器会将用户的信息保存在session(当前会话)当中,每个session对应有一个sessionid...原创 2020-02-21 07:42:07 · 822 阅读 · 0 评论 -
MySql优化之show profile分析SQL
Mysql从5.0.3版本开始增加了对show profiles和show profile的支持,show profile能够帮我们了解在sql语句执行过程中时间耗费在了哪些地方以下操作都是session级别的我们可以通过 select @@have_profiling来显示当前mysql是否支持profile:通过 select @@profiling查看profile是否...原创 2020-02-19 07:43:31 · 467 阅读 · 1 评论 -
MySql优化之分析执行计划
explain分析执行计划通过以上步骤定位到有问题的sql语句以后我们可以通过explain来分析一下该select语句的执行计划,包括该语句如何连接和连接的顺序Explain select * from user where id = 1;这个命令可以显示select * from user where id = 1这个查询语句的执行计划Id:select查询的序列号,...原创 2020-02-18 07:50:29 · 233 阅读 · 0 评论 -
MySql优化之前期探索
一个系统中数据库往往会成为性能瓶颈,在开发阶段更多考虑的可能是功能的完成,随着系统的投入使用,数据量越来越大,sql语句查询速度慢的问题就会被凸显出来。对于一个有sql语句性能为题的系统,如何找出问题,解决问题,就是下面要探讨的内容:查看sql执行频率:Mysql客户端连接成功以后,通过show [session|global] status命令可以提供服务器状态信息,show sess...原创 2020-02-17 08:11:41 · 182 阅读 · 0 评论 -
MySql的逻辑架构
Mysql在互联网企业中应用非常广泛,互联网企业的特点访问量非常大,怎么样优化mysql就成了摆在我们面前的一道难题。我们从mysql的逻辑架构说起:最上面一层是客户端的连接服务,主要完成客户端的连接处理,授权认证。在该层有一个线程池,每一个连接从线程池中获取线程,省去了创建和销毁线程的开销。中间这一层可以完成查询解析,分析,优化,缓存。存储过程,触发器,视图也是在这一层。最下...原创 2020-02-16 08:02:45 · 222 阅读 · 0 评论 -
Mysql索引的用法
1.索引的分类在mysql中索引可以分为三类:主键索引:设置为主键的列会创建主键索引,主键唯一非空。 单列索引:即索引中只包含一个列,一张表可以有多个单列索引 唯一索引:索引列的值必须唯一,允许有空值4)复合索引:即索引中可以包含多个列2.创建索引可以在创建表的同时创建索引,也可以在已有表的基础上去创建索引环境准备创建数据库和表:CREATE DATABA...原创 2020-02-15 08:08:00 · 211 阅读 · 0 评论 -
mysql索引探秘
1.索引是什么东西?索引就是一个数据结构,我们把表中的记录用一个适合高效查找的数据结构来表示,目的就是让查询变得更高效。2.它到底怎么运作的?这个问题就说来话长了,且听我慢慢道来:在mysql中使用最广泛的数据引擎是InnoDB 引擎,它里面用的是 B+ 树索引。我们重点分析一下这个索引的原理:要想理解B+树索引要先从 二叉查找树,平衡二叉树和 B 树说起因为B+树索引就是...原创 2020-02-14 08:02:22 · 197 阅读 · 0 评论 -
适配器模式
话说有一个培训机构做了一个管理系统,里面有一个教师类,教师类中有讲课的方法。实现教师类和其接口Public interface Iteach{ Void teach ();}Public class Teacher implements Iteach { void teach(){ System.out.println(...原创 2020-02-13 08:03:04 · 121 阅读 · 0 评论 -
HashSet的原理?
我们先看一下HashSet和TreeSet在整个集合框架中的位置。他们都实现了Set接口。他们之间的区别是HashSet不能保证元素的顺序,TreeSet中的元素可以按照某个顺序排列。他们的元素都不能重复。先来看一下HashSet:public static void main(String[] args) { Set<String> set = new Ha...原创 2020-02-12 08:10:49 · 241 阅读 · 0 评论 -
ArrayList,LinkedList和Vector的区别
ArrayList,linkedList和Vector都继承自List接口。ArrayList和Vector的底层是一个动态数组,LinkedList的底层是一个双向链表.ArrayList和Vector的区别就是ArrayList是线程不安全的,Vector是线程安全的,Vector中的方法都是同步方法(synchronized),所以ArrayList的执行效率要高于Vector,它也是用...原创 2020-02-11 08:09:44 · 289 阅读 · 0 评论 -
Cas详解
Cas也是线程同步的一种解决方案,很多人区分不清楚它和synchronized。先看下这段代码:public class MyCas { private static int num = 0; public static void main(String[] args) throws InterruptedException { for (int i = 0...原创 2020-02-10 08:24:04 · 329 阅读 · 0 评论 -
ThreadLocal详解
在多线程应用程序中如果我们想让每个线程有一个自己对应的变量可以进行存取,不受其它线程的影响就可以使用ThreadLocal,而synchronized是通过加锁来保证一次只有一个线程能对共享变量进行修改。来看一下ThreadLocal的使用:public class ThreadLocalDemo { ThreadLocal<Integer> threadLocal ...原创 2020-02-09 08:27:13 · 538 阅读 · 0 评论 -
volatile关键字
要想更好的理解volatile关键字,我们先来聊聊基于高速缓存的存储交互:我们知道程序中进行计算的变量是存储在内存中的,而处理器的计算速度和内存的读取速度完全不在一个量级,区别犹如兰博基尼和自行车。要让兰博基尼开一小段就停下来等会自行车显然不太合适,所以在处理器和内存之间加了一个高速缓存,高速缓存速度远高于内存,犹如奔驰,虽然和兰博基尼还有一定差距,每个处理器都对应一个高速缓存。当...原创 2020-02-08 07:47:05 · 203 阅读 · 0 评论 -
synchronized 底层实现原理
Synchronized是Java并发编程的基础,也是面试的高频考点。它的用法很独特,每一个对象都可以作为锁,很多人就很疑惑,它到底锁定的是什么呢?要想真正弄明白这个问题就需要深入到Synchronized的实现机制,下面我用最易懂的方式来解析一下这个最难懂的关键字Synchronized被称为同步锁,它的作用是保证一段代码在同一时间只能被一个线程执行,它是如何做到的呢?synch...原创 2020-02-07 07:40:35 · 529 阅读 · 0 评论 -
HashMap的底层原理
HashMap的底层原理面试必考题。为什么面试官如此青睐这道题?HashMap里面涉及了很多的知识点,可以比较全面考察面试者的基本功,想要拿到一个好offer,这是一个迈不过的坎,接下来我用最通俗易懂的语言带着大家揭开HashMap的神秘面纱一:HashMap的节点:HashMap是一个集合,键值对的集合,源码中每个节点用Node<K,V>表示static class...原创 2020-02-06 08:44:45 · 178 阅读 · 0 评论 -
Springmvc执行流程
Springmvc自出道以来便以其简单易用,功能强大而闻名于java界,借着其亲爹spring的名头迅速流行起来,可怜昔日的老大structs2频频被曝漏洞,加上使用的复杂性,逐渐日暮西山 ,被springmvc所超越。今天我就来带大家探讨一下springmvc的执行过程:先上图:下面结合源代码和上图来说明:一:发送请求到DispatchServlet(中央控制器)Web.xm...原创 2020-02-05 10:53:16 · 332 阅读 · 0 评论 -
Spring boot自动配置原理
springboot和ssm之间最大的区别就在于它的自动配置,springboot自动配置原理也是springboot的精髓,可以说掌握了它就掌握了springboot的90%,便可以游刃有余的使用springboot,我来说说springboot的自动配置原理:我们创建好一个springboot项目它是从这里开始执行的:@SpringBootApplicationpublic cla...原创 2020-02-04 13:23:27 · 121 阅读 · 0 评论 -
Spring事务的实现
不知道你有没有被spring的事务困扰过,事务传播行为,事务隔离级别,aop一堆的概念袭来,要不要缴械投降?本文就来带你蹂躏这些难懂的概念,各个击破最终理解事物。Spring提供了一个事务管理接口,PlatformTransactionManager它里面提供了常用的事务操作的方法:public interface PlatformTransactionManager {//获取...原创 2020-02-03 16:38:02 · 155 阅读 · 0 评论 -
Spring事务传播行为
假如有两个方法A和B,A调用B,这两个方法上都加了事物,究竟使用哪个事物?Public void A(){ B();}这就是spring事物传播行为要解决的问题。在spring中有七种事务传播行为。 简单介绍一下这七种方式(如果不懂不用纠结,后面详细介绍)常用:REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入...原创 2020-02-02 10:44:40 · 175 阅读 · 0 评论 -
事务的隔离级别-原来可以这样来处理胀读,幻读,不可重复读
事务是数据库中的一个核心概念,指的是对数据库的一组操作作为一个整体,要么都执行要么都不执行。事务有四大特性:原子性:每个事务都是一个整体,不可再拆分,事务中的sql语句要么都执行成功,要么都执行失败。 一致性:事务执行前后数据库的状态保持一致。比如不管如何转账,转账前后的总钱数是不变的。 隔离性:事务和事务之间不应该相互影响,保持隔离。 持久性:事务一旦提交对数据库的修改就是永久的,...原创 2020-02-01 08:44:22 · 494 阅读 · 0 评论 -
Spring AOP解决了面向对象不能解决的什么问题
Spring AOP是Spring的三大基石之一它究竟解决了什么痛点能获如此殊荣?Java在面向对象的世界里无限风光,oop成就了无数经典的软件,它让我们的软件更健壮,更易于维护,但是程序猿对软件的质量追求是永无止境的,oop对于业务的抽象和封装完美的无懈可击然而对于系统层面的一些需求比如系统日志,性能统计等,分散在软件的各个角落,维护起来很是不爽,这种问题的解决确是oop力所不能及的...原创 2020-01-31 11:02:20 · 1299 阅读 · 0 评论 -
spring ioc原理解析
spring作为java家族最为辉煌的框架究竟做对了什么让它享有如此盛誉?下面通过剖析spring ioc这个spring最为核心的功能来把玩一番一:spring ioc的原理:小A刚到公司老大安排了一个活,公司前不久刚开发了一个社交网站,运行不太稳定,经常会出现莫名其妙的bug,需要在必要的地方加上日志,方便找到错误,小A很快就开发好了日志记录类,为了以后的扩展性,还添加了一个接口:...原创 2020-01-30 08:51:21 · 308 阅读 · 0 评论 -
如何理解spring ioc
什么是iocioc全称是【Inversion of Control】控制反转,按照字面意思理解,将控制反转过来,这里的控制指的是什么,为什么要进行反转,ioc可以解决什么问题?要回答这些问题,我们需要先了解一下ioc为什么会产生为什么要有iocjava是一门面向对象的语言,我们的应用程序通过一个个对象之间的相互关联和作用来完成功能,在网上看到一个特别形象的比喻,这里借用一下:这...原创 2020-01-29 09:26:47 · 652 阅读 · 0 评论 -
mysql提升查询效率的神器索引
1.索引是什么东西?索引就是一个数据结构,我们把表中的记录用一个适合高效查找的数据结构来表示,目的就是让查询变得更高效。2.它到底怎么运作的?这个问题就说来话长了,且听我慢慢道来:在mysql中使用最广泛的数据引擎是InnoDB 引擎,它里面用的是 B+ 树索引。我们重点分析一下这个索引的原理:要想理解B+树索引要先从 二叉查找树,平衡二叉树和 B 树说起因为B+树索引就是...原创 2020-01-28 11:10:22 · 595 阅读 · 0 评论 -
mybatis的延迟加载如何实现?
mybatis的延迟加载就是按需查询,在需要的时候进行查询。有两张表:图书表(book):图书类型表(category):他们之间通过类型id进行关联,现在我要显示图书类型名,点击类型名再显示该类型下的所有图书。我们可以这样做在类型实体类里面添加一个属性存放该类型下的图书public classCategory {private intcid;...原创 2020-01-27 20:17:05 · 564 阅读 · 0 评论 -
java比c++强大之处jvm垃圾收集算法
java可以自动进行垃圾收集,c++需要手动释放内存,这个功能将程序员解放出来,能将更多的注意力放在需要实现的业务上,这也是java相对c++的一个巨大优势,jvm有哪些垃圾收集算法呢?标记清除算法:算法分为标记和清除两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象从图中可以看出这种算法的缺点在于,垃圾被回收以后造成了大量不连续的内存碎片。碎片太多可能会...原创 2020-01-26 12:08:44 · 239 阅读 · 0 评论 -
垃圾回收器如何判断是否需要回收
垃圾回收器在回收垃圾之前第一件事就是判断哪些是可以被回收的对象,如何判断呢?我们可以根据该对象是否还有引用指向它来进行判断,如果有则不能回收,如果没有则可以回收,具体有以下几种算法:引用计数算法:给对象添加一个引用计数器,每当它被引用一次计数器就加一,当该引用失效时就减一,如果计数器的值为0就表示它要被垃圾收集器作为垃圾收集了。这种算法存在一个问题,就是如果对象之间互相循环引用,他们就不可能...原创 2020-01-23 10:46:06 · 308 阅读 · 0 评论 -
java类的加载机制
一:java类的加载过程编译后的Java类是以字节码的形式存在的,它只有被加载到虚拟机内存中才能被使用,它是如何被加载到内存中的呢?下图为类加载到内存的机制:1:加载:在加载(注意和类加载是不同的概念)阶段虚拟机需要完成三件事(1).通过一个类的全限定名(类名全称,带包路径的用点隔开,例如: java.lang.String)来获取其定义的二进制字节流(被编译以后的字节码文...原创 2020-01-22 17:44:13 · 145 阅读 · 0 评论 -
jvm的内存结构
Jvm的内存结构是理解jvm的基础,下面我用最浅显易懂的语言来分析一下jvm的内存结构,jvm内存分为五大块:标灰的是线程公有的内存区域,没有标灰的是线程私有一:程序计数器:程序计数器是用来指示当前线程要执行哪条指令,并且在执行完该条指令后让程序计数器指向下一条指令,直到将程序执行完毕。指令需要靠cpu来执行,在多线程中,多个线程是通过轮流切换分配cpu的时间片而执行的,在切换时需要记...原创 2020-01-20 10:15:57 · 185 阅读 · 0 评论 -
final,finally,finalize三者的含义和区别
final表示不可变的,它可以用来修饰类,方法和变量。当它修饰类的时候表示该类是不能被继承的,因为抽象类就是用来被继承的,所以abstract关键字和final关键字不能共存。当它修饰方法的时候表示该方法是不能被重写的。当它修饰变量的时候表示该变量的值不能发生变化也就是该变量为一个常量。对于用final修饰的变量我们必须在申明它的时候赋值或者是在构造函数中给它赋值。final...原创 2020-01-19 14:15:47 · 745 阅读 · 0 评论 -
接口和抽象类的区别
我们先看下抽象类的由来,抽象类是将具有类似特点的事物相同部分进行抽取而来的,他的目的是提供继承:例如:程序员:属性:姓名、薪水方法:工作经理:属性:姓名、薪水、奖金方法:工作程序员和经理有共同的属性:姓名,薪水,有共同的方法工作,将他们这些共性的部分抽取出来就可以形成抽象类 员工。在这个例子中员工本身是没有意义的他的意义就在于可以作为程序员和经理的父类,...原创 2020-01-19 14:14:27 · 165 阅读 · 0 评论 -
作用域public,protected,private, 以及不写时的区别
Public:公共的具有最大的访问权限,被public 修饰的类,属性和方法不仅可以在类的内部访问也可以在类的外部访问。Protected:受保护的,被Protected修饰的类,属性和方法可以在本类中或者在其子类中被访问,即使子类和它不在同一个包。Default:只允许在同一个包中进行访问。Private 只能在本类中被访问。不写的时候默认为 Default...原创 2020-01-19 14:12:34 · 653 阅读 · 0 评论 -
Java包装类型你用对了吗
写Java的小伙伴们是不是经常会看到 int,Integer这样的东东,他们都是数据类型,都可以用来修饰变量,你有没有想过他们之间有什么区别,什么时候用哪个?还是不管三七二十一逮到哪个用哪个?在写程序的时候有没有碰到因为用错这两种类型导致程序错误的情况,碰到了是直接换另一种还是深入思考为什么?看完这篇文章你的这些疑问都会迎刃而解。在java中有八种基本数据类型对应每种基本类型又有八种包装类型:...原创 2020-01-19 14:10:11 · 532 阅读 · 0 评论 -
面向对象的三大特性
封装,继承,多态是面向对象的三大特征:封装:我们家里的电视机,里面有各种电路板,和电子元器件,这些电路板和元器件都被装到了电视机的壳里,相当于被封装起来了,对外提供一个开关按钮,我们一按按钮就可以打开电视。电视机生产厂商不允许我们操作电视机内部的东西,而提供给我们一个开关按钮,我们可以通过这个按钮来操作电视机壳里面的东西,这就是封装。对应到程序代码里面,封装可以体现在很多方面,比如方...原创 2020-01-19 14:09:26 · 124 阅读 · 0 评论