开源中国

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

谈谈开源(一)

作者 申砾 源码面前,了无秘密 ---- 侯捷 ### 前言 很多人的『开源』是一个比较时髦且有情怀的词汇,不少公司也把开源当做 KPI 或者是技术宣传的手段。但是在我们看来,大多数人开源做的并不好,大多数开源项目也没有被很好的维护。比如前一段时间微博上流传关于 Tengine 的讨论,一个优秀的开源项目不止是公布源代码就 OK 了,还需要后续大量的精力去维护,包括制定 RoadMap、开发新功能、和社区交流、推动项目在社区中的使用、对使用者提供一定程度的支持,等等。 目前我们在国内没看到什么特别好的文章讲如何运营一个开源项目,或者是如何做一个顶级的开源项目。TiDB 这个项目从创建到现在已经有两年多,从开发之初我们就坚定地走开源路线,陆续开源了 TiDB、TiKV、PD 这三个核心组件,获得了广泛的关注,项目在 GitHub 的 Trending 上面也多次登上首页。在这两年中,我们在这方面积累了一些经验和教训,这里和大家交流一下我们做开源过程中的一些感受,以及参与开源项目(至少是指 TiDB 相关项目)的正确姿势。 ### 什么是开源 Open-source software (OSS) is computer software with its source code made available with a license in which the copyright ...
TiDB 发布于 9小时前 阅读 35 评论 1

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

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

可能是国内最火的开源项目 —— C/C++ 篇

推荐阅读: 可能是最火的开源项目 —— Java 篇 可能是国内最火的开源项目 —— PHP 篇 可能是国内最火的开源项目 —— Python 篇 截止目前开源中国收录了 44513 款开源项目,囊括了最热门的各类开源项目,而软件的评分在一定程度上代表了软件的质量和热度,而 C 和 C++ 语言作为最基础的语言,在各类编程语言排行榜中高居不下,因此本文整理了 C/C++ 语言中评分最高并且收藏量超过 100 的几款项目,以供开发者选择和交流,排名如下: 高性能 TCP/UDP/HTTP 通信框架 HP-Socket 评分:9.8,收藏:1404  HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。 为了让使用者能方便快速地学习和使用 HP-Socket ,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、PACK 模型示例、性能测试示...
编辑部的故事 发布于 10小时前 阅读 44 点赞 1

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 发布于 11小时前 阅读 192 评论 1

疯狂Activiti6.0连载(二)———下载和运行Activiti

                                                2 安装与运行Activiti     要点          安装JDK与MySQL          安装Eclipse以及Activiti插件          运行官方的Activiti例子         Activiti的第一个正式版本发布于2010年12月1日,经过多年的发展,Activiti已经成为一个较为成熟的工作流引擎,作为一个开源的工作流引擎,它在工作流领域吸引了众多开发者的目光,在当前的工作流框架角逐中,慢慢成为众多企业的首选。在2017年5月26日,Activiti迎来全新篇章:6.0版本正式发布。本书将以6.0版本为基础,讲解基于Activiti的工作流应用开发。         本章将介绍Activiti的安装与运行、Activiti开发环境的搭建等内容,本书除了最后一章的项目案例外,其他所有的案例均以本章的开发环境为基础。搭建Activiti的开发环境,需要安装JDK、Eclipse、MySQL等软件,除此之外,还会编写第一个Activiti应用,让大家对Activiti有一个初步的了解。         注:本书全部的案例均在Windows7下开发和运行。                             ...
杨大仙的程序世界 发布于 17小时前 阅读 76

疯狂Spring Cloud连载(三)———Spring Boot简介与配置

                                            3 Spring Boot简介与配置         本书代码共享地址:https://gitee.com/yangenxiong/SpringCloud         本章要点              Spring Boot简介              Spring Boot使用                                                 3.1 Spring Boot         Spring Cloud基于Spring Boot搭建,本小节将对Spring Boot作一个大致的讲解,读者知道Spring Boot作用即可。 3.1.1 Spring Boot简介         开发一个全新的项目,需要先进行开发环境的搭建,例如要确定技术框架以及版本,还要考虑各个框架之间的版本兼容问题,完成这些繁琐的工作后,还要对新项目进行配置,测试能否正常运行,最后才将搭建好的环境提交给项目组的其他成员使用。经常出现的情形是,表面上已经成功运行,但部分项目组成员仍然无法运行,项目初期浪费大量的时间做这些工作,几乎每个项目都会投入部分工作量来做这些固定的事情。         受Ruby On Rails、Node.js等技术的影响,JavaE...
杨大仙的程序世界 发布于 17小时前 阅读 60 点赞 1

疯狂Spring Cloud连载(二)———搭建开发环境

                                                2 开发环境搭建         本章要点              安装与配置Maven              安装Eclipse              本书涉及的技术版本              Spring Boot使用         工欲善其事,必先利其器。在讲述本书的技术内容前,先将开发环境搭建好,本书所涉及基础环境将在本章准备,包括Eclipse、Maven等。如果读者对Maven、Eclipse、Spring Boot等项目较为熟悉,可以直接跳过本章的相关章节。         笔者建议读者在查阅本书过程中,使用与本书相同的工具以及版本。本章使用的Java版本为1.8,图2-1为“java –version”命令的输出,Java安装与配置较为简单,本书不再赘述。 图2-1 Java版本         注:本书全部的案例均在Windows7下开发和运行。                                               2.1 安装与配置Maven 2.1.1 关于Maven         Maven是Apache下的一个开源项目,用于项目的构建。使用Maven可以对项目的依赖包...
杨大仙的程序世界 发布于 17小时前 阅读 52 点赞 1

[实战演练]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 发布于 18小时前 阅读 155

记录一次通过性能日志处理线上性能问题的过程

       在项目发展初期,可能由于数据量和用户访问量的原因,系统不会出现性能问题,但是随着项目发展,数据量发生具体变化,系统访问量也不断增多,此时对代码的优化就显得迫在眉睫。本文首先讲解如何使用perf4j和aop定期的完成相关日志的统计,其次讲解了如何使用ThreadLocal变量记录一个请求从开始到结束过程中所产生的调用链,并且记录相关方法的调用时间,最后将演示如何使用shell脚本对生成的日志文件进行处理,并生成性能统计报告。        perf4j是一种日志统计工具,其不仅可以进行日志的实时统计,也可以进行定时汇总统计。实时统计主要是记录项目运行过程中的一些消息日志,以便后续排查问题;而定时汇总统计则可用于对方法调用时间进行汇总,并且perf4j能够进行计算每个时间间隔内所有方法的最小调用时间,最大调用时间,平均调用时间,调用次数以及调用方差。这里主要讲解如何使用perf4j进行定时时间统计,如下是在log4j.xml中对service方法进行时间统计的配置: ```xml ```        这里name属性用于指定log的名称,其与代码中LogFactory.getLog(name)中的name对应,level表示打印info及以上级别的日志,appender-ref则配置了日志的相关...
爱宝贝丶 发布于 19小时前 阅读 231 点赞 1

从Vue.js源码看异步更新DOM策略及nextTick

## 写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出。 文章的原地址:[https://github.com/answershuto/learnVue](https://github.com/answershuto/learnVue)。 在学习过程中,为Vue加上了中文的注释[https://github.com/answershuto/learnVue/tree/master/vue-src](https://github.com/answershuto/learnVue/tree/master/vue-src),希望可以对其他想学习Vue源码的小伙伴有所帮助。 可能会有理解存在偏差的地方,欢迎提issue指出,共同学习,共同进步。 ## 操作DOM 在使用vue.js的时候,有时候因为一些特定的业务场景,不得不去操作DOM,比如这样: ```html {{test}} tet ``` ```javascript export default { data () { return { test: 'begin' }; }, methods () { handleClick () { this.test = 'end'; console.log(this.$refs.test.innerText);//打印“begin” } } } ``` 打印的结果是begin,为什么我们明明已经将test设置成了“end”,获取真实DOM节点的innerText却没有得到我们预期中的“end”,而是得到之前的值“begin”呢? ## Watcher队列 带着疑问,我们找到了Vue.js源码的Watch...
染陌同学 发布于 1天前 阅读 201 评论 1 点赞 2

Swift4语法新特性

总结Swift4中带来的一些新的语法特性。
珲少 发布于 1天前 阅读 159 点赞 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 发布于 1天前 阅读 186 点赞 1

springboot 入门教程(6)--- 整合Spring data JPA实现CRUD(附源码)

前面整合ssm的时候就说要写一个整合jpa的,周末有点空就写下,时间短写得不是特别好,代码有点不规范,注释也没怎么写,将就了哈。
pxk 发布于 1天前 阅读 245

SpringCloud(第 020 篇)Zuul 网关模块添加 listOfServers 属性,达到客户端负载均衡的能力

1、本章节添加另外一个属性 listOfServers 来给 zuul 赋上异样的功能色彩,提供负载均衡的能力; 2、而其实说到底 zuul 的负载能力还是在于 ribbon,因为 ribbon 才是真正做到让 zuul 达到客户端负载均衡能力的本质;
HMILYYLIMH 发布于 1天前 阅读 127

在libvirt中使用QCOW2多级快照导致虚拟机无法启动的原因分析及解决

本文主要讲述了在libvirt中,虚拟机使用QCOW2多级快照时,可能会导致虚拟机无法启动的问题的原因分析及解决办法。
LastRitter 发布于 1天前 阅读 32

Docker镜像与仓库

什么的是Docker镜像 Docker镜像是由文件系统叠加而成,最底层是一个引导文件系统,即bootfs;Docker镜像第二层是root文件系统rootfs,位于引导文件之上, 可以是一种或多种操作系统;Docker这样的文件系统被称为镜像,一个镜像可以放在另一个镜像的顶部,下面的镜像称为父镜像,最底层的 镜像称为基础镜像(base image);当一个镜像启动容器时,Docker会在该镜像的最顶层加载一个读写文件系统,想在Docker中运行的程序就在 这个读写层中执行。 Docker文件系统层: 可写容器 镜像加入Apache 基础镜像(Ubuntu) 引导文件系统 镜像拉取与列出 [root@bogon ~]# docker pull ubuntu pull命令将从Docker hub下载ubuntu镜像,这里没有指定标签(tag)将会自动下载latest标签,即ubuntu:latest;也可以手动指定如ubuntu:12.04 列出刚刚下载的镜像 [root@bogon ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest ccc7a11d65b1 3 weeks ago 120.1 MB REPOSITORY中出现的docker.io是官方提供的仓库,具体镜像,标签,仓库,Docker hub之间的关系: 镜像(image)...
ksfzhaohui 发布于 1天前 阅读 184 点赞 1

