文章是新一代的技术博客,你不仅可以看到开发分享高质量的内容,而且能够在线浏览源码和查看运行效果。

Graphviz安装及使用

1 基础知识 graphviz是贝尔实验室开发的一个开源的工具包,它使用一个特定的DSL(领域特定语言): dot 作为脚本语言,然后使用布局引擎来解析此脚本,并完成自动布局。graphviz提供丰富的导出格式,如常用的图片格式,SVG,PDF格式等。 graphviz中包含了众多的布局器: dot 默认布局方式,主要用于有向图 neato 基于spring model(又称force based)算法 twopi 径向布局 circo 圆环布局 fdp 用于无向图 graphviz的设计初衷是对有向图/无向图等进行自动布局,开发人员使用dot脚本定义图形元素,然后选择算法进行布局,最终导出结...

Dockerfile详解以及Flask项目Dockerfile示例

1 Dockerfile介绍 Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。Docker程序将读取Dockerfile,根据指令生成定制的image。相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是怎么产生的。有了Dockerfile,当我们需要定制自己额外的需求时,...

Java线程的生命周期

1 Java线程的生命周期 1.1 new 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable)。 注意:不能对已经启动的线程再次调用start()方法,否则会出现java.lang.IllegalThreadStateException异常。 1.2 runnable 处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列(尽管是采用队列形式,事实上,把它称为可运行池而不是可运行队列。因为cpu的调度不一定是按照先进先出的顺序来调度的),等待系统为其...

MySql索引创建、效率测试

最近做文本相似度计算项目过程中,发现系统瓶颈在于读取、查询数据库,为了提升数据库读写性能,给数据库增加了索引,在此记录。 1 数据库索引 如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢。 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。 例如对于一个存储了200万条...

进程、线程、多线程概述

线程概述 几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程。 当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。 Thread和Process 几乎所有的操作系统都有进程的概念,所有运行中的任务通常对应一条进程。当一个程序进入内存运行,就是一个进程了。 进程是处于运行中的程序,具有一定的独立能力,进程是系统进行资源分配和调度的一个独立单位。 进程特征: 独立性:进程是系统中独立存在的实体,可以拥有自己独立的资源,每个进程都拥有自己的私有地址地址。 在没有经过进程本身允许的情况下,一个用户进程不可以访问其他进程地址空间。...

Java线程同步与锁

线程同步的目的是为了保护多个线程反问一个资源时对资源的破坏,线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无法再访问该对象的其他同步方法。 1 锁的原理 Java中每个对象都有一个内置锁,当程序运行到非静态的synchronized同步方法上时,自动获得与正在执行代码类的当前实例(this实例)有关的锁。获得一个对象的锁也称为获取锁、锁定对象、在对象上锁定或在对象上同步。当程序运行到synchronized同步方法或代码块时才该对象锁才起作用。 一个对象只有一个锁。所以,如果一个线程获得该锁,就没有其他线程可以获得...

Oz 创建Centos 7镜像

Oz 创建Centos 7镜像 Oz简介 做openstack的centos 镜像的步骤,比较繁琐,最近在查比较好用的工具,查到官方提到的Oz,它的功能还是很强大的,它可以自动的安装操作系统,并且可以定制自己的操作系统,还可以生成操作系统的元数据,包括Centos,Ubuntu,Windows等等,它提供了三条很有用的命令,分别是oz install,oz customize,oz generate icicle,详细介绍可以查看它在github上的代码仓库: Oz 。 Oz安装 首先,导入epel源,执行如下命令: rpm ivh http://mirrors.sohu.com/fedora...

log4j使用总结

实际项目开发过程中,日志是一个重要且必须的内容,通过日志我们可以监测代码部署之后的运行状况,包括查看出错原因、收集我们想要的信息等等。 使用Log4J,程序员可以控制日志信息输送的目的地,包括控制台,文件,GUI组件和NT事件记录器,也可以控制每一条日志的输出格式,或通过定义每一条日志信息的级别,更加细致地控制日志的生成过程。 1 Log4j的组成 Log4j由三个重要的组成构成:日志记录器(Loggers),输出端(Appenders)和日志格式化器(Layout)。 Logger:控制要启用或禁用哪些日志记录语句,并对日志信息进行级别限制 Appenders指定了日志将打印到控制台还是文件...

