自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (7)
  • 收藏
  • 关注

原创 剑指offer-数组中的逆序对

数组中的逆序对题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如: 例如,有一个数组为Array[0..n] 其中有元素a[i],a[j].如果 当i< j时,a[i]>a[j],那么我们就称(a[i],a[j])为一个逆序对。在数组{7,5,6,4}中一共存在5对逆序对,分别是(7,6),(7,5),

2016-06-30 16:44:37 968

原创 剑指offer-丑数

丑数 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路挺简单的,直接看代码:package com.genge.offer;/** * Created by Genge on 2016-06-30. */public class GetUglyNumbe

2016-06-30 11:38:08 456

原创 Java源代码分析之LinkedList

package java.util;import java.util.function.Consumer;/** * 非同步,双向链表(具有队列、栈的特性),可以加入null,fail-fast * 同步: List list = Collections.synchronizedList(new LinkedList(...)); * 关于fail-fast 更多信息,请看http://bl

2016-06-29 15:38:31 418

原创 JAVA中浅复制与深复制

JAVA中浅复制与深复制1.浅复制与深复制概念⑴浅复制(浅克隆)被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。 ⑵深复制(深克隆)被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的

2016-06-29 15:31:20 512

原创 剑指offer-整数中1出现的次数(从1到n整数中1出现的次数)

整数中1出现的次数(从1到n整数中1出现的次数) 求出1 ~ 13的整数中1出现的次数,并算出100 ~ 1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。解决思路 常规思路(暴力解决),一个数一个数的计数寻找

2016-06-28 22:34:28 14151 2

原创 剑指offer-最小的K个数

最小的K个数 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。输入 int[] input:待搜索的数组 ; int k:需要找出最小的数量输出 当k大于input长度时,返回空(非null);当k小于input长度时,返回input中最小的k个数字思路最粗暴方式,对数组所有元素排序(快排)利用冒泡排序

2016-06-27 21:45:39 562

原创 剑指offer-数组中出现次数超过一半的数字

数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。基本上有三种思路首先对数组排序,然后统计某个数出现的次数,发现超过数组长度一半就返回结果求出数组中最大数,然后声明一个额外的数组counts,数组大小为最大

2016-06-27 19:26:55 497

原创 Java源代码分析之Vector数组

Vector源码分析每个Java程序员应该的特性可变长数组(grow or shrink)能够使用索引获取值(accessed using an integer index)多线程环境下线程安全类图package java.util;import java.util.function.Consumer;import java.util.function.Predicate;import

2016-06-27 16:16:38 2084

原创 JDK源码一句注释:c.toArray might (incorrectly) not return Object[] (see 6260652)

最近在看JDK的源码:CopyOnWriteArrayList.Java和ArrayList.java,这2个类的构造函数,注释中有一句话看不懂。[java] view plain copy public ArrayList(Collectionextends E> c) {  elementData = c.toArray();  size

2016-06-17 21:40:42 2017

原创 Java集合迭代器之fail-fast机制

在JDK的Collection中我们时常会看到类似于这样的话:        例如,ArrayList:注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器

2016-06-17 17:40:09 746 1

原创 Java源代码分析之Stack栈

Stack 源代码分析每个Java程序员应该了解的特性LIFO后进先出的特性在多线程环境下线程安全类图可以看到Stack直接继承Vector类层次图可以看到,jdk还啰嗦的为大家添加了一个实现类,StringStack,其实根本没必要的吧,大体看了下,一共只有5个方法,加一个序列号字段,内部实现全部是复用父类的方法,完全可以自己实现的,有点多余啦,另外在继承Vector类中也就Stack了,

2016-06-16 10:44:57 1017

原创 Java数据结构之多项式加法和乘法实现

Java数据结构复习之多项式加法和乘法实现存储结构 数组链表数组实现package com.genge.jichu.polyn;/** * 用数组表示的多项式,以及相关实现 * Created by Genge on 2016-06-15. */public class Polynomial { /** * 多项式的加法 * * @param a

2016-06-15 19:07:34 9152 2

原创 Java源代码分析之StringBuffer

StringBuffer源码分析每个Java程序员基本都了解的长度可变字符操作工具类在多线程环境下线程安全额,好像想不到其他的呢?所以需要去阅读并分析源码StringBuffer类图,如下可以看到 StringBuffer继承自AbstractStringBuilder(实现了Appendable接口),实现了Serializable和CharSequence接口。源码分析(加入自己所

2016-06-14 20:49:11 1735

原创 Java多种方式自定义序列化

我们知道,通过实现java.io.Serializable接口可以使得该类的实例能够被序列化。例如如下的Person类,import java.io.Serializable;public class Person implements Serializable { private String name; private int age; public P

2016-06-14 20:45:07 3820

原创 Java并发编程:Callable、Future和FutureTask

创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。  这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。  如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。  而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。

2016-06-13 17:20:32 371

原创 公平锁与非公平锁

在Java的ReentrantLock构造函数中提供了两种锁:创建公平锁和非公平锁(默认)。代码如下:public ReentrantLock() {sync = new NonfairSync();}在公平的锁上,线程按照他们发出请求的顺序获取锁,但在非公平锁上,则允许‘插队’:当一个线程请求非公平锁时,如果在发出请求的同时该锁变成可用状态,那么这个线程会跳过队列中所有的等待线程而获得锁。

2016-06-12 16:31:23 681

原创 Java中13个原子操作类

原子更新方式原子更新基本类型原子更新数组原子更新引用原子更新属性(字段)原子更新基本类型AtomicBoolean :原子更新布尔类型AtomicInteger: 原子更新整型AtomicLong: 原子更新长整型原子更新数组AtomicIntegerArray :原子更新整型数组里的元素AtomicLongArray :原子更新长整型数组里的元素AtomicReferenceAr

2016-06-12 15:12:35 3747 1

原创 ConcurrentHashMap、HashMap、HashTable区别

线程不安全的HashMap 多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next的节点永远不为空,就会产生死循环的Entry。package com.genge.multithread;import java.util.HashMap;import

2016-06-10 14:51:02 609

原创 Java多线程基础知识疑难点

最简单Java程序包含有哪些线程Threadyield误用线程优先级Priority参数靠谱吗Daemon线程会导致finally不能执行线程中断状态判断使用模板设计模式实现独占锁同步组件AQS队列同步器独占式同步状态获取与释放过程最简单Java程序包含有哪些线程?代码为证:/** * Created by Genge on 2016-06-07. */public class M

2016-06-10 14:16:05 1583

转载 深入理解Java内存模型——volatile

volatile的特性当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:class VolatileFeaturesExample { volatile long vl = 0L

2016-06-06 15:46:01 329

原创 Java并发:volatile内存可见性和指令重排

volatile两大作用1、保证内存可见性2、防止指令重排 此外需注意volatile并不保证操作的原子性。(一)内存可见性1 概念         JVM内存模型:主内存和线程独立的工作内存Java内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存(比如CPU的寄存器),线程只能访问自己的工作内存

2016-06-06 15:33:37 1041

转载 Java内存模型之重排序

什么是重排序请先看这样一段代码1public class PossibleReordering {static int x = 0, y = 0;static int a = 0, b = 0;public static void main(String[] args) throws InterruptedException { Thread one = new Thr

2016-06-06 15:14:17 1508

原创 Spring 源码下载---从github导入源码到idea

先说说大家都知道的步骤安装git或者github客户端java环境JDK安装gradle下载安装git clone github上spring源码gradlew cleanIdea :spring-oxm:compileTestJavaimport导入project大概也就这么多吧下面我来分享我导入的时候几个问题选择git还是github客户端? 这个真的跟你的网速有关了,网速好

2016-06-05 10:39:21 3636

转载 浅谈Java泛型中的extends和super关键字

通配符在本文的前面的部分里已经说过了泛型类型的子类型的不相关性。但有些时候,我们希望能够像使用普通类型那样使用泛型类型:向上造型一个泛型对象的引用向下造型一个泛型对象的引用向上造型一个泛型对象的引用例如,假设我们有很多箱子,每个箱子里都装有不同的水果,我们需要找到一种方法能够通用的处理任何一箱水果。更通俗的说法,A是B的子类型,我们需要找到一种方法能够将C类型的实例

2016-06-03 15:07:59 1221

原创 JVM 并发性: 阻塞还是不阻塞?

在任何并发性应用程序中,异步事件处理都至关重要。事件来源可能是不同的计算任务、I/O 操作或与外部系统的交互。无论来源是什么,应用程序代码都必须跟踪事件,协调为响应事件而采取的操作。Java 应用程序可采用两种基本的异步事件处理方法:该应用程序有一个协调线程等待事件,然后采取操作,或者事件可在完成时直接执行某项操作(通常采取执行应用程序所提供的代码的方式)。让线程等待事件的方法被称为阻塞 方法。让

2016-06-02 16:10:22 1220 1

原创 网络编程:Reactor与Proactor的概念(设计模式)

1、标准定义两种I/O多路复用模式:Reactor和Proactor一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer)。分离器对象可将来自事件源的I/O事件分离出来,并分发到对应的read/write事件处理器(Event Handler)。开发人员预先注册需要处理的事件及其事件处理器(或回调函数);事件分离器负责将请求事件传递给事件处理

2016-06-02 14:36:02 980

原创 Java NIO系列教程(十二) Java NIO与IO

当学习了Java NIO和IO的API后,一个问题马上涌入脑海:我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。Java NIO和IO的主要区别下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。IO                NIO面向流

2016-06-02 12:22:23 391

原创 Java NIO系列教程(十一) Pipe

Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。这里是Pipe原理的图示:创建管道通过Pipe.open()方法打开管道。例如:1Pipe pipe = Pipe.open();向管道

2016-06-02 11:21:25 431

原创 Java NIO系列教程(十) Java NIO DatagramChannel

Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:1DatagramChannel channel = DatagramChan

2016-06-02 11:14:57 316

原创 Java NIO系列教程(九) ServerSocketChannel

Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。这里有个例子:01ServerSocketChannel serverSocketChannel = Serv

2016-06-02 11:12:21 337

原创 Java NIO系列教程(八) SocketChannel

Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:打开一个SocketChannel并连接到互联网上的某台服务器。一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。打开 SocketChannel下面是SocketChannel的打开方式:

2016-06-02 11:08:52 277

原创 Java NIO系列教程(七) FileChannel

Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAcc

2016-06-02 10:57:12 245

原创 Java NIO系列教程(六) Selector

Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。下面是本文所涉及到的主题列表:为什么使用Selector?Selector的创建向Selector注册通道SelectionKey通过Selector选择通道wakeUp()close()完整

2016-06-02 10:42:49 433

原创 Java NIO系列教程(五) 通道之间的数据传输

在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。transferFrom()FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此

2016-06-02 10:16:27 331

原创 Java NIO系列教程(四) Scatter/Gather

Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。聚集(ga

2016-06-02 10:11:30 297

高质量C++。doc

一、编程老手与高手的误区 自从计算机问世以来,程序设计就成了令人羡慕的职业,程序员在受人宠爱之后容易发展成为毛病特多却常能自我臭美的群体。 如今在Internet上流传的“真正”的程序员据说是这样的: (1) 真正的程序员没有进度表,只有讨好领导的马屁精才有进度表,真正的程序员会让领导提心吊胆。 (2) 真正的程序员不写使用说明书,用户应当自己去猜想程序的功能。 (3) 真正的程序员几乎不写代码的注释,如果注释很难写,它理所当然也很难读。 (4) 真正的程序员不画流程图,原始人和文盲才会干这事。 (5) 真正的程序员不看参考手册,新手和胆小鬼才会看。 (6) 真正的程序员不写文档也不需要文档,只有看不懂程序的笨蛋才用文档。 (7) 真正的程序员认为自己比用户更明白用户需要什么。 (8) 真正的程序员不接受团队开发的理念,除非他自己是头头。 (9) 真正的程序员的程序不会在第一次就正确运行,但是他们愿意守着机器进行若干个30小时的调试改错。 (10) 真正的程序员不会在上午9:00到下午5:00之间工作,如果你看到他在上午9:00工作,这表明他从昨晚一直干到现在。 ……

2018-11-27

项目管理系统 学习或者毕业设计都行

项目管理系统 学习或者毕业设计都行涉及的技术比较全面

2015-07-06

信息管理与信息系统专业毕业论文选题

信息管理与信息系统专业毕业论文选题(几百个题目任你选哦)

2015-07-06

Zend Studio 10.6.0 破解文件

Zend Studio 10.6.0破解文件,亲测可用!

2014-09-30

Zend Studio 10.6.2 破解文件

zendstudio10.6.2完美破解文件,将文件放在plugins文件夹下即可,注意源文件的备份!

2014-09-30

prototype1.7.js

prototype.js 是Sam Stephenson写的一个非常优雅的java script基础类库,对java script做了大量的扩展,而且很好的支持Ajax,兼容标准的类库,能帮助你轻松建立有高度互动的web2.0特性的丰富的客户端页面。   prototype.js不仅是一个有很大实用价值的js库,而且有很高的学习价值。   ---   在prototype.js中,prototype对象是实现面向对象的一个重要机制。   每个函数(Function)就是一个对象,函数对象都有一个子对象 prototype对象,类是以函数的形式来定义的。prototype表示该函数的原型,也表示一个类的成员的集合。   在通过new创建一个类的实例对象的时候,prototype对象的成员都成为实例化对象的成员。   1、该对象被类所引用,只有函数对象才可引用。   2、在new实例化后,其成员被实例化,实例对象方可调用。   同时,函数是一个对象,函数对象若直接声明成员,不用被实例化即可调用。

2014-08-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除