技术前沿网

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
博客专区 - 技术前沿网社区

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

Python NLP入门教程

本文简要介绍Python自然语言处理(NLP),使用Python的NLTK库。NLTK是Python的自然语言处理工具包,在NLP领域中,最常使用的一个Python库。 ## 什么是NLP? 简单来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序或服务。 这里讨论一些自然语言处理(NLP)的实际应用例子,如语音识别、语音翻译、理解完整的句子、理解匹配词的同义词,以及生成语法正确完整句子和段落。 这并不是NLP能做的所有事情。 ## NLP实现 **搜索引擎**: 比如谷歌,Yahoo等。谷歌搜索引擎知道你是一个技术人员,所以它显示与技术相关的结果; **社交网站推送**:比如Facebook News Feed。如果News Feed算法知道你的兴趣是自然语言处理,就会显示相关的广告和帖子。 **语音引擎**:比如Apple的Siri。 **垃圾邮件过滤**:如谷歌垃圾邮件过滤器。和普通垃圾邮件过滤不同,它通过了解邮件内容里面的的深层意义,来判断是不是垃圾邮件。 ## NLP库 下面是一些开源的自然语言处理库(NLP): * Natural language toolkit (NLTK); * Apache OpenNLP; * Stanford NLP suite; * Gate NLP library 其中自然语言工具包(NLTK)是最受欢迎的自然语言处理库(NLP),它是用Python编写的,而且背后有非常强大的社区支持...
j_hao104 发布于 2小时前 阅读 46 评论 1

Java9 Module解惑

Java 9 特性以及解决的问题 Java 9 模块化的一个最大的变化体现在Java结构上。 本文将介绍关于“Java 9模块系统的”高级特性。 Java 9 模块化 我们将探讨关于Java 9模块化系统的以下主题: 1.介绍 2.JavaSe9之Jigsaw Project 3.当前Java系统的问题 4.Java9模块系统的特性 5.Jdk9和Jdk8的对比 6.Java9模块化是什么? 7.Java9模块化系统之母 8.Java9和Java8程序的对比。 介绍 Oracle 将Java 9从2017年3月延期到2017年9月进行发行。 我们知道, Java SE 8提供了三大新特性(加上少量改进和新特性)。 Lambda 表达式 Stream API Date API 同样地, Java SE 9提供了三大新特性(加上少量改进和新特性): Java模块系统(Jigsaw项目) Java REPL(交互式编程) Milling project coin(主要是语法改进的一个项目,Java7的时候就已经开始) 接下来,我们将谈论关于Oracle的Jigsaw项目。 Java SE 9 :Jigsaw项目 接下来我们将对Jigsaw项目--> Java SE 9: Java模块系统中的一些新特性,做一个简单的介绍。 JavaSE9中的Jigsaw项目来源与Oracle项目中一个非常出名的大项目。其实在Java7的版本开始就已经启动。 但是由于变动巨大被延期到JavaSE8,最终是随着17年9月份发布的JavaSE9一起发布。 Jigs...
路上有你0314 发布于 1天前 阅读 45

C++ 开发 PHP 7 扩展之模块入口定义

