开源中国

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

Spring Cloud Stream 简明教程(持续更新)

Spring Cloud Stream 版本是:Ditmars.RELEASE 有错误的地方欢迎指出
-_-一条狗 发布于 3小时前 阅读 43

SpringCloud系列:利用Zuul实现统一服务网关服务,简单实现IP白名单功能

本文基于SpringCloud Zuul实现统一网关服务、请求校验等功能,最后通过zuul过滤器实现IP白名单功能
闲等莫 发布于 3小时前 阅读 44

Git提交历史的修改删除合并

今天主要针对在项目版本控制器Git的使用中遇到的一些和提交历史操作相关的常见问题,进行实践总结。在项目开发中经常会需要修改提交commit信息,合并多个提交commit,甚至放弃当前修改回退至某一历史提交的需求,那我们到底该如何操作呢,本篇一一阐述。
熊建刚 发布于 5小时前 阅读 71

Google、IBM和Lyft开源的微服务管理框架Istio安装与试用

使用istio可以很简单的创建具有负载均衡、服务间认证、监控等功能的服务网络,而不需要对服务的代码进行任何修改。你只需要在部署环境中,例如Kubernetes的pod里注入一个特别的sidecar proxy来增加对istio的支持,用来截获微服务之间的网络流量。 目前版本的istio只支持kubernetes,未来计划支持其他其他环境。
tqyin 发布于 8小时前 阅读 89

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

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

深入理解JVM原理之编译openjdk7

        Java虚拟机种类很多例如:HotSpot 丶 JRockit 丶 J9等 我们一般用的就是HotSpot,如果我们电脑上装了JDK,可以运行java -version查看相关信息 java -version java version "1.7.0_71" Java(TM) SE Runtime Environment (build 1.7.0_71-b14) Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode) 之前想着编译openjdk7,但是试过windows系统,linux系统,各种不如意,尤其是windows系统操作起来比linux更复杂,最后不得不放弃,centos试过,redhat也试过,各种不行 ,简直要吐血, 不过苍天不负有心人,经过一周的不断尝试,终于使用Ubuntu16.04.3搞定. 准备阶段: ①.需要安装的:使用 apt-get install 命令 build-essential gawk libasound2-dev libcups-dev libxrender-dev xorg-dev ant(1.7以上) libxtst-dev libxi-dev libxt-dev ②.openjdk7 , jdk6 我使用的jdk6为:jdk-6u45, ③.将CurrencyData.properties文件中的日期一定要改成10年内, 否则在编译过程中会报错从而导致编译失败: Error: time is more than 10 years from present: 1136059200000 文件位置:  /usr/openjdk/jdk/src/share/classes/java/util/CurrencyData.properties 开始编译: ①.进...
大大的微笑 发布于 10小时前 阅读 179

如何愉快的使用MQ-详述各种功能场景

  消息队列(MQ)是一种不同应用程序之间(跨进程)的通信方法。应用程序通过写入和检索出入列队的数据(消息)来通信,而无需通过专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用(Remote Procedure Call. RPC)的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。这样天然的就实现了异步的目标。那么MQ还有哪些功能场景呢。下面逐一介绍。 解耦 解耦.png MQ最直接的使用场景就是可以将两个系统进行解耦,比如我们的货款抵扣业务场景,用户生成订单发送MQ后立即返回,结算系统去消费该MQ进行用户账户金额的扣款。这样订单系统只需要关注把订单创建成功,最大可能的提高订单量,并且生成订单后立即返回用户。而结算系统重点关心的是账户金额的扣减,保证账户金额最终一致。这个场景里面还会涉及到重试幂等性问题,后面有介绍。 削峰填谷 还是以订单系统和结算系统场景为例,如果订单系统通过RPC框架来调用结算系统,在有高峰促销的情况下生成订单的量会非常大,而且由于生成订单的速度也非常快,这样势必会给结算系统造成系统压力,...
新栋BOOK 发布于 10小时前 阅读 161 评论 1 点赞 1

一篇文章看懂爬虫

爬虫的本质、webmagic
冷血狂魔 发布于 19小时前 阅读 244

自学编程,十年磨一剑

