怎样增强看齐意识内容核心意识 ne

本文讲的是实际操作中的小问题和小技巧, 这里要谈谈Pentaho BI Server对文件夹的操作,在项目使用pentaho cde图表开发完图表后,通常会迁移cde图表文件来完成开发与部署不同环境下的图表迁移,在迁移过程中发现BI Server可以对Pentaho中文件夹进行下载, 下载后是一个zip的文件,可以通过在要迁移环境下upload上传后还原该文件夹。 后面遇到有人问我Pentaho BI Server能否进行批量上传文件,因为upload每次只能上传一个文件,而当要上传文件夹时我就想到了可以通过将本地需要上传的文件夹打成zip然后上传到服务器做法, 新建测试文件夹: 上传成功: 但是后期在传入他给到的文件夹出现如下问题: 上传之后 发现导入失败: 发现pentaho上传文件时不能出现中文。 注:上传成功后若发现某些文件看不到,则需要勾选显示隐藏文件
由于众所周知的原因,至今仍有大量生产环境的代码跑在 Python 2.7 之上,在 Python 2 的世界里,并没有一个官方的类型系统实现。那么生产环境的类型系统是如何实现的呢,为什么一定要在在线服务上实现类型系统?下文将针对这两个问题进行深入讨论。
打算抄袭一下MyBatis的Java注解方式配置,添加到在正在开发的持久层工具里,只需要定义一个接口方法,就可以用一个动态代理来使用它,这种方式的优点是可以利用Java的导舤功能快速定位SQL,比文本方式保存的模板定位方便,而且方法名和参数都是Java强类型,支持重构: @Select("select * from users where id = #{id}")
User getUserById(Integer id); 但还是老问题,Java对多行文本的支持太差,MyBatis的解决方法个人不是太喜欢,破坏了SQL的可读性: private String selectPersonSql() {
return new SQL() {{
SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME");
SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON");
FROM("PERSON P");
FROM("ACCOUNT A");
INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID");
INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID");
WHERE("P.ID = A.ID");
WHERE("P.FIRST_NAME like ?");
WHERE("P.LAST_NAME like ?");
GROUP_BY("P.ID");
HAVING("P.LAST_NAME like ?");
HAVING("P.FIRST_NAME like ?");
ORDER_BY("P.ID");
ORDER_BY("P.FULL_NAME");
如果大家正在按照笔者的教程尝试使用大数据组件还是之前有使用过相关的组件,大家会发现一个问题HIVE在负责的查询下调用Mapreduce会很慢,在这个场景下就涌现出很多查询引擎来优化,比如大家熟悉的Spark-SQL,Impala,kilin已经今天的主角Presto, Presto以速度和极强的扩展性取得了胜利,不仅能够提高对HIVE数据查询速度还能和异构数据库进行关联查询,比如HIVE和Mysql进行关联查询,那么我们就来迫不及待的揭开Presto的庐山真面目
java中监听器的实现大都是利用接口进行回调,使用比较麻烦。之后,spring框架中出现了在方法上加一个注解就可以实现监听的用法,特别简洁。本文就是在分析监听器回调原理的基础上,在spring环境中使用自定义的注解实现一个监听器。
作为一种可移植、体积小、加载快且兼容web的全新格式,WebAssembly受到诸多关注,并迎来企业的探索实践。白鹭引擎利用WebAssembly重新实现了一个新的渲染内核并作为一个可选项提供给开发者,使得白鹭引擎5.0成为业内首个双核驱动的引擎。在此过程中积累了一些经验,白鹭引擎首席架构师王泽今天和大家一起分享背后的故事。
WebAssembly 是 Google Chrome、Mozilla FireFox、Microsoft Edge、Mozilla FireFox 共同宣布支持、并在 2017年3月份在各自浏览器中提供了实现的一种新技术。他被设计为一种可移植的、安全的、低尺寸的、高效的二进制格式。浏览器可以解析并运行这种格式,并拥有比 JavaScript 更高的性能和解析速度。WebAssembly 可以通过编写 C / C++ 代码,通过专门的编译器生成 .wasm 格式的文件,直接运行在最新的浏览器中。 白鹭引擎是一款 HTML5 游戏引擎,他提供了游戏开发所需要的诸多功能,并允许开发者编写的游戏运行在 Web 浏览器或移动应用的 WebView 容器中。 在白鹭引擎 5.0 中,我们使用 WebAssembly 重新编写了白鹭引擎的渲染核心,以便进一步提升渲染效率。在这个过程中,白鹭引擎遇到了WebAssembly的各种问题,在此与读者进行一些 WebAssembly ...
Raft,分布式系统,分布式存储
《Spring Boot 与 kotlin 实战》之 使用JdbcTemplate连接MySQL
关于分布式事务,工程领域主要讨论的是强一致性和最终一致性的解决方案。典型方案包括: - **两阶段提交(2PC, Two-phase Commit)方案** - **eBay 事件队列方案** - **TCC 补偿模式** - **缓存数据最终一致性** # 一、一致性理论 分布式事务的目的是保障分库数据一致性,而跨库事务会遇到各种不可控制的问题,如个别节点永久性宕机,像单机事务一样的ACID是无法奢望的。另外,业界著名的CAP理论也告诉我们,对分布式系统,需要将数据一致性和系统可用性、分区容忍性放在天平上一起考虑。 两阶段提交协议(简称2PC)是实现分布式事务较为经典的方案,但2PC 的可扩展性很差,在分布式架构下应用代价较大,eBay 架构师Dan Pritchett 提出了BASE 理论,用于解决大规模分布式系统下的数据一致性问题。BASE 理论告诉我们:可以通过放弃系统在每个时刻的强一致性来换取系统的可扩展性。 ## 1、CAP理论 在分布式系统中: - **一致性(Consistency)** - **可用性(Availability)** - **分区容忍性(Partition Tolerance)** 3个要素最多只能同时满足两个,不可兼得。其中,分区容忍性又是不可或缺的。 ![ ][1] - **一致性**:分布式环境下多个节点的数据是否强一致。 - **可用性*...
![Thinkpad 25 Anniversary](http://upload-images.jianshu.io/upload_images/fb7bdff80a77326.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 用thinkpad打字确实很爽啊! --- ## 内部类基本概念 - 可将一个类的定义置于另一个类定义的内部 - 内部类允许将逻辑相关的类组织在一起,并控制位于内部的类的可见性 - 甚至可将内部类定义于一个**方法**或者**任意作用域**内! - 当然,内部类 ≠ 组合 - 内部类拥有其外围类 所有元素的 访问权 - 更有甚,嵌套多层的内部类能透明地访问所有它所嵌入的外围类的所有成员 一个典型的例子:利用 **Java内部类** 实现的 **迭代器模式** ``` // 接口 ------------------------------------------------------------- public interface Selector { boolean end(); Object current(); void next(); } // 外部类(集合类) + 内部类(迭代器类) ------------------------------------------------------------- public class Sequence { // 外部类(代表一个集合类) private Object[] private int next = 0; public Sequence( int size ) { items = new Object[size]; } public void add( Object x ) { if...
不少朋友对tio处理半包粘包不是很清楚,所以就简单写一篇博客来说一下吧
Java 判断图片类型
从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器。这篇博文主要讲解的是监听器的应用。 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了,就在Session域中保存相对应的属性。如果没有登陆,那么Session的属性就应该为空。 现在,我们想要统计的是网站的在线人数。我们应该这样做:我们监听是否有新的Session创建了,如果新创建了Sesssion,那么在线人数就应该+1。这个在线人数是整个站点的,所以应该有Context对象保存。 大致思路: 监听Session是否被创建了 如果Session被创建了,那么在Context的域对象的值就应该+1 如果Session从内存中移除了,那么在Context的域对象的值就应该-1. 代码 监听器代码:
public class CountOnline implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent se) {
//获取得到Context对象,使用Context域对象保存用户在线的个数
ServletContext context = se.getSession().getServletContext();
//直接判断Context对象是否存在这个域,如果存在就人数+1,如果不存在,那么就将属性设置到Context域中
Java 二维数组中的孤岛搜索
为了方便在局域网中安装CDH集群,搭建一个CDH的yum本地源,方便局域网内各节点安装。 在Cloudera的官网中给出了CDH本地源的搭建过程(官网说明文档链接),下面是本人亲自搭建的详细过程,首先要找一台能联网的主机来制作本地源,可自动下载必要的安装包(如果全部都无法联网,则手动下载相关的rpm安装包,只是麻烦了一些,过程是一样的),制作好本地源后该主机再断网给本地局域网作为yum源使用即可。 1、关闭防火墙、关闭selinux service iptables stop
chkconfig iptables off [root@test001 selinux]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
enforcing - SELinux security policy is enforced.
permissive - SELinux prints warnings instead of enforcing.
disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
targeted - Targeted processes are protected,
mls - Multi Level Security protection.
SELINUXTYPE=targeted 2、下载repo文件 根据操作系统下载repo文件(本人使用...
HashMap是基于hash表的map的实现,使用key-value形式存储键值对,并允许使用 null 值和 null 键,但是key只能有一个为null. Map不保证映射的顺序,其内部是根据hash值去模运算去排列的。HashMap内部使用entry数组作为存储的介质.
长久以来,一直想剖析一下Java线程安全的本质,但是苦于有些微观的点想不明白,便搁置了下来,前段时间慢慢想明白了,便把所有的点串联起来,趁着思路清晰,整理成这样一篇文章。 二、导读
1、为什么有多线程?
2、线程安全描述的本质问题是什么?
3、Java内存模型(JMM)数据可见性问题、指令重排序、内存屏障 三、揭晓答案 1、为什么有多线程
谈到多线程,我们很容易与高性能画上等号,但是并非如此,举个简单的例子,从1加到100,用四个线程计算不一定比一个线程来得快。因为线程的创建和上下文切换,是一笔巨大的开销。
那么设计多线程的初衷是什么呢?来看一个这样的实际例子,计算机通常需要与人来交互,假设计算机只有一个线程,并且这个线程在等待用户的输入,那么在等待的过程中,CPU什么事情也做不了,只能等待,造成CPU的利用率很低。如果设计成多线程,在CPU在等待资源的过程中,可以切到其他的线程上去,提高CPU利用率。
现代处理器大多含有多个CPU核心,那么对于运算量大任务,可以用多线程的方式拆解成多个小任务并发的执行,提高计算的效率。
总结起来无非两点,提高CPU的利用率、...
翻看了不少网上的教程
千篇一律 那些该配置 不该配置很模糊 很多都是入门教程
经过个人实践 总结了eureka server 几个要点: springcloud 版本
Dalson.SR4 #
eureka server 高可用 配置
eureka.instance.prefer-ip-address 不建议设置为true
eureka.client.registerWithEureka、 eureka.client.fetchRegistry 都要设置为true
默认值都为true
eureka.instance.appname
=spring.application.name
defaultZone
高可用 不要使用ip 应该使用相应的域名DNS来配置
也就是 eureka.instance.hostname
每个分片必须指定hostname
不然当前分片显示不可用 eureka:
hostname: cluster1 最后一条很重要 分片是否成功的关键 一定要用dns来配置 windows 下 改host文件
linux 或者其他环境一样 样例配置
采用 3个实例集群
application.yml 如下: 运行指定配置文件spring.profiles.active=配置项
例如在springboot 可执行jar路径下 命令行执行
java -jar discovery-server-1.0-SNAPSHOT.jar --spring.profiles.active=master 启动了master 配置
红字换cluster1 对应启...
一:写在前面 以前从不感觉jvm内部的这一块领域是必须掌握的知识点,大概了解一下就行,甚至可以说是只是知道一些概念化的东西,似乎跟我没有多大关系,但是随着工作年限的不断增加,发现在这件事情真是错了,特别是在当在乞丐环境下跑项目的时候,从代码优化到莫名其妙的错误排查,总归能找到这样那样的原因,回过头来想想,才发现,jvm这块真的很重要,很重要,很重要,重要的事情说三遍,但是依然哪天想起来总是没有好好的深入的去学习,好了伤疤忘了疼。。。。 如今跨入大数据开发领域,却发现调优这块工作无处不在,计算、分析、算法、模式等等似乎总是欠缺点什么东西,得,长痛不如短痛,下功夫深入的了解了一段时间,收货不少,很多东西也就想开了,记录一些核心的部分。 二:初识 不想上来就讲解jvm构成以及组成部分,百度一搜一大堆,没什么心意,先从实际的干饭说起,我们从第一天搞java开发,从来没有想过new了一个对象或者其他的东西后,需要我们手动去管理过他的内存空间释放,因为我们知道java有GC垃圾回收器这哥们的存在,他会帮我们处理好一切,这就好比我是皇帝,我想在哪建个行宫就在哪建,至于打扫战场的事儿,跟我没有关系,有总管专门去处理这件事情,...
当项目的数据需要持久化存储时,不可避免要和数据库交互。在交互过程中,对事务的支持则是尤为重要。JDBC规范支持对事务的操作,在[深入浅出JDBC(一) - Connection与事务介绍](https://my.oschina.net/u/2377110/blog/1601409)一章中简要介绍了JDBC事务相关的概念。JDBC将对不同数据库的交互规范化,包括事务的操作,让开发者可以屏蔽不同数据库的差异使用接口编程。但事务的开启和关闭,以及事务的控制和配置还是需要手动编码控制,未免繁琐且易出错。Spring基于此之上,开放出一套事务管理机制,将开发者从繁琐的事务控制中解脱出来,可以便捷地执行事务控制。然而作为开发者,便捷之后的原理也需要了解,才能更好地把控程序。接下来,我将从Spring事务管理的配置到原理逐步介绍其运行机制,本篇先介绍三种从原始到简化的配置方式。 以mybatis+mysql为基础,基本的xml配置如下 ``` ``` 这里对mybatis的配置就不过多介绍了,事务定义在UserManager层,UserManager中定义一个批量操作的方法,来验证事务。 ``` @Slf4j public class UserManager { @Getter @Setter private UserMapper userM public void batchOperator(){ User user = new User("lily", 25); // 插入...
#### 一、 header 组件开发 之数据的传递 ##### 1. App.vue 引入组件 ``` import header from './components/header/header' ``` ##### 2. App.vue 中注册组件 ``` export default { components:{ v-header:header } } ``` ##### 3. 使用组件 ``` ``` ##### 解释::sell="sellerObj",这里就像一个函数传参一样把sell当成形参,sellerObj就是实参,那么父组件实参是怎么传给子组件的,通过什么传 ##### 4. 父组件向子组件传递数据 ##### 在父组件中需要将sellerObj作为数据导出,子组件通过props从父组件中获得数据,且要指定数据类型 ``` export default { props:{ // 子组件获取 父组件 数据 sell:{ type:Object // 传递的类型 } } } ``` #### 小结: - 子组件在props中创建一个属性,用以接收父组件传过来的值 - 父组件中注册子组件 - 在子组件标签中添加子组件props中创建的属性 - 把需要传给子组件的值赋给该属性 ##### 5. 调用数据 ``` {{sell.name}} {{sell.description + '/' + sell.deliveryTime + '分钟送达'}} ``` 细节问题: ##### support 绑定数据时 加 v-if ='sell.supports' ##### 理由 : 在我们通过axios获取数据前在父组件中创建了一个空的对象sellerObj...
工作任务需求:采用HTTPS认证访问网站。
作者:王奥(OX) 链接:https://www.zhihu.com/question//answer/ 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ## 前言 RAID解释我偷个小懒引用WikipediA,独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。根据选择的版本不同,RAID比单颗硬盘有以下一个或多个方面的好处:增强数据集成度,增强容错功能,增加处理量或容量。另外,磁盘阵列对于电脑来说,看起来就像一个单独的硬盘或逻辑存储单元。写这篇文章当然不是单纯的介绍概念和使用方法,更重要的是如何针对不同的业务场景做合理的RAID配置和参数优化,对于SSD固态硬盘的加入我引入小米运维团队的实验数据,同时我也相信分布式存储会逐步走向成熟,以OpenStack,VSAN,Nutanix为代表头顶软件定义和超融合概念的技术也已经开始了暗战。
& RAID的本质是平衡可用性与成本 --- ## 更新历史 日 - 初稿 阅读原文 - RAID磁盘阵列...
docker容器ip的配置
Created on 日
@author: Geng
import requests
import time
import random
# url = "https://rate.tmall.com/list_detail_rate.htm?itemId=&spuId=&sellerId=&order=3&append=0&content=1&tagId=&posi=&picture=&ua=098%23E1hvB9vnvPOvUvCkvvvvvjiPPLqWzjY8RLs9sj3mPmPWljl8RLzvljtWRFqWAjlW9phvHnQGNVinzYswzv5b7MJgzRjw9HuCdphvmpvUG9U4V9v1agwCvvpvCvvv2QhvCvvvMMGCvpvVvmvvvhCvmphvLvA4dQvjEGLIAXZTKFEw9Exrs8TJEcqUAj7Q%2Bul1occ63Wv7rjlEgnLv%2B2Kz8Z0vQRAn%2BbyDCwFIAXZTKFEw9Exr08TJnDeDyO2vHd8tvpvIvvvvvhCvvvvvvUEpphvvs9vv9DCvpvQovvmmZhCv2jhvvUEpphvWw4yCvv9vvUvQORQH1UyCvvOUvvVvayptvpvhvvvvv8wCvvpvvUmmdphvmpvWrUpGPvC1nLyCvvpvvvvv&isg=AurqQavURICRWchqI2pb1fXnO1CGWGXUUQpYDnSi0z2Kp4lhXeg-xXOVQeVA&needFold=0"
url = "https://rate.tmall.com/list_detail_rate.htm?itemId=&spuId=&sellerId=&order=3&append=0&content=1&tagId=&posi=&picture=&ua=098%23E1hvwvvWvRyvUvCkvvvvvjiPPLqUtjtnRsMvgjEUPmP9AjECR2sO6jrPPFsW1jnm3QhvCvmvph...
由于众所周知的原因,至今仍有大量生产环境的代码跑在 Python 2.7 之上,在 Python 2 的世界里,并没有一个官方的类型系统实现。那么生产环境的类型系统是如何实现的呢,为什么一定要在在线服务上实现类型系统?下文将针对这两个问题进行深入讨论。
本文总结了 JDBC 事务隔离级别。
本文主要介绍玻尔兹曼机(BM)、受限玻尔兹曼机(RBM)、深度信念网络(DBN)的技术原理
![输入图片说明](https://static.oschina.net/uploads/img/82508_p1DY.png "asciichart")
### expect脚本同步文件 ``` #!/usr/bin/expect set passwd "1" spawn rsync -av root@192.168.65.130:/tmp/12.txt /tmp/ expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r" } } expect eof // expect eof会给予一定的时间让你进行操作 // 如果没有加expect eof,将导致同步没执行就断开连接,这样是不对的 ``` --- ### expect脚本指定host和要同步的文件 ``` #!/usr/bin/expect set passwd "1" set host [lindex $argv 0] set file [lindex $argv 1] // 这里只适合同步1个文件 spawn rsync -av $file root@$host:$file expect { "yes/no" { send "yes\r"} "password:" { send "$passwd\r" } } expect eof ``` 执行 ``` ./5.expect 192.168.65.130 /tmp/12.txt ``` & 可以通过set timeout来指定超时时间,-1表示永不超时,5表示超时间时间为5s --- ### 构建分发系统 需求:生产环境下,需要一次同步多个文件,之前的那个代码显然不足以实现功能 核心命令:`rsync -av --files-from=list.txt / root@host:/` /usr/local/sbin/rsync.expect脚本如下: ``` #!/usr/bin/expect set passwd "123456" set host [lindex $argv 0] set file [lindex $argv 1] spaw...
用命令开启服务有2种方法,net和sc,net只可以打开和停止没有被禁用的服务,而sc可以打开和停止被禁用了的服务。 如果你知道别人电脑的登录密码(有权限的),就可以远程开启他电脑上的服务。
4.1使用SAS过程步 PROC语句
所有的语句的必须部分为proc+过程名 BY语句
BY语句在过程proc sort中是必须的,它用来对观测值排序。其他过程BY用来对变量进行分别分析 TITLE和FOOTNOTE语句 LABEL语句 4.7使用proc format创建自己的格式
注意,变量值是字符串时要加上引号,range不止一个值要用逗号隔开,连续的range要用-。关键字low和high可以用来指代变量中的最小和最大的非缺失值。 DATA
INFILE 'c:\MyRawData\Cars.dat';
INPUT Age Sex Income Color $;
PROC FORMAT;
VALUE gender 1 = 'Male'
2 = 'Female';
VALUE agegroup 13 -& 20 = 'Teen'
20 -& 65 = 'Adult'
65 -& HIGH = 'Senior';
VALUE $ col 'W' = 'Moon White'
'B' = 'Sky Blue'
'Y' = 'Sunburst Yellow';
PROC PRINT DATA =
FORMAT Sex gender. Age agegroup. Color $col.;
TITLE 'Survey Result Print with User-Defined Formats';
RUN; 4.8定制一个简单的报告 data C
INPUT Name $ Class DateReturned MMDDYY10. CandyType $ Q
Activiti BPMN 结束事件
高亮根据点击的条目 动态绑定样式
&template&
&div id="app"&
&div class="collection"&
&div class="base"
v-for="gameName in gameNames"
@click="selected(gameName)"
:class="{active: activeName == gameName}"&{{gameName}}
&/template&
export default {
name: "select-item",
gameNames: ['魔兽世界', '暗黑破坏神Ⅲ', '星际争霸Ⅱ', '炉石传说', '风暴英雄',
'守望先锋'
activeName: null
methods: {
selected: function (gameName) {
this.activeName = gameName
&style scoped&
height: 50
background:
background:
java.lang.VerifyError: Expecting a stackmap frame at branch target 231 Exception Details:
com/hikvision/energy/gbmc/logManage/controller/LogInfoController.logList(Lcom/hikvision/energy/gbmc/logManage/vo/LogListR)Lcom/hikvision/energy/gcommon/common/response/CommonR @60: ifne
Expected stackmap frame at this location.
Stackmap Table:
append_frame(@240,Object[#35],Object[#115],Object[#115])
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
at java.lang.Class.getDeclaredConstructors(Class.java:2020)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jd...
设计及实现: 主体分为3个方面,一是对多语言内容的处理,整理出哪些业务内容是需要进行国际化处理的,统一放在多语言文件当中。二是如何进行存储,通过简单快捷,低耦合的方式进行日志的存储。三是如何进行翻译,即通过何种方式将于语言不相关的key找到对应的翻译内容。 多语言文件处理: 该项目是基于spring-boot实现的微服务架构方式,根据不同职责分为运营分析模块,系统管理模块和数据接入模块,系统日志的处理专门由服务管理模块负责,因此多语言文件也存储在服务管理模块内部。因为系统日志所要展现的内容有区分不同字段,如下图所示: 所以需要对不同的字段进行区分,这里采用key的分段命名法来实现方便管理,如下图所示: 由于是基于Spring框架,其本身就对多语言有支持,只需按照结构及命名要求将该多语言文件存放至resource目录下即可:
多语言key值存储: 由于多语言的内容是变化的,数据库存储的是不变的key值,通过key值找到对应语言文件内的翻译,各个业务只需要在插入时明确key值即可。而为了降低日志插入功能与各个业务本身功能的耦合性,这里采用的注解的方式来实现,即在业务方法上编写日志注解,同时指定好各个字段所需要的key值,再通过切面的方式...
《 java设计模式之禅》
GOlang让多协程交替输出任务,并指定顺序执行
笔者最近参加了2018年的comap(Consortium for Mathematics and Its' Application),这也是笔者第一次参加这类型的比赛,在当中也收获到了许多的技巧和知识,为了与各位分享,笔者准备了一个系列博客分段记录,笔者会将自己的代码的一部分贴出来,多有不正之处,欢迎指正。由于笔者这次选的题目是C题所以只提供做题中用到的方法的代码与思路。如果有读者愿意欢迎联系本人共同探讨进步。
Redis主从复制的配置十分简单,它可以使从服务器是主服务器的完全拷贝。需要清除Redis主从复制的几点重要内容: 1 2 3 4 5 6 7 8 9 10 11 1)Redis使用异步复制。但从Redis 2.8开始,从服务器会周期性的应答从复制流中处理的数据量。 2)一个主服务器可以有多个从服务器。 3)从服务器也可以接受其他从服务器的连接。除了多个从服务器连接到一个主服务器之外,多个从服务器也可以连接到一个从服务器上,形成一个
图状结构。 4)Redis主从复制不阻塞主服务器端。也就是说当若干个从服务器在进行初始同步时,主服务器仍然可以处理请求。 5)主从复制也不阻塞从服务器端。当从服务器进行初始同步时,它使用旧版本的数据来应对查询请求,假设你在redis.conf配置文件是这么配置的。
否则的话,你可以配置当复制流关闭时让从服务器给客户端返回一个错误。但是,当初始同步完成后,需要删除旧的数据集和加载新的数据集,在
这个短暂的时间内,从服务器会阻塞连接进来的请求。 6)主从复制可以用来增强扩展性,使用多个从服务器来处理只读的请求(比如,繁重的排序操作可以放到从服务器去做),也可以简单的用来做数据冗余。 7)使用主从复制可以为主服务器免除把...
1. 概述 整体过程概述如下:
配置好主从后,无论slave是初次还是重新连接到master, slave都会发送PSYNC命令到master。
如果是重新连接,且满足增量同步的条件(3.1中详述),那么redis会将内存缓存队列中的命令发给slave, 完成增量同步(Partial resynchronization)。否则进行全量同步。
2. 正常同步开始
任何对master的写操作都会以redis命令的方式,通过网络发送给slave。 2. 全量同步(full resynchronization) 2.1 过程 slave发送PSYNC master执行bgsave生成RDB快照文件,同时将这之后新的写命令记入缓冲区 master向slave发送快照文件,并继续记录写命令 slave接收并保存快照 slave将快照文件载入内存 slave开始接收master中缓冲区的命令完成同步 2.2 实例 环境:
- master 127.0.0.1:7779
- slave 127.0.0.1:9303 进程号10967 只有一个key strace -p 10967 -s 1024 -o redis.strace.full 1 然后连接到slave, 执行slaveof 127.0.0.1 7779,从strace文件看到的同步过程中,slave侧的动作如下(只摘重要部分) /*从client执行slaveof命令*/
read(6, "*3\r\n$7\r\nslaveof\r\n$9\r\n127.0.0.1\r\n$4\r\n7779\r\n", 16384) = 42
/*返回给client OK*/
在calico中,有多种网络资源。以v1.6.1为例,网络资源包含:node,bgpPeer,hostEndpoint,workloadEndpoint,ipPool,policy,profile等。 下面我将讲解如何使用calicoctl命令行工具来控制这些网络资源。
服务注册中心,给客户端提供可供调用的服务列表,客户端在进行远程服务调用时,根据服务列表然后选择服务提供方的服务地址进行服务调用。服务注册中心在分布式系统中大量应用,是分布式系统中不可或缺的组件,例如rocketmq的name server,hdfs中的namenode,dubbo中的zk注册中心,spring cloud中的服务注册中心eureka。
在spring cloud中,除了可以使用eureka作为注册中心外,还可以通过配置的方式使用zookeeper作为注册中心。既然这样,我们该如何选择注册中心的实现呢?
著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性在是分布式系统中必须要保证的,因此我们只能在A和C之间进行权衡。在此Zookeeper保证的是CP, 而Eureka则是AP。 2. Zookeeper保证CP
当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30 ~ 12...
春节小长假,走亲访友之余,还可以利用一些零碎的时间收集学习资料,给自己充充电,好在 2018 年成为更优秀的自己。我们知道在开源和贡献开源方面,Google 一直是行业的典范。2017 年它开源了哪些优秀的软件,有哪些值得我们借鉴学习呢?让我们一起来看下: 1、硬件加速的机器学习 JavaScript 库 DeepLearn.js DeepLearn.js 是 Google 推出的一个可用于机器智能并加速 WebGL 的开源 JavaScript 库,完全在浏览器中运行,不需要安装,不需要后端处理。 2、大型微服务系统管理工具 Istio Istio 是一个由谷歌、IBM 与 Lyft 共同开发的开源项目,旨在提供一种统一化的微服务连接、安全保障、管理与监控方式。Istio 项目能够为微服务架构提供流量管理机制,同时亦为其它增值功能(包括安全性、监控、路由、连接管理与策略等)创造了基础。这款软件利用久经考验的 Lyft Envoy 代理进行构建,可在无需对应用程序代码作出任何发动的前提下实现可视性与控制能力。Istio 项目是一款强大的工具,可帮助 CTO/CIO 们立足企业内部实施整体性安全、政策与合规性要求。 3、可自动生成命令行接口 Python Fire Python Fire 是 Google 开源的一个可从任何 Python 代码自动生成命令行接口(...
1.目录结构 2.repl工具 jShell命令 3.模块化 4.多版本兼容jar包 5.接口方法的改进(在接口中 jdk7 只能声明全名常量和抽象方法 jdk8 添加了静态方法和默认方法 jdk9添加了私有方法) 6.钻石操作符升级 可以有{} 7.异常处理try升级 8.下划线标识符命名的限制 _ 不允许了 9.String底层存储结构的变更(char数组变成byte字节数组) 10.增强了Stream API(在java8基础上,新增加4个方法) 11.jdk9 中引入httpClient api 代替原有的HttpURLConnection
本文目标 要在单台机器上搭建Redis集群,方式是通过不同的TCP端口启动多个实例,然后组成集群,同时记录在搭建过程中踩过的坑。 安装准备 centos版本:6.7 redis版本:3.2.3 安装方式:源码安装 服务器:1台 操作步骤 此处默认已安装好单台redis,如果不会可以参照《centos上安装redis》 1、启动Redis多个实例 我们在Redis安装目录下创建目录cluster,并编写7000.conf~7005.conf 6个配置文件,这6个配置文件用来启动6个实例,后面将使用这6个实例组成集群。 以7000.conf为例,配置文件需要填写如下几项: port
//端口02,05
bind 192.168.186.91
//默认ip为127.0.0.1 需要改为其他节点机器可访问的ip 否则创建集群时无法访问对应的端口,无法创建集群
//redis后台运行
./redis_7000.pid
//pidfile文件对应02,05
cluster-enabled
//开启集群
把注释#去掉
cluster-config-file
nodes_7000.conf
//集群的配置
配置文件首...
Tutorialzine 每个月都会公布一次当月新增的 JS 和 CSS 库。2018 新年之际,该网站整理出了 2017 年最受用户欢迎和喜爱的一些 JS 和 CSS 库,供大家学习和参考。 JavaScript 本地存储库 localForage localForage 是一个 JavaScript 库,提升了应用程序的离线体验,通过使用异步的数据存储,提供简单的类似 localStorage 的 API,允许开发者存储多种类型数据。 CSS3 驱动的动画滚动库 AOS AOS(Animate on scroll)是小型动画滚动库,可在页面滚动时给元素添加动画效果。CSS3 驱动,效果类似于 WOWJS。 响应式邮件标识语言 MJML MJML 是一个标识语言,用来减少编写响应式邮件的复杂度。其语义语法在展示丰富邮件内容时更加简单和直观。该项目提供一个开源的引擎用来将 MJML 标识语言转成 HTML。 基于浏览器的代码编辑器 Monaco-Editor Monaco Editor 是微软开源的基于 VS Code 的代码编辑器,运行在浏览器环境中。编辑器提供代码提示,智能建议等功能。供开发人员远程更方便的编写代码。 Web 虚拟现实框架 A-Frame A-Frame 是 Mozilla 开源的网页虚拟现实体验( WebVR )框架,可用于桌面、iPhone(即将支持安卓)以及 Oculus Rift。A-Frame 可以让创建 WebVR 体验变得...
【点击图片看大图】 【点击图片看大图】
小灯泡图标:待完成功能
### 新增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"} } ```...
# 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...
### 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...
### 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' ] }...
这一部关于区块链开发及运维的电子书。 为什么会写区块链电子书?因为2018年是区块链年。 这本电子书是否会出版(纸质图书)? 不会,因为互联网技术更迭太快,纸质书籍的内容无法实时更新,一本书动辄百元,很快就成为垃圾,你会发现目前市面的上区块链书籍至少是一年前写的,内容已经过时,很多例子无法正确运行。所以我不会出版,电子书的内容会追逐技术发展,及时跟进软件版本的升级,做到内容最新,至少是主流。 这本电子书与其他区块链书籍有什么不同?市面上大部分区块链书籍都是用2/3去讲区块链原理,只要不到 1/3 的干货,干货不够理论来凑,通篇将理论或是大谈特谈区块链行业,这些内容更多是头脑风暴,展望区块
### 一.使用脚本切割 ##### 编辑脚本 ``` tianshl@tianshl nginx $ vim nginx_log_division.sh ``` ##### 脚本内容 ``` #! /bin/sh # 昨天日期 yesterday=`date -v -1d +%Y%m%d` # 日志目录 log_path="/usr/local/var/log/nginx/" # SDK日志路径 sdk_path=${log_path}sdk # 以天为单位切分日志 mv -f ${sdk_path}.log ${sdk_path}_${yesterday}.log # 重新生成日志文件 pid_path="/usr/local/var/run/nginx.pid" sudo kill -USR1 `cat ${pid_path}` ``` ##### 定时任务 ###### 切换到root身份 ``` tianshl@tianshl nginx $ sudo su root ``` ###### 编辑 crontab ``` sh-3.2# crontab -e ``` ###### crontab 添加一行 ``` 0 0 * * * sh /usr/local/var/log/nginx/nginx_log_division.sh ``` ###### 查看是否添加成功 ``` sh-3.2# crontab -l ``` ### 二.不使用脚本切割 ##### server 段增加以下代码 ``` if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") { set $time $1$2$3; } ``` ##### 日志文件路径中增加日期参数 ``` access_log /var/log/nginx/api-$time. ``` ##### 举个栗子 ``` events { worker_connections 1024; } http { server { # 监听88端口 listen 88;...
### 拷贝文件或文件夹 ``` /** * 拷贝文件 * * @param source 源文件 * @param target 目标文件 */ public void copyFile(String source, String target) { // 源文件 File sourceFile = new File(source); if (!sourceFile.exists()) { } // 目标文件 File targetFile = new File(target); // 文件拷贝 if (sourceFile.isFile()) { copyFromChanel(sourceFile, targetFile); } // 文件夹拷贝 if (!targetFile.exists()) { targetFile.mkdirs(); } for (File file: sourceFile.listFiles()) { copyFile(file.getAbsolutePath(), target + File.separator + file.getName()); } } ``` ### 利用文件管道拷贝文件 ``` /** * 利用文件管道拷贝文件 * * @param source 源文件 * @param target 目标文件 */ public void copyFromChanel(File source, File target) { // 文件流 FileInputStream fis = FileOutputStream fos = // 文件管道 FileChannel fci = FileChannel fco = try { // 文件流 fis = new FileInputStream(source); fos = new FileOutputStream(target); // 文件管道 fci = fis.getChannel(); fco = fos.getChannel(); ...
### 编辑 bash_profile ```shell vim ~/.bash_profile 输入以下内容并保存 export JAVA_HOME=`/usr/libexec/java_home` export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin ``` ### 使环境变量生效 ``` source ~/.bash_profile ``` ### 检验 ```shell tianshl@tianshl ~ $ echo $PATH ``` ### 备注 ``` 1. source前使用fish的要先退出fish 2. /usr/libexec/java_home 这条命令可以输出JAVA_HOME的路径 ```
### 需求 ``` 对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 } /...
### 依据 ``` 根据2017年10月份最新的手机号正则进行编码, 正则如下: (13\d|14[579]|15[^4\D]|17[^49\D]|18\d)\d{8} ``` ### 代码 ``` # -*- coding: utf-8 -*- import random def create_phone(): # 第二位数字 second = [3, 4, 5, 7, 8][random.randint(0, 4)] # 第三位数字 third = { 3: random.randint(0, 9), 4: [5, 7, 9][random.randint(0, 2)], 5: [i for i in range(10) if i != 4][random.randint(0, 8)], 7: [i for i in range(10) if i not in [4, 9]][random.randint(0, 7)], 8: random.randint(0, 9), }[second] # 最后八位数字 suffix = random.randint(000000) # 拼接手机号 return "1{}{}{}".format(second, third, suffix) # 生成手机号 phone = create_phone() print(phone) ``` ### 运行结果 ```
... ``` ### 验证 (使用正则验证) ``` # -*- coding: utf-8 -*- import random import re def create_phone(): # 第二位数字 second = [3, 4, 5, 7, 8][random.randint(0, 4)] # 第三位数字 third = { 3: random.randint(0, 9), 4: [5, 7, 9][random.randint(0, 2)], 5: [i for i in range(10) if i != ...
### 写在开头 ``` 使用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...
& 最近经常在一些大牛博客里看他们提到 Parcel,下意识关注一波,Parcel 官网介绍比较简单,官网里看到一篇入门博客,遂译之。 我们都经历过创建 React 项目时的痛苦,在能够正式编码之前需要花费数个小时去配置 Webpack。 [Create React App](https://github.com/facebookincubator/create-react-app) 开源项目让创建 React 项目变得更加容易和快速,但问题是 create react app将大量的 webpack 配置自己完成了。当项目变得越来越大需要使用一些高级特性时,又需要抛弃 create react app 然后去一步一步手动配置 webpack。然后又回到了学习 webapck 的问题上。 ![Parcel:开箱即用](http://upload-images.jianshu.io/upload_images/d51f37bc42463e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 最近一款新的打包工具诞生了 —— Parcel —— 号称零配置的打包工具。这听起来太过于美好而让人不敢相信,因为如果真的这样的话,它几乎解决了开发中的大多数问题。 我在一个很大的代码库中测试过,它果然开箱即用!它甚至给我打包了一个及其优化的包,而要打出同样优化的包使用 webpack 要花费我数天时间。 我认为它很酷并且很有潜力,让我们从头开始创...
1.因为是本地模拟sso环境,而sso的环境测试需要域名,所以需要虚拟几个域名出来,步骤如下: 2.进入目录C:\Windows\System32\drivers\etc 3.修改hosts文件 127.0.0.1
jeesz.cn 127.0.0.1
sso1.jeesz.cn 127.0.0.1
sso2.jeesz.cn 4.生成认证证书 注意:我们可以根据sso单点登录的架构图可以看到,在客户端和服务端进行交互的时候,是需要认证的,在这里我们使用jdk中的keytool方案生成证书(一般正式环境,使用正规机构颁发的证书,可以去购买) (一)创建一个caskey目录,如:D:\sso-cas\caskey (二)打开cmd的命令窗口: (三)进入jdk bin的安装目录
(四)使用keytool -genkey -alias mycacerts -keyalg RSA -keystore
D:/sso-cas/caskey/keycard
注意:输入相关信息用于生成证书. 其中名字与姓氏使用你的域名,保持和C:\Windows\System32\drivers\etc\hosts 文件中映射域名相同,注意不要写成IP。 在这里我使用的口令是minglisoft(这个要记住,后面还会使用到) 名字姓氏使用的是jeesz.cn(对应host中的域名配置) (五)使用命令keytool -export -file D:/sso-cas/caskey/keycard.crt -alias mycacerts -keystore D:/sso-cas/caskey/keycard导出证书: ...
今日在QQ上惊闻Waldo Tobler老先生已于昨日过世,实乃地理学界的一大憾事,特地以此文表示深切的悼念。 # (一) Waldo Tobler,生于1930年,圣塔芭芭拉加州大学(UniversityofCalifornia,SantaBarbara,简称UCSB,又常译为加州大学圣塔芭芭拉分校)退休教授,美籍瑞士地理学家,制图学家。下图的帅哥就是老爷子(文字介绍来自百度百科,图片来自维基百科)。 ![](http://img.blog.csdn.net/07382?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRVNBX0RTUQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) [百度百科](https://baike.baidu.com/item/%E5%9C%B0%E7%90%86%E5%AD%A6%E7%AC%AC%E4%B8%80%E5%AE%9A%E5%BE%8B/2362779?fr=aladdin) [维基百科](https://en.wikipedia.org/wiki/Waldo_R._Tobler) Tobler先生最广为人知的就是他提出的观点,也就是后来被地理学界称为地理学第一定律的“Everything is related to everything else, but near things are more related to each other”。个人的翻译为:世界上的一切事物都是相关的,但是相邻的事物相关性更大,当然有各自的翻译,整体意思是一致的,空间邻近的事物具有相关性,也就是所谓的空...
创建Tomcat v7.0 Server 不能进行下一步。 问题原因:这是因为项目的Dynamic Web Module配置太高导致 解决办法: 将Dynamic Web Module降到3.0及以下即可
自从macOS Sierra升级到10.12的版本后,相信很多伙伴在安装软件的时候都会遇到提示软件包损坏,打不开,以及它来自身份不明的开发者,那么这些问题怎么处理呢?请往下看。 如下图所示: 1.有这样的: 2.也有这样的: 3.还有这样的: 相信伙伴们在遇到以上的情况是不是觉得是软件包坏了呢? N0,非常肯定加确定的告诉您不是我们软件包坏了,而是Mac用户在第一时间升级mac10.12最新版本的系统后,系统中的"安全性与隐私"中没有"任何来源"这个选项.没有“任何来源”这个选项安装本站任何软件都会提示软件包来自不安全的开发者,包括提示软件包损坏。 那么Mac10.12安装软件包损坏怎么处理呢?以及怎么才能'‘打开任何来源”呢?那么接来下就让我为大家带来教程.很简单!simple!simple! 首先第一步: 打开我们的电脑终端,SO,终端怎么打开?(白眼)在应用程序里搜索终端就可以啦,如下图: 在应用程序搜索终端后打开终端,如下图: 然后输入以下命令:【sudo spctl --master-disable】注意是复制框内,不能有多余空格,然后粘贴到终端里,如下图: 输入命令后【回车】,出现【钥匙】输入你电脑的【开机密码】,输入就可以【屏幕上不会显示】但您已经输入了【Linux和Unix核心输入密码...
在kubernetes中使用ceph rbd做为挂载存储,当pod出现异常退出时,有可能会被编排到另外的节点上运行,而rbd不会随着pod的偏移而解除与原先节点的挂载关系,需要手动解除挂载,假设data_pool存储池中的test_image镜像被占用。 首先解除挂载 umount /dev/rbd/data_pool/test_image 解除映射关系 rbd unmap /dev/rbd/data_pool/test_image 通常情况下这样rbd就会解除占用,可以在其他节点上被挂载 但有时候会报设备繁忙的错误,这时就需要在ceph中强制断开映射连接 先查询当前被占用的rbd状态 rbd status data_pool/test_image 得到类似如下信息 Watchers:
watcher=192.168.1.100:0/ client.1574653 cookie=3 将该连接加入黑名单 ceph osd blacklist add 192.168.1.100:0/ 再次检查rbd状态 rbd status data_pool/test_image 这时rbd应当处于空闲状态,这时只需要删除异常pod或等待pod自动恢复即可...
在hadoop的hdfs管理界面中,有个Summary展示框,里面展示了该hdfs目前的相关状态,对hdfs的容量管理有很好的帮助作用,下面分析分析展示的具体内容。
图例中的数据,也可以通过hdfs dfsadmin -report命令来查看,还有单个节点的详细数据
用下图看可能会更直观一些:
Configured Capacity: 这是HDFS的总容量,是通过Configured Capacity = Total Disk Space - Reserved Space公式计算出来的,Reserved space是一个预留给OS层面操作的空间,Reserved space空间可以通过dfs.datanode.du.reserved=0在hdfs-site.xml文件中进行配置。
Present Capacity: 这是分配完metadata和open-blocks的空间后(Non DFS Used space),实际可用来存储文件的总容量,当DataNodes给NameNode发送report的时候,是发送的本机的Present Capacity容量,Present Capacity = DFS Used + DFS Remaining
DFS Remaining: 这是HDFS上实际可以使用的总容量,你必须除以复制因子,才是你实际可以使用的容量
DFS Used: 这是HDFS已经被使用的容量,这个值的大小是复制因子复制后的值,dfs.replication=3,你的真实数据使用容量是D...
* Created by zengxc on .
* 回调函数在java中的应用
public interface Function&E, T& {
public T callback(E e);
* Created by zengxc on .
public class FunctionMethod {
public void init(){
System.out.println("start init");
public String run(String key, String value){
System.out.println("runtime program");
return key +
public void close(){
System.out.println("end close");
* Created by zengxc on .
public class RedisUtils implements RedisUtilsImpl{
private FunctionMethod functionMethod = new FunctionMethod();
* 执行方法
public &T& T execute(Function&FunctionMethod, T& function){
FunctionMethod functionMethod =
this.functionMethod.init();
functionMethod = getNewClass();
return function.callback(functionMethod);
} catch (Exception e) {
e.printStackTrac...
开闭原则指的是软件实体(模块、类、方法等)对扩展开放,对修改关闭。如果程序要频繁的因为外部变化而修改,这个程序的灵活性就很不好。这也符合软件开发中向后兼容的要求。比如我开发的RPC接口暴露出去,当需求更改的时候,不能马上就去修改接口的,你永远也不知道你提供的接口都有谁在使用。所以这时候就需要去扩展,加一个新的接口。为了实现好的扩展性,就需要良好的抽象能力,把能预知的需求可能频繁变化的部分抽象出一个抽象类或接口,这样就可以在将来去横向扩展,而不必对原来的代码做任何改动。
近日,各大网站,包括新浪、腾讯、网易、搜狐都报道了一则关于微软宣布修复了一个存在了19年的安全漏洞的新闻,以腾讯科技为例,它的标题是《微软修复已存在19年的漏洞》。对于一个软件制造界外的人来说,这是一个大快人心的消息,就跟一个隐藏了19年的纳粹分子终于被抓住的新闻一样轰动。但以程序员为职业的我,听到这样一个消息,却有一种非常不解、甚至是荒谬、搞笑的感觉。从软件生产的角度讲,如果一个bug能存活19年,那它还是个bug吗? 一、很多项目生命期不超过19年 我在很多国企开发过项目,这些项目几乎每过几年都会重新开发一回,老项目或者废弃、或者推倒重来,遇到领导换班子或上级政策方向的改变,更容易发生这种事情。事实上,有大量的软件存活不到19年,都很短命。这一方面是技术的原因,更重要的一方面是国情的因素。如果在这样的一个项目里有一个bug,当这个软件几年后被遗弃时,从来没有被人发现——更符合软件科学的说,没有给用户带来任何烦恼。这样的bug对于用户来说是不可见、不可知、根本不存在的。我们没有必要、也不应该将这样的bug称作bug,更不应该为这样的bug大惊小怪。 二、修改bug有风险 我记得有一个非常有趣的关于bug段子,说的是: 代码中...
## node 多版本 [nvm](https://github.com/creationix/nvm) intall ``` curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash ``` install node ``` nvm install v8.9.4 // 国内安装 NVM_NODEJS_ORG_MIRROR=http://npm.taobao.org/mirrors/node nvm install v8.9.4 ``` [in fisher](https://github.com/fisherman/nvm) ``` omf install nvm ``` ## node-gyp 编译环境 ``` npm --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/mirrors/node install microtime ``` ## node开发环境 - [use docker](http://dockone.io/article/1714) ## npm tool ### yarn 另外一种npm 管理,尝试 - [yarn](https://yarn.org.cn/) - `npm install yarn -g` - 安装依赖 `yarn` or `yarn install` ## 其他 - [Web开发者手边的一本CentOS小书](https://github.com/Array-Huang/centos-book) - [细数国内外的前端大牛](https://www.tuicool.com/articles/6JFraui)...
透彻的掌握 Spring 中@transactional 的使用 事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编码式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。声明式事务有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于@Transactional 注解的方式。注释配置是目前流行的使用方式,因此本文将着重介绍基于@Transactional 注解的事务管理。 @Transactional 注解管理事务的实现步骤 使用@Transactional 注解管理事务的实现步骤分为两步。第一步,在 xml 配置文件中添加如清单 1 的事务配置信息。除了用配置文件的方式,@EnableTransactionManagement 注解也可以启用事务管理功能。这里以简单的 DataSourceTransactionManager 为例。 清单 1. 在 xml 配置中的事务配置信息 1 2 3 4 5 &tx:annotation-driven /& &bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"& &property name="dataSource"...
在平时的开发当中,我接触的很多开发者,写的方法中很少用到抛出异常的语句,对于一个严格的开发者来说,这是没有办法容忍的。 那么,在PHP中如何更好的使用异常呢?很多开发者可能对错误和异常有会很迷糊。今天就来介绍一下错误和异常的区别,以及我们应该如何更好的灵活运用。 参考文档: https://segmentfault.com/a/4337 http://bbs.csdn.net/topics/ http://blog.csdn.net/wjc/article/details/ http://www.jb51.net/article/97143.htm https://www.cnblogs.com/zyf-zhaoyafei/p/6928149.html
ERROR ITMS-90717:Invalid App Store Icon.
verynginx的核心结构
本文介绍使用Docker在云主机上部署多版本的PHP LNMP运行环境。
(function (window, $) {
$.fn.serializeJson = function () {//form serialize to json
var serializeObj = {};
var array = this.serializeArray();
$(array).each(
function () {
if (serializeObj[this.name]) {
if ($.isArray(serializeObj[this.name])) {
serializeObj[this.name].push(this.value);
serializeObj[this.name] = [
serializeObj[this.name], this.value];
serializeObj[this.name] = this.
return serializeO
})(window, jQuery);
https://www.liaoxuefeng.com/
自变量与因变量之间必须有线性关系 注意多变量之间的 多重共线性,自相关性和异方差性。 线性回归对异常值非常敏感。它会严重影响回归线,最终影响预测值。 多重共线性会增加系数估计值的方差,使得在模型轻微变化下,估计非常敏感。结果就是系数估计值不稳定 在多个自变量的情况下,我们可以使用向前选择法,向后剔除法和逐步筛选法来选择最重要的自变量。
根据官网的资料 Java Development Kit (JDK) Please note, since there are no available supported OpenJDK 8 packages for Ubuntu 14.04, the Ubuntu 15.04 packages must be installed manually. See JDK for Ubuntu LTS 14.04 for precise instructions. The master branch of Android in AOSP: Ubuntu - OpenJDK 8, Mac OS - jdk 8u45 or newer Android 5.x (Lollipop) - Android 6.0 (Marshmallow): Ubuntu - OpenJDK 7, Mac OS - jdk-7u71-macosx-x64.dmg Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat): Ubuntu - Java JDK 6, Mac OS - Java JDK 6 Android 1.5 (Cupcake) - Android 2.2.x (Froyo): Ubuntu - Java JDK 5 Key packages Python 2.6 -- 2.7 from python.org GNU Make 3.81 -- 3.82 from gnu. Android 3.2.x (Honeycomb) and earlier will need to revert from make 3.82to avoid build errors Git 1.7 or newer from git-scm.com 实测发现 make 4.1也可以用来编译Android N...
优秀应用算法都大量用到位运算,而位运算在工作中很少用到,所以借助其算法,我们看一下位运算的优势以及应用,但是大多数教材只会教大家二进制和十进制如何互换,都是死记硬背式的,并没有去讲解真正含义,换一个进制之后,依然不会,我们回到最根本的一些计数方法上,从10进制来推算,希望用一种更简单的方式介绍其原理
想使用微服务,却不知从何入手的同学或者有如下疑问的,可以看看这个项目实例。 参考我在解决如下问题的思路,这里只是简单的介绍,更多的内容靠源码表达了。有时间再单独就微服务的每一块写博客。
非常多的时候,我们不想在分享的时候采用长长的链接,主要的原因有: URL太长占显示空间、难于输入,转成二维码点点小,难于识别 长的URL提供的信息太多,不利于信息安全,甚至容易造成倒库 其他理由...... 今天的理由不是重点,重点是如何用一点点代码实现这个短链接的生成。 我们的注意点有: 生成的短链接地址长度可调整,毕竟不能因为4位、5位、6位的长度变化就让我们重新写一套程序 要有防冲突处理机制,不能因为算法导致两个长链接地址生成的短地址一样就把前一个覆盖掉 有时候,一个地址用过之后觉得不需要使用了,哪么这个地址失效之后,短地址可以有效收回。 首先设计接口 /**
* Created by luoguo on .
public interface UrlShortener {
* 设置产生短链接长度
* @param length
void setLength(int length);
* 返回短链接长度
int getLength();
* 返回指定地址对应的短链接
* @param url
String get(String url);
* 存储对应关系
* @param url
* @param shortUrl
前言 这个世界从来都不缺变革,从工业革命到晶体管和集成电路,从生活电器到物联网,从简陋人机到精致体验,我们在享受技术带来的便捷的同时,也在为复杂设计而带来的挑战和生产力下降而痛并快乐着。而迫切期盼的,就是趁手的工具。曾几何时,Visual Studio 一直就是软件开发的高效的标杆,从VB的简洁语法和简单的拖拽开始,Visual Studio 不断的完善,不断的适应快速变化的,加上成熟的生态,让微软世界里的各个伙伴们活的有滋有味。 近年来,微软开始了拥抱开源,投资云技术,在开发工具领域有明显的减持,这也让很多追随者感到不安。如今 Visual Studio 2017 的发布,给了开发者几点很明确的信号: 移动开发前景无限,解决方案多样化 跨平台服务器支持和服务器轻量化 开发过程标准化和开发效率持续提升 服务优于产品 作为微软工具的受益人,我们相信这是一个好的变化,有了变化,才有提升,才能提供更好的服务。
回顾 那么,在 Visual Studio 的20年发展历程中,都经历了哪些历程和技术变革呢?
根据微软的资料,第一个使用 Visual Studio 品牌销售的是 Visual Studio 97,后续版本(VS6)成为一代经典,即使今日依然还有企业和公司在使用;之后 Visual Studio 携...
一:工厂模式 工厂模式类似于现实生活中的工厂可以产生大量相似的商品的流水线,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。 简单的工厂模式可以理解为解决多个相似的问题;这也是它的优点;如下代码:
function CreatePerson(name) {
var obj = new Object();
obj.name =
obj.sayName = function(){
return this.
var p1 = new CreatePerson("longen");
var p2 = new CreatePerson("tugenhua");
console.log(p1.name); // longen
console.log(p1.sayName()); // longen
console.log(p2.name);
// tugenhua
console.log(p2.sayName()); // tugenhua
// 返回都是object 无法识别对象的类型 不知道他们是哪个对象的实列
console.log(typeof p1);
console.log(typeof p2);
console.log(p1 instanceof Object); // true
如上代码:函数CreatePerson能接受一个参数name参数,可以无数次调用这个函数,每次返回都会包含一个属性和一个方法的对象。 工厂模式是为了解决多个类似对象声明的问题;也就是为了解决实列化对象产生重复的问题。 优点:能解决多个相似的问题。 缺...
万丈高楼平地起,学习任何东西我们都离不开扎实的基础知识。本编文章通过对Handler相关知识的全面回顾,给Android开发者重新夯实基础。
相信很多在linux平台工作的童鞋, 都很熟悉管道符 '|', 通过它, 我们能够很灵活的将几种不同的命令协同起来完成一件任务.就好像下面的命令: echo 123 | awk '{print $0+123}'
# 输出246 不过这次咱们不来说这些用法, 而是来探讨一些更加有意思的, 那就是 管道两边的数据流"实时性" 和 管道使用的小提示.
其实我们在利用管道的时候, 可能会不经意的去想, 我前一个命令的输出, 是全部处理完再通过管道传给第二个命令, 还是一边处理一边输出呢? 可能在大家是试验中或者工作经验中, 应该是左边的命令全部处理完再一次性交给右边的命令进行处理, 不光是大家, 我在最初接触管道时, 也曾有这么一个误会, 因为我们通过现象看到的就是这样.
但其实只要有简单了解过管道这工具, 应该都不难得出解释: 管道是两边是同时进行, 也就是说, 左边的命令输出到管道, 管道的右边将马上进行处理.
管道的定义 管道是由内核管理的一个缓冲区,相当于我们放入内存中的一个纸条。管道的一端连接一个进程的输出。这个进程会向管道中放入信息。管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息。一个缓冲区不需要很大,它被设计成为环形的数据结构,以便管道可以被循...
长江后浪推前浪,如果你能花 30 分钟读完我 6 个小时翻译的内容,相信你不会被后浪拍死在沙滩上,对 2017 该学什么有个清晰的认识。
最近在搞一个直播项目需要聊天服务器,之前是以小打小闹来做的,并没有想太多就只有一台服务器。前几天一下子突然来了5000人,服务器瞬间gg,作为开发人员的我很尴尬! 这就是我们这篇文章的背景。
我使用的是C# Mvc4.0 来开发的,这里还需要一个redis 至于你是windows版本还是Linux版本我就不管了,反正是要有个地址一个端口,密码根据实际情况填写。
我这里用一个demo来展现分布式的情况https://git.oschina.net/908Sharp/signalR-multi-Server.git
第一步:新建两mvc项目
从nuget 中添加以下几个包 Install-Package Microsoft.AspNet.SignalR Install-Package Microsoft.AspNet.SignalR.Redis install-package Microsoft.Owin.Cors
第二步:在App_Start目录中添加Owin StartUp类
public void Configuration(IAppBuilder app)
GlobalHost.DependencyResolver.UseRedis("127.0.0.1", 6379, string.Empty, "SignalRBus");
app.Map("/signalr", map =&
好用!!!
实验:MySQL使用JDBC执行批处理性能测试
CheungSSH Web3.0 虽然不优秀,但衷心希望能给予支持和理解 项目地址:http://git.oschina.net/CheungSSH_OSC/CheungSSH 建议您使用git命令下载,因为文件比较大,如果用浏览器,和可能下载不完整 [root@CheungSSH ~]# git clone https://git.oschina.net/CheungSSH_OSC/CheungSSH.git 讨论QQ群:
在当今互联网的发展大势下,云计算和大数据已经成为主导。在两大趋势下,企业的服务器数量日益增多,如何有效的管理众多的服务器,已经成为了各大公司考虑的问题。在传统的人工管理模式下,已经很难做到高效的维护,是人管理服务器?还是服务器管理人?
为了解决这个问题,我痴迷于运维自动化研究,目前后端使用的Python语言+Django的Web框架,前端使用Bootstrap+Javascript+jQuery框架开发的CheungSSH Web3.0自动化运维系统,通信协议采用Linux系统自带的SSH协议,无Agent。并通过Paramiko库完成自动化登录,本系统可以基本满足日常的自动化运维需求。系统全程由我自主研发,不采用任何第三方工具和接口。
系统设计不足之处请各位朋友指出,也感谢大家的支持和信任,如果在使用过程中遇到任何问题,或者有任何的意见和建议...
Golang 因为其语法简单,上手快且方便部署正被越来越多的开发者所青睐,一个 Golang 程序开发好了之后,势必要关心其运行情况,今天在这里就给大家介绍一下如果使用 Elastic Stack 来分析 Golang 程序的内存使用情况,方便对 Golang 程序做长期监控进而调优和诊断,甚至发现一些潜在的内存泄露等问题。
Elastic Stack 其实是一个集合,包含 Elasticsearch、Logstash 和 Beats 这几个开源软件,而 Beats 又包含 Filebeat、Packetbeat、Winlogbeat、Metricbeat 和新出的 Heartbeat,呵呵,有点多吧,恩,每个 beat 做的事情不一样,没关系,今天主要用到 Elasticsearch、Metricbeat 和 Kibana 就行了。
Metricbeat 是一个专门用来获取服务器或应用服务内部运行指标数据的收集程序,也是 Golang 写的,部署包比较小才10M 左右,对目标服务器的部署环境也没有依赖,内存资源占用和 CPU 开销也较小,目前除了可以监控服务器本身的资源使用情况外,还支持常见的应用服务器和服务,目前支持列表如下: Apache Module Couchbase Module Docker Module HAProxy Module kafka Module MongoDB Module MySQL Module Nginx Module PostgreSQL Module Prometheus Module Redis Modu...
一提起“分布式系统”,大家的第一感觉就是好高大上啊,深不可测,看各类大牛关于分布式系统的演讲或者书籍,也大多是一脸懵逼。本文期望用浅显易懂的大白话来就什么是分布式系统、分布式系统有哪些优势、分布式系统会面临哪里挑战、如何来设计分布式等方面的话题来展开讨论。
和C++以模板来实现静多态不同,Java基于运行时支持选择了泛型,两者的实现原理大相庭径。C++可以支持基本类型作为模板参数,Java却只能接受类作为泛型参数;Java可以在泛型类的方法中取得自己泛型参数的Class类型,C++只能由编译器推断在不为人知的地方生成新的类,对于特定的模板参数你只能使用特化。在本文中我主要想聊聊泛型的实现原理和一些高级特性。
最近上课比较忙,一直没有时间整理一些知识,今天把webpack2的一些常见用法都给总结了一下。
所谓mysql的优化,三分是配置的优化,七分是sql语句的优化,通过一些案例分析,希望给大家在工作中带来一些思路
Dubbo概述 oDubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案 oDubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点 Dubbo背景 Dubbo的简介 oDubbo是一个分布式服务框架,Dubbo的架构如图所示: l节点角色说明: lProvider: 暴露服务的服务提供方。 lConsumer: 调用远程服务的服务消费方。 lRegistry: 服务注册与发现的注册中心。 lMonitor: 统计服务的调用次调和调用时间的监控中心。 lContainer: 服务运行容器。 dubbo模块分包 通讯关系 下载dubbo源码 o源码地址 https://github.com/alibaba/dubbo oEclipse maven工程引入 Dubbo项目编译打包 o环境是jdk8
oDubbo 工程 编译 oDubbo 工程 打包
服务安装 1.Zookper 安装(单点安装,集群安装也很简单) 2.Dubbo admin 安装 3.Dubbo moniter 安装 4.应用服务端启动(spring容器) 5.应用客户端启动(spring容器) Zookeeper安装 o下载解压 o进入zookeeper-3.4.8\conf目录下复制zoo_sample.cfg文件并修改为zoo.cfg o进入zookeeper-3.4.8\bin目录下点击zkServer.cmd,...
缓存系统的用来代替直接访问数据库,用来提升系统性能,减小数据库复杂。早期缓存跟系统在一个虚拟机里,这样内存访问,速度最快。 后来应用系统水平扩展,缓存作为一个独立系统存在,如redis,但是每次从缓存获取数据,都还是要通过网络访问才能获取,效率相对于早先从内存里获取,还是差了点。如果一个应用,比如传统的企业应用,一次页面显示,要访问数次redis,那效果就不是特别好,因此,现在有人提出了一二级缓存。即一级缓存跟系统在一个虚拟机内,这样速度最快。二级缓存位于redis里,当一级缓存没有数据的时候,再从redis里获取,并同步到一级缓存里。 现在实现这种一二级缓存的也挺多的,比如 hazelcast,新版的Ehcache..不过,实际上,如果你用spring boot,手里又一个Redis,则不需要搞hazelcastEhcache,只需要200行代码,就能在spring boot基础上,提供一个一二级缓存,代码如下:
import java.io.UnsupportedEncodingE
import java.util.concurrent.ConcurrentHashM
import org.springframework.beans.factory.annotation.V
import org.springframework.boot.autoconfigure.AutoConfigureB
import org.springframework.boo...
Quartz是一个完全由java编写的开源作业调度框架,它可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。Quartz依赖一套松耦合的线程池管理部件来管理线程环境。 特点 可集群 可伸缩性 高可用性 负载均衡 整合示例 1. 使用maven配置示例所需依赖包
&properties&
&springframework.version&4.0.6.RELEASE&/springframework.version&
&quartz.version&2.2.1&/quartz.version&
&/properties&
&dependencies&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-core&/artifactId&
&version&${springframework.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-context-support&/artifactId&
&version&${springframework.version}&/version&

我要回帖

更多关于 增强看齐意识内容 的文章

 

随机推荐