`zendAPI` 项目不提供任何底层的功能,只是封装了 `zend engine` 提供的功能,对上提供一个易用的编程接口。这篇文章中,我们将介绍 `C++` 世界与 `C` 世界交汇的地方,在这里也是 `zendAPI` 的接口与 `zend engine` 进行整合的地方,非常重要。 每一个 `PHP` 扩展必须有一个描述对象,在 `zendAPI` 中我们 `zapi::lang::Extension` 类主要的作用主要完成这个功能。现在我们来看一个最简单的 `zendAPI` 项目的入口文件长什么样子: ```cpp #include "zapi/ZendApi.h" extern "C" { ZAPI_DECL_EXPORT void *get_module() { static zapi::lang::Extension hellozapi("hellozapi", "1.0"); return hellozapi; } } ``` 怎么样很简单吧,一个空的 `PHP` 扩展就完成了,现在我们就详细解释下每行的作用。 ```cpp #include "zapi/ZendApi.h" ``` 在开发基于 `zendAPI` 的项目时候,我们只需要包含这个头文件就可以了,在这个头文件中,我们会引入 `zendAPI` 日常开发需要的必要的头文件,您不用自己一个一个自己去引入。 ```cpp extern "C" {} ``` 在 `CPP` 代码与 `C` 代码进行连接的时候我们一般会加上 `extern wrapper`, 因为如果不加的话 `CPP` 编译器会对函数名称进行 `n...
zendapi 发布于 2天前 阅读 272 点赞 4

原来你是这样的TreeMap之红黑树

上篇描述了HashMap的数据结构原来你是这样的HashMap 本篇就TreeMap的实现进行详述 相比较HashMap其多了SortedMap(NavigableMap 类似ceil floor返回最接近的元素)接口实现 顾名思义就是支持了排序   说到排序可能大家就能想到一堆排序算法:堆排序 二分法 冒泡排序 插入排序 快排等等 那么TreeMap采用了红黑树来作为排序(传统的平衡二叉树指的是高度上的平衡一般称之为AVL树,即任意节点的左子树和右子数的高度相差不超过1,红黑树的是平衡指的是黑高度【BH】的的平衡,即任意节点到叶子节点的简单路径中黑色节点数目均相同) 几个常见的构造函数如下 /** * Constructs a new, empty tree map, using the natural ordering of its * keys. All keys inserted into the map must implement the {@link * Comparable} interface. Furthermore, all such keys must be * <em>mutually comparable</em>: {@code k1.compareTo(k2)} must not throw * a {@code ClassCastException} for any keys {@code k1} and * {@code k2} in the map. If the user attempts to put a key into the * map that violates this constraint (for example, the user attempts to * ...
Mr_Qi 发布于 2天前 阅读 375 点赞 2

Java9新特性——module模块系统

官方文档:https://docs.oracle.com/javase/9/index.html 关于 java9的新特性,官方原文:https://docs.oracle.com/javase/9/whatsnew/toc.htm 这玩意就是一个列表,具体的技术细节需要根据官方文档挖一挖。 modular-模块系统 --- java9的模块化,从一个独立的开源项目而来,名为Jigsaw。 项目官网:http://openjdk.java.net/projects/jigsaw/ ### 为什么要使用模块化 java开发者都知道,使用java开发应用程序都会遇到一个问题,Jar hell,他就像windows里的dll hell。 比如我们启动一个不算大的应用,但依赖了很多的jar,如下图: ![输入图片说明](https://static.oschina.net/uploads/img/201709/26094041_w0RP.png "在这里输入图片标题") 摘自:Mark Reinhold的演讲 https://www.youtube.com/watch?v=l1s7R85GF1A 这是很常见的。虽然你可以使用 "java -Djava.ext.dirs=lib xxx" 让命令行小一些,但不可否认,他的classpath就是那么长。顺便说一句,java9中不允许使用extdirs了。 另一方面,jdk本身有很多的api: ![输入图片说明](https://static.oschina.net/uploads/img/201709/26094131_JZAh.png "在这里输入图片标题") 对于一些小设备,它太庞大了。 ### helloworld...
polly 发布于 3天前 阅读 4872 评论 33 点赞 22 打赏 1

常见但不多用的模式--工厂方法模式

工厂方法模式
xpbob 发布于 4天前 阅读 214

Java9之Jshell入门

jshell 在学习JSHELL之前确保,已经安装过jdk9,可以参阅Java9安装。 为什么要学Jshell 学习Jshell需要知道他的特性, Read-Eval-Print-Loop (REPL) 交互式解释器(REPL)既可以作为一个独立的程序运行, 也可以很容易地包含在其他程序中作为整体程序的一部分使用。 REPL为运行Java脚本与查看运行结果提供了一种交互方式, 通常REPL交互方式可以用于调试、测试以及试验某种想法。 开始使用 切换jdk环境 检查环境 切换到Jshell环境 Hello World 命令 输入-help 进行查看,会展示出Jshell所支持的命令 /history,查看在Jshell输入的的所有指令(不管正确与否) /list,列出所有你输入过的Java源代码(非命令相关) 也可以根据id进行查询 上图列出了我历史操作的一些与Jshell交互的Java代码命令。 根据ID查看Java命令并执行。 /exit ,退出Jshell命令行 /edit,根据id修改曾经输入过的Java代码,一般配合/list进行使用 利用List命令查找你要修改代码的Id。 输入你要更改代码的Id,回车确认。 回车后出来如下页面。 将Java代码修改为你想要的结果,点击Accept进行保存和执行,出现如下图所示结果。默认不会自动退出,需要手动exit。 重新查看list,发现多出一个修改过的历史。 /drop 删...
路上有你0314 发布于 4天前 阅读 720 评论 4 点赞 4

[实战演练]python3使用requests模块爬取页面内容

  本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取响应状态码 5.案例演示 后记   1.安装pip 我的个人桌面系统用的linuxmint,系统默认没有安装pip,考虑到后面安装requests模块使用pip,所以我这里第一步先安装pip。 $ sudo apt install python-pip 安装成功,查看PIP版本: $ pip -V   2.安装requests模块 这里我是通过pip方式进行安装: $ pip install requests 安装requests 运行import requests,如果没提示错误,那说明已经安装成功了! 检验是否安装成功   3.安装beautifulsoup4 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找、修改文档的方式。Beautiful Soup会帮你节省数小时甚至数天的工作时间。 $ sudo apt-get install python3-bs4 注:这里我使用的是python3的安装方式,如果你用的是python2,可以使用下面命令安装。 $ sudo pip install beautifulsoup4   4.requests模块浅析 1)发送请求 首先当然是要导入 Requests 模块: >>> import requests 然后,获取目标抓取网...
GavinHsueh 发布于 4天前 阅读 231 评论 1 点赞 1
珲少

Swift4语法新特性

总结Swift4中带来的一些新的语法特性。
珲少 发布于 5天前 阅读 209 评论 1 点赞 1

数据库分库分表中间件 Sharding-JDBC 源码分析 —— 分布式主键

![](https://www.iocoder.cn/images/common/wechat_mp_2017_07_31.jpg) > 关注**微信公众号:【芋道源码】**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 > 5. **认真的**源码交流微信群。 ------- **本文主要基于 Sharding-JDBC 1.5.0 正式版** - [1. 概述](#) - [2.KeyGenerator](#) - [2.1 DefaultKeyGenerator](#) - [2.2 HostNameKeyGenerator](#) - [2.3 IPKeyGenerator](#) - [2.4 IPSectionKeyGenerator](#) - [666. 彩蛋](#) ------- # 1. 概述 本文分享 Sharding-JDBC **分布式主键**实现。 官方文档[《分布式主键》](http://dangdangdotcom.github.io/sharding-jdbc/02-guide/key-generator/)对其介绍及使用方式介绍很完整,强烈先阅读。下面先引用下分布式主键的**实现动机**: > 传统数据库软件开发中,主键自动生成技术是基本需求。而各大数据库对于该需求也提供了相应的...
芋艿V 发布于 5天前 阅读 265 点赞 1

JDK8之Stream

Stream 使用详解
12叔 发布于 6天前 阅读 145 点赞 1

JDK容器学习之HashMap (一) : 底层存储结构分析

hashmap源码学习笔记,分析解读HashMap底层的数据存储结构
小灰灰Blog 发布于 7天前 阅读 418 点赞 1

golang如何执行脚本并获取返回值

## golang中如何执行脚本并获取返回值 ### 调用脚本 在golang标准库中提供了两种方式可以用来启动进程调用脚本 第一种是在os库中的Process类型,Process类型包含一系列方法用来启动进程并对进程进行操作(参考: https://golang.org/pkg/os/#Process) 第二种是在os/exec库种通过Cmd类型的各个函数实现对脚本的调用,实际上Cmd是对Process中各种方法的高层次封装(参考: https://golang.org/pkg/os/exec/) 示例 使用Process执行脚本 ``` package main import ( "fmt" "os" ) func main() { shellPath := "/home/xx/test.sh" argv := make([]string, 1) attr := new(os.ProcAttr) newProcess, err := os.StartProcess(shellPath, argv, attr) //运行脚本 if err != nil { fmt.Println(err) } fmt.Println("Process PID", newProcess.Pid) processState, err := newProcess.Wait() //等待命令执行完 if err != nil { fmt.Println(err) } fmt.Println("processState PID:", processState.Pid())//获取PID fmt.Println("ProcessExit:", processState.Exited())//获取进程是否退出 } ``` 使用Cmd执行脚本 ``` package main import ( "fmt" "os/exec" ) func main() { shellPat...
RichardFan 发布于 7天前 阅读 98 评论 3
Andy_Zhou

elasticsearch 分片(Shards)的理解

elasticsearch 中分片(Shards)非常非常重要,直接和性能挂钩。以下仅为个人实际使用 elasticsearch 4年的理解,可能存在误解,一切以官方文档为准。
Andy_Zhou 发布于 7天前 阅读 143

Java平台,标准版Oracle JDK 9中的新功能

Java平台,标准版 Oracle JDK 9中的新增功能 版本9 E77563-05 2017年9月   JDK 9中的新功能概述 Java Platform,Standard Edition 9是一个主要的功能版本。以下总结了Java SE 9和JDK 9的特点和增强功能,Oracle 对于 Java SE 9的实现。 JDK增强提案(JEP)是对JDK设计和实施非常重要更改的提案。参阅JEP 1:JDK增强提案和路线图流程。Java规范请求(JSR)描述了Java平台的建议和最终规范。请参阅JSR概述。   JDK 9中的重要变化 这些变化影响了多个技术领域。 特征 描述 Java平台模块系统 推出了一种新的Java编程组件--模块,是一个指定的,自描述代码和数据的集合。 模块系统: 引入一个新可选阶段,link time,它在编译和运行时之间,在此期间,可以将一组模块组合并且优化到一个自定义的运行时映像中;在 Java Platform, Standard Edition Tools Reference 中查看 jlink 工具。 添加选项到工具javac,jlink和java,可以指定模块路径在哪里,哪一个定义模块的定位。 引入模块化JAR文件,它是一个在根目录下包含module-info.class的JAR文件。 推出JMOD格式,它是一种类似于JAR的打包格式,除了它可以包含原生代码和配置文件外; 参见jmod工具。 JDK本身已经被分为一组模...
GuoMengYue 发布于 7天前 阅读 5985 评论 25 点赞 14

zendAPI 的 CMake 参数详解

zendAPI 是采用 CMake 进行编译的,我们在项目中定义了一些 CMake 的函数,变量和选项,下面我们在这篇文章中对这些进行详细的说明,有助于节省大家的时间。 ### CMake 内置重要变量 ### CMAKE_INSTALL_PREFIX 类型:字符串 默认值:`/usr/local` 描述:编译完成之后,软件包安装的路径 ### CMAKE_BUILD_TYPE 类型:字符串 默认值:空字符串 描述:控制软件编译的类型,可能的取值: 1. Debug 调试模式,开发的时候指定 2. Release 发布模式,发布软件包的时候指定 3. RelWithDebInfo 4. MinSizeRel ### BUILD_SHARED_LIBS 类型:布尔型 默认值:无 描述:指定为 `ON` 的时候,项目中的库默认编译成动态链接库,除非特定的库重新指定了这个选项。 ### CMAKE_CXX_FLAGS 类型:字符串 默认值:无 描述:这个变量的值将会传递给 `C++` 编译器, 比如 `-std=c++11` 等等参数。 ### 自定义选项 (option) #### ZAPI_OPT_ENABLE_TESTS 类型:布尔型 默认值:`OFF` 描述:控制 `zendAPI` 是否编译单元测试,如果值为 `ON` 则开启,`OFF` 则关闭。 #### ZAPI_OPT_ENABLE_VERBOSE_DEBUG 类型:布尔型 默认值:`OFF` 描述:控制 `zendAPI` 是否输出一些调试信息,这个选项只在 `Debug` ...
zendapi 发布于 1周前 阅读 89

LinkedList的实现原理浅析

本文简单分析一下JDK1.7的LinkedList源码,看一下其内部的结构以及典型方法的实现~ LinkedList内部结构 查看LinkedList的源码,发现其继承自AbstractSequentialList,实现了List,Deque,Cloneable以及Serializable接口,如: public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable { } 也就意味着: LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 LinkedList 实现 List 接口,能对它进行列表操作。 LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。 LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。 LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。   public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable { transient int size = 0; /** * Pointer to first node. * Invariant: (first == null && last == null) || ...
王孟君 发布于 2周前 阅读 1973 评论 7 点赞 5

System.out.println() 深入解读

这篇博客是为了解释System.out.println是什么以及它的工作原理。 什么是System.out.println() System.out.println是一个Java语句,一般情况下是将传递的参数,打印到控制台。 System - 是 java.lang包中的一个final类。根据javadoc,“  java.lang.System该类提供的设施包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量; 一种加载文件和库的方法; 以及用于快速复制数组等一部分的实用方法... “ out - 是System类的静态成员字段,类型为PrintStream。 public static final PrintStream out 他在启动时就会被实例化,并与主机的标准输出控制台进行映射。该流在实例化之后立即打开,并准备接受数据。 println - 是PrintStream类的一个方法。println打印(参数内容+换行符) 到控制台。PrintStream类中有多个重载的println方法。每个println是通过调用print方法并添加一个换行符实现的。print方法是通过调用write方法实现的 System.out.println() 结构图 以下是JDK源中System.out.println的骨架结构,和代码片段。 UML图 部分代码段: public final class System { static PrintStream out; static PrintStream err; static InputSt...
为了美好的明天 发布于 2周前 阅读 292 评论 1 点赞 2

python re正则表达式模拟淘宝搜索商品信息

本文介绍一个利用Python re库利用正则表达来实现搜索淘宝商品信息的实例。本文不再阐述re库以及正则表达式。不怎么了解的同学可以先去查查资料哦。(本文代码与思路参照中国慕课课程)
宝茜滴老公 发布于 3周前 阅读 724 评论 2 点赞 1

Java 高级特性: Lambda 表达式

Lambda 表达式是 java 8 的新特性,本文讲解了 lambda 表达式的所有知识。内容涉及到 lambda 表达式是什么, lambda 表达式用在何处,在 GUI 应用程序中使用 lambda 表达式,lambda 表达式语法,变量访问权限,目标类型,序列化,方法引用等。
关小真 发布于 3周前 阅读 1370 评论 16 打赏 1

Python NLP入门教程

本文简要介绍Python自然语言处理(NLP),使用Python的NLTK库。NLTK是Python的自然语言处理工具包,在NLP领域中,最常使用的一个Python库。 ## 什么是NLP? 简单来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序或服务。 这里讨论一些自然语言处理(NLP)的实际应用例子,如语音识别、语音翻译、理解完整的句子、理解匹配词的同义词,以及生成语法正确完整句子和段落。 这并不是NLP能做的所有事情。 ## NLP实现 **搜索引擎**: 比如谷歌,Yahoo等。谷歌搜索引擎知道你是一个技术人员,所以它显示与技术相关的结果; **社交网站推送**:比如Facebook News Feed。如果News Feed算法知道你的兴趣是自然语言处理,就会显示相关的广告和帖子。 **语音引擎**:比如Apple的Siri。 **垃圾邮件过滤**:如谷歌垃圾邮件过滤器。和普通垃圾邮件过滤不同,它通过了解邮件内容里面的的深层意义,来判断是不是垃圾邮件。 ## NLP库 下面是一些开源的自然语言处理库(NLP): * Natural language toolkit (NLTK); * Apache OpenNLP; * Stanford NLP suite; * Gate NLP library 其中自然语言工具包(NLTK)是最受欢迎的自然语言处理库(NLP),它是用Python编写的,而且背后有非常强大的社区支持...
j_hao104 发布于 2小时前 阅读 46 评论 1

MyBatis使用总结

iBatis从3.x开始更名为MyBatis。除了Java以外,还有可用于.Net的Mybatis.Net 相关依赖包(maven) <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.7</version> </dependency> 映射相关文件自动生成(mybatis-generator) iBatis提供了Abator用于生成映射相关文件。Mybatis可以用mybatis generator实现类似功能。 生成配置文件 mybatis默认使用的路径和文件名(无需配置):src/main/resources/generatorConfig.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <!-- classPathEntry:数据库的JDBC驱动--> <classPathEntry location="target\assist\WEB-INF\lib\mysql-connector-java-5.1.32.jar"/> <context id="DB2Tables" targetRuntime="MyBatis3"> ...
无语年华 发布于 3个月前 阅读 34 点赞 1

Git版本回退

### 本地版本库回退 1. 运行`git log`或者`git reflog`命令查看回退版本号 2. 运行`git reset`命令进行版本回退 注意,版本号一般选取前几位,只要能唯一标志一个版本就可以。如果是回滚到上一个版本,可以简单使用以下命令: ``` git reset --hard HEAD^ ``` 其中,`HEAD`表示最新的版本库,而加上`^`就表示上一个版本库; ### 远程版本库回退 1. 先进行本地版本库回退 2. 运行`git push -f`强制推送到远程库 ### 参考资料 1\. [ 廖雪峰网站:版本回退 ](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000) 2\. [ 远程仓库版本回退方法 ](http://blog.csdn.net/fuchaosz/article/details/52170105)
wqli 发布于 14小时前 阅读 12

《Kotlin项目实战开发》 第3章 类型系统与可空类型

  第3章 类型系统与可空类型 跟Java、C和C ++ 一样, Kotlin也是“静态类型编程语言”。 通常,编程语言中的类型系统中定义了 1.      如何将数值和表达式归为不同的类型 2.     如何操作这些类型 3.     这些类型之间如何互相作用 我们在编程语言中使用类型的目的是为了让编译器能够确定类型所关联的对象需要分配多少空间。 在每一个编程语言中,都有一个特定的类型系统。静态类型在编译时期时,就能可靠地发现类型错误。因此通常能增进最终程序的可靠性。 类型系统在各种语言之间有非常大的不同,主要的差异存在于编译时期的语法,以及运行时期的操作实现方式。 本章我们简单介绍一下Kotlin的类型系统。 3.1 类型系统 我们知道在计算机中中,信息都是以01比特存储的,硬件无法区分存储器地址、脚本、字符、整数、以及浮点数。为了赋予01比特意义,于是有了类型。 3.1.1 类型系统的作用 使用类型系统,编译器可以检查无意义的、无效的、类型不匹配等错误代码。这也正是强类型语言能够提供更多的代码安全性保障的原因之一。 另外,静态类型检查还可以提供有用的信息给编译器。跟动态类型语言相比,由于有了类型的显式声明,静态类型的语言更加易读好懂...
东海陈光剑 发布于 14小时前 阅读 8

常见算法基础题思路简析(四)-二分搜索篇

本文对和 **二分搜素** 有关的常见算法基础题思路分类进行分析和总结,并以 Java 为例,适当指出需要注意的编程细节
brianway 发布于 15小时前 阅读 4

常见算法基础题思路简析(五)-队列和栈篇

本文对和 **队列和栈** 有关的常见算法基础题思路分类进行分析和总结,并以 Java 为例,适当指出需要注意的编程细节
brianway 发布于 15小时前 阅读 3

Go代码调优利器-火焰图

Go代码调优
云迹 发布于 3小时前 阅读 3

浅谈两个相互引用的对象是否会被GC回收

两个相互引用的对象会被GC垃圾回收吗?答案应该是不会!只要对象、属性等存在被引用,GC都会过滤掉的,不会被回收。笔者就简单谈一谈其中的原理吧。 判断对象是否存活,可以考虑以下方法。 1、引用计数算法 给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1。 当引用失效时,计数器值就减1。 任何时刻计数器为0的对象就是不可能再被使用的。 但是主流的java虚拟机没有采用引用计数算法,其中最主要的原因就是它很难解决对象之间互相循环引用的问题。 例子: 对象A和B互相引用,但除此之外,这两个对象再无任何引用,但是他们因为互相引用着对方,所以导致他们的引用计数都不为0,于是引用计数算法无法通知GC收集器回收他们。 (代码示例解释什么是循环引用) class  A {     public B bb; } class  B {     public A aa; } public class TestGC {     public static  void main(String[] args) {     A a = new A();     B b = new B();     a.bb = b;     b.aa = a;     a = null;     b = null;     } } 在上面的代码示例中,假设我们有两个类分别是A和B,A类中有一个字段是B类的类型,B类中有一个字段是A类类型,现...
小欣妹妹 发布于 2小时前 阅读 3

Python虚拟环境

### 简介 VirtualEnv用于在一台机器上创建多个虚拟且独立的python运行环境. VirtualEnvWrapper为前者提供了一些便利的命令行上的封装。 - 优点: 隔离项目之间的第三方包依赖, 在没有权限的情况下安装pip包,为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可 ### 安装 ``` $ pip install virtualenv $ pip install virtualenvwrapper $ vim ~/.bashrc export WORKON_HOME=~/.virtualenvs source /usr/bin/virtualenvwrapper.sh $ source ~/.bashrc ``` ### 常用命令 - 创建虚拟环境 `mkvirtualenv [--python=/usr/local/bin/python2.7] [your_env]` **环境的目录是$WORKON_HOME/your_env, 创建完成提示符变为:(env), 该环境下安装的依赖不会影响到其他的环境. 使用--python可指定特定的python版本 - 切换到python虚拟环境 `workon [env]` - 在虚拟环境下使用可切换系统的python环境 `deactivate` - 设置虚拟机环境的工作目录,下次使用`workon env`可自动cd到对应的project目录下 `setvirtualenvproject [virtuanlenv_path project_path] ` - 对当前已创建虚拟环境更改为可迁移,以便打包ENV `virtualenv --relocatable your_env_dir_path`...
阿Kay 发布于 3个月前 阅读 9

Mybatis JPA-集成方案+代码解析

源码地址(git):https://github.com/LittleNewbie/mybatis-jpa 一、Mybatis简介 mybatis中文官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 简介是为后面用到的内容做铺垫,熟悉mybatis的朋友可以直接跳过,到第二章节。 关于mybatis-jpa的代码构建方式,请参见博文:https://my.oschina.net/LittleNewbie/blog/895198 1.1 SqlSession Mybatis中3个重要的概念:Configuration(容器),SqlSessionFactory(工厂),SqlSession; 相对于Spring中的applicationContext,BeanFactory,Bean。 不同之处在于SqlSession包含了所有的SQL方法,即这个SqlSession有且只有一个。SqlSession可以执行mybatis中注册的所有方法。官方示例说明: <!-- SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如:--> SqlSession session = sqlSessionFactory.openSession(); try { Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101); } finally { session.close(); } <!-- 映射器实例(Mapper Instances)--> SqlSession session = sqlSessionFactory.openSessio...
LittleNewbie 发布于 2个月前 阅读 28

pyCharm中python对象的自动提示问题

python和Java不同,是一门动态语言:在创建对象的时候,我们并不需要声明对象的类型。 这在简化书写方面带来了极大的便利,但是对于IDE来说,智能地辨别这些类型,并给出相应的代码提示就十分困难。 比如爬虫的代码: IDE通常无法有效地识别类型,然后给出相应的提示。 实际上pycharm提供了称为Type Hint的方法,来给IDE进行类型提示,以更便捷地获取代码提示。参考网站:https://www.jetbrains.com/help/pycharm/type-hinting-in-pycharm.html 下面是几种获取代码提示的方法: 1、自己写的方法中添加类型提示 在定义方法的时候,可以为参数设置类型,如果设置了类型,就可以在接下来的代码里获取相应的提示,比如: 这样就可以顺利地获取提示。 同样如果方法有返回值的话,可以为方法的返回设置类型,这样在使用方法获取对象时,就可以在接下来的代码里获取相应的提示,比如: 这样也可以顺利地获取提示。 2、使用注解注释本地变量 如果遇到使用第三方包的情况,而且提供包的人并没有给完整的type hint,再去重写他们的方法显然不现实,这时可以通过在对象后添加注解来提示IDE,以获取提示。比如: 格式为: # type: 对应的类型 3、使用 Python stub files来储存类型提示...
兴趣使然的程序员 发布于 3个月前 阅读 85

JAVA基础--数据格式

LIST //创建 import java.util.ArrayList; import java.util.List; List<String> list = new ArrayList<String>(); //添加 list.add("test1"); list.add("test2"); list.add("test3");  
Asktao 发布于 3小时前 阅读 2

wordpress绑定多个域名js跨域问题解决办法

一个网站是可以使用多个域名的。wordpress的网站绑定了多个域名后,除了主域名外,其它域名访问都会有js跨域的错误。怎么解决js跨域的错误呢,这就需要wordpress支持绑定多个域名了。 在网站根目录找到wp-config.php 文件,在文件里找代码require_once(ABSPATH . 'wp-settings.php'); 在其上面添加以下代码(一定要在这段代码的上面,不然无法读取CSS样式、图片等等。): $home = ‘http://’.$_SERVER[‘HTTP_HOST’]; $siteurl = ‘http://’.$_SERVER[‘HTTP_HOST’]; define(‘WP_HOME’, $home); define(‘WP_SITEURL’, $siteurl); 我们知道,PHP 中的 $_SERVER[‘HTTP_HOST’] 用于获得来路域名。这样,就能根据来路为 WP_HOME 和 WP_SITEURL 变量赋值,实现 WordPress 多域名绑定。
超龍 发布于 3周前 阅读 7

数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 解析(六)之删除SQL

![](https://www.iocoder.cn/images/common/wechat_mp_2017_07_31.jpg) > 关注**微信公众号:【芋道源码】**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 > 5. **认真的**源码交流微信群。 ------- **本文主要基于 Sharding-JDBC 1.5.0 正式版** - [1. 概述](#) - [2. DeleteStatement](#) - [3. #parse()](#) - [3.1 #skipBetweenDeleteAndTable()](#) - [3.2 #parseSingleTable()](#) - [3.3 #parseWhere()](#) - [666. 彩蛋](#) ------- # 1. 概述 本文前置阅读: * [《SQL 解析(一)之词法解析》](http://www.iocoder.cn/Sharding-JDBC/sql-parse-1/?self) * [《SQL 解析(二)之SQL解析》](http://www.iocoder.cn/Sharding-JDBC/sql-parse-2/?self) 本文分享**删除SQL解析**的源码实现。 如果你已经理解[《SQL 解析(三)之查询SQL》](http://www.iocoder.cn/Sharding-JDBC...
芋艿V 发布于 5天前 阅读 9

NodeJS excel转json(xls-to-json的简单使用)

``` { "name": "abc", "version": "0.0.0", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "xls-to-json": "*" } } ``` ``` var node_xj = require("xls-to-json"); node_xj({ input: "经纬度.xlsx", // input xls output: "output.json" // output json //sheet: "sheet1", // specific sheetname }, function (err, result) { if (err) { console.error(err); } else { console.log(result); } }); ```
WolfX 发布于 2个月前 阅读 4

【解决方案】Spring注解 IDEA编译时有红线,提示could not autowire

    如题,如图,IDEA编辑时有红线提示,虽然能正常运行,可是看着就是不爽,于是有了解决办法: 如下图,只需要在上面添加一个注解忽略掉提示即可。 @SuppressWarnings("SpringJavaAutowiringInspection")   最后,给同学们推荐一款自家的机械键盘,程序员就是要对自己好一点~ https://shop552086228.taobao.com/?spm=2013.1.1000126.d21.4b556901oQzH7Z    
Ahoi762 发布于 2周前 阅读 11

常见算法基础题思路简析(一)-排序篇

本文对和 **排序** 有关的常见算法基础题思路进行分析和总结,并以 Java 为例,适当指出需要注意的编程细节
brianway 发布于 16小时前 阅读 2

常见算法基础题思路简析(二)-链表篇

本文对和 **链表** 有关的常见算法基础题思路分类进行分析和总结,并以 Java 为例,适当指出需要注意的编程细节
brianway 发布于 16小时前 阅读 2

常见算法基础题思路简析(三)-二叉树篇

本文对和 **二叉树** 有关的常见算法基础题思路分类进行分析和总结,并以 Java 为例,适当指出需要注意的编程细节
brianway 发布于 16小时前 阅读 2

phpstorm 的.idea 目录加入.gitignore无效的解决方法

phpstorm 的.idea 目录加入.gitignore无效的解决方法
蜗牛奔跑 发布于 3个月前 阅读 33

Java平台,标准版Oracle JDK 9中的新功能

Java平台,标准版 Oracle JDK 9中的新增功能 版本9 E77563-05 2017年9月   JDK 9中的新功能概述 Java Platform,Standard Edition 9是一个主要的功能版本。以下总结了Java SE 9和JDK 9的特点和增强功能,Oracle 对于 Java SE 9的实现。 JDK增强提案(JEP)是对JDK设计和实施非常重要更改的提案。参阅JEP 1:JDK增强提案和路线图流程。Java规范请求(JSR)描述了Java平台的建议和最终规范。请参阅JSR概述。   JDK 9中的重要变化 这些变化影响了多个技术领域。 特征 描述 Java平台模块系统 推出了一种新的Java编程组件--模块,是一个指定的,自描述代码和数据的集合。 模块系统: 引入一个新可选阶段,link time,它在编译和运行时之间,在此期间,可以将一组模块组合并且优化到一个自定义的运行时映像中;在 Java Platform, Standard Edition Tools Reference 中查看 jlink 工具。 添加选项到工具javac,jlink和java,可以指定模块路径在哪里,哪一个定义模块的定位。 引入模块化JAR文件,它是一个在根目录下包含module-info.class的JAR文件。 推出JMOD格式,它是一种类似于JAR的打包格式,除了它可以包含原生代码和配置文件外; 参见jmod工具。 JDK本身已经被分为一组模...
GuoMengYue 发布于 7天前 阅读 5985 评论 25 点赞 14

Java9新特性——module模块系统

官方文档:https://docs.oracle.com/javase/9/index.html 关于 java9的新特性,官方原文:https://docs.oracle.com/javase/9/whatsnew/toc.htm 这玩意就是一个列表,具体的技术细节需要根据官方文档挖一挖。 modular-模块系统 --- java9的模块化,从一个独立的开源项目而来,名为Jigsaw。 项目官网:http://openjdk.java.net/projects/jigsaw/ ### 为什么要使用模块化 java开发者都知道,使用java开发应用程序都会遇到一个问题,Jar hell,他就像windows里的dll hell。 比如我们启动一个不算大的应用,但依赖了很多的jar,如下图: ![输入图片说明](https://static.oschina.net/uploads/img/201709/26094041_w0RP.png "在这里输入图片标题") 摘自:Mark Reinhold的演讲 https://www.youtube.com/watch?v=l1s7R85GF1A 这是很常见的。虽然你可以使用 "java -Djava.ext.dirs=lib xxx" 让命令行小一些,但不可否认,他的classpath就是那么长。顺便说一句,java9中不允许使用extdirs了。 另一方面,jdk本身有很多的api: ![输入图片说明](https://static.oschina.net/uploads/img/201709/26094131_JZAh.png "在这里输入图片标题") 对于一些小设备,它太庞大了。 ### helloworld...
polly 发布于 3天前 阅读 4872 评论 33 点赞 22 打赏 1

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

Java9之Jshell入门

jshell 在学习JSHELL之前确保,已经安装过jdk9,可以参阅Java9安装。 为什么要学Jshell 学习Jshell需要知道他的特性, Read-Eval-Print-Loop (REPL) 交互式解释器(REPL)既可以作为一个独立的程序运行, 也可以很容易地包含在其他程序中作为整体程序的一部分使用。 REPL为运行Java脚本与查看运行结果提供了一种交互方式, 通常REPL交互方式可以用于调试、测试以及试验某种想法。 开始使用 切换jdk环境 检查环境 切换到Jshell环境 Hello World 命令 输入-help 进行查看,会展示出Jshell所支持的命令 /history,查看在Jshell输入的的所有指令(不管正确与否) /list,列出所有你输入过的Java源代码(非命令相关) 也可以根据id进行查询 上图列出了我历史操作的一些与Jshell交互的Java代码命令。 根据ID查看Java命令并执行。 /exit ,退出Jshell命令行 /edit,根据id修改曾经输入过的Java代码,一般配合/list进行使用 利用List命令查找你要修改代码的Id。 输入你要更改代码的Id,回车确认。 回车后出来如下页面。 将Java代码修改为你想要的结果,点击Accept进行保存和执行,出现如下图所示结果。默认不会自动退出,需要手动exit。 重新查看list,发现多出一个修改过的历史。 /drop 删...
路上有你0314 发布于 4天前 阅读 720 评论 4 点赞 4

数据库分库分表中间件 Sharding-JDBC 源码分析 —— 分布式主键

![](https://www.iocoder.cn/images/common/wechat_mp_2017_07_31.jpg) > 关注**微信公众号:【芋道源码】**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 > 5. **认真的**源码交流微信群。 ------- **本文主要基于 Sharding-JDBC 1.5.0 正式版** - [1. 概述](#) - [2.KeyGenerator](#) - [2.1 DefaultKeyGenerator](#) - [2.2 HostNameKeyGenerator](#) - [2.3 IPKeyGenerator](#) - [2.4 IPSectionKeyGenerator](#) - [666. 彩蛋](#) ------- # 1. 概述 本文分享 Sharding-JDBC **分布式主键**实现。 官方文档[《分布式主键》](http://dangdangdotcom.github.io/sharding-jdbc/02-guide/key-generator/)对其介绍及使用方式介绍很完整,强烈先阅读。下面先引用下分布式主键的**实现动机**: > 传统数据库软件开发中,主键自动生成技术是基本需求。而各大数据库对于该需求也提供了相应的...
芋艿V 发布于 5天前 阅读 265 点赞 1
珲少

Swift4语法新特性

总结Swift4中带来的一些新的语法特性。
珲少 发布于 5天前 阅读 209 评论 1 点赞 1

常见但不多用的模式--工厂方法模式

工厂方法模式
xpbob 发布于 4天前 阅读 214

JDK容器学习之HashMap (一) : 底层存储结构分析

hashmap源码学习笔记,分析解读HashMap底层的数据存储结构
小灰灰Blog 发布于 7天前 阅读 418 点赞 1

JDK8之Stream

Stream 使用详解
12叔 发布于 6天前 阅读 145 点赞 1

浅析Java中接口的定义与作用

要明确Java中接口的作用首先要知道接口的定义: Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 接口的两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。 在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。 接口继承和实现继承的规则不同,一个类只有一个直接父类,但可以实现多个接口。 Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。 Java接口的方法只能是抽象的和公开的,Java接口不能有构造器,Java接口可以有public,静态的和final属性。 接口把方法的特征和方法的实现分...
小欣妹妹 发布于 3天前 阅读 106

LinkedList的实现原理浅析

本文简单分析一下JDK1.7的LinkedList源码,看一下其内部的结构以及典型方法的实现~ LinkedList内部结构 查看LinkedList的源码,发现其继承自AbstractSequentialList,实现了List,Deque,Cloneable以及Serializable接口,如: public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable { } 也就意味着: LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 LinkedList 实现 List 接口,能对它进行列表操作。 LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。 LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。 LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。   public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable { transient int size = 0; /** * Pointer to first node. * Invariant: (first == null && last == null) || ...
王孟君 发布于 2周前 阅读 1973 评论 7 点赞 5

服务器扫描发现漏洞-可通过HTTP获取远端WWW服务信息

可通过HTTP获取远端WWW服务信息 [Microsoft-IIS/7.5] 漏洞描述 本插件检测远端HTTP Server信息。这可能使得攻击者了解远程系统类型以便进行下一步的攻击。 解决方案 NSFOCUS建议您采取以下措施以降低威胁     处理方法: 1.实现IHttpModule接口 将Response Headers 相应信息移除 2.在web.config的<httpProtocol>的 <customHeaders>子节点中添加    <remove name="X-Powered-By"/>节点     public  class HeaderFilterHttpModule: IHttpModule     {         public void Init(HttpApplication context)         {             context.PreSendRequestHeaders += OnPreSendRequestHeaders;         }         public void Dispose()         { }         void OnPreSendRequestHeaders(object sender, System.EventArgs e)         {             //过滤掉 Response Headers 的banner ,以隐藏服务器和平台信息             HttpContext.Current.Response.Headers.Remove("Server");             HttpContext.Current.Response.Headers.Remove("X-AspNet-Version");             HttpContext.Current....
AIU_GS 发布于 2个月前 阅读 504

Java9模块系统的说明(翻译)

本文是 http://openjdk.java.net/projects/jigsaw/spec/sotms/ 文章的中文翻译,该翻译公开在 https://github.com/casparcao/jigsaw.state 上,对于翻译不够准确的地方,欢迎指正。
麦壳原野 发布于 1个月前 阅读 249 评论 1

Spring思维导图,让Spring不再难懂(mvc篇)

>写在前面 生活就像海洋,只有意志坚强的人才能到达彼岸。已经很久没有发文章了呀,想必大家都挂念我了,哈哈。 温故而知新,今天一起来复习一下spring mvc的内容吧。 >spring mvc简介与运行原理 Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。 ![原理.png](http://upload-images.jianshu.io/upload_images/4120002-9409cf62de5e6d39.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) * (1) Http请求:客户端请求提交到DispatcherServlet。 * (2) 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。 * (3) 调用处理器:DispatcherServlet将请求提交到Controller。 * (4)(5)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。 * (6)(7)处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。 * (8) Http响应:视图负责将结果显示到客户端。 >主要注解 ![spring mvc注解....
java思维导图 发布于 2个月前 阅读 12376 评论 31 点赞 35
Andy_Zhou

elasticsearch 分片(Shards)的理解

elasticsearch 中分片(Shards)非常非常重要,直接和性能挂钩。以下仅为个人实际使用 elasticsearch 4年的理解,可能存在误解,一切以官方文档为准。
Andy_Zhou 发布于 7天前 阅读 143

Jfinal与Activiti整合事务方案

activiti基于spring的事务集成,网上的资料很多。这里省略1000字。 但是,有的项目并没有使用spring,那怎么控制事务呢? 比如jfinal框架与Activiti整合。 先写一个插件:ActivitiPlugin import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngineConfiguration; import org.activiti.engine.ProcessEngines; import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration; import com.jfinal.plugin.IPlugin; import com.jfinal.plugin.activerecord.DbKit; public class ActivitiPlugin implements IPlugin{ private static ProcessEngine processEngine = null; private static ProcessEngineConfiguration processEngineConfiguration = null; private boolean isStarted = false; @Override public boolean start(){ try { createProcessEngine(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return true; } @Override public boolean stop() { ProcessEngines.destroy(); isStarted = false; return ...
超龍 发布于 4周前 阅读 48

django下sqlite数据库参数调优

django下sqlite数据库参数调优
jingshishengxu 发布于 4天前 阅读 21

Python判断文件是否存在的三种方法

通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错。所以最好在做任何操作之前,先判断文件是否存在。 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用`os模块`、`Try语句`、`pathlib模块`。 ## 1.使用os模块 os模块中的`os.path.exists()`方法用于检验文件是否存在。 * 判断文件是否存在 ```python import os os.path.exists(test_file.txt) #True os.path.exists(no_exist_file.txt) #False ``` * 判断文件夹是否存在 ```python import os os.path.exists(test_dir) #True os.path.exists(no_exist_dir) #False ``` 可以看出用`os.path.exists()`方法,判断文件和文件夹是一样。 其实这种方法还是有个问题,假设你想检查文件“test_data”是否存在,但是当前路径下有个叫“test_data”的文件夹,这样就可能出现误判。为了避免这样的情况,可以这样: * 只检查文件 ``` import os os.path.isfile("test-data") ``` 通过这个方法,如果文件"test-data"不存在将返回False,反之返回True。 即是文件存在,你可能还需要判断文件是否可进行读写操作。 ## 判断文件是否可做读写操作 使用`os.access()`方法判断文件是否可进行读写操作。...
j_hao104 发布于 2个月前 阅读 151

HashMap的实现原理浅析

HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。  HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 本文使用的是JDK1.7的HashMap源码,因为JDK1.8的HashMap改变还很多,以后再去单一分析。 HashMap内部结构 查看HashMap源代码,可以发现其继承自AbstractMap, 并实现了Map, Cloneable, Serializable接口~ public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable HashMap包含一个数组对象table[], /** * The table, resized as necessary. Length MUST Always be a power of two. */ transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE; 数组中包含的元素为Entry对象,Entry是HashMap中定义的静态内部类,内容如下: static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V> next; int hash; /** * Creates new entry. */ ...
王孟君 发布于 1个月前 阅读 3101 评论 9 点赞 9
梦朝思夕

Golang依赖管理工具:glide从入门到精通使用

## 介绍 不论是开发Java还是你正在学习的Golang,都会遇到**依赖管理**问题。Java有牛逼轰轰的Maven和Gradle。 Golang亦有godep、govendor、glide、gvt、gopack等等,本文主要给大家介绍[gilde](https://github.com/Masterminds/glide)。 glide是Golang的包管理工具,是为了解决Golang依赖问题的。 为什么需要glide? 原因很简单,Go 语言原生包管理的缺陷。罗列一下golang的 get 子命令管理依赖有很多大缺陷: * 能拉取源码的平台很有限,绝大多数依赖的是 github.com * 不能区分版本,以至于令开发者以最后一项包名作为版本划分 * 依赖 列表/关系 无法持久化到本地,需要找出所有依赖包然后一个个 go get * 只能依赖本地全局仓库(GOPATH/GOROOT),无法将库放置于局部仓库($PROJECT_HOME/vendor) ## 安装 ### Golang环境设置 采用vendor目录特性,Go 1.5 做为试验特性加入(需要指定 GO15VENDOREXPERIMENT=1 环境变量),并在 Go 1.6 正式引入的一个概念。多数 go 依赖解决方案都基于它的。GO15VENDOREXPERIMENT 是 Go 1.5 版本新增的一个环境变量,如果将值改为 1 则表示启用。它可以将项目根目录名为 vendor 的目录添加到 Go 的库搜寻路径中,实现一个局部依赖的效果...
梦朝思夕 发布于 2个月前 阅读 3466 评论 22 点赞 9

慕课网之C++数据结构学习笔记--线性表篇(一,顺序表)

线性表是最基本、最简单、也是最常用的一种数据结构。 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了首位结点)。 我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所以双向链表和循环链表依旧是线性表。 在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。受限线性表主要包括栈和队列,受限表示对结点的操作受限制。 线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。 /* 线性表:是指N个数据元素的有限序列 线性表大致分为两大类:顺序表(数组)和链表 而链表又分为:静态链表,单链表,循环链表,双向链表 顺序表在使用数组表达时优势在于访问速度快,搜索能力强 */ 关于线性表的概念就科普到这里,下面用代码讲解线性表中顺序表的实现: 首先定义一个List类,其中头文件是List....
duan_3826 发布于 2个月前 阅读 24

Python NLP入门教程

本文简要介绍Python自然语言处理(NLP),使用Python的NLTK库。NLTK是Python的自然语言处理工具包,在NLP领域中,最常使用的一个Python库。 ## 什么是NLP? 简单来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序或服务。 这里讨论一些自然语言处理(NLP)的实际应用例子,如语音识别、语音翻译、理解完整的句子、理解匹配词的同义词,以及生成语法正确完整句子和段落。 这并不是NLP能做的所有事情。 ## NLP实现 **搜索引擎**: 比如谷歌,Yahoo等。谷歌搜索引擎知道你是一个技术人员,所以它显示与技术相关的结果; **社交网站推送**:比如Facebook News Feed。如果News Feed算法知道你的兴趣是自然语言处理,就会显示相关的广告和帖子。 **语音引擎**:比如Apple的Siri。 **垃圾邮件过滤**:如谷歌垃圾邮件过滤器。和普通垃圾邮件过滤不同,它通过了解邮件内容里面的的深层意义,来判断是不是垃圾邮件。 ## NLP库 下面是一些开源的自然语言处理库(NLP): * Natural language toolkit (NLTK); * Apache OpenNLP; * Stanford NLP suite; * Gate NLP library 其中自然语言工具包(NLTK)是最受欢迎的自然语言处理库(NLP),它是用Python编写的,而且背后有非常强大的社区支持...
j_hao104 发布于 2小时前 阅读 46 评论 1

浅谈两个相互引用的对象是否会被GC回收

两个相互引用的对象会被GC垃圾回收吗?答案应该是不会!只要对象、属性等存在被引用,GC都会过滤掉的,不会被回收。笔者就简单谈一谈其中的原理吧。 判断对象是否存活,可以考虑以下方法。 1、引用计数算法 给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1。 当引用失效时,计数器值就减1。 任何时刻计数器为0的对象就是不可能再被使用的。 但是主流的java虚拟机没有采用引用计数算法,其中最主要的原因就是它很难解决对象之间互相循环引用的问题。 例子: 对象A和B互相引用,但除此之外,这两个对象再无任何引用,但是他们因为互相引用着对方,所以导致他们的引用计数都不为0,于是引用计数算法无法通知GC收集器回收他们。 (代码示例解释什么是循环引用) class  A {     public B bb; } class  B {     public A aa; } public class TestGC {     public static  void main(String[] args) {     A a = new A();     B b = new B();     a.bb = b;     b.aa = a;     a = null;     b = null;     } } 在上面的代码示例中,假设我们有两个类分别是A和B,A类中有一个字段是B类的类型,B类中有一个字段是A类类型,现...
小欣妹妹 发布于 2小时前 阅读 3

简析如何处理Servlet与多线程的关系

Servlet与多线程的关系可以从以下四点来把握: 一,servlet容器如何同时处理多个请求。 Servlet采用多线程来处理多个请求同时访问,Servelet容器维护了一个线程池来服务请求。 线程池实际上是等待执行代码的一组线程叫做工作者线程(Worker Thread),Servlet容器使用一个调度线程来管理工作者线程(Dispatcher Thread)。 当容器收到一个访问Servlet的请求,调度者线程从线程池中选出一个工作者线程,将请求传递给该线程,然后由该线程来执行Servlet的service方法。 当这个线程正在执行的时候,容器收到另外一个请求,调度者线程将从池中选出另外一个工作者线程来服务新的请求,容器并不关系这个请求是否访问的是同一个Servlet还是另外一个Servlet。 当容器同时收到对同一Servlet的多个请求,那这个Servlet的service方法将在多线程中并发的执行。 二,Servlet容器默认采用单实例多线程的方式来处理请求,这样减少产生Servlet实例的开销,提升了对请求的响应时间。对于Tomcat可以在server.xml中通过<Connector>元素设置线程池中线程的数目。 就实现来说: 调度者线程类所担负的责任如其名字,该类的责任是调度线程,只需要利用自己的属性完成自己的责任。所以该类是承担了责任的...
小欣妹妹 发布于 3小时前

Delphi字符串、PChar与字符数组之间的转换

``` Delphi字符串、PChar与字符数组之间的转换 ----------------------------------------------------------------- var s: string; p: pchar; a: array[1..20] of char; 1、字符串 ---> PChar p := PChar(s); 2、PChar ---> 字符串 s := p; 3、PChar ---> 字符数组 StrCopy(@a , p); 4、字符数组 ---> PChar PChar(@a); 5、字符串 ---> 字符数组 StrCopy(@a , PChar(s)); 6、字符数组 ---> 字符串 s := PChar(@a); ```
vga 发布于 3小时前 阅读 1

73款阿里巴巴开源软件详解!

详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
阿里巴巴

Spring Boot and Thymeleaf: Reload templates and static resources without restarting the application

# Templates reloading during development spring.thymeleaf.prefix=file:src/main/resources/templates/ spring.thymeleaf.cache=false # Static resources reloading during development spring.resources.static-locations=file:src/main/resources/static/ spring.resources.cache-period=0
泥鳅码 发布于 3小时前 阅读 1

Go代码调优利器-火焰图

Go代码调优
云迹 发布于 3小时前 阅读 3

JAVA基础--数据格式

LIST //创建 import java.util.ArrayList; import java.util.List; List<String> list = new ArrayList<String>(); //添加 list.add("test1"); list.add("test2"); list.add("test3");  
Asktao 发布于 3小时前 阅读 2

Git版本回退

### 本地版本库回退 1. 运行`git log`或者`git reflog`命令查看回退版本号 2. 运行`git reset`命令进行版本回退 注意,版本号一般选取前几位,只要能唯一标志一个版本就可以。如果是回滚到上一个版本,可以简单使用以下命令: ``` git reset --hard HEAD^ ``` 其中,`HEAD`表示最新的版本库,而加上`^`就表示上一个版本库; ### 远程版本库回退 1. 先进行本地版本库回退 2. 运行`git push -f`强制推送到远程库 ### 参考资料 1\. [ 廖雪峰网站:版本回退 ](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000) 2\. [ 远程仓库版本回退方法 ](http://blog.csdn.net/fuchaosz/article/details/52170105)
wqli 发布于 14小时前 阅读 12

《Kotlin项目实战开发》 第3章 类型系统与可空类型

  第3章 类型系统与可空类型 跟Java、C和C ++ 一样, Kotlin也是“静态类型编程语言”。 通常,编程语言中的类型系统中定义了 1.      如何将数值和表达式归为不同的类型 2.     如何操作这些类型 3.     这些类型之间如何互相作用 我们在编程语言中使用类型的目的是为了让编译器能够确定类型所关联的对象需要分配多少空间。 在每一个编程语言中,都有一个特定的类型系统。静态类型在编译时期时,就能可靠地发现类型错误。因此通常能增进最终程序的可靠性。 类型系统在各种语言之间有非常大的不同,主要的差异存在于编译时期的语法,以及运行时期的操作实现方式。 本章我们简单介绍一下Kotlin的类型系统。 3.1 类型系统 我们知道在计算机中中,信息都是以01比特存储的,硬件无法区分存储器地址、脚本、字符、整数、以及浮点数。为了赋予01比特意义,于是有了类型。 3.1.1 类型系统的作用 使用类型系统,编译器可以检查无意义的、无效的、类型不匹配等错误代码。这也正是强类型语言能够提供更多的代码安全性保障的原因之一。 另外,静态类型检查还可以提供有用的信息给编译器。跟动态类型语言相比,由于有了类型的显式声明,静态类型的语言更加易读好懂...
东海陈光剑 发布于 14小时前 阅读 8

常见算法基础题思路简析(六)-字符串篇

本文对和 **字符串** 有关的常见算法基础题思路分类进行分析和总结,并以 Java 为例,适当指出需要注意的编程细节
brianway 发布于 15小时前 阅读 7

常见算法基础题思路简析(五)-队列和栈篇

本文对和 **队列和栈** 有关的常见算法基础题思路分类进行分析和总结,并以 Java 为例,适当指出需要注意的编程细节
brianway 发布于 15小时前 阅读 3

常见算法基础题思路简析(四)-二分搜索篇

本文对和 **二分搜素** 有关的常见算法基础题思路分类进行分析和总结,并以 Java 为例,适当指出需要注意的编程细节
brianway 发布于 15小时前 阅读 4

常见算法基础题思路简析(三)-二叉树篇

本文对和 **二叉树** 有关的常见算法基础题思路分类进行分析和总结,并以 Java 为例,适当指出需要注意的编程细节
brianway 发布于 16小时前 阅读 2

常见算法基础题思路简析(二)-链表篇

本文对和 **链表** 有关的常见算法基础题思路分类进行分析和总结,并以 Java 为例,适当指出需要注意的编程细节
brianway 发布于 16小时前 阅读 2

常见算法基础题思路简析(一)-排序篇

本文对和 **排序** 有关的常见算法基础题思路进行分析和总结,并以 Java 为例,适当指出需要注意的编程细节
brianway 发布于 16小时前 阅读 2

@NotNull 和 @NotEmpty 和@NotBlank 区别

[@NotNull](https://my.oschina.net/notnull) 和 @NotEmpty 和@NotBlank 区别 @NotEmpty 用在集合类上面 @NotBlank 用在String上面 @NotNull 用在基本类型上 例子: package com.juzi.cap.rest.dto; import org.hibernate.validator.constraints.NotBlank; import org.hibernate.validator.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.util.List; /** * Created with IntelliJ IDEA. * Description:绑卡调用资金路由接口所需参数 * User: zhaomingli * Date: 2017-09-27 * Time: 17:03 */ public class BankCapitalDto { /** * 订单id */ @NotNull(message="订单id不能为空") private Integer id; /** * 订单编码orderid */ @NotBlank(message="orderId不能为空") private String orderId; /** * 用户Id-userid */ @NotBlank(message="userId不能为空") private String userId; /** * * 产品类型 * 现金贷 * XJD_SC("0101","商城现金贷"),XJD_SSJ("0102","随手借"),XJD_BT("0103","白条现金贷"), * 商品贷 * SPD_SC("0201","商城贷"),//桔子商城下单 SPD_BT("0202","白条贷"),//白条下单也称汽车贷 * ...
圆梦巨人 发布于 16小时前 阅读 9

JDK容器学习之HashMap (三) : 迭代器实现

hashmap的几种遍历方式
小灰灰Blog 发布于 19小时前 阅读 5

gradle 安装下载

直接下载 gradle-xxx-all.zip 包 ,解压,即可,然后安装对应的环境变量即可 下载地址: http://services.gradle.org/distributions/ 看了一下 gradle 的 教程,,,表示虽然精简了,而且支持脚步。。。 考虑了一下,,,其实 maven 相对来说 使用上面来说,更容易上手,而且容易理解,虽然maven相对会繁琐一点。 而且 gradle 是结合了 ant 的,其实我一点都不喜欢 ant 来构建项目,也不喜欢在构建项目的时候,还写一堆 的脚步,,,我觉得没有必要,而且感觉写脚步构建项目 这样来,一点都不好上手,又不是写程序语言,好难用啊,,,。而且 构建项目写一堆的脚步,,对于不熟悉ant,gradle 的人来说,还是比较难看的和理解的。 就使用maven算了,而maven 也有maven的好处。 > 然而大量的实践与思考发现Maven相比于Gradle的不灵活,正是它的优点,避免了大量聪明的Build Engineer的出现。 所以看看了gradle , 还是坚持使用maven,个人更喜欢maven
之渊 发布于 20小时前 阅读 2

简析jQuery对象与DOM对象之间的转换方法

刚开始学习jQuery,可能一时会分不清楚哪些是jQuery对象,哪些是DOM对象。至于DOM对象不多解释,我们接触的太多了,下面重点介绍一下jQuery,以及两者相互间的转换。 jQuery对象是什么?  jQuery对象就是通过jQuery包装DOM对象后产生的对象。jQuery对象是jQuery独有的,其可以使用jQuery里的方法。  比如:  $("#test").html() 意思是指:获取ID为test的元素内的html代码。其中html()是jQuery里的方法  这段代码等同于用DOM实现代码:  document.getElementById("id").innerHTML;  虽然jQuery对象是包装DOM对象后产生的,但是jQuery无法使用DOM对象的任何方法,同理DOM对象也不能使用jQuery里的方法。乱使用会报错。比如:$("#test").innerHTML、document.getElementById("id").html()之类的写法都是错误的。  还有一个要注意的是:用#id作为选择符取得的是jQuery对象与document.getElementById("id")得到的DOM对象,这两者并不等价。请参看如下说的两者间的转换。  既然jQuery有区别但也有联系,那么jQuery对象与DOM对象也可以相互转换。在再两者转换前首先我们给一个约定:如果一个获取的是jQuery对象,那么我们在变量前面加上$,如:var $variab = jQuery对象;...
小欣妹妹 发布于 22小时前 阅读 3

POI读取Excel浅谈

1, 对于类似电话号码或手机一类的大数值读取问题  // 取值后会带一个E的问题  double cellValue = row.getCell(k).getNumericCellValue();  fieldValues[k] = new DecimalFormat("#").format(cellValue);  2, 对于数值型单元的纯数值和日期型的处理  case HSSFCell.CELL_TYPE_NUMERIC: // 数值型        if (HSSFDateUtil.isCellDateFormatted(cell)) {            //  如果是date类型则 ,获取该cell的date值            value = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();        } else { // 纯数字            value = String.valueOf(cell.getNumericCellValue());        }   POI读取Excel浅谈  先看代码,挨句解释:  一般遍历使用两种方式,1:得到总的行数和每行的列数,然后循环。2:使用迭代  先看第一种:  Java代码   package com.golden.test;       import java.io.File;    import java.io.FileInputStream;       import org.apache.poi.hssf.usermodel.HSSFCell;    import org.apache.poi.hssf.usermodel.HSSFRow;    import org.apache.po...
文文1 发布于 22小时前 阅读 3

Java9新特性——module模块系统

官方文档:https://docs.oracle.com/javase/9/index.html 关于 java9的新特性,官方原文:https://docs.oracle.com/javase/9/whatsnew/toc.htm 这玩意就是一个列表,具体的技术细节需要根据官方文档挖一挖。 modular-模块系统 --- java9的模块化,从一个独立的开源项目而来,名为Jigsaw。 项目官网:http://openjdk.java.net/projects/jigsaw/ ### 为什么要使用模块化 java开发者都知道,使用java开发应用程序都会遇到一个问题,Jar hell,他就像windows里的dll hell。 比如我们启动一个不算大的应用,但依赖了很多的jar,如下图: ![输入图片说明](https://static.oschina.net/uploads/img/201709/26094041_w0RP.png "在这里输入图片标题") 摘自:Mark Reinhold的演讲 https://www.youtube.com/watch?v=l1s7R85GF1A 这是很常见的。虽然你可以使用 "java -Djava.ext.dirs=lib xxx" 让命令行小一些,但不可否认,他的classpath就是那么长。顺便说一句,java9中不允许使用extdirs了。 另一方面,jdk本身有很多的api: ![输入图片说明](https://static.oschina.net/uploads/img/201709/26094131_JZAh.png "在这里输入图片标题") 对于一些小设备,它太庞大了。 ### helloworld...
polly 发布于 3天前 阅读 4872 评论 33 点赞 22 打赏 1

Java平台,标准版Oracle JDK 9中的新功能

Java平台,标准版 Oracle JDK 9中的新增功能 版本9 E77563-05 2017年9月   JDK 9中的新功能概述 Java Platform,Standard Edition 9是一个主要的功能版本。以下总结了Java SE 9和JDK 9的特点和增强功能,Oracle 对于 Java SE 9的实现。 JDK增强提案(JEP)是对JDK设计和实施非常重要更改的提案。参阅JEP 1:JDK增强提案和路线图流程。Java规范请求(JSR)描述了Java平台的建议和最终规范。请参阅JSR概述。   JDK 9中的重要变化 这些变化影响了多个技术领域。 特征 描述 Java平台模块系统 推出了一种新的Java编程组件--模块,是一个指定的,自描述代码和数据的集合。 模块系统: 引入一个新可选阶段,link time,它在编译和运行时之间,在此期间,可以将一组模块组合并且优化到一个自定义的运行时映像中;在 Java Platform, Standard Edition Tools Reference 中查看 jlink 工具。 添加选项到工具javac,jlink和java,可以指定模块路径在哪里,哪一个定义模块的定位。 引入模块化JAR文件,它是一个在根目录下包含module-info.class的JAR文件。 推出JMOD格式,它是一种类似于JAR的打包格式,除了它可以包含原生代码和配置文件外; 参见jmod工具。 JDK本身已经被分为一组模...
GuoMengYue 发布于 7天前 阅读 5985 评论 25 点赞 14

LinkedList的实现原理浅析

本文简单分析一下JDK1.7的LinkedList源码,看一下其内部的结构以及典型方法的实现~ LinkedList内部结构 查看LinkedList的源码,发现其继承自AbstractSequentialList,实现了List,Deque,Cloneable以及Serializable接口,如: public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable { } 也就意味着: LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 LinkedList 实现 List 接口,能对它进行列表操作。 LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。 LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。 LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。   public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable { transient int size = 0; /** * Pointer to first node. * Invariant: (first == null && last == null) || ...
王孟君 发布于 2周前 阅读 1973 评论 7 点赞 5

HashMap的实现原理浅析

HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。  HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 本文使用的是JDK1.7的HashMap源码,因为JDK1.8的HashMap改变还很多,以后再去单一分析。 HashMap内部结构 查看HashMap源代码,可以发现其继承自AbstractMap, 并实现了Map, Cloneable, Serializable接口~ public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable HashMap包含一个数组对象table[], /** * The table, resized as necessary. Length MUST Always be a power of two. */ transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE; 数组中包含的元素为Entry对象,Entry是HashMap中定义的静态内部类,内容如下: static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V> next; int hash; /** * Creates new entry. */ ...
王孟君 发布于 1个月前 阅读 3101 评论 9 点赞 9

曲线点抽稀算法-Python实现

## 何为抽稀 >在处理矢量化数据时,记录中往往会有很多重复数据,对进一步数据处理带来诸多不便。多余的数据一方面浪费了较多的存储空间,另一方面造成所要表达的图形不光滑或不符合标准。因此要通过某种规则,在保证矢量曲线形状不变的情况下, 最大限度地减少数据点个数,这个过程称为抽稀。 通俗的讲就是对曲线进行采样简化,即在曲线上取有限个点,将其变为折线,并且能够在一定程度保持原有形状。比较常用的两种抽稀算法是:道格拉斯-普克(Douglas-Peuker)算法和垂距限值法。 ## 道格拉斯-普克(Douglas-Peuker)算法 Douglas-Peuker算法(DP算法)过程如下: * 1、连接曲线首尾两点A、B; * 2、依次计算曲线上所有点到A、B两点所在曲线的距离; * 3、计算最大距离D,如果D小于阈值threshold,则去掉曲线上出A、B外的所有点;如果D大于阈值threshold,则把曲线以最大距离分割成两段; * 4、对所有曲线分段重复1-3步骤,知道所有D均小于阈值。即完成抽稀。 这种算法的抽稀精度与阈值有很大关系,阈值越大,简化程度越大,点减少的越多;反之简化程度越低,点保留的越多,形状也越趋于原曲线。 下面是Python代码实现: ```python # -*- coding: utf-8 -*- """ -----------------...
j_hao104 发布于 1个月前 阅读 1181 评论 3 点赞 2

PHP实现依赖注入

控制反转(Inversion of Control,英文缩写为IoC)是框架的重要特征。控制反转(IOC)是一种思想,依赖注入(DI)是实施这种思想的方法。
o0无忧亦无怖 发布于 2个月前 阅读 2120 评论 38 点赞 8

Java使用Hutool实现AES、DES加密解密

在Java世界中,AES、DES加密解密需要使用Cipher对象构建加密解密系统,Hutool中对这一对象做再包装,简化了加密解密过程。
路小磊 发布于 2个月前 阅读 2517 评论 21 点赞 9

SQL注入详解

日前,国内最大的程序员社区CSDN网站的用户数据库被黑客公开发布,600万用户的登录名及密码被公开泄露,随后又有多家网站的用户密码被流传于网络,连日来引发众多网民对自己账号、密码等互联网信息被盗取的普遍担忧。 网络安全成为了现在互联网的焦点,这也恰恰触动了每一位用户的神经,由于设计的漏洞导致了不可收拾的恶果,验证了一句话“出来混的,迟早是要还的”,所以我想通过专题博文介绍一些常用的攻击技术和防范策略。 SQL Injection也许很多人都知道或者使用过,如果没有了解或完全没有听过也没有关系,因为接下来我们将介绍SQL Injection。
暴雪首席执行官 发布于 2个月前 阅读 4117 评论 21 点赞 5

使用Spring自定义注解实现任务路由

在Spring mvc的开发中,我们可以通过RequestMapping来配,当前方法用于处理哪一个URL的请求.同样我们现在有一个需求,有一个任务调度器,可以按照不同的任务类型路由到不同的任务执行器。其本质就是通过外部参数进行一次路由和Spring mvc做的事情类似。简单看了Spring mvc的实现原理之后,决定使用自定义注解的方式来实现以上功能。 ### 自定义TaskHandler注解 ```java @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface TaskHandler { String taskType() default ""; } ``` 以上定义了任务处理器的注解,其中@Component表示在spring 启动过程中,会扫描到并且注入到容器中。taskType表示类型。 ### 任务处理器定义 ```java public abstract class AbstractTaskHandler { /** * 任务执行器 * * @param task 任务 * @return 执行结果 */ public abstract BaseResult execute(Task task); } ``` 以上定义了一个任务执行的处理器,其他所有的具体的任务执行器继承实现这个方法。其中Task表示任务的定义,包括任务Id,执行任务需要的参数等。 ### 任务处理器实现 接下来,我们可以实现一个具体的任务处理器。 ```jav...
wangyan9110 发布于 2个月前 阅读 3478 评论 8 点赞 8
梦朝思夕

Golang依赖管理工具:glide从入门到精通使用

## 介绍 不论是开发Java还是你正在学习的Golang,都会遇到**依赖管理**问题。Java有牛逼轰轰的Maven和Gradle。 Golang亦有godep、govendor、glide、gvt、gopack等等,本文主要给大家介绍[gilde](https://github.com/Masterminds/glide)。 glide是Golang的包管理工具,是为了解决Golang依赖问题的。 为什么需要glide? 原因很简单,Go 语言原生包管理的缺陷。罗列一下golang的 get 子命令管理依赖有很多大缺陷: * 能拉取源码的平台很有限,绝大多数依赖的是 github.com * 不能区分版本,以至于令开发者以最后一项包名作为版本划分 * 依赖 列表/关系 无法持久化到本地,需要找出所有依赖包然后一个个 go get * 只能依赖本地全局仓库(GOPATH/GOROOT),无法将库放置于局部仓库($PROJECT_HOME/vendor) ## 安装 ### Golang环境设置 采用vendor目录特性,Go 1.5 做为试验特性加入(需要指定 GO15VENDOREXPERIMENT=1 环境变量),并在 Go 1.6 正式引入的一个概念。多数 go 依赖解决方案都基于它的。GO15VENDOREXPERIMENT 是 Go 1.5 版本新增的一个环境变量,如果将值改为 1 则表示启用。它可以将项目根目录名为 vendor 的目录添加到 Go 的库搜寻路径中,实现一个局部依赖的效果...
梦朝思夕 发布于 2个月前 阅读 3466 评论 22 点赞 9

Spring思维导图,让Spring不再难懂(mvc篇)

>写在前面 生活就像海洋,只有意志坚强的人才能到达彼岸。已经很久没有发文章了呀,想必大家都挂念我了,哈哈。 温故而知新,今天一起来复习一下spring mvc的内容吧。 >spring mvc简介与运行原理 Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。 ![原理.png](http://upload-images.jianshu.io/upload_images/4120002-9409cf62de5e6d39.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) * (1) Http请求:客户端请求提交到DispatcherServlet。 * (2) 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。 * (3) 调用处理器:DispatcherServlet将请求提交到Controller。 * (4)(5)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。 * (6)(7)处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。 * (8) Http响应:视图负责将结果显示到客户端。 >主要注解 ![spring mvc注解....
java思维导图 发布于 2个月前 阅读 12376 评论 31 点赞 35

java lambda方法引用总结——烧脑吃透

lambda是java8的新特性,基本使用比较容易理解,但有一个环节遇到了坎儿,那就是方法引用,尤其是类的实例方法引用,烧脑之后总结一下。 在需要函数参数的方法中,我们可以把另一个同类型的方法直接传入,这称为方法引用的绑定。类似于C语言中的函数指针。 lambda表达式可以替代方法引用;或者说方法引用是lambda的一种特例,方法引用不可以控制传递参数。 ### 4.1) 构造器引用 ```java private Person construntorRef(Supplier sup){ Person p=sup.get(); return p; } @Test public void testConstructorRef(){ Person p=construntorRef(Person::new); System.out.println(p); } ``` 需要有无参的构造器。 ### 4.2) 静态方法引用 ```java private static void print(String s){ System.out.println(s); } @Test public void testStaticRef(){ Arrays.asList("aa","bb","cc").forEach(TestMethodReference::print); } ``` so easy,只要静态方法的参数列表和FI需要的参数一致就可以。 ### 4.3) 成员方法引用 ```java @Test public void testMemberMethodRef(){ Arrays.asList("aa","bb","cc").forEach(System.out::println); } ``` so easy,只要成员方法的参数列表和FI需...
polly 发布于 4个月前 阅读 4041 评论 21 点赞 8

现代c++开发利器folly教程系列之:dynamic

一、前言        用过python、php等动态类型语言的人肯定对动态数据类型不陌生。对于定义时不确定、运行时才确定的数据类型,使用动态类型是非常方便的。c++是一门不折不扣的静态类型语言,那么是否就无缘享受“动态”类型的好处了呢?不尽然。folly为我们提供了dynamic类型,从一定程度上实现了c++中的“动态”数据类型,为什么说是“一定程度上”呢,因为dynamic类型只支持c++中的基本类型(部分)和复合类型(array和map),不支持自定义类型。你可能会把dynamic和boost::any或std::any(将在c++17中支持)进行对比,但是其实它们没有可比性,首先是它们的实现原理不同。boost::any虽然可以盛放任何类型,但是它在实现上是用继承的方式进行了类型擦除,因此在还原类型时,需要程序员自己显示的提供类型信息,这也是boost::any的缺点之一。而dynamic虽然代表的类型有限,但是dynamic本身可以记住类型,便于赋值和还原。因此,dynamic不是boost::any的替代品,更像是一种补充,如果非要类比的话,dynamic和boost::variant更为相似。 二、类型支持       如前文所述,dynamic可以盛放的类型是有限的,它可以盛放部分基本类型、字符串类型、数组类型和OBJECT(本质为m...
黑客画家 发布于 5个月前 阅读 2733 评论 8 点赞 3

Java泛型总结

什么是泛型 --- 泛型是jdk5引入的类型机制,就是将类型参数化,它是早在1999年就制定的jsr14的实现。 泛型机制将类型转换时的类型检查从运行时提前到了编译时,使用泛型编写的代码比杂乱的使用object并在需要时再强制类型转换的机制具有更好的可读性和安全性。 泛型程序设计意味着程序可以被不同类型的对象重用,类似c++的模版。 泛型对于集合类尤其有用,如`ArrayList`。这里可能有疑问,既然泛型为了适应不同的对象,`ArrayList`本来就可以操作不同类型的对象呀?那是因为没有泛型之前采用继承机制实现的,实际上它只维护了一个`Object`对象的数组。结果就是对List来说它只操作了一类对象`Object`,而在用户看来却可以保存不同的对象。 泛型提供了更好的解决办法——类型参数,如: ```js List list = new ArrayList(); ``` 这样解决了几个问题: 1 可读性,从字面上就可以判断集合中的内容类型; 2 类型检查,避免插入非法类型。 3 获取数据时不在需要强制类型转换。 泛型类 --- ```java public class Pair{ private T field1; } ``` 其中 `` 是类型参数定义。 使用时:`Pair p = new Pair();` 此时类内部的`field1`就是字符串类型了。 如果引用多个类型,可以使用逗号...
polly 发布于 6个月前 阅读 5117 评论 8 点赞 17

SSM(十一) 基于dubbo的分布式架构

![dubbo.jpg](https://ooo.0o0.ooo/2017/04/06/58e649d664665.jpg) # 前言 现在越来越多的互联网公司还是将自己公司的项目进行服务化,这确实是今后项目开发的一个趋势,就这个点再凭借之前的`SSM`项目来让第一次接触的同学能快速上手。 # 浅谈分布式架构 `分布式架构`单看这个名字给人的感觉就是高逼格,但其实从历史的角度来分析一下就比较明了了。 > 我们拿一个电商系统来说: ## 单系统 ![E65B5547-AF84-4D31-836D-72892C7AC7EA.png](https://ooo.0o0.ooo/2017/04/06/58e651937130f.png) 对于一个刚起步的创业公司项目肯定是追求越快完成功能越好,并且用户量也不大。 这时候所有的业务逻辑都是在一个项目中就可以满足。 ## 垂直拆分-多应用 ![QQ20170406-230056@2x.jpg](https://ooo.0o0.ooo/2017/04/06/58e65856cf18a.jpg) 当业务量和用户量发展到一定地步的时候,这时一般会将应用同时部署到几台服务器上,在用户访问的时候使用`Nginx`进行反向代理和简单的负载均衡。 ## SOA服务化 当整个系统以及发展的足够大的时候,比如一个电商系统中存在有: * 用户系统 * 订单系统 * 支付系统 * 物流系统 等系统。 如果每次修改了其中一个系统就要重新发布上线的话那么耦合就...
crossoverJie 发布于 6个月前 阅读 4627 评论 9 点赞 10

Google Protobuf 协议+Socket实现异步登录

> 背景:公司登录基础服务是C开发,业务是Java开发,需要Java调用C的服务验证登录、获取登录信息 > 实现方式: * 交互通过发送Socket通讯,socket连接池,Google Protobuf 协议,发送心跳保持TCP连接 * 自定义ExecutorCompletionService,实现一个包含Map>> https://github.com/shawntime/shawn-common-utils/tree/master/src/main/java/com/shawntime/common/socket ### Google Protobuf 协议定义 定义.proto文件:头文件(head_outer_class.proto)、登录(login_logic.proto)、心跳(login_proxy.proto) * 字段类型:bool,int32,float,double,string * 支持消息嵌套 * 支持enum * 索引号要按顺序指定 * 字段前缀:required:必须的;optional:可选的;repeated:可以重复的 ``` package qiqi; enum ENUM_HEAD_TYEP { enum_cs_head_type_cs = 0x1; //0x1表示CSHead enum_cs_head_type_sc = 0x2; //0x2表示SCHead enum_cs_head_type_ss = 0x3; //0x3表示SSHead }; enum ENUM_CS_HEAD_COMMAND { enum_cs_head_cmd_medal = 0x1; //勋章系统 enum_cs_head_cmd_login = 0x2; //登录系统 enum_cs_head_cmd_guild = 0x3; //公会推荐 enum_cs_head_cmd_user_info = 0x4; //用户信息 };...
shawntime 发布于 6个月前 阅读 2622 评论 11 点赞 1

Python进阶篇二:Python模块

Python的强大之处有许多,其中重要的一点就是Python包含许多的第三方库。因此,懂得如何制作、导入自制模块或第三方模块就显得非常重要。此外,熟悉python模块的查看方式有利于编程者缩短python语言的学习使用时间。本文从python模块的制作、导入、查看和使用入手,重点介绍在WINDOWS环境下如何处理和使用python模块。最后一部分介绍一些python常用的模块供读者参考。
SamYjy 发布于 6个月前 阅读 2317 点赞 3

花十分钟时间给JFinal写了个talent-aio插件。。。

本人 JFinal脑残粉,最近公司几个项目都需要跟硬件交互,这就得用到长连接,之前一直没接触过该领域,本来还想花时间研究下netty,讲真挺难啃的,找资料的时候翻到 talent-aio,略微了解发现似乎学习成本极低,没想到作者本人也极其nice,解答我这个门外小伙子好多个问题,顺利用上此框架,刚好解了我的燃眉之急。 什么是 talent-aio? talent-aio是基于java aio实现的即时通讯框架,源于作者另一个久经考验的talent-nio框架,但在易用性、性能及代码可读性方面又远远超越了talent-nio。 顺便放上传送门:https://my.oschina.net/talenttan/blog/863545 废话不说,下面正题: 下载talent-aio的demo,demo极其简单,主要还是看HelloAbsAioHandler这个类的编码协议,剩下的就是看Aio的类了,api 貌似都在这。具体不介绍了,上面有链接,要注意的是Client端与Server端协议要一致。在这里说下我之前踩的坑,比如talent-aio的demo代码中的协议是有header的,Server端对客户端没有要求,但必须遵循交互协议,所以若是你用百度出来的socket实例连Server要注意,这里我们用回本身提供的Client代码就可以了。 导入talnet-aio依赖。 <dependency> <groupId>com.tale...
小徐同学 发布于 6个月前 阅读 7236 评论 30 点赞 28 打赏 1

长URL转短连接的简单设计与实现

非常多的时候,我们不想在分享的时候采用长长的链接,主要的原因有: URL太长占显示空间、难于输入,转成二维码点点小,难于识别 长的URL提供的信息太多,不利于信息安全,甚至容易造成倒库 其他理由...... 今天的理由不是重点,重点是如何用一点点代码实现这个短链接的生成。 我们的注意点有: 生成的短链接地址长度可调整,毕竟不能因为4位、5位、6位的长度变化就让我们重新写一套程序 要有防冲突处理机制,不能因为算法导致两个长链接地址生成的短地址一样就把前一个覆盖掉 有时候,一个地址用过之后觉得不需要使用了,哪么这个地址失效之后,短地址可以有效收回。 首先设计接口 /** * Created by luoguo on 2017/3/16. */ public interface UrlShortener { /** * 设置产生短链接长度 * @param length * @return */ void setLength(int length); /** * 返回短链接长度 * @return */ int getLength(); /** * 返回指定地址对应的短链接 * @param url * @return */ String get(String url); /** * 存储对应关系 * @param url * @param shortUrl */ voi...
悠悠然然 发布于 6个月前 阅读 5077 评论 38 点赞 4

使用 Elastic Stack 来监控和调优 Golang 应用程序

Golang 因为其语法简单,上手快且方便部署正被越来越多的开发者所青睐,一个 Golang 程序开发好了之后,势必要关心其运行情况,今天在这里就给大家介绍一下如果使用 Elastic Stack 来分析 Golang 程序的内存使用情况,方便对 Golang 程序做长期监控进而调优和诊断,甚至发现一些潜在的内存泄露等问题。   Elastic Stack 其实是一个集合,包含 Elasticsearch、Logstash 和 Beats 这几个开源软件,而 Beats 又包含 Filebeat、Packetbeat、Winlogbeat、Metricbeat 和新出的 Heartbeat,呵呵,有点多吧,恩,每个 beat 做的事情不一样,没关系,今天主要用到 Elasticsearch、Metricbeat 和 Kibana 就行了。   Metricbeat 是一个专门用来获取服务器或应用服务内部运行指标数据的收集程序,也是 Golang 写的,部署包比较小才10M 左右,对目标服务器的部署环境也没有依赖,内存资源占用和 CPU 开销也较小,目前除了可以监控服务器本身的资源使用情况外,还支持常见的应用服务器和服务,目前支持列表如下: Apache Module Couchbase Module Docker Module HAProxy Module kafka Module MongoDB Module MySQL Module Nginx Module PostgreSQL Module Prometheus Module Redis Modu...
Medcl 发布于 7个月前 阅读 2646 评论 18 点赞 13
顶部