Java
文章平均质量分 85
moni_mm
这个作者很懒,什么都没留下…
展开
-
配置SSH框架(最新版)
新入门,配了一天才整合成功,整合问题很多,欢迎一起交流项目在git https://github.com/monimm/SSH1.环境Struts2:2.5.16Spring:5.0.5.RELEASEHibernate:5.2.16.FinalMySQL:5.7.21Tomcat 8.5.292项目结构lib 3步骤1.建立 D...原创 2018-04-08 14:43:43 · 589 阅读 · 0 评论 -
Java并发之AtomicInteger
AtomicIntegerAtomicInteger 是一个支持原子操作的 Integer 类, 保证对AtomicInteger类型变量的增加和减少操作是原子性继承自Number,实现Serializable接口源码:private static final Unsafe unsafe = Unsafe.getUnsafe();private static final...原创 2018-04-25 17:01:28 · 833 阅读 · 0 评论 -
Java锁
锁LockLock是一个接口ReentrantLock是唯一实现了Lock接口的类public interface Lock {void lock();void lockInterruptibly() throws InterruptedException;boolean tryLock();boolean tryLock(long time, TimeUnit unit)...原创 2018-04-25 17:57:40 · 147 阅读 · 0 评论 -
Java多线程并发
多线程的优点提高CPU利用率减少响应时间进程切换消耗远大于线程切换多线程的代价设计更复杂上下文切换的开销,程序执行速度变慢增加资源消耗并发编程模型并行工作者模型在并行工作者模型中委派者(Delegator)将传入的作业分配给不同的工作者。每个工作者完成整个任务。工作者们并行运作在不同的线程上,甚至可能在不同的CPU上。缺点...原创 2018-04-26 01:19:10 · 268 阅读 · 0 评论 -
Java集合框架总结
Java 集合框架 Java集合是java提供的工具包,包含了常用的数据结构 Java集合主要可以划分为4个部分:List列表Set集合Map映射工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)集合接口11.Collection 接口List 接口 实现类有LinkedList, ArrayList,...原创 2018-04-24 15:41:09 · 215 阅读 · 0 评论 -
Java之ConcurrentHashMap
ConcurrentHashMap继承自AbstractMap,实现ConcurrentMap接口保证同步table nextTable sizeCtl baseCount等变量均用volatile修饰获取元素用Unsafe类的getObjectVolatile方法设置数组元素用compareAndSwapObject方法用for循环for (Node<K,V...原创 2018-04-27 13:42:30 · 141 阅读 · 0 评论 -
Java阻塞队列
管程管程 (英语:Moniters,也称为监视器) 是一种程序结构,结构内的多个子程序(对象或模块)形成的多个工作线程互斥访问共享资源。管程实现了在一个时间点,最多只有一个线程在执行管程的某个子程序。管程包括:多个彼此可以交互并共用资源的线程多个与资源使用有关的变量一个互斥锁一个用来避免竞态条件的不变量信号量阻塞队列阻塞队列(BlockingQ...原创 2018-04-27 13:49:17 · 130 阅读 · 0 评论 -
Java内存模型
Java内存模型(JMM)Java内存模型本身是一种抽象的概念,并不真实存在JMM用来屏蔽硬件和操作系统的内存访问差异它描述的是一组规则或规范 通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。Java内存模型中规定所有变量都存储在主内存 主内存是共享内存区域,主要存储的是Java 实例对象,所有线程创建的实例对象都存放在主内存中线程对变量...原创 2018-04-27 14:54:20 · 116 阅读 · 0 评论 -
Java Synchronized
SynchronizationSynchronization基于进入和退出管程(Monitor)对象实现,monitor对象存在于每个Java对象的对象头中(存储的指针的指向)显式同步:有明确的 monitorenter 和 monitorexit 指令,即同步代码块隐式同步:ACC_SYNCHRONIZED关键字修饰的方法应用方式1.方法锁修饰实例方法,作...原创 2018-04-27 15:59:02 · 138 阅读 · 0 评论 -
Java同步器
Sync类提供一个阻塞锁和相关同步器(信号量,事件等)框架的实现基于先进先出(FIFO)等待队列Semaphore通过计数器控制对共享资源的访问。eg:创建有信号量计数器为2的信号量class SmpThread extends Thread { public Semaphore smp; public SmpThread(Semaphore smp...原创 2018-04-29 23:23:44 · 393 阅读 · 0 评论 -
浅谈Java特性
学习Java有几个月了,记录下此时的体会与总结。结合Java体系结构、JVM原理和JDK源码,谈谈我对Java的理解及其特性的分析。Java语言特性SUN公司对Java的描述: “Java is a simple,object-oriented, distributed, interpreted, robust, secure, architecture neutra...原创 2018-06-10 01:55:30 · 1861 阅读 · 0 评论 -
【集合框架】之深入分析ArrayList
在前面的文章【Java集合框架总结】https://blog.csdn.net/moni_mm/article/details/80065576中对集合框架进行概要分析之后,在此结合JDK源码对ArrayList进行深入分析。提出并解决问题如下:问题1:elementData非私有化以简化嵌套类的访问,但嵌套类可以透明地访问外围类的所有成员,如何理解这里的简化?问题2: transie...原创 2018-06-18 00:12:15 · 225 阅读 · 0 评论 -
【集合框架】之深入分析HashMap
在前面的文章【Java集合框架总结】https://blog.csdn.net/moni_mm/article/details/80065576中对集合框架进行概要分析之后,在此结合JDK源码对HashMap进行深入分析。提出并解决问题如下:问题1:初始容量为什么是16,为什么必须是2的幂?问题2: hash方法为什么是无符号右移16位?问题3: 问题4:问题5:H...原创 2018-06-18 02:03:47 · 180 阅读 · 0 评论 -
SLR(1)语法分析(Java实现)
实现一个SLR(1)语法分析器,近期忙于他事,项目集和语法分析表暂时采用手动输入,有空再填坑,后附源码。SLR是基于LR(0)实现的,故先进行LR(0)分析。Tips: 龙书给的4.36算法伪代码写得过于简略,容易造成误导,本文给出具体算法。代码在https://github.com/monimm/LLandLR先上结果截图 自底向上分析自底向上分析法,又...原创 2018-06-10 19:09:37 · 11748 阅读 · 1 评论 -
Java内部类之访问权限和编译效率
在文章【集合框架】之深入分析ArrayListhttps://blog.csdn.net/moni_mm/article/details/80722011中,发现一个问题如下:问题1: elementData的注释的意思是,非私有化以简化嵌套类的访问,但嵌套类可以透明地访问外围类的所有成员,如何理解这里的简化? 为什么不声明为private呢?通过查看字节码解决了问题:内部类在访问外部类...原创 2018-06-18 14:00:47 · 833 阅读 · 1 评论 -
Java线程池
线程池线程池主要用来解决线程生命周期开销问题和资源不足问题。在实际使用中,服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。服务器应用程序需要采取一些办法来限制任何给定时刻处理的请求数目,尽可能减少创建和销毁线程的次数好处:降低资源消耗。提高响应速度。提高线程的可管理性。工作原理我们可以把并发...原创 2018-04-26 23:32:20 · 105 阅读 · 0 评论 -
Tomcat8类加载机制
在了解类加载机制时,发现网上大部分文章还停留在tomcat6,甚至tomcat5。官网当然是最权威的。http://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html概述 在 Java 环境中,类加载器的布局结构是一种父子树的形式。通常,类加载器被请求加载一个特定的类或资源时,它会先把这一请求委托给它的...原创 2018-08-26 15:39:49 · 2739 阅读 · 6 评论 -
Java设计模式之观察者模式
观察者模式行为型模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在抽象类里有一个 ArrayList 存放观察者们观察者和被观察者是抽象耦合的主题(Subject):主题是一个接口,规定了具体主题需要实现的方法观察者(Observer):观察者是一个接口,规定了具体观察者用来更新数据的方法。 具体主题(Conc...原创 2018-04-25 14:52:48 · 99 阅读 · 0 评论 -
Java设计模式之工厂模式
简单工厂模式定义一个类负责创建其他类的实例被创建的类实现共同接口interface Work { public void doWork();}class WorkA implements Work { public void doWork() { System.out.println("do work A"); }}class ...原创 2018-04-24 22:55:35 · 99 阅读 · 0 评论 -
Java静态非静态总结
Java静态类与非静态类Java程序启动class文件被读取时类被加载,如果有static方法,此时会分配内存。非static方法实例化类时才在内存中分配控件存储。引用存储在堆栈中,实体存储在堆中。静态方法和实例方法静态方法在程序开始时生成内存,可直接调用。速度快,占内存。实例方法在程序运行中生成内存,生成实例,通过实例调用方法。静态方法不能使用this,super关键字...原创 2018-04-01 16:30:00 · 161 阅读 · 0 评论 -
Java线程
Java线程Java中线程是指java.lang.Thread类的一个实例或线程的执行。使用java.lang.Thread或java.lang.Runnable接口编写代码定义、实例化、启动新线程。Java中每个线程都有一个调用栈,即使不在程序中创建任何新的线程,线程也在后台运行。main()方法运行在一个线程内,称为主线程。一旦创建一个新的线程,就产生一个新的调用栈。线程分为两类...转载 2018-04-01 17:21:43 · 99 阅读 · 0 评论 -
Java装箱拆箱
一.什么是装箱?什么是拆箱?Java为每种基本数据类型都提供了对应的包装器类型。在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:Integer i = new Integer(10);而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:Integer i = 10;装箱:...转载 2018-03-27 15:18:51 · 85 阅读 · 0 评论 -
Java实例化方法
实例化方法使用new操作符调用Class对象的newInstance()方法调用clone()方法,对现有实例的拷贝通过ObjectInputStream的readObject()方法反序列化类Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。将序列化对象写入文件之后,可...转载 2018-04-03 15:17:01 · 819 阅读 · 0 评论 -
AOP
1AOP概述AOP:是一种面向切面的编程范式,是一种编程思想,旨在通过分离横切关注点,提高模块化,可以跨越对象关注点。面向切面编程:是指在程序运行期间将某段代码,动态的切入到某个类的指定方法的指定位置的这种编程思想叫做面向切面编程。AOP编程操作的主要对象是切面(aspect),而切面模块化横切关注点。AOP的典型应用即spring的事务机制,日志记录。AspectJ是一种编...原创 2018-04-11 17:44:15 · 148 阅读 · 0 评论 -
Java finally执行顺序
FinallyJava 中的 Finally 关键一般与try一起使用,在程序进入 try 块之后,无论程序是因为异常而中止或其它方式返回终止的,finally 块的内容一定会被执行 。直接进行实验如下1.一般情况public static void returnTest(){ try{ System.out.println("I am ...原创 2018-04-04 23:42:32 · 743 阅读 · 0 评论 -
Spring
概述Spring 是一个开源的轻量级 Java SE/Java EE开发应用框架 其目的是用于简化企业级应用程序开发Spring 是一个容器通过反转控制( IoC )和依赖注入( DI )来实现高内聚、低耦合的应用整合很多第三方框架提供面向切面编程( AOP )的能力对数据库事务的管理尤其方便优点Spring 容器Spring 容器是非侵入式的(不需...转载 2018-04-05 01:26:44 · 374 阅读 · 0 评论 -
JDBC
JDBC架构JDBC API: 提供了应用程序对JDBC的管理连接。JDBC Driver API: 支持JDBC管理到驱动器连接。JDBC API的使用驱动程序管理器和数据库特定的驱动程序提供透明的连接到异构数据库。JDBC驱动程序管理器可确保正确的驱动程序来访问每个数据源。该驱动程序管理器能够支持连接到多个异构数据库的多个并发的驱动程序。JDBC组件Driver...转载 2018-04-17 19:32:04 · 119 阅读 · 0 评论 -
Mybatis概述
MyBatis的功能架构API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西...原创 2018-04-18 00:33:18 · 348 阅读 · 0 评论 -
GC日志分析
JVM内存heap结构按分代,分young-eden,young-survivor,old 用-Xmn,-Xms,-Xmx来指定non-heap结构 包括metaspace,thread stacks,compiled native code,memory allocated by native code -XX:PermSize或-XX:MetaspceSize,-Xss或-X...原创 2018-04-18 11:59:41 · 226 阅读 · 0 评论 -
Struts2
Struts2 架构从一个高水平角度看,Struts2 是一个MVC拉动的(或MVC2)框架,Struts2 的模型-视图-控制器模式是通过以下五个核心部分进行实现的:操作(Actions)拦截器(Interceptors)值栈(Value Stack)/OGNL结果(Result)/结果类型请求生命周期通过上述图片的描述,我们可以依照下面几点解释在Struts2 ...转载 2018-04-06 15:01:26 · 185 阅读 · 0 评论 -
逃逸分析
逃逸分析逃逸分析(Escape Analysis)是目前Java虚拟机中比较前沿的优化技术。逃逸分析的基本行为就是分析对象动态作用域: 当一个对象在方法中被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他地方中,称为方法逃逸。 甚至还有可能被外部线程访问到,譬如赋值给类变量或可以在其他线程中访问的实例变量,称为线程逃逸。如果能证明一个对象不会逃逸到方法或线程外,则可能为这...原创 2018-04-18 15:40:44 · 2261 阅读 · 0 评论 -
Hibernate
概述Hibernate 是一个高性能的对象关系型持久化存储和查询的服务. Hibernate 不仅关注于从 Java 类到数据库表的映射,也有 Java 数据类型到 SQL 数据类型的映射,另外也提供了数据查询和检索服务。对象关系映射(ORM)是一个方便在关系数据库和类似于 Java, C# 等面向对象的编程语言中转换数据的技术 当我们工作在一个面向对象的系统中时,存在一个对象...转载 2018-04-06 19:54:20 · 172 阅读 · 0 评论 -
SpringMVC
概述Spring web MVC框架提供了MVC(模型 - 视图 - 控制器)架构和用于开发灵活和松散耦合的Web应用程序的组件。 MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素之间的松散耦合。模型(Model)封装了应用程序数据,通常它们将由POJO类组成。视图(View)负责渲染模型数据,一般来说它生成客户端浏览器可以解释HTML输出。控制...转载 2018-04-18 16:46:11 · 191 阅读 · 0 评论 -
浅谈红黑树
二叉树在链表中,插入、删除速度很快,但查找速度较慢。在数组中,查找速度很快,但插入删除速度很慢。二叉树,本质上,是对链表和数组的一个折中二叉树是每个结点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。性质性质1:二叉树第i层上的结点数目最多为2i-1(i>=1)性质2:深度为k的二叉树至多有2...原创 2018-05-02 15:42:08 · 263 阅读 · 0 评论 -
深入分析Java类初始化顺序
分析Java类初始化顺序之前,先回顾下类加载的过程和时机类加载的过程加载:通过类名从class文件获取二进制流,生成Class对象(在方法区)连接:包括验证、准备(类变量分配内存、赋初值)、解析(编译期确定静态类型)初始化:初始化类类加载的时机主动引用实例化对象 new访问静态字段(final除外) get/putstatic调用静态方法 invoke...原创 2018-09-10 00:35:42 · 259 阅读 · 0 评论