
javaweb
zbuger
这个作者很懒,什么都没留下…
展开
-
关于java中的本地缓存-总结概
为什么要有本地缓存?在系统中,有些数据,数据量小,但是访问十分频繁(例如国家标准行政区域数据),针对这种场景,需要将数据搞到应用的本地缓存中,以提升系统的访问效率,减少无谓的数据库访问(数据库访问占用数据库连接,同时网络消耗比较大),但是有一点需要注意,就是缓存的占用空间以及缓存的失效策略。 为什么是本地缓存,而不是分布式的集群缓存? 目前的数据,大转载 2017-04-25 23:03:57 · 2082 阅读 · 0 评论 -
Spring Mybatis整合
SSH框架的结合几乎家喻户晓,但是一般的中小项目,使用Spring和MyBatis就够了,而且MyBatis轻便好使,易上手,值得大家尝试一次。 开篇简介: Spring:Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。两个重要模块:Spring 面向方面编程(AOP)和控制反转 (IOC) 容器。控制反转模式(也称作依赖原创 2016-05-12 21:52:07 · 408 阅读 · 0 评论 -
CopyOnWrite容器
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。转载 2016-03-18 23:14:26 · 526 阅读 · 0 评论 -
forward与redirect区别
1. RequestDispatcher.forward() 在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet或者是JSP到另外的一个Servlet、JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传转载 2016-03-17 09:35:40 · 434 阅读 · 0 评论 -
Spring Bean生命周期
在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例.Spring 中bean 的生命周期短暂吗?在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一转载 2016-03-31 20:15:54 · 351 阅读 · 0 评论 -
悲观锁 乐观锁
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人转载 2016-03-20 13:34:55 · 311 阅读 · 0 评论 -
JNDI 是什么
JNDI 是什么JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识。那么,JNDI到底起什么作用?要了解JNDI的作用,我们可以从“如果不用JNDI我们怎样做?用了JNDI后我们又将怎样做?”转载 2016-03-22 10:32:06 · 321 阅读 · 0 评论 -
java volatile内存操作细节
在 java 垃圾回收整理一文中,描述了jvm运行时刻内存的分配。其中有一个内存区域是jvm虚拟机栈,每一个线程运行时都有一个线程栈,线程栈保存了线程运行时候变量值信息。当线程访问某一个对象时候值的时候,首先通过对象的引用找到对应在堆内存的变量的值,然后把堆内存变量的具体值load到线程本地内存中,建立一个变量副本,之后线程就不再和对象在堆内存变量值有任何关系,而是直接修改副本变量原创 2016-04-03 16:48:46 · 532 阅读 · 1 评论 -
volatile的特性
volatile的特性当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:class VolatileFeaturesExample { volatile long vl = 0L;转载 2016-03-23 22:12:21 · 382 阅读 · 0 评论 -
java atomic
http://ifeve.com/java-atomic/引言Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。原子变量的底层使用了处理器提供的原子指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需要某种形式的内部锁,所以该方法不能绝对保证线程不被阻塞。Atomic包介绍转载 2016-04-02 16:07:46 · 499 阅读 · 0 评论 -
SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
使用SSM(Spring、SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方。之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重新搭建了一次,而且比项目搭建的要更好一些。以前解决问题的过程和方法并没有及时记录,以后在自己的小项目中遇到我再整理分享一下。这次,先说说三大框架整合过程。个人认转载 2016-05-13 21:18:28 · 648 阅读 · 0 评论 -
ByteBuffer常用方法详解
缓冲区(Buffer)缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区:使用缓冲区有这么两个好处:1、减少实际的物理读写次数2、缓冲区在创建时就被分配内存,这块内存区域一直被重用,可以减少动态分配和回收内存的次数举个简单的例子,比如A地有1w块砖要搬到B地由于转载 2017-04-23 21:56:25 · 2603 阅读 · 0 评论 -
直接内存和堆内存的性能比较
背景知识在JDK 1.4中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在Java堆和Native堆中来回复制数据。 显转载 2017-04-23 21:33:12 · 745 阅读 · 0 评论 -
使用sun.misc.Cleaner或者PhantomReference实现堆外内存的自动释放
Java NIO包是通过sun.misc.Cleaner和PhantomReference来实现堆外内存的自动释放的。现在我们来学习下Cleaner和PhantomReference的使用,自己封装实现堆外内存的自动释放。sun.misc.Cleaner是JDK内部提供的用来释放非堆内存资源的API。JVM只会帮我们自动释放堆内存资源,但是它提供了回调机制,通过这个类能方便的释放系统的转载 2017-04-23 16:16:01 · 665 阅读 · 0 评论 -
Netty之Java堆外内存扫盲贴
Java的堆外内存本来是高贵而神秘的东西,只在一些缓存方案的收费企业版里出现。但自从用了Netty,就变成了天天打交道的事情,毕竟堆外内存能减少IO时的内存复制,不需要堆内存Buffer拷贝一份到直接内存中,然后才写入Socket中;而且也没了烦人的GC。好在,Netty所用的堆外内存只是Java NIO的 DirectByteBuffer类,通读一次很快。还有一些sun.misc.*的类转载 2017-04-23 15:17:25 · 2116 阅读 · 0 评论 -
静态成员的垃圾回收
今天在网上看到一个讨论命题:当一个单例的对象长久不用时,会不会被jvm的垃圾收集机制回收。原文链接下面就对Java中的垃圾回收和静态类型做一些总结:一、Java中的内存分配1、stack(栈),用于装变量和引用类型。如基本类型和引用类型的引用变量。 2、heap(堆) ,用于装new出来的值。 3、用来装静态变量的区域。如static变量,字符串常量。 4、转载 2017-04-20 10:00:41 · 2506 阅读 · 0 评论 -
分布式系统数据一致性
在前面三篇文章中,介绍了关于分布式系统中数据一致性的问题,这一篇主要介绍CAP定理以及自己对CAP定理的了解。CAP定理是2000年,由 Eric Brewer 提出来的Brewer认为在分布式的环境下设计和部署系统时,有3个核心的需求,以一种特殊的关系存在。这里的分布式系统说的是在物理上分布的系统,比如我们常见的web系统。这3个核心的需求是:Consistency,Av转载 2016-04-03 23:16:32 · 524 阅读 · 0 评论 -
SSL卸载技术对于HTTPS应用的优化与思考
迅猛发展的互联网为我们提供了丰富的信息资源,在带来便利的同时也影响着人们工作和生活方式。而让我们无法忽视的是,在开放的互联网所带来的繁荣背后,同时也潜藏着安全方面的隐患。随着人们对网络的依赖愈渐加深,各种加密技术应运而生,用以保障网络信息的安全性。SSL(Secure Sockets Layer)协议,便是在互联网上广泛应用于交易安全性保障的一种主导技术。 SSL属于加密通讯协议,工作在转载 2016-07-31 15:30:52 · 10209 阅读 · 0 评论 -
JNDI 是什么
JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识。那么,JNDI到底起什么作用?要了解JNDI的作用,我们可以从“如果不用JNDI我们怎样做?用了JNDI后我们又将怎样做?”这个问题来探讨。转载 2016-06-07 11:24:33 · 342 阅读 · 0 评论 -
java项目日志
工程目录结构 1. 导入如上 log下的对应jar包 2. 在src下新建log4j.properties文件,类容如(详细配置:http://www.cnblogs.com/suman/archive/2010/10/23/1858864.html ) [plain] view plain# 定义 DEBUG 优先级, R 为日原创 2016-04-03 14:19:47 · 894 阅读 · 0 评论 -
java串行化
一、串行化的概念和目的1.什么是串行化对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力,叫作对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己 ,这个过程叫对象的串行化(Serialization)。串行化的主要任务是写出对象实例变量的原创 2016-03-31 21:16:43 · 1459 阅读 · 0 评论 -
java Semaphore
Semaphore为并发包中提供用于控制某资源同时可以被几个线程访问的类实例代码:[java] view plain?// 允许2个线程同时访问 final Semaphore semaphore = new Semaphore(2); ExecutorService executorService =转载 2016-04-02 15:53:20 · 749 阅读 · 0 评论 -
BeanFactory和FactoryBean
1、 BeanFactory BeanFactory定义了 IOC 容器的最基本形式,并提供了 IOC 容器应遵守的的最基本的接口,也就是Spring IOC 所遵守的最底层和最基本的编程规范。在 Spring 代码中, BeanFactory 只是个接口,并不是 IOC容器的具体实现,但是 Spring 容器给出了很多种实现,如 DefaultListableBeanFactor转载 2016-03-21 09:42:55 · 251 阅读 · 0 评论 -
访问一个网站的过程
1.本地过程:若DNS缓存中没有相关数据,则IE浏览器先向DNS服务器发出DNS请求:这一过程的目的是获取www.sina.com这个域名所对应的IP地址;IE浏览器向本机DNS模块发出DNS请求,DNS模块生成相关的DNS报文;DNS模块将生成的DNS报文传递给传输层的UDP协议单元;UDP协议单元将该数据封装成UDP数据报,传递给网络层的IP转载 2016-03-20 21:10:32 · 1840 阅读 · 0 评论 -
zookeeper分布式session
1. 认识ZooKeeperZooKeeper—— “动物园管理员”。动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被动 物所观赏。为了让各种不同的动物呆在它们应该呆的地方,而不是相互串门,或是相互厮杀,就需要动物园管理员按照动物的各种习性加以分类和管理,这样我们才 能更加放心安全的观赏动物。回到我们企业级应用系统转载 2016-03-20 20:31:15 · 360 阅读 · 0 评论 -
HashMap的key是对象
使用HashMap,如果key是自定义的类,就必须重写hashcode()和equals()。 1.hashcode()和equals()是在哪里被用到的?什么用的? HashMap是基于散列函数,以数组和链表的方式实现的。 而对于每一个对象,通过其hashCode()方法可为其生成一个整形值(散列码),该整型值被处理后,将会作为数组下标,存放该对象所对应的原创 2016-03-31 20:39:04 · 4990 阅读 · 2 评论 -
Full Gc触发条件
除直接调用System.gc外,触发Full GC执行的情况有如下四种。1. 旧生代空间不足旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行Full GC后空间仍然不足,则抛出如下错误:java.lang.OutOfMemoryError: Java heap space 为避免以上两种状况引起的Full GC,调优时应尽量做原创 2016-03-31 19:49:34 · 1821 阅读 · 0 评论 -
forward 与redirect区别
1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.2.从数据共享来说 forward:转发页面和转载 2016-03-08 16:11:04 · 377 阅读 · 0 评论 -
class文件结构
Java语言是跨平台的,其跨平台的基石是字节码,字节码按照java虚拟机规范的格式组成了class文件,并在虚拟机上运行。因此class文件的结构也是java跨平台很重要的一个基础。下面简单看看class文件的结构:以上是class文件的基本结构,整个class文件分Magic,Version,Constant_pool,Access_flag,This_class,S转载 2016-03-31 13:18:10 · 501 阅读 · 0 评论 -
Servlet生命周期与原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法Servlet初始化阶段: 在下列时刻Servlet容器装载Servlet: 1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.X原创 2016-04-01 13:29:26 · 381 阅读 · 0 评论 -
CMS垃圾回收器
1.总体介绍:CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是:标记—清除。2.CMS过程:初始标记(STW initial m转载 2016-04-01 12:44:52 · 710 阅读 · 0 评论 -
java动态代理实现原理
http://rejoy.iteye.com/blog/1627405之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白。比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把这些问题全部搞明白了。 废话不多说了,先来看一下JDK的动态是怎么用的。 Java代码 packag转载 2016-04-02 10:14:03 · 562 阅读 · 1 评论 -
一个简单的java缓存实现
一个简单的java缓存实现import java.util.Map;import java.util.WeakHashMap;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLoc原创 2016-04-02 10:09:12 · 1059 阅读 · 0 评论 -
图解Tomcat类加载机制
图解Tomcat类加载机制 说到本篇的tomcat类加载机制,不得不说翻译学习tomcat的初衷。 之前实习的时候学习javaMelody的源码,但是它是一个Maven的项目,与我们自己的web项目整合后无法直接断点调试。后来同事指导,说是直接把java类复制到src下就可以了。很纳闷....为什么会优先加载src下的java文件(编译出的class),而不是jar转载 2016-03-20 16:16:01 · 371 阅读 · 0 评论 -
session同步的方法
一,利用数据库同步session 1,用一个低端电脑建个数据库专门存放web服务器的session,或者,把这个专门的数据库建在文件服务器上,用户访问web服务器时,会去这个专门的数据库check一下session的情况,以达到session同步的目的。 2,这种方法是把存放session的表和其他网站注册量数据库表放在一起,如果mysql也做了集群了话,每个mysql节点都要原创 2016-03-20 20:22:01 · 788 阅读 · 0 评论 -
Memcache知识点梳理
Memcached概念: Memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像一张巨大的HASH表,该表以Key-value对的方式存在内存中。官网下载地址: http://www.memcached.org/运行环境: linux,BSD,windows都可跑协议理论:http://code.sixap转载 2016-03-20 20:27:53 · 402 阅读 · 0 评论 -
class文件内部结构
java语言是跨平台的,所谓一次编写,到处运行。之所以是跨平台的,就是java定义了一套与操作系统,硬件无关的字节码格式,这个字节码就是用java class文件来表示的,java class文件内部定义了虚拟机可以识别的字节码格式,这个格式是平台无关性的,在linux系统或者在windows系统上都是一致的。这个就好比html文件,我们定义好规范,这个系统只要去按照规范显示出来里面的内容就好了。转载 2016-03-31 13:27:39 · 397 阅读 · 0 评论 -
sleep wait区别
对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等原创 2016-03-31 19:27:10 · 483 阅读 · 0 评论 -
java反射原理
【转自 http://blog.youkuaiyun.com/xiaoxian8023 】 Java中反射机制使用的还是比较广泛的,系统的灵活性、可扩展性大都都是通过反射等方式来加载外部插件,使得系统与插件解耦的同时,增加了功能。但是很多人都只是会用,却是不知道它的实现机制,今天就由我来带大家揭开反射机制的神秘面纱。原创 2016-03-31 09:38:09 · 315 阅读 · 0 评论 -
Java序列化机制中的类版本问题
Java序列化机制中的类版本问题内容简介某些实现了serializable接口的java类中会看到名称为serialVersionUID的静态字段,本文从根本上解释这个字段的含义。知识铺垫在java中,类的序列化和反序列化是由jvm实现,当然,不同的jvm可能有不同的实现方式,本文讨论java官方的jvm版本。一个类,实现serializable接口之后原创 2016-03-31 21:24:12 · 742 阅读 · 0 评论