自定义博客皮肤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)
  • 收藏
  • 关注

转载 管理到底是管人,还是管事?

如果说管理难,它真的很难;如果说管理简单,它又真的很简单。 什么叫管理?学过相关管理课程的人,都知道管理的定义是什么。管理就是机构内人与资源的结合,去实现目标、共同工作的过程。 但我不认为大家真正理解它。 1什么是最重要的 管理是一种决策。管理所要求的合格决策,就是让下属明白什么是最重要的。 管理中,有三个词是我坚决反对的。 第一个词,比如有人跟...

2018-08-01 22:24:31 3966

转载 Spring Boot干货系列:(二)配置文件解析

Spring Boot干货系列:(二)配置文件解析2017-02-28 嘟嘟MD 嘟爷java超神学堂 前言上一篇介绍了Spring Boot的入门,知道了Spring Boot使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。所以,我们要想把Spring Boot玩的溜,就要懂得如何开启各个功能模块的...

2018-07-30 15:15:32 340

转载 给你一份Spring Boot核心知识清单

转自:https://cloud.tencent.com/info/88a5aa7509b29778add29dc279a3734b.html预警:本文非常长,建议先 mark 后看,也许是最后一次写这么长的文章说明:前面有 4 个小节关于 Spring 的基础知识,分别是:IOC 容器、JavaConfig、事件监听、SpringFactoriesLoader 详解,它们占据了本文的大部分内容,...

2018-07-10 10:55:58 347

转载 史上最全的Maven Pom文件标签详解

转自:https://www.cnblogs.com/sharpest/p/7738444.html<span style="padding:0px; margin:0px"><project xmlns="http://maven.apache.org/POM/4.0.0"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-i...

2018-07-08 23:13:35 500

转载 maven(二) maven项目构建ssh工程(父工程与子模块的拆分与聚合)

转自:http://www.cnblogs.com/whgk/p/7121336.html前一节我们明白了maven是个什么玩意,这一节就来讲讲他的一个重要的应用场景,也就是通过maven将一个ssh项目分割为不同的几个部分独立开发,很重要,加油                              --WH 一、maven父工程与子模块的拆分与聚合原理      问题描述:将ssh工程拆分为...

2018-07-07 23:50:26 160

转载 maven(一) maven到底是个啥玩意

转自:https://www.cnblogs.com/whgk/p/7112560.html该篇文章篇幅很长,大概的思路如下          maven的介绍,初步认识,获取jar包的三个关键属性 --> 介绍仓库(获取的jar包从何而来)-->用命令行管理maven项目(创建maven项目) --> 用myeclipse创建maven项目 -->详细介绍pom.xml中...

2018-07-07 23:34:50 242

转载 Spark性能优化指南——高级篇

前言继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为《Spark性能优化指南》的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问题。数据倾斜调优调优概述有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的...

2018-07-04 20:47:14 181

原创 Spark性能优化指南——基础篇

前言在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操作,应用范围与前景非常广泛。在美团•大众点评,已经有很多同学在各种项目中尝试使用Spark。大多数同学(包括笔者在内),最初开始尝试使用Spark的原因很简单,主要就是为了让大数据计算作业的执行速度更快、...

2018-07-04 20:36:04 190

转载 Spark 以及 spark streaming 核心原理及实践

转自:https://www.cnblogs.com/liuliliuli2017/p/6809094.html导语spark 已经成为广告、报表以及推荐系统等大数据计算场景中首选系统,因效率高,易用以及通用性越来越得到大家的青睐,我自己最近半年在接触spark以及spark streaming之后,对spark技术的使用有一些自己的经验积累以及心得体会,在此分享给大家。本文依次从spark生态,...

2018-07-04 18:55:06 455

原创 windows10下spark2.3.0本地开发环境搭建-亲测

 1  windows10下spark2.3.0本地开发环境搭建win10上部署Hadoop非Cygwin、非虚拟机方式。安装目录为D:\setupedsoft。涉及相关组件版本:win10 家庭装,64位,x86处理器JDK1.8.0_171hadoop-2.7.6Spark-2.3.0Scala-2.11.8Maven-3.5.3ideaIC-2018.1.4.exespark-2.3.0-b...

2018-06-22 10:15:51 5856 4

转载 HMM模型和Viterbi算法