volatile关键字分析——可见性

public class Thread02 implements Runnable { /**volatile*/ boolean flg = true; @Override public void run() { System.out.println(Thread.currentThread().getName()+":start"); while(flg){ //System.out.println("do something"); } System.out.println(Thread.currentThread().getName()+":end"); } public static void main(String[] args) { Thread02 test = new Thread02(); Thread t1 = new Thread(test); t1.start(); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } test.flg=false; } } 上述代码中没有使用volatile关键字,但是在主线程中我们将flg至为false,但是结果如下:   public class Thread02 implements Runnable { volatile boolean flg = true; @Override public void run() { System.out.println(Thread.currentThread().getName()+":start"); while(flg){ //System.out.println("do something"); } System.out.println(Thread.currentThread().getName()+":end"); } public static void main(String[] args) { Thread02 test =...
蓝狐乐队 发布于 1天前 阅读 114

Windows下搭建开源进销存系统ECP

ECP 是基于jfinal、avalon、bootstrap、jqGrid、snaker开发的客户关系及进销存财务系统。
大山_Aries 发布于 2天前 阅读 110 评论 2

mysql树状数据的数据库设计

### 0 树状数据的分类 我们在mysql数据库设计的时候,会遇到一种树状的数据.如公司下面分开数个部门,部门下面又各自分开数个科室,以此形成树状的数据.关于树状的数据,按层级数大致可分为一下两类: 分类 | 特点 ---|--- 固定数量层级 | 层级数量固定,每一层级都有各自的意义,如集团-分公司-部门-科室,省-市-区等 可变数量层级 | 层级数量不固定,前几层级可能会有特殊含义,但整体在相当大的范围内是浮动的 前者的优点在于,由于每一层级均有各自含义,数据库的整体设计更为方便,可将某一子节点的不同上级节点均存储在数据库中,同样以某集团为例: 节点code | 节点名称 | 节点层级 | 父级节点code | 1级祖先code | 2级祖先cdoe --- | --- | --- | --- | --- | --- 010000 | 公司1 | 1 | 000000 | null | null 020000 | 公司2 | 1 | 000000 | null | null 010300 | 制造部 | 2 | 010000 | 010000 | null 010400 | 品质部 | 2 | 010000 | 010000 | null 010301 | 前工程制造 | 3 | 010300 | 010000 | 010300 010303 | 组装制造 | 3 | 010300 | 010000 | 010300 这样设计的表格冗余较多,但在各种类型查询的时候效率较高.在插入,更新(含子机构,由于业务逻辑特点,机构之间的更新一般是平...
杨意社 发布于 2天前 阅读 49

SpringCloud(第 018 篇)Zuul 服务 API 网关微服务之代理与反向代理

1、API 服务网关顾名思义就是统一入口,类似 nginx、F5 等功能一样,统一代理控制请求入口,弱化各个微服务被客户端记忆功能; 2、本章节主要讲解了使用 zuul 的代理功能与反向代理功能,当然 zuul 还有很多属性设置,我就没一一列举所有的测试方法了; 3、http://localhost:8150/routes 地址可以查看该zuul微服务网关代理了多少微服务的serviceId;
HMILYYLIMH 发布于 2天前 阅读 1563 评论 7 点赞 2

AMQP 0-9-1 Model Explained--原文翻译

### 关于本文 翻译自 RabbitMQ 官网,原文地址 [看这里](https://www.rabbitmq.com/tutorials/amqp-concepts.html) 本文提供AMQP 0-9-1 协议的概述,AMQP 0-9-1 是 RabbitMQ 支持的协议之一。 ## 1. AMQP 0-9-1 和 AMQP 模型高度概括 ### 1.1 什么是 AMQP 0-9-1 ? AMQP 0-9-1(高级消息队列协议)是一个消息协议,它确保符合协议标准的客户端应用程序与符合协议标准的消息中间件代理之间能够进行通信。 ### 1.2 消息代理及其作用 Messaging brokers(以下称为消息代理)从 publishers(发布消息的应用程序,也被称为 producers,以下称为生产者)接收消息,然后将消息路由到 consumers(处理消息的应用程序,以下称为消费者)。 因为它是一个网络协议,生产者、消费者和消息代理可能都部署在不同的机器上。 ### 1.3 AMQP 0-9-1模型简述 AMQP 0-9-1 模型的整体视图如下: * 消息被发送到 exchanges,通常可以把 exchanges 比作邮局或者信箱; * exchanges 会将消息的副本根据指定的规则(bindings)分发给 queues; * AMQP 消息代理可以将消息投递给订阅了队列的消费者,同时消费者也可以根据需要主动从队列拉取消息。 ![](https://www.rabbitmq.com/img/tutorials/intro/h...
majorc 发布于 2天前 阅读 23

Linux命令思维导图

# Linux常用命令 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233100_Xypx.png "在这里输入图片标题") # 1 文件目录操作 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233134_SCCp.png "在这里输入图片标题") # 2 文件查找 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233146_mrYJ.png "在这里输入图片标题") # 3 文件打包上传和下载 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233512_rfag.png "在这里输入图片标题") # 4 文件权限设置 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233159_fFap.png "在这里输入图片标题") # 5 磁盘存储 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233211_Paaa.png "在这里输入图片标题") # 6 性能监控和优化 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233224_hatX.png "在这里输入图片标题") # 7 网络相关 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233237_wxHc.png "在这里输入图片标题") # 8 其他 ![输入图片说明](https://static.oschina.ne...
添仔哥哥 发布于 5小时前 阅读 5

SQLSERVER常用SQL语句(持续更新)

1.增加表记录序号 select * from (select row_number() over(order by id desc) as rownum,* from test) t where rownum between 5 and 10 2.字符串截取 substring(str,pos,len) // 示例(index从1开始) SELECT substring(name, 2, 4) FROM test WHERE name = 'San Diego'; // 结果 'an D'  
HarleyZhuge 发布于 5小时前 阅读 4

Python入门 -- 内建模块

1、Collections模块 >>> import collections 这是如何导入这个模块,现在我们来看看其中的一些类。 1.1 Counter Counter 是一个有助于 hashable 对象计数的 dict 子类。它是一个无序的集合,其中 hashable 对象的元素存储为字典的键,它们的计数存储为字典的值,计数可以为任意整数,包括零和负数。 我们可以这样查看 Counter 的帮助信息,事实上这些信息来源于 Counter 的文档字符串(collections.Counter.__doc__)。 下面我们来看一个例子,例子中我们查看 Python 的 LICENSE 文件中某些单词出现的次数。 1.1.1 Counter 示例 >>> from collections import Counter >>> import re >>> path = '/usr/lib/python3.4/LICENSE.txt' >>> words = re.findall('\w+', open(path).read().lower()) >>> Counter(words).most_common(10) [('the', 80), ('or', 78), ('1', 66), ('of', 61), ('to', 50), ('and', 48), ('python', 46), ('in', 38), ('license', 37), ('any', 37)] Counter 对象有一个叫做 elements() 的方法,其返回的序列中,依照计数重复元素相同次数,元素顺序是无序的。 >>> c = Counter(a=4, b=2, c=0, d=-2) >>> list(c.elements()) ['b','b','a', ...
兴趣使然的程序员 发布于 5小时前 阅读 4

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

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

JDBC连接数据库

JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1、加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String className)实现。 例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(ClassNotFoundException e){ System.out.println("找不到驱动程序类 ,加载驱动失败!"); e.printStackTrace() ; } 成功加载后,会将Driver类的实例注册到DriverManager类中。 2、提供JDBC连接的URL •连接URL定义了连接数据库时的协议、子协议、数据源标识。 •书写形式:协议:子协议:数据源标识 协议:在JDBC中总是以jdbc开始 子协议:是桥连接的驱动程序或是数据库管理系统名称。 数据源标识:标记找到数据库来源的地址与连接端口。 例如:(MySql的连接URL) jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk ; useUnicode=true:表示使用Unicode字符集。如果...
小衰哥有点帅 发布于 9小时前 阅读 2

Index of /cygwin/x86_64/release/cyrus-sasl/libsasl2-devel

Index of /cygwin/x86_64/release/cyrus-sasl/libsasl2-devel Name Last modified Size Description Parent Directory - libsasl2-devel-2.1.26-9.tar.xz 24-Nov-2014 13:39 91K libsasl2-devel-2.1.26-10.hint 16-Apr-2017 14:02 243 libsasl2-devel-2.1.26-10.tar.xz 16-Apr-2017 14:02 91K libsasl2-devel-2.1.26-11.hint 16-Apr-2017 14:17 243 libsasl2-devel-2.1.26-11.tar.xz 16-Apr-2017 14:17 91K md5.sum 16-Apr-2017 14:44 415 setup.hint 24-Nov-2014 13:39 245 sha512.sum 16-Apr-2017 14:44 1.1K...
rootliu 发布于 2周前 阅读 9

MySQL与MongoDB的操作对比

MySQL与MongoDB的操作对比
mickelfeng 发布于 2周前 阅读 15

基于广播的打印机状态变更与应用交互的机制

目前做的项目是android面板和打印机交互App,把交互中用到的机制总结下来供以后参考 # 交互的基本原理: 打印机通过打印机事件通过广播的方式,通知应用程序,打印机的最新状态。应用程序通过web api 开启打印机扫描、打印以及获取状态信息。 # 项目需求 应用程序请求扫描/打印任务,把处理扫描/打印任务状态(取消,拒绝,暂停,预览)变为通用逻辑(状态机),把最终结果传递给回调函数 # 结构图 下面是控制打印机扫描/打印和监听状态的结构图: ![输入图片说明](https://static.oschina.net/uploads/img/201709/25201334_uwkD.png "在这里输入图片标题") # 代码分析 ## Scanjob 从状态机的开始请求开始mApplication.getScanJob().scan(requestAttributes),分析Scanjob类: ``` public ScanJob(){ this.mHandler = new ScanJobMessageDispatcher(); // sets the listener for the asynchronous communications this.mHandler.setScanJobListener(new JobListener() { @Override public void onChangeJobStatus(ScanJobAttributeSet jobStatus) { changeJobStatus(jobStatus); } @Override public void setJobId(String jobId) { setCurrentJobId(jobId); } @Override pu...
1071954237 发布于 7小时前 阅读 3

证书制作方法

http://javaxt.com/tutorials/windows/how_to_enable_ldaps_in_active_directory 写得实在太详细了。 准备一个申请文件,如下: ;----------------- request.inf ----------------- [Version] Signature="$Windows NT$" [NewRequest] Subject = "CN=dc1.acme.com,OU=IT,DC=dc1,DC=acme,DC=com,O=ACME,L=New York,S=New York,C=US" ; KeySpec = 1 KeyLength = 1024 Exportable = TRUE MachineKeySet = TRUE SMIME = False PrivateKeyArchive = FALSE UserProtected = FALSE UseExistingKeySet = FALSE ProviderName = "Microsoft RSA SChannel Cryptographic Provider" ProviderType = 12 RequestType = PKCS10 KeyUsage = 0xa0 [EnhancedKeyUsageExtension] OID=1.3.6.1.5.5.7.3.1 ; this is for Server Authentication windows下执行:certreq -new request.inf acme.csr  生成证书申请文件。 linux下执行:openssl x509 -req -days 3650 -in acme.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out acme.crt ,签发证书 windows下执行:certreq -accept acme.crt AD里导入证书...
pearma 发布于 2个月前 阅读 9

用SQL做数据分析_2

