JavaEE专业技能
Java Web系列开发,Jsp/Servlet、Spring、SpringMVC、Mybatis框架;还有涉及到的其他web相关框架等。
YEN_csdn
这个作者很懒,什么都没留下…
展开
-
Java中Fail-Fast机制、ConcurrentModificationException异常
ConcurrentModificationException 异常:当方法检测到对象的并发修改,但不允许修改时就会抛出这个异常。Fail-Fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合操作时就可能会产生Fail-Fast 事件。 比如:有两个线程A和B,线程A通过iterator 遍历集合T中的元素时,某个时候线程B修改了集合T的结构,此时就会产生F原创 2016-06-07 20:58:27 · 1119 阅读 · 0 评论 -
Java集合框架使用场景
不需要唯一用List 需要快速插入、删除元素:用LinkedList 需要快速访问元素: |–单线程环境:用ArrayList |–多线程环境:用Vector 需要先进后出的特殊结构用Stack需要唯一用Set 需要指定的顺序:TreeSet 不需要指定的顺序:HashSet 需要得到与存储一致的顺序:LinkedHashSet存储的是键值对用Map 涉及堆栈、队原创 2016-06-14 10:02:26 · 3767 阅读 · 3 评论 -
多线程的实现基础知识总结
多线程是在同一程序内部并行执行,因此会对相同的内存空间进行并发读写操作。Java中实先多线程的方式主要有如下几种:1.继承Tread类2.实现Runable接口3.实现Callable接口(应用程序可以使用Executor框架来创建线程池)。其中最常见的是继承Tread类和实现Runable接口这两种方式。这两种方式的话一般选择实现Runable接口,因为实现Runable接口比继承Trea原创 2016-06-14 22:05:00 · 788 阅读 · 0 评论 -
多线程执行时为什么调用的是start()方法而不是run()方法
Thead类中start()方法和run()方法的区别 start()用来启动一个线程,当调用start()方法时,系统才会开启一个线程,通过Thead类中start()方法来启动的线程处于就绪状态(可运行状态),此时并没有运行,一旦得到CPU时间片,就自动开始执行run()方法。此时不需要等待run()方法执行完也可以继续执行下面的代码,所以也由此看出run()方法并没有实现多线程。原创 2016-06-15 11:34:25 · 11113 阅读 · 5 评论 -
关于线程的中断机制
Java中没有提供任何的机制来安全的终止线程,那我们应该怎么让线程停止或者中断呢? java停止或中断线程有下列方式: 1.调用Thread.stop() 2.利用Thread.interrupt()方法和机制调用Thread.stop() 使用这种方法强迫停止一个线程,并抛出一个新创建的ThreadDeath对象作为异常,停止一个还未启动的线程也是允许的,如果稍后启动该线程,他会立即终止。原创 2016-06-15 13:08:14 · 3430 阅读 · 0 评论 -
线程的生命周期与常用方法
线程的生命周期一共五个状态:新建、就绪、运行、堵塞、死亡 (1)新建 new Thread Thread thread=new Thread(); 当创建一个Thread对象时,这个线程就进入了新建状态,有了自己的内存空间,但还没有启动,此时线程还不是活的。 (2)就绪 runable 线程已经启动,正在等待CPU时间片。(通过线程的start()方法启动线程后进入就绪状态),此时具备运原创 2016-06-15 14:24:28 · 1198 阅读 · 0 评论 -
Java守护线程(后台线程)
Java守护线程(后台线程) java的垃圾回收线程就是一个守护线程。 当线程结束的时候守护现场也就自然会结束了,守护线程和普通线程的写法是一样的,只是在start()之前要先使用public final void setDaemon(boolean vale)设置为true。可以使用thread.isDaemon()判断特定的线程thread是否为守护线程:public class Threa原创 2016-06-16 16:23:48 · 2452 阅读 · 0 评论 -
Java多线程-当前线程副本:ThreadLocal
ThreadLocal是一个关于创建线程局部变量的类。 一般情况我们创建的变量是可以被任何一个线程访问并修改的,而使用ThreadLocal创建的变量只能被当前线程访问,其他线程无法访问和修改。 ThreadLocal<T> 接口的方法也很简单,只有四个方法: public class ThreadLocalDemo { //通过匿名内部类创建一个ThreadLocal对象。原创 2016-06-16 20:27:53 · 1603 阅读 · 0 评论 -
Java内存模型与多线程数据可见性和操作的有序性
CPU在计算的时候,并不总是从内存读取数据,而是按:寄存器->高速缓存->内存的顺序读取,一些使用频繁的数据会被放在寄存器和高速缓存中,当线程计算完后,这些缓存的数据在适当的时候被写回内存,当多个线程同时读取某个内存的数据时,会涉及到数据的可见性和操作的有序性问题。 Java是平台无关性语言,JLS(java语言规范)定义了一个统一的内存管理模型JMM(Java Memory Model),JMM原创 2016-06-17 18:34:23 · 1332 阅读 · 0 评论 -
Java多线程线程安全实现方式
线程安全就是要保证数据的高度一致性和准确性,但不是一定要加锁才是线程安全性,只要代码里没有变量互串,线程之间互不影响,就是线程安全的。 要了解线程安全,可以先看一下线程不安全是怎样的一种现象。public class TreadNoSafeDemo { public static void main(String[] args) { new ThreadNoSafeTest(原创 2016-06-17 19:38:30 · 14964 阅读 · 3 评论 -
Java多线程synchronized、ReentrantLock、ReentrantReadWriteLock 和StampedLock 的对比
synchronized是在JVM层面上实现的,可以通过一些监控工具控制synchronized的锁定,当代码出现异常时,JVM会自动释放锁定。当只有少量竞争者的时候,synchronized是一个很好的通用的锁实现。synchronized的锁是针对一个对象的。ReentrantLock、ReentrantReadWriteLock 和StampedLock都是代码层面的锁定,要保证锁一定会被释原创 2016-06-17 22:24:39 · 1863 阅读 · 0 评论 -
Java关键字volatile修饰变量
volatile关键字的作用是告诉编译器,凡是被该关键字申明的变量都是易变的、不稳定的,所以不要试图对该变量使用缓存等优化机制,而应当每次都从他的内存地址中去读取值,但volatile并不是每次更改完就要立刻将他写回内存,volatile只提供了内存的可见性,并不提供原子性(与锁机制的区别:锁机制即提供了内存的可见性又提供了原子性)。 使用volatile标记的变量在读取或写入时不需要使用锁,原创 2016-06-18 08:55:22 · 2058 阅读 · 0 评论 -
线程安全的集合类、CopyOnWrite机制介绍
关于集合框架的其他部分可以查看另一篇文章:JAVA集合框架学习总结,这里仅就集合框架中的线程问题做讨论,有错误之处欢迎指正。LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的; HashMap是非线程安全的,HashTable是线程安全的;Java.util.concurrent.ConcurrentHashMap ConcurrentHashMa原创 2016-06-18 14:22:22 · 1655 阅读 · 0 评论 -
Java反射机制
Java反射机制可以让我们在运行期检查类、接口、变量、以及方法的信息。反射机制还可以让我们在运行期实例化对象,调用方法,通过调用get/set方法设置变量的值。 那么,通过Java的反射机制我们能获取到哪些信息呢?主要就是一下几大类:类构造器变量(包括私有的)方法(包括私有的)访问器(Sitter/Getter)注解泛型数组动态代理动态类加载与重载下面通过操作Test类的代码原创 2016-06-18 21:02:55 · 733 阅读 · 0 评论 -
Java NIO和IO的区别
IO的主要内容FileInputStreamOutputStreamReaderWriterRandomAccessFileNIO有以下核心的数据抽象类型。BufferChannelsSelectorIO是面向流(Stream)的,NIO是面向缓冲(Buffer)的。 面向流就是每次都是流中读取一个或多个字节/字符,直至读完所有的字节/字符,不能前后移动流中的数据;面向缓冲是原创 2016-06-19 19:52:45 · 807 阅读 · 0 评论 -
Java注解
Java注解是插入代码中的一种注释或者说一种元数据(mete data)。这些注解信息可以在编译期使用编译期使用预编译工具进行处理,也可以运用Java的反射机制在运行时处理。注解为我们在代码中添加信息提供了一种形式化的方法。Java中的注解主要是:元注解自定义注解元注解 Java提供了四个基本的元注解类型: 这些类型在:java.lang.annotation包中 @Documente原创 2016-06-23 21:40:32 · 1937 阅读 · 0 评论 -
Java 中网络相关 API:InetAddress、URL 的应用
Java 中网络相关 API 的应用(1)Java 中的 InetAddress 的应用 (此类表示互联网协议(IP) 地址),使用方法如下:public class InetAddressDemo { public static void main(String[] args) throws UnknownHostException { //获取本机的InetAddress原创 2016-07-25 23:54:45 · 703 阅读 · 0 评论 -
初识Java TCP/IP Socket-TCP网络编程知识
Java为TCP提供了两个类:Socke 类和 ServerSocket 类。 一个 Socket 实例代表了 TCP 连接的一个客户端,而一个 ServerSocket 实例代表了 TCP 连接的一个服务器端,一般在 TCP Socket 编程中,客户端有多个,而服务器端只有一个,客户端 TCP 向服务器端 TCP 发送连接请求,服务器端的 ServerSocket 实例则监听来自客户端的 T原创 2016-07-26 00:24:26 · 708 阅读 · 0 评论 -
初识Java TCP/IP Socket-UDP网络编程知识
Java 通过 DatagramPacket 类和 DatagramSocket 类来使用 UDP 套接字,客户端和服务器端都通过DatagramSocket 的 send()方法和 receive()方法来发送和接收数据,用 DatagramPacket 来包装需要发送或者接收到的数据。发送信息时,Java 创建一个包含待发送信息的 DatagramPacket 实例,并将其作为参数传递给Data原创 2016-07-26 00:43:28 · 558 阅读 · 0 评论 -
Apache Shiro安全框架初识
Shiro概述Shiro是Java的一个安全框架,可以帮助我们完成:认证、授权、加密、会话管理、与web集成、缓存等。 Shiro的基本功能如下: Authentication:身份认证、登陆,验证用户是不是拥有相应的身份。Authorization:授权,即权限验证,验证某个已经登陆的用户是否拥有某个权限,eg:验证用户是否拥有某个角色。Session Manager:会话管理,登陆后退出之原创 2016-08-21 17:38:54 · 852 阅读 · 0 评论 -
信息摘要算法——MessageDigest类
MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。 MessageDigest 对象开始被初始化。该对象通过使用 update 方法处理数据。任何时候都可以调用 reset 方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用 digest 方法之一完成哈希计算。 对于给定原创 2016-09-17 17:38:06 · 2816 阅读 · 0 评论 -
Json、Ajax、Jquery
JSON介绍 JSON是Javascript面向对象语法的一个子集,由于JSON是JavaScript的一个子集,因此他可以清晰的运用在此语言当中,JSON的全称是:JavaScript Object Notation,是一种轻量级的数据交换格式。JSON是完全独立的语言,它使用标准的语法格式,来与其他各种编程语言进行数据交换。JSON主要创建两种数据对象由JSON格式字符串创建转化成JavaS原创 2016-09-24 19:18:16 · 911 阅读 · 0 评论 -
ArrayList的实现
ArrayList泛型类的实现。 内部类实现方式源码:package main.java.arraydemo;import java.util.Iterator;/** * DateTime: 2016/11/4 09:42 * 功能:实现ArrayList泛型类的实现: * MyArrayList将保持基础数组,数组的容量,以及存储在MyArrayList中的当前项数; *原创 2016-11-04 10:38:59 · 823 阅读 · 0 评论 -
LinkedList的实现
package main.java.LinkedListdemo;import java.util.ConcurrentModificationException;import java.util.Iterator;import java.util.NoSuchElementException;/** * DateTime: 2016/11/4 15:02 * 功能: * 思路: */p原创 2016-11-07 13:21:08 · 765 阅读 · 0 评论 -
百度鹰眼轨迹管理台demo-v3.1.1部署在自己的本地JavaEE web项目中
前言百度鹰源码开放的初衷就是方便各位百度地图鹰眼的用户对轨迹管理台进行个性化的开发,融合到自己的现有系统中。最近一个项目中使用到了百度鹰眼的定位监控功能,可以选择直接调用百度平台的接口地址也行,但这样界面就是固定的,不方便自己再界面上个性化开发。因此百度也开放了源码:实在是大赞 baidu-openmap-trace/web-demo-v3:https://github.com/baidu-ope原创 2017-05-12 17:32:06 · 8955 阅读 · 35 评论 -
Activiti工作流引擎——数据库表结构说明
数据库命名Activiti工作流引擎的表都是以ACT_开头。ACT_RE_*:’RE’表示repository。带有此前缀的表包含的是静态信息,如:流程定义、流程资源。ACT_RU_*:’RU’表示runtime。这是运行时的表,存储着流程变量、用户任务、职责等运行时的数据。ACT_ID_*:’ID’表示identity。这些表包含标识的信息,如用户、用户组等等。ACT_HI_*:’HI’表原创 2017-01-28 20:54:33 · 4013 阅读 · 0 评论 -
Activiti工作流引擎——用户与组、部署管理
用户和组概述在工作流中最重要的参与者是人,流程中定义了何时需要人参与、何时由系统处理。用户和组是一个身份系统(或者模块)的基础,在Activiti中用户和组主要是应用于用户任务(userTask)。组是控制权限的一种方式,属于某个组的用户就拥有操作某些功能的权限,在activiti中,组可以分为两种类型,即assignment和security-role,前者为一种普通的岗位角色,是用户分配业原创 2017-01-22 13:49:09 · 4936 阅读 · 0 评论 -
Activiti工作流引擎——组件说明
工作流引擎简介Activiti的特点Activiti引擎的七大Service接口Activiti架构Activiti与BPMN 20规范启动事件与结束事件Event启动事件空启动事件定时启动事件异常启动事件空结束事件空结束事件异常结束事件终止结束事件取消结束事件顺序流Sequence Flow标准顺序流条件顺序流任务Task用户任务脚本任务web servic原创 2017-01-22 12:01:49 · 20706 阅读 · 1 评论 -
Activiti工作流引擎的官方实例配置详细步骤
概述创建Java web项目复制文件到web项目中创建数据库启动运行示例配置完成概述学习Activiti工作流引擎,第一步自然是是下载官方提供的Demo源码来参考。 Activiti官网:activiti-5.22.0.zip 下载下来的源码结构为: war包里就是官方示例 创建Java web项目复制文件到web项目中其次就是导入src文件 当我们观察发现,官方提供的项目中ja原创 2017-01-20 19:57:08 · 33125 阅读 · 22 评论 -
MyBatis中如何合理的使用EhCache缓存框架
缓存简介缓存使用场景在mapperxml中启用Ehcache当为Select语句时当为insertupdatedelete语句时配置场景使用举例关于详细配置方面已经在另一篇文章中说过:MyBatis中使用Ehcache缓存框架,本篇主要涉及的是如何合理的使用缓存。缓存简介缓存的使用是一个很重要的过程,在项目查询配置中有很重要的作用,缓存主要分为一级缓存和二级缓存,一级缓存是默认开启的。e原创 2017-01-14 19:35:21 · 1924 阅读 · 0 评论 -
MyBatis分页插件的配置
MyBatis拦截器介绍Mybatis拦截器Interceptor接口Interceptor的注解Mybatis拦截器的实际应用封装page实体对象写一个反射工具类分页拦截器的实现 PagePluginjavaMybatis配置文件中配置数据库方言和拦截IDMyBatis拦截器介绍MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能。 拦截器的一个作用原创 2017-01-13 22:15:17 · 5319 阅读 · 2 评论 -
阿里Druid数据连接池在SSM框架中的配置使用
Druid数据连接池简介Druid可以做什么Druid配置下载jar包httprepo1mavenorgmaven2comalibabadruid编写数据库连接的资源文件dbconfigproperties在Spring配置文件ApplicationContextxml中加载资源文件进来在Spring配置文件ApplicationContextxml中配置阿里数据连接池Druid在we原创 2017-01-13 19:00:55 · 9157 阅读 · 3 评论 -
#MyBatis中使用Ehcache缓存框架
MyBatis简介Ehcache简介使用Ehcache的目的MyBatis中使用Ehcachejar包ecache配置文件文件名必须为ehcachexml在mybatis的mapper中启用MyBatis简介MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。MyBatis 使用简单的原创 2017-01-13 15:33:43 · 7317 阅读 · 0 评论 -
Activity工作流——初识 Activiti
Activiti介绍 OA(Office Automation,办公自动化)是将现代办公和计算机网络功能结合起来的一种新型办公方式。OA的核心应用包括流程管理、协同工作、沟通工具、信息中心等。工作流(Work Flow):对工作当中涉及到的流程、业务需求的抽象;在OA、CRM、ERP等各种系统中随处可见工作流,如请求、报销、购物等。随着工作流的不断发展,衍生出一个新的概念,BPM(Bussines原创 2016-12-24 17:41:20 · 10675 阅读 · 1 评论 -
SSM框架项目搭建系列(七)—Spring AOP之基于注解的声明式AspectJ
工程结构 其中AOP和com.ssm包下面的文件不用管;dispatcher-servlet.xml和web.xml和之前项目中的内容一样。applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xml原创 2016-11-03 19:18:35 · 2917 阅读 · 0 评论 -
SSM框架项目搭建系列(六)—Spring AOP之基于XML的声明式AspectJ
AOP通过“横切”技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,将其命名为Aspect,即切面。切面就是将那些与业务无关(例如:权限认证、日志、事务处理),确为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。实现AOP的技术分为两大类,一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以原创 2016-11-02 22:19:58 · 2148 阅读 · 0 评论 -
SSM框架项目搭建系列(五)—Spring之Bean的注解注入
applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.原创 2016-11-02 20:26:15 · 7181 阅读 · 0 评论 -
SSM框架项目搭建系列(四)— Spring之bean的XML注入方式
在XML中可使用两种方式进行注入:构造函数注入和setter注入构造函数注入constructor直接传值applicationContext.xml <bean id="helloworldBeanId" class="com.ssm.beans.HelloWorld"> <constructor-arg name="username" value="YEN"/>原创 2016-11-02 19:43:54 · 2183 阅读 · 0 评论 -
SSM框架项目搭建系列(三)—Spring中的Bean生命周期
概述 spring的核心容器实现了Ioc,其目 的是提供一种无侵入式的框架 BeanFactory提供了一种先进的配置机制来管理任何种类的bean。是Spring框架的基础设施面上的功能,是最本质的Spring的基础。 ApplicationContext建立在BeanFactory之上,并增加了其他功能,如国际化,获取资源,事件传递等。面向的是使用Spring框架的开发者,计划所有的场合都适原创 2016-11-02 19:17:03 · 1675 阅读 · 0 评论 -
SSM框架项目搭建系列(二)—Spring第一个HelloWorld
在上文的基础上新建一个HelloWorld类及一个HelloWorldTest类applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/原创 2016-11-02 12:54:45 · 2613 阅读 · 0 评论