xml文件格式以及采用dom4j解析、编辑、生成xml文件

1 xml介绍 XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被预定义。您需要自行定义标签。 XML 被设计为具有自我描述性。 XML 是 W3C 的推荐标准 可扩展标记语言 (XML) 于 1998 年 2 月 10 日成为 W3C 的推荐标准 1.1 xml与html的差异 XML 不是 HTML 的替代。 XML 和 HTML 为不同的目的而设计: XML 被设计为传输和存储数据,其焦点是数据的内容。 HTML 被设计用来显示数据,其焦点是数据的外观。...

id3算法的实现、模型的持久化以及使用模型进行预测

这里主要介绍三个部分 id3算法的实现,包括决策树的实现、算法的实现,输出为自己定义的决策树模型,这里是用了arff格式的文件 决策树的持久化,在大型数据集中,决策树模型过大,训练完需要持久化到磁盘上,供下次使用,这里采用了xml进行持久化 决策树的使用,重新使用xml文件中的决策树模型来对测试数据进行测试 机器学习相关代码欢迎关注 https://github.com/xixy/MachineLearningAlgorithm 1 训练 本次训练按照arff格式文件进行编码,训练集如下所示 @relation weather.symbolic...

Stanford机器学习课程

前一段时间把Andrew Ng的机器学习课程跟完了,也做了比较详细的整理,包括知识点的归纳、公式的推导、代码实现,准备做一个博客系列来进行记录(实际上就是把印象笔记里面的内容复制过来。。。) 我对这门课程整理的思维导图如下所示,基本上会按照下面的图来展开后续的博客系列,本篇博客主要是提供链接功能。 ...

Java线程及锁机制

1 Thread类 Thread类实现了Runnable接口,start方法根据Thread对象中的数据生成一个新的控制线程,然后返回。现在虚拟机调用新线程中的run方法,从而激活这个线程。 我们只能为每个线程调用一次start方法,否则再次调用会爆出IllegalThreadStateException异常。 当线程的run方法返回,线程就已经退出了。 Thread.run的标准实现并未做任何事情,要想让线程执行某些工作,就必须 扩展Thread类以提供一个新的run方法,或者 创建一个Runnable对象并把它传递给线程的构造器 我们首先讨论如何通过扩展Thread类来创建新的线程类型 /...

反射技术用于工厂模式

