利发国际官方网

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

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
开源中国 - 找到您想要的开源项目,分享和交流 - 利发国际官网-利发国际官方网-利发国际官方网站

精彩阅读

  1. 最新推荐

  2. 今日热门

  3. 本周热门

  4. 每日一博

  5. 最新文章

如何使用Flexbox和CSS Grid,实现高效布局

CSS 浮动属性一直是网站上排列元素的主要方法之一,但是当实现复杂布局时,这种方法不总是那么理想。幸运的是,在现代网页设计时代,使用 Flexbox 和 CSS Grid 来对齐元素,变得相对容易起来。   使用 Flexbox 可以使元素对齐变得容易,因此 Flexbox 已经被广泛使用了。 同时,CSS Grid 布局也为网页设计行业带来了很大的便利。虽然 CSS Grid 布局未被广泛采用,但是浏览器逐渐开始增加对 CSS Grid 布局的支持。   虽然 Flexbox 和 CSS Grid 可以完成类似的布局,但是本次,我们学习的是如何组合使用这两个工具,而不是只选择其中的一个。在不久的将来,当 CSS Grid 布局获得完整的浏览器支持时,设计人员就能够利用每个 CSS 组合的优势,来创建最有效和最有趣的布局设计。   测试 Flexbox 和 CSS Grid 的基本布局 我们从一个很简单且熟悉的布局类型开始,包括标题,侧边栏,主要内容和页脚等部分。通过这样一个简单的布局,来帮助我们快速找到各种元素的布局方法。 下面是需要创建的内容:  要完成这个基本布局, Flexbox 需要完成的主要任务包括以下方面: 创建完整宽度的 header 和 footer 将侧边栏放置在主内容区域左侧 确保侧边栏和主内容区域的大小合适 确保导航...
葡萄城控件技术团队 发布于 3小时前 阅读 29

简单介绍一下vue2.0

Vue是用于构建用户界面的渐进框架。作者尤雨熙特别强调它与其他的框架不同,Vue是渐进式的框架,可以逐步采用,不必一下就通过框架去重构项目。 另外Vue的核心库只专注于视图层,这样就更容易与其他库或现有项目进行集成,也更灵活。
笔阁 发布于 5小时前 阅读 24

基于zookeeper的分布式锁实现(监听临时节点的上一个节点)

    1.父节点:/disLocks1(zk根目录下的disLocks1目录,CreateMode.PERSISTENT类型)       2.所有需要获取锁的线程,都会在/disLocks1目录下建立一个临时顺序的子节点(CreateMode.EPHEMERAL_SEQUENTIAL类型)            3.每次都是序号最小的节点获取锁,当最小的节点业务逻辑处理完毕后,断开本次连接(或者删除当前子节点),则临时顺序的节点自动删除,接着让其他没有获取锁的节点去获取锁           每当一台机器去创建了一个临时顺序节点,去获取锁失败的时候(本节点不是序号最小的节点),则找出当前节点的前一个节点,并在该节点上注册一个监听事件,当前一个节点删除(获取锁成功),则后一个节点立即去获取锁。          相比于监听父节点机制的优势:不用所有的子节点都去监听父节点,讲子节点的监听事件均匀的分布在了对应的兄弟子节点上,这样在高并发的情况下,避免了当子节点删除的时候,父节点的监听事件过多,父节点每次需要触发大量的监听事件。   贴代码:   package zoo.com.zk.zoo.lock; import java.io.IOException; import java.util.Collections; import java.util.List; import java.util.Objects; imp...
蜗牛来打卡 发布于 5小时前 阅读 20

彻底理解了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('存在'); } ...
爱敲代码的程序员 发布于 7小时前 阅读 254 评论 2 点赞 3

SpringCloud(第 013 篇)电影微服务使用定制化 Feign 在客户端进行负载均衡调度并为 Feign 配置帐号密码登录认证 Eureka

1、定制 Feign 实现访问远端微服务; 2、为 Feign 配置帐号密码来登录认证 Eureka 服务发现模块; 3、修改 Feign 的日志打印级别; 4、定制 Feign 也毫不掩饰的支持负载均衡调度功能;
HMILYYLIMH 发布于 17小时前 阅读 224

libvirt和SanLock中的租约配置

本文讲述了在libvirt中使用SanLock的多种配置方法及其优缺点,同时在最开始使用了一种简单快速的源码分析方法(只通过一个简单的grep命令,就可以快速找到自己所需要的查看的源码的关键点,外加简单测试就可得出想要结果。很多时候时间有限,我们的目标是解决问题,不是把事情弄清楚时,此时可以这么做)。
LastRitter 发布于 17小时前 阅读 25

Swoole微服务框架Swoft之ORM

Swoft Swoft是基于swoole协程的高性能PHP微服务框架,Swoft宗旨是打造一款简单、快速、高效的框架。项目开源地址:https://github.com/swoft-cloud/swoft ORM ORM用于实现面向对象编程语言里不同类型系统的数据之间的转换,ORM有多种设计模式,swoft采用的是data mapper,业务和实体分开,但是也实现了类似ActiveRecord的操作方式,其实都是同一个实现的。 数据库操作分为两种基础(ActiveRecord)和高级的(data mapper),基础的用于快速开发和常见的查询操作,高级的用于事务和一些复杂的业务查询。 查询器语法 方法 功能 insert 指定插入表 update 指向更新的表 delete 删除语句 select 查询字段 selects 查询多个字段 from 指定删除和查询的表 innerJoin 内连接 leftJoin 左连接 rightJoin 右连接 where where条件语句 andWhere where and 条件语句 openWhere where 里面左括号 closeWhere where 里面右括号 orWhere where or 条件语句 whereIn where in语句 whereNotIn where not in 语句 whereBetween where between and 语句 whereNotBetween where not between and语句 having having语句 andHaving having and语句 orHaving having or语句 havingIn having in语句 ha...
Stelin 发布于 19小时前 阅读 128 评论 6

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

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

这些优秀的主流代码编辑器,你用过多少款?

可能是目前最全的主流代码编辑器列表
编辑部的故事 发布于 20小时前 阅读 3087 评论 37 点赞 3

尊重开源,且用且珍惜

——致开源多模型数据库ArangoDB 在中国市场的“山寨友”
GermanWifi 发布于 22小时前 阅读 223 评论 4 点赞 3

对比angular的几个插件库

这几天因为react的事情相信可能会有不少朋友将目光投向vue或者angular的学习使用,前段时间群里的朋友在angular项目启动的时候经常会问到一个问题,angular的插件库怎么选,为了方便大家的选择于是想在这篇博客中简单对比一下我使用过的几个插件库,包括使用方法以及使用的体验。
SwatNo27 发布于 22小时前 阅读 80 评论 1 点赞 1

离线Android WebView应用

背景 最近碰到如下需求: 使用app商户由于长期处于地下室(维修厂)可能wifi或者4G信号受限,因此可能对于系统依赖离线数据。 思路 原先是网页应用,想要脱机使用有如下几种方式 保存网页(静态访问) H5 AppCache 通常来说提供5M左右的空间(未核实)为什么app cache没有得到大规模应用?它有哪些硬伤吗? 通过某些方式将所有的网页下载下来(比如类似于高德地图离线导航包)通过webviewclient的shouldInterceptRequest方法拦截指定url返回特定的内容 https://github.com/Carson-Ho/WebView_InterceptRequest 类似于天猫京东双11大促会将大量静态资源通过推送等方式缓存到本地以免在大促当天对于系统造成太大压力 本地搭建服务器 类似于程序开发,有一个宿主端提供对应接口调用返回结果(数据来源不单单是一个来源 较为复杂) 缓存访问资源 缓存空间有限,并且需要提前访问,完全利用浏览器自身缓存机制 用户可清除 上述总结后 发现对于要求较为满足的应当采用保存网页方式(通过在程序发布后自动下载服务端对应的网页包解压到指定assets文件夹下 通过文件映射完成) 参考 Android:手把手教你构建 WebView 的缓存机制 & 资源预加载方案   方案 通过某些方式将对应需要...
Mr_Qi 发布于 1天前 阅读 71

