Java
一缕阳光a
(1)、从2018年8月开始从事分布式数据库内核开发工作,包括自研分布式分析型数据库OLAP、自研分布式数据库HTAP,根据开源数据库实现本公司集群型的OLTP产品,以及现在正在做的根据opengaussDB开发的HTAP类型数据库。
(2)、乐于专研,对分布式数据库有强烈的兴趣。
个人邮箱: zgaoq@163.com。
展开
-
多线程(二)
17) 为什么wait()和notify()方法要在同步块中调用?Java API强制要求这样做,否则会抛出IllegalMonitorStateException异常。还有一个原因是为了避免wait和notify之间产生竞态条件。18) 为什么你应该在循环中检查等待条件?防止处于等待状态的线程收到错误的唤醒消息。如果不在循环中检查等待条件,程序就会在没有满足结束条件的情况下退原创 2017-01-20 11:28:23 · 307 阅读 · 0 评论 -
单例模式(Java)
该单例模式考虑到了 "双检锁"的情况单例模式只有一个实例,节省了资源,提高了效率。public class Singleton { private Singleton() {} private volatile static Singleton instance; public static Singleton getInstance() { if (原创 2017-01-18 14:39:24 · 320 阅读 · 0 评论 -
多线程(三)
38) 如何在Java中创建Immutable对象?要创建不可变类,要实现下面几个步骤:(1)、通过构造方法初始化所有成员;(2)、对变量不要提供set方法;(3)、将所有的成员声明为私有的,这样就不允许直接访问这些成员;(4)、在get方法中,不要直接返回对象本身,而是克隆对象,并返回对象的拷贝。39) Java中的ReadWriteLock是什么?一般而言,原创 2017-01-20 13:27:54 · 208 阅读 · 0 评论 -
<java并发编程实战>阅读总结(b)
5、Executor框架Executor框架是并发集合java.util.concurrent中的一个成员。Executor为灵活且强大的异步任务执行框架提供了基础,还提供了对生命周期的支持,以及统计信息、应用管理机制和性能监视等机制。Executor 最早是为了解决生产者-消费者模式而引入的。提交任务相当是生产者,执行任务相当是消费者。线程池:(翻译的文档):线程池和工作原创 2017-01-24 23:11:52 · 301 阅读 · 0 评论 -
二分法查找
二分法查找:java代码如下public class Bisearch { public static int bisearch(int[] data, int find){ int low = 0; int mid = 0; int upper = 0; if (null == data) {原创 2017-02-14 14:29:14 · 272 阅读 · 0 评论 -
hibernate的初次使用
转载地址:http://blog.csdn.net/aboy123/article/details/10222675一、Hibernate概述(一)什么是Hibernate? hibernate核心内容是ORM(关系对象模型)。可以将对象自动的生成数据库中的信息,使得开发更加的面向对象。这样作为程序员就可以使用面向对象的思想来操作数据库,而不用关心繁琐的JDBC。所转载 2017-03-10 17:49:13 · 282 阅读 · 0 评论 -
TCP拥塞控制详解
为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制。最初由V. Jacobson在1988年的论文中提出的TCP的拥塞控制由“慢启动(Slow start)”和“拥塞避免(Congestion avoidance)”组成,后来TCP Reno版本中又针对性的加入了“快速重传(Fast retransmit)”、“快速恢复(Fast Recovery)”算法,再后来在TCP NewReno原创 2017-03-27 23:23:53 · 1150 阅读 · 0 评论 -
进程之间的通信方式-共享内存
共享内存是被多个进程共享的一部分物理内存。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。原理图如下:共享内存的实现分为两个步骤:一、 创建共享内存,使用shmget函数。二、 映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数。创建共享内存in原创 2017-04-12 12:48:33 · 733 阅读 · 0 评论 -
ListView中convertView和ViewHolder的工作原理
w和Adapter参考:http://www.cnblogs.com/xiaowenji/archive/2010/12/08/1900579.html工作原理: 1.ListView针对List中每个item,要求adapter给我一个视图(getView) 2.一个新的视图被返回并显示如果我们有上亿个item要显示怎么办?为每个项目创建一个新转载 2017-05-03 22:57:14 · 323 阅读 · 0 评论 -
Java中遍历删除ArrayList中多个元素
Java中遍历删除ArrayList多个元素Iterator itr = list.iterator();while(itr.hasNext()) { int i = itr.next(); if (i > 5) { // filter all ints bigger than 5 itr.remove(); }}原创 2017-05-05 11:08:09 · 438 阅读 · 0 评论 -
文件断点续传原理与实现
文件断点续传原理与实现在网络状况不好的情况下,对于文件的传输,我们希望能够支持可以每次传部分数据。首先从文件传输协议FTP和TFTP开始分析,FTP是基于TCP的,一般情况下建立两个连接,一个负责指令,一个负责数据;而TFTP是基于UDP的,由于UDP传输是不可靠的,虽然传输速度很快,但对于普通的文件像PDF这种,少了一个字节都不行。本次以IM中的文件下载场景为例,转载 2017-05-27 10:10:53 · 2290 阅读 · 0 评论 -
设计模式的理解的总结
参考的博客:http://blog.csdn.net/wangeen/article/details/8272501最近又把设计模式翻了一边,写个个人总结,这个总结比较简单,主要是一些理解,对于他们的实现和应用以后再总结设计模式是编程抽象化的一个具体的应用,它让程序更好的阅读和理解,逻辑上更加合理,是通向更大规模软件的一个基础,换个说法,如果一个软件的模式很混乱那么它混转载 2017-05-19 18:20:56 · 349 阅读 · 0 评论 -
SSL和HTTPS
SSL说明: 1)简介 SSL (Secure Socket Layer)为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。转载 2017-07-11 15:04:34 · 305 阅读 · 0 评论 -
设计模式之单一职责原则
定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T原创 2017-06-13 16:32:22 · 241 阅读 · 0 评论 -
String、StringBuffer与StringBuilder之间区别
最近腾出时间来了,将1年前学习的一些东西整理出来String、StringBuffer与StringBuilder这三个类用在字符串处理中,那么他们到底有什么优、缺点,什么时候该用谁呢?下面我们从以下几点说明一下1.三者在平均效率方面的比较:StringBuilder > StringBuffer > String String:字符串常量,只能被创建或销毁。原创 2017-01-24 14:36:10 · 224 阅读 · 0 评论 -
equals()与==的区别
“==”比较两个变量本身的值,即两个对象在内存中的首地址。“equals()”比较字符串中所包含的内容是否相同。比如:String s1,s2,s3 = "abc", s4 ="abc" ;s1 = new String("abc");s2 = new String("abc");那么:s1==s2 是 false //两个变量的内存地址不一转载 2017-01-19 12:36:18 · 198 阅读 · 0 评论 -
多线程(一)
1) 什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒2) 线程和进程有什么区别?进程是一个独立的具有一定功能的程序,关于某个集合的一次执行过程。线程是进程的原创 2017-01-19 13:28:15 · 236 阅读 · 0 评论 -
Java内存泄露原因详解
一、Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Heap)中分配的,所有对象的回收都是由Java虚拟机通过垃圾回收机制完成的。GC为了能够正确释放对象,会监控每个对象的运行状况,对他们的申请、引用、被引用、赋值等状况进行监控,Java会使用有向图的方转载 2017-02-06 23:06:04 · 223 阅读 · 0 评论 -
Android中使用软引用和弱引用避免OOM的方法
个人总结如下:4种类型的引用 由高到低依次为:强引用>软引用>弱引用>虚引用(1)、强引用如:Object object=new Object(),object就是一个强引用了。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会被回收。(2)、软引用 只有内存不足(OOM)时,软引用才被回收,常用于缓存;(3)原创 2017-02-07 18:01:15 · 562 阅读 · 0 评论 -
二分法查找(Java)
二分法查找 时间复杂度为O(logn) public class Bisearch { public static int search(int[] data, int find){ int low = 0, mid = 0, upper = data.length - 1; if (null == data) {原创 2017-01-15 19:57:42 · 377 阅读 · 0 评论 -
排序算法之两路归并排序(Java)
将2个有序的数组合并为一个有序的数组 时间复杂度为O(nlogn)默认是按升序进行排序:public class MergeSort { public static int[] sort(int[] data, int low, int high) { int mid = (low + high) / 2; if (lo原创 2017-01-18 12:58:30 · 887 阅读 · 0 评论 -
排序算法之快速排序(Java)
快速排序 平均时间复杂度 O(NlogN) 最差时间复杂度O(N*N) 不稳定它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 /** * 1.先从数列中取出一个数作为基准数。原创 2017-01-18 13:35:36 · 171 阅读 · 0 评论 -
排序算法之选择法排序(Java)
选择排序 时间复杂度 O(n*n) 不稳定的排序算法思想是:每一趟从待排序的数据元素中选出最小的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。下面是关键部分代码:public static void select_sort(int[] data){ int i = 0, j = 0, k = 0; int len = 0, tmp原创 2017-01-18 13:59:24 · 522 阅读 · 0 评论 -
排序算法之简单插入法排序(Java)
简单插入排序 时间复杂度 O(n*n) 稳定的排序算法逐一取出元素,在已排好的元素序列中从后向前扫描,插入到适当的位置部分代码如下: public static void insert_sort(int[] data) { int i= 0; int j = 0; int len = 0; int原创 2017-01-18 14:21:11 · 842 阅读 · 0 评论 -
排序算法之希尔排序(Java)
希尔排序 平均时间复杂度:O(nlogn) 不稳定的排序算法v[0]与v[0+n/2]比较,v[1]与v[1+n/2]比较,v[2]与v[2+n/2]比较,小的放到前面,以此类推..............关键部分代码如下:public static void shell_sort(int[] data){ int group = 0; int i = 0原创 2017-01-18 14:25:08 · 197 阅读 · 0 评论 -
生产者-消费者模式
在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产转载 2017-01-18 19:36:20 · 279 阅读 · 0 评论 -
简单工厂模式+工厂方法模式
在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像一部转载 2017-01-18 15:50:01 · 288 阅读 · 0 评论 -
JVM GC调优总结 -Xms -Xmx -Xmn -Xss
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java -Xmx3550m -Xms355转载 2017-01-19 11:11:18 · 1440 阅读 · 0 评论 -
观察者模式Observer
初学java的观察者模式,今天总结了下,希望指正。 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。 所谓观察者模式,举个例子现在许多购房者都密切观察者房价的变化,当房价变化时,所有购房者都能观察到,以上的购房者属于观察者,这便是观察者模式。 J原创 2017-02-09 18:42:20 · 171 阅读 · 0 评论 -
分配大小为0的内存和0值进行比较
原创 2018-01-05 22:51:22 · 501 阅读 · 0 评论