Java程序
文章平均质量分 80
普通网友
这个作者很懒,什么都没留下…
展开
-
Java动态代理原理及实现
最近项目和看技术文章的时候接触了点Java动态代理和cglib、asm等知识,发现对于动态代理整套机制理解不够,总以为是采取切片等方式,运行时利用反射,通过标记等在需代理方法或者接口等上下文中执行某种增强方法,未想到会有中间字节码的动态生成,看到博主的这篇文章,觉得写得比较仔细,描述清楚了组建代理对象、字节码生成、执行代理功能等各个流程。见贤思齐,看到好的文章在此搬运过来沉淀传播,自己写一个java.lang.reflect.Proxy代理的实现 ,在此表示感谢!前言 Java设计模式9:代转载 2016-12-04 16:54:43 · 1260 阅读 · 0 评论 -
Java对于Cookie的操作详解
在此声明:本文转自原文,最近学些Web后台,用到Java相关知识点,觉得下面文章不错,在此转发以扩大影响,同时希望能帮助广大的开发者,在此对原文作者表示感谢! 1.设置CookieCookie cookie = new Cookie("key", "value");cookie.setMaxAge(60); 设置60秒生存期,如果设置为负值的话,则为浏览器进程Cookie(内存中保转载 2015-04-19 19:57:07 · 2927 阅读 · 0 评论 -
HttpServlet详解
Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口和类.在javax.servlet.http包中定义了采用HTTP通信协议的HttpServlet类.Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servle转载 2015-04-02 15:52:51 · 936 阅读 · 0 评论 -
java中的反射机制
在此声明:以下文章转载自java中的反射机制在此表示感谢!虽说文章中我有不同见解,但为了尊重版权,在此全部转载,只是去掉了各自文中的重复部分,在此再次表示感谢!一、什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计转载 2014-12-27 17:56:46 · 663 阅读 · 0 评论 -
sleep & wait | notify | notifyAll
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。notify()方法和wait()方法的基本思想是给方法或代码块提供一种相互通信的方式,而这些方法或者代码块同步于某个特定对象。代码块可以调用wait()方法来将自身的操作挂起,直到同一个对象上的其他同步方法或同步代码块以某种方式将其改变,并调用notfiy()方法来通知此代码块改变已经完成。一个线程一般会因为它所同步的对象的某个属性没有设置,或者某转载 2015-01-14 22:45:01 · 698 阅读 · 0 评论 -
JVM 垃圾回收机制(GC)
在此声明:以下文章转载自什么是二维码?有什么用?在此表示感谢!虽说文章中我有不同见解,但为了尊重版权,在此全部转载,只是去掉了各自文中的重复部分,在此再次表示感谢!1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自转载 2014-12-16 22:59:54 · 818 阅读 · 0 评论 -
生产者与消费者问题
在进行多线程编程的过程中,线程间的同步与互斥是件需要认真考虑的关键点,而生产者与消费者就是线程间同步的典型例子:若干个生产者在生产产品,若干个消费者同时消费这些物品,保证多个生产者和多个消费者能并发或并行(关于并行与并发的区别以及多线程编程的一些基本概念,可以参考这篇博文:多线程初步)执行。解决生产者与消费者的典型方法是设立一个产品缓冲区,然后多个生产者与消费者互斥的访问该缓冲区。原创 2014-11-01 21:55:04 · 1189 阅读 · 0 评论 -
读者与写者问题
在进行多线程编程的过程中,线程间的同步与互斥是件需要认真考虑的关键点,而读者与写者就是线程间同步的典型例子:若干个读者在读取文章,若干个写者同时编辑文章,保证多个读者和多个写者能并发或并行(关于并行与并发的区别以及多线程编程的一些基本概念,可以参考这篇博文:多线程初步)执行。解决读者与写着的典型方法是设立一个文章缓冲区,然后多个读者与写者互斥或共同地访问该缓冲区。 写操作是排他锁(排斥读者,同样排斥其他写者),读操作是共享锁(多个读者可读,排斥写者)。当然,当读者与写者、写者与写者几乎同一时间到达时,涉及到原创 2014-11-06 21:12:46 · 1828 阅读 · 2 评论 -
Codeforces:Diverse Permutation(找规律)
本题要求给定1到n的序列,满足相邻两项之差的绝对值不相同的个数为k。由于给定的1 ≤ k < n ≤ 105 范围较大,所以只能寻找时间复杂度为O(n)的算法。可以想到该序列最多有n-1个不同的相邻差(绝对值),其中一个满足条件的序列是:n,1,n-1,2,n-3,3…………。可以尝试构造满足条件的前k-1,然后后面的顺序填写。原创 2014-11-02 16:56:39 · 947 阅读 · 0 评论 -
Java中的ReentrantLock和synchronized两种锁定机制的对比
原文:http://www.ibm.com/developerworks/cn/java/j-jtp10264/index.html多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个Thread 类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造 ——转载 2014-11-03 15:33:28 · 586 阅读 · 0 评论 -
Java中多线程技术
最近由于工作的原因开始决定系统学习一下Java的多线程机制。Java语言的一大特点就是内在支持多线程,这和很多语言需要通过外部开发包来实现多线程有本质区别。每个程序都有一个主线程,当程序启动时自动执行。关于多线程的一些概念性东西,见这篇博文:多线程初步。原创 2014-11-01 09:37:47 · 1258 阅读 · 0 评论 -
网络编程初步
在计算机网络课程中知道OSI(英文全称:Open System Interconnection,译作:开放式系统互联参考模型)将网络通信归结为七层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层,具体功能大致归结如下: Socket通常称作"套接字",Socket=IP地址+端口号,构成网络通信的句柄。网络通信的本质不是不同计算机之间的通信而是不同计算机上应用程序的通信。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。在很多操作系统平台包括主流的Windows、Linux、Androi原创 2014-11-13 21:47:55 · 1004 阅读 · 0 评论 -
Java版五子棋程序
一、实验题目 五子棋游戏。二、问题分析 五子棋是双人博弈棋类益智游戏,由围棋演变而来,属纯策略型。棋盘通常15*15,即15行,15列,共225个交叉点,即棋子落点;棋子由黑白两色组成,黑棋123颗,白棋122颗。游戏规则为黑先白后,谁先五子连成一条直线谁赢,其中直线可以是横的、纵的、45度、135度。 本次Java编程我的目的是现实人机对战,即游原创 2014-01-02 14:30:50 · 11629 阅读 · 27 评论 -
ThreadPoolExecutor解析
一、概述 1、ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务; 2、Executors方法提供的线程服务,都是通过参数设置来实现不同的线程池机制; 3、先来了解其线程池管理的机制,有助于正确使用,避免错误使用导致严重故障;同时可以根据自己的需求实现自己的线程池。转载 2016-04-17 15:37:43 · 816 阅读 · 0 评论 -
mysql、zookeeper、redis和elasticsearch主从同步机制
mysql、zookeeper、redis和elasticsearch主从机制。 当系统规模达到一定程度时,传统的单机模式往往无法满足,于是就有了分布式系统。分布式系统面临的问题是CAP问题 。CAP具体含义如下:1、consistency:一致性,数据一致更新,保持数据同步更新2、availability:可用性,好的响应性能3、partition tolerance:分区容错性,可靠性定理:任何分布式系统只可同时满足二点,没法三者兼顾忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系原创 2016-10-03 23:06:58 · 9832 阅读 · 1 评论 -
Java强引用、软引用、弱引用、虚引用详解
强引用:如果一个对象具有强引用,GC绝不会回收它;当内存空间不足,JVM宁愿抛出OutOfMemoryError错误;软引用:如果一个对象具有软引用,当内存空间不足,GC会回收这些对象的内存,使用软引用构建敏感数据的缓存;弱引用:如果一个对象具有弱引用,在GC线程扫描内存区域的过程中,不管当前内存空间足够与否,都会回收内存,使用弱引用 构建非敏感数据的缓存;虚引用:如果一个对象仅持有虚引用,在任何时候都可能被垃圾回收,虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列联合使用,虚引用主要用来跟原创 2015-04-25 16:20:40 · 9290 阅读 · 1 评论 -
JDBC数据库编程
JDBC: Java database connection。JDBC是一组编程接口,数据库系统的底层开发者实现接口,Java开发者调用JDBC提供的接口进行与数据库的创建、链接、更新等操作。JDBC提供两种API,分别是面向开发人员的API和面向底层的JDBC驱动程序API,底层主要通过直接的JDBC驱动和JDBC-ODBC桥驱动实现与数据库的连接。原创 2014-11-29 15:22:41 · 1308 阅读 · 0 评论 -
设计模式-组合模式
之前在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,后来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。由于平时编程时用C/C++,现在由于将来工作的需要在重新自学Java,也练练Java语法。对于设计模式的重要性,在最近准备做毕业课设时体会尤为深刻:很多时候不是不会编写相关算法模块,而是总感觉自己的代码可读性、可重用性、可拓展性比较差,不利于移植。原创 2014-12-07 19:48:56 · 897 阅读 · 0 评论 -
设计模式-享元模式
享元模式(Flyweight):运用共享技术有效的支持大量细粒度的对象。实现计算机资源的共享,用少量对象实例表示大量对象,防止频繁的创建对象导致效率降低。项常见的线程池、内存池技术都应享元模式的影子。原创 2014-12-08 22:28:10 · 979 阅读 · 0 评论 -
阻塞队列
线程的同步是保证多线程安全访问竞争资源的一种手段。Java中线程同步的方法有很多,如显式的synchronized、Lock等,还有如管道、阻塞队列等特殊的数据结构支持线程同步。本文谈谈我对阻塞队列的看法。 阻塞队列的主要性质有如下2条:1)、任何时候只能有一个线程在插入或移除元素;2)、当队列为空时进行获取或移除元素不会返回null或抛出异常,而是等待队列直至其不为空;当队列为满时进行插入元素不会抛出异常,而是等待队列直至其不为满。原创 2015-01-22 20:38:40 · 848 阅读 · 0 评论 -
Java装箱==的池化坑
“基本类型优于装箱基本类型” ,其中那个Integer例子觉得不合适,于是看了Integer源码,发现还真是有点问题,至少我的jdk1.7是有问题的。 Java是高度封装基于JVM API的语言,和C++一个重要的区别就是不支持运算符重载。就我肤浅地理解,基本的运算操作+、-、*、/、==等对于开发者老说通常是不透明的,所以对于模糊的地方不好把握,对于装饰器类型也就是通常意思的装箱类型。jdk还不能说是JVM将小范围的数值做了缓存,如int的[-128,127](其中128并不是一个比较准确的答案原创 2016-01-30 12:46:59 · 983 阅读 · 0 评论 -
Guava中RangeMap自定义range区间
RangeMap是一种集合类型,它将不相交、且不为空的Range(key)映射给一个值(Value),RangeMap不可以将相邻的区间合并,即使这个区间映射的值是一样的,实现RangeMap也是一个接口,实现它的也只有两个类,分别为mmutableRangeMap和TreeRangeMap。其中TreeRangeMap是key有序的。具体区间排序规则就不再说了。原创 2015-03-20 22:41:56 · 4889 阅读 · 0 评论 -
储水池抽样算法原理与实现
记得在实习那会,涉及到抽奖的解决方案,即一天以k/n的概率中奖,要求给出简单高效的算法,其中n只有在结束时才知道。换言之,题意即为如何从未知或者很大样本n空间中随机地取k个数,保证每个被取到的概率为n/k。解决此题的很好方法就是储水池算法Reservoir Sampling Algorithm。原创 2014-10-18 17:27:23 · 2876 阅读 · 0 评论 -
Karp_Rabin算法
在教材上学过BF算法、KMP算法、也会DFA,今天学习了下Karp_Rabin算法(简称KR算法)。 Karp Rabin 算法是利用hash函数的特性进行字符串匹配的。KR算法对模式串和循环中每一次要匹配的子串按一定的hash函数值,如果hash值相同,才运用BF算法匹配。如果hash函数设计得好的话,不同子串hash值相同是小概率事件,且速度较快。在虽然理论上KR算法的时间原创 2013-12-07 11:26:48 · 1092 阅读 · 0 评论 -
模式识别ID3算法实现
一、决策树ID3算法描述 决策树算法是一种逼近离散函数值的方法。它是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析。本质上决策树是通过一系列规则对数据进行分类的过程。决策树算法中最简单、最经典的就是ID3算法了。下面我从程序员的角度谈谈我对决策树算法的基本理解。在进行节点分裂的过程中,按照一定的贪心策略自顶向下的递归建树原创 2014-04-25 22:01:15 · 3197 阅读 · 7 评论 -
数据库读写分离方法浅析
笔者实际的问题是尝试读写分离,下面记录一下读写分离方法,欢迎斧正。DB读写分离理论上方案比较多,如中间件转发、应用层分离,数据库驱动等等,各种方法的优缺点如下:1、中间件转发通过mysql中间件做主从集群,Mysql Proxy、Amoeba、Atlas等中间件貌似都能符合需求。优点:对应用透明缺点:需要代理,增加网络等性能开销2、应用层分离应用层路由数据源实现读写分离,通过AOP或者注解来动态选择数据源优点:无需中间件,策略可选,可用来负载均衡缺点:耦合度高3、数据库驱动Replica原创 2016-10-07 21:05:19 · 5024 阅读 · 1 评论 -
aspectj-autoproxy Controller未生效解决方案
本周做业务需求,需要对api的响应时间做监控。第一想法是在需要监控的api里面答应日志,记录care的信息,这样的最大问题就是不容易扩展,需要在每个api里面添加几乎相同的代码。当时,Java的通用做法是切片,利用Java语言提供的反射能力,结合spring 的三大特性之一的aop(面向切面编程)思想,可以完全解耦的添加切片就行,这样在低耦合、高内聚的编程原则下是显得比较优雅,但是难免要牺牲一下效.Controller是定义在xxx-servlet.xml配置文件中,所以定义在applicationCont原创 2016-09-22 21:28:23 · 3154 阅读 · 0 评论 -
hdu1063(高精度)
ExponentiationTime Limit: 1000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6036 Accepted Submission(s): 1672Problem DescriptionProblems invol原创 2013-12-09 21:53:39 · 1123 阅读 · 0 评论 -
hdu1002(高精度)
A + B Problem IITime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 181565 Accepted Submission(s): 34671Problem DescriptionI have a v原创 2013-12-09 21:26:13 · 937 阅读 · 0 评论 -
编程之美初赛-焦距
题目1 焦距时间限制:2000ms单点时限:1000ms内存限制:256MB描述 一般来说,我们采用针孔相机模型,也就是认为它用到的是小孔成像原理。在相机坐标系下,一般来说,我们用到的单位长度,不是“米”这样的国际单位,而是相邻像素的长度。而焦距在相机坐标系中的大小,是在图像处理领域的一个非常重要的物理量。假设我们已经根据相机参数,得到镜头的物理焦距大小(focal原创 2014-04-19 15:59:37 · 1156 阅读 · 0 评论 -
设计模式-装饰模式
最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。 今天先介绍一下装饰模式。概念: 动态的给某个类添加新的功能。当需要为某个现有的对象动态的增加一个新原创 2014-04-05 17:17:13 · 971 阅读 · 0 评论 -
设计模式-单一职责模式
最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。 今天先介绍一下单一职责模式。概念: 就一个类而言应该只有一个因其他变化的原因。 流程:原创 2014-03-30 15:21:19 · 1379 阅读 · 0 评论 -
设计模式-代理模式
最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。 今天先介绍一下代理模式。概念: 代理模式(Proxy):为其他对象提供一种代理以控制对该对象的访问。原创 2014-04-06 19:58:33 · 1087 阅读 · 0 评论 -
设计模式-建造者模式
最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。由于平时编程时用C/C++,现在是Java,也练练Java语法。 今天先介绍一下建造者模式。概念: 建造原创 2014-04-20 12:08:51 · 929 阅读 · 0 评论 -
设计模式-单例模式
最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。由于平时编程时用C/C++,现在学学Java,也练练Java语法。 今天先介绍一下单例模式。概念: 单例模式(Si原创 2014-04-20 18:08:23 · 842 阅读 · 0 评论 -
设计模式-外观模式
最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。 今天先介绍一下外观模式。概念: 外观模式(Facade):为多个子系统的一组接口提供一个统一的界面,此模式定义了原创 2014-04-16 15:54:30 · 966 阅读 · 0 评论 -
设计模式-简单工厂模式
最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。 今天先介绍一下简单工厂模式。 简单工厂模式概述: 定义一个类来负责创建其他类的实例,被创建的实例通常都具有原创 2014-03-30 11:13:44 · 933 阅读 · 0 评论 -
设计模式-策略模式
最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。 今天先介绍一下简单工厂模式。概念: 定义了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变换原创 2014-03-30 14:37:30 · 899 阅读 · 0 评论 -
Java 初识之中播放音乐
大三上学期,学Java,编个程序用到播放音乐。在网上找了很多,都没能达到理想的效果。后来解决了,在此罗列一下皮毛,简直贻笑大方了!由于很多东西没有上升的理论层面,在此只能介绍下应用,方便学习交流,同时以备后面用到。 自动下面的类即可。import java.io.File;import javax.sound.sampled.AudioInputStream;imp原创 2014-01-15 23:40:29 · 875 阅读 · 0 评论 -
初始Applet
Java中的程序分成两类:基于web的Applet程序;应用程序Application。后者属于我们平时在个人机上开发的各种不与网络打交道的程序,这类程序是独立的,直接通过安装好的Java解释器来解释运行;而Applet程序则只能在web浏览器中运行,用于创建动态的、交互的web应用程序。1.在浏览器中打开包含Applet对象的页面,开始创建并初始化其中的Applet对象;2.原创 2013-12-21 16:30:39 · 1173 阅读 · 0 评论