1 反射技术 反射技术大量用于Java设计模式和框架技术,最常见的设计模式就是工厂模式(Factory)和单例模式(Singleton)。 用接口来沟通不同程序的开发进度,不必等上游程序写好代码之后,再注入后面流程的程序员。且在实现上, 可以用配置文件灵活变更,而不用重编译整个项目 。 interface InterfaceTest {...

Java反射技术

1 概念 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 2 功能 反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类; 在运行时构造任意一个类的对象; 在运行时判断任意一个类所具有的成员变量和方法; 在运行时调用任意一个对象的方法; 生成动态代理。 3 相关API 3.1 通过对象获取完成的包名和类名 public class TestReflect {...

序列化与反序列化

1 序列化与反序列化 1.1 概念 序列化和反序列化,我们可能经常会听到,其实通俗一点的解释,序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用。当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。 把对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为对象的过程称为对象的反序列化。 1.2 用途 对象的序列化主要有两种用途 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中...

JUnit4测试用例执行顺序设置

1 介绍 在写JUnit测试用例时,有时候需要按照定义顺序执行我们的单元测试方法,比如如在测试数据库相关的用例时候要按照测试插入、查询、删除的顺序测试。如果不按照这个顺序测试可能会出现问题,比如删除方法在前面执行,后面的方法就都不能通过测试,因为数据已经被清空了。而JUnit测试时默认的顺序是随机的。所以这时就需要有办法要求JUnit在执行测试方法时按照我们指定的顺序来执行。 JUnit是通过 @FixMethodOrder 注解(annotation)来控制测试方法的执行顺序的。 @FixMethodOrder 注解的参数是 org.junit.runners.MethodSorters 对...

如何编写你的坦克

坦克游戏简介 访问 https://tank.tianmaying.com ,进入天码营的坦克对战游戏平台。 左侧可以编写你的坦克代码,右侧则是对战面板;编写好代码后,点击开始就能调试你的坦克,在右侧面板看坦克的行为。 同时你可以点击坦克库,从坦克库中选择一个或者多个坦克进行对战。 面板上有多个坦克的情况下,点击开始即能进行对战。对战开始时,可以进行暂停/继续和停止等操作。 编写坦克的基本思路 坦克初始有5条命,如果坦克被子弹击中5次,坦克就挂掉啦 坦克的外形和名字可以进行配置,这会让你的坦克更个性化,但是不会影响战斗能力 坦克以某个方向前进,以该方向为轴,轴的左侧和右侧90度(即一共180度...

天码营坦克游戏API

Events Events Description onStart() Game begins onBulletHit(enemyName, enemyPosition) Enemy hit onHitByBullet(enemyName, enemyPosition) Hit by enemy onHitWall() Hit wall onEnemySpotted(enemyPosition) Enemy spotted Attributes Attributes Description name Name of your tank shape Image url of your tank...

elasticsearch Java API的使用以及坑的注意

1 创建client Settings settings = Settings.builder().put("cluster.name", "UBA").put("client.transport.sniff", true) .build();TransportClient client = new PreBuiltTransportClient(settings)...

机器学习性能评估指标

1 分类 1.1 混淆矩阵 Positive Negative Positive True Positive False Positive Negative False Negative True Negative True Positive:将正类预测为正类数 True Negative:将负类预测为负类数 False Positive:将负类预测为正类数,也就是误报 False Negative:将正类预测为负类数 这里的Positive/Negative表示预测得到的类型,而True/False表示该次预测是否正确 1.2 精确率、准确率、召回率 精确率precision 是针对预测结果...

FP-Growth算法

算法采用FPTree的紧凑数据结构组织数据,并直接从该结构中提取频繁项集,而不是Apriori算法的产生 测试范型。 1 FP树生成 树中每个节点都包括一个项的标记和一个计数,计数显示映射到给定路径的transaction个数。初始,FP树仅包含一个root节点,用NULL表示;随后,用如下方法扩充FP树 扫描一次数据集,确定每个项的支持度计数,丢弃非频繁项,而将频繁项按照支持度的递减排序; 算法第二次扫描数据集,构建FP树,读入第一个事物{a,b}之后,创建标记为a和b的节点,形成null—>a—>b的路径,对该事物进行编码,该路径上所有节点的频度计数为1; 读入第二个事物{b,...

Java中的final关键字在变量.方法.类的使用特点

Java中的final关键字非常重要,含义存在着细微的区别,通常指“这是无法改变的”,不想改变可能出于两种理由:设计和效率。注意是可能,下面说一下我学习使用到final的三种情况:final变量.final方法和fianl类。 1. final变量 //先举例2个例子:private static final String TIANMAYING_HE = "haha";//变量是基本数据类型的,...

如何将默认Eclipse项目转为Maven项目

将已有的Eclipse项目转化为Maven项目 我们之前在Eclipse IDE完成的Java命令行项目、Java Web项目也使用了构建工具—— Ant ,它帮助我们编译、运行Java源代码(无需我们自己调用 javac , java 等命令来进行重复、繁琐的构建任务)。以Java项目为例,它的目录结构一般是这样的: ....

访问控制技术

1 概述 由于电子商务、电子政务以及网络的普及,信息安全变得越来越重要。访问控制技术的理论与方法的研究一直是信息安全课题中的关键技术之一。一般而言信息安全探讨的课题包括了:入侵检测(Intmsion Detection)、加密(Encryption)、认证(Aumentication)、访问控制(Access control)以及审核(Auditing)等等。 所谓的访问控制(Access Control),即为判断使用者是否有权限使用、或更改某一项资源,并防止非授权的使用者滥用资源。在众多的安全技术和服务中,访问控制作为确保系统安全的一个重要手段,被国际标准化组织定义为安全体系设计标准的五大...

反馈意见