
Java
不清不慎
热爱编程,热爱生活。
展开
-
在web环境下搭建shiro框架
上节讲了在JAVA SE环境下搭建shiro框架,这节主要在web环境下搭建shiro框架对web前端页面进行权限的控制。 一,整合spring,springmvc框架。 1.导入spring的相关jar包。 2.配置web.xml文件<context-param> <param-name>contextConfigLocation</param-name> <原创 2017-10-26 14:04:32 · 4128 阅读 · 0 评论 -
Netty入门教程之服务器与客户端案例
一、 Netty介绍1.什么是netty? 首先我们来看一下官方的介绍:*Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simpl...原创 2018-03-04 17:17:50 · 7044 阅读 · 3 评论 -
生产者-消费者模式案例以及数据共享队列【BlockingQueue】源码分析
一、生产者与消费者模式生产者与消费者模式时一个经典的多线程设计模式,它为多线程之间的协作提供了良好的解决方案,在生产者-消费者模式中,通常有两种模式线程,一类是消费者线程,另一类是生产者线程,生产者负责具体处理生产者提交的任务,消费者线程负责具体处理生产者提交的任务。生产者与消费者之间则通过共享内存缓冲区进行通信。生产者-消费者模式主要组件在于共享内存缓冲区,它作为生产者和消费者的通信桥梁...原创 2018-03-04 21:14:47 · 874 阅读 · 0 评论 -
Spring整合Dubbo框架开发分布式应用
**在上一篇我们介绍了如何使用Dubbo,但是出现了以下问题: 1.服务层的对象需要我们自己new,代码的耦合度很大。 2.开发效率低,要写很多代码。 3.不适合做web应用。 为了解决以上问题,我们来整合spring框架。**Spring整合Dubbo框架首先我们需要创建四个项目。 下面是项目的结构: —–Spring-Dubbo-Parent:父项目(打成jar包...原创 2018-03-18 11:30:01 · 307 阅读 · 1 评论 -
【JAVA并发包源码分析】循环栅栏:CyclicBarrier
一、认识CyclicBarrier对于CyclicBarrier大多数人感到陌生,其实CyclicBarrier是一种多线程并发控制使用工具,和CountDownLatch非常类似,实现线程之间的计数等待,也就是说一个线程或者多个线程等待其他线程完成任务,不过比CountDowwnLatch复杂。CyclicBarrier是循环栅栏的意思,所谓栅栏就是障碍物,阻止其他人进入,在多线程中,使...原创 2018-04-07 22:39:18 · 656 阅读 · 0 评论 -
JDK源码笔记之Integer深度解析以及并发下错误的加锁方式【踩坑笔记】
对于Java的数据类型Integer,大多人认为不就很简单的一个数据类型吗?是的,我以前也不在意,感觉关于integer没什么可说,但是不深入源码你永远不知道它给你留下的坑。一、谈谈integer留下的坑 首先我们来看一段代码。package cn.shinelon.jvm;public class TestInteger { public static void mai...原创 2018-04-05 18:59:27 · 503 阅读 · 4 评论 -
JDK并发包源码解析之深度剖析高效读写队列ConcurrentLinkedQueue
在Java的并发包中,存在着许多高效的并发工具类,它优于synchronized关键字,在JDK中提供了一个ConcurrentLinkedQueue工具类实现了高效的并发读写工具类,该工具类具有很高效的性能,因此,本片文章笔者将通过解读ConcurrentLinkedQueue源码的方式探究该数据结构的内部构造。一、无锁(CAS算法)在介绍这个工具类之前,先来讲讲无锁的概念以及其算法...原创 2018-04-23 22:27:18 · 668 阅读 · 0 评论 -
JAVA高并发之锁的优化及源码解读
在现代系统多核的时代,使用多线程明显了地提高了系统的性能,但是在高并发的环境中,激烈的锁竞争对系统的性能带来的严重的影响,因为对于多线程来说,它不仅要维持每一个线程本身的元数据,还要负责线程之间的切换,不断的挂起,唤醒,浪费了大量的时间,因此,有必要探讨一下如何将多线程中锁的优化做到极致,给系统带来更大的好处。对于“锁”性能的优化 本文将围绕“锁”优化来讲解,其中会涉及到部分JDK的源码解读...原创 2018-04-24 23:59:11 · 550 阅读 · 0 评论 -
JAVA数据结构跳表(SkipList)的原理以及使用
在JDK并发包中有很多的数据结构,最常用的有链表,哈希表等等,除了这些数据结构之外,还有一种特殊的数据结构跳表,可能大多数人都不太了解,因此,本篇文章主要介绍跳表这一数据结构的原理以及它在JDK内部的使用。一、什么是跳表?跳表(SkipList),是一种可以快速查找的数据结构,类似于平衡树。它们都可以对元素进行快速的查找。因为跳表是基于链表的(具体结构等下会将),因此,它的插入和删除效...原创 2018-04-25 20:14:51 · 10635 阅读 · 3 评论 -
【Java并发包】Semaphore使用详解以及源码解读
Java并发包下有很多并发操作的API,这些工具类为多线程环境提供很多常用操作,最为常见同步操作,我们可以使用synchronized关键字来进行同步操作。不过使用synchronized进行多线程之间的同步过于繁琐,有些操作要配合wait和notify使用,不便于我们操作,并且在有些情况下需要控制并发的线程数量,这一点是synchronized做不到的,因此,这篇文章主要来讲解semaph...原创 2018-05-17 00:18:10 · 1962 阅读 · 0 评论 -
【JVM实战】JVM常用参数
在虚拟机运行过程中,如果可以跟踪系统的运行状态,那么对于问题的故障排查会有一定帮助,本篇文章主要总结一些常用的参数,这样就可以在系统能够运行时监控垃圾回收,便于分析。主要参数如下:-XX:+PrintGC 打印GC日志-XX:+PrintGCDetails 打印详细的GC日志-XX:+PrintHeapAtGC 打印堆内存GC前后的信息-XX:+PrintGC...原创 2019-05-14 16:46:57 · 343 阅读 · 0 评论 -
【基础巩固篇】Java中的Buffer缓冲区探究
一、什么是缓冲区,与缓存的区别?首先简单的说下什么是缓存,缓冲的目的的是用来缓解应用程序上下层之间的性能差异,从而提高系统的性能。缓存是为了提高数据的访问性能,存放经常访问的数据以便于提高系统的性能。简单来说,而这都是为了提高系统的性能。但是它们之间存在着本质的差别:对于缓存它也可以消除上下层之间的速度不匹配的情况,最常见的在我们的计算机中,最早的计算机CPU直接和磁盘进行交互,但是磁盘...原创 2019-05-10 17:13:05 · 993 阅读 · 0 评论 -
【基础巩固篇】Java 8中对CAS的优化
Java的并发包下存在着许多并发工具,CAS也是其中的一员,对于CAS(CompareAndSet)我们并不陌生,它基于乐观锁的机制,当前值等于期望值时设置成功,但是它也会导致一系列问题,当大量线程同时去访问时,就会导致空旋转,CPU资源消耗过多,而且执行效率也不高。同时它也会产生ABA问题,不过在java中可以使用基于时间版本号的AtomicStampedReference来解决。(本文默认读...原创 2019-05-10 23:23:32 · 1157 阅读 · 0 评论 -
【基础巩固篇】Java中String揭秘
String对象是我们日常使用的对象类型,字符串对象或者其等价对象(如char数组),在内存中总是占据了最大的空间块,因此如何高效地处理字符串,是提高系统整体性能的关键。在此之前,String作为一个对象类型,我们必须清楚Java对象的创建以为对象的内存结构。1.对象的创建以及内存结构创建一个对象通常需要使用new关键字,当虚拟机遇到一条new指令的时候,首先会检查这个指令的参数是在常量池中...原创 2019-05-12 17:11:20 · 474 阅读 · 0 评论 -
JAVA登录验证码的实现
对于登录验证码,相信大家都不陌生,在一般的网站的登录时都会要求你输入验证码,这样可以有效保护你的账户的安全,防止黑客无限尝试登录暴力破解密码,也可以减少网站的垃圾数据。下面我们来使用java servlet来实现登录验证码的功能。首先创建一个web项目,我们这里给出一个很简陋的jsp页面进行前端展示,主要是为了实现验证的额功能。下面贴出代码: index.jsp:<%@ pag...原创 2018-03-14 21:42:59 · 1247 阅读 · 0 评论 -
《构建在Spring Web Flow框架上的简单订单流程系统》
Spring Web FlowSpring Web Flow是一个WEB框架,它使用于元素按规定流程运行的程序,它是Spring Mvc的扩展,它支持基于流程的应用程序,它将流程的行为的类和视图分离开来。关于Spring Web Flow,官网上的介绍是这样的:Spring Web Flow builds on Spring MVC and allows implementing th...原创 2018-02-27 22:11:12 · 823 阅读 · 0 评论 -
jsp模拟留言板
最近在做一个项目,遇到了许多问题,感觉到基础还是很重要的,所以重新回顾了以前的基础知识,今天向大家分享用jsp模拟留言板的功能首先先说下一jsp的内置对象application,它和session有一个共同点就是在Tomcat服务器启动的时候创建,在服务器关闭的时候自动销毁,下次启动时重新创建。与session不同的是,session与客户一一对应,即当前客户本次访问web服务器时,ses原创 2017-10-22 12:56:13 · 2598 阅读 · 0 评论 -
spring_mvc框架第一讲
1.mvc框架做的事情 1).将一个url映射到一个java类或java类的方法 2).封装用户提交的数据 3).处理请求 ,调用相关的业务处理,封装响应的数据 4).将响应的数据进行渲染jsp,html,freemark等等2.spring mvc是一个基于请求响应的轻量级mvc框架。3.为什么要学习spring mvc框架? 1).性能较strut原创 2017-10-21 23:56:01 · 270 阅读 · 0 评论 -
ehcache缓存技术讲解
一,ehcache缓存 在这里,我们首先讨论一个问题,什么是缓存,我们为什么要使用缓存?缓存实际上是为了减轻数据库服务器的负载,使用缓存,我们可以将一些常用的数据放入缓存,因为这些数据经常性的使用,大大增加了服务器的负载,但是当放入缓存后,在使用这些数据的时候,首先会从缓存中查找,如果缓存中有就读取,不会再到数据库中查找,如果缓存中没有,才会到数据库中查询,在这里,需要注意的是,ehcache的是原创 2017-11-10 21:22:27 · 11958 阅读 · 5 评论 -
搭建第一个shiro安全框架。
**Java se 环境下搭建你的第一个shiro框架实现用户登录验证以及权限的验证**1.什么是shiro框架?1)Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能:认证:用户身份识别,也就是常说的“用户登录”。授权:访问控制密码加密 - 保护或隐藏数据防止被偷窥;会话管理 - 每用户相关的时间敏感的状态。 shiro框架可以对任何一个应用原创 2017-10-24 18:03:27 · 799 阅读 · 0 评论 -
Spring AOP随笔(一)
一,概念首先有几个AOP术语,在这里陈述一下。 1. 连接点(joinpoint) 程序执行的某一个特定位置,如类初始化前,初始化后,类的某个方法调用前和调用后,方法抛出异常后,一个类或者一段代码拥有一些具有边界性质的特定点,这些代码中的特定点就是“连接点”。spring仅支持方法的连接点,即仅能在方法调用前,方法调用后,方法抛出异常时以及方法调用前后这些程序执行点的织入增强,有一个形原创 2017-11-03 21:58:53 · 501 阅读 · 1 评论 -
linux下安装redis并且启动
一,redis简介及安装 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis原创 2017-11-16 22:41:18 · 2180 阅读 · 0 评论 -
JSP知识点总结
JSP(java server pages):1.jsp页面与jsp标记一个jsp页面可由5中元素组合而成:普通的HTML标记。jsp标记,如指令标记,动作标记。变量和方法声明。java程序片。java表达式。当服务器上的一个jsp页面第一次请求执行时,服务器的jsp引擎首先将jsp文件转换成一个java文件,然后再将这个java文件编译生成字节码文件,然后通过执行字节码...原创 2017-11-16 16:50:54 · 571 阅读 · 0 评论 -
Quartz框架从入门到实战
一、什么是quartz作业调度? Quartz是一个完全由java编写的开源作业调度框架。不要让作业调度这个术语吓着你。尽管Quartz框架整合了许多额外功能,比另一个调度框架Timer强大了许多,但是它使用也不难,下面我废话不多说,直奔主题。 二、quartz的体系结构。 1.quartz中使用了一下几种设计模式。Builer模式Factory模式组件模式链式写法2.三个主要的概念原创 2017-11-24 18:27:41 · 13848 阅读 · 3 评论 -
SpringData-JPA操作数据库
一、什么是springdata?Spring Data的任务是为数据访问提供一个熟悉的、一致的、基于Spring的编程模型,同时仍然保留底层数据存储的特殊特征。它使使用数据访问技术,关系型数据库,非关系型数据库,map-reduce框架和基于云服务变得更加容易。这是来自springdata官网的解释,简单的说springdata可以操作关系型数据库以及非关系新数据库,使得操作更加简单快捷,还有更多的原创 2017-11-29 20:22:15 · 452 阅读 · 0 评论 -
基于HttpClient实现RPC远程服务调用功能【SpringBoot项目】
一、什么是RPC?RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。 RPC采用客户机/服务器模式。请求程序就是一个原创 2018-02-10 16:26:16 · 16965 阅读 · 12 评论 -
Springboot+atomikos+jta实现分布式事务统一管理
一,什么是分布式事务? 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。说起分布式事务,提一下上...原创 2017-11-09 22:43:58 · 11569 阅读 · 8 评论 -
SpringBoot集成多数据源
一,前面我们介绍了springboot的快速启动,大家肯定对springboot也有所了解,下面我们来介绍一下springboot怎么集成多数据源。在有的项目开发中需要在一个项目中访问多个数据源或者两个项目之间通信(实质上是互相访问对方的数据库),在这里,我们介绍一下在一个项目中如何集成多个数据源(即访问多个不同的数据库),因为在项目中有时会有这种需求,比如在一个大型项目开发中,一个数据库中保...原创 2017-11-09 13:03:39 · 1631 阅读 · 0 评论 -
SpringBoot快速启动和建立统一父pom
一,springboot快速启动首先,介绍一下springboot,springboot的出现,解决了spring的很多不足之处,使得spring的霸主地位不可动摇,以前搭建的web项目最麻烦的就是测试,每次修改程序都要重新启动服务器,这使得浪费了开发人员大量的时间,但是使用springboot可以快速启动,加快开发时间,哈哈,这也是我的个人体验。下面我们开始写代码。1.开发环境 开...原创 2017-11-05 15:50:05 · 11615 阅读 · 0 评论 -
实现LRU Cache(java版)
LRU算法,也叫最近最少使用算法,我们可以使用该算法来实现cache机制,简单地说就是缓存一定量的数据,当超过设定阀值的时候就把一些过期的数据删除掉,本篇文章我们来看看如何实现LRU Cache,下面我们使用两种方式来实现。基于LinkedHashMap在java的集合类中有LinkedHashMap类,当参数accessOrder为true的时候,就会按照访问顺序排序,最后访问的放在最前面,...原创 2019-07-07 09:57:36 · 2920 阅读 · 0 评论