https://www.cnblogs.com/Denise-hzf/p/6612212.html一、隐含马尔可夫模型(Hidden Markov Model)1、简介  隐含马尔可夫模型并不是俄罗斯数学家马尔可夫发明的,而是美国数学家鲍姆提出的,隐含马尔可夫模型的训练方法(鲍姆-韦尔奇算法)也是以他名字命名的。隐含马尔可夫模型一直被认为是解决大多数自然语言处理问题最为快速、有效的方法。2、马尔可...

2018-06-08 17:46:36 259

转载 深入学习 Java 序列化

前言对于Java的序列化,一直只知道只需要实现Serializbale这个接口就可以了,具体内部实现一直不是很了解,正好这次在重复造RPC的轮子的时候涉及到序列化问题,就抽时间看了下 Java序列化的底层实现,这篇文章算是这次的学习小结吧。第一部分:WhatJava序列化是指把Java对象保存为二进制字节码的过程,Java反序列化是指把二进制码重新转换成Java对象的过程。那么为什么需要序列化呢?...

2018-04-30 13:54:47 166 1

转载 [Java集合] 彻底搞懂HashMap,HashTable,ConcurrentHashMap之关联

注: 今天看到的一篇讲hashMap,hashTable,concurrentHashMap很透彻的一篇文章, 感谢原作者的分享. 原文地址: http://blog.csdn.net/zhangerqing/article/details/8193118 Java集合类是个非常重要的知识点,HashMap、HashTable、ConcurrentHashMap等算是集合类中的重点,可谓“重中之重...

2018-04-29 23:20:50 191

转载 Java中的多线程

引如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。很多人都对其中的一些概念不够明确...

2018-04-29 22:02:57 92

转载 Java并发编程:volatile关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下...

2018-04-29 20:53:18 93

转载 Java性能优化之JVM GC(垃圾回收机制)

Java的性能优化,整理出一篇文章,供以后温故知新。JVM GC(垃圾回收机制)在学习Java GC 之前,我们需要记住一个单词:stop-the-world 。它会在任何一种GC算法中发生。stop-the-world 意味着JVM因为需要执行GC而停止了应用程序的执行。当stop-the-world 发生时,除GC所需的线程外,所有的线程都进入等待状态,直到GC任务完成。GC优化很多时候就是减...

2018-04-29 16:49:19 163

转载 搜索引擎选择: Elasticsearch与Solr

搜索引擎选型调研文档Elasticsearch简介*Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合。Elasticsearch是一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎,可以说Lucene是当今最先进,最高效的

2017-04-23 22:53:13 437

转载 多图技术贴:深入浅出解析大数据平台架构

目录:什么是大数据Hadoop介绍-HDFS、MR、Hbase大数据平台应用举例-腾讯公司的大数据平台架构“就像望远镜让我们能够感受宇宙,显微镜让我们能够观测微生物一样,大数据正在改变我们的生活以及理解世界的方式……”。大数据的4V特征-来源公司的“大数据”随着公司业务的增长,大量和流程、规则相关的非结构化数据也爆发式增长。比如:1、业务系统

2017-04-22 09:40:00 31829

转载 各种分类算法比较

各种分类算法比较最近在学习分类算法,顺便整理了各种分类算法的优缺点。1决策树(Decision Trees)的优缺点决策树的优点:一、           决策树易于理解和解释.人们在通过解释后都有能力去理解决策树所表达的意义。二、           对于决策树,数据的准备往往是简单或者是不必要的.其他的技术往往要求先把数据一般化,比如去掉多余

2017-04-09 23:22:28 1318

转载 从决策树学习谈到贝叶斯分类算法、EM、HMM

从决策树学习谈到贝叶斯分类算法、EM、HMM引言    最近在面试中,除了基础 &  算法 & 项目之外,经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法(当然,这完全不代表你将来的面试中会遇到此类问题,只是因为我的简历上写了句:熟悉常见的聚类 & 分类算法而已),而我向来恨对一个东西只知其皮毛而不得深入,故写一个有关数据挖掘十大算法的系列文章以作为自己备试之用,甚

2017-04-09 23:21:06 491

转载 语义分析的一些方法(三)

