ADC_MASK<<digital channel意思是什么意思

Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置
java.io.FileNotFoundException: C:\Users\ABC\.m2\repository\com\mchange\c3p0\0.9.5.2\mchange-commons-java-0.2.11.jar (The system cannot find the file specified)
时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
1.什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。 SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。 它有几个特色功能: 1)集中式的配置信息 2)自动容错 3)近实时搜索 4)查询时自动负载均衡 3. Solr集群的系统架构 ![1](https://static.oschina.net/uploads/img/04532_06xH.png "在这里输入图片标题") 3.1. 物理结构 三个Solr实例( 每个实例包括两个Core),组成一个SolrCloud。 3.2. 逻辑结构 索引集合包括两个Shard(shard1和shard2),shard1和shard2分别由三个Core组成,其中一个Leader两个Replication,Leader是由zookeeper选举产生,zookeeper控制每个shard上三个Core的索引数据一致,解决高可用问题。 用户发起索引请求分别从shard1和shard2上获取,解决高并发问题。 3.2.1. collection Collection在SolrCloud集群中是一个逻辑意义上的完整的索引结构。它常常被划分为一个或多...
在今年的《政府工作报告》中,人工智能作为关键词又一次被重点提及。“实施大数据发展行动,加强新一代人工智能研发应用,在医疗、养老、教育、文化、体育等多领域推进‘互联网+’。”人工智能与大数据、“互联网+”等一起成为改造传统产业、促进智能产业腾飞的基石。
当钉钉和企业微信这对背靠巨头的流量之子先后入局,就注定了中国企业服务市场进入了一个竞争更加激烈的时代。 通用型SaaS工具市场难有机会,产品场景化体验要求越来越高,投资人对SaaS的投资更加谨慎…… 中国企业服务市场正处在一道分水岭,TOB商业形态会出现什么样的变化?新商业将带来哪些新价值?产业互联浪潮下,如何将这些新价值最大化? 近日,国内最具影响力的企业服务平台崔牛会宣布,将于4月19日举办“新商业o新价值”2018中国企业互联网春季峰会。 “中国企业服务市场开始逐步进入了深水区,服务商开始思考——能在哪些垂直领域扎根,能在哪些应用场景上深化,这是很明显的进步。 但从全球视角来看中国TOB市场是什么样?今天的云计算,到底给我们带来了什么? 这正是我们在此次春季峰会上想要和大家共同探讨的。”崔牛会联合创始人、市场副总裁李伟表示。 算起来,这已经是崔牛会举办的第五届企业互联网春季峰会。据悉,此次峰会将有超过2000位来自全球各地的TOB领域从业者深度参与,数十位业内顶级大咖现场分享。 从崔牛会此前透露的信息来看,本次峰会将有六大亮点: 1、1份中国企业服务云图发布 崔牛会曾在2017年春季峰会发布了国内首张《中国企业服务云图》...
生产销售链条跟踪涉及环节,农产品的供应链是一个非常复杂的过程,涉及多方,农业局、卫生局、药监局、工商局、环保局等多个部门交织其中。
本文主要介绍卷积神经网络(CNN)的经典模型VGGNet的特点和网络结构,包括VGG16、VGG19等
Kubernetes 1.5正式发布StatefulSet,在Kubernetes 1.9 stable。这里将对StatefulSet进行解读分析,包括最佳实践、与Deployment的主要区别、Node网络异常等情况下处理方法以及在网络、存储、伸缩、滚动更新方面的原理解析等内容。下一篇博客将对StatefulSet Controller进行源码分析,相信一定会有其他收获。
作为职场老手的你,也许对服务化(SOA)并不陌生。当今 Web 2.0 架构如火如荼,越来越多的企业正在进行着服务化的改造,最为著名莫过于 Amazon 。
最近使用`consul`作为项目的服务注册与服务发现的基础功能。在塔建集群使用中遇到一些坑,下面一个个的记录下来。 ## consul集群多node consul集群的node也就是我们所说的consul实例。集群由多个node组成,为了集群的可用性,需要超过半数的node启用server。如5个node中起码3个启用server模式,3个node组成的集群就2个node启用server模式。 看到这里的时候你一定觉得没有什么问题呀,但是consul坑就是多。加入你的集群组成如下: ``` Node Address Status Type Build Protocol DC Segment BJ-MQTEST-01 10.163.145.117:8301 alive server 1.0.6 2 iget-topology-aliyun BJ-MQTEST-02 10.163.147.47:8301 alive server 1.0.6 2 iget-topology-aliyun BJ-TGO-01 10.163.145.110:8301 alive client 1.0.6 2 iget-topology-aliyun ``` 那么client可以使用上述的3个ip连接到consul集群,假设client A使用使用10.163.145.117注册了service,重启后使用地址10.163.145.110注册之前的service信息,此时你就会惊喜的发现,UI可以同时看到在同一个servicename下存在两个相同的serviceid。 这就是consul集群多node的坑,因为service底层虽然使用了KV存储,但是service的KEY与serviceid...
分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。 而twitter的SnowFlake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。 **关注公众号,搜云库,专注于开发技术的研究与知识分享,获取最新文章** ![搜云库](https://static.oschina.net/uploads/img/24519_ejux.jpg "在这里输入图片标题") # 原理 Twitter的雪花算法SnowFlake,使用Java语言实现。 SnowFlake算法产生的ID是一个64位的整型,结构如下(每一部分用“-”符号分隔): ``` 0 -
0 - 00000 - 00000 -
``` **1位标识部分**,在java中由于long的最高位是符号位,正数是0,负数是1,一般生成的ID为正数,所以为0; **41位时间戳部分**,这个是毫秒级的时间,一般实现上不会存储当前的时间戳,而是时间戳的差值(当前时间-固定的开始时间),这样可以使产生的ID从更...
前言 前面已经学习了Struts2和Hibernate框架了。接下来学习的是Spring框架...本博文主要是引入Spring框架... Spring介绍 Spring诞生: 创建Spring的目的就是用来替代更加重量级的的企业级Java技术 简化Java的开发 基于POJO轻量级和最小侵入式开发 通过依赖注入和面向接口实现松耦合 基于切面和惯例进行声明式编程 通过切面和模板**减少样板式代码 ** 侵入式概念 Spring是一种非侵入式的框架... 侵入式 对于EJB、Struts2等一些传统的框架,通常是要实现特定的接口,继承特定的类才能增强功能 改变了java类的结构 非侵入式 对于Hibernate、Spring等框架,对现有的类结构没有影响,就能够增强JavaBean的功能 松耦合 前面我们在写程序的时候,都是面向接口编程,通过DaoFactroy等方法来实现松耦合
private CategoryDao categoryDao = DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.CategoryDAOImpl", CategoryDao.class);
private BookDao bookDao = DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.BookDaoImpl", BookDao.class);
private UserDao userDao = DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.UserDaoImp...
摘要: 本着探究下iOS Crash捕获的目的,学习了下Crash捕获相关的Mach异常和signal信号处理,记录下相关内容,并提供对应的测试示例代码。Mach为XNU的微内核,Mach异常为最底层的内核级异常,在iOS系统中,底层Crash先触发Mach异常,然后再转换为对应的signal信号。 作者:阿里云-移动云-大前端团队 原文链接:http://click.aliyun.com/m/43672/ 本着探究下iOS Crash捕获的目的,学习了下Crash捕获相关的Mach异常和signal信号处理,记录下相关内容,并提供对应的测试示例代码。Mach为XNU的微内核,Mach异常为最底层的内核级异常,在iOS系统中,底层Crash先触发Mach异常,然后再转换为对应的signal信号。 1. iOS Mach异常 1.1 XNU Darwin是Mac OS和iOS的操作系统,而XNU是Darwin操作系统的内核部分。XNU是混合内核,兼具宏内核和微内核的特性,而Mach即为其微内核。 Darwin操作系统和MacOS、iOS系统版本号的对应如上图所示,Mac可执行下述命令查看Darwin版本号。 system_profiler SPSoftwareDataType 1.2 Mach Mach:[m?k],操作系统微内核,是许多新操作系统的设计基础。 Mach微内核中有几个基础概念: Tasks,拥有一组系统资源的对象,允许”thread”在其中执行。
该篇主要记录 druid 在 Spring Boot 中的 配置、单数据源、多数据源及动态数据源的使用
raft有和多种语言实现,其中在go语言中,etcd的实现是公认的典范,本文就是从源码级别探索etcd的raft是如何实现的,这样可以让我们一步一步了解raft论文是如何实现为一个工程的。
注:不清楚raft是什么的可以先去看我的另一篇文章https://my.oschina.net/fileoptions/blog/883497 例子
etcd将raft单独抽象、实现为一个模块,同时也为raft模块提供了一个基本例子,在etcd源码中,它就是contrib/raftexample,进到该目录下,我们可以首先看README,里面已经有非常详细的例子使用方法了,我这里就再赘述一次。
首先,我们在build之后,在目录下会产生一个raftexample的可执行文件,此时可以使用如下命令启动一个raft实例(single-member cluster): raftexample --id 1 --cluster http://127.0.0.1:12379 --port 12380
上面这条命令意思是,启动了一个raft实例的kv存储引擎,id选项用于指定本raft实例的id,cluster选项指定集群的成员地址信息,port选项指定kv存储引擎的服务端口。
启动成功之后,此时我们可以向存储引擎存储一个值: curl -L http://127.0.0.1:12380/my-key -XPUT -d hello
然后我们...
在进行网页或应用程序后台接口开发时,一般要及时测试开发的接口能否正确接收和返回数据,对于单次测试,Postman插件是个不错的Http请求模拟工具。
但是Postman只能模拟单客户端的单次请求,而对于模拟多用户并发等性能测试,就必须借助其他的工具了,这里推荐功能强大的JMeter自动化测试工具 Apache JMeter - Apache JMeter(TM) Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库, FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。 下面就以上图的Restful类型的接口为例简单介绍使用Jmeter进行接口测试的方法。 获取某个具体网关设备的基本信息。 请求 方法:GET URI:/api/gateway/&gateway_id& 参数: 在HTTP请求(http request)的头部(header)添加Userid和Token字段作为用户验证字段 参数名 必需 类型 说明 gateway_id true int 网关ID,置于URL内 响应 返回值:JSON格式的网关信息 参数: 参数...
如何在一个斜面上创建 3D 模型?如何通过拖拽创建 3D 模型?这些我们在实际项目中用到的概率也着实不低。我们知道,空间中存在无数个面,一个点和一条法线就能创建一个面,如何利用好这两个部分?
NSPredicate在iOS中提供了通用的查询描述方式,其可以用来处理集合,对象,CoreData以及Spotlight的查询操作。本篇博客主要总结NSPredicate在iOS开发中的应用,并通过代码示例来帮助初学者更快更容易的理解和使用谓词查询系统。
面向各部门组织的技术分享活动,一起探讨、学习,愿能有所得。
翻看了无数的文章没有找到一篇关于谈征信在区块链上怎么落地的文章。也在各种区块链微信群和QQ群中问了一圈,也没有人知道怎么落地。 现在的情况是大家都知道区块链做征信没问题,区中心化,不可撰改,简直是征信系统而设计的。那么怎么使项目落地呢?没有一篇文章谈到这个问题。可能有些大公司已经实现了,处于技术保密,没有分享。 看来只能靠自己了,以太坊和超级账本一直在研究,最近一段时间研究以太坊比较多,但是发现征信这个系统是在不适合在以太坊上实现,于是有回到超级账本上。
1. 问:你认为区块链技术中的区块意味着什么? 区块链由所有金融交易的信息组成。一个块只不过是一个记录列表。当这些列表相互结合时,它们被称为区块链。例如,一个组织有100个分类账簿,其中的组合被称为区块链,单个分类账将被视为一个区块。 2. 问:为什么区块链是一种值得信赖的方法 有很多原因,区块链可以被信任。第一个原因是它与其他商业应用程序有良好的兼容性,因为它是开源的。其次是它的安全性,因为它是为了在线交易而开发的,所以开发人员在保证安全性的同时也特别关注它的数据同步。由于其拥有的业务类型无关,所以在选择的时候区别链很容易地被考虑。 3. 问:区块链中是否有可能从网络中删除一个或多个区块? 当然可以,如果只考虑该在线分类帐的特定部分的时候。借助默认选项和过滤器,可以轻松完成此任务,而不需要付出太多。 4. 问:你对区块链了解多少? 这是一种实际上为比特币设计的技术,后来因为监控和记录网络上所有金融交易而带来的多种好处而获得了大量的推广。这是一种值得信赖的方法,目前情况下有很多组织正在使用它。由于一切都是十分安全的,并且它是一种开源方式,所以从长远来看,它可以轻松获得大家的信任。 5. 问:区块链方法如何识别...
本文将介绍常量池 与 装箱拆箱机制,之所以将两者合在一起介绍,是因为网上不少文章在谈到常量池时,将包装类的缓存机制,java常量池,不加区别地混在一起讨论,更有甚者完全将这两者视为一个整体,给初学者带来不少困扰,我就是过来的。同时,也因为包装类的缓存 与 字符串常量池的思想是一样的,很容易混淆,但是实现方式是不一样的。 ###一、常量池 在介绍常量池前,先来介绍一下常量、字面常量、符号常量的定义。 **常量** 可分为 **字面常量**(也称为直接常量)和 **符号常量**。 **字面常量**: 是指在程序中无需预先定义就可使用的数字、字符、boolen值、字符串等。简单的说,就是确定值的本身。如 10,2L,2.3f,3.5,“hello”,'a',true、false、null 等等。 **符号常量**: 是指在程序中用标识符预先定义的,其值在程序中不可改变的量。如 `final int a = 5`; **常量池**
常量池引入的 **目的** 是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。这是一种 享元模式 的实现。 ##二、 java常量池 Java的常量池可以细分为以下三类: - 量池,编译阶段) - 运行时常量池(又称动态常量池,运行阶段) - 字符串常量池(全局的...
HashMap 数据结构
图中的 "table" 在 HashMap 中是一个 Node&K,V& 数组 。HashMap 内部数据结构是由数组、链表、树形结构组合而成的。
什么是hash?
百度百科:hash 一般被翻译为 “散列”, 也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 wikipedia :
哈希函数 : 哈希函数就是能将任意长度的数据映射为固定长度的数据的函数。哈希函数返回的值被叫做哈希值、哈希码、散列,或者直接叫做哈希。一个使用场景就是哈希表,哈希表被广泛用于快速搜索数据。 哈希表:哈希表是一种能实现关联数组的抽象数据结构,能把很多「键」映射到很多「值」上。哈希表使用哈希函数来计算索引,一个索引对应一个值。
HashMap 初始化 // initialCapacity 初始化容量大小
// loadFactor 负载因子
public HashMap(int initialCapacity, float loadFactor) {
if (initialCapacity & 0)
Elasticsearch source filter检索案例分享 1.准备工作 参考文档《高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端 先理解一下es source filter作用:通过_source,控制查询结果中,哪些source字段要返回,哪些source字段不需要返回,source filter的dsl定义语法如下: {
"_source": {
"includes": [ "obj1.*", "obj2.*" ],
"excludes": [ "*.description" ]
"query" : {
"term" : { "user" : "kimchy" }
} 2.定义source filter dsl语句 在DocumentCRUD 案例对应的dsl配置文件esmapper/demo.xml中添加searchSourceFilter:
&property name="searchSourceFilter"&
&![CDATA[{
#if($includes || $excludes) ## 只有指定了includes或者excludes才需要添加source filter
"_source": {
#if($includes && $includes.size() & 0) ##设置includes filter
"includes": [
#foreach($include in $includes)
#if($velocityCount & 0),#end "$inc...
详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
推荐一款markdown文档的编辑神器,名字叫做mark text,可以从这里下载 https://github.com/marktext/marktext/blob/master/doc/i18n/zh_cn.md#readme 使用效果: 项目中的本地文档 marktext编辑效果: 编辑的时候可以直接看到效果
1、环境下载 通过官方下载地址(https://download.qt.io/official_releases/qt/)下载最新版本的QT开发环境 下载完成后双击应用,skip(跳过)注册后,选择配置(基础配置仅选择MinGW和MSVC两项),如下图: 2、创建项目 指定项目名称和路径 选择开发工具包(只选择MinGW) 下拉框里选中新建项目 3、发布项目 选择Release进行项目发布 在程序发布时执行文件会报缺少动态链接库的错误 使用QT自带的MinGW命令窗口(注:普通的Dos窗口运行命令还会导致引入的包不全而报错) 切到项目Release目录,运行命令 windeployqt helloworld.exe 执行helloworld.exe后成功显示发布程序
错过了这一篇,你可能再也学不会 Spring Cloud 了!Spring Boot做为下一代 web 框架,Spring Cloud 作为最新最火的微服务的翘楚,你还有什么理由拒绝。赶快上船吧,老船长带你飞。终章不是最后一篇,它是一个汇总,未来还会写很多篇。 案例全部采用Spring Boot 1.5.x ,Spring Cloud版本为Dalston.RELEASE 码农下载:https://git.oschina.net/forezp/SpringCloudLearning
github下载:https://github.com/forezp/SpringCloudLearning,记得star哦! CSDN专栏汇总:史上最简单的 SpringCloud 教程 《史上最简单的 SpringCloud 教程》系列: 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka) 史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon) 史上最简单的SpringCloud教程 | 第三篇: 服务消费者(Feign) 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix) 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul) 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config) 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config) 史上最简单的SpringCloud教程 | 第八篇: 消息总...
待分析的数据文件格式,内容为nginx的日志记录,内容已经被处理过,已经转为只记录ip和url的txt文件,内容如下: rdd读取txt文件:
public static void rdd(){
SparkConf conf = new SparkConf().setAppName("name_rdd").setMaster("local[4]");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD&String& logRdd = sc.textFile(textFile);
JavaRDD&LogInfo& infoRdd = logRdd.map(new Function&String, LogInfo&() {
public LogInfo call(String line) throws Exception{
String[] strs = line.split(" ");
LogInfo log = new LogInfo();
if(strs.length == 2){
//LogInfo log = new LogInfo();
log.setIp(strs[0]);
log.setUrl(strs[1]);
log.setIp("");
log.setUrl("");
rdd1(infoRdd);
rdd2(infoRdd);
系统信息: [root@nfs01 ~]# uname -r
2.6.32-696.el6.x86_64
[root@nfs01 ~]# uname -m
[root@nfs01 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
更改yum源 mv /etc/yum.repos.d/CentOS-Base.repo{,.$(date +%F_%T).backup}
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum makecache 关闭SELinux
\cp /etc/selinux/config{,.$(date +%F_%T).backup}
sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config
grep 'SELINUX=disable' /etc/selinux/config
setenforce 0
getenforce 关闭iptables
/etc/init.d/iptables stop
/etc/init.d/iptables stop
chkconfig iptables off 精简开机自启动服务
export LANG=en
chkconfig --list | egrep "3:on"|egrep -v "crond|network|sshd|rsyslog|sysstat" | awk '{print "chkconfig",$1,"off"}' | bash
chkconfig --list | grep 3:on 提权abc可以sudo
useradd abc
\cp /etc/sudoers{,.$(date +%F_%T).backup}
echo "abc ALL=(ALL) NOPASSWD:ALL...
Tools——Tool Properties ![DbVisualizer 中文乱码](https://static.oschina.net/uploads/img/00627_HB6G.png "DbVisualizer 中文乱码1") General——Appearance——Fonts 右侧Font Settings : Grid 、SQL Editor/Text Editor 两项设置为微软雅黑字体。 ![DbVisualizer 中文乱码2](https://static.oschina.net/uploads/img/00712_7tWx.png "DbVisualizer 中文乱码2")
TCP连接简介 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接, 当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接, 连接的建立是需要三次握手的,而释放则需要4次握手, 所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图:
经典的四次握手关闭图:
一、长连接与短连接 长连接: 指在一个TCP连接上可以连续发送多个数据包,
在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接;
一般需要自己做在线维持。
短连接: 指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接;
一般银行都使用短连接。
它的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段
比如http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。
其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。 长连接与短连接的操作过程
通常的短连接操作步骤是:
连接→数据传输→关闭连接; 而长连接通...
2台主机,一个server包含2个容器进程(可以是多个),一个负载均衡容器(貌似是依赖haproxy的) 1,创建一个镜像,编辑Dockerfile 创建镜像,里面使用了wsgi 创建简单的web应该,能返回主机号。 文件放在https://gitee.com/jpython/python2.7-dockerfile.git 使用docker build -t 'fu/bl_test2' .创建镜像 成功之后docker images可查看到有效镜像 2,讲镜像导出导入,使各个主机均有镜像,使用 docker save -o fu-bl_test2.rar fu/bl_test2
scp -P 9187 fu-bl_test2.rar root@xx.xxx.xx.xx:/root/ docker load -i fu-bl_test2.rar 3,在rancher web 界面,创建应用-创建服务(注意写对镜像名称)开启2个80端口的容器-创建负载均衡指定某端口指定server 的80端口 访问地址之后可发现每次访问都会返回服务里面的不同主机的不同容器的host,成功!
金三已经过去,现在是银四,据我了解,好多人都会在三月份选择跳槽,为什么大家都会在三月份选择离职跳槽呢?那当然是新年刚刚过去,大家也许是觉得老公司待遇不怎么样?薪资不够高,想换个新环境等等原因,所以,三月份就变成了招聘与跳槽的旺季,那为什么四月份就比不上三月份呢?相信不用我说大家也知道,毕竟三月份大家都去凑热闹,都去招聘与面试了,四月份还剩下来的招聘与面试的人就寥寥无几了,而且四月份还没找到工作的可以用老油条来这么说也不为过,且四月份公司还招人的,那几本找的都是些大牛了。 那为什么我要说银四比金三火呢?因为,大多数人多觉得,四月份的工作难找,且薪资也不会很高,环境还不知道好不好,而且要求的还很多,面试也难面等等说法,但据我了解到的,四月份的就业情况要比三月份的好,待遇,薪资,环境等,都要比三月份的好。据我从一个好友James哪里了解到的,就在前几天,他带的两个学员,成功面试上了阿里,且还帮我整理哪两个学员的面试总结,在此,我分享给大家,希望大家在四月份要找工作的朋友,我的这篇文章能给你有所帮助。
那来两位学员我分别用A和B来代替
第一轮:电话初面 第二轮:技术...
可以通过 kubectl get secret 查看存在的 secret。
MagicLeap(https://www.magicleap.com/)是一个先进的混合现实(MR,Mixed Reality)头戴式设备,预计在2018年会发布开发者版。不过,在硬件设备推出之前,2018年3月已经发布了其开发SDK,下面我们来体验一下。
前言 在 Android 中,任何耗时的操作都不能放在 UI 线程中,所以耗时的操作都需要使用异步加载来实现。其实,加载耗时数据的常用方式其实也挺多的,就让我们来看一下 1、Thread + Handler Thread + Handler 2、AsyncTask AsyncTask 3、Loader
Loader 前面两种异步加载方式,相信大家是比较熟悉的,但是第三种方式,可能有些人是没怎么接触过的,其实在 ContentProvider 中也可能存在耗时的操作,这时候也应该使用异步操作,而 Android 3.0 之后最推荐的异步操作就是 Loader,使用 Loader 机制能让我们高效地加载数据。 一、Loader 简介 Android 3.0 中引入了 Loader 机制,让开发者能轻松在 Activity 和 Fragment 中异步加载数据,Loader 机制具有以下特征: 可用于每个 Activity 或 Fragment 支持异步加载数据 监控数据源并在内容变化时传递新结果 在某一配置更改后重建加载器时,会自动重新连接上一个加载器的游标。因此,它们无需重新查询其数据。 我们用一张图来直观地认识下 Loader 机制和另外两种做法之间的区别
从图片中可以看出 Loader 机制的写法是相当简洁的,可以让我们进行快速的开发,而且效率方面也是非常高的。 二、相关类和 API 介绍 本节内容大部分...
我在使用 memcache 来替代 file作为session的后端存储的时候,出现了 Failed storing data in memcached, error code: 47 的bug,一开始我以为是memcache的配置引起的。最后发现原来是由于memcache的php扩展造成的。 我的开发机php的memcache扩展是2.2.0,这个扩展是在发布的。相对于我使用的phalcon 3.2.4(发布时间是)确实落后了3年多的时间。 造成了由于memcache的扩展太老而没有用到它的新特性的问题。进而造成的上面的错误。 ================= memcached的php扩展从3.x开始支持PHP7了,如果你的PHP版本5.x,请使用memcahce2.2.0版本。这个就误解了。为了使用memcached我需要升级php7了?
#coding:utf-8
通过摄像头识别一维条形码
import cv2
from pyzbar.pyzbar import decode
# results = decode(cv2.imread('datas/images/barcode-3.jpg'))
# for result in results:
print('barcode = %s'% str(result.data))
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print('cannot open camera 0')
while True:
ret,frame = cap.read()
if not ret:
print('cannot grab frame from camera')
results = decode(frame)
for result in results:
print('barcode = %s' % result.data)
barcode_roi = frame[result.rect.left:result.rect.width,result.rect.top:result.rect.height]
cv2.imshow('barcode:%s' % result.data,barcode_roi)
cv2.imshow('camera',frame)
key = cv2.waitKey(10)
if key == 27:
cv2.destroyAllWindows()
Oracle 查看表空间的大小及使用情况sql语句
这里注意获取镜像的时候要获取management版本的,不要获取last版本的,management版本的才带有管理界面。 # 获查询镜像 ``` docker search rabbitmq:management ``` 可以看到如下结果: ``` [root@localhost ~]# docker search rabbitmq:management INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/macintoshplus/rabbitmq-management Based on rabbitmq:management whit python a... 1 [OK] docker.io docker.io/transmitsms/rabbitmq-sharded Fork of rabbitmq:management with sharded_e... 0 [root@localhost ~]# ``` #获取镜像 ``` docker pull rabbitmq:management ``` 可以看到如下结果 ``` [root@localhost ~]# docker pull rabbitmq:management Trying to pull repository docker.io/library/rabbitmq ... management: Pulling from docker.io/library/rabbitmq e7bb522d92ff: Pull complete ad: Pull complete 5a318b914d6c: Pull complete cedd60f70052: Pull complete f4ec: Pull complete b8fa44aa9074: Pull complete e: Pull complete cd1206edcd43: Pull complete 769be0727074: Pull complete 7308b...
详细解读阿里巴巴开源技术,包括框架、组件、引擎、数据库/存储、平台/系统、解决方案、工具、中间件、Web Sever、设计等十大类73款!
转眼间,春风又绿江南岸,2018 年悄然过去了四分之一,开发者的热情也似乎正在被回暖的天气点燃。2、3月份,开源中国社区总共收录了近 400 个项目。弱水三千取一瓢,我们从每月新增的开源项目挑选了几个和大家一起分享。
![](http://i.imgur.com/vhdeDvX.png) 附上: 喵了个咪的博客:[w-blog.cn](w-blog.cn) EMQ官方地址:[http://emqtt.com/](http://emqtt.com/) EMQ中文文档:[http://emqtt.com/docs/v2/guide.html](http://emqtt.com/docs/v2/guide.html) ## 1.ACL鉴权规则化 在正常业务使用下对于客户端的行为可以使用ACL进行限制,比如A客户端只能订阅 /A/get 队列消息和向 /A/set 发布内容 但是在MYSQL里面处理这样的鉴权就需要写入两条记录,如果设备量有一百万数据库就要承担两百万条鉴权数据量会大大影响数据库的性能 那么有没有什么批量的方式来定义ACL鉴权呢? 在mysql-ACL鉴权的配置文件下关于如何使用鉴权的SQL是可以编辑的,也就意味着你可以通过SQL来实现批量ACL鉴权规则 ```bash & vim /usr/local/emqttd/etc/plugins/emq_auth_mysql.conf # 最下面有这样一条配置 auth.mysql.acl_query = select allow, ipaddr, username, clientid, access, topic from mqtt_acl where ipaddr = '%a' or username = '%u' or username = '$all' or clientid = '%c' ``` 笔者这里就实现每个设备默认可以订阅 /A/get 队列消息和向 /A/set 发布 ![](http://pic.w-blog.cn/ADE78396-BF03--07F04...
### 新增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"} } ```...
```java @GetMapping("/download") public void download(HttpServletResponse response, @RequestParam String path) throws Exception { // 让servlet用UTF-8转码,默认为ISO8859 response.setCharacterEncoding("UTF-8"); File file = new File(path); if (!file.exists()) { // 让浏览器用UTF-8解析数据 response.setHeader("Content-type", "text/charset=UTF-8"); response.getWriter().write("文件不存在或已过期,请重新生成"); } String fileName = URLEncoder.encode(path.substring(path.lastIndexOf("/") + 1), "UTF-8"); response.setContentType("text/csv"); response.setHeader("Content-Disposition", String.format(" filename=\"%s\"", fileName)); InputStream is = OutputStream os = try { is = new FileInputStream(path); byte[] buffer = new byte[1024]; os = response.getOutputStream(); while((len = is.read(buffer)) & 0) { os.write(buffer,0, len); } }catch(Exception e) { throw new RuntimeException(e); }finally { try { if (is != null) is.close(); if (os != null) os.close(); } c...
# 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...
### 写在开头 ``` 使用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...
### 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' ] }...
![这里写图片描述](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失效, 重新请求一下登录接口即可...
## 更新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,自动生效 ```...
### 免登陆 ``` # 生成秘钥 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 选择 项目根目录 ```...
遇见这个问题,是公司的小伙伴跟我说,每次使用mybatis的时候,简单的连表查询,用Map接收的时候,都是像DB定义的字段一样,类似以下 student_name,student_id,没有转换为驼峰,但是又不能因为这一个定义一个javabean来映射数据库字段集合,这样,会有无穷无尽的javabean,完全不是办法,然后我看了下mybatis-spring-boot的配置文档http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/,发现有这么个属性
mybatis.configuration.map-underscore-to-camel-case=true 看着属性意思,很像是 map 下划线转换为驼峰,然后我天真的以为,加个这个,就会将Map里面的key转换为驼峰的命名方式,然后我自己测试了一下,发现自己还是太天真,没转过来,该是什么还是什么(心里面是B了狗了).... 没办法,接着找了了一下,发现官方文档http://www.mybatis.org/mybatis-3/configuration.html#properties,描述过这个的作用
才发现,这个属性的作用,是作用于javabean的field的,并不是map,ㄟ( ▔, ▔ )ㄏ,那没办法了,只能自己动手了
-------------------------------我是分割线-------------------------------------- 既然 map-underscore-to-camel-case 不能作用于map,那么...
# 02:WebFlux 快速入门实践 ## Spring Boot 2.0 spring.io 官网有句醒目的话是: ``` BUILD ANYTHING WITH SPRING BOOT ``` Spring Boot (Boot 顾名思义,是引导的意思)框架是用于简化 Spring 应用从搭建到开发的过程。应用开箱即用,只要通过一个指令,包括命令行 `java -jar` 、`SpringApplication` 应用启动类 、 Spring Boot Maven 插件等,就可以启动应用了。另外,Spring Boot 强调只需要很少的配置文件,所以在开发生产级 Spring 应用中,让开发变得更加高效和简易。目前,Spring Boot 版本是 2.x 版本。Spring Boot 包括 WebFlux。 ![image](http://upload-images.jianshu.io/upload_images/adf?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## Spring Boot 2.0 WebFlux 了解 WebFlux ,首先了解下什么是 Reactive Streams。Reactive Streams 是 JVM 中面向流的库标准和规范: - 处理可能无限数量的元素 - 按顺序处理 - 组件之间异步传递 - 强制性非阻塞背压(Backpressure) **Backpressure(背压)** 背压是一种常用策略,使得发布者拥有无限制的缓冲区存储元素,用于确保发布者发布元素太快时,不会去压制订阅者。 **Reactive S...
前言 声明,本文用的是jdk1.8 花了一个星期,把Java容器核心的知识过了一遍,感觉集合已经无所畏惧了!!(哈哈哈....),现在来总结一下吧~~ 回顾目录: Collection总览 List集合就这么简单【源码剖析】 Map集合、散列表、红黑树介绍 HashMap就是这么简单【源码剖析】 LinkedHashMap就这么简单【源码剖析】 TreeMap就这么简单【源码剖析】 ConcurrentHashMap基于JDK1.8源码剖析 Set集合就这么简单! Java容器可分为两大类: Collection List ArrayList LinkedList Vector(了解,已过时) Set HashSet LinkedHashSet TreeSet Map HashMap LinkedHashMap TreeMap ConcurrentHashMap Hashtable(了解,,已过时) 着重标出的那些就是我们用得最多的容器。 其实,我也不知道要怎么总结好,因为之前写每一篇的时候都总结过了。现在又把他们重新罗列出来好像有点水,所以,我决定去回答一些Java容器的面试题! 当然了,我的答案未必就是正确的。如果有错误的地方大家多多包含,希望不吝在评论区留言指正~~ 一、ArrayList和Vector的区别 共同点: 这两个类都实现了List接口,它们都是有序的集合(存储有序),底层是数组。我们可以按位置索引号取出某个元素,允许元素重复和为null。 区别...
& 本系列是「RabbitMQ实战:高效部署分布式消息队列」书籍的总结笔记。 上一篇总结了可能出现的异常场景,并对RabbitMQ提供的可用性保证进行了分析,在出现服务器宕机后,仍然可以正常服务。另外,需要尽快恢复异常的服务器,重新加入集群,推送未消费的消息,通过监控可第一时间接收到错误并进行处理。 另外,我们想主动了解消息堆积和消费的情况,以及服务器节点的压力,RabbitMQ提供了几种方式便捷、直观的了解,包括Web管理插件、REST API、rabbitmqadmin脚本。 通过介绍,你会了解到: * web管理插件 * REST API * rabbitmqadmin脚本 * Nagios和监控RabbitMQ ### web管理插件 RabbitMQ的插件是由Erlang语言写的,并且和服务器一同运行在同一个Erlang VM中,通过下面的命令启用web管理插件: ``` java sudo ./rabbitmq-plugins enable rabbitmq_management ``` 启动之后,访问15672端口,可看到Web管理页面主页面: ![RabbitMQ主页面](http://oc3r3rke2.bkt.clouddn.com/70.jpg) ##### 添加用户 默认会提供一个默认用户guest,密码也是guest,线上环境需要创建一个新用户,并把guest用户删除。 首先切换到Admin标签页,可以查看或添加用户,添加用户时,可...
# 环境要求 1、Java SDK 1.8 [下载](http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html) 2、Eclipse IDE for Java EE Mars 2 (4.5.2) [下载](https://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/mars2) 3、Apache Maven 3.3+ [下载](https://maven.apache.org/download.cgi) 4、MySql 5.7+ [下载](https://dev.mysql.com/downloads/windows/installer/5.7.html) # 导入到Eclipse 1、检出JeeSite4源代码: ``` git clone https://gitee.com/thinkgem/jeesite4.git ``` 2、拷贝`web`文件夹,到你的工作目录(不包含中文和空格的目录)下,重命名为你的工程名,如:`jeesite-demo` 3、打开`pom.xml`文件,修改第13行,artifactId为你的工程名,如:`jeesite-demo` 4、导入到Eclipse,菜单 File -& Import,然后选择 Maven -& Existing Maven Projects,点击 Next& 按钮,选择第2步的`jeesite-demo`文件夹,然后点击 Finish 按钮,即可成功导入 5、这时,Eclipse会自动加载Maven依赖包,初次加载会比较慢(根据自身网络情况而定),若工程上有小叉号,请打开Problems窗口,查看具体错误内容,直到无错误为...
索引对大数据的查询速度的提升是非常大的,Explain可以帮你分析SQL语句是否用到相关索引。
Shiro可以帮助你完成安全模块的设计与实现,减少代码侵入性,轻松高效地解决安全需求。
Python3中的函数介绍: 1.函数的定义 , 2.函数的调用, 3.函数的参数, 4.函数的返回值, 5.函数的变量, 6.匿名函数, 7.高阶函数
微服务架构中的应用优雅停机主要是指应用实例有计划而平滑(即不产生需要处理的事故)的退出。
Session,强制下线
MutationObserver是HTML5新增的属性,用于监听DOM修改事件,能够监听到节点的属性、文本内容、子节点等的改动,是一个功能强大的利器,基本用法如下:
//MO基本用法
var observer = new MutationObserver(function(){
//这里是回调函数
console.log('DOM被修改了!');
var article = document.querySelector('article');
observer.observer(article);
时代的潮流浩浩荡荡,上升到国家发展战略与基础设施的人工智能,正以不可思议的速度占据着我们生活的头条。如果说2017年宣告了人工智能接棒时代脉搏,那么2018年的人工智能将作为颠覆性变革力量迭代世界机器的运作。
我在几家不同的公司从事反垃圾邮件,防病毒和反恶意软件行业工作超过15年,现在我知道这些系统最终会因为我们每天处理的大量数据而变得复杂。 目前,我是smsjunk.com的CEO和KnowBe4的首席架构师,他们都是网络安全行业的公司。 有趣的是,在过去的10年左右,作为一名软件工程师,我参与过的所有Web后端开发大部分都是在Ruby on Rails中完成的。不要误会我的意思,我喜欢Ruby on Rails,我相信这是一个了不起的环境,但是过了一段时间,你开始用ruby的方式思考和设计系统,而且如果你忘记了软件架构的效率和简单性-可以利用多线程,并行化,快速执行和小内存开销。多年来,我是一名C / C ++,Delphi和C#开发人员,而且我刚开始意识到使用正确的工具进行工作可能会有多复杂。 我对互联网总是争论的语言和框架战争并不太感兴趣。`我相信效率,生产力和代码可维护性主要取决于您构建解决方案的简单程度。` ## 问题 在处理我们的匿名遥测和分析系统时,我们的目标是能够处理来自数百万端点的大量POST请求。Web处理程序将收到一个JSON文档,该文档可能包含需要写入Amazon S3的多个有效内容的集合,以便我们的map-reduce系统稍后对这些数据进行操作。 传统上,我们会考虑创建一个...
开发所需要知道的网站
Sapera LT 是加拿大 Teledyne DALSA 公司出品的工业相机软件服务平台,支持C++和.Net 平台进行开发。在工业相机领域是领先世界的行业巨头。
## arrow函数 ```py matplotlib.pyplot.arrow( x, y, dx, dy, hold=None, **kwargs) ``` ## 参数 x, y : 箭头起点坐标 dx, dy : 箭头x上的长度和y轴上的长度 width: 箭头宽度,默认0.001 length_includes_head: bool,箭"头"是否包含在长度之中 默认False head_width: float,箭"头"的宽度,默认: 3*width head_length: float 箭"头"的长度,默认1.5 * head_width shape: [‘full’, ‘left’, ‘right’],箭头形状, 默认 ‘full’ overhang: float (default: 0) head_starts_at_zero: bool (default: False)开始坐标是否是0 ## 返回值 [FancyArrow](https://matplotlib.org/api/_as_gen/matplotlib.patches.FancyArrow.html#matplotlib.patches.FancyArrow) ## 参数对比实例 ```py # -*- coding:utf-8 -*- import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation ax = plt.subplot(331) ax.arrow(0, 0, 0.5, 0.5, width=0.05) ax.set_title("0, 0, 0.5, 0.5, width=0.05") ax = plt.subplot(332) ax.arrow(0, 0, 0.5, 0.5, width=0.05,length_includes_head=True) ax.set_title("0, 0, 0.5, 0.5, width=0.05,length_includes_hea...
1.自定义异常 就是我们自己重新定义一个异常类,继承runtimeException
public class UserNameAlreadyExistsException
extends RuntimeException{
private static final long serialVersionUID = 1L;
public UserNameAlreadyExistsException(String message) {
super(message);
2.判断是否会出现异常
//2.检查用户名是否被占用
count = userMapper.getUserCount (userName);
//3.如果被占用则抛出自定义异常
if (count&0) {
throw new UserNameAlreadyExistsException(GlobaleMessage.USERNAME_ALREADYEXISTS);
3.在GlobaleMessage类中定义常量 public class GlobaleMessage {
public static final String USERNAME_ALREADYEXISTS = "用户名已存在,请重新注册!";
4.在MVC文件中配置 &!-- 配置ExceptionMapping统一管理项目中的异常 --&
&bean id="simpleMappingExceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"&
&property name="exceptionMappings"&
&!-- key属性:异常全类名,“开始和结束标签之间部分”:捕获到异常...
Win32 程序调用 DLL 的机制
   Win32 EXE 在调用一个外部 DLL 中的函数时,首先要调用 LoadLibary 函数来载入此 DLL 到程序的进程地址空间。如果 LoadLibary 载入此 DLL 成功,将返回一个该 DLL 的句柄。 这个句柄实际上就是该 DLL 在内存中的起始地址。 在载入 DLL 成功后,还必须调用 GetProcAddress 函数来获取要调用的函数的地址。然后再根据该地址来调用这个函数。 根据上述原理,我们可以把一个 DLL 作为资源文件放到 EXE 文件中,在程序运行时,分配一块内存,然后将此资源复制到该分配的内存中,并根据该内存地址计算得到相关的导出函数地址,然后,当我们需要调用某一函数时,可以用该函数在内存中的地址来调用它。 程序实现。   首先,把要合并的 DLL 作为资源加入到项目的资源文件中,然后在程序运行时,从资源中载入该资源,以得到该 DLL 在内存中的位置: LPVOID sRawD // 资源文件在内存中的地址
HMODULE hL
HGLOBAL hResourceL
char lib_name[MAX_PATH];
GetModuleFileName(hInstance, lib_name, MAX_PATH ); // 得到运行程序的名字
hLibrary = LoadLibrary(lib_name);
// 就象载入一个 DLL 一样...
李飞飞学生新作:利用场景图生成图像
一、什么是SQL语言
SQL( Structure Query Language)翻译过来就是结构化查询语言,集数据定义、数据查询、数据操纵和数据控制功能于一体的语言,具有功能丰富、使用灵活、语言简捷易学等特点。在1974年 Boyce和 Chamberlin提出的,后来由IBM公司研制的关系数据库 System R采用了这个语言,经过多年发展,SQL语言已经成为关系数据库的标准语言。
SQL语言主要由以下几部分组成的: DML( Data Mani pulation Language数据操作语言)用来查询、插入、删除和修改数据中的数据,如提供的 Select、 Insert、Update、Delete等常用命令。 DDL(Data Definition Language数据定义语言):DDL比DML要多,DDL主要是用在定义或改变表(Table)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。 DCL( Data Control Language数据控制语言):用来管理数据库用户的权限、数据性、安全性、并发性等数据库管理操作。 二、SQL和T-SQL区别
T-SQL 即 Transact-SQL,是 SQL 在 Microsoft SQL Server 上的增强版,它是用来让应用程式与 SQL Server 沟通的主要语言。 支持变量声明 有if、switch、while等控制语句 预存储程序和内置函数 三、使...
在组织部项目中使用的Combobox都是通过&input&标签实现的,如下:
&input id="checkPlace" class="easyui-combobox" name="checkPlace"
data-options="valueField:'id',textField:'text',url:'/DevelopmentBasicInfo/queryType'" value="全部"&可见通过url地址就可以将具体函数的返回值充当下拉框中的选项。
情景再现:
如图,从下拉框中获取一个值,传到Controller中:
在js中获取下拉框的值
查看相关Controller中的代码:
问题就出在这里了,将CityID和CityName分别赋值给id和text,结合&input&标签: &input id="checkPlace" class="easyui-combobox" name="checkPlace"
data-options="valueField:'id',textField:'text',url:'/DevelopmentBasicInfo/queryType'" value="全部"&
使用easyui之后,对于Combobox来说,获值有两种选择,"getValue‘和“getText”的选择源于我们对combobox在data-option中的设定,“valueField:”和“textField:”对应了getValue和getText,这样子对于键值对的选取就避免了多次的I/O操作(编码和性能都提升),很方便。
Additio...
今年Mac os用户必须要更新,系统自带的python版本了。因为pypi将停止对TLS 1.0和1.1的支持, MacOS附带的系统Python在任何MacOS版本中都不支持TLSv1.2。
平时管理着多台服务器,需要nginx做转发, 有时数据迁移,但是图片的路径写死了,这是可以使用rewrite
我觉得进化有两种,一种是基因的进化,一种是文明的进化。 从基因层面讲,人类已经停止进化了?进化首先要有筛选机制,好的进化能够传给下一代。不好的基因,因无法找到配偶而无法传递给下一代。 在猴群中,如果以是否强壮作为筛选机制,越强壮的猴子就能获得越多的交配权,那么导致强壮的基因就会通过猴王传递给下一代,而导致弱小的基因就因无法传递给下一代,而灭绝,因此整个猴群中的猴子会原来越强壮。如果以是否聪明作为筛选机制,越聪明的猴子就能获得越多的交配权,那么导致聪明的基因就会传递给下一代,而导致不聪明的基因就因无法传递给下一代,而灭绝。因此整个猴群中的猴子会变得越来越聪明。 然而在人类族群中,特别是到期近代,一夫一妻制以后,不管这个人是有更聪明的基因,还是更强壮的基因都无法拥有更多的下一代,而把良好的基因传递下去。而且随着经济越来越发达, 越聪明的人,拥有的下一代越少。反而一般人却拥有的下一代更多。这让我想起了美国的一部电影《蠢蛋进化论》,就是由于这个原因,而导致了人类整体智商不断下降。 所以,在人类族群中,因变异而产生的好基因,因无法拥有更多的下一代,而无法让这个好基因传递给更多的人,而导致人类在基因...
目标:   Tomcat+Nginx+Memcached   Ubuntu 16.04 64位测试通过   动静分类、负载均衡、集群、Javolution序列化、高性能、高可用 配置环境(目前均为最新稳定版):   jdk-8u131-linux-x64   apache-tomcat-8.5.14   nginx-1.12.0   memcached-1.4.36 写在前面:   原本打算配置kryo序列化框架的,却怎么也弄不成功,只能用Javolution了   如果最后发现不成功一般问题都会出在Tomcat,看看日志解决   tomcat下可以部署多个项目,并且依旧动静分类   nginx配置了将jsp,servlet,do文件后缀交给Tomcat处理,可以根据情况添加   如果不使用root账号运行nginx的话,nginx的user配置是没用的   Tomcat,nginx都进行了优化配置,无需修改原工程的任何内容,直接放到Tomcat/webapps里即可 过程:   过程较长,请仔细 #sudo passwd
#使用管理员来进行配置
#更新软件列表
apt-get update
#安装所需依赖文件
apt-get install gcc zlib1g zlib1g-dev openssl libssl-dev libpcre3 libpcre3-dev libevent-dev
#重启(建议)
#安装配置JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133...
今天将真正去看dubbo内部的实现过程,看dubbo的源码前我先把dubbo的用户指南和开发指指南大概的看了一遍,这样再看dubbo源码比较轻松。从用户指南和开发指指南可以找到相应的切入点,今天将介绍的是dubbo的初始化解析bean的过程: 解析服务 基于dubbo.jar内的META-INF/spring.handlers配置,Spring在遇到dubbo名称空间时,会回调DubboNamespaceHandler。 所有dubbo的标签,都统一用DubboBeanDefinitionParser进行解析,基于一对一属性映射,将XML标签解析为Bean对象。 在ServiceConfig.export()或ReferenceConfig.get()初始化时,将Bean对象转换URL格式,所有Bean属性转成URL的参数。 然后将URL传给Protocol扩展点,基于扩展点的Adaptive机制,根据URL的协议头,进行不同协议的服务暴露或引用。 dubbo服务的暴露调用的是:ServiceConfig.export()代码如下: com.alibaba.dubbo.config.ServiceConfig#export //暴露服务
public synchronized void export() {
if (provider != null) {
if (export == null) {
export = provider.getExport();
if (dela...
如果在spring boot的配置文件中的数据源,在application.properties配置文件总加入以下配置即可: 1 mybatis.configuration.mapUnderscoreToCamelCase=true
3 mybatis.configuration.map-underscore-to-camel-case=true 如果是单独配置的数据源,则需要设定SqlSessionFactory中的 Configuration中的属性 mapUnderscoreToCamelCase 为 true 注意是这个类:org.apache.ibatis.session.Configuration package com.moon.robot.dataS
import com.alibaba.druid.pool.DruidDataS
import org.apache.ibatis.session.SqlSessionF
import org.mybatis.spring.SqlSessionFactoryB
import org.mybatis.spring.SqlSessionT
import org.mybatis.spring.annotation.MapperS
import org.springframework.beans.factory.annotation.Q
import org.springframework.boot.context.properties.ConfigurationP
import org.springframework.context.annotation.B
import org.springframework.context.annotation.C
import org.springframework.core.io.support.PathMatchingResourcePatternR
import org...
下面简单实现INotifyPropertyChanged接口 using S
using System.ComponentM
using System.Linq.E
using System.R
namespace LearnBinding.Model
public class ObservableObject : INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyC
public ObservableObject()
protected PropertyChangedEventHandler PropertyChangedHandler { }
protected virtual void RaisePropertyChanged&T&(Expression&Func&T&& propertyExpression)
if (PropertyChanged != null)
string propertyName = GetPropertyName&T&(propertyExpression);
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
protected string GetPropertyName&T&(Expression&Func&T&& propertyExpression)
if (propertyExpression == null)
throw new ArgumentNullException("propertyEx...
#!/bin/bash
#连接mysql
MYSQL='mysql -uroot -p'!QAZxsw2#EDC' -A -N'
#这里面有两个参数,-A、-N,-A的含义是不去预读全部数据表信息,这样可以解决在数据表很多的时候卡死的问题
#-N,很简单,Don't write column names in results,获取的数据信息省去列名称
databases="payment"
for key in $
#进入数据库下,获取数据库下的所有数据表
sql_tab="use "${key}";"
res_tables="$($MYSQL -e "$sql_tab")"
#数据表循环判断
for tab in $res_
sql_tab_count="select count(*) as count_num from "${key}"."${tab}
res_count="$($MYSQL -e "$sql_tab_count")"
echo $sql_tab_count
echo $res_count
#判断是否大于10000数据
if [ $res_count -gt 10000 ];then
mysqldump -uroot -p'!QAZxsw2#EDC' -d ${key} ${tab} & /root/mysqlDir1/payment/${tab}".sql"
mysqldump -uroot -p'!QAZxsw2#EDC' ${key} ${tab} & /root/mysqlDir/payment/${tab}".sql"
随着项目的运行,Tomcat的日志文件catalina.out的大小日益增大,现在都有好几个GB了。如果我们不做任何处理,catalina.out的文件大小将会持续增加,直到把我们的系统硬盘空间给撑爆不可。 当Tomcat的日志文件catalina.out的大小大于2GB时,Tomcat程序崩溃时将有可能会启动失败并且不会有任何错误信息提示。为了避免该场景的出现,我们要定期轮转catalina.out日志文件。 这里小白使用CentOS6U5自带的logrotate程序来解决catalina.out的日志轮转问题。这种方式比较简单。在/etc/logrotate.d/目录下新建一个名为tomcat的文件,配置闻见为: ``` /usr/local/apache-tomcat-8.0.28/logs/catalina.out{ # 要轮转的文件 copytruncate # 创建新的catalina.out副本后,截断源catalina.out文件 daily # 每天进行catalina.out文件的轮转 rotate 7 # 至多保留7个副本 missingok # 如果要轮转的文件丢失了,继续轮转而不报错 compress # 使用压缩的方式(非常有用,节省硬盘空间;一个2~3GB的日志文件可以压缩成60MB左右) size 16M # 当catalina.out文件大于16MB时,就轮转 } ``` 具体参数意义可以参考用户手册...
2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
WSL(Windows Subsystem for Linux) 是 在Windows系统中为那些熟悉Linux用户准备的诸多子系统功能。换言之,你可以在Windows环境下来执行Linux操作,运行 Linux程序。这对于Windows、Linux双系统有需求的用户来说是个不错的功能。本文详细介绍了如何使用 WSL
这是一篇讲究套路的数据结构实战教学文,阅读需要约20分钟。
上周轰动一时的Gitlab事件终于尘埃落定了,不可否认的是这次事故Gitlab官方公关的的很出色,及时公布事件细节并寻求帮助,这让本是一个失误引发的事故,演变为一个真诚面对问题并反思的正面教材。对此,网络上一片好评。
Session知识点整理开篇和Session缓存(Hibernate一级缓存)详解
在Spring Boot的众多Starter POMs中有一个特殊的模块,它不同于其他模块那样大多用于开发业务功能或是连接一些其他外部资源。它完全是一个用于暴露自身信息的模块,所以很明显,它的主要作用是用于监控与管理,它就是:`spring-boot-starter-actuator`。 `spring-boot-starter-actuator`模块的实现对于实施微服务的中小团队来说,可以有效地减少监控系统在采集应用指标时的开发量。当然,它也并不是万能的,有时候我们也需要对其做一些简单的扩展来帮助我们实现自身系统个性化的监控需求。下面,在本文中,我们将详解的介绍一些关于`spring-boot-starter-actuator`模块的内容,包括它的原生提供的端点以及一些常用的扩展和配置方式。 # 初识Actuator 下面,我们可以通过对快速入门中实现的Spring Boot应用增加`spring-boot-starter-actuator`模块功能,来对它有一个直观的认识。 在现有的Spring Boot应用中引入该模块非常简单,只需要在`pom.xml`的`dependencies`节点中,新增`spring-boot-starter-actuator`的依赖即可,具体如下: ```xml org.springframework.boot spring-boot-starter-actuator ``` 通过增加该依赖之后,重新启动应用。此时,我们可以在控制台中看到如下...
实现功能与spring注解集成。 在web服务中,及可以当作普通的spring bean又可以作为服务的提供者。 在消费者中,与spring注解结合,方便使用。
今天就结合深度桌面操作系统给大家讲讲桌面操作系统的架构设计和原理细节,一来向外界讲讲深度这么多年都做了哪些工作,二来希望通过客观公正的事实向中国新一代的开源爱好者讲述怎么用正确的三观去贡献自己的力量。 ### 什么是桌面操作系统? 简而言之,桌面操作系统就是大家平常个人电脑里面用的操作系统。 桌面操作系统应该是所有操作系统类型中最为复杂、研发技术难度最高的一种操作系统了。 世界上非常优秀的桌面操作系统有微软的Windows和苹果的Mac OS,其他的Linux桌面操作系统,比如Fedora、Suse、Ubuntu包括我们自己的Deepin,虽然这十几年取得了长足的进步,但是相对于Windows和Mac OS,不论技术先进性、交互设计还是产品质量方面都还有非常大的差距。 ### 桌面操作系统都有哪些部分组成? 一个普通用户使用的桌面操作系统的组成部分主要包括: * 内核、驱动以及固件:主要用于驱动硬件可以正常工作,除了CPU、内存、磁盘外,最主要的要是要广泛兼容不同的网卡、显卡、声卡和外设等硬件设备 * 软件仓库及众多开发库:如果没有开源社区众多大神打包好的软件仓库和各种开发库,要基于Linux来开发一个操作系统甭说开源爱好者,甚至就是一个中型公司都很难做起来,可...
前天Spring Boot 1.5终于迎来了第一个RELEASE版本:1.5.0,但是由于[一个编译依赖问题](https://github.com/spring-projects/spring-boot/issues/8136)在第二天直接连击到了1.5.1。该版本的发布包含了超过320位贡献者的奉献、10000多次的代码提交。 每次Spring Boot版本更新所带来的新特性都是我们每个用户特别关注的。虽然其中不少特性可能对于大部分用户来说还不一定适用,但是作为基础知识的储备还是有一定的必要性。对于1.5.x版本的新特性列表读者可以直接查看官方博文:[《Spring Boot 1.5.1 released》](https://spring.io/blog//spring-boot-1-5-1-released)来了解它们,本文不做这些概要性的介绍。在后续的一段时间内,本博客将会陆续介绍一些笔者关心且将会使用的关于Spring Boot 1.5.x中的一些新特性。 ## loggers端点 本文我们就来看看Spring Boot 1.5.x中引入的一个新的控制端点:`/loggers`,该端点将为我们提供动态修改Spring Boot应用日志级别的强大功能。该功能的使用非常简单,它依然延续了Spring Boot自动化配置的实现,所以只需要在引入了`spring-boot-starter-actuator`依赖的条件下就会自动开启该端点的功能(更多关于`spring-boot-starte...
##三次握手 ![输入图片说明](https://static.oschina.net/uploads/img/04509_U5nu.jpg "在这里输入图片标题") ##ListenOverflows ``` root@b5dbe93bcb04:/opt# netstat -s | grep listen 22438 times the listen queue of a socket overflowed ``` tcp_v4_syn_recv_sock():三路握手最后一步完成之后,Accept queue队列(完全连接队列,其大小为min(/proc/sys/net/core/somaxconn, backlog))超过上限时加1. ##ListenDrops ``` root@b5dbe93bcb04:/opt# netstat -s | grep LISTEN 49148 SYNs to LISTEN sockets dropped ``` tcp_v4_syn_recv_sock():任何原因,包括Accept queue超限,创建新连接,继承端口失败等,加1. 包含ListenOverflows的情况,也就是说当出现ListenOverflows时,它也会增加1;除此之外,当内存不够无法为新的连接分配socket相关的数据结构时,也会增加1,当然还有别的异常情况下会增加1。 ##AttemptFails - tcp_done():如果在SYN_SENT/SYN_RECV状态下结束一个连接,加1 - tcp_check_req():被动三路握手最后一个阶段中的输入包中如果有RST|SYN标志,加1 &1.试图和一个不存在的套接口建立连接时,连接失败,而TcpAttemptFails同时会加1 &2....
public class AsyncDemo {
private static void doSomeTask() {
System.out.println("Hello World");
private static void onCompletion() {
System.out.println("All tasks finished");
public static void main(String[] args) {
ExecutorService executor = Executors.newCachedThreadPool();
final CountDownLatch latch = new CountDownLatch(2);
executor.execute(new Task(latch));
executor.execute(new Task(latch));
executor.execute(() -& {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
onCompletion();
executor.shutdown();
private static class Task implements Runnable {
* CountDownLatch 是JDK提供的一个简单的线程监测工具
* 基于简单的计数,调用countDown()方法表明当前线程已经终止
* 在监测线程中调用await()方法,该方法会一直挂起直到所有其它线程终止...
这篇文章主要讲的就是如何让自己的网站免费从HTTP升级为HTTPS,使用的是 [Let's Encrypt](https://letsencrypt.org/)的证书。实际上也就是一个Let's Encrypt 免费证书获取教程 。 为什么要上HTTPS,说一个小故事。 & 从前有个网站,后来有个广告,没了 作为一个博客,自然不想让在被别人浏览的时候,出现莫名的广告([运营商劫持](https://www.google.com.hk/webhp?hl=zh-CN&sourceid=cnhp&gws_rd=ssl#safe=strict&hl=zh-CN&q=%E8%BF%90%E8%90%A5%E5%95%86%E5%8A%AB%E6%8C%81))。这时候,HTTPS的价值就体现出来了。 HTTPS的好处还有很多,但单单这一条,就够我花心思去升级了。 (其实主要目的是提升网站Biger :) ## Let's Encrypt 简介 如果要启用HTTPS,我们就需要从证书授权机构(以下简称CA) 处获取一个证书,Let's Encrypt 就是一个 CA。我们可以从 Let's Encrypt 获得网站域名的免费的证书。这篇文章也主要讲的是通过 Let's Encrypt + Nginx 来让网站升级到HTTPS。 ## Certbot 简介 [Certbot](https://certbot.eff.org) 是Let's Encrypt官方推荐的获取证书的客户端,可以帮我们获取免费的Let's Encrypt 证书。Certbot 是支持所有 Unix 内核的操作系统的,个人博客的...
比较了JFina3.0新的模板引擎功能与Beetl的功能对比
SpringSecurity是基于Spring的应用程序提供声明式安全保护的安全性框架
前言 开源实时日志分析ELK平台(ElasticSearch, Logstash, Kibana组成),能很方便的帮我们收集日志,进行集中化的管理,并且能很方便的进行日志的统计和检索,下面基于ELK的最新版本5.1进行一次整合测试。 ElasticSearch 1.概述: ElasticSearch是一个高可扩展的开源的全文搜索分析引擎。它允许你快速的存储、搜索和分析大量数据。ElasticSearch通常作为后端程序,为需要复杂查询的应用提供服务。 Elasticsearch是一个基于Lucene的开源分布式搜索引擎,具有分布式多用户能力。Elasticsearch是用java开发,提供Restful接口,能够达到实时搜索、高性能计算;同时Elasticsearch的横向扩展能力非常强,不需要重启服务,基本上达到了零配置。 2.解压ElasticSearch并进入目录: unzip elasticsearch-5.1.1.zip
cd elasticsearch-5.1.1 3.启动ElasticSearch服务: ./bin/elasticsearch 因为这里使用的是root账号进行启动服务的,所以会报如下错误:
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-5.1.1.jar:5.1.1]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearc...
上篇介绍了 Spring-data-jpa一些使用方法,都是基于mysql数据库来讲解的,但是在实际项目中,由于访问量的不断增大,数据库的压力会越来越大,这时候类似于mysql的数据库往往只是为了兜底或者在降级时才会有查询操作,大部分的读操作都会集中在缓存或者像elasticsearch这种全文搜索引擎,本篇主要介绍一下如何在SpringBoot中使用Redis,后续会介绍如何集成elasticsearch
1、添加Redis起步依赖 &dependency&
&groupId&org.springframework.boot&/groupId&
&artifactId&spring-boot-starter-redis&/artifactId&
&/dependency& 2、添加Redis相关配置 spring:
host: localhost
port: 6379
max-idle: 100
min-idle: 1
max-active: 1000
max-wait: -1 3、编写Redis配置类 @Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
* 生成key的策略
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
public Object generate(Object target, Method m...
本人作为一个屌丝程序员,**年少无为,卖马为生**,买不起服务器,买不起域名,但是又想拥有属于自己的博客网站,那就只有通过技术来实现这一切了。先上成果:[点击](http://z77z.oschina.io/),现在我把我自己搭建博客的过程共享出来,只要你按照步骤一步步走下去,一定会搭建成功,如果大家在搭建过程中遇到什么问题,欢迎在我的博客评论区留言,也欢迎大神进来,教我做码,带我装逼,带我飞。**[博客地址](http://z77z.oschina.io/)**,JUST DO IT(`离开舒适区`)。
通过ssh远程连接linux服务器,上传Oracle11g的安装包,在无图形化界面的情况,安装Oracle服务器端。本例中linux服务器系统为CentOS6.5.
踩过很多次GC的坑,基本每次性能问题,除了数据库,其它高发地区就是GC问题了
持续集成(Continuous Integration),也就是我们经常说的 CI,是现代软件开发技术的基础。本文论述了如何使用 TeamCity 持续集成工具来实现项目的持续集成。

我要回帖

更多关于 channel是什么意思 的文章

 

随机推荐