原文链接 [Teach Yourself Programming in Ten Years](http://norvig.com/21-days.html) 作者 Peter Norvig 原文几经修改,[已有的翻译](http://blog.jobbole.com/22905/) 惨不忍睹,多处翻译的背道相驰,怒而重新翻译,是为此文。2017.11.5 ### 为什么每个人都如此急于求成? 在任何书店里你都能看到类似于《24 小时 Java 无师自通》这样的书,以及旁边无穷无尽的变种,试图教你在短时间内学会 C、SQL、Ruby、算法等等技能。 我在亚马逊在线书店搜索“自学”“小时”“2000年以后出版”等关键字,找到了 512 本类似书籍。前十名有九个都是编程书。 似乎一切都昭示着,要么当下人们迫切地想学会编程,要么学会编程是相当容易的一件事。在其他领域里,你很难找到诸如此类的书,甚至是《狗狗喂养指南》都鲜有“几日速成”这种说法。你不奇怪吗? 是的,Felleisen 等人也注意到了,他们的著作[《如何设计程序》](http://www.ccs.neu.edu/home/matthias/HtDP2e/index.html)里提到了这种速成书泛滥的趋势,并给出评论“拙劣的编程水平确实相当容易达成。傻子都能在 21 天里学会,哪怕他们天生就是个白痴。”。Abtruse Goose 的漫画[《如何自学编程》](http://abstrusegoose.com/...
傅易 发布于 20小时前 阅读 220 点赞 1

redis无法获取连接Could not get a resource from the pool分析

背景 随着系统使用用户上升,我们也愈发多的使用到了redis组件! 比如在做session共享时 tomcat使用redis做session 参考https://github.com/jcoleman/tomcat-redis-session-manager 当然关于session共享在tomcat中使用存在一些限制 tomcat指定版本 web应用使用jedis和common pools 需要指定版本 容易出现jar冲突 运维配置对应redis信息 连接池开发无感 因此更多可以考虑使用spring-session通过redis来管理session 当然我们目前的场景使用shiro做session管理【shiro可以委托给容器或者第三方组件】 那么当使用redis组件多了的场景我们就极容易碰到如下的错误 Could not get a resource from the pool 简要分析一下我们系统中发生该错误的场景 分析 我们在某些场景下报错如下 at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.Applicati...
Mr_Qi 发布于 21小时前 阅读 143 评论 1 点赞 2

MySQL连接配置文件密码加密及其在多种连接池上的应用

为了安全,连接数据库的配置文件中,如密码等信息需要采用密文的形式存放。 本文将给出多种连接池数据库密码密文存放的实现~ 如何配置数据库密码加密访问数据库? 将配置文件用户相关的信息(例如:密码)进行加密使其以密文形式存在,进行初始化连接池的时候进行解密操作,达到成功创建连接池的目的。 接下来,我们完成如下几个连接池采用数据库密文存储的实现: DBCP连接池 C3P0连接池 Druid连接池 DBCP连接池 数据库属性文件database.properties 配置数据库属性文件, 配置数据库连接的密码(jdbc.password)设置为加密后的值,该值可以采用AES、DES、3DES等对称加密方式实现,也可以采用RSA的加密算法存储~ # jdbc.driverClassName jdbc.driverClassName=com.mysql.jdbc.Driver # Database URL jdbc.url=jdbc:mysql://127.0.0.1:3306/abc?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull jdbc.username=abc jdbc.password=YpIADNvyi+/X2O33wS5E9SaEVKZgKuS70X8kgxgioEJ7+7KccS8aVmFIWndJ83NsUebDkb+w94HM3xCyjnjg4Q== # Time to wait for an open connection before timing out # (in milliseconds) cpool.checkoutTimeout=5000 # Conne...
王孟君 发布于 21小时前 阅读 152 评论 1

掌握python机器学习-读书笔记 5 (评估算法)

如果你想知道你的算法的性能。 最好的办法就是对已知结果的数据进行预测比较, 第二呢, 就是用统计学更加聪明的办法,比如重采样来让你做精准的估计。 本章就是提供一些相关的办法。
zzbbnj 发布于 21小时前 阅读 139 点赞 1

疯狂Spring Cloud连载(27)Apache Kafka框架

Spring Cloud Kafka
杨大仙的程序空间 发布于 22小时前 阅读 193 评论 1 点赞 1

前途光明的机器学习将走向何方?这里有 5 个关于它的未来预测

关于机器学习的 5 个未来预测
编辑部的故事 发布于 23小时前 阅读 1859 评论 5 点赞 1

Erlang源码阅读笔记之proc_lib 下篇

## hibernate组 hibernate组只有一个实现,即hibernate/3,但是在搞明白proc_lib的hibernate实现细节之前,需要先弄清楚erlang:hibernate/3的运行机制。 erlang:hibernate/3会使当前进程立即陷入到waiting状态,并即刻进行垃圾回收,只有当进程接收到消息的时候才会从waiting状态恢复,并从指定的回调函数开始运行,之前的进行栈信息,hibernate会全部丢弃。写个测试代码: ``` test_hibernate() -> Pid = spawn( fun() -> receive Msg -> io:format("Before hibernate, I received msg: ~p~n", [Msg]) end, try erlang:hibernate(?MODULE, a, []) catch Type:Reason -> io:format("Catch exception: ~p:~p~n", [Type, Reason]) end end ), io:format("before hibernate, heap size: ~p~n", [process_info(Pid, total_heap_size)]), Pid ! "hi", timer:sleep(1000), io:format("in hibernate, heap size: ~p~n", [process_info(Pid, total_heap_size)]), Pid ! 1, timer:sleep(1000), io:format("after weakup, heap size: ~p~n", [process_info(Pid, total_heap_size)]), Pid ! 0, timer:sleep(1000), io:format("after exception happend, heap size: ~p~n", [process_in...
chihz 发布于 1天前 阅读 99

iOS—生成framework的shell脚本,生成的SDK可以嵌到项目里运行,编译发布

set -e pod install pod update rm -fr build mkdir -p build/Output xcodebuild \   -workspace "xxxx(替换SDK的名字).xcworkspace" \   -scheme "xxxx(替换SDK的名字)" \   -derivedDataPath build \   -arch armv7 -arch armv7s -arch arm64 \   -sdk iphoneos \   ONLY_ACTIVE_ARCH=NO \   -configuration Release \   -IDEBuildOperationMaxNumberOfConcurrentCompileTasks=4 \   OTHER_CFLAGS="-fembed-bitcode" \   build \   CODE_SIGN_IDENTITY="" \   CODE_SIGNING_REQUIRED=NO xcodebuild \   -workspace "xxxx(替换SDK的名字).xcworkspace" \   -scheme "xxxx(替换SDK的名字)" \   -derivedDataPath build \   -sdk iphonesimulator \   -destination 'platform=iOS Simulator,name=iPhone 6' \   ONLY_ACTIVE_ARCH=NO \   -configuration Release \   -IDEBuildOperationMaxNumberOfConcurrentCompileTasks=4 \   OTHER_CFLAGS="-fembed-bitcode" \   build \   CODE_SIGN_IDENTITY="" \   CODE_SIGNING_REQUIRED=NO rm -f build/Output/libactor.so lipo -create "build/Build/Intermediates/xxxx(替换SDK的名字).build/Release-i...
ArtemisFang 发布于 1天前 阅读 49

从lombok想到的行号问题

背景 lombok 是近几年来声名鹊起的java效率提升利器,对于lombok一直只是在某些开源项目中可以看到。在自身的开发中并未使用。在github上确实使用者还比较可观 主要一直认为存在如下问题 自动生成不够直观 必须IDE支持 行号对不上 一直认为行号对不上是最大的问题===》but错误的认知【想要认识到自己的错误还是要花点时间的~】 国外也有小伙伴表达了同样的担忧 https://stackoverflow.com/questions/37908097/line-numbers-generation-with-lombok 解释 首先了解lombok的原理 原理 自从Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候得到调用。 举例来说,现在有一个实现了"JSR 269 API"的程序A,那么使用javac编译源码的时候具体流程如下: 1)javac对源代码进行分析,生成一棵抽象语法树(AST) 2)运行过程中调用实现了"JSR 269 API"的A程序 3)此时A程序就可以完成它自己的逻辑,包括修改第一步骤得到的抽象语法树(AST) 4)javac使用修改后的抽象语法树(AST)生成字节码文件 详细的流程图如下: lombok本质上就是这样的一个实现了"JSR 269 API"的程序。在使用javac的过程中,它产生作用的具体流程如...
Mr_Qi 发布于 1天前 阅读 141 评论 1

Erlang源码阅读笔记之proc_lib 上篇

## 概述 在erlang otp源码中,随处可见proc_lib的身影,可以发现,在otp中spawn一个进程,都不是通过erlang:spawn函数,而是通过proc_lib:spawn。那通过这俩库spawn出的进程有啥区别呢?我们要理解erlang otp其它组件的源码,必须要先去了解proc_lib做了什么事情。 官方文档对proc_lib的解释是这样的: > Functions for asynchronous and synchronous start of processes adhering to the OTP design principles. 就是说proc_lib提供符合OTP设计原则的同步或异步进程启动函数。关于OTP设计原则,后续会单开一篇进行讲述,它大致描述了一系列的代码组织标准,包括进程、模块以及项目目录组织结构等等。通过proc_lib启动的进程,会容易符合这种设计原则的要求。 proc_lib开放的API很多,但基本可以分成spawn、start、hibernate、init_ack、init_p、format、initial_call、stop这几组,下面我们一组一组的来看。 ## spawn 组 spawn组的函数有spawn/1, spawn_link/1, spawn/2, spawn_link/2, spawn/3, spawn_link/3, spawn/4, spawn_link/4, spawn_opt/2, spawn_opt/3, spawn_opt/4, spawn_opt/5 先看最为简单的spawn/1: ``` -spec spawn(Fun) -> pid() when Fun :: function()...
chihz 发布于 1天前 阅读 91

SpringCloud系列:服务注册与发现、负责均衡、hystrix服务降级的实现

基于Eureka注册服务提供者和消费者,使用Feign、Ribbon、Hystrix实现服务间的调用、负载均衡及服务熔断和降级功能
闲等莫 发布于 1天前 阅读 327 打赏 1

多台filebeat+ELK模拟记录

有朋友想了解多台filebeat,这里做了个尝试,特记录备份。
看着星空的状态 发布于 1天前 阅读 195

MyBatis插件小知识点

背景 mybatis作为一款十分优秀的orm框架在大量的互联网应用中得到使用。其提供了比较完善的插件扩展机制 通常我们会使用插件做到许多共通的事情 比如 慢sql记录 sql性能记录 db主从 分页 乐观锁等 那么简单剖析一下mybatis的插件机制 分析 从本质上来说这也仍然是一个动态代理的过程。一般来说我们可以采用java proxy或者aspectj等来实现 mybatis的插件同样是利用了java的proxy来实现 一个典型的mybatis插件会实现Interceptor类 但是整个故事是从Plugin开始的 来简单看一下Plugin public class Plugin implements InvocationHandler { private final Object target; private final Interceptor interceptor; private final Map<Class<?>, Set<Method>> signatureMap; private Plugin(Object target, Interceptor interceptor, Map<Class<?>, Set<Method>> signatureMap) { this.target = target; this.interceptor = interceptor; this.signatureMap = signatureMap; } public static Object wrap(Object target, Interceptor interceptor) { Map<Class<?>, Set<Method>> signatureMap = getSignatureMap(interceptor); Class<?> t...
Mr_Qi 发布于 1天前 阅读 332

一篇文章看懂爬虫

爬虫的本质、webmagic
冷血狂魔 发布于 19小时前 阅读 244

自学编程,十年磨一剑

原文链接 [Teach Yourself Programming in Ten Years](http://norvig.com/21-days.html) 作者 Peter Norvig 原文几经修改,[已有的翻译](http://blog.jobbole.com/22905/) 惨不忍睹,多处翻译的背道相驰,怒而重新翻译,是为此文。2017.11.5 ### 为什么每个人都如此急于求成? 在任何书店里你都能看到类似于《24 小时 Java 无师自通》这样的书,以及旁边无穷无尽的变种,试图教你在短时间内学会 C、SQL、Ruby、算法等等技能。 我在亚马逊在线书店搜索“自学”“小时”“2000年以后出版”等关键字,找到了 512 本类似书籍。前十名有九个都是编程书。 似乎一切都昭示着,要么当下人们迫切地想学会编程,要么学会编程是相当容易的一件事。在其他领域里,你很难找到诸如此类的书,甚至是《狗狗喂养指南》都鲜有“几日速成”这种说法。你不奇怪吗? 是的,Felleisen 等人也注意到了,他们的著作[《如何设计程序》](http://www.ccs.neu.edu/home/matthias/HtDP2e/index.html)里提到了这种速成书泛滥的趋势,并给出评论“拙劣的编程水平确实相当容易达成。傻子都能在 21 天里学会,哪怕他们天生就是个白痴。”。Abtruse Goose 的漫画[《如何自学编程》](http://abstrusegoose.com/...
傅易 发布于 20小时前 阅读 220 点赞 1

快速了解人工智能结晶之语音转换文字

科技解放生产力,人工智能的应用如今是大热,那么今天就来给各位介绍一下IBM在这方面的一个小的尝试,语音转换文字。咱们来看一看相较于传统的转换,结合Watson的IBM是如何做到让识别率飙升的。
IBM Bluemix

深入理解JVM原理之编译openjdk7

        Java虚拟机种类很多例如:HotSpot 丶 JRockit 丶 J9等 我们一般用的就是HotSpot,如果我们电脑上装了JDK,可以运行java -version查看相关信息 java -version java version "1.7.0_71" Java(TM) SE Runtime Environment (build 1.7.0_71-b14) Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode) 之前想着编译openjdk7,但是试过windows系统,linux系统,各种不如意,尤其是windows系统操作起来比linux更复杂,最后不得不放弃,centos试过,redhat也试过,各种不行 ,简直要吐血, 不过苍天不负有心人,经过一周的不断尝试,终于使用Ubuntu16.04.3搞定. 准备阶段: ①.需要安装的:使用 apt-get install 命令 build-essential gawk libasound2-dev libcups-dev libxrender-dev xorg-dev ant(1.7以上) libxtst-dev libxi-dev libxt-dev ②.openjdk7 , jdk6 我使用的jdk6为:jdk-6u45, ③.将CurrencyData.properties文件中的日期一定要改成10年内, 否则在编译过程中会报错从而导致编译失败: Error: time is more than 10 years from present: 1136059200000 文件位置:  /usr/openjdk/jdk/src/share/classes/java/util/CurrencyData.properties 开始编译: ①.进...
大大的微笑 发布于 10小时前 阅读 179

如何愉快的使用MQ-详述各种功能场景

  消息队列(MQ)是一种不同应用程序之间(跨进程)的通信方法。应用程序通过写入和检索出入列队的数据(消息)来通信,而无需通过专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用(Remote Procedure Call. RPC)的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。这样天然的就实现了异步的目标。那么MQ还有哪些功能场景呢。下面逐一介绍。 解耦 解耦.png MQ最直接的使用场景就是可以将两个系统进行解耦,比如我们的货款抵扣业务场景,用户生成订单发送MQ后立即返回,结算系统去消费该MQ进行用户账户金额的扣款。这样订单系统只需要关注把订单创建成功,最大可能的提高订单量,并且生成订单后立即返回用户。而结算系统重点关心的是账户金额的扣减,保证账户金额最终一致。这个场景里面还会涉及到重试幂等性问题,后面有介绍。 削峰填谷 还是以订单系统和结算系统场景为例,如果订单系统通过RPC框架来调用结算系统,在有高峰促销的情况下生成订单的量会非常大,而且由于生成订单的速度也非常快,这样势必会给结算系统造成系统压力,...
新栋BOOK 发布于 10小时前 阅读 161 评论 1 点赞 1

Google、IBM和Lyft开源的微服务管理框架Istio安装与试用

使用istio可以很简单的创建具有负载均衡、服务间认证、监控等功能的服务网络,而不需要对服务的代码进行任何修改。你只需要在部署环境中,例如Kubernetes的pod里注入一个特别的sidecar proxy来增加对istio的支持,用来截获微服务之间的网络流量。 目前版本的istio只支持kubernetes,未来计划支持其他其他环境。
tqyin 发布于 8小时前 阅读 89

Git提交历史的修改删除合并

今天主要针对在项目版本控制器Git的使用中遇到的一些和提交历史操作相关的常见问题,进行实践总结。在项目开发中经常会需要修改提交commit信息,合并多个提交commit,甚至放弃当前修改回退至某一历史提交的需求,那我们到底该如何操作呢,本篇一一阐述。
熊建刚 发布于 5小时前 阅读 71

SpringCloud系列:利用Zuul实现统一服务网关服务,简单实现IP白名单功能

本文基于SpringCloud Zuul实现统一网关服务、请求校验等功能,最后通过zuul过滤器实现IP白名单功能
闲等莫 发布于 3小时前 阅读 44

Spring Cloud Stream 简明教程(持续更新)

Spring Cloud Stream 版本是:Ditmars.RELEASE 有错误的地方欢迎指出
-_-一条狗 发布于 3小时前 阅读 43

java中的匿名内部类总结

摘自 http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html
oswebgod 发布于 23小时前 阅读 36

Nginx日志配置及分割

1. 格式化日志内容 2. 日志文件切割
tianshl 发布于 3小时前 阅读 44

大数据量 SQL update语句优化

目前在项目数据迁移的过程中遇到了大数据量update的情景。发现了一些好方法,一起分享给大家。
梨加橙 发布于 23小时前 阅读 18

SpringBoot实战 - Spring Initializr几种用法

Spring Initializr从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构。虽 然不能生成应用程序代码,但它能为你提供一个基本的项目结构,以及一个用于构建代码的 Maven或Gradle构建说明文件。你只需要写应用程序的代码就好了。 Spring Initializr有几种用法。  通过Web界面使用。  通过Spring Tool Suite使用。  通过IntelliJ IDEA使用。  使用Spring Boot CLI使用。 1、使用Spring Initializr的Web界面 要使用Spring Initializr,最直接的办法就是用浏览器打开http://start.spring.io,你应该能看到类似图1-1的一个表单。 表单的头两个问题是,你想用Maven还是Gradle来构建项目,以及使用Spring Boot的哪个版 本。程序默认生成Maven项目,并使用Spring Boot的最新版本(非里程碑和快照版本),但你也可 以自由选择其他选项。 表单左侧要你指定项目的一些基本信息。最起码你要提供项目的Group和Artifact,但如果你 点击了“Switch to the full version”链接,还可以指定额外的信息,比如版本号和基础包名。这些 信息是用来生成Maven的pom.xml文件(或者Gradle的build.gradle文件)的。     图1-1 Spring Initializr是生成空Spring项目的Web应用程序...
乐冉 发布于 19小时前 阅读 12

easyUI动态表头

如上图,实现月份、日期、累积日期动态生成,然后再产生数据。 jsp页面:result1就是后台生成的表头。 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <div id="toolbar1"> <div> <lable>条件1 </lable> <select id="num1" class="easyui-combobox" name="num1" data-options="editable:false,required:'true'"> </select> <lable>条件2 </lable> <select id="num2" class="easyui-combobox" name="num2" data-options="editable:false,required:'true'" style="width:150px;"> </select> <a href="javascript:void(0)" onclick="dyTableQuery()" class="easyui-linkbutton" data-options="iconCls:'icon-search'">查询</a> </div> </div> <table id="table1"></table> <script type="text/javascript"> $("#num1").combobox({ width : 120, url : 'queryNum/getNum1.do', panelHeight : 'auto', valueField : 'value1', textField : 'value1', onSelect : function(result) { $("#num2").combobox({ width : 150, url : 'queryNu...
garkey 发布于 19小时前 阅读 11

word转pdf

word文档转pdf
至尊堡 发布于 4小时前 阅读 10

坐拥IT高薪职位必备底层知识系列——socket(套接字)专题,网络编程必读

【名词解释】 Internet  因特网。专指从ARPANET发展而来的连接全球各广域网的唯一网络。 Internet Protocol  网际协议。 IPv4  网际协议第4版。 IPv6  网际协议第6版。 TCP/IP  传输控制协议/网际协议。 因特网是互联网的一种(最大的互联网),但互联网并不等同于因特网。     【套接字相关的基础知识】   》》》》》》》》》》》》》》》》》》》》 套接字:一种抽象概念或者框架,各操作系统与编程语言对其有不同的实现。   套接字接口:本地(宿主)操作系统提供给客户端以及服务器应用程序进程访问本地的套接字数据结构(等价于和底层操作系统通信)时必须使用的指令集。通常以套接字接口函数的形式存在,供应用程序开发者调用。 套接字接口是网络通信 API 的一种;网络通信 API 的实现有很多种,例如:套接字接口,传输层接口(TLI),STREAM等。 必须指出:在 TCP/IP 协议簇分层中,分组(数据报)或由应用程序产生的字节流数据,在同一个主机的应用层与传输层之间不能直接传递,而是需要传输环境(操作系统)提供的传输对象,载体(套接字数据结构)与传输手段(套接字接口)。 例如,开发人员想开发一个运行在某操作系统环境中,具备网络通信功能的应用程序...
slagga 发布于 9小时前 阅读 10

Mac WebStorm 如何使用具体ip访问网页

WebStorm运行网页后,默认的开头地址是:http://localhost:63342/。。。 ,默认端口号是:63342, 如果我们直接将localhost改成我们电脑网络具体ip地址出现访问失败,这时候可以通过修改端口号来解决这个问题,修改过后,重新运行,效果图如下: 进入WebStorm偏好设置修改端口号  
04zhujunjie 发布于 2个月前 阅读 57

开源项目综合案例

# 目录介绍 * 1.关于前言介绍 * 2.关于接口说明 * 3.关于模块说明 * 4.关于相关特性说明 * 5.关于部分功能说明 * 6.关于开源项目说明 * 7.关于参考项目说明 * 8.关于版本更新说明 * 9.关于获取更多信息 * 10.App图片展示 * 11.关于其他说明 * 12.关于云测试情况 * 13.关于bug管理说明 * 14.关于我的博客 ### 0.关于博客笔记大整理,持续更新迭代 - 可以直接看:[博客笔记](http://www.jianshu.com/p/53017c3fc75d) - **如果你感觉还行,请给一个star,如果你觉得哪里有问题,也可以直接把问题提给我,我会修改的。业余的小案例,定期更新,持续更新** - #### 代码地址:https://github.com/yangchong211/LifeHelper - [说明及截图](https://github.com/yangchong211/LifeHelper/blob/master/README.md) - 模块:新闻,音乐,视频,图片,唐诗宋词,快递,天气,记事本,阅读器等等 - 接口:七牛,阿里云,天行,干货集中营,极速数据,追书神器等等 ### 1.关于前言介绍 - 关于开发的APP有:[投资界](http://openbox.mobilem.360.cn/index/d/sid/3583538),[新芽](http://openbox.mobilem.360.cn/index/d/sid/3425699),可以在应用市场上下载 - 此项目属于业余时间练手的项目...
潇湘剑雨 发布于 1天前 阅读 7

Tomcat架构具体配置与Zrlog网站安装

# 16.4 配置Tomcat监听80端口 ## 编辑Tomcat配置文件 ``` [root@localhost ~]# vim /usr/local/tomcat/conf/server.xml ……#搜索8080,修改下面的内容位80 …… ``` ## 重启服务 ``` [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh [root@localhost ~]# /usr/local/tomcat/bin/startup.sh ``` ## 查看服务 ``` [root@localhost ~]# ps aux |grep tomcat [root@localhost ~]# netstat -lntp |grep java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2716/java tcp6 0 0 :::8009 :::* LISTEN 2716/java [root@localhost ~]# netstat -lntp |grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1825/nginx: master tcp6 0 0 127.0.0.1:8005 :::* LISTEN 2716/java tcp6 0 0 :::8009 :::* LISTEN 2716/java # 这时的Tomcat服务正常运行,但是没有监听端口。因为监听80端口的是nginx服务,如果想让Tomcat监听80端口,需要关闭nginx服务,然后重启Tomcat服务。 ``` ## 关闭服务,重启 ``` [root@localhost ~]# systemctl stop nginx.service [root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh [root@localhost ~]# /usr/local/tomcat/bin/startup.sh 检查 [root@localhost ~]...
周云台 发布于 21小时前 阅读 7

博客实现代码高亮

1、highlight.js 官网:https://highlightjs.org/ 介绍:  –支持 71 种编程语言的语法解析  –拥有 44 种样式  –自动检测编程语言  –同时为多种编程语言代码高亮  –可以在 node.js 平台上运行  –支持各种标签  –与任何 js 框架兼容
xiaoge2016 发布于 12小时前 阅读 7

Lua 和 Python 相比,哪种语言更快更好

网上经常看到别人拿lua与python来进行对比,但是,本人认为,lua与python根本就不具有可比性.原因如下: 1、两者的定位不同。python的定位在于自身的独立开发,即是说python定位于自己能解决所有的问题。lua定位在与其它的代码,尤其是C++代码进行相互配合的编译,单独的Lua本身没有任何的意义。 2、站在解决问题的角度上看。python依靠自身越来越强大的库,让编程者能实现越来越多,越来越复杂的问题。lua本身则必须与其它的编译语言结合,才能解决问题。以C+++lua来举例。单独的C++,因为C++的复杂性,在其解决问题提供方便的同时,也给程序员带来了很大的麻烦,这些麻烦主要有两个方面:1,C++本身,特别是能用好C++,对程序员就来说就是一个很高的要求。2,在解决复杂问题时,C++程序结构的复杂性和逻辑实现的复杂性,给程序员对程序的改进和维护带来了很大的麻烦。而C++与Lua的结合,让C++可以只负责为lua提供各种基本的功能函数库,而Lua调用这些库来实现各种逻辑功能。这种分工可以让程序员将程序中的基本代码库和逻辑实现代码进行分离,使程序的效率和可维护有了很大的提高。所以,如果真的要站在解决问题的角度来对python和lua进行对比的话。实际上,是C++与python进行...
小欣妹妹 发布于 7小时前 阅读 7

Spring boot + LayIM + t-io 好友申请通知的实现

本文包含内容:用户主页面信息加载,绑定。好友申请,t-io服务端主动推送,layim消息盒子的数据绑定。
丶Pz 发布于 6天前 阅读 2845 评论 20 点赞 6

2017 前端大事件和趋势回顾,2018 何去何从?

2017年,前端开发继续飞速发展。以下是在过去的一年中非常值得关注的一些事件和趋势整理,主要参考了国内外的一些报道和文章,希望能对大家在思考 2018 年的趋势和走向上有所帮助。欢迎指正、评论和补充。 1、React 16 和 MIT 许可证 2017年,React 继续在前端领域占据主导地位,备受期待的 React 16 也正式发布。该版本包含可实现异步 UI 渲染的 fiber 架构,以及更便捷的错误管理。 不过,React 更引人关注的不是其新特性,而是开源许可证的更改。Facebook 放弃了导致很多企业拒绝使用其开源项目的 BSD+专利许可模式,并采用了对用户友好的 MIT 许可证。同时,Jest、Flow、Immutable.js 和 GraphQL 等项目也更改为了 MIT 许可证。 >> 相关阅读: React 16.0.0 发布,去除专利条款,改用 MIT 许可证 Facebook 被集体“声讨”,要求更改 ReactJS 许可 2、下一代 Web 应用模型 — PWA PWA(Progressive Web App)是 Google 于 2016 年提出的概念,2017 年已被迅速采用。PWA 旨在增强 Web 体验,可显著提高加载速度、可离线工作、可被添加至主屏、全屏执行、推送通知消息等等。这些特性将使得 Web 应用渐进式接近原生 App。 >> 相关阅读: 您的第一个 Progressive Web Ap...
编辑部的故事 发布于 6天前 阅读 4668 评论 15 点赞 10 打赏 1

logback是怎么知道java代码的行数的?

使用logback,忽然想到这个问题,然后问了几个同事都没研究过,我来看看logback是如何知道的 打断点如下: stop in com.sql.mysql.sharding.plugin.ExecutorInterceptor.intercept stop in ch.qos.logback.classic.Logger.callAppenders stop in ch.qos.logback.core.encoder.LayoutWrappingEncoder.encode encode的java函数如下: public byte[] encode(E event) { String txt = layout.doLayout(event); return convertToBytes(txt); } 那么layout的值是啥呢? main[1] print layout layout = "ch.qos.logback.classic.PatternLayout("%level %date , %logger{36} [%file:%line] , Thread-[%thread] - %msg%n")" 就是我们自己定义的格式,好,继续往下走。 碰到了这个函数 ​ protected String writeLoopOnConverters(E event) { StringBuilder strBuilder = new StringBuilder(INTIAL_STRING_BUILDER_SIZE); Converter<E> c = head; while (c != null) { c.write(strBuilder, event); c = c.getNext(); } return strBuilder.toString(); } ​ 这里看来是做了一个字...
强子哥哥 发布于 6天前 阅读 1773 评论 15 点赞 7

Redis 分布式锁

redis分布式锁
NoComments 发布于 3天前 阅读 483 评论 4 点赞 1

Spring Boot: 加密应用配置文件敏感信息

应用中会存在多个需要配置敏感信息(比如stfp等),都需要加密,类似于druid加解密方式依赖于工具类的实现,没有统一的加解密标准,麻烦、而且不好维护。
冷冷gg 发布于 2天前 阅读 492 评论 9 点赞 1

Python随机生成手机号

### 依据 ``` 根据2017年10月份最新的手机号正则进行编码, 正则如下: (13\d|14[579]|15[^4\D]|17[^49\D]|18\d)\d{8} ``` ### 代码 ``` # -*- coding: utf-8 -*- import random def create_phone(): # 第二位数字 second = [3, 4, 5, 7, 8][random.randint(0, 4)] # 第三位数字 third = { 3: random.randint(0, 9), 4: [5, 7, 9][random.randint(0, 2)], 5: [i for i in range(10) if i != 4][random.randint(0, 8)], 7: [i for i in range(10) if i not in [4, 9]][random.randint(0, 7)], 8: random.randint(0, 9), }[second] # 最后八位数字 suffix = random.randint(9999999,100000000) # 拼接手机号 return "1{}{}{}".format(second, third, suffix) # 生成手机号 phone = create_phone() print(phone) ``` ### 运行结果 ``` 13937342780 15835720604 14589505530 ... ``` ### 验证 (使用正则验证) ``` # -*- coding: utf-8 -*- import random import re def create_phone(): # 第二位数字 second = [3, 4, 5, 7, 8][random.randint(0, 4)] # 第三位数字 third = { 3: random.randint(0, 9), 4: [5, 7, 9][random.randint(0, 2)], 5: [i for i in range(10) if i != ...
tianshl 发布于 1周前 阅读 24310

JavaScript指定长度和进制的UUID

### 指定长度和进制的UUID ``` /** * 指定长度和进制的UUID * @param len 长度 * @param radix 进制 * @returns {string} */ function uuid(len, radix) { var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); var uuid = [], i; radix = radix || chars.length; if (len) { for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix]; } else { var r; uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'; uuid[14] = '4'; for (i = 0; i < 36; i++) { if (!uuid[i]) { r = 0 | Math.random()*16; uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; } } } return uuid.join(''); } ``` ### 测试 ``` uuid(32, 2) "11110011000001100111011111001111" uuid(32, 8) "31730315503322654076326054034634" uuid(32, 10) "50235847867589708943975575132412" uuid(32, 16) "405F8CA9918F71FC9C73DACB47CEC6EE" ```...
tianshl 发布于 2周前 阅读 66345

javacsv读写csv文件

### 添加依赖 ``` net.sourceforge.javacsv javacsv 2.0 ``` ### 读文件 ``` CsvReader reader = null; String row; String path = "./tmp/read.csv"; try { reader = new CsvReader(path, ',', Charset.forName("GBK")); // 跳过表头(需要表头就不用跳过) reader.readHeaders(); while (reader.readRecord()) { // 读取每行数据 row = reader.getValues(); System.out.println(row); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (reader != null) { reader.close(); } } catch (Exception e) { e.printStackTrace(); } ``` ### 写文件 ``` CsvWriter csvWriter = null; String path = "./tmp/write.csv"; try { csvWriter =new CsvWriter(path,',', Charset.forName("GBK")); // 写入一行数据 csvWriter.writeRecord(new String[]{"张三", 18, "男"}); } catch (Exception e) { e.printStackTrace(); } finally { try { if (csvWriter != null) { csvWriter.close(); } } catch (Exception e) { e.printStackTrace(); } } ``` ### 备注 ##### 参考文档 [JavaCSV API](http://javacsv.sourceforge.net/) ``` http://javacsv.sourceforge.net/ `...
tianshl 发布于 1个月前 阅读 199207 点赞 1

MacOS 配置Java环境变量

### 编辑 bash_profile ```shell vim ~/.bash_profile 输入以下内容并保存 export JAVA_HOME=`/usr/libexec/java_home` export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin ``` ### 使环境变量生效 ``` source ~/.bash_profile ``` ### 检验 ```shell tianshl@tianshl ~ $ echo $PATH ``` ### 备注 ``` 1. source前使用fish的要先退出fish 2. /usr/libexec/java_home 这条命令可以输出JAVA_HOME的路径 ```
tianshl 发布于 2周前 阅读 81408 点赞 1

Python库打包到PyPI

### 打开pypi官网, 并注册账号 ``` https://pypi.python.org/ ``` ### 创建并编辑.pypirc (注: 家目录下创建) ``` tianshl@tianshl ~ $ vim .pypirc [pypirc] index-servers = pypi pypitest [pypi] repository=https://pypi.python.org/pypi [pypitest] repository=https://testpypi.python.org/pypi [server-login] username:tianshl password:****** ``` ### 前提 ``` 1. 要打包的代码必须是一个包(package) 2. 代码是开源的 ``` ### 包(package) ##### 创建包 ``` 右键 / New / Python Package / 输入包名 / OK ``` ##### 创建成功后,查看目录结构 ``` tianshl@tianshl wechat $ tree . └── wxReply └── __init__.py 实际上就是文件夹中包含__init__.py文件 ``` ### 编写要打包的源代码 ``` tianshl@tianshl wechat $ tree . └── wxReply ├── __init__.py └── wxReply.py 1 directory, 2 files ``` ### 创建README.rst和setup.py文件 ``` README.rst为说明文档 setup.py为安装脚本 (核心) ``` ##### 此时wechat包的目录结构 ``` tianshl@tianshl wechat $ tree . ├── README.rst ├── setup.py └── wxReply ├── __init__.py └── wxRepl...
tianshl 发布于 1个月前 阅读 204057 评论 1 点赞 1

image not recognized

image not recognized
tianshl 发布于 2个月前 阅读 347208 点赞 1

java递归删除文件或文件夹

```java /** * 递归删除文件或文件夹 * * @param file 文件或文件夹 */ public void delFile(File file) { if (!file.exists()) { return; } if (file.isFile()){ // 文件: 直接删除 file.delete(); } else if (file.isDirectory()) { // 文件夹 // 1. 删除子文件 for (File f: file.listFiles()){ delFile(f); } // 2. 删除文件夹 file.delete(); } } ```
tianshl 发布于 1个月前 阅读 199675 点赞 3

xxx is not in the sudoers file

### 问题 ``` 无法使用sudo指令 ``` ### 方法一 ``` 1. 查找sudoers位置(默认会在/etc/sudoers) [tianshl@tianshl ~]# whereis sudoers sudoers: /etc/sudoers /etc/sudoers.bak /usr/share/man/man5/sudoers.5.gz 2. 切换到root身份 [tianshl@tianshl ~]# su - 3. 修改sudoers权限 [root@tianshl ~]# chmod u+w /etc/sudoers 4. 把用户添加到sudoers中 [root@tianshl ~]# vi /etc/sudoers 1. 找到 "root ALL=(ALL)" 2. 另起一行输入 "tianshl ALL=(ALL) ALL" 备注:tianshl为用户名 修改后如下所示: ## Allow root to run any commands anywhere root ALL=(ALL) ALL tianshl ALL=(ALL) ALL 5. 去掉sudoers的写权限 [root@tianshl ~]# chmod u-w /etc/sudoers 6. 退出root用户后就可以利用sudo命令来执行管理员权限了。 ``` ``` 注:如果不去掉写权限,系统不允许执行suoders文件,运行sudo命令时会出现以下错误: sudo: /etc/sudoers is mode 0640, should be 0440 ``` ### 方法二 ``` 1.首需要切换到root身份 [tianshl@tianshl ~]# su - 2. 执行visudo [root@tianshl ~]# visudo 1、移动光标,到最后一行 2、按a,进入append模式 3、输入 "tianshl ALL=(ALL) ALL" 备注...
tianshl 发布于 1个月前 阅读 215559 点赞 1

Vue集成Iframe页面

这个一个很恶心的需求,Vue中要集成那种iframe的页面
龙马行空 发布于 3天前 阅读 300 评论 1 点赞 2

Java 线程的中断机制

线程中断机制提供了一种方法,用于将线程从阻塞等待中唤醒,并作出相应的“超时中断”或“受控中断”处理。受控线程应当对中断作出响应。而 Java 留给开发者这一自由,我们应当予以善用。
傅易 发布于 4天前 阅读 351 评论 2

Vue中使用axios的一些注意点

1. 基本使用 现在我们的团队使用的基本都是axios发起请求,使用方式如下 在service.js文件中返回promise对象 import config from '@/config' import axios from 'axios' export default{ /*启用停用*/ setB2bStoreGoodsBlackUpOrDown(data) { return new Promise(function (resolve, reject) { const url = `${config.server.http}${config.server.host}/b2b-seller-admin/setStoreGoodsBlackUpOrDown` axios.post(url, data) .then(function (data) { resolve(data) }) .catch(function (error) { reject(error) }) }) }, /*一个接口查黑名单*/ getListB2bCanaleStoreGoodsBlacks(data) { return new Promise(function (resolve, reject) { const url = `${config.server.http}${config.server.host}/b2b-seller-admin/page/getListCanaleStoreGoodsBlacks` axios.post(url, data) .then(function (data) { resolve(data) ...
龙马行空 发布于 6天前 阅读 1432 评论 17 点赞 2

docker清理

随着docker的操作,本来硬盘资源就多的情况下,占用很快超过一半,遂想办法清理空间。
dingdayu 发布于 4天前 阅读 246 点赞 1

Spring Cloud(六)服务网关 zuul 快速入门

服务网关是微服务架构中一个不可或缺的部分。通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。
鹏磊 发布于 2天前 阅读 188

《Java应用架构设计:模块化模式与OSGi》读书笔记

> 本文为读书笔记,对书中内容进行重点概括,并将书中的模块化结合微服务、Java9 Jigsaw谈谈理解。 # 本书概括 以Java软件系统为例,重点讲解了应用架构中的物理设计问题,即如何将软件系统拆分为模块化系统。所以内容组织包括为什么需要模块化,围绕如何实现模块化讲述了模块化模式,最后在模块化基础上使用OSGi技术实现动态模块化。
hebaodan 发布于 4天前 阅读 242

分布式实时日志分析解决方案ELK部署架构

一、概述 ELK 已经成为目前最流行的集中式日志解决方案,它主要是由Beats、Logstash、Elasticsearch、Kibana等组件组成,来共同完成实时日志的收集,存储,展示等一站式的解决方案。本文将会介绍ELK常见的架构以及相关问题解决。 Filebeat:Filebeat是一款轻量级,占用服务资源非常少的数据收集引擎,它是ELK家族的新成员,可以代替Logstash作为在应用服务器端的日志收集引擎,支持将收集到的数据输出到Kafka,Redis等队列。 Logstash:数据收集引擎,相较于Filebeat比较重量级,但它集成了大量的插件,支持丰富的数据源收集,对收集的数据可以过滤,分析,格式化日志格式。 Elasticsearch:分布式数据搜索引擎,基于Apache Lucene实现,可集群,提供数据的集中式存储,分析,以及强大的数据搜索和聚合功能。 Kibana:数据的可视化平台,通过该web平台可以实时的查看 Elasticsearch 中的相关数据,并提供了丰富的图表统计功能。 二、ELK常见部署架构 2.1、Logstash作为日志收集器 这种架构是比较原始的部署架构,在各应用服务器端分别部署一个Logstash组件,作为日志收集器,然后将Logstash收集到的数据过滤、分析、格式化处理后发送至Elasticsearch存储,最后使用Kibana进...
FEINIK 发布于 2周前 阅读 4740 评论 6 点赞 4

Windows下Nginx配置SSL实现Https访问(包含证书生成)

Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成)   首先要说明为什么要实现https?   HTTP全名超文本传输协议,客户端据此获取服务器上的超文本内容。超文本内容则以HTML为主,客户端拿到HTML内容后可根据规范进行解析呈现。因此,HTTP主要负责的是“内容的请求和获取”。问题就出在这部分。行监控、劫持、阻挡等行为很容易导致网站泄密,一些关键参数比如登录密码开发者会在客户端进行MD5加密,不过互联网所承载的机密信息远不只是密码,搜索内容同样属于敏感信息。现如今,百度、谷歌、Github等网站已经全站启用https,https就像是给网站上了一个“锁”,HTTPS做的就是给请求加密,让其对用户更加安全。对于自身而言除了保障用户利益外,还可避免本属于自己的流量被挟持,以保护自身利益。所以在我看来,终有一天HTTPS会实现全网普及。   下面进入正题。   说明:此教程适合已经配置好WNMP环境,并配置Virtualhost实现多站点的同学。如果您尚未配置,请参照我之前的文章进行配置。   实现Https首先需要向管理机构申请证书,而我们此次由于是练习目的,所以通过Openssl自己生成证书。首先我们需要用到...
j4love 发布于 38分钟前 阅读 1

ios实现颜色渐变的几种方法

  demo地址:https://github.com/xiaochaofeiyu/YSCAnimation 有用的话求个star,欢迎建议讨论。 1. CAGradientLayer实现渐变 CAGradientLayer是CALayer的一个特殊子类,用于生成颜色渐变的图层,使用较为方便,下面介绍下它的相关属性: colors 渐变的颜色 locations 渐变颜色的分割点 startPoint&endPoint 颜色渐变的方向,范围在(0,0)与(1.0,1.0)之间,如(0,0)(1.0,0)代表水平方向渐变,(0,0)(0,1.0)代表竖直方向渐变 CAGradientLayer *gradientLayer = [CAGradientLayer layer]; gradientLayer.colors = @[(__bridge id)[UIColor redColor].CGColor, (__bridge id)[UIColor yellowColor].CGColor, (__bridge id)[UIColor blueColor].CGColor]; gradientLayer.locations = @[@0.3, @0.5, @1.0]; gradientLayer.startPoint = CGPointMake(0, 0); gradientLayer.endPoint = CGPointMake(1.0, 0); gradientLayer.frame = CGRectMake(0, 100, 300, 100); [self.view.layer addSublayer:gradientLayer]; CAGradientLayer实现渐变标间简单直观,但存在一定的局限性,比如无法自定义整个渐变区域的形状,如环形、曲线形的渐变。 2. Core Graphics...
HillYoung 发布于 38分钟前

链接错误error LNK2019

链接提示error LNK2019: 无法解析的外部符号 __imp__****错误。
小吃店 发布于 43分钟前

vm centos 克隆后不能上网的解决方案

```shell # 本方法需重启 rm -rf /etc/udev/rules.d/70-persistent-net.rules for mac in `ifconfig -a | grep HWaddr | awk '{print $5}'` ;do sed -i s#^HWADDR=.*#HWADDR=$mac#g /etc/sysconfig/network-scripts/ifcfg-eth0 ;done reboot # 如果还不行,请检查其他配置 ```
柯里昂 发布于 55分钟前 阅读 3

bat命令编写

相关网站 先推荐一些学习BAT的网站,以下均是英文网站,自己在国内目前没有发现比较好的网站或者博文。如果大家发现了欢迎推荐给我! How To Write A Simple Batch (.bat) File  文章很简单, 很短 介绍BAT命令主要有TITLE ECHO ECHO OFF PAUSE CLS IPCONFIG PING等 Batch Script Samples  可算高级进阶 提供了很多脚本示例,比如FTP上传下载脚本等,还包括一些错误的例子,是进一步学习bat的好地方 Batch Script Generator  图形化BAT脚本生成器, 免费下载 很“懒”但很好,很适合非IT人员 Batch Script Tutorial  很好的入门网站,类似runoob.com和W3C网站 自己主要从这正入门的,但原文有一些基本的错误,比如  set str = helloworld 在设定字符串变量时,变量名str和=之间是不能有空格的,因为BAT会将后面的空格当作变量名的一部分,即变量名为str(空格),但如果是数值型变量,如set /A var = 123,var和=之间没有空格都行! <-- 笔者操作系统是win 7 专业版 极少的示例是错误的,这个读者比较容易发现 Windows Batch Scripting  这是wikibooks,权威性不用说了,精简但全面 Guide to Windows Batch Scripting  github上一位牛人的博客 bat学习--自动配置I...
Littlebox 发布于 59分钟前 阅读 1

第四节:Dockerfile的使用

百度的很多文章,不知道是我愚钝还是都是复制别人的,只讲Dockerfile语法,到底怎么用不知道,一脸懵逼
Object_小风 发布于 1小时前 阅读 2

Centos 下部署多个Tomcat 同时运行

经常在部署,需要在一台Centos 上部署多个Tomcat,本文档主要是介绍需要调整Tomcat哪些配置才可以袜。本文在一个Centos部署了三个Tomcat,必须先在Centos中完成JDK的安装及配置。 一、上传Tomcat压缩包到Centos下,并解压。 #解压 tar -zxvf /root/apache-tomcat-8.5.24.tar.gz -C /opt #跳转到解压目录 cd /opt #改文件夹名 mv apache-tomcat-8.5.24 tomcat1 按上面的步骤,解压三个tomcat分别到tomcat1,tomcat2,tomcat3三个目录中。 二、配置多Tomcat中的server.xml文件。 进入tomcat2、tomcat3的conf目录中,修改server.xml文件配置,tomcat1可以不修改。 先修改Tomcat2,通过以下命令进入修改 vi /opt/tomcat2/conf/server.xml 第一项修改 修改第22行,由 <Server port="8005" shutdown="SHUTDOWN"> 改为 <Server port="8015" shutdown="SHUTDOWN"> 第二项修改 修改第69行,由 <Connector port="8080" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443" /> 改为 <Connector port="8081" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectP...
阿刚ABC 发布于 1小时前 阅读 1

sql语句

### sql语句 SQL 对大小写不敏感! #### 重要sql DDL语句(数据定义) * **CREATE DATABASE** - 创建新数据库 * **ALTER DATABASE** - 修改数据库 * **CREATE TABLE** - 创建新表 * **ALTER TABLE** - 变更(改变)数据库表 * **DROP TABLE** - 删除表 * **CREATE INDEX** - 创建索引(搜索键) * **DROP INDEX** - 删除索引 #### 重要sql DML语句(数据操作) * **SELECT** - 从数据库表中获取数据 * **UPDATE** - 更新数据库表中的数据 * **DELETE** - 从数据库表中删除数据 * **INSERT INTO** - 向数据库表中插入数据 #### 常用sql语句 * **创建数据库** * CREATE DATABASE database_name * **创建数据库中的表** * CREATE TABLE IF NOT EXISTS table_name(id INTEGER PRIMARY KEY AUTOINCREMENT,searchType varchar,searchContent varchar,createTime datetime) * **插入数据** * **插入**:insert into table1(field1,field2) values(value1,value2) * INSERT INTO searchTable(searchType,searchContent) values("value1","value2") * 常用 * **选择**:select * from table1 where 范围 * **插入**:insert into table1(field1,field2) values(value1,value2) * **删...
古乙丁三雨 发布于 1小时前 阅读 1

spark RDD解读---第三谈

3 Spark编程接口    Spark用Scala语言实现了RDD的API。Scala是一种基于JVM的静态类型、函数式、面向对象的语言。不过操作RDD不限于函数式语言,像面向对象语言也可以类的函数.    在使用spark时,需要写driver程序来链接集群运行worker,如图二中每个集群中都会有自己的缓存和input data分布式存储系统中的数据。driver会定义一个或者多个RDD,并执行RDD上面的action。        spark在运行时,用户的driver程序会启动集群上面的worker,worker会在文件系统中的读取数据的block,然后将计算完成的数据存储在cache中。        用户执行rdd时是需要传递参数的,例如scala中传递的闭包,scala中将闭包标识为对象,这些闭包在传递过程中被序列化,通过网络传输,传输到其他节点上装载。       RDD是静态类型对象,通过泛型确定RDD的类型。 3.1 表2中列出了rdd一些转换和操作,这些操作只针对键值对,这些方法的名称和一般的函数式编程语言中的名称是有同样的含义,比如map是一对一的操作,flatmap是一对多的操作。用户还可以将结果显示缓存起来-》catch(),还可以将RDD显示的分区,比如groupbykey,sort,reducebykey。  ...
hhh666 发布于 1小时前 阅读 1

必背的15个CAD基础命令

小编给大家总结了15个在使用CAD的时候比较常用到了基础命令,刚学习CAD的朋友一定要记住这些命令 1、 线 命令:line 快捷命令:L 操作方式:输入L→空格→屏幕上点第一点→点第二点 点第三点 空格 完毕,当然你也可以无休止的画下去 2、 复制 命令:copy 快捷命令:CO(有的CAD是C) 操作方式:输入CO→空格→选择物体→空格→选择基准点→选择要复制到什么地方→空格结束(CAD2004如果要连续复制,可在选择基准点之前按一个M然后再选择基准点,就可以连续复制了,CAD2004以后的版本都直接可以连续复制)如果要复制这个物体距离1000mm,那么这样操作“CO→空格→选择物体→空格→选择基准点→输入相对坐标→空格(如果是水平或者竖直方向,那么按F8打开正交,用移动鼠标给个方向,然后输入1000然后空格) 3、 移动 命令:MOVE 快捷命令:M 操作方式:和复制一样 4、 圆 命令:CIRCLE 快捷命令:C(不同的版本稍有不同也有的是CI CR) 操作方式:输入 C 空格 点一点 输入直径 空格或者拉鼠标,点左键确定 5、 偏移 命令OFFSET 快捷命令:O 操作方式:输入O,空格,输入偏移的距离,空格(或者在屏幕上指定距离用两点的方式),选择要偏移的物体,在要偏移的方向上点鼠标。 6、...
熊本二号 发布于 1小时前

MAC 查看java home目录

ygdeMacBook-Pro:~ yg$ /usr/libexec/java_home -V Matching Java Virtual Machines (2): 1.8.0, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home 1.7.0_15, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_15.jdk/Contents/Home /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home ygdeMacBook-Pro:~ yg$ export JAVA_HOME=$(/usr/libexec/java_home) export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
干干 发布于 1小时前 阅读 1

cps,cpa

1、 CPS:Cost Per Sales。这个相当于拿销售提成。 2、CPA:Cost Per Action.这个就是用户注册了,或者激活了,算一个。 参考链接
Germmy 发布于 1小时前 阅读 1

在线properties转yaml工具(properties to yaml)

今天刚完成 在线properties转yaml工具(properties to yaml) 工具开发。 便于springMVC转spring cloud时候的资源文件切换吧。 地址:https://www.bejson.com/devtools/properties2yaml/  
废柴大叔 发布于 2小时前 阅读 2

Drools6 入门学习(一)——Drools6新特性

http://blog.csdn.net/luzhenyu111/article/details/44004121     其实Drools6有挺多优秀的入门学习资料了,按理说没必要在重复别人的内容了。不过由于项目的需要,需要对Drools有个透彻的了解甚至说现有的中文资料都没法支持我把需求做出来,所以还是把基础打扎实把。  所以什么是规则引擎,什么是Drools,就都先参考下以下资料吧。 Drools5官方中文文档(供参考):http://pan.baidu.com/s/1sj6uoQp  Drools6的入门资料:http://blog.xiongzhijun.com/?cat=48  Drools-6.1.0.Final 入门文档:http://pan.baidu.com/s/1bnuB4fl  Drools6官方文档:http://docs.jboss.org/drools/release/6.1.0.Final/drools-docs/html_single/index.html 个人认为Drools6与Drools5使用上的差距还是很大的,很多用法都已经被统一与简化了,所以Drools5的资料可以作为参考但是相应的例子估计都跑不起来了。  Drools6的官方文档很强大,不过个人认为作为进阶学习的资料不错。 Drools6 新特性 关于为什么要介绍Drools6 新特性,是因为在我刚开始接触Drools的时候,在网上的中文资料不多,所以看到有介绍它的文章就会点进去看。很多文章往往就是这么个标题 规则引擎 Drools 使用解析 然后...
LYQ1990 发布于 2小时前

修改文件夹权限和用户名用户组

0.说明 Linux系统下经常遇到文件或者文件夹的权限问题,或者是因为文件夹所属的用户问题而没有访问的权限。根据我自己遇到的情况,对这类问题做一个小结。 在命令行使用命令“ll”或者“ls -a”,可以查看文件或者文件的权限: -rw-r--r--. 1 root root 6 Nov 9 16:42 a.txt 其中“-rw-r--r--”表示权限,一共有十个字符。 第一个字符,如果是“-”则表示是文件,如果是“d”则表示是目录(directory)。 后面9个字符每3个字符又作为一个组,则有3组信息(“rw-”、“r--”、“r--”),分别表示所属用户本身具有的权限、所属用户的用户组其他成员的权限、其他用户的权限。 每一组信息如“rw-”,每一个字符都有它自己的特定含义且先后位置是固定的,其中r是读权限、w是写权限、x是可执行权限、-没有对应字符的权限。Linux里面对这些字符设置对应的数值,r是4,w是2,x是1,-是0。上面的“rw-”则是6(=4+2+0),所以最开始a.txt的权限是644,属于root用户组的root用户。 1.修改权限chmod 1.1改文件的权限 我想修改文件a.txt的权限为755,则为: [root@master my]# ll -rw-r--r--. 1 root root 6 Nov 9 16:42 a.txt #改之前权限是644 [root@master my]# chmod 755 a.txt [...
宿小帅 发布于 2小时前 阅读 1

CSV文件/内容中的逗号处理

CSV全称是:Comma Separated Values 或者 Character Separated Values。 尽管第一种说法更常见,但我觉得还是第二种说法更确切一些,因为你可以使用其它字符做分隔符。 使用逗号做分隔符的CSV文件有一个好处:你可以直接用Excel打开。如果使用其它分隔符,比如“|”,你必须告诉Excel该文件使用“|”作分隔符,Excel才能把它导入进来。  前几天,project manager告诉我:我们有许多CSV文件,都是使用“|”做分隔符,用Excel打开的时候比较麻烦,用户想在Excel中直接打开。这样就需要使用“,”做分隔符。但是文件中有些字段含有逗号,必须对这些逗号特殊处理,才能保证CSV文件在Excel中正确打开。他还给了我一个算法: 如果字段中有逗号(,),该字段使用双引号(")括起来; 如果该字段中有双引号,该双引号前要再加一个双引号,然后把该字段使用双引号括起来。 看完project manager的要求,我真是满头起包啊。在IT业混了十几年了,竟然不知道这样处理逗号。 举几个例子: 字段处理前 字段处理后 abc,d2 "abc,d2" ab"c,d2 "ab""c,d2" "abc """abc" "" """""" 如果字段中有两个挨着的双引号,比如:aaa""ccc。这种情况不用特殊处理。这是我在写这篇博客的时候才想起来的,赶...
孟飞阳 发布于 2小时前 阅读 1

排序算法Python实现

from collections import defaultdict # 归并排序 nlg(n) def merge_sort(seq): mid = len(seq) // 2 lef, rgt = seq[:mid], seq[mid:] if len(lef) > 1: lef = merge_sort(lef) if len(rgt) > 1: rgt = merge_sort(rgt) res = [] while lef and rgt: if lef[-1] > rgt[-1]: res.append(lef.pop()) else: res.append(rgt.pop()) res.reverse() return (lef or rgt) + res # 递归版插入排序 def ins_sort_rec(seq, i): if i == 0: return ins_sort_rec(seq, i - 1) j = i while j > 0 and seq[j - 1] > seq[j]: seq[j - 1], seq[j] = seq[j], seq[j - 1] j -= 1 # 递归选择排序 def sel_sort_rec(seq, i): if i == 0: return max_j = i for j in range(i): if seq[j] > seq[max_j]: max_j = j seq[i], seq[max_j] = seq[max_j], seq[i] sel_sort_rec(seq, i - 1) # 计数排序 def counting_sort(A, key=lambda x: x): B, C = [], defaultdict(list) for x in A: ...
Archer弓兵 发布于 2小时前

CAD绘图控件VectorDraw web library (javascript)更新至v7.7014.0.2,在线购买6.6折!

VectorDraw web library (javascript)是一个矢量图形库,它不仅能打开CAD图纸,而且能显示任何支持HTML5标准平台上的通用矢量对象,如Windows,安卓,iOS和Linux。无需任何安装,VectorDraw web library (javascript)就可以运行在任何支持canvas标签和Javascript的主流浏览器(Chrome, Firefox, Safari, Opera, Dolphin, Boat等等)中。这意味着可以用DXF,DWG,DGN,VDML等多种格式在任何台式、平板电脑,智能手机和便携式笔记本上展现出你的业务。   慧都百厂约惠 VectorDraw web library (javascript)6.6折全年最低!立即购买>>>   VectorDraw web library (javascript) v7.7014.0.2更新内容 WebJS 新增需求(7.7014.0.1) 70001215 MergeDocument方法支持使用mergeFlags 漏洞(7.7014.0.1) 70001204 线路对象捕捉无法运作 70001206 导出到vds脚本时出现异常 70001210 WebGl渲染中的实体影线问题      Converter 新增需求(7.7014.0.1) 70001217 DGN中unsuported对象的类型 漏洞(7.7014.0.1) 70001212 Textstyle未使用正确的TTF字体导入      Engine 新增需求(7.7014.0.1) 60001730 不要从部分剪辑中隐藏手柄 70000019 vdScreenBlock的HitTest返回用户点击...
Harriet666 发布于 2小时前 阅读 2

SpringMVC当中的 @Transactional(readOnly = true) 的作用

readOnly=true表明所注解的方法或类只是读取数据。 readOnly=false表明所注解的方法或类是增加,删除,修改数据。 如果设置为true,spring会对其优化,可以用来提高性能。 readOnly为true 时读取的数据如果缓存中存在就从缓存中读取 这是没有问题的 readOnly为false 时读取的数据就不能从缓存中读取了  Spring Doc里的描述。 Read-only status: A read-only transaction can be used when your code reads but does not modify data. Read-only transactions can be a useful optimization in some cases, such as when you are using Hibernate.
为了美好的明天 发布于 2小时前 阅读 1

hadoop集群安装

http://www.powerxing.com/install-hadoop-cluster/   集群的安装 没有亲自尝试
孙超飞 发布于 2小时前 阅读 2

深度学习之视频摘要发展综述

现如今城市生活节奏越来越快,用户在浏览一些视频时,并不想花费大量的时间来看一个完整的视频。更多时候,用户只想知道这个视频最精华的信息,也是基于这种需求,谷阿莫等影视评论者才得到如此多的关注。此时,视频摘要就体现出其价值所在了。   什么是视频摘要?   视频摘要,就是以自动或半自动的方式,通过分析视频的结构和内容存在的时空冗余,从原始视频中提取有意义的片段/帧。从摘要的技术处理过程来讲,视频摘要一般可以分成两种,静态视频摘要和动态视频摘要。现阶段,我们公司主要致力于静态视频摘要的研究。接下来就和大家说一下静态视频摘要。   什么是静态视频摘要?   静态视频摘要,又称为视频概要,即用一系列从原始视频流中抽取出来的静态语义单元来表示视频内容的技术。简单来说,就是在一段视频中提取出一些关键帧,通过将多个关键帧组合成视频摘要,使用户可以通过少量的关键帧快速浏览原始视频内容。进一步发展的话可以为用户提供快速的内容检索服务。   例如,公开课的视频中,提取出含有完整PPT的帧。我们将含有关键信息的所有帧提供给浏览者,可以使其在较短的时间内了解到较长视频的主要内容。又例如,将一个2小时的电影提取出其关键部分,...
图鸭科技研究员 发布于 2天前 阅读 749 点赞 2

ElasticSearch单机部署多实例环境

ElasticSearch6.0.0
ssdut_buster 发布于 6天前 阅读 1403 评论 7

vue全面介绍

2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angular.js和react.js的优点,并剔除了它们的缺点”。授予了这么高的评价的vue.js,也是开源世界华人的骄傲,因为它的作者是位中国人–尤雨溪(Evan You)。 Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架。它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计。相比于Angular.js,Vue.js提供了更加简洁、更易于理解的API,使得我们能够快速地上手并使用Vue.js;同时比起 React + Redux 相对复杂的架构,
爱敲代码的程序员 发布于 1周前 阅读 4172 评论 13 点赞 14

TensorFlow Serving在Kubernetes中的实践

本文介绍了TensorFlow Serving的配置,尤其是官方文档没作完整介绍的model version policy的配置,另外介绍了编译TensorFlow Serving时的优化实践以及在Kubernetes中的部署,以及使用时的注意事项。
WaltonWang 发布于 1周前 阅读 1121 评论 4 点赞 2

HTTPS连接过程以及中间人攻击劫持

一 、HTTPS连接过程及中间人攻击原理 https协议就是http+ssl协议,如下图所示为其连接过程:  1.https请求  客户端向服务端发送https请求;  2.生成公钥和私钥  服务端收到请求之后,生成公钥和私钥。公钥相当于是锁,私钥相当于是钥匙,只有私钥才能够打开公钥锁住的内容;  3.返回公钥  服务端将公钥(证书)返回给客户端,公钥里面包含有很多信息,比如证书的颁发机构、过期时间等等;  4.客户端验证公钥  客户端收到公钥之后,首先会验证其是否有效,如颁发机构或者过期时间等,如果发现有问题就会抛出异常,提示证书存在问题。如果没有问题,那么就生成一个随机值,作为客户端的密钥,然后用服务端的公钥加密;  5.发送客户端密钥  客户端用服务端的公钥加密密钥,然后发送给服务端。  6.服务端收取密钥,对称加密内容  服务端收到经过加密的密钥,然后用私钥将其解密,得到客户端的密钥,然后服务端把要传输的内容和客户端的密钥进行对称加密,这样除非知道密钥,否则无法知道传输的内容。  7.加密传输  服务端将经过加密的内容传输给客户端。  8.获取加密内容,解密  客户端获取加密内容后,用之前生成的密钥对其进行解密,获取到内容。 中间人劫持...
MengXS 发布于 1周前 阅读 2532 评论 6 点赞 10

Spring Cloud(一)服务的注册与发现(Eureka)

Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
鹏磊 发布于 2周前 阅读 1187 评论 2

Spring Boot 定制与优化内置的Tomcat容器

通过定制与优化内置的Tomcat来提应用的服务性能。
Hanson_Q 发布于 2周前 阅读 2999 评论 10 点赞 12

DB——数据的读取和存储方式

数据库是我们常用的一些存储数据的方式,我们从读写来了解RDBMS的存取结构
wier 发布于 2周前 阅读 1463 评论 4 点赞 5

理解TCP/IP三次握手与四次挥手的正确姿势

背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次。 从好上开始,到现在,一年多也算坚持下来了。 问题 有时候聊天的过程中,我的网络或者她的网络可能会不好,视频就会卡住,听不到对方的声音,过一会儿之后才会恢复。 中间双方可能就要不断的确认网络是否恢复,但是有时候会: 她:“你可以听到了吗?” 我:“可以了,你呢?”、 她:“喂喂,你可以听到了吗?” 我:“可以了,我可以听到了,你呢?” 她:“你可以听到了吗?” ..... 这种情况很蛋疼,那么怎样才能找一个简单的办法,让两个人都确认自己可以听到对方的声音,对方也可以听到自己的声音呢? 注:以下情节纯属虚构   方案 TCP建立连接为什么是三次握手,而不是两次或四次? TCP,名为传输控制协议,是一种可靠的传输层协议,IP协议号为6。 顺便说一句,原则上任何数据传输都无法确保绝对可靠,三次握手只是确保可靠的基本需要。 举个日常例子,打电话时我们对话如下:   对应为客户端与服务器之间的通信: 于是有了如下对话: 我:1+1等于几? 她:2,2+2等于几? 我:4 首先两个人约定协议 1.感觉网络情况不对的时候,任何一方都可以发起询问 2.任何情况下,若发起询问后5秒还没收到...
Champin 发布于 2周前 阅读 2696 评论 6 点赞 9

JVM与字节码——类的方法区模型

介绍一个类从Java编码到Java bytecode再到JVM运行的过程,在介绍过程中分析JVM方法区(非堆)的存储模型。
随风溜达的向日葵 发布于 2周前 阅读 2415 评论 11 点赞 9

分布式实时日志分析解决方案ELK部署架构

一、概述 ELK 已经成为目前最流行的集中式日志解决方案,它主要是由Beats、Logstash、Elasticsearch、Kibana等组件组成,来共同完成实时日志的收集,存储,展示等一站式的解决方案。本文将会介绍ELK常见的架构以及相关问题解决。 Filebeat:Filebeat是一款轻量级,占用服务资源非常少的数据收集引擎,它是ELK家族的新成员,可以代替Logstash作为在应用服务器端的日志收集引擎,支持将收集到的数据输出到Kafka,Redis等队列。 Logstash:数据收集引擎,相较于Filebeat比较重量级,但它集成了大量的插件,支持丰富的数据源收集,对收集的数据可以过滤,分析,格式化日志格式。 Elasticsearch:分布式数据搜索引擎,基于Apache Lucene实现,可集群,提供数据的集中式存储,分析,以及强大的数据搜索和聚合功能。 Kibana:数据的可视化平台,通过该web平台可以实时的查看 Elasticsearch 中的相关数据,并提供了丰富的图表统计功能。 二、ELK常见部署架构 2.1、Logstash作为日志收集器 这种架构是比较原始的部署架构,在各应用服务器端分别部署一个Logstash组件,作为日志收集器,然后将Logstash收集到的数据过滤、分析、格式化处理后发送至Elasticsearch存储,最后使用Kibana进...
FEINIK 发布于 2周前 阅读 4740 评论 6 点赞 4

Kotlin Primer·第七章·协程库(上篇)

本篇只讲了协程库的使用。还有中篇讲协程的启动和切换实现原理,下篇核心讲解kotlin协程在JVM层的实现原理。 这可能是至今为止最详细实用的 Kotlin 协程库详解了。
kymjs张涛 发布于 2周前 阅读 1348

Redis 笔记系列(九)——Redis的持久化之AOF

前文我们介绍了redis持久化及其中的一种方法——RDB。本文将介绍另一种方式——AOF。 请大家带着三个问题来思考这两种方法: 1. 如果一个系统中同时存在AOF和RDB,它们是冲突还是协作? 2. 为什么AOF会在RDB之后产生出现? 3. 相比于RDB,本文介绍的AOF会有什么优缺点?   AOF(Append Only File)     官网介绍      官网的原文介绍如下: AOF advantages Using AOF Redis is much more durable: you can have different fsync policies: no fsync at all, fsync every second, fsync at every query. With the default policy of fsync every second write performances are still great (fsync is performed using a background thread and the main thread will try hard to perform writes when no fsync is in progress.) but you can only lose one second worth of writes. The AOF log is an append only log, so there are no seeks, nor corruption problems if there is a power outage. Even if the log ends with an half-written command for some reason (disk full or other reasons) the redis-check-aof tool is able to fix it easily. Redis i...
HappyBKs 发布于 3周前 阅读 2442 评论 5 点赞 7

从0开始搭建自动部署环境

# 从0开始搭建自动部署环境 ## 前言 从Docker改变使用动态库后,DooD不再可行,而Dind依然可行。针对此改变,重新整理并记录自动部署环境配置步骤。 此环境是实现微服务自动部署的基础,使用jenkins持续集成工具,并内置了java和maven,并实现了容器内运行Docker命令的功能。 ## 软件环境 - 宿主机win10 - 虚拟机CentOS-7-x86_64-Minimal-1708 - Docker 17.09.0-ce - apache-maven-3.5.2 - jdk 1.8.0_151 - jenkins 2.73.3 ## 虚拟机安装配置 ### 1. 安装Docker 参考官方教程[Get Docker CE for CentOS](https://docs.docker.com/engine/installation/linux/docker-ce/centos/#set-up-the-repository) 可选项:更换源。官方源下载Docker可能很慢,更换成国内的Docker源,比如阿里云的Docker源[https://download.docker.com/linux/centos/docker-ce.repo](https://download.docker.com/linux/centos/docker-ce.repo) ### 2. 启动Docker并设置开机自启 ``` $ sudo service docker start $ sudo chkconfig docker on ``` ### 3. 更换Docker镜像源 从Docker官方源下载镜像可能很慢,更换成阿里云的源即可。阿里云专属加速器[地址](https://cr.console.aliyun.com/?spm=5176.100...
五毛程序员 发布于 3周前 阅读 2174 评论 2 点赞 2

用Python实现一个大数据搜索引擎

搜索是大数据领域里常见的需求。Splunk和ELK分别是该领域在非开源和开源领域里的领导者。本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家理解大数据搜索的基本原理。 布隆过滤器 (Bloom Filter) 第一步我们先要实现一个布隆过滤器。 布隆过滤器是大数据领域的一个常见算法,它的目的是过滤掉那些不是目标的元素。也就是说如果一个要搜索的词并不存在与我的数据中,那么它可以以很快的速度返回目标不存在。 让我们看看以下布隆过滤器的代码: class Bloomfilter(object): """ A Bloom filter is a probabilistic data-structure that trades space for accuracy when determining if a value is in a set. It can tell you if a value was possibly added, or if it was definitely not added, but it can't tell you for certain that it was added. """ def __init__(self, size): """Setup the BF with the appropriate size""" self.values = [False] * size self.size = size def hash_value(self, value): """Hash the value provided and scale it to fit the BF size""" ...
naughty 发布于 3周前 阅读 2349 评论 3 点赞 4

springboot+vue的前后端分离与合并方案

springboot+vue的前后端分离与合并
上官胡闹 发布于 3周前 阅读 4066 评论 29 点赞 6

MariaDB的延迟开源模式及其BSL许可证介绍(一)

本文主要内容:①我为啥拖延;②MariaDB的BSL许可证;③BSL示例。下一步准备介绍下MySQL和MariaDB的版权细节问题。
中国政法大学开源研究 发布于 3周前 阅读 996 评论 1 点赞 2

阿里Dubbo疯狂更新,关Spring Cloud什么事?

原文出处,在 Spring For All 社区(http://spring4all.com ): http://www.spring4all.com/article/213 最近,开源社区发生了一件大事,那个全国 Java 开发者使用最广的开源服务框架 Dubbo 低调重启维护,并且 3 个月连续发布了 4 个维护版本。 我上次在写[放弃Dubbo,选择最流行的Spring Cloud微服务架构实践与经验总结](http://mp.weixin.qq.com/s/bciSlKearaVFQg1QWOSn_g)这篇文章的时候,就有很多的网友给我留言说,Dubbo 又开始更新了。我当然是清楚的,我也一直在关注着 Dubbo 的走向,在几个月前技术圈里面就有一个消息说是 Dubbo 又开始更新了,大家议论纷纷不知真伪。我还专门跑到 GitHub 上面进行了留言询问,最后在 Dubbo 的 gitter 聊天室里面找到了确信的答案,说是正在组建团队。虽然稍稍有所期待,但也不知道阿里这次拿出了多少的诚意来做这件事,于是我昨天又到 GitHub 逛了一下,发现从 9 月开始,阿里三个月连着发布了四个版本,还是非常有诚意的,值得关注。 ## Dubbo简介 Dubbo 是阿里巴巴公司一个开源的高性能服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案,使得应用可通过高性能 RPC 实现服务的输出、输入功能...
SpringForAll 发布于 3周前 阅读 6399 评论 21 点赞 5

如何7步实现根据源码包创建rpm包

### 如何7步实现根据源码包创建rpm包 --- > 本文是"[7 Steps to Build a RPM Package from Source on CentOS / RedHat](http://www.thegeekstuff.com/2015/02/rpm-build-package-example/)"一文的简单翻译。 **version: 0.1.0 2017-11-19** 有时你可能需要获取一个开源应用的源码包,但是可能没有无法通过该应用的RPM文件来安装到系统。 在这种情况下,你既可以编译源码安装,也可以以源码包来创建一个rpm包文件,实现安装应用的功能。 同样存在一种情况即你想要创建一个你自己开发的自定义的RPM包。 这篇指南解释了如何提高源码来创建一个rpm包。 为了创建rpm包,你将需要源码包(通常为一个压缩文件,其内也包含了SPEC文件)。 SPEC文件包含以下说明:如何创建rpm包,包内包含的文件,安装的路径。 RPM将展现创建过程中的测试过程。 执行spec文件中的prep块中定义的系统命令和宏命令。 检测文件列表的内容 执行spec文件中的build块中定义的系统命令和宏命令。在这一步中文件列表中的宏命令也被执行。 创建二进制包文件 创建源码包文件 一旦RPM执行了上述步骤,将创建二进制的包文件和源码包文件。 二进制包文件包含所有安装或卸载包的额外信息的源文件。 通常安装包的所有...
Lu_Castiel 发布于 3周前 阅读 977 评论 7 点赞 2

使用Hutool爬取开源中国的开源资讯

## 介绍 为了演示Hutool-http的http请求功能,因此这个栗子用红薯家的开源资讯开刀,在此做个简单的Demo。 ## 开始 ### 分析页面 1. 打开红薯家的主页,我们找到最显眼的开源资讯模块,然后点击“更多”,打开“开源资讯”板块。 ![](https://static.oschina.net/uploads/img/201711/19204312_zJD8.png) 2. 打开F12调试器,点击快捷键F12打开Chrome的调试器,点击“Network”选项卡,然后在页面上点击“全部资讯”。 ![](https://static.oschina.net/uploads/img/201711/19204634_1ahd.png) ![](https://static.oschina.net/uploads/img/201711/19204743_eJBy.png) 3. 由于红薯家的列表页是通过下拉翻页的,因此下拉到底部会触发第二页的加载,此时我们下拉到底部,然后观察调试器中是否有新的请求出现。如图,我们发现第二个请求是列表页的第二页。 ![](https://static.oschina.net/uploads/img/201711/19205000_V7Sj.png) 4. 我们打开这个请求地址,可以看到纯纯的内容。红框所指地址为第二页的内容,很明显p参数代表了页码page。 ![](https://static.oschina.net/uploads/img/201711/19205156_dTb8.png) 5. 我们右键点击后查看源码,可以看到源码。 ![](https://static...
路小磊 发布于 3周前 阅读 2219 评论 20 点赞 7
顶部