关闭

关于分布式程序设计常见问题分析

虽然系统越来越复杂,以及新分布式架构设计的思想普及,越来越多的系统采用了分布式的架构,特别是HTTP为交互方式的接口调用,移动端和PC端的并行对分布式架构带来了很大的推动。各式各样的服务接口,在处理业务流程之外有一些共性的问题,正视设计和解决这些问题,会大大提高程序的可用性,扩展性和可维护性。 以下总结是笔者工作中对于分布式设计问题的总结,具体内容如下: 1、日期格式 时间在生活中是一个容易忽...
阅读(123) 评论(0)

线程基础:多任务处理——Fork/Join框架(排序算法性能补充)

1、概述 在之前的一篇文章《线程基础:多任务处理——Fork/Join框架(解决排序问题)》中,我们使用了fork/join框架提高归并排序的性 能。那篇文章发布后,有的读者联系我,觉得单就归并排序的优化并不太能够说明fork/join框架对性能的提升,也不能说明多个典型排序算法的性能区别。所以本篇文章从单线程快速排序到多线程归并排序、再到多线程桶排序的方式,依次分析它的执行性能。 ...
阅读(69) 评论(0)

线程基础:多任务处理——Fork/Join框架(要点2)

2-3. ForkJoinPool中的队列 那么ForkJoinPool是怎样创建队列的呢?请看如下两段源代码片段: /** * Tries to add the given task to a submission queue at * submitter's current queue. Only the (vastly) most common path * is direct...
阅读(91) 评论(0)

线程基础:多任务处理——Fork/Join框架(要点1)

1、工作过程概要 在开篇前,首先回答一个上篇文章中的一个问题。在上篇文章给出的第一个归并算法实例中提到,归并算法的算法效率和算法稳定性都是已知的排序算法中较好的,但是如果我们只是采用单线程的应用程序来运行它,那么算法性能还是不能全部发挥出来。文章还给了一张单线程运行归并排序算法时操作系统CPU的运行状态,如下图所示: 有的读者就询问,为什么单线程运行排序算法时,出现的效果是CP...
阅读(104) 评论(0)

线程基础:多任务处理——Fork/Join框架(解决排序问题)

3. 使用Fork/Join解决实际问题 之前文章讲解Fork/Join框架的基本使用时,所举的的例子是使用Fork/Join框架完成1-1000的整数累加。这个示例如果只是演示Fork/Join框架的使用,那还行,但这种例子和实际工作中所面对的问题还有一定差距。本篇文章我们使用Fork/Join框架解决一个实际问题,就是高效排序的问题。 3-1. 使用归并算法解决排序问题 排序...
阅读(54) 评论(0)

线程基础:多任务处理——Fork/Join框架(基本使用)

1. 概述 在进行系统存储专题的学习、总结、整理和写作的过程中感觉有点累了,加上最近在做书稿的第二次校稿工作,系统存储专题的学习和写作进度明显有些滞后,特别是编写的Ceph MON知识点。所以后续1、2个月的时间打算换一个学习整理方向,之后再继续恢复系统存储专题的写作。换一个什么方向呢?嗯~~之前的线程专栏还有一部分坑没有填上,就继续填这部分的坑吧。 java.util.concurr...
阅读(73) 评论(0)

Java四种线程池的使用

Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。 ...
阅读(60) 评论(0)

Observer 观察者模式

简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新。 一、观察者模式的结构       本模式的类图结构如下:      在观察者模式里有如下的角色: 抽象主题(Subject)角色:主题角色把所有的观察者对象的引用保存在一个列表里;每...
阅读(68) 评论(0)

Java中字符串定义,初始化,赋值为null的区别

1、概述: 字符串定义 只定义不分配内存空间,不做任何操作; 字符串初始化 两种方式直接等号赋值,用new初始化,直接等号赋值放入内存池,其它变量也可以引用;new初始化分配内存空间,不可引用; 字符串赋值为null 初始化了,并且有了引用,但是没有指向任何内存空间; 2、详解: String s;和String s=null;和String s="a";有什么区别? 第一...
阅读(1567) 评论(0)

Java线程运行周期方法和多线程模式概述

Java线程运行周期方法和多线程模式概述...
阅读(332) 评论(0)

Java常用数据结构总结

Java中有几种常用的数据结构,主要分为Collection和Map两个主要接口,而程序中最终使用的数据结构是继承自这些接口的数据结构类。其主要关系: 1、几个常用类的区别: 1.ArrayList: 元素单个,效率高,多用于查询  2.Vector: 元素单个,线程安全,多用于查询  3.LinkedList:元素单个,多用于插入和删除  4.HashMap...
阅读(867) 评论(0)

Java常用查找算法

本文总结Java常用查找算法顺序查找算法,线性查找算法,二分查找算法,分块查找算法和哈希查找算法。 1、顺序查找算法 /***  * 顺序查找算法按数组的顺序从前往后一直比较,直到找到目标值返回。  * 参考链接:http://developer.51cto.com/art/201406/443115.htm   * http://blog.csdn.net/qq284565035/ar...
阅读(199) 评论(0)

Java常用图形算法

本文介绍常用算法戴克斯特拉算法(Dijkstra’s algorithm),动态规划(Dynamic programming),朴素贝叶斯分类算法。 1、戴克斯特拉算法(Dijkstra’s algorithm) /***  * Dijkstra算法  * 算法步骤:  * 1、第一轮,可以计算出,2、3、4、5、6到原点1的距离分别为:[7, 9, -1, -1, 14]。-1...
阅读(449) 评论(0)

Java广度优先搜索与深度优先搜索

有两种常用的方法可用来搜索图:即深度优先搜索和广度优先搜索。它们最终都会到达所有连通的顶点。深度优先搜索通过栈来实现,而广度优先搜索通过队列来实现。   1.广度优先搜索: import java.util.Arrays; import java.util.Scanner; /***  * 深度优先遍历:顾名思义,就是一条路走到黑,走到最深的地方。当无路可走时,就返回上一步向其他...
阅读(179) 评论(0)

Java常用十类快速排序算法总结

1、概述: 选择排序(直接选择排序,堆排序) 交换排序(冒泡排序,快速排序) 插入排序(直接插入排序,折半插入排序,Shell排序) 归并排序 桶式排序 基数排序 其中冒泡,插入,归并,基数属于稳定排序。 2、选择排序 2.1直接选择排序 /***  * 选择排序实例代码,其核心思想:  * 直接选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)...
阅读(88) 评论(0)
    个人资料
    • 访问:18288次
    • 积分:1077
    • 等级:
    • 排名:千里之外
    • 原创:92篇
    • 转载:10篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论