3 图片语义分析3.1 图片分类图片分类是一个最基本的图片语义分析方法。基于深度学习的图片分类传统的图片分类如下图所示,首先需要先手工提取图片特征,譬如SIFT, GIST,再经由VQ coding和Spatial pooling,最后送入传统的分类模型(例如SVM等)。图23. 传统图片分类流程图传统方法里,人工特征提取是一个巨大的消耗性工作。

2017-04-09 00:23:47 802

转载 语义分析的一些方法(二)

2 文本语义分析前面讲到一些文本基本处理方法。一个文本串,对其进行分词和重要性打分后(当然还有更多的文本处理任务),就可以开始更高层的语义分析任务。2.1 Topic Model首先介绍主题模型。说到主题模型,第一时间会想到pLSA,NMF,LDA。关于这几个目前业界最常用的主题模型,已经有相当多的介绍了,譬如文献[60,64]。在这里,主要想聊一下主题模型的应用以及最新进

2017-04-09 00:20:30 560

转载 使用SimHash进行海量文本去重

阅读目录1. SimHash与传统hash函数的区别2. SimHash算法思想3. SimHash流程实现4. SimHash签名距离计算5. SimHash存储和索引6. SimHash存储和索引7. 参考内容  在之前的两篇博文分别介绍了常用的hash方法([Data Structure & Algorithm] Hash那点事儿)以及局部敏感

2017-04-09 00:16:36 1372

转载 语义分析的一些方法(一)