  select p.Name,p.Statisfaction,d.Department from Person as p inner join (select d.DepartmentID,d.Department, max(p.Statisfaction) as Statisfaction from Department as d left join Person as p on p.DepartmentID = d.DepartmentID group by d.DepartmentID,d.Department) as d on p.Statisfaction = d.Statisfaction and p.DepartmentID = d.DepartmentID order by d.DepartmentID -- 先查出每个部门的最高满意度、部门ID、部门名称,然后和员工表做一个内连接   select distinct c.id,c.phone,c.call_date from(select a.*,DATEDIFF("D",a.Call_date,b.Call_date) as daydiff from Call as a,Call as b where a.Phone = b.Phone and a.id != b.id) as c where c.daydiff >=0 and c.daydiff <= 7 -- 自连接  ...
Master_Li 发布于 7小时前 阅读 3

无题

为天地立心 为生民立命 为往圣继绝学 为万世开太平
Johnny_feng 发布于 6小时前 阅读 3

Git 常用命令清单

几个专用名词的译名如下: Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一、新建代码库 # 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-name] # 下载一个项目和它的整个代码历史 $ git clone [url] 二、配置 Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。 # 显示当前的Git配置 $ git config --list # 编辑Git配置文件 $ git config -e [--global] # 设置提交代码时的用户信息 $ git config [--global] user.name "[name]" $ git config [--global] user.email "[email address]" 三、增加/删除文件  # 添加指定文件到暂存区 $ git add [file1] [file2] ... # 添加指定目录到暂存区,包括子目录 $ git add [dir] # 添加当前目录的所有文件到暂存区 $ git add . # 添加每个变化前,都会要求确认 # 对于同一个文件的多处变化,可以实现分次提交 $ git add -p # 删除工作区文件,并且将这次删除放入暂存区 $ git rm [file1] [file2] ... # 停止追踪指定文件,但该文件会保留在工作区 $ git rm --cached [file]...
爱敲代码的程序员 发布于 4天前 阅读 5 点赞 1

php获取用户IP的方法

不安全的getIP函数 function getIP() { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $realip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { $realip = $_SERVER['HTTP_CLIENT_IP']; } else { $realip = $_SERVER['REMOTE_ADDR']; } return $realip; } 安全过滤后的getIP函数 function getIP() { $realip = ''; //设置默认值 if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $realip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { $realip = $_SERVER['HTTP_CLIENT_IP']; } else { $realip = $_SERVER['REMOTE_ADDR']; } preg_match('/^((?:\d{1,3}\.){3}\d{1,3})/',$realip,$match); return $match?$match[0]:false; } 以上函数,增加了IP判断,只会读取以Ip格式数据开头,并且第一个满足IP格式值。如果没有返回false。 这样就可以读取到满足格式的IP,验证了数据的IP格式。 如果我读取互联网的IP,用户传入局域网的IP,我应该直接过滤掉 //互联网允许使用IP地址 function ipType2($ip) { $iplist = explode(".", $ip); if ($iplist[0] >= ...
zhiqiangw 发布于 5小时前 阅读 3

vps baidu pan download

axel -n 10 --header 'referer=https://pan.baidu.com/s/1i5qZfXb' --output train2014.zip "https://d11.baidupcs.com/file/0da8c0bd3d6becc4dcb32757491aca88?bkt=p3-0000cb03d7d222a538f7254944a5f16a0ffc&xcode=352516ee44b8c1dbfa2124f1d7b73c08f05d2839191a383e0b2977702d3e6764&fid=369401560-250528-999852825680391&time=1502862416&sign=FDTAXGERLBHS-DCb740ccc5511e5e8fedcff06b081203-rnBklXXp1xmSEAmMhRvYtIzrLUw%3D&to=d11&size=13510573713&sta_dx=13510573713&sta_cs=1312&sta_ft=zip&sta_ct=1&sta_mt=1&fm2=MH,Yangquan,Netizen-anywhere,,guangdong,cnc&newver=1&newfm=1&secfm=1&flow_ver=3&pkey=0000cb03d7d222a538f7254944a5f16a0ffc&sl=81068110&expires=8h&rt=sh&r=999145034&mlogid=5278089630307711233&vuk=369401560&vbdid=1369239002&fin=train2014.zip&fn=train2014.zip&rtype=1&iv=0&dp-logid=5278089630307711233&dp-callid=0.1.1&hps=1&csl=10&csign=Sr4oWJzhjSf%2FfWbVjojccwUnAiQ%3D&so=0&ut=8&uter=4&serv=0&by=themis"  ...
Starryard 发布于 1个月前 阅读 10

Android 平台 Native 代码的崩溃捕获机制及实现

本文来自于**腾讯Bugly**公众号(**weixinBugly**),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/g-WzYF3wWAljok1XjPoo7w ## 一、背景 在Android平台,native crash一直是crash里的大头。native crash具有上下文不全、出错信息模糊、难以捕捉等特点,比java crash更难修复。所以一个合格的异常捕获组件也要能达到以下目的: - 支持在crash时进行更多扩展操作 - 打印logcat和应用日志 - 上报crash次数 - 对不同的crash做不同的恢复措施 - 可以针对业务不断改进和适应 ## 二、现有的方案 | 方案 | 优点 | 缺点 | | ------------- |-------------| -----| | Google Breakpad| 权威,跨平台 | 代码体量较大 | | 利用LogCat日志 | 利用安卓系统实现 |需要在crash时启动新进程过滤logcat日志,不可靠 | | coffeecatch | 实现简洁,改动容易 | 存在兼容性问题 | 其实3个方案在Android平台的实现原理都是基本一致的,综合考虑,可以基于coffeecatch改进。 ## 三、信号机制 #### 1.程序奔溃 - 在Unix-like系统中,所有的崩溃都是编程错误或者硬件错误相关的,系统遇到不可恢复的错误时会触发崩溃机制让程序退出,如除零、段地址错误等。 - 异常发生时,CPU通过异...
腾讯Bugly 发布于 2个月前 阅读 53

用得上的iOS库

keitaoouchi/MarkdownView
kut 发布于 16小时前 阅读 2

mongodb服务配置

  介绍 想在笔记本电脑上尝试 MongoDB?只需执行一个命令,你就会有一个轻量级的、独立的沙箱。完成后可以删除你所做的所有痕迹。 想在多个环境中使用相同的程序栈application stack副本?构建你自己的容器镜像,让你的开发、测试、运维和支持团队使用相同的环境克隆。 容器正在彻底改变整个软件生命周期:从最早的技术性实验和概念证明,贯穿了开发、测试、部署和支持。 编排工具用来管理如何创建、升级多个容器,并使之高可用。编排还控制容器如何连接,以从多个微服务容器构建复杂的应用程序。 丰富的功能、简单的工具和强大的 API 使容器和编排功能成为 DevOps 团队的首选,将其集成到连续集成(CI) 和连续交付 (CD) 的工作流程中。 这篇文章探讨了在容器中运行和编排 MongoDB 时遇到的额外挑战,并说明了如何克服这些挑战。 MongoDB 的注意事项 使用容器和编排运行 MongoDB 有一些额外的注意事项: MongoDB 数据库节点是有状态的。如果容器发生故障并被重新编排,数据则会丢失(能够从副本集的其他节点恢复,但这需要时间),这是不合需要的。为了解决这个问题,可以使用诸如 Kubernetes 中的数据卷volume 抽象等功能来将容器中临时的 MongoDB 数据目录映射到持久...
linux-tao 发布于 5小时前 阅读 3

Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析

1  背景 之所以写这一篇博客的原因是因为之前有写过一篇《Android应用setContentView与LayoutInflater加载解析机制源码分析》, 然后有人在文章下面评论和微博私信中问我关于Android应用Activity、Dialog、PopWindow加载显示机制是咋回事,所以我就写一 篇文章来分析分析吧(本文以Android5.1.1 (API 22)源码为基础分析),以便大家在应用层开发时不再迷糊。 PS一句:不仅有人微博私信我这个问题,还有人问博客插图这些是用啥画的,这里告诉大家。就是我,快来猛戳我 还记得之前《Android应用setContentView与LayoutInflater加载解析机制源码分析》这篇文章的最后分析结果吗?就是如下这幅图: 在那篇文章里我们当时重点是Activity的View加载解析xml机制分析,当时说到了Window的东西,但只是皮毛的分析了Activity相关的一些逻辑。(PS:看到这不清楚上面啥意思的建议先移步到《Android应用setContentView与LayoutInflater加载解析机制源码分析》,完事再回头继续看这篇文章。)当时给大家承诺过我们要从应用控件一点一点往下慢慢深入分析,所以现在开始深入,但是本篇的深入也只是仅限Window相关的东东,之后文章还会继续慢慢深入。 2  浅析Window与WindowManager相关...
微笑的江豚 发布于 16小时前 阅读 2

Spring Cloud实战小贴士:Ribbon的饥饿加载(eager-load)模式

> 我们在使用Spring Cloud的Ribbon或Feign来实现服务调用的时候,如果我们的机器或网络环境等原因不是很好的话,有时候会发现这样一个问题:我们服务消费方调用服务提供方接口的时候,第一次请求经常会超时,而之后的调用就没有问题了。下面我们就来说说造成这个问题的原因,以及如何解决的方法。 ## 问题原因 造成第一次服务调用出现失败的原因主要是Ribbon进行客户端负载均衡的Client并不是在服务启动的时候就初始化好的,而是在调用的时候才会去创建相应的Client,所以第一次调用的耗时不仅仅包含发送HTTP请求的时间,还包含了创建RibbonClient的时间,这样一来如果创建时间速度较慢,同时设置的超时时间又比较短的话,很容易就会出现上面所描述的显现。 从日志中我们也能知道这一点细节,在第一次发起调用的时候我们可以从日志中看到如下信息: ``` 2017-09-25 08:29:54,201 INFO [main] com.netflix.loadbalancer.DynamicServerListLoadBalancer - DynamicServerListLoadBalancer for client hello-service initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=hello-service,current list of Servers=[192.168.99.176:9901],Load balancer stats=Zone...
程序猿DD 发布于 5小时前 阅读 3

SDN 技术指南(一):架构概览

## Background 软件定义网络(Software-defined networking,SDN),一种新的网络架构。SDN 提出的控制与转发平面分离、网络状态集中控制、支持软件编程等理念并不是什么新鲜事,但是长久以来一直没有非常突破性的进展。 >“为了让系统更好地工作,早期需要管理复杂性而后期需要提取简单性。” —唐·诺曼(Donald Arthur Norman) 目前 SDN 引起广泛关注得益于网络需求侧翻天覆地的变化:云计算业务(服务器虚拟化技术为代表)成为主流,移动互联网催生的大数据技术日益普及,包括网络在内的资源快速配置、弹性扩容、按需调用需求强烈。传统模式的弊端显现:网络设备硬件、操作系统和网络应用三部分紧耦合在一起,组成一个封闭系统,这三部分相互依赖、每一部分的创新和演进都要求其余部分做出同样的升级。 越来越多的网络新协议和新算法使得网络控制平面变得越来越复杂,但是现在的网络用户却对网络的易用性有更高的要求,希望网络具有更多的可编程能力,从而自动化、智能化网络管理。正如 SDN 的倡导者 [Scott Shenker,U.C. Berkeley Professor](https://en.wikipedia.org/wiki/Scott_Shenker) 所言,网络发展目前还处于“管理复杂性”阶段,这样的架构严重阻碍了网络创...
RiboseYim 发布于 1个月前 阅读 36

Dubbo服务接口的设计原则

  一、接口版本: 每个接口都应定义版本号,为后续不兼容升级提供可能,如: <dubbo:service interface="com.XxService" version="1.0" /> 二、异常处理: 服务提供方不应将DAO或SQL等异常抛给消费方,应在服务实现中对消费方不关心的异常进行包装,否则可能出现消费方无法反序列化相应异常。 三、在Provider上尽量多配置Consumer端属性: 原因如下:作服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间,合理的重试次数,等等 在Provider配置后,Consumer不配置则会使用Provider的配置值,即Provider配置可以作为Consumer的缺省值。否则,Consumer会使用Consumer端的全局设置,这对于Provider不可控的,并且往往是不合理的。 Provider上尽量多配置Consumer端的属性,让Provider实现者一开始就思考Provider服务特点、服务质量的问题。
LYQ1990 发布于 14小时前 阅读 2

可能是国内最火的开源项目 —— Python 篇

推荐阅读: 可能是最火的开源项目 —— Java 篇 可能是国内最火的开源项目 —— PHP 篇 截止目前开源中国收录了 44478 款开源项目,囊括了最热门的各类开源项目,而软件的评分在一定程度上代表了软件的质量和热度,而 Python 语言近年来发展势头一路攀升,因此本文整理了 Python 语言中评分超过 8.0 分的几款项目,并附上评分和收藏量,以供开发者选择和交流,排名如下: 开源 ERP 系统 GoodERP 评分:8.7,收藏:74 GOODERP是一个开源ERP项目,软件采用agpl协议,版权归代码提交者所有,项目范围是一组功能模块,包括财务加进销存的核心模块及满足行业特殊需求的模块,这些模块都以openobject8.0为平台开发,模块全部放在 osbzr/gooderp mater分支的根目录下,每个模块一个目录,参照 ys 的功能菜单和输出布局重新设计。 Go 运行 Python Grumpy 评分:8.6,收藏:85 Grumpy 是一个 Python to Go 源代码翻译编译器和运行时,旨在替代 CPython 2.7。 关键的区别是它将 Python 源代码编译为 Go 源代码,然后将其编译为本机代码,而不是字节码。这意味着 Grumpy 没有 VM。编译的 Go 源代码是对 Grumpy 运行时的一系列调用,Go 库服务与 Python C API 类似的目的(尽管不直...
编辑部的故事 发布于 1周前 阅读 6333 评论 9 点赞 12 打赏 1

【码云周刊第 38 期】GVP 特辑(一):6款 Java WEB应用开发工具

每周为您推送最有价值的开源技术内参!
开源中国码云 发布于 1周前 阅读 3329 评论 5 点赞 8

微服务后如何做一次系统梳理

微服务治理的特点,网络延迟、分布式事务、异步消息。因此我们针对微服务的梳理也是从这几个方面入手。微服务后依赖关系从代码依赖变成了通讯依赖,我们梳理微服务系统的关键点,就是找出通讯依赖,确定是强依赖,还是弱依赖。
新栋BOOK 发布于 1周前 阅读 1768 评论 7 点赞 4

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

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

百度RPC框架 BRPC 初体验

9月14日,百度正式在GitHub上基于Apache 2.0协议开源了其RPC框架brpc。brpc是一个基于protobuf接口的RPC框架,在百度内部称为“baidu-rpc”,它囊括了百度内部所有RPC协议,并支持多种第三方协议,从目前的性能测试数据来看,brpc的性能领跑于其他同类RPC产品。
Jacktanger 发布于 4天前 阅读 1449 评论 15 点赞 1

好的架构不是设计出来的,而是演进出来的

好的架构不是设计出来的,而是演进出来的 对很多创业公司而言,很难在初期就预估到流量十倍、百倍以及千倍以后网站架构会是什么样的一个状况。同时,如果系统初期就设计一个千万级并发的流量架构,很难有公司可以支撑这个成本。 因此,这里主要会关注架构的眼花。在每个阶段,找到对应该阶段网站架构所面临的问题,然后在不断解决这些问题,在这个过程中整个架构会一直演进。 在58同城建立之初,站点的流量非常小,可能也就是十万级别,这也就意味着,平均每秒钟也就是几次的访问,此时网站架构的特点是:请求量比较低,数据量比较小,代码量也比较小。这个时候的站点可以被几个工程师轻易搞定,因此根本没什么“架构”可言。 其实这也是很多创业公司初期面临的问题,最开始58同城的站点架构用一个词概括就是“ALL IN ONE”,如下图所示: 就像一个单机系统,所有的东西都部署在一台机器上,包括站点、数据库、文件等等。而工程师每天的核心工作就是CURD,前端传过来一些数据,然后业务逻辑层拼装成一些CURD访问数据库,数据库返回数据,数据拼装成页面,最终返回到浏览器。相信很多创业团队初期都面临一个与之类似的情况,每天写代码,写SQL、接口参数、访问数据等等。 这...
刀神 发布于 1周前 阅读 1120

可能是最火的开源项目 —— Java 篇

很多开发者在看到自己感兴趣的项目时会使用 Star 功能,可以说 Star 的数量在一定程度上代表了开源项目的热门程度,本文整理了 Java 语言中 star 数最多的十五款开源项目,这些项目在 GitHub 上的 star 数均超过 15000,排名如下: Rx 的 Java 实现 RxJava star:26782;fork:4718 .Net响应式编程框架 Rx 的Java版本开源实现,有Groovy, Clojure, Scala and JRuby版本的实现。 分布式搜索引擎 ElasticSearch star:24646;fork:8723 Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎,能够解决越来越多的用例。作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。这个实时的分布式搜索分析引擎, 它能让你以一个之前从未有过的速度和规模,去探索你的数据。           REST 客户端 Retrofit star:23443;fork:4731 retrofit 是一个类型安全的 REST 客户端,用于 Android 平台。 RestAdapter restAdapter = new RestAdapter.Builder() .setServer("https://api.github.com") .build(); GitHubService service = restAdapter.create(GitHubService.class); HTTP+SPDY 客户端开发包 okhttp star:2...
编辑部的故事 发布于 1个月前 阅读 19610 评论 30 点赞 24

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 发布于 4天前 阅读 4564 评论 24 点赞 13

可能是国内最火的开源项目 —— PHP 篇

推荐阅读:可能是最火的开源项目 —— Java 篇 很多开发者在看到自己感兴趣的项目时会使用 Star 功能,可以说 Star 的数量在一定程度上代表了开源项目的热门程度,本文整理了 PHP 语言中 star 数最多的十款开源项目,这些项目在 Gitee 上的 star 数均超过 600,排名如下: 轻量级PHP后台接口开发框架 PhalApi  star:1007, fork:343 PhalApi是一个PHP轻量级后台接口开发框架。在iOS、Android、Windows Phone、PC版、Web版等各种终端和各种垂直应用不停更新迭代的大背景下,显然很是需要一组乃至一系列稳定的后台接口支撑。 所以,这里希望通过提供一个快速可用的后台接口开发框架,可以: 一来,支撑各业务场景下接口开发; 二来,阐明如何进行接口开发、设计和维护,以很好支持海量访问、大数据、向前向后兼容等; 三来,顺便分享一些好的思想、技巧和有用的工具、最佳实践。 如果您有接口项目开发的需要,又刚好需要一个PHP接口框架,欢迎使用! 我们也争取致力于将我们的PhalApi维护成像恒星一样:不断更新,保持生气;为接口负责,为开源负责! 基于Yii的协同办公管理系统 IBOS star:808, fork:513 IBOS 是一个基于PHP开发,Yii框架的,开源的,快速、高效的协...
编辑部的故事 发布于 2周前 阅读 7008 评论 22 点赞 12

【软件周刊第 46 期】历经 4 年半的开发,Sublime Text 3.0 正式版终发布

软件周刊(09.10 — 09.16):本周热门软件更新 — Spring Framework 5.0 最后一个 RC 版发布;Linux 桌面环境 GNOME 3.26 正式版发布;JUnit 5.0.0 发布,Java 单元测试框架;CentOS 7.4 发布,安全稳定的 Linux 发行版;近乎 V5.2 新版本正式上线,带来耳目一新的使用体验
编辑部的故事 发布于 1周前 阅读 5403 评论 11 点赞 1

专访iDST NLP负责人——淘宝内容搜索、评价归纳的幕后英雄

司罗在学术研究上的成功以及对人工智能商业化的理解让整个阿里巴巴集团的自然语言处理、搜索和推荐能力提升了一个台阶。
大大大大风车 发布于 7天前 阅读 704

程序员、架构师、技术经理、技术总监和CTO都是干什么的?

​  程序员   程序员,英文名coder/programmer,大家常自嘲叫码农的阶段。这个角色职责是把需求或产品实现为用户可用的软件产品。   此职位为执行级别。另外因为经验较少,一般需要求助别人,或与别人一起完(ban)成(zhuan)一个任务。   此阶段大概要经历3年,程序员的职责如下:   1、负责公司运营系统的设计与开发工作   2、运营数据处理和分析   高级程序员   高级程序员学名工程师。到了这个level,英文名可改叫做engineer或developer。此时你的功力开始增强,这与你平时的积累努力是分不开的,祝贺你~   此时的你不仅可以完成任务,开始注重代码的质量,能够写出工业级的代码。   你的经验可胜任模块级的系统设计,承担完成较为复杂的技术,能有效的自我管理,有帮助别人快速解决问题(trouble shooting)的能力。   此阶段你需要经历到7、8年左右的体验,中间要经历一段深刻自我历练的过程。   有时给人致命一击其实是心里的小蟊贼。一般人在5年前后遇到一个门槛,碰到天花板+彷徨期,或者你打心眼里不在喜欢编程,可尝试转为其它角色,如产品经理,售前售后支持等岗位,也不失为好选择。   当我们熬过这段儿,就会“山随平野尽,江入...
刀神 发布于 3周前 阅读 618

2T架构师教学视频打包分享

“一站式架构师学习资料”全共享 第三季“架构师资料共享圈” 【特别圈】 为什么说是特别圈? 一,架构师第一段 二,架构师第二段 三,架构师第三段 四,架构师第四段 五,架构师第五段 六,架构师第六段 七,架构师第七段 八,架构师第八段,淘宝商城实战项目 九,架构师第九段 可加入架构师微信群 每期干货永久即时获取 【本期干货,架构师教学视频分享完毕】 后续每期分享预告: docker云,人工智能,语音识别,人脸识别,机器学习,数据挖掘,深度学习
刀神 发布于 1个月前 阅读 1176

form配合iframe实现文件异步上传

form配合iframe实现文件异步上传
tianshl 发布于 1个月前 阅读 4805

Mac SecureCRT 破解

### 文件 ``` 文件地址: https://pan.baidu.com/s/1jISgEJs 密码: 5uhq 安装文件: scrt-7.3.7-1034.osx_x64.dmg 破解文件: securecrt_mac_crack.pl ``` ### 安装 ``` 1. 双击安装文件 2. 点击"Agree" 3. 将"SecureCRT"拷贝至 应用程序 ``` ### 破解 ``` 1. sudo perl ~/Downloads/securecrt_mac_crack.pl /Applications/SecureCRT.app/Contents/MacOS/SecureCRT 2. 打开 应用程序 中的SecureCRT 3. 点击"Enter License Data..." 4. 点击"Continue" 5. 点击"Enter License Manually" 6. 填写第一步中控制台打印的信息 7. 点击"Done" ``` ### 附加 ###### 记住密码 ``` Preferences => General => Use Keychain 取消勾选 ``` ###### 中文乱码 ``` 右键某个session => Properties => Terminal => Appearance => Character encoding 设置为UTF-8 ```...
tianshl 发布于 2周前 阅读 4844

Python 字符串格式化 format

## 写在开头 ```python 比%更优雅的字符串格式化方式. def format(self, *args, **kwargs): # S.format(*args, **kwargs) -> string # Return a formatted version of S, using substitutions from args and kwargs. # The substitutions are identified by braces ('{' and '}'). ``` ## 格式化方式 ##### 通过索引格式化 ```python 注意: "通过索引从format参数中的args中取值, 索引从0开始依次填充{0}, {1} ..." >>> print "{0} 的体重为 {1}KG".format("tianshl", 57) tianshl 的体重为 57KG >>> print "{1} 的体重为 {0}KG".format(57, "tianshl") tianshl 的体重为 57KG ``` ```python 注意: "format中参数个数不能少于实际要填充的{}的个数, 多余的参数会忽略" >>> print "{0} 的体重为 {1}KG".format("tianshl",) Traceback (most recent call last): File "", line 1, in IndexError: tuple index out of range >>> print "{0} 的体重为 {1}KG, Ta的名字为 {0}".format("tianshl", 57) tianshl 的体重为 57KG, Ta的名字为 tianshl >>> print "{0} 的体重为 {1}KG".format("tianshl", 57, "多余的参数") tianshl 的体重为 57KG ``` ```python 注意: "若{}不写索引则...
tianshl 发布于 2个月前 阅读 5160

Nginx反向代理将不同的API代理到同一个域名下

Nginx 通过反向代理将不同的API代理到同一个域名下
tianshl 发布于 2周前 阅读 3816

Mac OS 安装启动nginx

### 使用brew安装nginx ``` brew install nginx ``` ### 加入开机启动 ``` sudo cp /usr/local/opt/nginx/homebrew.mxcl.nginx.plist /Library/LaunchDaemons/ sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.nginx.plist ``` ### 配置文件路径 ``` /usr/local/etc/nginx/ ``` ### nginx 帮助信息 ``` tianshl:~ tianshl$ nginx -h nginx version: nginx/1.12.1 Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives] Options: -?,-h : this help -v : show version and exit -V : show version and configure options then exit -t : test configuration and exit -T : test configuration, dump it and exit -q : suppress non-error messages during configuration testing -s signal : send signal to a master process: stop, quit, reopen, reload -p prefix : set prefix path (default: /usr/local/Cellar/nginx/1.12.1/) -c filename : set configuration file (default: /usr/local/etc/nginx/nginx.conf) -g directives : set global directives out of configuration file ``` ### 常用命令 ``` 1. 启动命令: sudo ...
tianshl 发布于 2周前 阅读 3674

彻底理解了Object这个属性

1.实例化Object对象 实例化Object对象的方式有两种:使用Object构造器和使用对象的字面量。例如: var person1 = { name: '李四' }; var person2 = new Object(); person2.name = '王二'; 2.为实列添加属性 我们可以随时随地为对象添加属性,也可以随时修改属性的值。 复制代码 var person1 = { name: '小明' }; var person2 = new Object(); person2.name = '小红'; //给对象添加属性 person1.age = 23; person2.age = 25; //修改属性的值 person1.name = '张三'; console.log(person1.name); //'张三' person2.name = '李四'; console.log(person2.name); //'李四' 3.删除对象中的属性 var person1 = { name: '张三' }; person1.name = null; console.log(person1.name); //'张三' delete person1.name; console.log(person1.name); //'undefined' 4.检查属性 由于对象的属性可以被随时随地被修改或删除,因此有时候我们需要检查对象的某个属性是否存在。使用下面的方式检查是不可靠的: var person1 = { name: '张三' }; person1.name = '';//或者null/undefined if (person1.name) { console.log('存在'); } ...
爱敲代码的程序员 发布于 6天前 阅读 550 评论 4 点赞 6

【码云周刊第 39 期】GVP 特辑(二):7 款 JAVA 程序开发“大杀器”

每周为您推送最有价值的开源技术内参!
开源中国码云 发布于 3天前 阅读 5204 评论 7 点赞 9

413 Request Entity Too Large

### 问题 ``` 413 Request Entity Too Large ``` ### 原因 ``` nginx默认请求文件的大小受限 ``` ### 解决 ##### 1. 修改nginx配置文件, 将client_max_body_size修改的大一些, 比如改为20M ``` client_max_body_size 20M; ``` ##### 2. 重启nginx, 使配置生效 ``` nginx -s reload ```
tianshl 发布于 2个月前 阅读 4899

一天一个RDD函数-3:checkpointRDD

检查点是一个数据库事件,它把修改数据从高速缓存写入磁盘,并更新控制文件和数据文件,起到的是一个持久化的作用。 看一下函数的定义: private def checkpointRDD: Option[CheckpointRDD[T]] = checkpointData.flatMap(_.checkpointRDD) 返回了一个CheckpointRDD[T]的Option类,Scala语言中包含一个标准类型Option类型,代表可选值,Option类型的值可以有两个可能的值,一个为some(x) 其中x为有效值,另外一个为None对象,代表空值。即要么返回一个CheckpointRDD[T]类型,要么返回一个None值。 而变量checkpointData在源码中是这么定义的 private[spark] var checkpointData: Option[RDDCheckpointData[T]] = None 可以看到它是一个RDDCheckpointData[T]的类型,继续探究一下: /** * This class contains all the information related to RDD checkpointing. Each instance of this * class is associated with an RDD. It manages process of checkpointing of the associated RDD, * as well as, manages the post-checkpoint state by providing the updated partitions, * iterator and preferred locations of the checkpointed RDD. */ private[spark] abst...
牧师-Panda 发布于 4小时前 阅读 1

MyBatis源码分析一

最近打算尝试学习如何上手阅读一个优秀框架的源代码,吸收框架的精华,师夷长技以制夷。阅读源码的好处,或者说我的一个目标,那可能就是学习优秀的框架设计理念,优雅的设计模式套路,最终定制自己的框架去解决自己的真实需求。 优先物色几个框架,择其一而入: spring,hibernate,mybatis,rocketmq,java集合框架,Java多线程框架…… spring框架之强大,毋庸置疑,开源代码已经被javaer传为佳话,奉为经典,堪称艺术佳作,自然不是空穴来风,但是它并不适合新手的我,尽管实际开发可能接触比较多的就是它,但是它太厚重,代码量太大,虽然明知道它江山美如画,若是一睹芳容,一窥深浅自然是极好,可是那些你holder住吗?所以我还是不敢择其而深入,不过等经验更足之后,定要与它缠绵十天半月。那么hibernate呢?很重,不甚欢喜,用起来虽然蛮爽的,不过门槛比较高,深入进去复杂度那也是杠杠的,等有机会与时间再与它交流 交流。rocketmq是阿里大牛们的精品,经历了数次双十一挑战与验证,坚决不能错过,收入囊中,待下次借它头盖(阿里有中国java程序员的天堂的美称)。Java集合,多线程框架,自然是我们Javaer必学的工具,代码自然是极好,多次决定深入了解,奈何始...
世界和平维护者 发布于 4小时前 阅读 2

Mybatis Sql语句#{},和 ${}传参的区别

#{},和 ${}传参的区别如下: 使用#传入参数是,sql语句解析是会加上"",当成字符串来解析,这样相比于$的好处是比较明显对的吧,#{}传参能防止sql注入,如果你传入的参数为 单引号',那么如果使用${},这种方式 那么是会报错的 另外一种场景是,如果要做动态的排序,比如 order by column,这个时候务必要用${} select * from table order by 'name' ,这样是没用 目前来看,能用#就不要用$。 但是${}在什么情况下使用呢? 有时候可能需要直接插入一个不做任何修改的字符串到SQL语句中。这时候应该使用${}语法。 比如,动态SQL中的字段名,如:ORDER BY ${columnName}
Hzhodor 发布于 4小时前 阅读 1

OSChina 周二乱弹 ——首届码云女神

Osc乱弹歌单(2017)请戳(这里) 【今日歌曲】 @焕焕 :分享林二汶的单曲《Little Girl In The World》 《Little Girl In The World》- 林二汶 手机党少年们想听歌,请使劲儿戳(这里) 大家说昨天的大新闻是啥? 对! 打开网站就让你吃了一惊。 lusi :哎哟,竟然还有封面人物。。。 也有人吃惊的方式不太对, @xiaolei123 :卧槽!!左下角不懂不懂啊。我以为是运营商的广告呢。 你才运营商广告呢, 大家纷纷表示仰慕之情。 @木有龙井茶 :不懂很给力啊 @OSC_QpNxWM  :我去这个封面很给力啊,美女程序员不懂。 明显被颜值圈粉了。 @CMAD :厉害了 被这个小姐姐圈粉了 都有人开始表白啦。 @夏虫不语冰_ :哇!表白表白,爱你爱你,不懂不懂!!@吕不懂  首届码云女神。 @wfifi :诞生了首届码云女神? 是的, 第一次见的表示很惊艳! @布拉格_Only  :卧槽,这女的真美!
卧槽,还有胸和大腿!
卧槽,真好看!
@吕不懂  这个时候就看出来读书的好处来了。 @陨落人间 :老一辈人的教导,人要多读书,真是没错。 看到楼主@吕不懂 这样的美女的时候,你可以说: 回眸一笑百魅生,六宫粉黛无颜色。 北方有佳人,绝世而独一顾倾人城,再顾倾人国。 一代倾城...
小小编辑 发布于 4小时前 阅读 10 评论 3

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

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

Python入门 -- 内建模块

1、Collections模块 >>> import collections 这是如何导入这个模块,现在我们来看看其中的一些类。 1.1 Counter Counter 是一个有助于 hashable 对象计数的 dict 子类。它是一个无序的集合,其中 hashable 对象的元素存储为字典的键,它们的计数存储为字典的值,计数可以为任意整数,包括零和负数。 我们可以这样查看 Counter 的帮助信息,事实上这些信息来源于 Counter 的文档字符串(collections.Counter.__doc__)。 下面我们来看一个例子,例子中我们查看 Python 的 LICENSE 文件中某些单词出现的次数。 1.1.1 Counter 示例 >>> from collections import Counter >>> import re >>> path = '/usr/lib/python3.4/LICENSE.txt' >>> words = re.findall('\w+', open(path).read().lower()) >>> Counter(words).most_common(10) [('the', 80), ('or', 78), ('1', 66), ('of', 61), ('to', 50), ('and', 48), ('python', 46), ('in', 38), ('license', 37), ('any', 37)] Counter 对象有一个叫做 elements() 的方法,其返回的序列中,依照计数重复元素相同次数,元素顺序是无序的。 >>> c = Counter(a=4, b=2, c=0, d=-2) >>> list(c.elements()) ['b','b','a', ...
兴趣使然的程序员 发布于 5小时前 阅读 4

Spring Cloud实战小贴士:Ribbon的饥饿加载(eager-load)模式

> 我们在使用Spring Cloud的Ribbon或Feign来实现服务调用的时候,如果我们的机器或网络环境等原因不是很好的话,有时候会发现这样一个问题:我们服务消费方调用服务提供方接口的时候,第一次请求经常会超时,而之后的调用就没有问题了。下面我们就来说说造成这个问题的原因,以及如何解决的方法。 ## 问题原因 造成第一次服务调用出现失败的原因主要是Ribbon进行客户端负载均衡的Client并不是在服务启动的时候就初始化好的,而是在调用的时候才会去创建相应的Client,所以第一次调用的耗时不仅仅包含发送HTTP请求的时间,还包含了创建RibbonClient的时间,这样一来如果创建时间速度较慢,同时设置的超时时间又比较短的话,很容易就会出现上面所描述的显现。 从日志中我们也能知道这一点细节,在第一次发起调用的时候我们可以从日志中看到如下信息: ``` 2017-09-25 08:29:54,201 INFO [main] com.netflix.loadbalancer.DynamicServerListLoadBalancer - DynamicServerListLoadBalancer for client hello-service initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=hello-service,current list of Servers=[192.168.99.176:9901],Load balancer stats=Zone...
程序猿DD 发布于 5小时前 阅读 3

mongodb服务配置

  介绍 想在笔记本电脑上尝试 MongoDB?只需执行一个命令,你就会有一个轻量级的、独立的沙箱。完成后可以删除你所做的所有痕迹。 想在多个环境中使用相同的程序栈application stack副本?构建你自己的容器镜像,让你的开发、测试、运维和支持团队使用相同的环境克隆。 容器正在彻底改变整个软件生命周期:从最早的技术性实验和概念证明,贯穿了开发、测试、部署和支持。 编排工具用来管理如何创建、升级多个容器,并使之高可用。编排还控制容器如何连接,以从多个微服务容器构建复杂的应用程序。 丰富的功能、简单的工具和强大的 API 使容器和编排功能成为 DevOps 团队的首选,将其集成到连续集成(CI) 和连续交付 (CD) 的工作流程中。 这篇文章探讨了在容器中运行和编排 MongoDB 时遇到的额外挑战,并说明了如何克服这些挑战。 MongoDB 的注意事项 使用容器和编排运行 MongoDB 有一些额外的注意事项: MongoDB 数据库节点是有状态的。如果容器发生故障并被重新编排,数据则会丢失(能够从副本集的其他节点恢复,但这需要时间),这是不合需要的。为了解决这个问题,可以使用诸如 Kubernetes 中的数据卷volume 抽象等功能来将容器中临时的 MongoDB 数据目录映射到持久...
linux-tao 发布于 5小时前 阅读 3

Linux命令思维导图

# Linux常用命令 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233100_Xypx.png "在这里输入图片标题") # 1 文件目录操作 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233134_SCCp.png "在这里输入图片标题") # 2 文件查找 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233146_mrYJ.png "在这里输入图片标题") # 3 文件打包上传和下载 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233512_rfag.png "在这里输入图片标题") # 4 文件权限设置 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233159_fFap.png "在这里输入图片标题") # 5 磁盘存储 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233211_Paaa.png "在这里输入图片标题") # 6 性能监控和优化 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233224_hatX.png "在这里输入图片标题") # 7 网络相关 ![输入图片说明](https://static.oschina.net/uploads/img/201709/25233237_wxHc.png "在这里输入图片标题") # 8 其他 ![输入图片说明](https://static.oschina.ne...
添仔哥哥 发布于 5小时前 阅读 5

php获取用户IP的方法

不安全的getIP函数 function getIP() { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $realip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { $realip = $_SERVER['HTTP_CLIENT_IP']; } else { $realip = $_SERVER['REMOTE_ADDR']; } return $realip; } 安全过滤后的getIP函数 function getIP() { $realip = ''; //设置默认值 if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $realip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { $realip = $_SERVER['HTTP_CLIENT_IP']; } else { $realip = $_SERVER['REMOTE_ADDR']; } preg_match('/^((?:\d{1,3}\.){3}\d{1,3})/',$realip,$match); return $match?$match[0]:false; } 以上函数,增加了IP判断,只会读取以Ip格式数据开头,并且第一个满足IP格式值。如果没有返回false。 这样就可以读取到满足格式的IP,验证了数据的IP格式。 如果我读取互联网的IP,用户传入局域网的IP,我应该直接过滤掉 //互联网允许使用IP地址 function ipType2($ip) { $iplist = explode(".", $ip); if ($iplist[0] >= ...
zhiqiangw 发布于 5小时前 阅读 3

SQLSERVER常用SQL语句(持续更新)

1.增加表记录序号 select * from (select row_number() over(order by id desc) as rownum,* from test) t where rownum between 5 and 10 2.字符串截取 substring(str,pos,len) // 示例(index从1开始) SELECT substring(name, 2, 4) FROM test WHERE name = 'San Diego'; // 结果 'an D'  
HarleyZhuge 发布于 5小时前 阅读 4

博客园--设置自己的样式

博客园,是一个很不错的选择,在这里可以定制化自己的页面。 开源中国,为编写者提供了所有的方便
忘川-hsm 发布于 5小时前 阅读 1

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

工厂方法模式
xpbob 发布于 6小时前 阅读 12

LuaJIT的变量实现-TValue

Lua是动态类型的编程语言,变量的值可以是数值、字符串、table等所有支持的数据类型。在Lua虚拟机中每个变量都是用一个TValue结构体表示。LuaJIT出于效率的考虑重新组织了TValue结构体。 # lua-5.1中的TValue结构 lua-5.1中TValue的结构定义在lobject.h中,如下所示 ``` /* ** Union of all Lua values */ typedef union { GCObject *gc; void *p; lua_Number n; int b; } Value; #define TValuefields Value value; int tt typedef struct lua_TValue { TValuefields; } TValue; ``` TValue结构体包含了两个部分,int类型的成员tt表示类型,Value成员是一个union结构,依据类型,有不同的含义。 * 当类型位nil时,nil本身不再需要其他标识,Value成员没有意义 * 当类型为boolean时,成员b为0或1表示false或true * 当类型为number时,成员n表示,为double类型 * 当类型为lightuserdata时,成员p,表示指针 * 当类型为function/string/userdata/table/thread等需要GC管理的类型时,成员gc表示相应GC对象的指针。 这样一个变量只要对应一个TValue结构便可以表示Lua支持的所有类型。 lua中所有的数值都是用double类型的浮点数来表示,需要占用64位的空间。再加上额外的int类型...
qlee 发布于 6小时前 阅读 4

无题

为天地立心 为生民立命 为往圣继绝学 为万世开太平
Johnny_feng 发布于 6小时前 阅读 3

X Manager连接centos 7的两篇好文章

今天为了配置连接centos7.5的远程桌面,看了2篇好文章: 远程CentOS7服务器   http://blog.csdn.net/wuzhimang/article/details/51523867 XManager5连接CentOS7    http://www.cnblogs.com/amoyzhu/p/6603959.html 总结:CentOS7采用lightdm管理远程桌面连接。  
温暖的夏天 发布于 6小时前 阅读 4

group_concat

![输入图片说明](https://static.oschina.net/uploads/img/201709/25221027_sZ8K.png "在这里输入图片标题")
灯下草虫鸣_ 发布于 7小时前 阅读 1

angular2 绘制星空背景图

制作一个星空背景动图 参考代码:http://www.htmleaf.com/Demo/201707294657.html import {Component, OnInit, HostListener} from "@angular/core"; @Component({ selector: 'star-background', template: ` <canvas id="canvas" style="position: absolute"></canvas> ` }) export class StarBackgroundComponent implements OnInit { ngOnInit(): void { this.draw(); } draw() { var canvas: any = document.getElementById('canvas'), ctx = canvas.getContext('2d'), w = canvas.width = window.innerWidth, h = canvas.height = window.innerHeight, hue = 217, stars = [], count = 0, maxStars = 1400; // Thanks @jackrugile for the performance tip! http://codepen.io/jackrugile/pen/BjBGoM // Cache gradient var canvas2 = document.createElement('canvas'), ctx2 = canvas2.getContext('2d'); canvas2.width = 100; canvas2.height = 100; var half = canvas2.width / 2, gradient2 = ctx2.createRadialGradient(half, half, 0, half, ...
今天来找bug 发布于 7小时前 阅读 2

用SQL做数据分析_2

  select p.Name,p.Statisfaction,d.Department from Person as p inner join (select d.DepartmentID,d.Department, max(p.Statisfaction) as Statisfaction from Department as d left join Person as p on p.DepartmentID = d.DepartmentID group by d.DepartmentID,d.Department) as d on p.Statisfaction = d.Statisfaction and p.DepartmentID = d.DepartmentID order by d.DepartmentID -- 先查出每个部门的最高满意度、部门ID、部门名称,然后和员工表做一个内连接   select distinct c.id,c.phone,c.call_date from(select a.*,DATEDIFF("D",a.Call_date,b.Call_date) as daydiff from Call as a,Call as b where a.Phone = b.Phone and a.id != b.id) as c where c.daydiff >=0 and c.daydiff <= 7 -- 自连接  ...
Master_Li 发布于 7小时前 阅读 3

基于广播的打印机状态变更与应用交互的机制

目前做的项目是android面板和打印机交互App,把交互中用到的机制总结下来供以后参考 # 交互的基本原理: 打印机通过打印机事件通过广播的方式,通知应用程序,打印机的最新状态。应用程序通过web api 开启打印机扫描、打印以及获取状态信息。 # 项目需求 应用程序请求扫描/打印任务,把处理扫描/打印任务状态(取消,拒绝,暂停,预览)变为通用逻辑(状态机),把最终结果传递给回调函数 # 结构图 下面是控制打印机扫描/打印和监听状态的结构图: ![输入图片说明](https://static.oschina.net/uploads/img/201709/25201334_uwkD.png "在这里输入图片标题") # 代码分析 ## Scanjob 从状态机的开始请求开始mApplication.getScanJob().scan(requestAttributes),分析Scanjob类: ``` public ScanJob(){ this.mHandler = new ScanJobMessageDispatcher(); // sets the listener for the asynchronous communications this.mHandler.setScanJobListener(new JobListener() { @Override public void onChangeJobStatus(ScanJobAttributeSet jobStatus) { changeJobStatus(jobStatus); } @Override public void setJobId(String jobId) { setCurrentJobId(jobId); } @Override pu...
1071954237 发布于 7小时前 阅读 3

MVC与单元测试实践之健身网站(完)-备案与部署

主页-http://www.zhixin9001.cn/Home/Introduce GitHub- https://github.com/zhixin9001/Fitness   这是关于Fit网站的最后一篇,这几天网站备案审核通过,以后就可以正式使用了。 项目过程中学习了MVC、单元测试、Bootstrap、IOC等内容,也体验了云存储、虚机的使用(共享虚机)。 域名备案真是麻烦极了,要在网上提交申请,拍照上传照片,下载打印三张纸质申请单,开始时没看清楚陕西地区的日期不能写还作废了好几张,然后还要邮寄到河南。拍照还要购买邮寄什么幕布,但想要人家解析自己的域名,没办法呢   网站包含一些基础的功能如训练打卡、计划定制、统计分析等,如果你像我一样厌倦了市面上健身应用的繁琐,又想为自己量身打造训练内容,不妨试试这个网站吧。有很多不完善的地方,欢迎试用,欢迎多提改进意见。   首页-打卡、今日训练内容、坚持天数   健身日程-未来30天的健身日程,以及历史执行记录   健身计划-可自行配置N天一个循环的健身计划,内容包括力量训练、综合训练以及休息   定制计划-可选择跑步、游泳等综合性训练,或者针对身体不同部位的肌群选择对应的动作   围度记录-可以记录体重及各部位围度,定期记录,便于了解训练效果   围度变化-根...
zhixin9001 发布于 7小时前 阅读 2

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

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

SpringCloud(第 018 篇)Zuul 服务 API 网关微服务之代理与反向代理

1、API 服务网关顾名思义就是统一入口,类似 nginx、F5 等功能一样,统一代理控制请求入口,弱化各个微服务被客户端记忆功能; 2、本章节主要讲解了使用 zuul 的代理功能与反向代理功能,当然 zuul 还有很多属性设置,我就没一一列举所有的测试方法了; 3、http://localhost:8150/routes 地址可以查看该zuul微服务网关代理了多少微服务的serviceId;
HMILYYLIMH 发布于 2天前 阅读 1563 评论 7 点赞 2

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 发布于 4天前 阅读 4564 评论 24 点赞 13

数据可视化(三)基于 Graphviz 实现程序化绘图

- OmniGraffle 和 Graphviz - Why draw when you can code? - Graphviz 简介 - 最佳 Graphviz 实践(一):流程图、数据结构图、网络路径 Trace Route - 最佳 Graphviz 实践(二):复杂社会关系链分析(《红楼梦》、《权力的游戏》) - 最佳 Graphviz 实践(三):机器学习算法-决策树(Decision Tree)
RiboseYim 发布于 4天前 阅读 1541 评论 3 点赞 3

关于Python 列表操作 ,最常见问答Top10

列表是最常用的数据类型之一,本文整理了 StackOverflow 上关于列表操作被访问最多的10个问答,如果你在开发过程中遇到这些问题,不妨先思考一下如何解决。 1、迭代列表时如何访问列表下标索引 普通版: items = [8, 23, 45] for index in range(len(items)): print(index, "-->", items[index]) >>> 0 --> 8 1 --> 23 2 --> 45 优雅版: for index, item in enumerate(items): print(index, "-->", item) >>> 0 --> 8 1 --> 23 2 --> 45 enumerate 还可以指定元素的第一个元素从几开始,默认是0,也可以指定从1开始: for index, item in enumerate(items, start=1): print(index, "-->", item) >>> 1 --> 8 2 --> 23 3 --> 45 2、append 与 extend 方法有什么区别 append表示把某个数据当做新元素追加到列表的最后面,它的参数可以是任意对象 x = [1, 2, 3] y = [4, 5] x.append(y) print(x) >>> [1, 2, 3, [4, 5]] extend 的参数必须是一个可迭代对象,表示把该对象里面的所有元素逐个地追加到列表的后面 x = [1, 2, 3] y = [4, 5] x.extend(y) print(x) >>> [1, 2, 3, 4, 5] # 等价于: for i in y: x.append(i) 3、检查列表是否为空 普通版:...
liuzhijun 发布于 6天前 阅读 1071 评论 2 点赞 10

从0开始的微服务架构:(一)重识微服务架构

导语 虽然已经红了很久,但是“微服务架构”正变得越来越重要,也将继续火下去。 各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货,要么就是以高端的专业术语来讲述何为微服务架构。就是没有一个做到成熟地将技术传播出来,同时完美地照顾“初入微服务领域人员”,从0开始,采用通俗易懂的语言去讲解微服务架构的系列。 所以,本文试图开启微服务架构专题“Re:从0开始的微服务架构”,为还没有入门该领域的技术人员开路,也帮助微服务架构老手温故知新。   这是专题的第一篇文章,从最基础的地方入手,让我们重识微服务架构。 前言 得益于2013年Docker的诞生,微服务概念及架构的推广和落地变得更加的可靠和方便。在2016年及之前,微服务架构的讨论更多的是活跃于互联网企业及社区。现如今,随着Docker和微服务架构组件与Docker等相关技术的逐步成熟,微服务架构已然步入传统企业及传统行业。 但是,程序员作为一个理性消费的群体,需要冷静地思考,避免挖个大坑把自己给埋了。所以,我们需要冷静地搞清楚:微服务(架构)是什么?它有什么优势劣势?我们为什么需要采用微服务架构?如...
京东技术 发布于 6天前 阅读 3182 评论 18 点赞 22

VirtualDOM与diff(Vue实现)

## 写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出。 文章的原地址:[https://github.com/answershuto/learnVue](https://github.com/answershuto/learnVue)。 在学习过程中,为Vue加上了中文的注释[https://github.com/answershuto/learnVue/tree/master/vue-src](https://github.com/answershuto/learnVue/tree/master/vue-src),希望可以对其他想学习Vue源码的小伙伴有所帮助。 可能会有理解存在偏差的地方,欢迎提issue指出,共同学习,共同进步。 ## VNode 在刀耕火种的年代,我们需要在各个事件方法中直接操作DOM来达到修改视图的目的。但是当应用一大就会变得难以维护。 那我们是不是可以把真实DOM树抽象成一棵以JavaScript对象构成的抽象树,在修改抽象树数据后将抽象树转化成真实DOM重绘到页面上呢?于是虚拟DOM出现了,它是真实DOM的一层抽象,用属性描述真实DOM的各个特性。当它发生变化的时候,就会去修改视图。 但是这样的JavaScript操作DOM进行重绘整个视图层是相当消耗性能的,我们是不是可以每次只更新它的修改呢?所以Vue.js将DOM抽象成一个以JavaScript对象为节点的虚拟...
染陌同学 发布于 1周前 阅读 1462 点赞 4

微服务后如何做一次系统梳理

微服务治理的特点,网络延迟、分布式事务、异步消息。因此我们针对微服务的梳理也是从这几个方面入手。微服务后依赖关系从代码依赖变成了通讯依赖,我们梳理微服务系统的关键点,就是找出通讯依赖,确定是强依赖,还是弱依赖。
新栋BOOK 发布于 1周前 阅读 1768 评论 7 点赞 4

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) || ...
王孟君 发布于 1周前 阅读 1922 评论 7 点赞 5

浅析开源数据库MySQL架构

数据库是所有应用系统的核心,故保证数据库稳定、高效、安全地运行是所有企业日常工作的重中之重。数据库系统一旦出现问题无法提供服务,有可能导致整个系统都无法继续工作。所以,一个成功的数据库架构在高可用设计方面也是需要充分考虑的。下面就为大家介绍一下如何构建一个高可用的MySQL数据库系统。 做过DBA或者是运维的同学都应该知道,任何设备或服务,存在单点就会带来巨大风险,因为这台物理机一旦宕机或服务模块crash,若在短时间内无法找到替换的设备,势必会影响整个应用系统。因而如何保证不出现单点就是我们的重要工作,使用MySQL高可用方案可以很好地解决这个问题,一般有以下几种: 一、利用MySQL自身的Replication来实现高可用 MySQL自带的Replication就是我们常说的主从复制(AB复制),通过对主服务器做一个从机,在主服务器宕机的情况下快速地将业务切换到从机上,保证应用的正常使用。利用AB复制做高可用方案也分为几种不同的架构: 1、常规的MASTER---SLAVE解决方案 普通的MASTER---SLAVE是目前国内外大多数中小型公司最常用的一种架构方案,主要的好处就是简单、使用设备较少(成本较低)、维护方便。这种架构能解决单点的问题,而且还能在很大程度上...
illy安智 发布于 2周前 阅读 2038 评论 5 点赞 1

在CentOS 7 上使用PaceMaker构建NFS HA服务

## 基本环境 * 总共四台虚拟机,安装CentOS 7 X64系统。 * 每台虚拟机两张网卡,分别连接两个网络,NAT网络192.168.195.0,仅主机网络192.168.162.0。 * Target主机安装iSCSI TGT服务,提供共享存储服务。 * Test1和Test2主机利用Target主机提供的共享存储对外提供A/P结构的NFS服务,使用PaceMaker进行集群管理。 * Develop主机mount有Test主机提供的NFS服务并测试其功能。 ## 网络配置 ### IP地址 使用静态IP地址,并按如下的方式进行配置。 Target eth0 : 192.168.195.131 eth1 : 192.168.162.131 Test1 eth0 : 192.168.195.132 eth1 : 192.168.162.132 Test2 eth0 : 192.168.195.133 eth1 : 192.168.162.133 Develop eth0 : 192.168.195.136 eth1 : 192.168.162.136 NFS使用的浮动IP为:192.168.195.200。 ### 域名解析 在四台机器的域名解析文件下增加如下部分,并确保相互可以ping通。 $ vi /etc/hosts 192.168.195.131 target 192.168.195.132 test1 192.168.195.133 test2 192.168.195.136 develop ## 配置iSCSI ### 安装tgt服务 在Target主机上执行如下操作: 安装软件包 $ yum install -y scsi-target-utils iscsi-initiator-utils 配置tgt服务,使用/dev/sdd1分区...
LastRitter 发布于 2周前 阅读 1285 评论 4 点赞 1

LVM锁机制分析

## LVM支持的锁类型 0. 无锁(No Locking) - 不使用锁,此状态下不能并行执行命令,或者由使用者处理并行问题。 1. 本地锁(Local Locking) - 当使用本地flock锁,只能在单机环境下使用;当use_lvmlockd=1时,同时使用lvmlockd提供的锁,可用于集群环境。 2. 外部锁(External Locking) - 使用外部共享库提供的锁功能,可以在配置文件中设置库的名称,在共享库中只要按要求。 3. 集群锁(Clustered Locking) - 使用内建的集群锁,必须配合clvmd来使用,同时必须关闭lvmetad缓存功能。 4. 只读锁(Read-Only Locking) - 只读模式,禁止元数据修改。 5. 哑巴锁(Dummy Locking) - 只读模式,被不需要锁的工具使用。 配置文件: ```sh $ cat /etc/lvm/lvm.conf ... # Configuration option global/locking_type. # Type of locking to use. # # Accepted values: # 0 # Turns off locking. Warning: this risks metadata corruption if # commands run concurrently. # 1 # LVM uses local file-based locking, the standard mode. # 2 # LVM uses the external shared library locking_library. # 3 # LVM uses built-in clustered locking with clvmd. # This is inco...
LastRitter 发布于 2周前 阅读 1501 评论 1 点赞 1

java多线程——锁

这是多线程系列第四篇,偏重于线程的实践,对锁的几种应用做个简要介绍
wier 发布于 2周前 阅读 2825 评论 15 点赞 3

前端对图片进行本地压缩并上传实践

正好项目碰到这个需求,花了一下午基本搞定,记录一下实现步骤以及一些需要注意的坑,本实例后端使用node express,Multer作为处理multipart/form-data的中间件,完整代码:https://gitee.com/gaisama/codes/xwus19y6crjnm0vf25dza10
GaiSama 发布于 2周前 阅读 1041 评论 10 点赞 9

vue组件开发

## 什么是vue组件 组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能。在有些情况下,组件也可以是原生HTML元素的形式。 ## 组件使用步骤 ### 1. 定义组件 var myComponent = Vue.extend({ template:" this is my first component" }); ### 2. 注册组件 全局注册组件 Vue.component('myComponent',myComponent) 局部注册组件 var apk = new Vue({ el:"#apk", components:{ "myComponent":myComponent } }) ### 3. 使用组件 ### 4. 上面的定义过程比较繁琐,也可以不用每次都调用Vue.component和Vue.extend方法: // 在一个步骤中扩展与注册 Vue.component('my-component', { template: ' A custom component!' }) // 局部注册也可以这么做 var Parent = Vue.extend({ components: { 'my-component': { template: ' A custom component!' } } }) ## 组件常用方法使用 ### 1. 嵌套组件 组件本身也可以包含组件,下面的parent组件就包含了一个命名为child-component组件,但这个组件只能被parent组件使用: var myComponent = Vue.extend({ template:" this is my first component" }...
wshining 发布于 2周前 阅读 2170 评论 8 点赞 4

Eclipse中怎么将JRE换成JDK

关于JDK 和 JRE 的介绍 JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。 JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。 如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。 以上解释来源:知乎 在Eclipse我们项目中的Libraries库默认是JRE的,一般需求都能满足,但是当需要编译java文件时就不行了,这就需要我们把它换成JDK。 步骤: 点击相应项目->右键BuildPath-> configureBuildPAth 点击Libraries 出现下面的界面 点击一下JRE System Library(选中) 然后 ->  点击右边的 Edit (不选中Edit是灰的) 出现下面的界面    (这个JDK是我已经加进来后的,你的可能没有)   如果开始你就有那直接选一下就行了。。。。QAQ 如果没有就 点击Installed JREs 出现下面界面 这个JDK(黄色箭...
为了美好的明天 发布于 2周前 阅读 2048 点赞 1

用docker搭建elasticsearch集群

## 概述 用docker进行elasticsearch的部署非常简单,如果要实现集群配置,需要进行一些特殊的处理,本文介绍如何利用docker进行elasticsearch集群的搭建。 具体的配置可以参照该 [示例](https://github.com/qihaiyan/fluentd-boot) ## 主节点配置 ### docker-compose.yml配置文件 ```yml es: image: elasticsearch volumes: - ./es:/usr/share/elasticsearch/data - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml ports: - 9200:9200 - 9300:9300 ``` 其中的```./es:/usr/share/elasticsearch/data```是将elasticsearch的数据文件挂在到本机的一个目录上,这儿指定的本机目录是./es,可以修改为其它有权限的目录。 ### elasticsearch.yml配置文件 ``` yml cluster.name: elasticsearch_cluster node.name: node-master node.master: true node.data: true http.port: 9200 network.host: 0.0.0.0 network.publish_host: master-ip discovery.zen.ping.unicast.hosts: ["master-ip"] ``` ```network.publish_host: master-ip```指定了本机ip,需要将master-ip修改为真实的机器ip。```discovery.zen.ping.unicast.hosts```中的master-ip同样需要修...
QiHaiYan 发布于 3周前 阅读 1481 点赞 1

数据异构的武器-BINLOG+MQ

分库分表中有一个最为常见的场景,为了提升数据库的查询能力,我们都会对数据库做分库分表操作。比如订单库,开始的时候我们是按照订单ID维度去分库分表,那么后来的业务需求想按照商家维度去查询,比如我想查询某一个商家下的所有订单,就非常麻烦。这个时候通过数据异构就能很好的解决此问题。
新栋BOOK 发布于 3周前 阅读 1451 评论 13

Spring、Spring Boot和TestNG测试指南 - 测试@Configuration

[码云地址][1] 在Spring引入Java Config机制之后,我们会越来越多的使用@Configuration来注册Bean,并且Spring Boot更广泛地使用了这一机制,其提供的大量Auto Configuration大大简化了配置工作。那么问题来了,如何确保@Configuration和Auto Configuration按照预期运行呢,是否正确地注册了Bean呢?本章举例测试@Configuration和Auto Configuration的方法(因为Auto Configuration也是@Configuration,所以测试方法是一样的)。 ## 例子1:测试@Configuration 我们先写一个简单的@Configuration: ```java @Configuration public class FooConfiguration { @Bean public Foo foo() { return new Foo(); } } ``` 然后看[FooConfiguration][src-ex1-FooConfiguration]是否能够正确地注册Bean: ```java public class FooConfigurationTest { private AnnotationConfigApplicationContext context; @BeforeMethod public void init() { context = new AnnotationConfigApplicationContext(); } @AfterMethod(alwaysRun = true) public void reset() { context.close(); } @Test public void testFooCreation() { context.register(FooConfiguration.class); context.refresh...
jarchan 发布于 3周前 阅读 1840 评论 5

java多线程——volatile

java多线程系列第三篇,深入理解volatile的原理以及应用
wier 发布于 3周前 阅读 2973 评论 11 点赞 5

从Vue.js源码角度再看数据绑定

## 写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出。 文章的原地址:[https://github.com/answershuto/learnVue](https://github.com/answershuto/learnVue)。 在学习过程中,为Vue加上了中文的注释[https://github.com/answershuto/learnVue/tree/master/vue-src](https://github.com/answershuto/learnVue/tree/master/vue-src),希望可以对其他想学习Vue源码的小伙伴有所帮助。 可能会有理解存在偏差的地方,欢迎提issue指出,共同学习,共同进步。 阅读数据绑定源码之前建议先了解一下[《响应式原理》](https://github.com/answershuto/learnVue/blob/master/docs/%E5%93%8D%E5%BA%94%E5%BC%8F%E5%8E%9F%E7%90%86.MarkDown)以及[《依赖收集》](https://github.com/answershuto/learnVue/blob/master/docs/%E4%BE%9D%E8%B5%96%E6%94%B6%E9%9B%86.MarkDown),可以更好地理解Vue.js数据双向绑定的整个过程。 ## 数据绑定原理 前面已经讲过Vue数据绑定的原理了,现在从源码来看一下数据绑定在Vue中是如何实现的。 首先看一下Vue.js官网介绍响应式原理的这张图。 ![img](https://user-gold...
染陌同学 发布于 3周前 阅读 2492 评论 4 点赞 5
顶部