开源中国

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

It appears you’re using an unsupported browser

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

精彩阅读

  • 最新推荐

  • 今日热门

  • 本周热门

  • 每日一博

  • 最新文章

Java HashMap的工作原理

面试的时候经常会遇见诸如:“java中的HashMap是怎么工作的”,“HashMap的get和put内部的工作原理”这样的问题。本文将用一个简单的例子来解释下HashMap内部的工作原理。首先我们从一个例子开始,而不仅仅是从理论上,这样,有助于更好地理解,然后,我们来看下get和put到底是怎样工作的。 我们来看个非常简单的例子。有一个”国家”(Country)类,我们将要用Country对象作为key,它的首都的名字(String类型)作为value。下面的例子有助于我们理解key-value对在HashMap中是如何存储的。 1. Country.java package org.arpit.javapostsforlearning; public class Country { String name; long population; public Country(String name, long population) { super(); this.name = name; this.population = population; } public String getName() { return name; } public void setName(String name) { this.name = name; } public long getPopulation() { return population; } public void setPopulation(long population) { this.population = population; } // If length of name in country object is even then return 31(any rand...
Java团长 发布于 21小时前 阅读 370 点赞 4

03、Vue.js---自定义指令

除了核心功能默认内置的指令,Vue 也允许注册自定义指令。
秋季长青 发布于 23小时前 阅读 103

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

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

水平分库如何做到平滑扩展

分库分表扩容是一件头疼的问题,是否有方案,既支持快速扩展,又不降低可用性?
wier 发布于 24小时前 阅读 317 评论 9 点赞 1

【玩转树莓派】使用 sinopia 搭建私有 npm 服务器

使用 sinopia 的好处是,node系的工程师,内部协作时,使用自有 npm 包,会非常方便;另外,sinopia,会缓存已经下载过的包,可以在相当程度上,加速 npm install 相关命令的执行。 今天我试着直接在树莓派上搭建一个 sinopia 服务。最终实现的效果较为完整,基本满足需要了。包含用户权限管理,外网使用自定义域名访问,sinopia服务开机自启等特性。
ios122 发布于 1天前 阅读 168

Spring boot + LayIM + t-io 单聊群聊的实现

一个基于Spring boot,t-io的通讯框架,LayIM的实现。
丶Pz 发布于 1天前 阅读 724 评论 5 点赞 3

Java并发学习之线程状态及Thread常用方法详解

在前面线程创建的一篇博文中,明确说明只有在调用 `Thread#start()`方法之后,线程才会启动;那线程创建完和这个启动又是什么关系呢?启动是否又是运行呢?本节则主要集中在线程的各个状态的解释以及状态变迁的原因
小灰灰Blog 发布于 2天前 阅读 294 评论 1

Maven-- 自定义Archetype

# Maven-- 自定义Archetype ## 学习思维导图 ![image](http://wx4.sinaimg.cn/mw690/006qiLqogy1flppgqlbetj30j30cv74u.jpg) ## 自定义Archetype ### **背景** > Archetype是什么?为什么要自定义Archetype?又或者它能解决什么问题。 Archetype翻译为原型,也可被称作模板。简单来说,可以通过模板创建一个我们想要的初始化工程,从而可以在这个工程下快速或直接开始我们的业务编程工作。即解决创建工程时的重复性操作,比如pom依赖添加,资源文件添加等等等等... ### **操作系统** windows (window 10) ### **软件版本** JDK1.8.0_111 MAVEN3.0.4(可以提升一下版本) ECLIPSE4.4.2 ### **操作步骤** > 这里以小程序为例,web应用也是同样的道理 1. 打开Eclipse,创建Maven项目,选择quickstart。 ![image](http://wx2.sinaimg.cn/mw690/006qiLqogy1flpwoehn4ij30ih0gzmxw.jpg) ![image](http://wx1.sinaimg.cn/mw690/006qiLqogy1flpwoib7hxj30lr0hmwf1.jpg) 2. 打开新建的maven项目的pom文件,添加你需要的jar包依赖。 ![image](http://wx2.sinaimg.cn/mw690/006qiLqogy1flpwuc48sqj319o0kn40l.jpg) 3. 在工程名上右键,Run As -> maven build...,输入archetype:create-...
小祝特烦恼 发布于 2天前 阅读 126 点赞 1

有的放矢,你应该在性能测试报告中使用的 10 个微观指标

在这篇文章中,你将会了解到为什么常见的主要测试指标是不完美的,以及十个新的测量指标 —— 它们可能会改进你未来的性能测试报告。
编辑部的故事 发布于 2天前 阅读 999 评论 1 点赞 1

聊天机器人:应用程序纪元新黎明

原文作者:Sophia Brooke 原文链接:[《Chatbots: The Dawn of a New Era in App Development》 ](https://chatbotsmagazine.com/chatbots-the-dawn-of-a-new-era-in-app-development-5fa7a398269c) 编译:一熊翻译组 Mason ![![输入图片说明](https://static.oschina.net/uploads/img/201711/21175008_fdO3.png "在这里输入图片标题")](https://static.oschina.net/uploads/img/201711/21175008_fdO3.png "在这里输入图片标题") 沟通是人类解决问题最固有的方法。一直以来,我们的设备会提示用户使用一些交互方式,例如按钮、菜单、滑动等。随着聊天机器人的引进,这一切可能都将改变。因为当一个聊天界面在考虑周全、设计优秀的情况下,会比那些屡获殊荣的网站与应用程序表现得更为直观,并且也更受欢迎,像最好的 UX 项目都会有一个交互功能来吸引用户。聊天机器人依照字面意思来讲就是完全围绕对话而建立。 采用这项技术的根本原因在于聊天机器人可以让公司以一种更为个性的方式与他们的关注者们进行联系。废除以往那种一刀切的方式,取代网站上的不人性化,这种一对一的互动让品牌有着一个更加能代表自己的声音。 ## 网站与应用程序设计的新纪元 聊天机器人正站在数据...
BearyChat 发布于 2天前 阅读 183

SpringBoot 打包之可运行jar

背景 一个可运行的工具始终比XXX配置更加方便 每次一堆tomcat版本指定,对应jar替换 各种打包 替换properties 参考 maven profile VS spring profile tomcat什么的下载太麻烦了 SpringBoot 的execute jar可以解决上述一堆问题 当然我们仍然可以将其导出成war 后放入 tomcat中运行 实现 在需要打包的模块加入如下plugin <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 如果继承自spring-boot的pom可以指定start-class <properties> <start-calss>com.f6car.base.Application</start-calss> </properties> 那么当我们运行 mvn clean package 将会生成一个可运行jar 那么执行脚本就很简单 如下 java -jar /Users/qixiaobo/Downloads/zeus/web/target/web-0.0.1-SNAPSHOT.jar So easy! 原理 知其然不知其所以然不是本人风格~ 稍微剖析一下可执行jar的原理 springboot提供的maven插件会将对应start-class作为入口【如何实现呢】 学习Java web的小伙伴应该知道WEB-INF这个目录 通常规定会将一些不直接提供给...
Mr_Qi 发布于 2天前 阅读 376 评论 2 点赞 1

Celery系列二:Celery高级属性

## 一、指定队列 Celery非常容易设置和运行,通常它会使用默认的名为celery的队列(可以通过CELERY_DEFAULT_QUEUE修改)用来存放任务。可以使用优先级不同来确保高优先级的任务不需要等待就得到响应。 基于Celery系列一的project代码,创建一个projectq目录,并修改celeryconfig.py,修改后如下: ``` # -*- coding:utf-8 -*- BROKER_URL = 'amqp://guest:guest@localhost:5672//' # 使用RabbitMQ作为消息代理 CELERY_TASK_PROTOCOL = 1 # 现在celery升级到了4.0,是老版本的librabbitmq与最新的celery4.0 Message Protocol协议不兼容,celery4.0默认使用Task messages Version 2 ,而librabbitmq使用Task messages Version 1 CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' # 把结果存在Redis CELERY_TASK_SERIALIZER = 'msgpack' # 任务序列化肯反序列化使用msgpack方案 CELERY_RESULT_SERIALIZER = 'json' # 读取任务结果一般性能要求不高,所以使用可读性更好的json CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24 # 任务过期时间 CELERY_ACCEPT_CONTENT = ['json', 'msgpack'] # 指定接收的内容类型 # 新加入的配置参数 from kombu import Queue # 定义任务队列 CE...
听风的小猪 发布于 2天前 阅读 137

后端自动化版本管理,再也不用改URL了!

每次升级接口版本时,后端、前端、客户端都是痛苦的: 后端:要兼容旧版客户端,以前的接口不能动啊,又得写新接口、新文档了,唉! 前端:还好,就是版本号到处都是,改起来比较烦。 Android:快点啊产品催需求呢,服务器别停太久。对了你知道编译一次要多久么?泪奔。。。 前端:对对,别停太久。还有文档别再写错了啊,上次你复制粘贴的 v3 害我接口调了半天,原来是 v4 。。。 iOS:我也被坑了。。。 后端:呃,我尽快,写文档会注意的哈。 后端:另外旧域名 http://api.aaa.com/v4 也会一直开着,保证不会像上次那样让3.0客户端请求挂的。 后端:@前端 对了,你们用一个全局的 BASE_URL 存起来,以后改一个地方就好了。 Android:我们就是这么干的嘿嘿! iOS:我们也是,还是我封装的。 iOS:但问题是往往多个接口版本并存,还是要写好几个BASE_URL,我们这是从BASE_URL_V2到BASE_URL_V4。 Android:唉,这个就没办法了。 前端:我们现在也是这么做的,但之前的那家伙没封装啊,写得到处都是。。。     后端:周哥,升级接口版本好烦啊,你有什么好的办法吗? 周哥:具体说下你的问题。 后端:每次都要写新的接口和文档,服务器也要重启,前端和客户端总是抱怨改域名...
孤独的探索号 发布于 2天前 阅读 546 评论 8

Angular4自制一个市县二级联动组件

最近遇到了不少问题,真的是命运多舛。Angular真是让人又爱又恨的框架,恨的是资料太少,遇到问题无从下手。爱的是许多其他框架难以做到的功能,angular却可以轻松做到。 话不多说,最近遇到了一个旧项目改造的问题。拿到前同事做的页面效果: 第一眼就看到了这三个下拉框,按捺不住好奇心的我点了点。原来,第一个下拉框可以选择市属和省属,如果选择市属,那么后面就会出现市、县级两个下拉框,如果是省属,那就隐藏了,这个挺容易的。然后就是要选择市之后,区下拉框要有对应区县选项。emmmm,很典型的二级联动,不过既然分析完了思路,那就开始做吧!首先呢,数据肯定要从后端同事那里拿,调用他的接口把数据填充进去。看看数据是什么样子的: 数据略多,就不全部贴出来了。把实体bean创建一下, Typescript code // 市级实体类 export class City { // 市级id cityId: string; // 所属类型(0.市属 1.省属) cityType: number; // 市级名称(可选属性,若cityType为1时,可不填) cityName: string; // 所属区县 counties?: Array<Country>; } // 区县级实体类 export class Country { // 区县id countryId: string; ...
落青 发布于 2天前 阅读 289 评论 4 点赞 1

Celery系列一:初识Celery

## 一、 基本介绍 Celery是一个专注于实时处理和任务调度的分布式任务队列。所谓任务就是消息,消息中的有效载荷中包含要执行任务需要的全部数据。 使用Celery常见场景: 1. Web应用。当用户触发的一个操作需要较长时间才能执行完成时,可以把它作为任务交给Celery去异步执行,执行完再返回给用户。这段时间用户不需要等待,提高了网站的整体吞吐量和响应时间。 2. 定时任务。生产环境经常会跑一些定时任务。假如有上千台的服务器、上千种任务,定时任务的管理会很困难,Celery可以帮助我们快速在不同的机器设定不同种任务。 3. 其他可以异步执行的任务。为了充分提高网站性能,对于请求和响应之外的那些不要求必须同步完成的附加工作都可以异步完成。比如发送邮件/短信、推送消息、清理/设置缓存等。 Celery特性: - 方便地查看定时任务的执行情况,比如执行是否成功、当前状态、执行任务花费的时间等。 - 可以使用功能齐备的管理后台或者命令行添加、更新、删除任务。 - 方便把任务和配置管理相关联。 - 可选多进程、Evenlent和Gevent三种模式并发执行。 - 提供多种错误处理机制。 - 提供多种任务原语,方便实现任务分组、拆分和调用链。 - 支持多种消息代理和存储后端。...
听风的小猪 发布于 2天前 阅读 227 点赞 1

Vue.js---表单标签中的单选按钮、复选按钮和下拉列表的取值问题

表单标签取值问题中,单选按钮、复选按钮和下拉列表都比较特殊。这里总结一下vue.js中关于单选按钮、复选按钮和下拉列表不同情况的取值特殊性问题。
秋季长青 发布于 2天前 阅读 215

深入理解Java中的final关键字

Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。 final关键字的含义? final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。 什么是final变量? 凡是对成员变量或者本地变量(在方法中的或者代码块中的变量称为本地变量)声明为final的都叫作final变量。final变量经常和static关键字一起使用,作为常量。下面是final变量的例子: public static final String LOAN = "loan"; LOAN = new String("loan") //invalid compilation error final变量是只读的。 什么是final方法? final也可以声明方法。方法前面加上final关键字,代表这个方法不可以被子类的方法重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为final。final方法比非final方法要...
Java团长 发布于 2天前 阅读 332 点赞 2

Java并发学习之四种线程创建方式的实现与对比

在并发编程中,最基本的就是创建线程了,那么一般的创建姿势是怎样的,又都有些什么区别
小灰灰Blog 发布于 2天前 阅读 253 点赞 1

【小技巧解决大问题】使用 frp 突破阿里云主机无弹性公网 IP 不能用作 Web 服务器的限制

最近接触了些内网穿透的知识,我突然想到,是不是借助内网穿透,也可以把我的阿里云主机给暴露出来?毕竟内网穿透,使用的是 Linux 一些基础知识,算不上很极客的技术,应该是具有通用性的。经验证,竟然真的可行! 特记录下来,献给有同样遭遇的有缘人。
ios122 发布于 2天前 阅读 159

疯狂Activiti6.0连载(16) Drools介绍与运行

Activiti Drools 规则引擎
杨大仙的程序空间 发布于 2天前 阅读 96 评论 2

疯狂Spring Cloud连载(22)Web项目中使用Zuul

Spring Cloud Zuul
杨大仙的程序空间 发布于 2天前 阅读 247

浅谈ThreadPoolExecutor机制

一、概述 1、ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务; 2、Executors方法提供的线程服务,都是通过参数设置来实现不同的线程池机制。 3、先来了解其线程池管理的机制,有助于正确使用,避免错误使用导致严重故障。同时可以根据自己的需求实现自己的线程池 二、核心构造方法讲解 下面是ThreadPoolExecutor最核心的构造方法: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { if (corePoolSize < 0 || maximumPoolSize <= 0 || maximumPoolSize < corePoolSize || keepAliveTime < 0) throw new IllegalArgumentException(); if (workQueue =...
Lienson 发布于 1个月前 阅读 9

spring cloud

Spring Cloud 一:Spring Cloud-前言 1.微服务架构概念:     简而言之,微服务架构就是将一个完整的应用从数据存储开始垂直拆分成多个不同的服务。     每个服务都能独立部署、独立维护、独立扩展,服务与服务间通过诸如RESTful API的方式互相调用。     即微服务是自治的服务单元。 2.Spring Boot回顾:     Spring Boot让我们的Spring应用变的更轻量化。具有如下优势:         1.为所有Spring开发者更快的入门         2.开箱即用,提供各种默认配置来简化项目配置         3.内嵌式容器简化Web项目         4.没有冗余代码生成和XML配置的要求 3.微服务架构进化     服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合,并且强调DevOps和快速演化。     DevOps是英文Development和Operations的合体,他要求开发、测试、运维进行一体化的合作,进行更小、更频繁、更自动化的应用发布,以及围绕应用架构来构建基础设施的架构。     3.1.服务化之Nginx         nginx通过接受客户端Http请求,根据路径配置,转发,跳转相应的服务。         缺点:         1.Nginx配置中...
eboyRH 发布于 9小时前 阅读 3

Redis和Memcached的区别

Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较: Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。 内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。 性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。 具体为什么会出现上面的结论,以下为收集到的资料: 1、数据类型支持不同 与Memcached仅支持简单的key-value结构的数据记录不同,Redis支持的数据类型要丰富得多。最为常用的数据类型主要由五种:Str...
new_chaos 发布于 1周前 阅读 6

神经网络和深度学习 - 深度学习概论

# 概述 笔者在网易云课堂微专业竟然看到深度学习工程师的课程,随即开始学习deeplearning # 深度学习概论 # 1.1 欢迎来到深度学习工程师微专业 授课老师"吴恩达" # 1.2 什么是神经网络 "Deep Learning深度学习"指训练神经网络,有时候神经网络的规模很庞大。 笔者注:注意神经网络分为深度神经网络和广度神经网络 # 房价预测 假设有一个六间房屋的数据集,以知房屋的面积以及对应的价格。想要找到一个函数,根据房屋面积,预测房价。 在传统方式中,可以使用线性回归,来对这些数据集进行计算。但由于人类肯定能够知道,价格永远不会为负数。因此,直线不合适,应当在初始进行弯曲,结束于0。这样,我们对接近直线的部分进行拟合。 我们可以使用神经网络,我们把房屋的面积,作为神经网络的输入,房屋面积称为x,通过神经网络的一个独立的神经元,获得结果房屋价格y。神经元实现了传统方法中的内容。 在神经网络论文中,我们经常可以看到起始阶段,一般为0,然后就是一条直线,这个函数被称作ReLU函数。全称为"修正线性单元"rectified linear unit。 大型神经网络,是把这些单个神经元堆叠起来形成的。可以把这些神经元想象成单独的乐高积木。通过搭建和相互连接形成更大的...
抢小孩糖吃 发布于 3个月前 阅读 22

基于 HTML5 WebGL 的 3D “弹力”布局

每次看到医学界发布的宣传片中基本上都有一个 DNA 的样式,拖动一个节点靠近另一个节点 2 节点就会“弹开”,拉远一点又会向 1 节点“靠近”,这种效果非常炫啊,所以我觉得自己应该动手来实践一下了,就产生了这么个结果,good job!
xhload3d 发布于 8小时前 阅读 4

svn: E200007: Commit failed (details follow):

svn: E200007: Commit failed (details follow): svn: E200007: CHECKOUT can only be performed on a version resource [at this time]. 由于切换SVN服务器,需要清理本地缓存。 项目所在目录中:右键---TortoiseSVN---Clean up...
gAKey 发布于 8小时前 阅读 3

Cocoapods 安装与使用

一、概要 iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三方库。 二、安装 由于网上的教程基本都大同小异,但细节之处还不是很完善,所以借机会在这里补充下: 注:要使用CocoaPods,那就要下载安装它,而下载安装CocoaPods需要Ruby环境 1、Ruby环境搭建 当前安装环境为Mac mini 10.8.5。Mac  OS本身自带Ruby,但还是更新一下保险,因为我第一次安装在没有更新Ruby的情况下就失败了。 a 查看下当前ruby版本:打开终端输入 ruby -v(确实安装了,不过用这个版本接下来工作失败了,所以更新下ruby) b 更新ruby 终端输入如下命令(把Ruby镜像指向taobao,避免被墙,你懂得) gem sources --remove https://rubygems.org/ gem sources -a https://ruby.taobao.org/ gem sources -l  (用来检查使用替换镜像位置成功)   2、下载安装CocoaPods 终端输入:sudo gem install cocoa pods 这样就下载安装好了CocoaPods 3、使用CocoaPods a  新建一个项目,名字PodTest b  终端中,cd到项目总目录(注意:包含PodTest文件夹、PodTest.xcodeproj、PodTestTest的那个总目录) c  建立Podfile(配置文...
寂寞ls 发布于 3天前 阅读 5

centos编译hadoop-3.0.0-beta1源码

最近在做ec模块(纠删码),需要建立源码编译环境。
南寻 发布于 7小时前 阅读 4

阿里云上传本地文件

1.文档 https://help.aliyun.com/document_detail/32103.html?spm=5176.doc32099.6.760.Pv6izo 2.上传本地文件 参数解释 1.$bucket 存储空间名称,也就是你创建的存储空间名称 2.$object 上传文件的名称(test/test.jpg),表示在$bucket空间下的test目录保存名称为test.jpg 3.$filePath 表示本地文件的临时路径,列如:        表单上传的时候,就是$_FILES['name']['tmp_name'] 为临时文件  
percy94 发布于 2天前 阅读 4

layui学习笔记——分页

9月14日
我是程序yuan 发布于 2个月前 阅读 21

MySQL的索引策略(2)

上文提到了用自增主键做聚簇索引列,可以方便插入操作。但高并发场景下,主键的上界集中了所有的插入,可能导致间隙锁竞争(间隙锁是innodb中行锁的一种, 但是这种锁锁住的却不止一行数据,他锁住的是多行,是一个数据范围。间隙锁的主要作用是为了防止出现幻读;对符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁))。同时,自增字段的锁机制也可能成为热点。 覆盖索引 指包含了所有需要查询字段的索引。覆盖索引的优势如下 降低数据访问量。索引列数据通常远少于整行数据。 优化范围查询。因为索引是按顺序建立的。 内存中保存索引,所以可避免访问磁盘/产生系统调用。 聚簇索引中,二级主键的覆盖查询可以直接在叶子节点读取数据,从而避免了再次访问聚簇索引取值的过程。这个是覆盖索引最常见的用途。 覆盖索引的核心是:索引结构保存相关列的值。所以,一般用在B+树索引。 索引扫描排序 ​​​​​​​前篇提到,索引的三个用途是:SELECT、ORDER BY、GROUP BY。 如果索引不能覆盖所有列,则读取数据的过程是:...->索引中读取n行相关信息-...
AndyDufresne 发布于 9小时前 阅读 2

Angular为什么选择TypeScript?

原文地址:https://vsavkin.com/writing-angular-2-in-typescript-1fa77c78d8e8 同步发布在我的个人网站:[http://www.codebe.org](http://www.codebe.org) 我的开源项目:[http://git.oschina.net/zt_zhong/CodeBe](http://git.oschina.net/zt_zhong/CodeBe) Angular是用TypeScript编写的。在这篇文章中,我将讨论为什么我们作出决定。我还将分享我使用TypeScript的经验:它如何影响我写和重构我的代码的方式。 ## TypeScript有很好的工具 TypeScript的最大的卖点就是工具。它提供高级自动完成,导航和重构。拥有这样的工具几乎是大型项目的必备要求。没有他们,改变代码的恐惧使代码库处于半只读状态,并使大规模重构非常危险且昂贵。 TypeScript不是编译为JavaScript的唯一类型语言。还有其他语言具有更强的类型系统,在理论上可以提供绝对强大的工具。但在实践中大多数人除了编译器之外没有其他的东西。这是因为构建丰富的开发工具必须是第一天就明确的目标,它是针对TypeScript团队的。这就是为什么他们构建语言服务,可以由使用的编辑器提供类型检查和自动完成。如果您想知道为什么有这么多编辑器具有很好的TypeScript支持,答案就是语言服务。 智能感知和重构提示(...
我是钟钟 发布于 3个月前 阅读 3563 评论 31 点赞 2

mysql之mysql数据在磁盘的储存方式

mysql的数据在磁盘上的存储:     数据块:         由多个磁盘block组成的块,存储引擎负责管理数据块。         磁盘是block块设备,数据在磁盘上的存放也是按照块存放的。         mysql读取表到内存的时候,也必许按照一块一块的方式读取。假设要查询的表在和其他表在都在同一个块内。加载块的时候除了读取要查询的表,其他表也一并被读取出来。         当一个块内的部分表被删除时,这是就是形成了碎片。这样会降低装载到内存的速度。         所以会生成一个块头,记录一个快内表的大小,有无空闲空间,空闲空间的位置。 文件的记录组织类型:     堆文件组织:         把行简单的堆起来,没有顺序,记录可能在文件的任何地方。         查询效率低     顺序文件组织:         把行按照某字段(搜索码、排序码)的值顺序记录。         更新代价大。     散列文件组织:         人为将表分成多个部分,每个部分称为桶。根据行中的某个或某些字段做使用散列函数做哈希运算,运算结果属于某个范围的放在指定的桶中。多个桶组成一个表。         桶有可能溢出。所以要选...
new_chaos 发布于 8小时前 阅读 2

django 迁移数据 暂时禁用auto_now / auto_now_add

[django 迁移数据 暂时禁用auto_now / auto_now_add](https://codeday.me/bug/20170716/40417.html)
TonyMistark 发布于 2个月前 阅读 11

系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式

PS:下面是性能测试的主要概念和计算公式,记录下: 一.系统吞度量要素:   一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。 系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间         QPS(TPS):每秒钟request/事务 数量         并发数: 系统同时处理的request/事务数         响应时间:  一般取平均响应时间 (很多人经常会把并发数和TPS理解混淆) 理解了上面三个要素的意义之后,就能推算出它们之间的关系: QPS(TPS)= 并发数/平均响应时间    或者   并发数 = QPS*平均响应时间         一个典型的上班签到系统,早上8点上班,7点半到8点的30分钟的时间里用户会登录签到系统进行签到。公司员工为1000人,平均每个员上登录签到系统的时长为5分钟。可以用下面的方法计算。 QPS = 1000/(30*60) 事务/秒 平均响应时间为 = 5*60  秒 并发数= QPS*平均响应时间 = 1000/(30*60) *(5*60)=166.7         一个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相...
hejunbinlan 发布于 3天前 阅读 15

Python中MySQL表的建立,数据的插入及查询

MySQL表的建立 例子: import MySQLdb def connect_mysql():     db_config = {         'host': '192.168.48.128',         'port': 3306,         'user': 'xiang',         'passwd': '123456',         'db': 'python',         'charset': 'utf8'     }     cnx = MySQLdb.connect(**db_config)     return cnx   if __name__ == '__main__':     cnx = connect_mysql()     cus = cnx.cursor()     # sql  = '''insert into student(id, name, age, gender, score) values ('1001', 'ling', 29, 'M', 88), ('1002', 'ajing', 29, 'M', 90), ('1003', 'xiang', 33, 'M', 87);'''     student = '''create table Student(             StdID int not null,             StdName varchar(100) not null,             Gender enum('M', 'F'),             Age tinyint     )'''     course = '''create table Course(             CouID int not null,             CName varchar(50) not null,             TID int not null     )'''     score = '''create table Scor...
粗粮面包 发布于 8小时前 阅读 2

error C2143: syntax error : missing ‘;’ before ‘type’

编译c文件出现的这个问题 解决方法是: **把所有的变量声明放在执行的代码之前。**
种地瓜 发布于 1个月前 阅读 4

Geolocation error:Only secure origins are allowed (see:https://goo.gl/Y0ZkNV)..

浏览器定位出错 (电脑端)
james_laughing 发布于 3个月前 阅读 13

迁移Linux mint 18.2 apt到ubuntu server 16.04 LTS

# 1、问题描述 这里有两台主机,其中 192.168.1.4上安装的是Linux Mint 18.2 Sonya系统。主机名是qwfys,用户名是lwk。 192.168.1.25上安装的是Ubuntu Server 16.04.3 LT系统。主机名是ubuntu,用户名是lwk。 当在192.168.1.25上输入命令apt的时候这样的: ``` lwk@ubuntu:~$ ip a 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:5e:65:ca brd ff:ff:ff:ff:ff:ff inet 192.168.1.25/24 brd 192.168.1.255 scope global enp0s3 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe5e:65ca/64 scope link valid_lft forever preferred_lft forever lwk@ubuntu:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.3 LTS Release: 16.04 Codename: xenial lwk@ubuntu:~$ apt apt 1.2.24...
qwfys 发布于 7小时前 阅读 2

动态高度的CollectionView,支持tableView内嵌

![可以扩展的collectionView1.gif](http://upload-images.jianshu.io/upload_images/4185621-9657ddb5259c094e.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) **特点:** >1. 高内聚,低耦合,使用简单。配置代码不超过20行。`而且,这20行,不需要你自己想,直接抄就行了。` >2. 对tableview,基本没有代码侵入,不会影响到你的任何操作,`不过,需要你的tableview,行高自适应` ##实现思路 >1. 根据flowLayout以及数据源的count来确定collectionView的Height。 >2. 根据每行最多展示数,以及未展最多展示数,来确定collectionView展示函数,以确定collectionView的Height。 >3. 点击展开后,把数据源count显示到最大。并且,改变collectionView的Height。 >4. tableView的复用问题,给tableView添加字典属性,并且把indexPath作为key,记录当前是否为展开状态。 >5. 自定义tableViewCell,来配置collectionView的flowLayout,以及一些其他的属性 --- ##主要的类 ###一、PYElasticityCollectionView:UIView >1. 这个里面主要包含一个collectionView,和一个Button。 >2. 管理了collectionView的Height,以及collectionView与Button的布局问题 初始化方法: 需要...
LiYaoPeng 发布于 14小时前 阅读 2

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 发布于 2周前 阅读 68018

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 发布于 2周前 阅读 80138

image not recognized

image not recognized
tianshl 发布于 1个月前 阅读 211487

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 发布于 2周前 阅读 63567

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

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

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 发布于 2周前 阅读 63274

阿里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天前 阅读 5440 评论 19 点赞 3

2017 十大最佳 Linux 服务器发行版

在这篇文章中,我们将基于以下的考虑因素列出 2017 十大最佳 Linux 服务器发行版:与受支持的功能和硬件相关的数据中心的性能和可靠性;是否易于安装和使用;在许可方面的所有权和维护相关的问题;商业支持的可接入性
编辑部的故事 发布于 1周前 阅读 11240 评论 89 点赞 7

人工智能,机器学习和深度学习之间的差异是什么?

如果你在科技领域,你经常会听到人工智能,机器学习,甚至是深度学习。怎样才可以在正确的时间正确的使用这些词?他们都是一样的意思吗?然而更多时候,人们总是混淆的使用它们。 人工智能,机器学习和深度学习都是属于一个领域的一个子集。但是人工智能是机器学习的首要范畴。机器学习是深度学习的首要范畴。 深度学习是机器学习的一个子集,机器学习是人工智能的一个子集 这个领域的兴起应该归功于深度学习。人工智能和机器学习这个领域近年来一直在解决一系列有趣的问题,比如从自动化的杂货店购买到自动驾驶汽车。 人工智能: 人工智能的定义可以分为两部分,即“人工”和“智能”。“人工”比较好理解,争议性也不大。有时我们会要考虑什么是人力所能及制造的,或者人自身的智能程度有没有高到可以创造人工智能的地步,等等。但总的来说,“人工系统”就是通常意义下的人工系统。 尼尔逊教授对人工智能下了这样一个定义:“人工智能是关于知识的学科――怎样表示知识以及怎样获得知识并使用知识的科学。”而另一个美国麻省理工学院的温斯顿教授认为:“人工智能就是研究如何使计算机去做过去只有人才能做的智能工作。”这些说法反映了人工智能学科的基本思想和基本内容...
编辑部的故事 发布于 3天前 阅读 2788 评论 9 点赞 6

【码云周刊第 47 期】6个开源项目提升物联网开发效率

每周为您推送最有价值的开源技术内参!
码云Gitee 发布于 1周前 阅读 2239 评论 4 点赞 1

Java的SPI机制分析

Java SPI
宸明 发布于 4天前 阅读 2376 评论 4 点赞 2

如何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天前 阅读 925 评论 7 点赞 2

2017 热门开源自动化测试框架优缺点对比

时间一晃已来到 2017 年的最后一个季度,TestProject 对比了在今年比较热门的 7 款开源自动化测试框架的优缺点,以帮助你选择适合自己的测试框架。 1. Robot Framework Robot Framework(RF)是用于验收测试和验收测试驱动开发(ATDD)的自动化测试框架。 基于 Python 编写,但也可以在 Jython(Java)和 IronPython(.NET) 上运行,提供跨平台支持(Windows、Linux 或 MacOS )。 优点: 通过使用关键字驱动测试(KDT)方法简化了自动化测试过程,方便测试人员创建易读的测试。 测试数据语法简单易用。 生态系统丰富。由各种通用测试库和工具组成,这些工具都是作为独立项目开发的。 具有高度可扩展性。 可通过 pabot 或 Selenium Grid 执行并行测试。 缺点: 自定义 HTML 报告较为麻烦。 如果是针对大范围的库和扩展的 KDT 自动化测试,建议使用此跨平台框架。如果想要添加新的关键字(通过 RF 测试库 API ),需要具备 Java / Python / C 语言的基础知识。 2. JUnit JUnit 是一款针对 Java 应用的单元测试框架,用于编写和运行可重复的测试。 优点: 纯 Java 编写。 支持测试驱动开发(TDD)。 允许创建自己的单元测试用例套件。 能很好地与其他工具(如 Maven )和 ...
编辑部的故事 发布于 7天前 阅读 3539 评论 5 点赞 2

Redis 笔记系列(七)——“开发不是核心、配置才是王道”

断了一年的坑,今年年底了给自己个小目标,年底前把这个系列的文章填完。
HappyBKs 发布于 4天前 阅读 689 评论 3 点赞 4

我所理解的JVM(七):JVM调优

之前所有关于JVM的知识,主要视为JVM调优做准备的。 对于虚拟机的**调优步骤**,一般分为3步: 1. 根据一定参数启动虚拟机 2. 配置好压力测试参数进行压力测试 3. 可视化工具或者命令行查看虚拟机运行状态和GC日志进行分析 以上3步循环执行,最终目的是确定好启动参数。 **考核虚拟机的指标**: - 吞吐量:重要指标之一,是指不考虑垃圾收集引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性能指标。 - 延迟:其度量标准是缩短由于垃圾啊收集引起的停顿时间或者完全消除因垃圾收集所引起的停顿,避免应用运行时发生抖动。 - 内存占用:垃圾收集器流畅运行所需要 的内存数量。   一般虚拟机的所使用的内存是确定的,优化指标主要体现在需求上是要低延迟还是高吞吐量。   压力测试的参数及接口主要看业务。 Jdk在jdk/bin目录下自带了一些**可视化工具**: 如jvisualvm和jconsole。 Jdk在运行时也可以使用**命令行**来查看当前虚拟机的运行状态: - jps:查看当前虚拟机的进程状况。参数-v可以查看JVM的启动参数。 - jstat:查看当前虚拟机的统计信息。非常重要。 - jinfo:查看当前虚拟机的配置信息。比如未显式指定的一些默认值和默认选项 - jmap:生成堆转储...
康斯但丁 发布于 4天前 阅读 715 点赞 3

使用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天前 阅读 1870 评论 19 点赞 6

曾经做过的40道程序设计课后习题总结(四)

曾经做过的40道程序设计课后习题总结,包括斐波那契数列、判断素数、水仙花数、分解质因数、杨辉三角、学习成绩查询、求最大公约数与最小公倍数、完全平方数、统计字母、空格、数字和其它字符个数、求主对角线之和、完数求解、求s=a+aa+aaa+aaaa+aa...a的值、高度计算、乘法口诀、无重复三位数、菱形打印、利润计算、第几天判断、从小到大输出数列、猴子吃桃问题、乒乓球比赛、求分数之和、求阶乘的和、递归求法、求不多于5的正整数、回文判断、星期判断、插数入数组、取整数的任意位、按顺序输出数列、位置替换、字符串排序、贷款器、通讯录排序、闰年判断、二元方程求解、密码解译、DVD查询、电子日历、万年历
闵开慧 发布于 3天前 阅读 472 评论 4 点赞 2

Java 8 中的流--Stream

java 8 中的流,Stream, Lambda表达式
tsmyk0715 发布于 5天前 阅读 449 点赞 4

【码云周刊第 46 期】盘点那些值得你了解的10本编程教程

每周为您推送最有价值的开源技术内参!
码云Gitee 发布于 2周前 阅读 3002 评论 10 点赞 6

后端自动化版本管理,再也不用改URL了!

每次升级接口版本时,后端、前端、客户端都是痛苦的: 后端:要兼容旧版客户端,以前的接口不能动啊,又得写新接口、新文档了,唉! 前端:还好,就是版本号到处都是,改起来比较烦。 Android:快点啊产品催需求呢,服务器别停太久。对了你知道编译一次要多久么?泪奔。。。 前端:对对,别停太久。还有文档别再写错了啊,上次你复制粘贴的 v3 害我接口调了半天,原来是 v4 。。。 iOS:我也被坑了。。。 后端:呃,我尽快,写文档会注意的哈。 后端:另外旧域名 http://api.aaa.com/v4 也会一直开着,保证不会像上次那样让3.0客户端请求挂的。 后端:@前端 对了,你们用一个全局的 BASE_URL 存起来,以后改一个地方就好了。 Android:我们就是这么干的嘿嘿! iOS:我们也是,还是我封装的。 iOS:但问题是往往多个接口版本并存,还是要写好几个BASE_URL,我们这是从BASE_URL_V2到BASE_URL_V4。 Android:唉,这个就没办法了。 前端:我们现在也是这么做的,但之前的那家伙没封装啊,写得到处都是。。。     后端:周哥,升级接口版本好烦啊,你有什么好的办法吗? 周哥:具体说下你的问题。 后端:每次都要写新的接口和文档,服务器也要重启,前端和客户端总是抱怨改域名...
孤独的探索号 发布于 2天前 阅读 546 评论 8

CentOS7(mini) 安装 Kubernetes 集群(kubeadm方式)

## CentOS7(mini) 安装 Kubernetes 集群(kubeadm方式) #### 安装CentOS 1. 安装**net-tools** ``` bash [root@localhost ~]# yum install -y net-tools ``` 2. 关闭firewalld ``` bash [root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@localhost ~]# setenforce 0 [root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ``` #### 安装Docker > 如今[Docker](https://docs.docker.com/engine/installation/linux/docker-ce/centos/#install-docker-ce)分为了Docker-CE和Docker-EE两个版本,CE为社区版即免费版,EE为企业版即商业版。我们选择使用CE版。 1. 安装yum源工具包 ``` bash [root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 ``` 2. 下载docker-ce官方的yum源配置文件 ``` bash [root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/do...
ChamPly 发布于 3天前 阅读 264 评论 2

OSChina 周四乱弹 ——因为女同事衣服穿的薄 所以老板发现我没上班?

Osc乱弹歌单(2017)请戳(这里) 【今日歌曲】 @guanglun  :分享陈雪凝的单曲《白山茶》: 《白山茶》- 陈雪凝 手机党少年们想听歌,请使劲儿戳(这里) @科比_布莱恩特 :今天收盘 不出所料 上汽果然给了涨了3个点😬 大吉大利 今晚吃鸡!! 股市还这么关注, 能挣钱么? 用通俗的话解释一下 你和股市的概念就是这样的: 赔钱了, 你漫无目的的逛到了公园, @墨夜寒  :早 上公园里一大爷摔倒了,一个小伙子上前问:”大爷,我一个月工资3800块钱,能扶您起来么?“ 大爷:”孩子,你走吧,我在等一会儿“ 于是我上前问道,”大爷我是炒股票的能扶您么?“ 大爷看着我,默默往旁边挪了一挪,说道,"孩子,往年可以,今,今年……来……来躺大爷旁边来,你也不容易啊" “来,大爷,躺好了击个掌。” 不碰瓷, 发完工资, 都活不下去。 @Tumblr  :谁能想到,今天才是本月发工资后的第12天。 “我已经感觉自己活不到月底了。” 不想活了, @C_酱   :自挂东南枝 @红薯 :你咋知道是东南的? @C_酱 回复 @红薯 : 经常喝西北风,一转脸可不就东南了…… 穷也耽误不了我买车, @IM才子鸣  :很多朋友问我如何选购车辆,说实话,并不太擅长。 因为我的车基本上都是用一次...
小小编辑 发布于 51分钟前 阅读 13 评论 5 点赞 1

Java多线程之join()

join()方法是使线程强制执行,在线程A中,创建了线程b,b.start()的时候,那么a,b两个线程都会运行。但是如果b线程使用了b.join(),那么就会强制执行b线程,并且将A线程挂起。 例子1: 三个线程t1,t2,t3三个线程,确保运行t1结束后运行t2,在t2运行结束后运行t3。 public class ThreadTest { public static void main(String[] args) { Thread t1=new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()); } },"t1"); try { t1.join(); } catch (InterruptedException e) { e.printStackTrace(); } Thread t2=new Thread(new Runnable() { @Override public void run() { try { t1.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()); } ...
扬花落尽丶 发布于 1小时前 阅读 1

python-mysql增删改查

创建表   import MySQLdb def connect_mysql(): db_config = { 'host': '192.168.48.128', 'port': 3306, 'user': 'xiang', 'passwd': '123456', 'db': 'python', 'charset': 'utf8' } cnx = MySQLdb.connect(**db_config) return cnx if __name__ == '__main__': cnx = connect_mysql() cus = cnx.cursor() # sql = '''insert into student(id, name, age, gender, score) values ('1001', 'ling', 29, 'M', 88), ('1002', 'ajing', 29, 'M', 90), ('1003', 'xiang', 33, 'M', 87);''' student = '''create table Student( StdID int not null, StdName varchar(100) not null, Gender enum('M', 'F'), Age tinyint )''' course = '''create table Course( CouID int not null, CName varchar(50) not null, TID int not null )''' score = '''create table Score( SID int not null, StdID int not null, CID int not nul...
peizh 发布于 2小时前 阅读 1

'SHOW_PAGE_TRACE' =>ture;

'SHOW_PAGE_TRACE'  =>ture;
至尊宝10086 发布于 3小时前 阅读 1

学习笔记DL007:Moore-Penrose伪逆,迹运算,行列式,主成分分析PCA

Moore-Penrose伪逆(pseudoinverse)。 非方矩阵,逆矩阵没有定义。矩阵A的左逆B求解线性方程Ax=y。两边左乘左逆B,x=By。可能无法设计唯一映射将A映射到B。矩阵A行数大于列数,方程无解。矩阵A行数小于列数,矩阵有多个解。 矩阵A的伪逆A + =lim a->0 (A T A+aI) -1 A T。计算伪逆公式,A + =VD + U T。矩阵U、D、V是矩阵A奇异值分解得到矩阵。对角矩阵D伪逆D + 是非零元素取倒数后再转置。矩阵A列数多于行数,伪逆求解线性方程是可能解法。x=A + y是方程所有可行解中欧几里得范数||x|| 2 最小。矩阵A行数多于列数,没有解。伪逆得到x使得Ax和y的欧几里得距离||Ax-y|| 2 最小。 迹运算。 返回矩阵对角元素和,Tr(A)=Sum i A i,i 。通过矩阵乘法和迹运算符号清楚表示矩阵运算。描述矩阵Frobenius范数,||A|| F =SQRT(Tr(AA T ))。迹运算在转置运算下不变,Tr(A)=Tr(A T )。多个矩阵相乘方阵迹,矩阵最后一个挪到最前面相乘迹相同。需考虑挪动后矩阵乘积定义良好,Tr(ABC)=Tr(CAB)=Tr(BCA),Tr(PRODUCT(n,i=1,F (i) ))=Tr(F (n) PRODUCT(n-1,i=1,F (i) ))。循环置换后矩阵乘积矩阵形状变了,迹运算结果依然不变。矩阵A ELEMENT(R m*n ),矩阵B ELEMENT(R n*m ),得到 Tr(AB)=T...
利炳根 发布于 4小时前 阅读 1

【CentOS 7笔记37】,awk命令的使用#171123

> hellopasswd --- # 截取文档中的某个段 ``` [root@localhost ~]# head -n2 1.txt | awk -F ':' '{print $1}' root bin ``` ``` [root@localhost ~]# head -n2 1.txt | awk -F ':' '{print $0}' root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin ``` ``` [root@localhost ~]# head -n2 1.txt | awk -F ':' '{print $1","$2","$3","$4}' root,x,0,0 bin,x,1,1 ``` # 匹配字符或者字符串 ``` [root@localhost ~]# awk '/oo/' 1.txt root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin ``` ``` [root@localhost ~]# awk -F ':' '$1 ~ /oo/' 1.txt root:x:0:0:root:/root:/bin/bash ``` ``` [root@localhost ~]# awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' 1.txt root 0 operator 11 ``` # 条件操作符 ``` [root@localhost ~]# awk -F ':' '$3=="0"' 1.txt root:x:0:0:root:/root:/bin/bash ``` ``` [root@localhost ~]# awk -F ':' '$3>="500"' 1.txt shutdown:x...
hellopasswd 发布于 6小时前 阅读 1

【YFMemoryLeakDetector】人人都能理解的 iOS 内存泄露检测工具类

时过境迁,今天在网上搜了下 “iOS 内存泄露检测”,各种讨论技术文章,有点头大。我忍不住看了下自己当时的代码,突然感觉自己的思路好特别,好有创意。我真的就是在“创建”时把数据记录到一个字典里,在“释放”时,从字典里移出对象;所谓的检测,其实就是打印那个字典,仍然在字典中的很有可能就是泄露喽。
ios122 发布于 7小时前 阅读 3

awk

awk(上) awk兼具sed的所有功能,而且还支持分段 截取文档中某个段 打印文档中的某段,-F作用是指定分隔符 打印所有的段awk -F ':' '{print $0}' test.txt 打印文件的全部内容awk  '{print $0}' test.txt,不需要加F,类似于cat查看文件 awk如果不指定分隔符,则默认空格或空白为分隔符 打印多段内容awk -F ':' '{print $1,$2,$4}' test.txt 打印内容可以指定#来分割,需要用到双引号 awk匹配功能 awk '/oo/' test.txt ,匹配包含oo的行 awk -F ':' '$1 ~ /oo/' test.txt ,打印第一段中包含oo的行,~表示匹配 awk -F ':' '$1 ~ /o+/' test.txt ,匹配第一段中包含o的行,支持正则表达式;这里需要知道,出现特殊符号时,awk不用加脱义字符,grep和sed则必须要加脱义字符 awk支持多个表达式一起写 针对数学表达式的用法 awk -F ':' '$3==0' test.txt ,匹配第3段等于0的;awk -F ':' '$3==0 {print $1}' test.txt //匹配第3段等于0的,并打印第1段;awk -F ':' '$3>=1000' test.txt //匹配第3段大于等于1000的,并打印所有段 awk -F ':' '$3>="1000"' test.txt,“1000”是以ASC码值进行排序的,被认为是字符串 awk -F ':' '$7!="/sbin/nologin" {print $0}' test.txt ,...
风流花生 发布于 7小时前 阅读 1

迁移Linux mint 18.2 apt到ubuntu server 16.04 LTS

# 1、问题描述 这里有两台主机,其中 192.168.1.4上安装的是Linux Mint 18.2 Sonya系统。主机名是qwfys,用户名是lwk。 192.168.1.25上安装的是Ubuntu Server 16.04.3 LT系统。主机名是ubuntu,用户名是lwk。 当在192.168.1.25上输入命令apt的时候这样的: ``` lwk@ubuntu:~$ ip a 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:5e:65:ca brd ff:ff:ff:ff:ff:ff inet 192.168.1.25/24 brd 192.168.1.255 scope global enp0s3 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe5e:65ca/64 scope link valid_lft forever preferred_lft forever lwk@ubuntu:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.3 LTS Release: 16.04 Codename: xenial lwk@ubuntu:~$ apt apt 1.2.24...
qwfys 发布于 7小时前 阅读 2

centos编译hadoop-3.0.0-beta1源码

最近在做ec模块(纠删码),需要建立源码编译环境。
南寻 发布于 7小时前 阅读 4

Python中MySQL表的建立,数据的插入及查询

MySQL表的建立 例子: import MySQLdb def connect_mysql():     db_config = {         'host': '192.168.48.128',         'port': 3306,         'user': 'xiang',         'passwd': '123456',         'db': 'python',         'charset': 'utf8'     }     cnx = MySQLdb.connect(**db_config)     return cnx   if __name__ == '__main__':     cnx = connect_mysql()     cus = cnx.cursor()     # sql  = '''insert into student(id, name, age, gender, score) values ('1001', 'ling', 29, 'M', 88), ('1002', 'ajing', 29, 'M', 90), ('1003', 'xiang', 33, 'M', 87);'''     student = '''create table Student(             StdID int not null,             StdName varchar(100) not null,             Gender enum('M', 'F'),             Age tinyint     )'''     course = '''create table Course(             CouID int not null,             CName varchar(50) not null,             TID int not null     )'''     score = '''create table Scor...
粗粮面包 发布于 8小时前 阅读 2

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

springboot+vue的前后端分离与合并
上官胡闹 发布于 8小时前

ansible 的基础指南和实例参考

--- title: "ansible" categories: 运维技术 tags: 配置管理 --- ## Ansible 概述     ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。目前版本实现的功能如下: * 连接插件connection plugins:负责和被监控端实现通信; * host inventory:指定操作的主机,是一个配置文件里面定义监控的主机; * 各种模块核心模块、command模块、自定义模块; * 借助于插件完成记录日志邮件等功能; * playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。 相比其他运维管理工具 Ansible有较强的适应性,和独特的优点:     * 不需要在被管控主机上安装任何客户端; * 无服务器端,使用时直接运行命令即可; * 基于模块工作,可使用任意语言开发模块; * 使用yaml语言定制剧本playbook; * 基于SSH工作; * 可实现多级指挥。 ## Ansible 的安装 登陆管控端系统,创建yum配置文件,执行如下命令: ``` cat > /etc/yum.repo.d/extras.repo << “EOF” [extras] Name=deepin extras baseurl=http://packages.deepin.com/server/amd6...
行者深蓝 发布于 8小时前 阅读 1

svn: E200007: Commit failed (details follow):

svn: E200007: Commit failed (details follow): svn: E200007: CHECKOUT can only be performed on a version resource [at this time]. 由于切换SVN服务器,需要清理本地缓存。 项目所在目录中:右键---TortoiseSVN---Clean up...
gAKey 发布于 8小时前 阅读 3

基于 HTML5 WebGL 的 3D “弹力”布局

每次看到医学界发布的宣传片中基本上都有一个 DNA 的样式,拖动一个节点靠近另一个节点 2 节点就会“弹开”,拉远一点又会向 1 节点“靠近”,这种效果非常炫啊,所以我觉得自己应该动手来实践一下了,就产生了这么个结果,good job!
xhload3d 发布于 8小时前 阅读 4

php5.6 报错:Call to undefined function Think\Template\simplexml_load_string() 解决方法

Call to undefined function Think\Template\simplexml_load_string() , 原因是 没有安装 php-xml包... 在php中, 关于xml有2个php包: php5.6-xml; php5.6-xmlrpc $ sudo apt-get install php5.6-xml php5.6-xmlrpc  重启apache2 $ sudo /etc/init.d/apache2 restart 搞定睡觉        
showqing 发布于 8小时前 阅读 1

mysql之mysql数据在磁盘的储存方式

mysql的数据在磁盘上的存储:     数据块:         由多个磁盘block组成的块,存储引擎负责管理数据块。         磁盘是block块设备,数据在磁盘上的存放也是按照块存放的。         mysql读取表到内存的时候,也必许按照一块一块的方式读取。假设要查询的表在和其他表在都在同一个块内。加载块的时候除了读取要查询的表,其他表也一并被读取出来。         当一个块内的部分表被删除时,这是就是形成了碎片。这样会降低装载到内存的速度。         所以会生成一个块头,记录一个快内表的大小,有无空闲空间,空闲空间的位置。 文件的记录组织类型:     堆文件组织:         把行简单的堆起来,没有顺序,记录可能在文件的任何地方。         查询效率低     顺序文件组织:         把行按照某字段(搜索码、排序码)的值顺序记录。         更新代价大。     散列文件组织:         人为将表分成多个部分,每个部分称为桶。根据行中的某个或某些字段做使用散列函数做哈希运算,运算结果属于某个范围的放在指定的桶中。多个桶组成一个表。         桶有可能溢出。所以要选...
new_chaos 发布于 8小时前 阅读 2

spring cloud

Spring Cloud 一:Spring Cloud-前言 1.微服务架构概念:     简而言之,微服务架构就是将一个完整的应用从数据存储开始垂直拆分成多个不同的服务。     每个服务都能独立部署、独立维护、独立扩展,服务与服务间通过诸如RESTful API的方式互相调用。     即微服务是自治的服务单元。 2.Spring Boot回顾:     Spring Boot让我们的Spring应用变的更轻量化。具有如下优势:         1.为所有Spring开发者更快的入门         2.开箱即用,提供各种默认配置来简化项目配置         3.内嵌式容器简化Web项目         4.没有冗余代码生成和XML配置的要求 3.微服务架构进化     服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合,并且强调DevOps和快速演化。     DevOps是英文Development和Operations的合体,他要求开发、测试、运维进行一体化的合作,进行更小、更频繁、更自动化的应用发布,以及围绕应用架构来构建基础设施的架构。     3.1.服务化之Nginx         nginx通过接受客户端Http请求,根据路径配置,转发,跳转相应的服务。         缺点:         1.Nginx配置中...
eboyRH 发布于 9小时前 阅读 3

机器学习视频第二章2

2014
Tom杰 发布于 9小时前 阅读 1

MySQL的索引策略(2)

上文提到了用自增主键做聚簇索引列,可以方便插入操作。但高并发场景下,主键的上界集中了所有的插入,可能导致间隙锁竞争(间隙锁是innodb中行锁的一种, 但是这种锁锁住的却不止一行数据,他锁住的是多行,是一个数据范围。间隙锁的主要作用是为了防止出现幻读;对符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁))。同时,自增字段的锁机制也可能成为热点。 覆盖索引 指包含了所有需要查询字段的索引。覆盖索引的优势如下 降低数据访问量。索引列数据通常远少于整行数据。 优化范围查询。因为索引是按顺序建立的。 内存中保存索引,所以可避免访问磁盘/产生系统调用。 聚簇索引中,二级主键的覆盖查询可以直接在叶子节点读取数据,从而避免了再次访问聚簇索引取值的过程。这个是覆盖索引最常见的用途。 覆盖索引的核心是:索引结构保存相关列的值。所以,一般用在B+树索引。 索引扫描排序 ​​​​​​​前篇提到,索引的三个用途是:SELECT、ORDER BY、GROUP BY。 如果索引不能覆盖所有列,则读取数据的过程是:...->索引中读取n行相关信息-...
AndyDufresne 发布于 9小时前 阅读 2

如何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天前 阅读 925 评论 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天前 阅读 1870 评论 19 点赞 6

Java的SPI机制分析

Java SPI
宸明 发布于 4天前 阅读 2376 评论 4 点赞 2

Tomcat7 自动加载类及检测文件变动原理

在一般的web应用开发里通常会使用开发工具(如Eclipse、IntelJ)集成tomcat,这样可以将web工程项目直接发布到tomcat中,然后一键启动。经常遇到的一种情况是直接修改一个类的源文件,此时开发工具会直接将编译后的class文件发布到tomcat的web工程里,但如果tomcat没有配置应用的自动加载功能的话,当前JVM中运行的class还是源文件修改之前编译好的class文件。可以重启tomcat来加载新的class文件,但这样做需要再手工点击一次【restart】,为了能够在应用中即时看到java文件修改之后的执行情况,可以在tomcat中将应用配置成自动加载模式,其配置很简单,只要在配置文件的Context节点中加上一个reloadable属性为true即可,示例如下: <Context path="/HelloWorld" docBase="C:/apps/apache-tomcat/DeployedApps/HelloWorld" reloadable="true"/> 如果你的开发工具已经集成了tomcat的话应该会有一个操作界面配置来代替手工添加文件信息,如Eclipse中是如下界面来配置的: 此时需要把【Auto reloading enabled】前面的复选框钩上。其背后的原理实际也是在server.xml文件中加上Context节点的描述: <Context docBase="test" path="/test" reloadable="true"/> 这样Tomcat就会监...
真-智障 发布于 7天前 阅读 1231 评论 1 点赞 2

一致性hash在DynamoDB上的应用

Dynamo是Amazon提供的一个分布式存储NoSQL 数据库,它采用去中心化、松散耦合的方式,组成一个支持高度扩展的Key/Value 数据库,本篇我们着重分析一下,它是如何采用采用一致性hash而达到可高度扩展的。
wier 发布于 1周前 阅读 934 评论 1 点赞 1

疯狂Activiti6.0连载(15)DMN规则匹配表达式

Activiti DMN 规则引擎 规则匹配 表达式
杨大仙的程序空间 发布于 1周前 阅读 1402 评论 2 点赞 1

Jenkins+SVN+Maven自动化部署环境搭建

## 前言 因今年公司新产品线较多,为了降低耦合,达到业务分离、重用,提高内部开发效率的目的,采用了基于服务组件、前后端分离的架构体系。与之前传统单应用架构相比,系统部署、配置更加复杂,为了能够频繁地将软件的最新版本,及时、持续地交付给测试团队及质量控制团队,以供评审,所以引入持续集成工具Jenkins,从而实现公司新产品持续集成,自动化部署。 ## 环境准备 - 操作系统:Windows10 - Java环境:下载 jdk-1.8.0-131-X64.zip,配置Java环境变量(参考:http://jingyan.baidu.com/article/02027811629b941bcc9ce521.html) - Maven环境:下载apache-maven-3.5.2-bin.zip,配置Maven环境变量(参考:http://wiki.jikexueyuan.com/project/maven/environment-setup.html) - Tomcat环境:下载apache-tomcat-8.5.20-windows-x64.zip,配置Tomcat环境变量(参考:http://jingyan.baidu.com/article/8065f87fcc0f182330249841.html) - Jenkins环境:下载Jenkins2.73.2 for Windows ## 安装Jenkins 1. 运行下载好的Jenkins安装包jenkins.msi,选择安装路径,点击”安装“,等待安装完成; ![11](https://gitee.com/lsjcoder/img/raw/master/%E4%BB%A3%E7%A0%81%E7%...
老司机带你撸代码 发布于 1周前 阅读 3124 评论 10 点赞 12

用vue做一个酷炫的menu

写在前面         最近看到一个非常酷炫的menu插件,一直想把它鼓捣成vue形式,谁让我是vue的死灰粉呢,如果这都不算爱😔。😆开个小玩耍,我们一起来探索黑魔法吧。观看本教程的读者需要具备一定的vue和css3的知识. 本文结构 1.效果演示 2.使用方法介绍 3.关键步骤讲解 正文 1.效果演示   pic_1   pic2   pic_3      在线演示live demo 2.使用介绍         项目地址:github.com/MingSeng-W/vue-bloom-menu,clone项目到本地        a. 首先在单文件组件里引入menu组件,导入common文件夹stylus里的menuConfig.stylus.        b.配置相应的参数             可选参数             * radius:default为100px,item距离menu的button的距离。             *  startAngle:defaut为0,item开始的角度,以时钟3点钟方向记为0,然后顺时针方向为递增方向。            *  endAngle:default为315,最后一个item的角度。            *  itemNum:default为8             *  animationDuration:default为0.5s,每个item动画的执行时间             *  itemAnimationDelay:d...
MingSeng-W 发布于 1周前 阅读 5529 评论 18 点赞 17

使用Spring Cloud Sleuth实现链路监控

作者:社区 徐靖峰 原文地址:http://www.spring4all.com/article/156 在服务比较少的年代,一个系统的接口响应缓慢通常能够迅速被发现,但如今的微服务模块,大多具有规模大,依赖关系复杂等特性,错综复杂的网状结构使得我们不容易定位到某一个执行缓慢的接口。分布式的服务跟踪组件就是为了解决这一个问题。其次,它解决了另一个难题,在没有它之前,我们客户会一直询问:你们的系统有监控吗?你们的系统有监控吗?你们的系统有监控吗?现在,谢天谢地,他们终于不问了。是有点玩笑的成分,但可以肯定的一点是,实现全链路监控是保证系统健壮性的关键因子。 介绍Spring Cloud Sleuth和Zipkin的文章在网上其实并不少,所以我打算就我目前的系统来探讨一下,如何实现链路监控。全链路监控这个词意味着只要是不同系统模块之间的调用都应当被监控,这就包括了如下几种常用的交互方式: 1 Http协议,如RestTemplate,Feign,Okhttp3,HttpClient... 2 Rpc远程调用,如Motan,Dubbo,GRPC... 3 分布式Event,如RabbitMq,Kafka... 而我们项目目前混合使用了Http协议,Motan Rpc协议,所以本篇文章会着墨于实现这两块的链路监控。 ## 项目结构 ![项目结构](http://ov0zuistv.bk...
SpringForAll 发布于 2周前 阅读 2321 评论 2 点赞 3

Kubernetes在vivo容器云平台中的应用与实践

本博文是我参加2017/11/04 K8S技术社区深圳站Meetup分享的PPT内容,主要介绍Kubernetes在vivo容器云平台的应用与实践,重点介绍我们跟业界大多数方案不一样的地方,包括整体架构(HA/Security)、定制化的应用滚动方案、Ingress方案及部署实践、容器网络方案以及在TaaS方向的探索与实践等等。
WaltonWang 发布于 2周前 阅读 1898 评论 14 点赞 7

放弃Dubbo,选择最流行的Spring Cloud微服务架构实践与经验总结

Spring For All 社区作者: 纯洁,原文地址 [传送门](http://spring4all.com/article/144) 上次写了一篇文章叫[Spring Cloud在国内中小型公司能用起来吗?](https://mp.weixin.qq.com/s/vnWXpH5pv-FAzLZfbgTGvg)介绍了Spring Cloud是否能在中小公司使用起来,这篇文章是它的姊妹篇。其实我们在这条路上已经走了一年多,从16年初到现在。在使用Spring Cloud之前我们对微服务实践是没有太多的体会和经验的。从最初的开源软件[云收藏](https://github.com/cloudfavorites/favorites-web)来熟悉Spring Boot,到项目中的慢慢使用,再到最后全面拥抱Spring Cloud。这篇文章就给大家介绍一下我们使用Spring Boot/Cloud一年多的经验。 在开始之前我们先介绍一下几个概念,什么是微服务,它的特点是什么? Spring Boot/Cloud都做了那些事情?他们三者之间又有什么联系? ## 技术背景 ### 什么是微服务 微服务的概念源于2014年3月Martin Fowler所写的一篇文章“[Microservices](http://martinfowler.com/articles/microservices.html)”。 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的...
SpringForAll 发布于 2周前 阅读 4015 评论 23 点赞 16

用 Electron 打造 Win/Mac 应用,从「代码」到可下载的「安装包」,可能比你想得麻烦一点

我们能从很多地方学习到怎么起一个 Electron 项目,有些还会介绍怎么打包或构建你的代码,但距离「真正地发行一款 Electron 产品」这一目标,还有很多工作需要做... 这是 Electron 系列文章的第二篇,这一篇文章将和大家分享我是怎么去构建**自动化的 Electron 开发构建工程**的,说白了,就是**怎么把敲的代码变成一个用户可以下载安装的包**,当然随着之后应用复杂度的提升和技术再选型,工程体系可能随时会重构或演进,但至少可以给大家一些参考,欢迎留言交流。
Stinson_Zhao 发布于 2周前 阅读 2996 评论 9 点赞 13

Storm消息处理可靠性保证

http://storm.apache.org/releases/0.9.7/Guaranteeing-message-processing.html 本文是对Storm官方文档的翻译并结合了自己的一些理解。最后发现网络上已经有了很多的翻译版本,自己翻译收获还是不一样的。 文中可能会有翻译理解不到位的情况,还望不吝指教。另外在阅读本文前须要对storm的一些基本概念有所了解,包括spout,bolt,tuple,拓扑等
囚兔 发布于 2周前 阅读 976

lvm讲解、磁盘故障小案例

### lvm讲解 ``` DiskA 分区分别为Physical Volume1、Physical Volume2;DiskB 分区为Physical Volume3,在这里Physical volume1,2,3就是磁盘分区 也就是物理卷;然后由单个或多个物理卷组成物理卷组,最后在物理卷的基础上划分出逻辑卷,而逻辑卷格式化后挂载上就可以使用了 ``` #### 准备磁盘分区阶段 - fdisk /dev/sdb - 创建三个新分区,大小分别为2G - 改变分区类型为8e(fdisk中使用t更改类型) 1. 创建新分区 ``` //这里我创建了5个2G的分区,多出的2个留待测试用 [root@24centos7-01 /]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 //创建第一个分区 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1):1 起始 扇区 (2048-20971519,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+2000M 分区 1 已设置为 Linux 类型,大小设为 2 GiB //创建第二个分区 命令(输入 m 获取帮助):n Partition type: p primary (1 primary, 0 ext...
vitus_feng 发布于 2周前 阅读 1280 评论 4 点赞 2

深度解读Tomcat中的NIO模型

I/O复用模型,是同步非阻塞,这里的非阻塞是指I/O读写,对应的是recvfrom操作,因为数据报文已经准备好,无需阻塞。说它是同步,是因为,这个执行是在一个线程里面执行的。有时候,还会说它又是阻塞的,实际上是指阻塞在select上面,必须等到读就绪、写就绪等网络事件。
新栋BOOK 发布于 2周前 阅读 2696 评论 11 点赞 11

Java混淆工具 ProGuard之初体验

**1.混淆工具版本** 本文使用的是ProGuard这一款Java代码混淆工具。 因为在我们实际的开发工作中,有些程序包含了公司核心产品的代码,所以为了保护自身的知识产权,避免程序包不小心外流出去,我们有必要进行一些保护措施,在程序开发完之后,需要将程序代码进行混淆。 本文使用的是ProGuard v5.3.3版本。 下载地址:http://www.jb51.net/softs/242707.html **2.混淆工具安装步骤** 2.1下载后的文件是一个压缩包: ![输入图片说明](https://static.oschina.net/uploads/img/201711/05141208_UU6w.png "在这里输入图片标题") 2.2 解压压缩包 ![输入图片说明](https://static.oschina.net/uploads/img/201711/05141219_crA0.png "在这里输入图片标题") **3.混淆工具使用步骤** 3.1 解压后,执行 bin目录下的proguardgui.bat ![输入图片说明](https://static.oschina.net/uploads/img/201711/05141328_A5vq.png "在这里输入图片标题") 执行proguardgui.bat后如图: ![输入图片说明](https://static.oschina.net/uploads/img/201711/05141356_BC65.png "在这里输入图片标题") 注意:执行proguardgui.bat后会出现一个cmd命令框,不要关闭,最小化即可。 3.2 点击左侧菜单栏中的...
godcvcv 发布于 3周前 阅读 2848 评论 9 点赞 2

Angular 5 快速入门与提高

**一、概述** 尽管被称为`Angular5`,实际上它只是这个诞生于2012年的前端框架的的第四个版本: ![angular history](http://xc.hubwiz.com/class/59de66862d4f22811dc6b2f7/img/angular-history.png) 看起来差不多半年就发布一个新版本,不过实际上从重写的版本`2`开始,开发 接口与核心思想就稳定下来了,并基本保持着与前序版本的兼容性。 在`5`这个新的版本中,`Angular`团队将改进重点放在以下特性方面: - 更易于构建渐进式`Web`应用 —— __P__rogressive __W__eb __A__pp - 使用构建优化器剔除无用代码,以获得更小的应用、更快的网络加载时间 - 使物化设计组件兼容服务端渲染 `PWA`是`Google`提出的一个标准,旨在让Web应用在移动终端上获得媲美原生 应用的用户体验。一个`PWA`应用主要利用`Service Worker`和浏览器缓存来 提省交互体验,它不仅可以直接部署在手机桌面,而且可以离线应用: ![pwa](http://xc.hubwiz.com/class/59de66862d4f22811dc6b2f7/img/pwa.png) **二、引入angular环境** `Angular`推荐使用`TypeScript`来开发应用,这要求使用一个在线 编译器(`JIT`)实时编译代码,或者在开发期采用预编译器(`AOT`)提前编译代码。 为了避免这个繁琐的过程影...
笔阁 发布于 3周前 阅读 2374 评论 11 点赞 4

给苹果电脑选机械键盘

机械键盘的轴体选择是见痛苦的事,不知道哪款轴体是最适合自己的,我的第一部机械键盘是 IKBC C87 青轴。青轴使用了一年多,对机械键盘越来越了解,期间跟同事交换使用,体验机械键盘其他轴体茶轴和红轴,最终发现真正适合自己的是红轴。
neo-chen 发布于 3周前 阅读 1551 评论 20 点赞 1

解析Kubernetes 1.8中的基于Pod优先级的抢占式调度

在 1.8 的发布版本中,SIG Scheduling 通过引入 Pod 优先级和抢占特性扩展了共享集群的概念。这些特性允许在单一集群中混合运行不同类型的应用和任务,提高了集群的利用率和可用性。这些特性目前都是 alpha 版本。本文将对这一特性进行全面介绍,下一篇博文会从scheduler源码进行分析。
WaltonWang 发布于 3周前 阅读 1232 评论 2 点赞 3

jvm - 垃圾回收

# jvm - 垃圾回收 注意 : 本系列文章为学习系列,部分内容会取自相关书籍或者网络资源,在文章中间和末尾处会有标注 ## **垃圾回收的意义** 它使得java程序员不再时时刻刻的关注内存管理方面的工作. 垃圾回收机制会自动的管理jvm内存空间,将那些已经不会被使用到了的"垃圾对象"清理掉",释放出更多的空间给其他对象使用. ## **何为对象的引用?** Java中的垃圾回收一般是在Java堆中进行,因为堆中几乎存放了Java中所有的对象实例 在java中,对引用的概念简述如下(引用强度依次减弱) : - **强引用** : 这类引用是Java程序中最普遍的,只要强引用还存在,垃圾收集器就永远不会回收掉被引用的对象 - **软引用** : 用来描述一些非必须的对象,在系统内存不够使用时,这类对象会被垃圾收集器回收,JDK提供了SoftReference类来实现软引用 - **弱引用** : 用来描述一些非必须的对象,只要发生GC,无论但是内存是否够用,这类对象就会被垃圾收集器回收,JDK提供了WeakReference类来实现弱引用 - **虚引用** : 与其他几种引用不同,它不影响对象的生命周期,如果这个对象是虚运用,则就跟没有引用一样,在任何时刻都可能会回收,JDK提供了PhantomReference类来实现虚引用 **如下为相关示例代码** ```j...
wangkang80 发布于 3周前 阅读 2984 评论 13 点赞 11
顶部