大多wwWse94se多数的来电转接已经停止服务,更se94seCcOM辛或已经风闭了吗

揽胜运动版 2017款 3.0 V6 SC SE
基本参数配置
生产厂家:路虎(进口)
发动机:3.0T 340马力 V6
国体结构:SUV
级别名称:中大型SUV
变速箱:8挡手自一体
工信部综合油耗:10.7
长×宽×高(mm):×1780
驱动类型:前置四驱
整车质保:三年或10万公里
提醒:过低的报价在实际交易中可能存在附加条件
&&&&近日,本店内有揽胜运动版销售,颜色可选,目前购车部分车型可优惠25万元,感兴趣的朋友可以到店咨询购买,详情见下表:
揽胜运动版车型最新价格变化报价
厂商指导价(万元)
优惠金额(万元)
裸车价(万元)
参考总价(万元)
揽胜运动版 2018款 5.0 V8 SVR
店内上保险
需购买精品
揽胜运动版 2018款 3.0 V6 锋尚创世版 DYNAMIC
店内上保险
需购买精品
揽胜运动版 2018款 3.0 V6 HSE DYNAMIC
店内上保险
需购买精品
揽胜运动版 2017款 5.0 V8 SVR
店内上保险
需购买精品
揽胜运动版 2017款 3.0 V6 锋尚创世版 DYNAMIC
店内上保险
需购买精品
揽胜运动版 2017款 3.0 V6 SC SE
店内上保险
需购买精品
揽胜运动版 2017款 3.0 V6 SC HSE DYNAMIC
店内上保险
需购买精品
揽胜运动版 2017款 3.0 V6 SC HSE
店内上保险
需购买精品
日行情 车辆价格随时变动,敬请关注当地市场
以上为车型资料信息,本店提供了多项增值服务,感兴趣的朋友欢迎来电咨询。
免责声明上述文章内容由经销商自行发布,其真实性、准确性及合法性由经销商负责,汽车之家不提供任何保证,亦不承担任何法律责任。
内容来源于:
有意向购买 揽胜运动版 2017款 3.0 V6 SC SE?想获取底价?
请填写如下信息给商家:(信息保密,不会对外公开)
*上牌城市:
*您的姓名:
*手机号码:
提交询价即可获得经销商回复的车型底价
*手机验证:
请填写验证码
请填写验证码
申请置换:
置换旧车可享更低新车优惠价
请填写验证码
请填写您的姓名
对以上车型感兴趣?想预约试驾?请填写如下信息给商家:(信息保密,不会对外公开)
*您的城市:
*您的姓名:
*手机号码:
请填写您的姓名
主营品牌:
捷豹,路虎(进口),奇瑞捷豹路虎
营业执照:
资质认证:
咨询电话:
售后服务:
店面地址:
捷豹.路虎金牌授权中心(京承高速11号昌金路出口右转200米)
该车型其他经销商降价信息
降价信息推荐广告
请输入图形验证码404 Not Found
404 Not Found
The requested URL was not found on this server.
您要找的内容已被删除jsonp实现的原理主要是利用src属性可以去加载跨域的资源,例如script、img。 动态的创建script标签,加载跨域资源 下面看一个简单的例子: 前端:(本页面的端口号为63342) ``` Title //去加载跨域资源 ``` 跨域资源站点后端(我这里使用nodejs写的,很简单的一个server): ``` const express=require('express'); const fs=require('fs'); const expressStatic=require('express-static') var server=express(); server.get('/js/index.js',function (req,res) { fs.readFile('./js/index.js',function (err,data) { if(err){ res.send('数据读取失败') }else { res.send(data); } res.end(); }) }) server.listen(8080); ``` 那么我们可以在前端页面看到结果,如图 ![输入图片说明](https://static.oschina.net/uploads/img/43621_9shC.jpg "在这里输入图片标题") 二、用xhr去请求数据会怎么样呢: 前端: ``` Title 名字: 年龄: ``` 后端: ``` const express=require('express'); const fs=require('fs'); // const expressStatic=require('express-static'); var server=express(); server.get('/json/test.json',function (req,res) { var obj=req.quer...
2014年,GoogLeNet和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLeNet获得了第一名、VGG获得了第二名,这两类模型结构的共同特点是层次更深了。VGG继承了LeNet以及AlexNet的一些框架结构(详见
大话CNN经典模型:VGGNet),而GoogLeNet则做了更加大胆的网络结构尝试,虽然深度只有22层,但大小却比AlexNet和VGG小很多,GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的12倍,VGGNet参数又是AlexNet的3倍,因此在内存或计算资源有限时,GoogleNet是比较好的选择;从模型结果来看,GoogLeNet的性能却更加优越。 小知识:GoogLeNet是谷歌(Google)研究出来的深度网络结构,为什么不叫“GoogleNet”,而叫“GoogLeNet”,据说是为了向“LeNet”致敬,因此取名为“GoogLeNet” 那么,GoogLeNet是如何进一步提升性能的呢? 一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,深度指网络层次数量、宽度指神经元数量。但这种方式存在以下问题: (1)参数太多,如果训练数据集有限,很容易产生过拟合; (2)网络越大、参数越多,计算复杂度越大,难以应用; (3)网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型。 所以,有人调侃...
时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
分布式Session的实现有很多,从简单到复杂各种各样,但是要做到分布式Session跟原生本地Session一致的API,对开发人员几乎是0门槛是不容易的。SpringSession 提供了现成的分布式Session功能,本文就是介绍SpringSession的实现细节
在基于TensorFlow做fine-tuning或者迁移学习时,面临的一个问题就是如何从已有的模型中,将其模型参数拷贝到自定义的新模型中。 本文讲述如下两个问题: 1、如何从ckpt模型文件中获取权值的名字? 2、如何将权值拷贝到新的变量中?
具体见代码注释: import tensorflow as tf
#从ckpt文件中获取variable变量的名字
def get_trainable_variables_name_from_ckpt(meta_graph_path,ckpt_path):
#定义一个新的graph
graph = tf.Graph()
#将其设置为默认图:
with graph.as_default():
with tf.Session() as session:
#加载计算图
saver = tf.train.import_meta_graph(meta_graph_path)
#加载模型到session中关联的graph中,即将模型文件中的计算图加载到这里的graph中
saver.restore(session,ckpt_path)
v_names = []
#获取session所关联的图中可被训练的variable
#使用tf.trainable_variables()获取variable时,只有在该函数前面定义的variable才会被获取到
#在其后面定义不会被获取到,
for v in tf.trainable_variables():
本文转自个人微信公众号,主要讲述如下三个问题: 如何将原始图片数据与label转化为TFRecords格式的数据? 如何利用TFRecordDataset读取TFRecords格式的数据? 如何从TFRecordDataset中获取数据进行NN训练?
整体思路为: jpg----&train.tfrecords-----&dataset------&NN 【一】TFReocrd综述 【二】生成TFRecords文件 def image2tfrecord(image_list,label_list):
len2 = len(image_list)
print("len=",len2)
writer = tf.python_io.TFRecordWriter("train.tfrecords")
for i in range(len2):
#读取图片并解码
image = Image.open(image_list[i])
image = image.resize((28,28))
#转化为原始字节
image_bytes = image.tobytes()
features = {}
#用bytes来存储image
features['image'] = tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_bytes]))
# 用int64来表达label
features['label'] = tf.train.Feature(int64_list=tf.train.Int64List(value=[int(label_list[i])]))
#将所有的feature合成feature...
1、前言 从直播在线上抓娃娃,不断变化的是玩法的创新,始终不变的是对超低延迟的苛求。实时架构是超低延迟的基石,如何在信源编码、信道编码和实时传输整个链条来构建实时架构?在实时架构的基础之上,如果通过优化采集、编码、传输、解码和渲染中的关键环节来降低延迟?本文将会介绍即构在这方面的思考与实践。 学习交流: - 即时通讯开发交流群: [推荐] - 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM》 (本文同步发布于:http://www.52im.net/thread-.html) 2、关于作者 关旭:即构科技音视频引擎核心专家,硕士毕业于南开大学数学系,先后就职于中兴通讯、腾讯等公司负责音视频相关的研发工作,在实时音视频技术上有多年积累,当前在即构科技主要负责音视频引擎核心开发。 3、相关文章 《实现延迟低于500毫秒的1080P实时音视频直播的实践分享》 《移动端实时视频直播技术实践:如何做到实时秒开、流畅不卡》 《移动端实时音视频直播技术详解(六):延迟优化》 《如何优化传输机制来实现实时音视频的超低延迟?》 《首次披露:快手是如何做到百万观众同场看直播仍能秒开且不卡顿的?》 《七牛云技术分享:使用QUIC协议实现实时视...
每个人都会有这样的感触,小的时候上学,老师讲课拖堂1分钟就会很烦躁,不喜欢的课听不进去,学不好,内心一直是一种抵触的状态。但如果换是出去玩,打游戏就会有无穷的力量,游戏一打就是一天,或者一夜。 那为什么会产生这样的结果,很多大人都会说,如果你能把玩游戏的劲的1/3用在学习上,都会大有不同,但绝大多数人都是做不到的,因为那时我们还小,不懂这个道理,不懂为什么要努力学习。 我从小就学习不好,但有一个东西我学的很好,就是计算机。 我从上小学6年级的时候就会自己安装操作系统了(win95年代,并没有ghost这种东西),而且完全是自学,后来上初中学会各种office软件的使用,因为ppt里可以做动画,让我萌生了很大的兴趣,连老师都来问我ppt怎么做,初2开始正式接触编程(qbasic),而这一切,都源于我的兴趣,正如前面那句话,如果我把1/3的努力都放在了学习上,我可能还能踏入学霸的行列。 那为什么学习自己感兴趣的东西会有无穷的力量,而学习不感兴趣的会有无穷的阻力,这个互联网上有太多的说法和文章,我也就不去列举资料了,我只想谈谈自己的看法。 在我看来学习分为几个状态 一:被迫学习 这种动力绝大多数来源于父母,在父母的高压之下完成的学习,...
历时一个多月加班奋斗,数百次修改提交,OpenCart v3.0中文社区版如期发布啦! 2018新年伊始,送给广大爱好者一份厚礼。
Hyperledger fabric Chaincode 开发详解 本文节选自电子书《Netkiller Blockchain 手札》 Netkiller Blockchain 手札 本文作者最近在找工作,有意向致电
Mr. Neo Chan, 陈景峯(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地
&& 文档始创于 版权 (C) 2018 Netkiller(Neo Chan). All rights reserved. 版权声明 转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。 微信订阅号 netkiller-ebook (微信扫描二维码) QQ: 请注明“读者” QQ群: 请注明“读者” 网站:http://www.netkiller.cn 内容摘要 这一部关于区块链开发及运维的电子书。 为什么会写区块链电子书?因为2018年是区块链年。 这本电子书是否会出版(纸质图书)? 不会,因为互联网技术更迭太快,纸质书籍的内容无法实时更新,一本书动辄百元,很快就成为垃圾,你会发现目前市面的上区块链书籍至少是一年前写的,内容已经过时,很多例子无法正确运行。所以我不会出版,电子书的内容会追逐技术发展,及时跟进软件版本的升级,做到内容最新,至少是主流。 这本电子书与其他区块链书籍有什么不同?市面上...
项目简介 在慕课网上发现了一个JavaWeb项目,内容讲的是高并发秒杀,觉得挺有意思的,就进去学习了一番。 记录在该项目中学到了什么玩意.. 该项目源码对应的gitHub地址(由观看其视频的人编写,并非视频源代码):github.com/codingXiaxw… 我结合其资料和观看视频的时候整理出从该项目学到了什么... 项目Dao层 日志记录工具:
&!--1.日志 java日志有:slf4j,log4j,logback,common-logging
slf4j:是规范/接口
日志实现:log4j,logback,common-logging
使用:slf4j+logback
Mybatis之前没注意到的配置属性: 使用jdbc的getGeneratekeys获取自增主键值,这个属性还是挺有用的。
&?xml version="1.0" encoding="UTF-8" ?&
&!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"&
&configuration&
&!--配置全局属性--&
&settings&
&!--使用jdbc的getGeneratekeys获取自增主键值--&
&setting name="useGeneratedKeys" value="true"/&
&!--使用列别名替换列名&&默认值为true
select name as title(实体...
  企业的发展方向取决于创始人,但企业能否跑得快却取决于管理者。对于中层管理者而言,上有高层领导(头部力量),下有基层团队(腿部力量),你就是企业的“腰部力量”。可想而知,一家企业如果腰不好,头和脚再好也没用。然而,许多企业都存在“腰部力量薄弱”或称为“腰虚”现象。为了解决此类问题,我想为所有中层管理者们提供“八大绝招”,希望这八招可以帮助大家,让企业从此告别腰虚。   本文所提到的“高层”泛指创始人、CXO 等职位,“中层”泛指总监、高级经理等职位,“基层”泛指经理、组长等职位。 第一招:自我管理,以身作则   管理的第一步是“自我管理”,换言之,管理好你自己。你必须是一位称职的管理者,你必须像管理者。你的一言一行,团队成员都看在眼里;你的一举一动,团队成员都高度重视。你需要具备高尚的品德修养,你必须拥有良好的言行举止。得到高层领导信任并将基层团队带好的第一步便是如此,简单而自然。   如果你想要求大家上班不要迟到,那么你必须首先做到自己不要迟到;如果你想要求大家工作高效,那么你必须首先做到自己工作高效。总之,你希望团队做到怎样,你就应该首先做到怎样。如果你是一个追求完美并做事极致的人,那...
Spark,集群
![](https://upload-images.jianshu.io/upload_images/22f.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) & 本文整理自今日头条数据库中间件/分布式数据库负责人吴镝([知乎 ID:吴镝](http://www.zhihu.com/people/foxmailed))在TiDB DevCon2018 上的分享内容。 TiDB 主要应用在今日头条核心 OLTP 系统 - 对象存储系统中,存储其中一部分元数据,支持头条图片和视频相关业务,比如抖音等。 如今(数据截至发文),TiDB 支撑着今日头条 OLTP 系统里数据流量最大、QPS 最高的场景:集群容量约几十 T,日常 QPS 峰值会达到几十万。 ## 为什么我们需要用 TiDB 今日头条内部有一些业务数据量非常大,之前用的 MySQL 的单机盘是大概 2.8T 的 SSD 盘。我们做对象存储。因为头条不但做视频,还做图片,这些视频和图片当中基本上都是用我们自研的 S3 存储系统,这种存储系统需要一个元数据,比如一个图片存下来,它存在 S3 系统的哪个机器、哪个文件、哪个偏移里面的数据,还有比如一个大的视频,S3 会把它切成很多小的视频片段,每一个分片的位置,都会存在元数据里面。 用 TiDB 之前,元数据是存在 MySQL 里的一个 2.8TB 的盘,因为增长的特别...
我们昨天说到了ActiveDataProvider、SqlDataProvider和ArrayDataProvider,从描述中不难发现这几个货的行为都差不多,因此yii2的开发者们为它们设置了一个BaseDataProvider的父类,而BaseDataProvider又实现了一个叫做DataProviderInterface的接口。 在PHP中,实现接口的类必须完成接口中声明的所有函数,当我们要看BaseDataProvider中有哪些可用方法的时候,首先要关注DataProviderInterface接口。 **DataProviderInterface** - prepare - getCount - getTotalCount - getModels - getKeys - getSort - getPagination 以上是DataProviderInterface为我们提供的函数声明,也就是说BaseDataProvider类实现了这些函数,而我们的DataProvider三兄弟也因为继承了BaseDataProvider自然拥有了这些方法。 因此昨天的文章『[小谈yii2中3个数据提供者及与GridView的搭配使用](http://nai8.me/article/detail.html?id=346)』中,我们大胆的使用了getCount、getTotalCount、getModels等。 接下来我们先说在BaseDataProvider中来自接口DataProviderInterface的方法。 # prepare 数据准备,这是一个功能性的函数,它负责组装DataProvider中的_models和_keys属性,我们来大体看一下这个函...
Java提供了多种并行方式,用哪个是适合的是很多小伙伴的疑问。这篇文章做了不错的分析。译自 https://blog.takipi.com/forkjoin-framework-vs-parallel-streams-vs-executorservice-the-ultimate-benchmark/
摘要: 原创出处 http://www.iocoder.cn/TCC-Transaction/http-sample/ 「芋道源码」欢迎转载,保留摘要,谢谢! **本文主要基于 TCC-Transaction 1.2.3.3 正式版** - [1. 概述](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [2. 实体结构](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [2.1 商城服务](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [2.2 资金服务](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [2.3 红包服务](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [3. 服务调用](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [4. 下单支付流程](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [4.1 Try 阶段](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [4.2 Confirm / Cancel 阶段](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [4.2.1 Confirm](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [4.2.2 Cancel](http://www.iocoder.cn/TCC-Transaction/http-sample/) - [666. 彩蛋](http://www.iocoder.cn/TCC-Transaction/http-sample/) ------- !...
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。
项目使用到了一些第三方平台的登录、分享、支付功能,包括了微信、微博、QQ平台登录分享和支付宝、微信平台的支付,使用的是原生的接入配置集成的,功能上基本上对照着SDK的开发文档就能够成功的集成了。但是问题也后面也渐渐的暴露出来了,第三方平台的登录、分享、支付功能不同平台的的SDK实现方式还是有很大的差别的,包括了输入的参数以及回调方式都有差别很大,如果只是简单的按照文档集成,那么一定会遇到代码调用结构很乱,回调杂乱不统一的问题,更为严重的是,后面如果添加删除一个第三发平台,那么修改变得很困难和难以维护,这违反了软件开发中的开闭原则,所以考虑到了把这部分代码做一个重构。
Deployment管理Pods和ReplicaSets,提供声明式更新。和老的ReplicationController(命令式管理)对应,发展趋势是取代老的,所以后面也不会起文章单独讨论ReplicationController了。 但由Deployment-controller管理的Pods和ReplicaSets最好自始至终都由Deployment-controller管理,最好不要手动去管理,以免发生冲突。 创建Deployment 如下一个Deployment的配置(nginx-deployment.yaml),创建一个ReplicaSet包含3个nginx Pods apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
app: nginx
replicas: 3
matchLabels:
app: nginx
app: nginx
containers:
- name: nginx
image: nginx:1.7.9
- containerPort: 80 apiVersion这里为apps/v1,如果是1.9之前的版本为extensions/v1beta1 replicas:3 起3个replicated Pods selector指明哪个pod被管理,这里我们指定了label(app:nginx) template: spec 指明了运行一个容器nginx(以nginx:1.7.9为镜像) 开放80端口给container,以使container之间...
射频识别课程作业,大牛姜小奇老师
在git版本控制中碰到合并代码时把之前的功能模块丢失 这时就需要回退就版本把它找回来。
Java 使用 jython-standalone 解析 python 使用 pickle序列化后的数据
初学dubbo的源码,只做尝试性的去学习,做为自己学习的一个记录,各位看官如果觉得写的有错误或理解的不对,请在留言区告诉我,互相学习。本人能力有限,有大神进入 时请指点。 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合),我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配置就能够实现分布式服务调用,也就是说服务提供方(Provider)发布的服务可以天然就是集群服务。 Dubbo的产生背景、最初的需求、架构设计 等可以详细看官方的文档:http://dubbo.io/User+Guide-zh.htm
在看代码中觉得dubbo使用的主要技术如下: 代理(Proxy:javassist等) 反射(Invoke) 协议(Protocol:DubboProtocl等) 序列化(Hession等) NIO(netty,mina) SPI(java spi) 装饰器模式(wrapper) 观察者模式(订阅和监听) spring自定义标签(容器启动时bean的解析)
先去了解一下以上的技术会对看源码有很大的帮助
后面的代码中会经常性的出现上面这些技术,附上一张 官方的...
时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
本文首发于个人微信公众号《andyqian》,期待你的关注! 前言
今天我们一起来做个简单有趣的实验。熟悉Java的童鞋,对ScheduledExecutorService 类应该不陌生。不记得的童鞋,先回忆下。 实验一 我们先看下下面这段简单的代码。如下: public class ExecutoryServiceTest {
private static ScheduledExecutorService executorService = Executors.newScheduledThreadPool(10);
public static void main(String[] args){
executorService.scheduleAtFixedRate(new Runnable() {
public void run() {
int[] array
= new int[1];
System.out.println("&hello world&");
System.out.println(array[1]);
}},0,2, TimeUnit.SECONDS);
} 够简单了吧。意思我就不再阐述了。看完别急,我们先回答下面这个问题。 问题一: 请问:上面一共打印了多少个&hello world&。 实验二
看到此处的童...
18.1 集群介绍 18.2 keepalived介绍 18.3/18.4/18.5 用keepalived配置高可用集群
一、 权限管理 1.1 什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。 权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。
1.2 用户身份认证 1.2.1 概念 身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。
1.2.2 用户名密码身份认证流程
1.2.3 关键对象
上边的流程图中需要理解以下关键对象:
Subject:主体 访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体;
Principal:身份信息 是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但是必须有一个主身份(PrimaryPrincipal)。
& 通过之前的[《消息驱动的微服务(入门)》](http://blog.didispace.com/spring-cloud-starter-dalston-7-1/)一文,相信很多朋友已经对Spring Cloud Stream有了一个初步的认识。但是,对于[《消息驱动的微服务(核心概念)》](http://blog.didispace.com/spring-cloud-starter-dalston-7-2/)一文中提到的一些核心概念可能还有些迷糊,下面我们将详细的来学习一下这些概念。本文我们就来学习和使用一下“消费组”这一概念。 ## 使用消费组实现消息消费的负载均衡 通常在生产环境,我们的每个服务都不会以单节点的方式运行在生产环境,当同一个服务启动多个实例的时候,这些实例都会绑定到同一个消息通道的目标主题(Topic)上。 默认情况下,当生产者发出一条消息到绑定通道上,这条消息会产生多个副本被每个消费者实例接收和处理,但是有些业务场景之下,我们希望生产者产生的消息只被其中一个实例消费,这个时候我们需要为这些消费者设置消费组来实现这样的功能,实现的方式非常简单,我们只需要在服务消费者端设置`spring.cloud.stream.bindings.input.group`属性即可,比如我们可以这样实现: - 先创建一个消费者应用`SinkReceiver`,实现了`greetings`主题上的输入通道...
你以为只要长得漂亮就有男生喜欢?你以为只要有了钱漂亮妹子就自己贴上来了?你以为学霸就能找到好工作?我告诉你吧,这些都是真的!
一,命令df 1.命令语法
-m 2.命令描述
df - report file system disk space usage
报告文件系统磁盘空间使用情况
查看文件系统的使用情况 3.命令选项
-h,根据磁盘的大小适当的显示单位(常用)
-i,是查看这个分区下面有多少个inode以及inode使用情况。*inode的多少根据磁盘分区大小有关系*
-m,以M(兆)为单位显示
***知识点*有时候会有一种情况,磁盘明明有空间有剩余,数据写不进去,用df -i查看下inode使用量有没有到百分之百,inode满了的话即使磁盘空间有空间也写不进去** 第一列是磁盘分区的名字 第二列是磁盘的总大小,单位是kb 第三列已使用多少,单位是Kb 第四列是可用还有多少剩余 第五列医用百分比,最关注的是这一列 第六列是挂载点,实际上就是系统目录,linux的磁盘是不能直接访问的,必须通过一个挂载点才能进入这个磁盘读写数据 临时的系统文件,即使写了东西进去重启后会自动消失。*/dev/shm是内存,里面写东西速度会非常快* 实例:
报告文件系统磁盘空间使用情况 df -h
根据磁盘的大小...
如果使用EMQ来承载百万级别的用户连接可以吗?官方的回复是8核心32G的配置能够承载160W台设备的链接,那就究竟性能如何呢?只有你自己试了才知道,本节就带着大家一起有调优系统配置和对EMQ进行压力测试来一探EMQ的庐山真面目
Instrument是Xcode自带的性能分析工具,这篇文章介绍其中的一个Allocations Profiler工具,找到APP中的内存性能问题,并且去优化解决这个性能问题。
import org.springframework.stereotype.C
import org.springframework.web.bind.annotation.PathV
import org.springframework.web.bind.annotation.RequestM
import org.springframework.web.bind.annotation.RequestM
import org.springframework.web.bind.annotation.RestC
import java.util.*;
* Restful风格编码,简单的来说用一个url来处理同一个资源的相关操作,如增删改查等。
@RestController
@RequestMapping("/restful/user")
public class RestfulUserController {
//将user存放在map中,模拟数据库
private static Map&Long, User& users = Collections.synchronizedMap(new HashMap&Long, User&());
* 返回所有用户
@RequestMapping(value = "", method = RequestMethod.GET)
public List&User& getUserList() {
//处理restful/user 的GET请求,用来获取用户列表
//还可以通过@RequestParam从页面中传递参数来进行条件查询或者反野信息的传递
List&User& userList = new ArrayList&User&(users.values());
printMap();
注意事项 模块内部的action、mutation、getter是注册在全局命名空间的,如果你在moduleA和moduleB里分别声明了命名相同的action或者mutation或者getter(叫some),当你使用store.commit('some'),A和B模块会同时响应。所以,如果你希望你的模块更加自包含和提高可重用性,你可以添加namespaced: true的方式,使其成为命名空间模块。当模块被注册后,它的所有getter,action,mutation都会自动根据模块注册的路径调用整个命名 两种调用的比较,一个是使用了命名空间,一个没有使用,基本的三种调用方式 使用命名空间可以简化每个模块的命名难度,包括state和各种操作,就不需要使用模块名作为区分
// mutations
this.$store.commit('movie/addMovie', 123)
this.$store.commit('addReview', 456)
// getters
console.log(this.$store.getters['movie/getMovies']())
console.log(this.$store.getters.getReviews())
console.log(
this.$store.state.movie.movie_list,
this.$store.state.review.review_list,
store import Vue from 'vue'
import Vuex from 'vu...
先上节了解完MQTT之后我们需要选择一个MQTT服务端,在MQTT官方推荐下找了找最后选择了使用EMQ来进行服务端实现,EMQ有什么优势可以在官方推荐的那么多的服务器实现中脱颖而出,本章就来和大家一起慢慢了解EMQ相关的特性
分布式Session的实现有很多,从简单到复杂各种各样,但是要做到分布式Session跟原生本地Session一致的API,对开发人员几乎是0门槛是不容易的。SpringSession 提供了现成的分布式Session功能,本文就是介绍SpringSession的实现细节
VM的类加载机制是什么?有哪些实现方式? 类加载机制: 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法去内,然后在堆区创建一个java.lang.Class对象,用来封装在方法区内的数据结构。类的加载最终是在堆区内的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。 如果你也想在IT行业拿高薪,可以参加我们的训练营课程,选择最适合自己的课程学习,技术大牛亲授,7个月后,进入名企拿高薪。我们的课程内容有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点。如果你想拿高薪的,想学习的,想就业前景好的,想跟别人竞争能取得优势的,想进阿里面试但担心面试不过的,你都可以来,群号为: 类加载有三种方式: 1)命令行启动应用时候由JVM初始化加载 2)通过Class.forName()方法动态加载 3)通过ClassLoader.loadClass()方法动态加载 JVM的常见垃圾回收算法? 1)标记-清楚算法:前后线标记处所有需要回收的对象,在标记完成后统一回收有被标记的对象。 2)复制算法:将可用内存按容量...
现在使用mybatis 的朋友非常多.不使用hibernate的请自动略过哈
摘要: 如果购买过阿里云的产品,亦或是关注着云计算的发展,那么你应该听说过阿里云官方推出的这款移动端应用 —— “阿里云 App”,它是云厂商中较早推出的移动端应用,功能较其他云厂商的移动端应用更为丰富。通过关注核心操作场景,阿里云 App 让用户能随时掌握自己云端资源的状况,接收报警后也可第一时间紧急处理止损,云端资源,掌握手中。 查看原文链接:http://click.aliyun.com/m/40218/ 如果购买过阿里云的产品,亦或是关注着云计算的发展,那么你应该听说过阿里云官方推出的这款移动端应用 —— “阿里云 App”,它是云厂商中较早推出的移动端应用,功能较其他云厂商的移动端应用更为丰富。通过关注核心操作场景,阿里云 App 让用户能随时掌握自己云端资源的状况,接收报警后也可第一时间紧急处理止损,云端资源,掌握手中。 据了解,阿里云 App 近两年来一直保持着比较快的更新节奏,不断上新的功能、丰富多样的内容,对于刚接触这款应用的使用者来说或许有些迷茫。如何快速上手使用“阿里云 App”,了解这5 大核心使用场景就够了。 1、 ECS+SSH 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,降低 IT 成本,提升运维效率,使用户更专...
使用spring cloud[Dalston.SR1]版本开发定时job时,发现job执行了两次; 下面日志里发现一个job被一个任务调度池(task-scheduler)里的两个worker(task-scheduler-1 和 task-scheduler-2)执行,很奇怪;
14:28:30.001 [task-scheduler-2] INFO
c.k.micro.cfca.scheduled.ContractSealApplyJob - ==回调job==开始==
14:28:30.002 [task-scheduler-2] INFO
c.k.micro.cfca.scheduled.ContractSealApplyJob - ==回调job==结束==
14:28:30.003 [task-scheduler-1] INFO
c.k.micro.cfca.scheduled.ContractSealApplyJob - ==回调job==开始==
14:28:30.003 [task-scheduler-1] INFO
c.k.micro.cfca.scheduled.ContractSealApplyJob - ==回调job==结束== 在构造方法里加入log,确认了类只被加载了一次; 示例代码: @RefreshScope
@Component
@EnableScheduling
public class ContractSealApplyJob{
@Value("${value1}")
private String value1;
* 进行回调job
@Scheduled(cron = "${0/30 * * * * *}")//每30秒
public void doCallBack(){
logger.info("==回调job==开始==");
索引对大数据的查询速度的提升是非常大的,Explain可以帮你分析SQL语句是否用到相关索引。
转眼间2018年已过四分之一,众多优质的开源项目如雨后春笋般涌出,为我们带来了很多惊喜!
码云Gitee 始终致力于推动国内开源生态的建立与良好发展,在竭诚为广大开发者提供更好的云端代码托管、协作开发服务的同时,也推出了码云开源项目 “GVP” 与 “1000 Star” 计划,大力扶植和推广本土优质开源项目,让国内优秀的开源作者们得能到更多的关注、获得更好的发展。
以下为码云Gitee 2018 年 3月份入选的 GVP 项目和被用户新评为 1000 Star 项目的名单,赶紧来看看有没有你中意的开源项目吧:
首先是 3月份入选 GVP——码云最有价值开源项目计划 项目
1、项目作者 swoft 项目名 swoft https://gitee.com/swoft/swoft
该项目为首个基于 Swoole 原生协程的新时代 PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield, 有类似 Go 语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等,可以用于构建高性能的Web系统、API、中间件、基础服...
# 从linux源码看socket的阻塞和非阻塞 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 大部分高性能网络框架采用的是非阻塞模式。笔者这次就从linux源码的角度来阐述socket阻塞(block)和非阻塞(non_block)的区别。 本文源码均来自采用Linux-2.6.24内核版本。 ## 一个TCP非阻塞client端简单的例子 如果我们要产生一个非阻塞的socket,在C语言中如下代码所示: ``` // 创建socket int sock_fd = socket(AF_INET, SOCK_STREAM, 0); ... // 更改socket为nonblock fcntl(sock_fd, F_SETFL, fdflags | O_NONBLOCK); // connect .... while(1) { int recvlen = recv(sock_fd, recvbuf, RECV_BUF_SIZE) ; ...... } ... ``` 由于网络协议非常复杂,内核里面用到了大量的面向对象的技巧,所以我们从创建连接开始,一步一步追述到最后代码的调用点。 ### socket的创建 很明显,内核的第一步应该是通过AF\_INET、SOCK\_STREAM以及最后一个参数0定位到需要创建一个TCP的socket,如下图绿线所示: ![inet_family](https://static.oschina.net/uploads/img/95807_GSaV.png "inet_family") 我们跟踪源码调用 ``` socket(AF_INET, SOCK_STREAM,...
Session,强制下线
详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Docker 的技术体系的快速发展。本文主要是结合在公司搭建的微服务架构的实践过程,做一个简单的总结。希望给在创业初期探索如何布局服务架构体系的 DevOps,或者想初步了解企业级架构的同学们一些参考。 Microservice 和 Docker 对于创业公司的技术布局,很多声音基本上是,创业公司就是要快速上线快速试错。用单应用或者前后台应用分离的方式快速集成,快速开发,快速发布。但其实这种结果造成的隐性成本会更高。当业务发展起来,开发人员多了之后,就会面临庞大系统的部署效率,开发协同效率问题。然后通过服务的拆分,数据的读写分离、分库分表等方式重新架构,而且这种方式如果要做的彻底,需要花费大量人力物力。 个人建议,DevOps 结合自己对于业务目前以及长期的发展判断,能够在项目初期使用微服务架构,多为后人谋福。 随着 Docker 周围开源社区的发展,让微服务架构的概念能有更好的一个落地实施的方案。并且在每一个微服务应用内部,都可以使用 DDD(Domain-Drive Design)的六...
### 1.虚拟环境 ``` tianshl:workspace tianshl$ mkdir server tianshl:workspace tianshl$ cd server/ tianshl:server tianshl$ virtualenv venv --python=python3 tianshl:server tianshl$ source venv/bin/activate ``` ### 2. 安装依赖 ``` (venv) tianshl:server tianshl$ pip install django (venv) tianshl:server tianshl$ pip install djangorestframework ``` ### 3. 创建项目 ``` (venv) tianshl:server tianshl$ django-admin.py startproject server (venv) tianshl:server tianshl$ tree server/ server ├── manage.py └── server ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py ``` ### 4. 更新配置 ``` (venv) tianshl:server tianshl$ cd server/ (venv) tianshl:server tianshl$ vim server/settings.py # 1.修改 INSTALLED_APPS = ( ... 'rest_framework', ) # 2.添加 REST_FRAMEWORK = { # Use Django's standard `django.contrib.auth` permissions, # or allow read-only access for unauthenticated users. 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' ] }...
### Logstash ##### 使用yum安装 ###### 编辑 repo ``` vim /etc/yum.repos.d/elasticsearch.repo # 内容如下 [elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md ``` ###### 安装 ``` sudo yum install logstash ``` #### 配置 Logstash ``` # 参考 https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html # input项配置源数据,此处为监听 "/log"目录下满足"insert.*.log"匹配的所有日志文件 # filter项过滤input输入的数据, "insert.*.log"中每条日志形式如:" | type | cid | src | eventId | reason", 所以使用" | "拆分每条日志 # output项是输出数据,此处为输出至ElasticSearch # 新建配置文件 insert.conf vim conf.d/insert.conf # 内容如下 input { file { path =& "/log/insert.*.log" } } filter { mutate{ split=&["message"," | "] add_field =& { "date" =& "%{[message][0]}" } add_field =& { "type" =& "%{[message][1]...
### ElasticSearch ``` 现有三台服务器[192.168.1.30, 192.168.1.31, 192.168.1.32],使用这三台服务器搭建ElasticSearch集群 ``` #### CentOS 使用 yum 安装 ###### 编辑 repo ``` vim /etc/yum.repos.d/elasticsearch.repo # 内容如下 [elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md ``` ###### 使用yum安装 ``` yum install elasticsearch ``` ###### 创建用户 ``` useradd elastic ``` ###### 修改权限 ``` # 数据 chown -R elastic:elastic /var/lib/elasticsearch # 日志 chown -R elastic:elastic /var/log/elasticsearch # 配置 chown -R elastic:elastic /etc/elasticsearch chown -R elastic:elastic /etc/sysconfig/elasticsearch # 指令 chown -R elastic:elastic /usr/share/elasticsearch ``` ###### 配置 ``` # 主节点 192.168.1.30 vim /etc/elasticsearch/elasticsearch.yml # 修改以下几项 cluster.name: etl_es node.name: node-30 node.master: true node.d...
### 写在开头 ``` 使用jhipster声明的OneToMany在One的一方DTO中是没有与Many的DTO的映射关系的, 为了在One的一方DTO中使用Many的DTO, 使用以下三步解决此问题。 ``` ### 步骤 ``` 1. OneDTO 中的"mark 1"处为自己写的一对多的关系, 此处变量名称不能与实体One中相应的变量名称一致,否则编译失败。 2. OneMapper 中的"mark 2"处 uses属性添加ManyMapper。 2. OneMapper 中的"mark 3"处使用@Mapping注解声明 Entity 转 DTO 的映射关系。 ``` ### Entity ``` @Entity @Table(name = "one") public class One { ... @OneToMany(mappedBy = "one") private Set manys = new HashSet&&(); ... public void setManys(Set manys) { this.manys = } public Set getManys() { } } @Entity @Table(name = "many") public class Many { ... @ManyToOne private O } ``` ### DTO ``` public class OneDTO { ... // mark 1 private Set manyDTOS = new HashSet&&(); ... public void setManyDTOS(Set manyDTOS) { this.manyDTOS = manyDTOS; } public Set getManyDTOS() { return manyDTOS; } } public class ManyDTO { ... private Long oneId; ... public...
# django ``` # 刚写的就不复制粘贴了 https://my.oschina.net/tianshl/blog/1611257 # 列一下目录结构 root@tianshl:~# cd server/ root@tianshl:~/server# tree server server ├── db.sqlite3 ├── manage.py └── server ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py ``` # gunicorn ##### 安装 ``` pip install gunicorn ``` ##### 配置 ``` # 修改django项目的settings.py INSTALLED_APPS = [ ...... 'gunicorn', ] ``` ##### 运行 ``` root@tianshl:~# cd /root/server/server/ root@tianshl:~/server/server# gunicorn --pythonpath /root/server/venv/bin/python3 -w 3 -b 0.0.0.0:80 server.wsgi # 测试能否正常运行, 然后ctrl+c结束进程 ``` # supervisor ##### 安装 ``` pip install supervisor ``` ##### 配置 ``` # 默认配置 # 使用echo_supervisord_conf命令查看默认配置 root@tianshl:~# echo_supervisord_conf # 自定义配置 root@tianshl:~# mkdir /etc/supervisor root@tianshl:~# mkdir /etc/supervisor/conf.d root@tianshl:~# echo_supervisord_conf & /etc/supervisor/supervisor.conf root@tianshl:~# vim /etc/su...
### 新增Python3编译环境 ``` Tools & Build System & New Build System 将默认内容替换为: { "cmd": ["python3", "-u", "$file"], "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python" } 保存为 Python3.sublime-build ``` ### 选中Python3环境 ``` Tools & Build System & Python3 ``` ### 使用Python3编译运行 ``` Ctrl + b ``` ### 可能遇到的问题 ##### 问题 ``` UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) ``` ##### 原因 ``` 默认是ascii编码但是输出中包含中文 ``` ##### 解决 ``` Preferences & Browse Packages & Users & Python3.sublime-build 修改配置文件, 配置文件中新增一条 "env": {"LANG": "en_US.UTF-8"} 修改后如下: { "cmd": ["python3", "-u", "$file"], "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python", "env": {"LANG": "en_US.UTF-8"} } ```...
## 更新model #### 需求 ``` 概览表增加"创建时间,修改时间,软删除" ``` #### 以往的方式 ###### 1. 修改model.jh, 在实体 Overview 中增加三个属性 ``` /** * 数据概览 -- 概览 */ entity Overview { id Long, ... /* 以下属性为新增的属性 */ /* 创建时间 */ createTime ZonedDateTime, /* 更新时间 */ updateTime ZonedDateTime, /* 是否删除 */ delFlag Boolean, } ``` ###### 2. 生成配置文件 ``` jhipster import-jdl model.jh ``` ###### 3. 运行项目使配置生效 ``` 运行项目时提示"Validation Failed",原因是配置文件的MD5值不同, 此时需要以下操作 1. 修改 DATABASECHANGELOG 表中相关记录的 MD5SUM 2. 在overview表中手动新增三个属性. ``` #### 现在的方式 ###### 1. 修改model.h, 在实体 Overview 中增加三个属性 ###### 2. 生成配置文件 ###### 3. 修改生成的配置文件 ``` src/main/resources/config/liquibase/changelog/15_added_entity_Overview.xml 将 changeSet中新增的三个column提取至新的changeSet中, 如下: 注意: changeSet的id不能与之前的相同 ``` ###### 4. 运行项目使配置生效 ``` 不需要手动修改MySQL,自动生效 ```...
![这里写图片描述](http://img.blog.csdn.net/05200?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2J1ZGluZzAwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这里写图片描述](http://img.blog.csdn.net/19115?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2J1ZGluZzAwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) #### 添加一个环境 ``` Manage Environments(右上角的齿轮) =& Add =& 填写环境的名称 =& Add ``` #### 添加登录接口 ``` # 比正常的请求多设置一下 "Tests" # 将登录接口返回的response中的token加入环境变量, 如: pm.environment.set("token", JSON.parse(responseBody).data.authorization); ``` #### 添加一个集合 ``` 1. New collection (左侧 目录) 2. 填写名称,如:"需要token的请求" 3. 切换到选项卡"Authorization" 4. 选择相应的 TYPE 5. Token 中填写 {{token}} 6. 点击Create 创建集合 ``` #### 添加需要token的请求 ``` 在刚创建的集合中添加的请求, Headers中都会自动添加 token, 如果token失效, 重新请求一下登录接口即可...
### 免登陆 ``` # 生成秘钥 tianshl:.ssh tianshl$ ssh-keygen -t rsa -P '' # 将公钥添加至服务器的authorized_keys中 tianshl:.ssh tianshl$ ssh-copy-id -i ./id_rsa.pub root@192.168.1.54 ``` ### 创建脚本 ``` # 项目根目录下创建脚本,名为:update.sh, 内容如下 #!/usr/bin/env bash # 更新 git pull # 打包 mvn clean package -Dmaven.test.skip=true # 上传 scp target/etl-0.0.1-SNAPSHOT.war root@192.168.1.54:/root/ # 删除原日志 | 终止服务 | 启动服务 | 查看启动日志 ssh root@192.168.1.54 "rm etl. ps -ef | grep etl | awk '{print $2}' | xargs kill -9; nohup ./etl-0.0.1-SNAPSHOT.war & etl.log 2&&1 &; tail -f etl.log" ``` ### 配置IDE ``` Run / Edit Configurations... / "+" / Bash 1. Name 填写 2. Script 选择 update.sh 3. Working directory 选择 项目根目录 ```...
### 需求 ``` 对MySQL数据库中某个表的某个字段执行k-means算法,将处理后的数据写入新表中。 ``` ### 源码及驱动 ``` http://download.csdn.net/download/xiaobuding007/ ``` ### 源码 ```java import java.sql.*; import java.util.*; /** * @author tianshl * @version
上午11:13 */ public class Kmeans { // 源数据 private List origins = new ArrayList&&(); // 分组数据 private Map& // 初始质心列表 private L // 数据源 private String tableN private String colN /** * 构造方法 * * @param tableName 源数据表名称 * @param colName 源数据列名称 * @param cores 质心列表 */ private Kmeans(String tableName, String colName,List cores){ this.cores = this.tableName = tableN this.colName = colN } /** * 重新计算质心 * * @return 新的质心列表 */ private List newCores(){ List newCores = new ArrayList&&(); for(List v: grouped.values()){ newCores.add(v.stream().reduce(0, (sum, num) -& sum + num) / (v.size() + 0.0)); } Collections.sort(newCores); return newC } /...
EXcel,图片删除,超链接提取,VBA函数
近来在学习golang语言,但是没有需求,于是自己给自己造了个轮子。我本身学的语言很杂,目前以php谋生,看着php前端代理的apache和nginx,于是,尝试自己用golang实现一个关于fastcgi协议的轮子,也算是学习fastcgi原理的同时又学习了golang。
Lombok 通过提供简单的语法注解形式来帮助简化消除一些必须有但显得很臃肿的 java 代码。典型的是对于 POJO对象的简化(如自动帮我们生成Setter和Getter等),有了Lombok的加持,开发人员可以免去很多重复且臃肿的操作,**极大地提高java代码的信噪比**,因此我们必须尝试并应用起来
shell入门的文章,对shell不太熟悉小伙伴可以看看
1、任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。因为只有该字段中有null值,即使创建了索引其实也 是没有用的,所以创建索引应该在有值的字段上创建; 2、使用该sql语句将不会使用索引:select * from employee where last_name like ‘%cliton%';
这样的话会使用索引:
select * from employee where last_name like ‘cliton%'; 3、Order by语句 ORDER BY语句决定了Oracle如何将返回的查询结果排序。Order by语句对要排序的列没有什么特别的限制,也可以将函数加入列中(象联接或 者附加等)。任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。仔细检查order by语句以找出非索引项或者表达式,它们 会降低性能。解决这个问题的办法就是重写order by语句以使用索引,也可以为所使用的列建立另外一个索引,同时应绝对避免在order by 子句中使用表达式。 4、 选择最有效率的表名顺序(只在基于规则的优化器中有效):
ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句 中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如...
由于众所周知的原因,至今仍有大量生产环境的代码跑在 Python 2.7 之上,在 Python 2 的世界里,并没有一个官方的类型系统实现。那么生产环境的类型系统是如何实现的呢,为什么一定要在在线服务上实现类型系统?下文将针对这两个问题进行深入讨论。
MyISAM表锁优化建议 用表级锁定在锁定实现的过程中比实现行级锁定或者页级锁所带来的 附加成本都要小,锁定本身所消耗的资源也是最少。但是由于锁定的颗粒度比较到,所以造成锁定资源 的争用情况也会比其他的锁定级别都要多,从而在较大程度上会降低并发处理能力。 1、 缩短锁定时间 唯一的办法就是让我们的Query执行时间尽可能的短。 a) 尽两减少大的复杂Query,将复杂Query分拆成几个小的Query分布进行; b) 尽可能的建立足够高效的索引,让数据检索更迅速; c) 尽量让MyISAM存储引擎的表只存放必要的信息,控制字段类型; d) 利用合适的机会优化MyISAM表数据文件; 2、 分离能并行的操作 说到MyISAM的表锁,而且是读写互相阻塞的表锁,可能有些人会认为在MyISAM存储引擎的表上就只 能是完全的串行化,没办法再并行了。大家不要忘记了, MyISAM的存储引擎还有一个非常有用的特性, 那就是Concurrent Insert(并发插入)的特性。 MyISAM存储引擎有一个控制是否打开Concurrent Insert功能的参数选项: concurrent_insert, 可 以设置为0, 1 或者2。三个值的具体说明如下: a) concurrent_insert=2,无论 MyISAM 存储引擎的表数据文件的中间部分是否存在因为删除数据 而留下...
ElasticSearch+Logstash+Kibana+Filebeat
jessie 修改主题
目录: 1.实现概述 2.注册功能实现 3.登录功能实现 4.状态判断
1.实现概述: 总体思想:注册、登陆之后,服务器会生成一个短期有效的ticket,并将这个ticket存入浏览器的cookie中,之后再使用Interception根据cookie中的ticket渲染网页。 configuration.ToutiaoWebConfiguration:用于将interceptor(拦截器)与网页进行关联。 controller.LoginController:用于注册、登录操作的前端交互。 model.LoginTicket和dao.LoginTicketDAO:用于服务器给登录用户下发的ticket,即用户已登录的凭证。 model.HostHolder:所有属性定义成静态ThreadLocal的,可以实现多线程(多个用户同时访问网站)。 interception.PassportInterception:interception拦截器,为一种面向切面的思想,本类用于加载网页前判断是否已登录。 interception.LoginRequiredInterception:设置权限网页,如果权限不够,自动跳回首页。 Service.UserService:用于实现注册、登录的逻辑判断。
2.注册功能实现: 在UserService实现逻辑判断: public Map&String ,Object& Register(String username, String password){
Map&String ,Object& map=new HashMap&&();
if(StringUti...
为了安全 我们需要将密码加密后在传递到后台 这样在console中就不能 开到明文了
一、什么是跨链技术
跨链技术可以理解为连接各区块链的桥梁,其主要应用是实现各区块链之间的原子交易、资产转换、区块链内部信息互通,或解决Oracle的问题等。 当今的区块链技术纷繁芜杂,各成一派,彼此之间无法进行价值和数据的交换。虽然很多区块链拥护者声称区块链是下一代互联网,但是由于每个链都是独立的、垂直的封闭体系,当前的“互联网”只是由许多彼此割裂开来的区块链“孤岛”构成,或者说,当前的区块链看起来更像是内联网。比如,比特币和以太坊是基于全网共识的、蛮力解法的信任机制。这种验证通过同步全网区块,由每个节点来做验证。但是,那些采用了去中心化账本技术的区块链(DLT,Distributed Ledger Technology),如瑞波币和IOTA,则同样处于互相隔离的状态。更令人难以接受的是,声称去中心化的区块链之间的价值互换却主要依靠中心化的交易所来完成,链上的资产价值不能得到合理的评估。 由于区块链之间互不连通、资产价值的大幅波动大大制约了区块链技术的应用和发展。所以链与链之间的互联操作越来越被重视,跨链的需求就由此而来。但是,跨链是一个复杂的过程,既需要对链中节点要有单独的验证能力,也需要去中心化的输入,更需要对链外世界的...
激活时选择License server,填入 http://idea.wlphp.com:1017 点击Active即可
本人历经一个多星期,利用业余时间,踩了无数个坑,最后终于成功编译chromium android的源码,回想起来真心不易,现特将这一过程分享出来,以免他人再走弯路。 首先,我要强调3点关键因素: 一定要有完善的梯子。最好是你已肉身翻墙,比如留学,移民,甚至是去国外旅游。如果做不到这点,那就只能使用翻墙工具,关于这块,由于我已经多年没用vpn,而改用shadowsocks,但之前也只是一直在mac上用带GUI的ss,而在Linux上,却不得不自己用命令行来配置,过程繁琐,还容易出错。可以说,大部分的时间是花在了搭梯子上。另外,如果你购买的是付费的shadowsocks,一定要注意流量额度和计费方式,我就是不凑巧用了个很贵的节点,导致我一下就用完了一个月的流量,还多花了几十块钱去充流量。 一定要用linux,而且要熟练使用,之前就是光在google官网上看了个chromium pc端编译的文档,说是支持mac编译,就兴冲冲的拿mac去下代码,结果怎么也不成功。后来看了chromium android的文档,才发现只能用linux。但我linux用的确实不熟,好多操作都要去现场百度,这样就耽误了不少时间。 不要幻想用骚操作来搞定,要老老实实跟着官网的步骤一步步的走,等这条路走通了再考虑用其他方式改进...
4号清明放假前一天,快下班的时候,一个同事让过去帮忙看个问题,以为是个很简单的问题。背景描述:我们的开发环境是基于osgi框架,业务包先从开发环境经过maven打包再下载这个maven标准包。问题描述:新打好的包上到另外一个环境,一个字段没有初始化到数据库中。开始一看,感觉就是一些注意项没配置,然后都看了下,好像都做了,但是就是没初始化进去,看下日志,就是这个字段没有执行初始化操作。看了下开发环境的代码, 没问题。想着可以远程debug,但是手头的环境没有这个版本,git切一下分支也麻烦。然后就开始排错了。
1.开发环境的代码没问题,查查字段的配置文件在不在,也在的。
2.看下maven打的包里面,配置文件里面,这个字段在不在。咦,jar包的修改时间是日是什么鬼,问了下他,这个时间怎么不对啊,他说为了验证个东西,需要需改时间。看来问题就是出在这了,因为我发布了几次,理论上,这个jar的修改时间应该是4月4日下午才对,但是一直没更新,看了下jar包文件里面的字段配置文件,果然没有那个字段。然后问题找到了。
前几个月,因为发布性能优化,发现maven打包的时候,clean比较耗时间,考虑到平常业务场景,不clean也没问题,然...
配置本地开发机器虚拟域名以及泛域名解析 适合在本地进行多站点开发配置 1、配置:C:\Windows\System32\drivers\etc\hosts 添加 ``` 127.0.0.1 a.la 127.0.0.1 qwadmin.a.la 127.0.0.1 test.a.la ``` 2、nignx配置 ``` server { listen 80; #server_name test.a. server_name ~^(?.+).a.la$; index index.html index.htm index. root D:/web/$ location ~ \.php$ { root D:/web/$ fastcgi_pass 127.0.0.1:9000; fastcgi_index index. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_ fastcgi_param domain $ include fastcgi_ } } ``` 作用说明: 在目录 D:/web/ 里添加 test虚拟目录站点,在hosts文件里 添加 test的二级域名映射如:127.0.0.1 test.a.la,刚可以通过 test.a.la 直接访问test站,不需求重启nginx...
& 上周发了一篇关于Spring Boot中使用`@Async`来实现异步任务和线程池控制的文章:[《Spring Boot使用@Async实现异步调用:自定义线程池》](http://blog.didispace.com/springbootasync-2/)。由于最近身边也发现了不少异步任务没有正确处理而导致的不少问题,所以在本文就接前面内容,继续说说线程池的优雅关闭,主要针对`ThreadPoolTaskScheduler`线程池。 ### 问题现象 在上篇文章的例子[Chapter4-1-3](https://github.com/dyc87112/SpringBoot-Learning/)中,我们定义了一个线程池,然后利用`@Async`注解写了3个任务,并指定了这些任务执行使用的线程池。在上文的单元测试中,我们没有具体说说shutdown相关的问题,下面我们就来模拟一个问题现场出来。 第一步:如前文一样,我们定义一个`ThreadPoolTaskScheduler`线程池: ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @EnableAsync @Configuration class TaskPoolConfig { @Bean("taskExecutor") public Executor taskExecutor() { ThreadPoolTaskScheduler executor = new ThreadPoolTaskScheduler(); e...
1.如何安装npm 一、安装node.js 1.前往node.js官网下载并安装工具,这里安装路径选到D盘,D:\Program Files\nodejs
安装完毕在命令行输入以下命令测试是否安装成功,正确会出现版本号 1 npm -v
2.改变原有的环境变量,
(1)我们要先配置npm的全局模块的存放路径以及cache的路径,例如我希望将以上两个文件夹放在NodeJS的主目录下,便在NodeJs下建立"node_global"及"node_cache"两个文件夹,输入以下命令改变npm配置 1 2 npm config set prefix "C:\Program Files\nodejs\node_global" npm config set cache "C:\Program Files\nodejs\node_cache"
(2)在系统环境变量添加系统变量NODE_PATH,输入路径D:\Program Files\nodejs\node_global\node_modules,此后所安装的模块都会安装到改路径下
2. 关于npm ERR! enoent ENOENT: no such file or directory, open xxxx.json 首先确定你是否切换到你的开发目录,如果已经切换开发目录,再尝试npm install
xxx.json 3.Unexpected identifier 出现这个表示哪里存在错误,修正就好了
4.下载模块 npm install vue-loader --save-dev npm install vue-html-loader css-loader vue-style-loader vue-hot-re...
Ueditor原生文件上传保存是直接保存到项目路径下的,若需要单独的服务器管理文件,则需要改改源码即可,灰常简单。
在nginx要禁止某个或一类资源,只需要增加一个location,然后在其中使用deny all即可。 禁止访问扩展名为bat的文件,配置如下: location ~* /.bat {
} 禁止访问configs目录,以及其下所有子目录或文件,配置如下: location ^~ /configs/ {
注意上述configs后面的斜杠不能少,否则所有以configs开头的目录或文件都将禁止访问。
https://www.oschina.net/p/cronexpbuilder
Mysql中的一个现象: 今天在做‘以书会友’项目时,碰到一个问题。具体情况是这样的, 项目中有一个users表,包含十一个字段,只有一个是主键,userId,并且是自增长类型的。 项目用的是SSM框架,在userMapper.xml文件中有这么一个配置,用于往数据库里添加user信息。 &insert id="insert" parameterType="com.ice.ht.model.entity.Users"&
insert into users (userName, passWord,userAdress,userCall,userIC,hidden,userType,userAcountName,regTime,loginTime)
values (#{userName,jdbcType=VARCHAR}, #{passWord,jdbcType=VARCHAR}, #{userAdress,jdbcType=VARCHAR}, #{userCall,jdbcType=VARCHAR}, #{userIC,jdbcType=VARCHAR},
#{hidden,jdbcType=BOOLEAN},
#{userType,jdbcType=INTEGER},#{userAcountName,jdbcType=VARCHAR},#{regTime,jdbcType=TIMESTAMP},#{loginTime,jdbcType=TIMESTAMP})
&/insert& 由于开始时把自增长的主键userId也写进了该段配置中,一直报错duplicate entry in sql for userId =1,这个联系我们平时写sql往数据库里添加数据就很容易理解,因为自增长的主键不用写进sql。
``` #pragma once #include "HCCamera.h" #include #include #include #include #include #include #include #include #if WINDOWS #include #define USECOLOR 1 int iPicNum = 0;//Set channel NO. LONG nPort = -1; HWND hWnd = NULL; LONG lRealPlayH LONG lUserID; void yv12toYUV(char *outYuv, char *inYv12, int width, int height, int widthStep) { int col, unsigned int Y, U, V; for (row = 0; row & row++) { idx = row * widthS int rowptr = row * for (col = 0; col & col++) { tmp = (row / 2)*(width / 2) + (col / 2); Y = (unsigned int)inYv12[row*width + col]; U = (unsigned int)inYv12[width*height + width * height / 4 + tmp]; V = (unsigned int)inYv12[width*height + tmp]; outYuv[idx + col * 3] = Y; outYuv[idx + col * 3 + 1] = U; outYuv[idx + col * 3 + 2] = V; } } } void CALLBACK HCCamera_DecCBFun(long nPort, char * pBuf, long nSize, FRAME_INFO * pFrameInfo, long nReserved1, long nReserved2) { long lFrameType = p...
# 编者注 服务端需要REST与页面同时存在。则需要针对URL进行通用化设计,使用通用方式解决restful与页面URL冲突问题。 # 附录 [trello API设计](https://developers.trello.com/v1.0/reference) [豆瓣API快速入门](https://developers.douban.com/wiki/?title=guide)
最近迷上了金融,感觉除了编程写代码,原来也可以学习金融,感觉眼界开阔了很多. 除了程序员的深度,我们应该还有广度,涉猎一些其它的知识,能开阔眼界,视野,格局.
详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
如今出现了大量的CSS前端框架,但真正优秀的框架只有少数几个。 本文将会比较其中五个最佳的框架。每个框架都有自己的优点和缺点,以及具体的应用领域,你可以根据自己的具体项目需求进行选择。此外,许多选项都是模块化的,允许你仅使用所需的组件,甚至可以混合使用来自不同框架的组件。 本文依据各个框架的GitHub流行度来顺序介绍。 Bootstrap Bootstrap是目前可用框架中无可争议的领导者。其人气日益增长,你可以放心的选择这个框架,而不必担心项目会失败,因为具有广泛使用基础的框架,不太可能被抛弃。 创作者: Mark Otto 和 Jacob Thornton. 发行: 2011 当前版本: 3.3.7 人气: GitHub上有111,000颗星 说明: “Bootstrap是最流行的HTML,CSS和JavaScript框架,用于在网络上开发响应式、移动的Web项目。 核心概念/原则: RWD和移动端优先。 框架大小: 154 KB 预处理器: Less和Sass 响应式布局:是 模块化:是 启动模板/布局:是 图标集: Glyphicons Halflings设置 附加/附件:无捆绑,许多第三方插件可用。 独特组件: Jumbotron 文档资源:良好 自定制:基本GUI定制器。但是你需要手动输入颜色值,因为没有颜色选择器可用。 浏览器支持: Fir...
概述 在我们的日常项目开发过程中缓存是无处不在的,因为它可以极大的提高系统的访问速度,关于缓存的框架也种类繁多,今天主要介绍的是使用现在非常流行的NoSQL数据库(Redis)来实现我们的缓存需求。 Redis简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件,Redis 的优势包括它的速度、支持丰富的数据类型、操作原子性,以及它的通用性。 案例整合 本案例是在之前一篇SpringBoot + Mybatis + RESTful的基础上来集成Redis的,所以大家如有什么不明白的地方可以前往https://my.oschina.net/feinik/blog/879266,由于篇幅原因这里不一一贴出所有的代码,具体完整案例代码可以看这里:https://github.com/AIFEINIK/SpringBoot-Learn/tree/master/spring-boot-redis2,关于Redis如何安装可自行google。 1、在Maven pom.xml文件中加入Redis包 &!--redis--&
&dependency&
&groupId&org.springframework.boot&/groupId&
&artifactId&spring-boot-starter-redis&/artifactId&
&version&${boot.version}&/version&
&/dependency& 2、SpringBoot配置文件中配置Redis连接(YAML方式配置) spring:
application:
#前言 大学的学习时光临近尾声,感叹时光匆匆,三年一晃而过。同学们都忙着找工作,我也在这里抛一份[简历](http://139.199.82.213:8080/LiveDemo/resume)吧,欢迎各位老板和猎手诚邀。我们进入正题。直播行业是当前火热的行业,谁都想从中分得一杯羹,直播养活了一大批人,一个平台主播粗略估计就有几千号人,但是实时在线观看量有的居然到了惊人的百万级别,特别是游戏主播,可想而知,直播间是一个磁铁式的广告传播媒介,也难怪这么多巨头公司都抢着做直播。我不太清楚直播行业技术有多深,毕竟自己没做过,但是咱们可以自己实现一个满足几百号人同时观看的直播间呀。 ---------- # 最终成果 * [演示地址(电脑端与移动端效果不同哦)](http://139.199.82.213:8080/LiveDemo/live_room) * [服务端项目地址](https://github.com/jack-hoo/LiveRoomDemo_Server) * [客户端项目地址](https://github.com/jack-hoo/LiveRoomDemo_Client) & 手机端效果 ![动图](http://www.veton.cc/LiveDemo/dongtai1.gif ) 这个场景很熟悉吧~~ 通过obs推流软件来推流。 ![图片描述](https://static.oschina.net/uploads/img/32352_igQv.png "在这里输入图片标题")![] 户外直播,通过...
热烈的爱情到订婚早已是定点,婚一结一切了结。现在订了婚,彼此间还留着情感发展的余地,这是桩好事。- 《我们仨》 』 「系列文章」 深入浅出 spring-data-elasticsearch - ElasticSearch 架构初探(一) 深入浅出 spring-data-elasticsearch - 概述(二) 深入浅出 spring-data-elasticsearch - 基本案例详解(三) 深入浅出 spring-data-elasticsearch - 实战案例详解(四) 深入浅出 spring-data-elasticsearch - 架构原理以及源码浅析(五)(拼命编写ing) 运行环境:JDK 7 或 8,Maven 3.0+ 技术栈:SpringBoot 1.5+, Spring Data Elasticsearch 1.5+ ,ElasticSearch 2.3.2 本文提纲 一、搜索实战场景需求 二、运行 spring-data-elasticsearch-query 工程 三、spring-data-elasticsearch-query 工程代码详解
一、搜索实战场景需求 搜索的场景会很多,常用的搜索场景,需要搜索的字段很多,但每个字段匹配到后所占的权重又不同。比如电商网站的搜索,搜到商品名称和商品描述,自然商品名称的权重远远大于商品描述。而且单词匹配肯定不如短语匹配。这样就出现了新的需求,如何确定这些短语,即自然分词。那就利用分词器,即可得到所需要的短语,然后进行...
此文是第一次搞redis主从小白犯的错,大神可以忽略。记录为了让看到本博文的小白前车之鉴 软件资源
centOs:6.5
redis:2.8.10
公司现有架构均是单机模式,本文仅先介绍redis单机踩的坑-- 即生产应用redis均是单一实例,一旦实例挂掉功能就会不可用。现公司业务使用了一台实例(业务实例),一台session共享实例(session实例)。
现需要对现有架构升级(后续会出整个架构升级的相关博客),先从最简单的redis开始开刀,采用主从复制,启用哨兵监听进行主从切换(后续会有相关详细博客)。 基本问题
线上redis仅启用了rdb持久化,需要启用AOF 线上业务实例和session实例 keys&1W,可以把业务实例和session实例合并节约资源 踩坑记
已经搭建了主从模式,创建了多个key验证没问题, 很开心ing, 发现需要启用AOF,查看官方文档认为so easy, 于是乎 改改改配置,重启服务,在主节点添加了一个key,主从验证通过, 非常开心ing。
【敲黑板,开始挖坑了哈】 此时模拟极端故障,把主从节点都停掉了,开始依次开启服务,发现仅有开启...
风云说:能分享自己职位的知识的领导是个好领导。 』
欢迎来 Spring For All , 和我探讨 Spring 相关的分享。 http://spring4all.com
运行环境:JDK 7 或 8,Maven 3.0+ 技术栈:SpringBoot 1.5+, Spring Data Elasticsearch 1.5+ ,ElasticSearch 2.3.2
本文提纲 一、spring-data-elasticsearch-crud 的工程介绍 二、运行 spring-data-elasticsearch-crud 工程 三、spring-data-elasticsearch-crud 工程代码详解 一、spring-data-elasticsearch-crud 的工程介绍 spring-data-elasticsearch-crud 的工程,介绍 Spring Data Elasticsearch 简单的 ES 操作。Spring Data Elasticsearch 可以跟 JPA 进行类比。其使用方法也很简单。 二、运行 spring-data-elasticsearch-crud 工程 注意的是这里使用的是 ElasticSearch 2.3.2。是因为版本对应关系 https://github.com/spring-projects/spring-data-elasticsearch/wiki/Spring-Data-Elasticsearch---Spring-Boot---version-
Spring Boot Version (x)
Spring Data Elasticsearch Version (y)
Elasticsearch Version (z) x &= 1.3.5
y &= 1.3.4
z &= 1.7.2* x &= 1.4.x
最近在自己的笔记本电脑上搭建了Apache Hadoop分布式集群,采用了最新的稳定版本2.8,并配置了NameNode、ResourceManager的HA高可用,方便日常对Hadoop的研究与测试工作。详细的搭建过程如下: 1、安装docker,创建docker容器,用于搭建hadoop节点 docker真是个好东西啊,当要在自己的笔记本上搭建分布式集群时,由于CPU、内存、磁盘有限,无法在VMware上虚拟出太多节点,这时使用docker创建几个容器,就能轻松搭建一个分布式集群了。 (1)先在VMware上安装centos6.9,作为宿主机,然后安装docker,具体过程见我另一篇博文:Centos6.9安装docker (2)然后再docker hub中拉取centos镜像,用于创建分布式集群的节点,推荐在docker中安装centos6(docker中的centos7有坑,被坑过,呜呜),具体过程见我另一篇博文:docker中安装centos6 (3)centos镜像准备好后,就开始创建docker容器,用于搭建hadoop的节点 # 创建4个节点,用于搭建hadoop
docker run -it --name hadoopcentos1 centos:6 /bin/bash
docker run -it --name hadoopcentos2 centos:6 /bin/bash
docker run -it --name hadoopcentos3 centos:6 /bin/bash
docker run -it --name hadoopcentos4 centos:6 /bin/b...
# 简介 几乎所有的主流编程语言都有Redis的客户端(http://redis.io/clients),不考虑Redis非常流行的原因,如果站在技术的角度看原因还有两个: 1. 客户端与服务端之间的通信协议是在 **TCP 协议**之上构建的。 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。 客户端和服务器发送的命令或数据一律以 `\r\n` (CRLF)结尾。 2. Redis制定了 RESP(REdis Serialization Protocol,Redis序列化协议)实现客户端与服务端的正常交互,这种协议简单高效,既能够被机器解析,又容易被人类识别。 # 发送命令 RESP 在 Redis 1.2 版本中引入, 并最终在 Redis 2.0 版本成为 Redis 服务器通信的标准方式。 在这个协议中, 所有发送至 Redis 服务器的参数都是二进制安全(binary safe)的。 RESP 的规定一条命令的格式如下: ```shell *&参数数量& CR LF $&参数 1 的字节数量& CR LF &参数 1 的数据& CR LF ... $&参数 N 的字节数量& CR LF &参数 N 的数据& CR LF ``` **命令本身也作为协议的其中一个参数来发送。** 例如我们经常执行的 SET 命令,在命令行中我们输入如下: ```shell SET key value ``` 使用 RESP 协议规定的格式: ```shell *3 $3 SET...
我们在Android开发过程中,几乎都离不开线程。但是你对线程的了解有多少呢?它完美运&#...
# 1. 疑问 我们在项目中使用了spring mvc作为MVC框架,shiro作为权限控制框架,在使用过程中慢慢地产生了下面几个疑惑,本篇文章将会带着疑问慢慢地解析shiro源码,从而解开心里面的那点小纠纠。 (1)**在spring controller中,request有何不同呢**? 于是,在controller中打印了request的类对象,发现request对象是org.apache.shiro.web.servlet.ShiroHttpServletRequest ,很明显,此时的 request 已经被shiro包装过了。 (2)众所周知,spring mvc整合shiro后,可以通过两种方式获取到session: **通过Spring mvc中controller的request获取session** ``` Session session = request.getSession(); ``` **通过shiro获取session** ``` Subject currentUser = SecurityUtils.getSubject(); Session session = currentUser.getSession(); ``` 那么,问题来了,**两种方式获取的session是否相同呢**? 这里需要看一下项目中的shiro的securityManager配置,因为配置影响了shiro session的来源。这里没有配置session管理器。 ``` ``` 在controller中再次打印了session,发现前者的session类型是 org.apache.catalina.session.StandardSessionFacade ,后者的session类型是org...
本篇博文我们将给出示例理解如何在Maven工程中配置Jacoco和如何使用Jacoco查看代码覆盖报告~ Jacoco是一个开源的Java代码覆盖率工具,Jacoco可以嵌入到Ant 、Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,如sonar、Jenkins等。 Maven工程 创建Maven工程 打开Eclipse,File-&New-&Project-&Maven Project,新建一个Maven工程~ 点击“Next”按钮,然后填写groupId和artifactId信息后点击"Finish"按钮即可~ groupId --&
com.xxx.tutorial artifactId --& jacoco-demo 配置Jacoco 添加maven-complier-plugin
&groupId&org.apache.maven.plugins&/groupId&
&artifactId&maven-compiler-plugin&/artifactId&
&version&3.6.1&/version&
&configuration&
&skipMain&true&/skipMain&
&skip&true&/skip&
&source&1.7&/source&
&target&1.7&/target&
&/configuration&
&/plugin& 添加jacoco-maven-plugin
&groupId&org.jacoco&/groupId&
&artifactId&jacoco-maven-plugin&/artifactId&
&version&${jacoco.v...
oracle太大了,对于开发人员来说,在本机安装一个oracle代价不菲。 在docker环境中,我找了很久,发现wnameless/oracle-xe-11g 镜像还不错,很方便搭建起来。 但是也发现一个问题,挂载本地卷遇到了麻烦。一旦挂载,就无法登陆了。从官方的issues中发现,有一个fork版本解决了这个问题,记录一下。 创建docker-compose工作目录 --- ``` mkdir -p oracle/data cd oracle touch docker-compose.yml ``` 配置docker-compose.yml --- ```yaml version: '2' services: oracle: image: sath89/oracle-xe-11g container_name: oracle ports: -
volumes: - ./data:/u01/app/oracle ``` 启动容器 --- ``` #启动oracle docker-compose up -d #关闭容器 docker-compose kill ``` 登录oracle --- 登录使用的参数: ``` SID: xe username: system password: oracle ``` 注意:原文写错了用户名,不是admin,是system,sorry 进入后自行修改密码,创建用户等即可。 为什么要绑定本地卷 --- wnameless版本无法绑定本地卷的问题,会导致我们一旦重启容器或重建容器,我们在数据库中的所有操作、创建的表以及数据等等全部丢失了。 绑定了本地卷,可以让容器的数据持久化到本机。就...
# spring boot / cloud (八) 使用RestTemplate来构建远程调用服务 ##前言 上周因家里突发急事,请假一周,故博客没有正常更新 ###RestTemplate介绍: &RestTemplate是spring框架中自带的rest客户端工具类,具有丰富的API,并且在spring cloud中,标记@LoadBalanced注解,可以实现客户端负载均衡的rest调用. ##思路 RestTemplate虽然提供了丰富的API,但是这些API过于底层,如果不稍加控制,让开发人员随意使用,那后续的代码也将会变的五花八门,难以维护. 同时,当系统规模大了之后,将会有更多的服务,并且服务之间的调用关系也将更加复杂,如果不进行管控治理的话,同样,项目同期也将越来越不可控, 最后,服务间调用也需要有明确的权限认证机制,最好是能通过配置的方式来明确,哪些服务可以调用那些服务.从而来把控项目的复杂度. 本文将从以下几点来提供一个解决问题的思路: - 通过spring boot的@ConfigurationProperties机制来定义远程服务的元数据,从而实现权限认证的配置化 - 使用HandlerInterceptor来进行拦截,实现权限的验证 - 定义通用Rms类,来规范RestTemplate的使用 ##实现 ###1.实现权限配置 ####1.定义Application元数据 ``` java public class ApplicationMeta implements Seria...
Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 等等编程语言间无缝结合的、高效的服务。 Thrift最初由facebook开发,07年四月开放源码,08年5月进入apache孵化器。thrift允许你定义一个简单的定义文件中的数据类型和服务接口。以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。 本篇博文编写的目的是对Thrfit不同的服务类型进行整理,并结合代码示例进行说明~ 目标 本篇博文编写的目的是对Thrfit不同的服务类型进行整理,并结合代码示例进行说明~ 博文主要包含如下几个部分: 1. 实例代码准备 2. 对不同的服务类型进行介绍说明,并给出示例 3. 异步客户端调用实例 4. Nifty库的使用,包含服务端和客户端代码示例 实例 说明 在这个示例中,我们主要在用户接口中定义三个接口:保存用户,根据name获取用户列表以及删除用户 如:
* 保存用户
* @param user
public boolean save(com.xxx.tutorial.thrift.entity....
学习每一门语言,一般都是从其数据结构开始,JavaScript也是一样,而JavaScript的数据结构中对象(Object)是最基础也是使用最频繁的概念和语法,坊间有言,JavaScript中,一切皆对象,基本可以描述对象在JavaScript中的地位,而且JavaScript中对象的强大也使其地位名副其实,本篇介绍JavaScript对象属性描述器接口及其在数据视图绑定方向的实践,然后对Vue.js的响应式原理进行剖析。
本项目完全开源 项目Github地址:[AndroidInstantVideo](https://github.com/ChillingVan/AndroidInstantVideo) 码云地址:[AndroidInstantVideo](http://git.oschina.net/ChillingVan/AndroidInstantVideo) 目前开源的项目或市面上的Android直播客户端主要是用ffmpeg来实现推流的。本文将介绍使用Android原生的视频编码类MediaCodec实现直播推流。 ### 数据流及大致原理 这里所说的直播,就是将你的客户端产生的视频数据,实时发送到服务器上。服务器上的数据再实时地发送到播放客户端上。 * 以视频数据为例: **获取Camera画面** 首先是摄像头拍摄得到原始画面数据,这里原始画面数据的格式我们不用管,因为我们使用的是MediaCodec,所以我们会使用 camera.setPreviewTexture(surfaceTexture) 来利用Camera获取到的画面。 此处的原理可忽略,大致说明的话,就是Camera会把获得的画面保存为OpenGL的一个纹理,我们使用这个纹理就能使用Camera的画面。 **绘制画面** 在获得画面之后,我们要把这个画面(纹理)“画”到MediaCodec上。 如何画? MediaCodec提供一张’白纸’,也就是一个Surface,供我们把纹理画到上面。此处的API是 MediaCodec.createInputSurface() 怎么画?...
# Runtime学习 -- `weak`应用源码学习 &
Runtime源码分析,带你了解OC实现过程。其中参考了大量的大神的代码以及文献,里面也有个人的见解,欢迎拍砖,欢迎交流。 ## 两种常见使用场景 ```Objective

我要回帖

更多关于 摩尔庄园已经停止更新 的文章

 

随机推荐