这个六足机器人想成为你的朋友和舞伴

一家创业公司创造了一个外形像昆虫的机器人,还为之打造了应用商店,并希望它能成为机器人界的iPhone。
宋庆离 发布于 1天前 阅读 239 点赞 1

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

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

libvirt和SanLock中的killpath源码分析

当SanLock出现异常时,必须有一种方法来自己主动隔离,除了通过看门狗复位和默认的Kill外,还有就是通过配置killpath参数来处理,这里通过源码分析的方法来了解其中的细节。
LastRitter 发布于 1天前 阅读 32

iOS 扩展性极强的波浪效果工具类

波浪式图,最好在用的时候加个随机数,这样不会就不至于这么死板了
LiYaoPeng 发布于 1天前 阅读 111 评论 3

可扩展的ToolBar

>toolBar很常用,所以做了个工具类扩展性很好 ![](http://upload-images.jianshu.io/upload_images/4185621-c360e3a12044bdf7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 基本介绍: **一、写了两个创建方法** ``` + (instancetype)toolBarViewWithFrame:(CGRect)frame andOptionStrArray:(NSArray *)optionStrArray; - (instancetype)initWithFrame:(CGRect)frame andOptionStrArray:(NSArray *)optionStrArray; ``` **二、其实你直接这样创建就会出来这种效果:** >![](http://upload-images.jianshu.io/upload_images/4185621-a7f7756c67557e9f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) @implementation ViewController ``` - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor lightGrayColor]; //创建 self.toolBarView = [[PYToolBarView alloc]initWithFrame:CGRectMake(0, 2, self.view.frame.size.width, 30) andOptionStrArray:@[@"有",@"美",@"女"]]; //添加 [self.view addSubview:self.toolBarView]; } ``` **三、里面有很多属性可以设置下面来看看:** **1. 点击事件的回调** ``` /**item点...
LiYaoPeng 发布于 1天前 阅读 114

图片压缩处理的一个可行解决方法【OC】

图片处理 图片压缩
w_sen 发布于 1天前 阅读 211 点赞 1

swift GCD-定时器(DispatchSourceTimer)注册登陆组件封装

GCD定时器,计时器button 的封装
LiYaoPeng 发布于 1天前 阅读 52

java多线程——CAS

CAS是什么,有那些特性,如何使用...
wier 发布于 1天前 阅读 269 评论 4 点赞 3

彻底理解了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('存在'); } ...
爱敲代码的程序员 发布于 7小时前 阅读 254 评论 2 点赞 3

iOS 11正式版终于来了!强力助攻小程序

今日凌晨1时,果粉们翘首以盼好久的iOS 11正式版系统终于发布更新了,更新之后的系统不论是界面还是功能上都有了很多心突破,更令人惊喜的是,苹果本次更新的 iOS 11系统,居然对小程序生态有着不可忽视的推动性! 1、原生相机支持扫码功能,简直为小程序而生!
小程序社区 发布于 2小时前 阅读 61 评论 2

javascript函数式编程 笔记

high order function 高阶函数 其实就是以函数作为参数的函数 ,或者返回函数的函数 一幅图秒懂map reduce   ;  filter就是你不喜欢黄瓜就把黄瓜去除 Immutable Data  就是一旦创建,就不能再被更改的数据 persistent data structures 可持久化数据结构 完整内容来自youtube演讲 https://www.youtube.com/watch?v=e-5obm1G_FY
lilugirl 发布于 15小时前 阅读 24

linux shell编程

代码如下: #!/bin/bash #注意:1、grep的关键字无应用信息,其他都有 #2、actual打印的除了expected没有,其他都有 phpPath="/Users/germmy/gitall/php/cc/App/*" #wfy,在它的client里面多了一个标记,所以要加1 php_core_usr_chaiku3_user_setting_wfy=41 php_core_usr_chaiku3_user_work_info_wfy=26 php_core_usr_chaiku3_user_spouse_info_wfy=18 #xjk php_core_usr_chaiku3_user_contact_info_xjk=19 php_core_usr_chaiku3_user_email_auth_log_xjk=5 php_core_usr_chaiku3_user_type_change_log_xjk=3 #cww #在它的client里面多了一个标记,所以要加1 php_core_usr_chaiku3_user_student_info_cww=144 php_core_usr_chaiku3_user_company_info_cww=31 php_core_usr_chaiku3_user_action_log_cww=16 #wxy #王尼玛 #php_core actualResult=$(grep "usr.chaiku3_user_setting_wfy" $phpPath -r | wc -l) if [ $actualResult -eq $php_core_usr_chaiku3_user_setting_wfy ]; then echo "expected is $php_core_usr_chaiku3_user_setting_wfy, actual:$actualResult,php_core_usr_chaiku3_user_setting_wfy 【OK】" else echo "expected is $php_core_usr_chaiku...
Germmy 发布于 4小时前 阅读 22

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

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

java 创建HttpClient,忽略ssl认证

# Create HttpClient Code ``` private HttpClient getHttpClient() { if(context == null) { return new DefaultHttpClient(); } if("http".equals(context.getScheme())){ return new DefaultHttpClient(); } else { KeyStore truestStore; SSLSocketFactory socketFactory = null; try{ truestStore = KeyStore.getInstance(KeyStore.getDefaultType()); truestStore.load(null, null); socketFactory = new NoCheckSSLSocketFactory(truestStore); } catch (CertificateException e) { Logger.warn(Utils.getTagName(), PREFIX + e.toString()); } catch (UnrecoverableKeyException e) { Logger.warn(Utils.getTagName(), PREFIX + e.toString()); } catch (NoSuchAlgorithmException e) { Logger.warn(Utils.getTagName(), PREFIX + e.toString()); } catch (KeyStoreException e) { Logger.warn(Utils.getTagName(), PREFIX + e.toString()); } catch (KeyManagementException e) { Logger.warn(Utils.getTagName(), PREFIX + e.toString()); } catch (IOException e) { Logger.warn(Utils.getTagName(), PREFIX + e.toString()); } if(socketFactory == null) { re...
1071954237 发布于 4小时前 阅读 20

如何使用Flexbox和CSS Grid,实现高效布局

CSS 浮动属性一直是网站上排列元素的主要方法之一,但是当实现复杂布局时,这种方法不总是那么理想。幸运的是,在现代网页设计时代,使用 Flexbox 和 CSS Grid 来对齐元素,变得相对容易起来。   使用 Flexbox 可以使元素对齐变得容易,因此 Flexbox 已经被广泛使用了。 同时,CSS Grid 布局也为网页设计行业带来了很大的便利。虽然 CSS Grid 布局未被广泛采用,但是浏览器逐渐开始增加对 CSS Grid 布局的支持。   虽然 Flexbox 和 CSS Grid 可以完成类似的布局,但是本次,我们学习的是如何组合使用这两个工具,而不是只选择其中的一个。在不久的将来,当 CSS Grid 布局获得完整的浏览器支持时,设计人员就能够利用每个 CSS 组合的优势,来创建最有效和最有趣的布局设计。   测试 Flexbox 和 CSS Grid 的基本布局 我们从一个很简单且熟悉的布局类型开始,包括标题,侧边栏,主要内容和页脚等部分。通过这样一个简单的布局,来帮助我们快速找到各种元素的布局方法。 下面是需要创建的内容:  要完成这个基本布局, Flexbox 需要完成的主要任务包括以下方面: 创建完整宽度的 header 和 footer 将侧边栏放置在主内容区域左侧 确保侧边栏和主内容区域的大小合适 确保导航...
葡萄城控件技术团队 发布于 3小时前 阅读 29

