热爱分布式技术
jni全称是Java Native Interface是在JAVA和Native层(包括但不限于C/C++)相互调用的接口规范。 JNI在JAVA1.1中正式推出,在JAVA1.2版本中加入了JNI_OnLoad,JNI_OnUnload方法,这两个方法还是很有用的,后面再说。
JAVA和C++都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继乘,多态)。而由于c++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性! JAVA则是完全的面向对象语言,它句法更清晰,规模更小,更易学。
-------------------------------------SAX解析xml---------------------------------- 》Sax定义 SAX是一个解析速度快并且占用内存少的xml解析器,...
1、try块中没有抛出异常,try、catch和finally块中都有return语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
泛型的优缺点 优点: 使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。 泛型最常见的用途是创建集合类。 缺点: 在性能上不如数组快。
String源码分析 从一段代码说起: public void stringTest(){ String a = "a"+"b"+1; String b = "ab1"; System.out.println(a == b); } 大家猜一猜结果如何?如果你的结论是true。
直接for循环效率最高,其次是迭代器和 ForEach操作。 作为语法糖,其实 ForEach 编译成 字节码之后,使用的是迭代器实现的,反编译后,testForEach方法如下: public static void testForEach(List list) { for (Iterator iterator = list.
当JVM执行Java字节码时,类型信息会存储在方法区中,为了优化对象的调用方法的速度,方法区的类型信息会增加一个指针,该指针指向一个记录该类方法的方法表,方法表中的每一个项都是对应方法的指针。
Interface与abstract类的区别。 抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。
Java面向对象的三个特征与含义 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。
Excption与Error区别 Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的状况;Exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。
八种基本数据类型的大小,以及他们的封装类。 八种基本数据类型,int ,double ,long ,float, short,byte,character,boolean 对应的封装类型是:Integer ,Double ,Long ,Floa...
Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。 所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。
java.util是最常用的包。掌握好类的继承等关系也利于自己学习。下面是api中的阶层。 Class Hierarchy java.lang.Object java.
简单观察者模式 观察者模式中,一个被观察者管理所有依赖它的观察者,并且在本身的状态改变时主动发出通知。这通常通过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
表名为 A: ID SCORE 1 28 2 33 3 33 4 89 5 99 6 68 7 68 8 78 9 88 ...
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。
一、server端安装 1、下载 https://github.com/MSOpenTech/redis 可看到当前可下载版本:redis2.
可扩展的实时事务处理 我们相信编写出正确的具有容错性和可扩展性的并发程序太困难了。这多数是因为我们使用了错误的工具和错误的抽象级别。Akka就是为了改变这种状况而生的。
一、基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收http://www.jcp.org/en/jsr/detail?id=133http://ifeve.
HashSet 简介 HashSet 是一个没有重复元素的集合。 它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素。 HashSet是非同步的。
Set类型的ConcurrentSkipListSet和CopyOnWriteArraySet 对应的非并发容器:HashSet 目标:代替synchronizedSet 原理:基于CopyOnWriteArrayList实现,其唯一的不同是在add时调用的是CopyOnWriteArrayList的addIfAbsent方法,其遍历当前Object数组,如Object数组中已有了当前元素,则直接返回,如果没有则放入Object数组的尾部,并返回。
JDK8的版本,与JDK6的版本有很大的差异。实现线程安全的思想也已经完全变了,它摒弃了Segment(锁段)的概念,而是启用了一种全新的方式实现,利用CAS算法。
ConcurrentHashMap 是 util.concurrent 包的重要成员。本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体实现机制。
和java.util.HashMap比起来,基本类似,有两个地方不同。一个是对onlyIfAbsent参数的判断处理。另一个则是对整个操作过程加锁,并在加锁的地方做了稍微巧妙的处理。
同步容器类有以上问题,导致这些类成了鸡肋,Java 5推出了并发容器类 队列Queue类型的BlockingQueue和ConcurrentLinkedQueue Map类型的ConcurrentMap Set类型的ConcurrentSkipListSet和CopyOnWriteArraySet List类型的CopyOnWriteArrayList Map对应的有ConcurrentHashMap Map对应的有ConcurrentHashMap 更加细化的锁机制。
Java常用的容器有ArrayList、LinkedList、HashMap等等,这些容器都是非线程安全的。如果有多个线程并发地访问这些容器时,就会出现问题。在编写程序时,必须要求程序员手动地在任何访问到这些容器的地方进行同步处理。
OpenStack云平台技术是云计算技术中的主流技术,已得到大量主流商业厂商和研究机构的大力支持。在未来的几年中,OpenStack会对云计算以及IT领域产生极大的影响。
多线程基础 为什么需要并行 有关并行的重要概念 有关并行性能的2个重要定律 多线程基础 线程的基本操作 守护线程 优先级 中断处理 基本的线程同步操作 Java内存模型和线程安全 原子性 可见性 有序性 Happen-Before...
Java语言规定关键字不能作为标识符。目前共有50个Java关键字 关键字 含义 abstract 表明类或者成员方法具有抽象属性 assert 用来进行程序调试 boolean 基本数据类型之一,布尔类型 break 提前跳出一个块 b...
代码: https://github.com/jinhang/OkFileTransfer/blob/master/README.md 背景 阿里搬砖头比赛说好是Client端线程级的同步阻塞请求,结果一帮人用了协程来完成这件事。
便于后期的维护,我们一般会进行分层开发,基于Maven3开发。 system-parent |—-pom.xml |—-system-domain |—-pom.
监视虚拟机和故障处理工具 jps 显示虚拟机进程 jstat 收集虚拟机的运行数据 jinfo 显示虚拟机配置信息 jmap 显示虚拟机内存快照 jhat 分析内存快照,建立http服务,让用户可以在浏览器上的进行查看。
数组用new关键字创建并且组装,使用整形索引来访问,大小不可变,注意经常出现的数组越界问题。 int [] a = new int[2]; int [] a = new int{1,2,3,4} 数组是一个简单的复合数据类型,一系列有序数据的集合,每个数具有相同的数据类型。
在Java5 中提供了变长参数(varargs),也就是在方法定义中可以使用个数不确定的参数,对于同一方法可以使用不同个数的参数调用。 可变长参数的定义 print(String.
多线程的可见性和有序性 ———–多个线程之间是不能互相传递数据通信的,它们之间的沟通只能通过共享变量来进行。JMM规定了jvm有主内存,主内存是多个线程共享的。当new一个对象的时候,也是被分配在主内存中,每个线程都有自己的工作内存,工作内存存储了主存的某些对象的副本,当然线程的工作内存大小是有限制的。
分类: 30.Machine L & Deep Learning(11) 目录(?)[-] 通俗理解卷积神经网络cs231n与5月dl班课程笔记 前言 人工神经网络 1 神经元...
在java中,数据是以常量和变量两种方法形式进行存储和表示的(实际上,所有程序的数据都是这两种形式)。 四类八种 第一类:逻辑型boolean 默认初始值是false 1Byte 第二类:文本型char 2Byte unicode编码,一个汉字两个字节 第三类:整数型(byte、short、int、long) byte 1 Byte -128-127 short 2Byte int 4Byte java默认是INT long 8Byte L 不受操作系统的影响保证了java的移植性。
(1)对于public修饰符,它具有最大的访问权限,可以访问任何一个在CLASSPATH下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。
接口: Collection 子接口: BlockingDeque, BlockingQueue, Deque, List, NavigableSet, Queue, Set, SortedSet 实现类: ArrayBlockingQueue, ArrayD...
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。
数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。
一切源于: 阿里搬砖头比赛说好是Client端线程级的同步阻塞请求,结果一帮人用了协程来完成这件事。其实吧,我想说就算用协程来完成,其实本质也和异步差不多(就网络通讯层),不过却激发了我的好奇心,因为比赛的结果是1G极限,只用了3秒! 3秒…如果我们将题目往对我有利的思考方向改变下,不再是Client端线程级的同步阻塞,只要求Server端请求应答同步即可。
Spring作为现在最优秀的框架之一,已被广泛的使用,51CTO也曾经针对Spring框架中的JDBC应用做过报道。本文将从另外一个视角试图剖析出Spring框架的作者设计Spring框架的骨骼架构的设计理念,有那几个核心组件?为什么需要这些组件?它们又是如何结合在一起构成Spring的骨骼架构?Spring的AOP特性又是如何利用这些基础的骨骼架构来工作的?Spring中又使用了那些设计模式来完成它的这种设计的?它的这种 设计理念对对我们以后的软件设计有何启示?本文将详细解答这些问题。
通过两种形式来体现OOP的抽象:接口和抽象类。 抽象类 抽象方法是一种特殊的方法:它只有声明,而没有具体的实现 abstract void fun(); 如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。
线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。
Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现 Timer timer = new Timer(); timer.