语义分析,本文指运用各种机器学习方法,挖掘与学习文本、图片等的深层次概念。wikipedia上的解释:In machine learning, semantic analysis of a corpus is the task of building structures that approximate concepts from a large set of documents(or imag

2017-04-08 23:42:00 1046

转载 机器学习评价指标大汇总

机器学习评价指标大汇总出处:http://www.zhaokv.com/2016/03/ml-metric.html 在使用机器学习算法的过程中,针对不同场景需要不同的评价指标,在这里对常用的指标进行一个简单的汇总。一、分类1. 精确率与召回率精确率与召回率多用于二分类问题。精确率(Precision)指的是模型判为正的所有样本中有多少是真正的正样本;召回率(Recal

2017-04-08 16:57:42 426

转载 [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型

阅读目录1. 词向量2.Distributed representation词向量表示3.词向量模型4.word2vec算法思想5.doc2vec算法思想6.参考内容  深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展。深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实

2017-04-08 11:44:19 1225

转载 解惑 spring 嵌套事务 【转】

/**   * @author 王政   * @date 2006-11-24   * @note 转载请注明出处   */    在所有使用 spring 的应用中, 声明式事务管理可能是使用率最高的功能了, 但是, 从我观察到的情况看, 绝大多数人并不能深刻理解事务声明中不同事务传播属性配置的的含义, 让我们来看一下 TransactionDefinition 接口

2014-08-31 10:12:06 481

转载 ICTClAS

ICTClAS分词系统是由中科院计算所的张华平、刘群所开发的一套获得广泛好评的分词系统,难能可贵的是该版的Free版开放了源代码,为我们很多初学者提供了宝贵的学习材料。      但有一点不完美的是,该源代码没有配套的文档,阅读起来可能有一定的障碍,尤其是对C/C++不熟的人来说.本人就一直用Java/VB作为主要的开发语言,C/C++上大学时倒是学过,不过工作之后一直没有再使用过,语法什

2014-06-16 19:51:47 811

转载 ICTCLAS解析

ICTCLAS解析ICTCLAS分词系统是由中科院计算所的张华平、刘群所开发的一套获得广泛好评的分词系统,该版的Free版开放了源代码,为初学者提供了宝贵的学习材料。我们可以在“http://sewm.pku.edu.cn/QA/”找到FreeICTCLASLinux.tar的C++代码。可是目前该版本的ICTCLAS并没有提供完善的文档,所以阅读起来有一定的难度,所幸网上可以找到一些

2014-06-16 18:49:46 1207

转载 java嵌套类(Nested Classes)总结

java嵌套类(Nested Classes)总结Nested Classes定义在java语言规范里面,嵌套类(Nested Classes)定义是:A nested class is any class whose declaration occurs within the body of another class or interface. A top level

2014-04-12 22:24:45 386

转载 .Net平台AOP技术研究

第四部分  .Net平台AOP技术研究4.1.Net平台AOP技术概览.Net平台与Java平台相比,由于它至今在服务端仍不具备与unix系统的兼容性,也不具备类似于Java平台下J2EE这样的企业级容器,使 得.Net平台在大型的企业级应用上,常常为人所诟病。就目前而言,.Net平台并没有提供AOP技术的直接实现,而微软在未来对于.Net的发展战略目 标,我们仍未可知。但我相信微软对于目

2014-04-12 12:16:07 977

转载 Java平台AOP技术研究

第三部分  Java平台AOP技术研究3.1 Java平台AOP技术概览3.1.1 AOP技术在Java平台中的应用AOP在实验室应用和商业应用上,Java平台始终走在前面。从最初也是目前最成熟的AOP工具——AspectJ,到目前已经融和在企业级容器JBoss中的JBoss AOP,均建立在Java平台上。前面已经描述到,AOP的目的就是将核心关注点和横切关注点分

2014-04-12 12:14:34 625

转载 Java接口设计模式

Java接口设计模式java设计模式编程语言工具oopjava不允许多重继承,也就是说一个子类只能有一个父类,Son extends FatherA,FatherB 是错误的为了弥补这点不足,java允许实现多个接口, 接口就是给出一些没有内容的方法,类似于C++中的虚类。到具体用的时候再由用的方法自己定义内容,要注意的是想用接口必须实现接口的所有方法。其实是因为java不支持多继

2014-03-30 17:26:52 2589

转载 Java开发中的23种设计模式详解

设计模式(Design Patterns)——可复用面向对象软件的基础设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中

2014-03-30 11:57:36 857

转载 Spring mvc+hibernate+freemarker(开源项目)

今天我为大家做了一个spring3 MVC 的例子,希望能对刚接触spring的朋友有所帮助。该流程属于大型项目的流程,涉及的知识比较希望大家耐心学习。企业级项目实战(带源码升级版本)地址:http://zz563143188.iteye.com/blog/1845469收集五年的开发资料及源码下载地址:http://pan.baidu.com/share/link?share

2014-03-30 11:48:38 12516 1

windows10下spark2.3.0本地开发环境搭建-亲测

windows10下spark2.3.0本地开发环境搭建 win10上部署Hadoop非Cygwin、非虚拟机方式。安装目录为D:\setupedsoft。涉及相关组件版本: win10 家庭装,64位,x86处理器 JDK1.8.0_171 hadoop-2.7.6 Spark-2.3.0 Scala-2.11.8 Maven-3.5.3 ideaIC-2018.1.4.exe spark-2.3.0-bin-hadoop2.7 对应博文:https://blog.csdn.net/hambition/article/details/80769771 由于博文上传图片比较麻烦,图片又非常之多,没分的同学可直接看博文。

2018-06-22

ice源码(Ice-3.4.1.tar.gz)

ice源码(Ice-3.4.1.tar.gz),源码,包括java,c++,perl,直接下载解压即可查看源码内容。可分析实现细节。绝对真实。

2018-04-30

spring security 3 登录 退出 认证 最少配置

项目应用到spring3,security3,hibernate4,struts2;应用中涉及到安全认证,目前项目有独立的统一认证网关,所以登录时只需要将安全认证网关的认证后信息塞到spring security中,由security3来管理用户的权限设置。目前项目由spring security2升级到spring security3。实现的demo下载导入myeclipse即可运行。。。。登录,退出,自动登录均测试通过。。。。是基于最基本的过滤认证,若要比较全部的security3认证,则不适合本demo....

2014-01-12

fusionCharts dragnode demo

fusionCharts V3.3 破解版本 dragnode.swf 可拖动 自动生成树形拓扑结构节点,根据生成的节点计算展现位置 package com; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.logging.Logger; public class FusionChartsUtil { protected static Logger logger = Logger.getLogger(FusionChartsUtil.class.getName()); public static Integer PAGE_HEIGHT = 1000; public static Integer PAGE_WIDTH = 600; public static Integer ITEM_HEIGHT = 30; public static Integer ITEM_WIDTH = 90; public static String COLOR_GREEN = "4EC745"; //基本色,默认颜色 public static String COLOR_RED = "FF0000"; public static String COLOR_GOLD = "FFD700"; public static String COLOR_PURPLE= "800080"; public static String COLOR_BLUE = "0000FF"; public static void main(String arg[]) { Map paraMap = new HashMap(); paraMap.put("currentRecordId", ""); String xml = com.FusionChartsUtil.makeXml(2,2,paraMap); } /** * 获取背景颜色 * @param log * @param currentRecordId * @return */ public static String getItemBgColor(OperationLog log,String currentRecordId){ String color = FusionChartsUtil.COLOR_GREEN; if(currentRecordId!=null && currentRecordId.equals(log.getRecordId())){ color = FusionChartsUtil.COLOR_RED; } if("id301".equals(log.getRecordId())){ color = FusionChartsUtil.COLOR_GOLD; } if("id431".equals(log.getRecordId())){ color = FusionChartsUtil.COLOR_PURPLE; } if("id200".equals(log.getRecordId())){ color = FusionChartsUtil.COLOR_BLUE; } // if("id452".equals(log.getRecordId())){ // color = "B0C4DE"; // } return color; } /** * 计算结节的X,Y值 * @param totalLevel 总共的层数 * @param currLevel 当前的层数 * @param list 当前层的所有节点 * @return */ public static List<ChartTreeItem> calculateItemXY( int totalLevel, int currLevel, List<OperationLog> list, TreeMap<Integer,List<OperationLog>> treemap, Map map){ String currentRecordId = (String)map.get("currentRecordId"); List<ChartTreeItem> listitem = new ArrayList<ChartTreeItem>(); if(list==null || list.size()<1) return listitem; int x = 0; int y = 0; int currSize = list.size(); if(totalLevel==1){ //如果只有一层 y = PAGE_HEIGHT/2; x = PAGE_WIDTH/2; OperationLog log = list.get(0); ChartTreeItem item = new ChartTreeItem(log); item.setColor(getItemBgColor(log,currentRecordId)); //设置节点背景颜色 item.setX(x); item.setY(y); listitem.add(item); }else{ boolean isNeedLadder = false; //每层高度为等差数列,每层高度eachHeight为d,层数为n,总高度为total: (1+n)*n/2 * d = total ==> d = total*2/(1+n)*n ==>PAGE_HEIGHT *2 / ((totalLevel-1)*totalLevel); //PAGE_HEIGHT/(totalLevel*2+2); int eachHeight = PAGE_HEIGHT/(totalLevel+1); int eachWidth = PAGE_WIDTH/(currSize+1); int heightCount = eachHeight/ITEM_HEIGHT; //每个高度区间能显示多少个节点 logger.info("eachHeight="+eachHeight+",eachWidth="+eachWidth+",heightCount="+heightCount); if(eachWidth <= ITEM_WIDTH){ //每节点的计算宽度小于设置的宽度,则需要梯度显示 isNeedLadder = true; } int calculatLevvel = currLevel -1; for(int i=0;i<currSize;i++){ OperationLog log = list.get(i); ChartTreeItem item = new ChartTreeItem(log); item.setColor(getItemBgColor(log,currentRecordId)); //设置节点背景颜色 item.setTo(getParentId(log.getPreviousRecordId(),treemap)); x = eachWidth *(i+1); if(isNeedLadder){ //每层的高度为:(1+n)*n/2 *d // y = eachHeight * (1+calculatLevvel)*calculatLevvel/2 + ITEM_HEIGHT*(i%heightCount); y = eachHeight * ( currLevel-1) + ITEM_HEIGHT*(i%heightCount) + ITEM_HEIGHT*3; }else{ y = eachHeight * ( currLevel-1) + ITEM_HEIGHT; //y = eachHeight * (1+calculatLevvel)*calculatLevvel/2; } if(y<ITEM_HEIGHT){ y = ITEM_HEIGHT; } item.setX(x); // item.setY(y); item.setY(PAGE_HEIGHT - y); listitem.add(item); } } return listitem; } /** * 计算树的位置,以便于展现 * @return */ public static List<ChartTreeItem> calculateTree(int totalLevel,int eachLevelCount,Map paraMap){ List<ChartTreeItem> listitem = new ArrayList<ChartTreeItem>(); TreeMap<Integer,List<OperationLog>> treemap = makeTree(totalLevel,eachLevelCount); Iterator it = treemap.keySet().iterator(); while(it.hasNext()){ Integer level = Integer.valueOf(it.next().toString()); List<OperationLog> list = treemap.get(level); if(list!=null){ listitem.addAll(calculateItemXY(treemap.size(),level,list,treemap,paraMap)); } } return listitem; } /** * 将获取到的数据链表整理成树状map * @return */ public static TreeMap<Integer,List<OperationLog>> makeTree(int totalLevel,int eachLevelCount){ TreeMap<Integer,List<OperationLog>> map = new TreeMap<Integer,List<OperationLog>>(); List<OperationLog> list = generatTestData(totalLevel,eachLevelCount); for(OperationLog log : list){ String parentId = log.getPreviousRecordId(); //无父节点 if(parentId==null || "".equals(parentId) || "null".equals(parentId)){ List<OperationLog> levelList = map.get(1); if(levelList==null){ levelList = new ArrayList<OperationLog>(); } levelList.add(log); map.put(1, levelList); }else{//有父节点 Integer parentLevel = getParentLevel(parentId,map); Integer level = parentLevel +1;//父级再加一级 List<OperationLog> levelList = map.get(level); if(levelList==null){ levelList = new ArrayList<OperationLog>(); } levelList.add(log); map.put(level, levelList); } } logger.info(map.toString()); return map; } /** * 生成测试数据 * @return */ public static List<OperationLog> generatTestData(int level,int eachLevelCount){ List<OperationLog> ret = new ArrayList<OperationLog>(); TreeMap<Integer,List<OperationLog>> genMap = new TreeMap<Integer,List<OperationLog>>(); String id = "id1"; OperationLog log1 = new OperationLog(); log1.setId(id); log1.setTargetNum("13011112222"); log1.setRecordId(id); log1.setOpDescription(id); List<OperationLog> list = new ArrayList<OperationLog>(); list.add(log1); genMap.put(1, list); // int level = 3; // int eachLevelCount = 2; for(int i = 2; i<=level; i++){ List<OperationLog> levelList = genMap.get(i-1); //上一层的所有节点 for(int j=0;j<levelList.size();j++){ for(int k=0;k<eachLevelCount;k++){ OperationLog parent = levelList.get(j); OperationLog log = new OperationLog(); String thisId = "id"+i+String.valueOf(j)+String.valueOf(k); log.setId(thisId); log.setTargetNum("18922269"+i+String.valueOf(j)+String.valueOf(k)); log.setRecordId(thisId); log.setPreviousRecordId(parent.getRecordId()); log.setOpDescription(thisId); List<OperationLog> list2 = genMap.get(i); //本层的所有节点 if(list2==null || list2.size()<1){ list2 = new ArrayList<OperationLog>(); } list2.add(log); genMap.put(i, list2); } } } System.out.println("genMap.size = "+genMap.size()); Iterator it = genMap.keySet().iterator(); while(it.hasNext()){ String key = it.next().toString(); System.out.println("level = "+key); List<OperationLog> list2 = genMap.get(Integer.valueOf(key)); //本层的所有节点 if(list2!=null){ for(OperationLog log : list2){ ret.add(log); System.out.println(">>level = "+key+",log: "+log.toString()); } } } System.out.println("logs: "+ret.toString()); return ret; } public static String makeXml(int totalLevel,int eachLevelCount,Map paraMap){ String pageHeight = (String)paraMap.get("pageHeight"); String pageWidth = (String)paraMap.get("pageWidth"); FusionChartsUtil.PAGE_HEIGHT = Integer.valueOf(pageHeight); FusionChartsUtil.PAGE_WIDTH = Integer.valueOf(pageWidth); List<ChartTreeItem> list = calculateTree(totalLevel,eachLevelCount,paraMap); String xml = ""; xml = "<chart"; xml += " bgcolor=\"FFFFFF\""; xml += " baseFontSize=\"12\""; xml += " charttopmargin=\"0\""; xml += " chartleftmargin=\"0\""; xml += " chartrightmargin=\"0\""; xml += " bordercolor=\"FFFFFF\""; xml += " canvasbordercolor=\"DFBAAD\""; xml += " xAxisMinValue=\"0\""; xml += " xAxisMaxValue=\""+FusionChartsUtil.PAGE_WIDTH+"\""; xml += " yAxisMinValue=\"0\""; xml += " yAxisMaxValue=\""+FusionChartsUtil.PAGE_HEIGHT+"\""; xml += " bubbleScale=\"3\""; xml += " is3D=\"1\""; xml += " numDivLines=\"0\""; xml += " showFormBtn=\"0\""; xml += " viewMode=\"1\""; xml += " restoreBtnTitle=\"重新加载\""; xml += " showrestorebtn=\"1\""; xml += " toolTipBorderColor =\""+COLOR_RED+"\""; xml += " toolTipBgColor=\"F0FFF0\""; xml += "> "; xml += "<dataset plotborderAlpha=\"0\">"; for(ChartTreeItem item : list){ xml += item.toSetString(); } // xml += "<set"; // xml += " x=\"43\""; // xml += " y=\"43\""; // xml += " width=\"90\""; // xml += " height=\"40\""; // xml += " name=\"13500001111\""; // xml += " color=\"4EC745\""; // xml += " link=\"n-http://www.fusioncharts.com\""; // xml += " id=\"AM1\""; // xml += " />"; // // xml += "<set"; // xml += " x=\"43\""; // xml += " y=\"93\""; // xml += " width=\"90\""; // xml += " height=\"30\""; // xml += " name=\"13300002222\""; // xml += " color=\"4EC745\""; // xml += " link=\"n-http://www.fusioncharts.com\""; // xml += " id=\"AM2\""; // xml += " />"; xml += " </dataset>"; xml += "<connectors color=\"83C6E1\" stdThickness=\"8\">"; for(ChartTreeItem item : list){ xml += item.toConnectorString(); } //xml += "<connector strength=\"0.45\" from=\"AM1\" to=\"AM2\" arrowAtStart=\"0\" arrowAtEnd=\"0\"/>"; xml += "</connectors>"; // xml += "<styles>"; // xml += " <definition>"; // xml += " <style name=\"dataLabelFontStyle\" type=\"font\" size=\"15\" color=\"FFFFFF\" bold=\"1\"/>"; // xml += " </definition>"; // xml += " <application>"; // xml += " <apply toObject=\"DATALABELS\" styles=\"dataLabelFontStyle\"/>"; // xml += " </application>"; // xml += " </styles>"; xml += "</chart>"; logger.info(xml); return xml; } /** * 通过parentId获取父节点的级别,若未找到,则返回0 * @param parentId * @param map * @return */ public static Integer getParentLevel(String parentId,TreeMap<Integer,List<OperationLog>> map) { logger.info("parentId="+parentId); Integer level = 0; Iterator it = map.keySet().iterator(); while(it.hasNext()){ String key = it.next().toString(); List<OperationLog> list2 = map.get(Integer.valueOf(key)); //本层的所有节点 if(list2!=null){ for(OperationLog log : list2){ if(parentId.equals(log.getRecordId())){ level = Integer.valueOf(key); logger.info(">>level = "+key+",log: "+log.toString()); return level; } } } } return level; } /** * 通过parentId获取父节点的级别,若未找到,则返回0 * @param parentId * @param map * @return */ public static String getParentId(String parentRecordId,TreeMap<Integer,List<OperationLog>> map) { logger.info("parentRecordId="+parentRecordId); if(parentRecordId==null) return ""; String parentId = ""; Iterator it = map.keySet().iterator(); while(it.hasNext()){ String key = it.next().toString(); List<OperationLog> list2 = map.get(Integer.valueOf(key)); //本层的所有节点 if(list2!=null){ for(OperationLog log : list2){ if(parentRecordId.equals(log.getRecordId())){ logger.info(">>level = "+key+",log: "+log.toString()); parentId = log.getId(); return parentId; } } } } return parentId; } }

2013-12-29

Ext2+核心+API+中文详解

Ext2+核心+API+中文详解 值得拥有

2011-12-30

Oracle体系结构概述

Oracle体系结构概述,包括结构图. 物理结构 逻辑结构 内存结构 数据库实例与进程 数据字典

2011-08-20

ORACLE数据库体系结构讲解

介绍ORACLE数据库管理系统的基本轮廓和程序模块结构、实例概念和组织、进程结构和功能、内存结构和用途,数据字典结构和使用、进程配置和管理、运行模式、程序接口、事务管理。

2011-08-20

空空如也

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

TA关注的人

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