Java
文章平均质量分 53
coderbean
这个作者很懒,什么都没留下…
展开
-
JVM核心之 JVM运行和类加载全过程
JVM核心之 JVM运行和类加载全过程为什么要研究类加载的全过程有助于了解JVM运行过程更深入了解java动态性,(解热部署、动态加载),提高程序员的灵活性类加载的全过程类加载机制 JVM可以把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成JVM可以直接使用的Java类型的过程Created with Raphaël 2.1.0加载Loading验证Verificat原创 2015-08-25 18:56:47 · 1764 阅读 · 0 评论 -
GOF23 设计模式之 代理模式
代理模式:通过代理,控制对对象的访问! 可以详细控制访问某人(某类)的方法,在调用这个方法前做前置处理,调用这个方法之后做后置处理。(即:APO的围观实现)AOP(Aspect Oriented Programming 面向切面编程)的核心实现机制!可以只关注核心流程。通过代理实现将统一的流程代码放到代理类中处理核心角色抽象角色:定义代理角色和真实角色的公共对外方法真实角色: 实现抽原创 2015-09-27 19:13:17 · 397 阅读 · 0 评论 -
GOF 23 设计模式之 原型模式(prototype) 深复制与浅复制举例
原型模式初探通过new产生一个对象需要复杂的数据准备或访问权限,可以使用原型模式。就是Java的克隆技术,以某个对象为原型,复制出新的对象。显然,新的对象具备原型对象的特点优势有:效率高(直接克隆,避免了重新执行构造函数的过程)克隆类似于new,但是不同于new。new创建新的对象属性采用的是默认值。克隆出来的对象属性完全与原型对象相同。而且克隆出来的对象的属性值的修改不会影响到原型对象原原创 2015-09-22 19:27:27 · 553 阅读 · 0 评论 -
GOF 23设计模式之 外观模式 迪米特法则
迪米特法则(最少知识法则)一个软件实体应当尽可能少的与其他实体发生相互作用。外观模式的核心为子系统提供统一的入口。封装子系统的复杂性,便于客户端调用。原创 2015-10-02 13:53:02 · 440 阅读 · 0 评论 -
GOF 23设计模式之 组合模式(composite)
组合模式使用组合模式的场景:把部分喝整体的瓜你用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象组合模式核心:抽象构件(Component)角色:定义了叶子和容器构件的共同点叶子(Leaf)构件角色:无子节点。容器(Composite)构件角色:有容器特征,可以包含子节点.组合模式工作流程分析:组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递原创 2015-09-29 20:02:08 · 692 阅读 · 0 评论 -
GOF 23 设计模式之 解释器模式(Interpreter)与访问者模式(Visitor)
解释器模式介绍是一种不常用的设计模式用于描述如何构成一个简单的语言解释器,主要用于使用面相对象语言开发的编译器和解释器设计当我们需要开发一种新的语言时,可以考虑使用解释器模式尽量不要使用解释器模式,后期维护会有很大的麻烦。在项目中,可以使用Jruby,Groovy,java的js引擎来替代解释器的作用,弥补java语言的不足。开发中常见的场景EL表达式的处理正则表达式的解释器SQL语原创 2015-10-04 14:23:27 · 937 阅读 · 0 评论 -
GOF23 设计模式之 适配器模式
适配器模式什么是适配器模式?将一个类的接口转换为客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的两个类可以在一起工作模式中的角色目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。需要适配的类(Adaptee):需要适配的类或适配者类。适配器(Adapter):通过包装一个需要适配的对象,吧原接口转换成目标接口。工作中的场原创 2015-09-27 17:17:20 · 399 阅读 · 0 评论 -
GOF 23设计模式之 享元模式(FlyWeight)
场景:内存属于稀缺资源,不要随便浪费。如果游很多个完全相同或类似的对象,我们可以通过享元模式,节省内存。核心享元模式以共享的方式高效地支持大量细粒度对象的重用。享元对象能做到共享的关键是区分了内部状态和外部状态。 内部状态:可以共享,不会随环境变化而变化外部状态:不可以共享,会随环境变化而变化围棋软件设计每个棋子都是一个对象,有如下属性 颜色形状大小位置其中1,2,3这些是原创 2015-10-02 17:42:52 · 392 阅读 · 0 评论 -
GOF 23 设计模式之 备忘录模式(Memento)
场景录入大批人员资料。正在录入当前人资料时,发现上一个人录错了,此时需要恢复上一个人的资料,再进行修改。Word文档编辑时,突然电脑死机或断电,再打开时,可以看到word提示你恢复到以前的文档管理系统中,公文撤回功能。公文发送出去后,想撤回来。核心就是保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态结构 源发器类Originator备忘录类Memento负责人类C原创 2015-10-05 20:19:43 · 292 阅读 · 0 评论 -
正则表达式(Regular Expression)教程
正则表达式简介为什么需要正则表达式 文本的复杂处理正则表达式的优势和用途 一种强大而灵活的文本处理工具;大部分编程语言、数据库、文本编辑器、开发环境都支持正则表达式正则表达式定义: 正如它的名字一样是描述了一个规则,通过这个规则可以匹配一类字符串。学习正则表达式很大程度上就是学习正则表达式的语法规则开发中使用正则表达式的流程: 分析所要匹配的数据,写出测试用的典型数据在工具软件原创 2015-10-05 21:45:02 · 1272 阅读 · 0 评论 -
创建型模式总结:都是来帮助我们创建对象的!
单例模式保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。工厂模式简单工厂模式 用来生产统一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码)工厂方法模式 用来生产同一个等级结构中的固定产品。(支持增加产品族)抽象工厂模式 用来生产不同产品族的全部产品(对于增加新的产品无能为力;支持增加产品族)建造者模式分离了对对象组件的单独构造(由Builder来负责)和装原创 2015-09-23 21:02:43 · 301 阅读 · 0 评论 -
JDBC(Java Database Connection) 教程
什么是JDBC?JDBC为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成。是java程序与数据库系统通信的标准API。JDBC API使得开发人员可以使用纯java的方式来连接数据库,并执行操作。sun公司由于不知道各个主流商用数据库的程序代码,因此无法自己写代码连接各个数据库,因此,sun公司决定,自己提供一套API,凡事数据库想与java进行连接的,数据库厂原创 2015-10-13 10:43:36 · 3411 阅读 · 0 评论 -
Java实现哲学家就餐问题
什么是哲学家就餐问题?可以参考百度百科或者维基百科维基百科我给出一种方法的实现 Chandy/Misra解法 1984年,K. Mani Chandy和J. Misra提出了哲学家就餐问题的另一个解法,允许任意的用户(编号P1, …, Pn)争用任意数量的资源。与资源分级解法不同的是,这里编号可以是任意的。 把筷子凑成对,让要吃的人先吃,没筷子的人得到一张换原创 2015-11-19 21:03:57 · 3606 阅读 · 0 评论 -
Java反射
Java反射类有类类型首先,记住一句话:There is a class named Classpublic class ClassDemo1{ public static void main(String[] args) { Foo foo1 = new Foo(); }}class Foo{}看上面这段代码:我们称Foo为一个类,由于在面向对象的世界里,原创 2015-12-29 16:43:36 · 1260 阅读 · 0 评论 -
全面解析Java注解
全面解析Java注解概念Java提供了一种源程序中的元素关联任何信息和任何元数据的途径和方法注解的分类源码注解:注解只在源码中存在,编译成.class文件后就不存在了编译时注解:注解在源码和.class文件中都存在运行时注解:在运行阶段还起作用,甚至会影响运行逻辑自定义注解@Target({ElementType.METHOD,ElementType.TYPE})@Retention(原创 2016-01-03 15:43:58 · 507 阅读 · 0 评论 -
谷歌面试题f(n)=n解析
题目Consider a function which, for a given whole number n, returns the number of ones required when writing out all numbers between 0 and n. For example, f(13)=6. Notice that f(1)=1. What is the next l原创 2016-03-15 22:18:03 · 915 阅读 · 0 评论 -
NIO 入门
原文地址:http://www.ibm.com/developerworks/cn/education/java/j-nio/在开始之前关于本教程新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的。NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提供了高速的、面向块的 I/O。通过定义包含数据的类,以及通过以块的形式处理这些数据,NIO 不用使用本转载 2016-04-05 21:15:19 · 1421 阅读 · 0 评论 -
hibernate annotation 之 主键生成策略
hibernate annotation 之 主键生成策略Hibernate 默认总共支持 13 种生成策略 : 1. increment 2. identity 3. sequence4. hilo 5. seqhilo 6. uuid7. uuid.hex转载 2016-02-28 21:43:47 · 432 阅读 · 0 评论 -
GOF23设计模式之 中介者模式Mediator
核心如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多的关系,将熬制关系及其复杂,这些对象称之为 “同事对象”我们可以阴雨一个中介者对象,使各个同事对象只跟中介者打交道,将复杂的网络结构化解为星形结构。中介者模式类图中介者模式的本质解耦多个同事对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互关系开发当中常见的场景原创 2015-10-03 23:43:46 · 260 阅读 · 0 评论 -
GOF23设计模式之 建造者模式
场景:我们要建造一个复杂的产品。比如:神州飞船,iPhone 这个复杂的产品的创建有一个问题需要处理:装配这些子组件是不是有个步骤问题?实际开发中,我们所需要的对象构建时,也非常复杂,有很多步骤需要处理时。建造模式的本质:分离了对象子组件的单独构造(由Builder来负责)和装配(由Derector负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程伏在的情况原创 2015-09-15 22:08:54 · 564 阅读 · 0 评论 -
深入Java类加载器
深入Java类加载器类加载器原理类加载器的作用 - 将class文件字节码内容加载到内存中,并将这些静态数据转化成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法取类数据的访问入口 类缓存 标准的Java SE类加载器可以按照要求加载类,但一旦某个类被加载到类加载器中,它将维持一段时间(缓存)。不过,JVM垃圾收集器可以回收这些Clas原创 2015-08-27 18:50:41 · 430 阅读 · 0 评论 -
Java动态运行编译好的类两种方法
动态运行编译好的类通过Runtime.getRuntime()运行启动新的进程运行Runtime run = Runtime.getRuntime();Process process = run.exec("java -cp d:/myjava HelloWorld");// Process process = run.exec("jaca -cp"+dir+" "+classFile);原创 2015-08-16 20:21:10 · 961 阅读 · 0 评论 -
Java实现动态编译的两种方式
动态编译Java6.0引入了动态编译机制动态编译的应用场景 可以做一个浏览器断编写java代码,上传到服务器编译和运行的在线评测系统。服务器动态的加载某些类文件进行编译动态编译的两种做法:通过Runtime调用javac,启动新的进程去操作Runtime run = Runtime.getRuntime();Precess process = run.exec("javac -cp d:原创 2015-08-16 21:16:41 · 959 阅读 · 0 评论 -
Java 内部类
内部类(Nested Class),嵌套类。内部类介绍静态内部类非静态内部类 普通内部类(也称为:成员内部类) 在一个类(外部类)中直接定义的内部类匿名内部类方法内部类 在一个方法(外部类的方法)或代码块中定义的内部类内部类仍然是一个独立的类,在编译之后,内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和 $ 符号。此外,内部类可以使用修饰符(public, prot原创 2015-09-12 14:52:26 · 388 阅读 · 0 评论 -
Java字节码操作
字节码操作JAVA动态性的两种常见实现方式: 字节码操作反射运行时操作字节码可以实现如下功能 动态生成新的类动态改变某个类的结构(添加/删除/修改 新的属性/方法)优势: 比反射开销小JAVAasist性能高于反射,低于ASM常见的字节码操作类库BCEL Byte Code Engineering Library(BCEL),这是Apache Softeare Foundat原创 2015-08-17 11:54:12 · 451 阅读 · 0 评论 -
Java脚本引擎执行 javascript 代码
脚本引擎执行javascript代码JAVA脚本引擎是从JDK6.0之后添加的新功能脚本引擎介绍: 使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的Java脚本API是连通Java平台和脚本语言的桥梁可以吧一些复杂异变的业务逻辑交给脚本语言去处理,这可以大大提高开发效率获得脚本引擎对象 //获得脚本引擎对象原创 2015-08-17 10:35:00 · 631 阅读 · 0 评论 -
GOF23设计模式之 单例模式
单例设计模式核心作用保证一个类只有一个实例,并且提供一个访问该实例的全局访问点常见应用场景:windows的任务管理器网站的计数器Spring中,每个Bean默认就是单例的等等单例模式的优点:由于单例设计模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他以来对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决原创 2015-09-14 12:20:45 · 352 阅读 · 0 评论 -
GOF23设计模式之 工厂模式
工厂模式:实现了创建者与调用者的分离核心本质: 实例化对象,用工厂方法代替new操作。将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的现实类解耦。详细分类: 简单工厂模式 用来生产同一个等级结构中的任意产品(对于增加新的产品,需要修改已有代码)工厂方法模式 用来生产同一等级结构中的固定产品。(支持增加任意产品)抽象工厂方式 用来生产不同产品族的全部产品。(对于增加新的原创 2015-09-14 23:11:27 · 525 阅读 · 0 评论 -
GOF 23设计模式之 桥接模式
桥接模式场景:商城系统中常见的商品分类,以电脑为类,如何良好的处理商品分类销售的问题?我们可以采用多层继承结构实现上面的关系如果使用继承结构存在的问题 扩展性问题(类个数膨胀问题) 如果要增加一个新的电脑类型,则要增加各个品牌下面的类。若果要增加一个新的品牌盘,也要增加各种电脑类型的类违反单一职责原则 一个类:联想笔记本,有两个引起这个类变化的原因。将这个场景分成两个维度原创 2015-09-29 19:52:23 · 358 阅读 · 0 评论 -
GOF23设计模式之 命令模式command
介绍命令模式:将一个请求封装成一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式、事务transaction模式。结构Command抽象命令类ConcreteCommand具体命令类Invoker调用者/请求者 请求的发送者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接受者,因此它只与抽象命原创 2015-10-04 00:07:14 · 737 阅读 · 0 评论 -
GOF 23 设计模式 之 模版方法模式(template method)
场景:客户到银行办理业务: 取号排队办理具体业务(多种业务)给银行工作人员评分模版方法模式介绍:模版方法模式是编程中经常使用的模式。它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。核心:处理某个流程的代码都已经具备,但是其中某个节点的代码暂时不能确定。因此,我们采用工厂方法模式,将这个节点的代码实现原创 2015-10-04 17:20:09 · 434 阅读 · 0 评论 -
GOF 23 设计模式之 状态模式
场景红绿灯 红灯,绿灯,黄灯网上购物时,订单的状态 下单已付款已发货送货中已收货核心用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题结构Context环境类 环境类中维护一个State对象,他是定义了当前的状态State抽象状态类ConcreteState具体状态类 每一个类封装了一个状态对应的行为 开发当中常见的场景银行系统中帐号状态的管理OA系统中原创 2015-10-05 11:39:58 · 486 阅读 · 0 评论 -
JDK高性能编程之容器
JDK高性能编程之容器原文链接:http://my.oschina.net/smartsales/blog/518232读书笔记内容部分来源书籍深入理解JVM、互联网等,如有错误,请指正,我会及时更正,感谢。先放一个类图util,点击打开看明细j360-jdk调试功能https://github.com/xuminwlt/j3转载 2015-10-19 17:18:12 · 517 阅读 · 0 评论 -
GOF 23设计模式之 装饰模式(Decorator)
职责:动态的为一个对象增加新的功能装饰模式是一种代替继承的技术,无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。实现细节: - Component抽象构件角色 - 真实对象和装饰对象有相同的接口。这样,客户端对象就能够以与真实对象相同的方式同装饰对象交流。 - ConcreteComponent 具体构建角色(真实对原创 2015-10-01 21:13:11 · 541 阅读 · 0 评论 -
GOF 23 设计模式之 责任链模式(Chain Of Responsibility)
定义:将能够处理同一类请求的对象连成一条链,所提交的请求验者链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象。场景打牌时,轮流出牌接力赛跑大学中,奖学金审批公司里,公文审批实现方式链表方式定义职责链非链表方式定义职责链 通过集合、数组生成职责链更加实用!实际上,很多项目中,每个具体的Handler并不是由开发团队定义的,而是项目上线后原创 2015-10-03 15:46:04 · 608 阅读 · 0 评论 -
GOF23设计模式之 迭代器模式
场景:提供一种可以遍历聚合对象的方式。又称为:游标cursor模式聚合对象:存储数据迭代器:遍历数据基本案例实现正向遍历的迭代器实现逆向遍历的迭代器开发中常见的场景JDK内置的迭代器(List/Set)一种实现MyIteratorpackage com.coderbean.iterator;/** * Created by Chang on 15/10/3. */publ原创 2015-10-03 19:48:08 · 444 阅读 · 0 评论 -
GOF 23 设计模式之 观察者模式(Observer)
场景聊天室程序的创建。服务器创建好后,A,B,C三个客户端连上来公开聊天。A向服务器发送数据,服务器端聊天数据改变。我们希望将这些聊天数据分别发给其他在线的客户。也就是说,每个客户端需要更新服务器端的数据网站上,很多人订阅新闻。当有某个主题的新闻时,就会将这些新闻发给所有订阅的人。大家一起玩CS游戏时,服务器需要将每个人的方位变化发送给所有的客户。上面这些场景,我们都可以使用观察者模式来处理原创 2015-10-05 14:51:35 · 424 阅读 · 0 评论 -
使用Sublime Text 3 编译并运行Java程序
问题?安装好把SublimeText当作一个轻量级的编译工具来用还是不错的,可是当我下载好并且写了一个HelloWord的Java程序之后,它居然只编译不运行!那么我们几天就来解决这个问题注意:本教程针对的是Windows平台,Mac OS我已经试过了,并不行。变化原本网上是有一些关于sublime text 2的教程的,可是Sublime Text 3 和2 有些区别,主要是原来的一些配置原创 2016-01-25 19:26:29 · 35040 阅读 · 15 评论