为什么上传文件的表单需要设置enctype="multipart/form-data"

参考链接:http://blog.csdn.net/mazhibinit/article/details/49667511
qimh 发布于 3小时前 阅读 16

分享一个使用 vue.js 开发的网站

这个网站叫 「惠淘党」,照着文档和google,前后开发用了一个多星期。由于之前使用过 angular.js,所以上手还是挺快的,主要看了一下 vue.js 的组件和路由,因为这个跟 angular.js 不同。下面是所使用到的信赖。如有疑问,可以在下面点评一下。 { "name": "vue-htd", "version": "1.0.0", "description": "Vue.js Project", "author": "", "private": true, "scripts": { "dev": "node build/dev-server.js", "build": "node build/build.js", "test": "" }, "dependencies": { "babel-runtime": "^6.0.0", "less-loader": "^4.0.4", "vue": "^1.0.21", "vue-echarts": "^2.4.0", "vue-scroll-loading": "^0.1.0", "vue-swiper": "^0.5.0" }, "devDependencies": { "babel-core": "^6.0.0", "babel-loader": "^6.0.0", "babel-plugin-transform-runtime": "^6.0.0", "babel-preset-es2015": "^6.0.0", "babel-preset-stage-2": "^6.0.0", "connect-history-api-fallback": "^1.1.0", "css-loader": "^0.23.1", "eventsource-polyfill": "^0.9.6", "express": "^4.13.3", ...
请点赞 发布于 3个月前 阅读 110 评论 2 点赞 1

短信验证60s倒计时

HTML代码 <form name="editForm" id="form" method="post"> <div class="mui-input-group"> <div><label>手机号码</label><input type="tel" name="per_tel1" id="per_tel1" placeholder="请填写手机号码"></div> <div><label>短信验证码</label> <div><input type="text" name="yzm1" id="yzm1" placeholder="填写短信验证码"></div> <button type="button" id="request_code1" onclick="send_code(1)">获取验证码</button></div> </div> </form> jq代码 function send_code(i) { var tel_str = $("#per_tel" + i + "").val(); var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(17[0-9]{1})|(18[0-9]{1}))+\d{8})$/; if (!myreg.test(tel_str)) { alert("请填写手机号") $("#per_tel" + i + "").focus(); return false; } settime(i, 60); } function settime(i, secodes) { var countdown = secodes; if (countdown == 0) { $("#request_code" + i + "").attr('disabled', false); $("#request_code" + i + "").text("获取验证码"); count...
zhiqiangw 发布于 3小时前 阅读 15

Arcgis Engine(ae)接口详解(3):featureClass的feature编辑和删除

//由于测试数据不完善,featureClass在此要只设null值,真实功能要设实际的值 IFeatureClass featureClass = null; //获取某个字段的索引,后面取字段值用到 int xxxFieldIdx = featureClass.FindField("xxx"); IFeatureCursor featureCursor = featureClass.Search(null, true); IFeature feature = null; //获取到IWorkspaceEdit接口,IWorkspaceEdit是编辑必须的接口 IWorkspaceEdit workspaceEdit = (featureClass as IDataset).Workspace as IWorkspaceEdit; //开始编辑的两个重要方法,StartEditing第一个参数是是否允许Undo,Redo(重做,撤销),如果是后台数据处理功能一般关系不大 workspaceEdit.StartEditing(true); //构成一个EditOperation有StartEditOperation和StopEditOperation方法,Undo,Redo是针对一个EditOperation的 workspaceEdit.StartEditOperation(); //这里加try的原因是,如果编辑时出错,需要调用IWorkspaceEdit的一些方法来回滚修...
canneljls 发布于 4小时前 阅读 14

centos 7 系统中使用yum安装tomcat

安装Tomcat 现在您已准备好安装Tomcat 7.运行以下命令安装Tomcat软件包: sudo yum install tomcat 答y在确认提示安装Tomcat。 这将安装Tomcat 7及其相关项,比如Java,它也将创建tomcat用户。 最重要的Tomcat的文件将位于/usr/share/tomcat 。 如果你已经有了,你想运行一个Tomcat应用程序,你可以将它放在/usr/share/tomcat/webapps的目录,这个目录是一个链接,指向/var/lib/tomcat/webapps。配置Tomcat,并重新启动Tomcat服务。但在本教程中,我们将安装一些其他软件包,帮助您管理Tomcat应用程序和虚拟主机。 让我们快速更改Tomcat在启动时使用的Java选项。打开Tomcat配置文件: sudo vi /usr/share/tomcat/conf/tomcat.conf 下面添加JAVA_OPTS行添加到文件。 随意改变Xmx和MaxPermSize值,这些设置会影响Tomcat会使用多少内存: / etc / default / tomcat7 – JAVA_OPTS JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC" 保存并退出。 请注意,Tomcat服务将不会运行。 安装管理包 如果您刚开始使用Apache Tomcat,您很可能想要安装一些管理工具,这些工具将帮助您部署Jav...
gugudu 发布于 4天前 阅读 18

zabbix3.2学习笔记(一):基本概念

zabbix是采用C/P/S客户端、代理端、服务器端架构的分布式、开源的监控软件,提供监控数据采集、存储、分析、告警、展示功能,是运维的好帮手。 支持多种监控方式: 1,zabbix agent客户端,部署到被监控主机上。 2,snmp协议通讯,大部分网络设备支持该协议。 3,IPMI,通过IPMI硬件结构监控物理特征,像电压、温度等。 4,JMX,即Java扩展插件(Java Management Extensions) zabbix server监控数据可存储多种数据库:MySQL、Oracle、PostgreSQL、SQLite、IBM DB2。 通过zabbix frontend展示,可理解为zabbix webGUI,分布式扩展是通过zabbix proxy代理实现的。 zabbix各组件: zabbix server:接收监控数据并分析统计 zabbix agent:收集监控数据并发送给zabbix server zabbix database:存储监控配置信息和数据 zabbix web:前端展示监控统计信息 zabbix proxy:用于分布式环境代收局部监控信息并推送给zabbix server   zabbix部署依赖于lamp/lnmp环境,要求详见官网 https://www.zabbix.com/documentation/3.2/manual/installation/requirements 简单yum安装:这里是阿里云centos 7.2 x86_64,安装最新版本3.2.7,以mysql作为数据库 zabbix server端安装: yum install -y...
hiwill 发布于 1个月前 阅读 24

使用基于共享内存的自旋锁在虚拟机间进行同步的可行性研究

在并行编程中,给我一片共享内存和一个原子操作,就能实现一个自旋锁,从而实现任何同步和通信方法,因此自旋锁是并行编程实现的关键。本文通过原理分析去探讨在多个虚拟机间使用基于共享内存的自旋锁进行同步通信的可行性,所有分析都有详细的出处,力求严谨,最终分析的结果也经过实际测试,确认是可行的。
LastRitter 发布于 6小时前 阅读 13

简单介绍一下vue2.0

Vue是用于构建用户界面的渐进框架。作者尤雨熙特别强调它与其他的框架不同,Vue是渐进式的框架,可以逐步采用,不必一下就通过框架去重构项目。 另外Vue的核心库只专注于视图层,这样就更容易与其他库或现有项目进行集成,也更灵活。
笔阁 发布于 5小时前 阅读 24

从三层架构迈向领域驱动设计(学习笔记)

三层架构   严格分层架构模式的特点是上层只能访问相邻的下层,其他层次间的调用都不允许。三层架构就是一种严格分层模式,它把职责划分为界面展示、业务逻辑、数据访问三层,还有一个业务实体,前面三层都要依赖它,所以它并不构成一个层。   三层架构的特点是一种面向过程的编程思想,特点如下: a. 业务实体类中基本上只有属性没有方法。 b. 业务逻辑层的类基本上只有方法没有属性。 c. 将数据表结构映射为业务实体类是一个惯用做法,以至于有人将其称之为“传统”。这样的好处是只需要理解一套模型,能够通过自动化工具从数据表直接生成业务实体,还能够自然而然的通过自动化机制存储与检索业务实体。但对于复杂点的业务,这样做就是绝大部分问题的根源。 d. 当业务膨胀起来,需要划分模块的时候,我们有个常用的变形:提取一个服务层出来,用来组合模块间的交互,还为业务逻辑层提供了一个防腐层,可以把记录日志、验证权限、处理异常等职责分配给服务层。     由于采用了严格分层模式,用户界面层是绝对不能跨过业务逻辑层调用数据访问层的,同理服务层也是不能调用数据访问层。但是图2都有四层了。 其实三层架构还有个更准确的名字----分层贫血领域模型架构...
ND小龙 发布于 15小时前 阅读 11

sublime text3 正式版 license

``` —– BEGIN LICENSE —– TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA12C0 A37081C5 D0316412 4584D136 94D7F7D4 95BC8C1C 527DA828 560BB037 D1EDDD8C AE7B379F 50C9D69D B35179EF 2FE898C4 8E4277A8 555CE714 E1FB0E43 D5D52613 C3D12E98 BC49967F 7652EED2 9D2D2E61 67610860 6D338B72 5CF95C69 E36B85CC 84991F19 7575D828 470A92AB —— END LICENSE —— ```
boogoogle 发布于 5小时前 阅读 9

使用Github客户端将本地代码仓库传递至远程github

最近在做项目时,管理者在github上创建了一个私有代码仓库,邀请加入进Organization,成为其中的开发者成员,需要开发者进行版本迭代。在此由于之前项目中使用github进行合作开发较少,所以遇到了不少难题,因此将自己跳过的坑,总结的经验做一下总结,由于水平有限,希望对你有所帮助,也是对自己解决问题的一种总结。        废话少说,切入正题。      一、  获得加入Oraganization后,下载github客户端。下载地址:http://download.csdn.net/detail/qq_23547831/9295217        安装成功后,使用已经在github上注册过的账户进行登录。登录成功后,找到 二、将远程github仓库clone到本地指定的文件夹,也可以使用git shell 命令行 三、进如到下载的AndroidCV 项目路径下,将我们创建的AndroidCV项目中的资源文件都Copy到Clone下的Android目录。 特别注意:.gradle文件、build文件以及app文件下的app.iml文件不需要复制 在github客户端的右上角有同步按钮,进行远程同步。 就可以将项目传递同步到远程私有仓库中了 四、版本控制迭代 AS上配置好git工具,一般情况下,AS会自动配置,配置界面如下: 路径配置完成后,点击test,如果出现如下图所示,就说明配置成...
阮少爷 发布于 15小时前 阅读 9

quartz详解2:quartz由浅入深

quartz详解2:quartz由浅入深 http://blog.itpub.net/11627468/viewspace-1763498/
残刃O 发布于 5小时前 阅读 10

适配 iPhone X 之异形屏

苹果终于在一年一度的秋季发布会发布了 iPhone 十周年纪念版:iPhone X。 iPhone X 是 2014 发布 iPhone 6 之后又一次外形的变化,也是 iPhone 历史上(可能)最大的一次外观变化。 我相信很多开发者和设计师看到 iPhone X 的这个「天猫内定」屏幕的时候心里十分苦恼:该怎么为这个机型做设计和适配?这篇文章从苹果的 iPhone X 开发和设计指南出发,试图来解决这个问题。 需要注意的是,本文不对设计指南完整的、不保留的搬运,而是根据指南和个人实操,做出的结论。完整的内容请自行查看文末链接。如有错误欢迎指出。 先抛数据 iPhone X 采用了 2436*1125 分辨率,拥有一块大约 2.17:1 的屏幕。iPhone X 的屏幕像素比 iPhone 8 高出 145 pt。适配 iPhone X 时并不需要像传闻的一样使用 @4x 的素材,而是继续使用 @3x 即可。苹果鼓励我们使用 PDF 素材来缩小包大小。 iPhone X 的状态栏高度为 44 pt ,iPhone 8 和 iPhone 8 Plus 和以前一样为 20 点。经过我的测试,X 的 tabbar 比以前高出 43 个点(以前是 40,现在是 83)。需要注意的是,横屏时底部高度为 33 pt。这个数据可以用于底部适配,下文会讨论这个话题。 Safe Area iOS 11 为屏幕适配引入了一个十分重要的概念...
秦无炎 发布于 6小时前 阅读 8

部分面试题整理

1.ng中如何配置路由,$scope和$rootscope的原理 ng中如何配置路由? 1)使用内置路由模块ng-route var app = angular.module('ngRouteExample', ['ngRoute']) .controller('MainController', function($scope) { }) .config(function($routeProvider, $locationProvider) { $routeProvider .when('/users', { templateUrl: 'user-list.html', controller: 'UserListCtrl' }) .when('/users/:username', { templateUrl: 'user.html', controller: 'UserCtrl' }); // configure html5 $locationProvider.html5Mode(true); }); 2)第三方路由模块ui-route $stateProvider .state('contacts', { url: '/contacts', template: 'contacts.html', controller: 'ContactCtrl' }) .state('contacts.detail', { url: "/contacts/:contactId", templateUrl: 'contacts.d...
smile_微笑 发布于 16小时前 阅读 7

可能是国内最火的开源项目 —— 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框架的,开源的,快速、高效的协...
编辑部的故事 发布于 1周前 阅读 6287 评论 22 点赞 12

73款阿里巴巴利发国际官方网详解!

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

【软件周刊第 45 期】Java EE 8 最终规范正式发布;Dubbo 发布恢复维护后的首个版本

软件周刊(09.03 — 09.09):本周热门软件更新 — Dubbo 恢复维护后的第一个版本 2.5.4 发布;Visual Studio Code 1.16 添加自动闭合 HTML 标签功能;全平台 Chrome 浏览器正式版更新至 61.0.3163.79 版本;Linux Kernel 4.13 正式发布,对内核进行了加固;Qt Creator 4.4 发布,改进对 C++ 和 CMake 的支持
编辑部的故事 发布于 2周前 阅读 3936 评论 3 点赞 2

java多线程——锁

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

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 发布于 1周前 阅读 2111 评论 7 点赞 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(黄色箭...
为了美好的明天 发布于 1周前 阅读 2016 点赞 1

使用移动 App 开发框架 Ionic 构建应用的 5 个实用技巧

本文介绍了使用 Ionic框架进行开发,为 iOS 和 Android 系统创建原生和混合移动 app 的一些技巧。
编辑部的故事 发布于 1周前 阅读 1732 评论 9 点赞 1

【源资讯 第44期】开发者编写 《对自杀说不》 开源协议;Facebook 和 GitHub 联手推出 Atom-IDE

【一周源资讯(2017.9.9-2017.9.15)】本周最受关注的莫过于WePhone开发者苏享茂因离婚时遭前妻翟欣欣敲诈勒索自杀事件,近日,有开发者编写 《对自杀说不》 开源协议呼吁开发者珍爱生命远离自杀。 
编辑部的故事 发布于 5天前 阅读 2058 评论 5

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 发布于 1周前 阅读 1459 评论 1 点赞 1

【码云周刊第 37 期】如何从运维零基础练好日志分析与统计?

每周为您推送最有价值的利发国际官方网内参!
利发国际官方网码云 发布于 2周前 阅读 1639 评论 2 点赞 1

八款常用的 Python GUI 开发框架推荐

作为Python开发者,你迟早都会用到图形用户界面来开发应用。本文将推荐一些 Python GUI 框架,希望对你有所帮助,如果你有其他更好的选择,欢迎在评论区留言。 Python 的 UI 开发工具包 Kivy Kivy是一个开源工具包能够让使用相同源代码创建的程序能跨平台运行。它主要关注创新型用户界面开发,如:多点触摸应用程序。Kivy还提供一个多点触摸鼠标模拟器。当前支持的平台包括:Linux、Windows、Mac OS X和Android。 Kivy拥有能够处理动画、缓存、手势、绘图等功能。它还内置许多用户界面控件如:按纽、摄影机、表格、Slider和树形控件等。 Python 的 GUI 开发工具 Flexx Flexx 是一个纯 Python 工具包,用来创建图形化界面应用程序。其使用 Web 技术进行界面的渲染。你可以用 Flexx 来创建桌面应用,同时也可以导出一个应用到独立的 HTML 文档。因为使用纯 Python 开发,所以 Flexx 是跨平台的。只需要有 Python 和浏览器就可以运行。如果是使用桌面模式运行,推荐使用 Firefox 。   Qt库的Python绑定 PyQt PyQt是Qt库的Python版本。PyQt3支持Qt1到Qt3。 PyQt4支持Qt4。它的首次发布也是在1998年,但是当时它叫 PyKDE,因为开始的时候SIP和PyQt没有分开。PyQt是用SIP写的...
编辑部的故事 发布于 2周前 阅读 5603 评论 20 点赞 8

康威定律——这个50年前就被提出的微服务概念,你知多少?

## 概述 微服务架构是一种非常流行的新概念,即便可供以借鉴的经验比较少,当然不能阻挡它成为热门话题与研究对象。 令人惊讶地是,其实微服务的概念早在五十多年前就已经被提出,多年来,很久研究表明了这些观点的准确性。这就是本文所介绍的——康威定律。现在已经有很多企业正在尝试使用它创建高效的微服务架构。 ![image](https://i.v2ex.co/X5120k76.png) 在这篇文章中最有名的一句话莫过于: 设计系统的企业受限于生产设计,这些设计是企业沟通结构的副本——Melvin Conway(1967)。 这意味着设计系统的企业,它们生产的设计等同于企业内的沟通结构。下图说明了此概念: ![image](https://i.v2ex.co/lAvKd4w4.png) 该图展现了企业现有沟通结构,简单地说:企业结构等于系统设计。 作者这里提到的系统并不局限于应用系统,据说这篇文章最初投稿于哈佛商业评论,但被拒绝,因此康威将其提交到了一个编程杂志,所以被误解为只针对应用开发,起初,作者并没有把这种理论作为定律,只是描述了发现和结论,不过著名的《The Mythical Man-Month》一书介绍了Brooks的理论,并引用了康威的一些观点,于是康威的理论被推崇成为我们现在所熟知的康威定律。 康威定律详细介绍 在文...
数人云 发布于 1周前 阅读 1174 评论 6 点赞 6

浅析开源数据库MySQL架构

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

可能是最火的开源项目 —— 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...
编辑部的故事 发布于 3周前 阅读 18931 评论 30 点赞 24

解读Linux启动过程

# 解读Linux启动过程   ## 1. 概述 本文解读一下从CPU加电自检到启动init进程的过程, 先通过下面这张图大致看一下Linux启动的整个过程。 ![](https://static.oschina.net/uploads/img/201709/07094516_u3eE.png) 本文的分析环境是GRUB 0.97 + Linux 2.6.18。 ## 2. BIOS CPU加电后首先工作在实模式并初始化CS:IP=FFFF:FFF0,BIOS的入口代码必须从该地址开始。BIOS完成相应的硬件检查并提供一系列中断服务例程,这些中断服务提供给系统软件访问硬件资源(比如磁盘、显示器等),最后选择一个启动盘加载第一个扇区(即:MBR,共512字节)数据到内存0x7C00处,并从这里开始执行指令(CS:IP=0000:7C00),对于笔者的电脑来说这就是GRUB的Stage1部分。 ## 3. GRUB GRUB的作用是bootloader,用来引导各种OS的。 ### 3.1. Stage1 Stage1就是MBR,由BIOS把它从磁盘的0扇区加载到0x7c00处,大小固定位512字节,此时的CPU上下文如下: eax=0011aa55 ebx=00000080 ecx=00000000 edx=00000080 esi=0000f4a0 edi=0000fff0 eip=00007c00 esp=00007800 ebp=00000000 iopl=0 nv up ei pl zr na po nc cs=0000 ds=0000 es=0000 fs=0000 gs=0000 ss=0000 eflags=00000246 // 注: dl=启动磁盘号, 0...
macwe 发布于 2周前 阅读 3461 评论 8 点赞 14

基于Spring Boot的天气预报服务

本文,我们将基于 Spring Boot 技术来实现一个微服务天气预报服务接口——micro-weather-basic。micro-weather-basic 的作用是实现简单的天气预报功能,可以根据不同的城市,查询该城市的实时天气情况。
waylau 发布于 2周前 阅读 1641 评论 5 点赞 2

Web程序员这5个debug技巧必须掌握

划重点 我一直使用printf调试程序,一般来说都是比较顺利,但有时候,你会发现需要更好的方法。下面几个JavaScript技巧相信你一定会觉得十分有用: 1debugger; 我以前也说过,你可以在JavaScript代码中加入一句debugger;来手工造成一个断点效果。 需要带有条件的断点吗?你只需要用if语句包围它: if (somethingHappens) { debugger; } 但要记住在程序发布前删掉它们。 2设置在DOM node发生变化时触发断点 有时候你会发现DOM不受你的控制,自己会发生一些奇怪的变化,让你很难找出问题的根源。 谷歌浏览器的开发工具里有一个超级好用的功能,专门可以对付这种情况,叫做“Break on…”,你在DOM节点上右键,就能看到这个菜单项。 断点的触发条件可以设置成这个节点被删除、节点的属性有任何变化,或它的某个子节点有变化发生。 3Ajax断点 XHR断点,或Ajax断点,就像它们的名字一样,可以让我们设置一个断点,在特点的Ajax调用发生时触发它们。 当你在调试Web应用的网络传输时,这一招非常的有效。 4移动设备模拟环境 谷歌浏览器里有一些非常有趣的模拟移动设备的工具,帮助我们调试程序在移动设备里的运行情况。 找到它的方法是:按F12,调出开发者工具,然后按ESC键(当前...
小一天 发布于 1周前 阅读 850 点赞 1

代码实现Redis异步任务

上文说到Redis实现优先级队列Redis实现优先级队列 那么代码的实现呢也比较简单 接口概述 定义几个消息类型 package com.air.tqb.model; import java.io.Serializable; public class Message implements Serializable{ public Message(Distributable messageBean, Long timeStamp, String docType, Integer times, String from, String to) { this.messageBean = messageBean; this.timeStamp = timeStamp; this.docType = docType; this.times = times; this.from = from; this.to = to; } public Message() { } public Message(String docType) { this.docType = docType; } public Message(Distributable messageBean, String docType) { this.messageBean = messageBean; this.docType = docType; } private static final long serialVersionUID = -3005565413488441986L; private Distributable messageBean; private Long timeStamp; private String docType; private Integer times; private String from; priv...
Mr_Qi 发布于 6天前 阅读 1097 评论 2

介绍一个 Java 程序运行时版本信息工具

## 1. 介绍 作为应用程序尤其是框架和库的作者,常常需要了解运行程序的版本: 1. 作为 bug 报告的关键信息 2. 在应用启动的时候打印版本带来更加清晰的信息展示 例如下面是一个[ActFramework](https://www.oschina.net/p/actframework)应用项目启动时的 Banner: ![ACT App Banner](https://static.oschina.net/uploads/img/201709/12113842_TLP5.png "App 启动 Banner 展示") 针对这样的需求,我开发了一个[小小的工具](http://git.oschina.net/osglworks/java-osgl-bootstrap) (9K jar 包) 来帮助大家轻松方便地管理和访问应用/库/框架在运行时的版本信息. ## 2. 安装 该工具已经发行到了 maven 中央库, 可以在你的 pom 文件中加入一下依赖: ``` org.osgl osgl-bootstrap ${osgl-bootstrap.version} ``` ## 3. 准备应用/库的版本信息 作为应用/库的开发者,你需要将软件的版本信息按照下面的方式加入到项目当中: 假设你的产品的包名是 `org.mrcool.swissknife`,你需要将一个名为 `.version` 的文件存放在 `src/resources/org/mrcool/swissknife` 目录里, 文件的内容大致如下: ``` # artifact is optional, if not provided the package name will be used artifact= # v...
罗格林 发布于 1周前 阅读 742 点赞 5

Spring Boot 系列 - WebSocket 简单使用

在实现消息推送的项目中往往需要WebSocket,以下简单讲解在Spring boot 中使用 WebSocket。
神奇Sam 发布于 6天前 阅读 684

73款阿里巴巴利发国际官方网详解!

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

Android RadioButton设置选中时文字和背景颜色同时改变

http://blog.csdn.net/liuwan1992/article/details/52688408
yanglingui 发布于 53分钟前 阅读 14

Ubuntu使用root用户+安装mysql5.07+基础配置

上一章讲到破解root权限,个人是不建议使用root用户的,毕竟权限越大责任越大。不过有些朋友还是有需要的,下面讲讲。   破解root权限:     1)sudo passwd root //设置root用户的密码     2)把/etc/ssh/sshd_config文件下的   PermitRootLogin without-password修改为permitRootLogin yes //这是允于root用户登录     3)重启系统   经过上面的步骤我们就可以用root用户登录了,重新登录后可以看到我们是root用户了 我们可以使用su命令回到自己创建的用户   下面我们来安装mysql   sudo apt install mysql-server   然后我们来到这里,会问我们是否要继续安装,之前安装过ssh,我们都知道在这里输入Y就行了 ![输入图片说明](https://static.oschina.net/uploads/img/201709/20143641_5lfN.png "在这里输入图片标题") 接着要我们输入root的密码,然后再输入一次确认   注意:这里的root密码是mysql的root用户,而不是我们之前设置的root用户密码。这里我们建议自己输入密码,而不是直接按确定,不然mysql会随机生成密码,到时候我们要去配置文件了找,比较麻烦 ![输入图片说明](https://static.oschina.net/uploads/img/201709/20143656_r5Qm...
ali安东尼 发布于 53分钟前 阅读 13

作为一个精神病人是一种怎样的体验?

《天才在左,疯子在右》读后感
娇娇jojojo 发布于 54分钟前 阅读 14

深入理解javascript原型和闭包(10)——this

接着上一节讲的话,应该轮到“执行上下文栈”了,但是这里不得不插入一节,把this说一下。因为this很重要,js的面试题如果不出几个与this有关的,那出题者都不合格。 其实,this的取值,分四种情况。我们来挨个看一下。 在此再强调一遍一个非常重要的知识点:在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了。因为this的取值是执行上下文环境的一部分,每次调用函数,都会产生一个新的执行上下文环境。 情况1:构造函数 所谓构造函数就是用来new对象的函数。其实严格来说,所有的函数都可以new一个对象,但是有些函数的定义是为了new一个对象,而有些函数则不是。另外注意,构造函数的函数名第一个字母大写(规则约定)。例如:Object、Array、Function等。 function Foo(){ this.name='username'; this.year=1999; console.log(this); //Foo {name:"username", year:1999} } var f1 = new Foo(); console.log(f1.name); //username console.log(f1.year); //1999 以上代码中,如果函数作为构造函数用,那么其中的this就代表它即将new出来的对象。 注意,以上仅限new Foo()的情况,即Foo函数作为构造函数的情况。如果直接调用Foo...
Vincent-Duan 发布于 56分钟前 阅读 2

linux系统history显示操作时间和用户

在默认情况下,输入history只会限制历史使用指令   为了更直观的看到指令执行的时间和用户 用root登录    cd ~  在 .bashrc文件中添加如下行 HISTTIMEFORMAT="%Y-%m-%d:%H-%M-%S:`whoami`:  "  export HISTTIMEFORMAT 然后执行 source  .bashrc  
IT-Mamba 发布于 58分钟前 阅读 3

Linux tcpdump命令详解

今天尝试追踪Agent周期上报情况,还是非常方便   tcpdump tcp port 6031 and host 10.*.*.*     http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html
郭恩洲_OSC博客 发布于 1小时前 阅读 2

Java三大主流框架概述及初学者应掌握的技术

Struts、Hibernate和Spring是我们Java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案。但你是否知道,这些知名框架最初是怎样产生的? 我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。但是这种结构仍然存在问题:如JSP页面中需要使用<%%>符号嵌入很多的Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等。 Struts 为了解决这些问题,出现了Struts框架,它是一个完美的MVC实现,它有一个中央控制类(一个Servlet),针对不同的业务,我们需要一个Action类负责页面跳转和后台逻辑运算,一个或几个JSP页面负责数据的输入和输出显示,还有一个Form类负责传递Action和JSP中间的数据。JSP中可以使用Struts框架提供的一组标签,就像使用HTML标签一样简单,但是可以完成非常复杂的逻辑。从此JSP页面中不需要出现一行<%%>包围的Java代码了。 可是所有的运算逻辑都放在Struts的Action里将使得Action类复用度低和逻辑混乱,所以通常人们会把整个Web...
小欣妹妹 发布于 1小时前 阅读 5

ActivityMQ消息持久化到HANA数据库

项目中使用activityMQ需要持久化到Hana,过程中遇到些小坑,此处做个记录。
jsspring 发布于 1小时前 阅读 2

java初学习(1)

java中的数据类型 Java语言是一种强类型语言。通俗点就是,在java中存储的数据都是有类型的,而且必须在编译的时候就确定其类型。java中有两种数据类型。 float height=175.2f; char level='A'; public class HelloWorld{ public static void main(String[] args){ String name="爱慕课"; char sex='男'; int num=18; double price=120.5; boolean isOk=true; System.out.println(name); System.out.println(sex); System.out.println(num); System.out.println(price); System.out.println(isOk); } } 第一类:逻辑型boolean boolean类型数据只允许取值true或false,不可以0或非0的整数替代true和false,这点和c语言不同 第二类:文本型char 字符常量为用单引号括起来的单个字符,例如: char eChar = 'a'; char cChar = '中'; java字符采用Unicode编码,每个字符串占两个字节,因而可用十六进制编码形式表示 例如: char c1='\u0061'; 注:Unicode是全球语言统一编码 java语言中还允许使用转义字符'\'来将其后的字符转变为其他的含义,例如: char c2='\n'; //'\n'代表换行符 第三类:整数型(b...
安吉拉 发布于 1小时前 阅读 3

Apache Spark 2.2.0 中文文档 - 快速入门 | ApacheCN

本教程提供了如何使用 Spark 的快速入门介绍。首先通过运行 Spark 交互式的 shell(在 Python 或 Scala 中)来介绍 API, 然后展示如何使用 Java , Scala 和 Python 来编写应用程序。 为了继续阅读本指南, 首先从 Spark 官网 下载 Spark 的发行包。因为我们将不使用 HDFS, 所以你可以下载一个任何 Hadoop 版本的软件包。
开拓者-2017 发布于 1小时前 阅读 1

Micropython实例之TPYBoard来电显示功能演示

  一、TPYBoardV702介绍   TPYBoardV702是目前市面上唯一支持通信通信功能的MicroPython开发板:支持Python3.0及以上版本直接运行。支持GPS+北斗双模通信、GPRS通信、短信功能、电话功能;板载温湿度、光敏、三轴加速度传感器、蜂鸣器、LCD5110显示屏。免费提供通信测试服务平台。实物如下图:   视频演示:   http://v.youku.com/v_show/id_XMjQ4MjgyMjI2OA==.html?spm=a2h3j.8428770.3416059.1   二、利用TPYBoardV702完成接收提示来电,并在显示屏上显示来电号码及来电人员称谓   1、具体要求   利用TPYBoardV702完成接收提示来电,并在显示屏上显示来电号码及来电人员称谓   2、所需器件   TPYBoardV702开发板一块   5110显示屏一块   Gsm手机卡一张   TPYBoardV702开发板板载GSM通信功能,无需外接   3、板载通信功能及使用介绍   V702的开发板的整体整体亮点置一就是能板载通信功能,只要在开发板的卡槽上插上一张可以使用的手机卡(不支持电信),即可使用该功能。   开发板板载的通信功能包括了电话,短信,GPRS等功能,在这个实验里面我们只使用电话这个功能。   开发板板载的通信功能已经设计的很完善,在接到来电的时候,会主动...
bodasisiter 发布于 1小时前 阅读 2

Animation的XML文件定义

``` android:duration="500" android:fillAfter="true" android:fillBefore="false" android:fromXScale="1" android:fromYScale="1" android:interpolator="@android:anim/accelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:repeatCount="infinite" android:repeatMode="restart" android:startOffset="100" android:toXScale="0" android:toYScale="0" /> android:fromYDelta="300" android:interpolator="@android:anim/accelerate_interpolator" android:toYDelta="0" /> ```
huiyun-yoyo 发布于 1小时前 阅读 2

Android 6.0 运行时权限处理

随着Android 6.0 7.0 我们开发者所要应对的主要就是新版本SDK带来的一些变化,其中之一就是权限处理。那么在6.0及以上版本我们的危险权限都需要在运行的时候去申请,之前都是在清单文件中配置即可,现在就不行了需要加代码申请。 **权限分类** 新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是Normal Permissions,这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如访问网络等;另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard、打电话等等。 看几个Normal Permissions: ``` ACCESS_LOCATION_EXTRA_COMMANDS ACCESS_NETWORK_STATE ACCESS_NOTIFICATION_POLICY ACCESS_WIFI_STATE BLUETOOTH BLUETOOTH_ADMIN BROADCAST_STICKY CHANGE_NETWORK_STATE CHANGE_WIFI_MULTICAST_STATE CHANGE_WIFI_STATE DISABLE_KEYGUARD EXPAND_STATUS_BAR GET_PACKAGE_SIZE INSTALL_SHORTCUT INTERNET KILL_BACKGROUND_PROCESSES MODIFY_AUDIO_SETTINGS NFC READ_SYNC_SETTINGS READ_SYNC_STATS RECEIVE_BOOT_COMPLETED REORDER_TASKS REQUEST_INSTALL_PACKAGES SET_ALARM SET_TIME_ZONE SET_WALLPAPER SET_WALLPAPER_...
天-之-骄-子 发布于 1小时前 阅读 1

Android7.1.1系统设置默认值大全

1,是否有默认值 在寻找一个开关的默认值时,首先要明白一点,该开关是否存在默认值,以及该开关状态是否有状态保存(一般状态存储在settings的db中)。 判断条件: 在reboot(重启)之后开关状态仍旧保存或者是在reset(恢复出厂设置)之后开关状态恢复到默认的,才能找到默认值。 在reboot之后开关状态仍旧保存的,表示状态存储在了db中。 在reset之后开关状态恢复默认的,表示状态有一个默认值。 比如像wiif开关,蓝牙开关,gps开关等,都有默认值,并且状态值都在db中保存。 至于像WiFi热点开关这种在reboot之后,状态没有保存,那么你就别白费力气来找他的默认值或者状态存储值了 2,修改默认值 大部分的开关状态都存储在了SettingProvider的db中,与状态值相关的有三个文件 /frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java:该文件中对状态值进行存储 /frameworks/base/packages/SettingsProvider/res/values/defaults.xml:定义了开关状态的默认值 /frameworks/base/core/java/android/provider/Settings.java:定义了各开关状态默认值存储时对应的key 接下里看都有什么默认值 value 含义 key def_dim_screen...
恒源祥 发布于 1小时前 阅读 2

正则表达式30分钟入门教程

deerchao的blog Be and aware of who you are. 正则表达式30分钟入门教程 目录 本文目标 如何使用本教程 正则表达式到底是什么东西? 入门 测试正则表达式 元字符 字符转义 重复 字符类 分枝条件 反义 分组 后向引用 零宽断言 负向零宽断言 注释 贪婪与懒惰 处理选项 平衡组/递归匹配 还有些什么东西没提到 联系作者 网上的资源及本文参考文献 更新纪录 本文目标 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。 如何使用本教程 最重要的是——请给我30分钟,如果你没有使用正则表达式的经验,请不要试图在30秒内入门——除非你是超人 :) 别被下面那些复杂的表达式吓倒,只要跟着我一步一步来,你会发现正则表达式其实并没有你想像中的那么困难。当然,如果你看完了这篇教程之后,发现自己明白了很多,却又几乎什么都记不得,那也是很正常的——我认为,没接触过正则表达式的人在看完这篇教程后,能把提到过的语法记住80%以上的可能性为零。这里只是让你明白基本的原理,以后你还需要多练习,多使用,才能熟练掌握正则表达式。 除了作为入门教程之外,本文还试图成为可以在日常工作中使用的正则表达式语法参考手册。就作...
光斑 发布于 1小时前 阅读 1

iOS 11正式版终于来了!强力助攻小程序

今日凌晨1时,果粉们翘首以盼好久的iOS 11正式版系统终于发布更新了,更新之后的系统不论是界面还是功能上都有了很多心突破,更令人惊喜的是,苹果本次更新的 iOS 11系统,居然对小程序生态有着不可忽视的推动性! 1、原生相机支持扫码功能,简直为小程序而生!
小程序社区 发布于 2小时前 阅读 61 评论 2

c++数组析构(delete delete[])

对于基本数据类型 例如char tmp = new char[100]; delete tmp 和 delete[] tmp 效果一样(在vc++和g++下测试) 所以基本类型new的数组可以使用std::auto_ptr管理 注意:不是基本数据类型的数组,不能用delete,必须要用delete[]
刘梦岩 发布于 2小时前 阅读 2

发布与逸出

看到《Java并发编程实战》的3.2章节,对构造函数的this逸出理解不是很透彻,下面这篇文章很好的解答了。 为什么说 "构造函数中this引用逸出的问题" 在构造函数中, this引用逸出, 则此时 可能对象实例还没有完全初始化. 比如此对象实例有final int i=47; 因为i还没有初始化, 外部线程去 查看i, 可能会看到i==null的结果. 这就不对了 说仔细一点, 初始化一个对象, 比如代码new TestClass(), 完成了以下操作 1).为TestClass对象实例分配内存空间;this指针指向此空间; 2).调用TestClass的初始化函数;在TestClass的初始化函数中; 2.1).首先调用TestClass的父类的初始化函数,这里是一个递归调用父类初始化函数的过程; 2.2).执行TestClass自身的初始化逻辑,如给对象实例成员赋初值.   所以说, 在1) 和 2.2) 之间是有 "空窗期"的, 如果这是this被外部线程拿到, 则可以看到 对象实例 未初始化的实例成员. 比如上面说的final int i == null的现象. 上面这些可以参考下面的字节码: classSup{}   classSubextendsSup{     finalint i;     Sub(){i=1;}     void test(){newSub();} }   字节码为: classSup{     Sup();     0  aload_0 [this]     1  invok...
EQShen 发布于 2小时前 阅读 2

django注解

类似JJava中spring的注解 django中也有很多有用的注解 并且很方便
james_lz 发布于 2小时前 阅读 2

Web系统大规模并发——电商秒杀与抢购

一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常状态。我们现在一起来讨论下,优化的思路和方法哈。 1. 请求接口的合理设计 一个秒杀或者抢购页面,通常分为2个部分,一个是静态的HTML等内容,另一个就是参与秒杀的Web后台请求接口。 通常静态HTML等内容,是通过CDN的部署,一般压力不大,核心瓶颈实际上在后台请求接口上。这个后端接口,必须能够支持高并发请求,同时,非常重要的一点,必须尽可能“快”,在最短的时间里返回用户的请求结果。为了实现尽可能快这一点,接口的后端存储使用内存级别的操作会更好一点。仍然直接面向MySQL之类的存储是不合适的,如果有这种复杂业务的需求,都建议采用异步写入。 当然,也有一些秒杀和抢购采用“滞后反馈”,就是说秒杀当下不知道结果,一段时间后才可以从页面中看到用户是否秒杀成功。但是,这种属于“偷懒”行为,同时给用户的体验也不好,容易被用户认为是“暗箱操作”。 2. 高并发的挑战:一定要“快” 我们通常衡量一个Web系统的吞吐率的指标是QPS(Query Per Second,每秒处理请...
利发国际官方网-首席码农 发布于 2小时前 阅读 2

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对象为节点的虚拟...
染陌同学 发布于 2天前 阅读 946 点赞 1

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

微服务治理的特点,网络延迟、分布式事务、异步消息。因此我们针对微服务的梳理也是从这几个方面入手。微服务后依赖关系从代码依赖变成了通讯依赖,我们梳理微服务系统的关键点,就是找出通讯依赖,确定是强依赖,还是弱依赖。
新栋BOOK 发布于 2天前 阅读 1573 评论 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) || ...
王孟君 发布于 3天前 阅读 1581 评论 7 点赞 4

浅析开源数据库MySQL架构

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

java多线程——锁

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

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

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

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 发布于 1周前 阅读 2111 评论 7 点赞 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(黄色箭...
为了美好的明天 发布于 1周前 阅读 2016 点赞 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 发布于 2周前 阅读 1449 点赞 1

数据异构的武器-BINLOG+MQ

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

java多线程——volatile

java多线程系列第三篇,深入理解volatile的原理以及应用
wier 发布于 2周前 阅读 2863 评论 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...
染陌同学 发布于 2周前 阅读 2446 评论 4 点赞 5

HashMap的实现原理浅析

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

Redis实现参数的集中式管理

系列文章 Zookeeper实现参数的集中式管理 JMS实现参数的集中式管理 Redis实现参数的集中式管理 前言 上一篇文件JMS实现参数的集中式管理中使用JMS作为中间层,利用的JMS的发布订阅功能实现了对参数的集中式管理;同样分布式缓存Redis也提供了类似的发布订阅功能,并且Redis本身提供了缓存和持久化的功能,本文将介绍通过Redis实现简单的参数集中式管理。 Maven引入 Spring相关的jar引入参考上一篇文章 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.4.0</version> </dependency> 目标 1.可以同时配置监听多个节点如/app1,/app2; 2.希望只需要配置如/app1,就能够监听其子节点如/app1/modual1以及子节点的子节点如/app1/modual1/xxx/…; 3.服务器启动能获取当前指定父节点下的所有子节点数据; 4.在添加节点或者在更新节点数据的时候能够动态通知,这样代码中就能够实时获取最新的数据; 5.spring配置中可以从Zookeeper中读取参数进行初始化。 虽然在实现的方式上有点区别,但是最终达成的目标是一致的,同样列出了这5条目标 实现 RedisWatcher主要用来和Redis进行连接,然后对监听的节点进行初始化,模糊订阅需...
ksfzhaohui 发布于 3周前 阅读 3084 点赞 2

基于Redis实现分布式应用限流

限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务。
冷冷gg 发布于 3周前 阅读 4315 评论 9 点赞 9

spring boot / cloud (十五) 分布式调度中心进阶

# spring boot / cloud (十五) 分布式调度中心进阶 在[](https://my.oschina.net/wangkang80/blog/983208)这篇文章中介绍了如何在spring boot项目中集成quartz. 今天这篇文章则会进一步跟大家讨论一下设计和搭建**分布式调度中心**所需要关注的事情. 下面先看一下,总体的逻辑架构图: ## 分布式调度-逻辑架构示意 ![分布式调度-逻辑架构示意](https://static.oschina.net/uploads/img/201708/29201705_LnBY.png "分布式调度-逻辑架构示意") ## 架构设计 总体思路是,将**调度**和**执行**两个概念分离开来,形成**调度中心**和**执行节点**两个模块: ### **调度中心** 是一个公共的平台,负责所有任务的调度,以及任务的管理,不涉及任何业务逻辑,从上图可以看到,它主要包括如下模块: - **核心调度器quartz** : 调度中心的核心,按照jobDetail和trigger的设定发起作业调度,并且提供底层的管理api - **管理功能** : 可通过restful和web页面的方式动态的管理作业,触发器的CURD操作,并且实时生效,而且还可以记录调度日志,以及可以以图表,表格,等各种可视化的方式展现调度中心的各个维度的指标信息 - **RmsJob和RmsJobDisallowConcurrent** : 基于http远程调用(RMS)的作业和禁止并发执...
wangkang80 发布于 3周前 阅读 3510 评论 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周前 阅读 3440 评论 31 点赞 1
顶部
利发国际官方网