RabbitMQ学习
安装并启动
配置yum源
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
安装 yum install -y rabbitmq-server
启动 rabbitmq-server start &
安装管控台插件 rabbitmq-plugins enable rabbitmq_management
控制台
登录
浏览器输入http://ip:15672/ 用户名guest 密码guest
命令行
关闭应用 rabbitmqctl stop_app
启动应用 rabbitmqctl start_app
节点状态 rabbitmqctl status
添加用户 rabbitmqct ...
多线程笔记
CAS底层汇编命令 lock cmpxchg
volatile
线程内存可见
防止指令重排序
cache line 缓存行:当cpu去内存读数据时,会把附近的数据读出来,一般是64字节,是cpu同步的基本单位
缓存行隔离会比缓存行伪共享效率高
MESI
伪共享
合并写
cpu内部的4个字节buffer
指令重排序
rsync使用笔记
rsync特征
速度:第一次的rsync同步源的整个目录到目标位置。之后,rsync只传递改变的块或字节到目标位置,传输非常快。
安全:rsync在传输中允许使用ssh协议加密数据。
更少的带宽:rsync分别在发送和接收端对数据进行压缩和解压缩。
特权:不需要特殊权限来安装和执行rsync。
rsync语法$ rsync options source destination
#source和destination可以是本地或远程。在远程的情况下,需要指定登录名、远程服务器的名称和位置。
rsync使用示例
在本地服务器上同步两个目录
$ rsync -zvr 源目录 目标目录
# -z 允许压缩
# -v 详细输出
# -r 递归
# rsync 不会同步源文件或目录的时间戳
用rsync –a同步时间戳
$ rsync -azv 源目录 目标目录
只同步一个文件
$ rsync -v /var/test.txt /root/temp/
将本地文件同步到远程服务器
$ rsync -avz 源目录 username@remote_server_ip:path
...
zookeeper学习笔记
启动
启动 ./zkServer.sh start
客户端连接 ./zkCli.sh
客户端命令学习
ls /
ls2 /
stat
cZxid = 0x0 #id
ctime = Thu Jan 01 08:00:00 CST 1970 #创建时间
mZxid = 0x0 #修改id
mtime = Thu Jan 01 08:00:00 CST 1970 #修改时间
pZxid = 0x6 #子节点id
cversion = 2 #子节点版本
dataVersion = 0 #当前节点数据版本号
aclVersion = 0 #当前节点权限的版本号
ephemeralOwner = 0x0 #是否是临时节点
dataLength = 0 #数据长度
numChildren = 2 #子节点数量
session过期,则临时节点znode会被抛弃
create命令
set命令
delete命令
watcher 机制watcher
针对每个节点的操作,都会有一个监督者->watcher
当监 ...
浏览器缓存
缓存过程浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中,简单的过程如下图:
浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识
浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中
只要我们再理解浏览器缓存的使用规则,那么所有的问题就迎刃而解了。当浏览器向服务器发起请求时,服务器会将缓存规则放入HTTP响应报文的HTTP头中和请求结果一起返回给浏览器。
缓存规则强制缓存
规则:控制强制缓存的字段分别是Expires和Cache-Control,其中Cache-Control优先级比Expires高。
Expires:
Expires是HTTP/1.0控制网页缓存的字段,其值为服务器返回该请求结果缓存的到期时间,即再次发起该请求时,如果客户端的时间小于Expires的值时,直接使用缓存结果。
到了HTTP/1.1,Expire已经被Cache-Control替代,原因在于Expires控制缓存的原理是使用客户端的时间与服务端返回的 ...
SQL优化
数据结构
3层Btree可以存放上百万条数据
Btree一般指的是B+树,数据全部存放在叶子节点中。
B+树中查询任意的数据次数:n次(B+树的高度)
分类:
单值索引 单列的索引,一个表可以有多个单值索引
唯一索引 不能重复 可以为null
符合索引 多个列构成的索引
主键索引 不能重复,不能为null
SQL性能问题
分析sql的执行计划(explain),可以模拟SQL优化器执行sql语句
Mysql查询优化会干扰我们的优化。
explain 参数解析:
id:编号
id值相同,从上往下顺序执行;
id值越大越优先查询 (本质:在嵌套子查询时,先查内层 再查外层)
select_type 查询类型
PRIMARY:包含子查询SQL中的 主查询 (最外层)
SUBQUERY:包含子查询SQL中的 子查询 (非最外层)
simple:简单查询(不包含子查询、union)
derived:衍生查询(使用到了临时表)
在from子查询中只有一张表
explain select cr.cname from ( sele ...
macosX挂载NFS
Mac OS X使用automounter,也称为 autofs 来挂载NFS输出卷。Autofs包含以下程序和daemons:
autofsd
autofsd 执行 automount 之后 ,就会等待网络配置修改事件以及类似的事件发生。如果发生这样的事件,重新运行一次 automount 来更新挂载以反映当前automounter映射。也可以使用automount_reread 来运行 automount 。
automountd
automountd 是一个响应从 autofs 发出的请求的服务,用来挂载或卸载网络文件系统,并且提供目录的内容,基于automounter映射的内容。这个 automountd 是通过 launchd 来启动的。
automount
automount 是实际的挂载管理器。使用一些映射文件和配置文件来管理挂载和卸载远程资源。这些配置文件使用 /etc/autofs.conf 和 /etc/auto_master。
automount_reread
automount_reread 可以触发针对 aut ...
cec邮件调用示例
调用邮件的服务为一个定时任务,定时扫描指定文件,若存在待发送的邮件,则以javaMail的方式调用邮件服务,调用示例如下(发件人邮箱SMTP服务器地址:mail.cec.com.cn):
/**
* JavaMail 版本: 1.6.0
* JDK 版本: JDK 1.7 以上(必须)
*/
public class sendMailService {
/**
*
* @param myEmailAccount 发件人邮箱账号
* @param myEmailPassword 发件人邮箱密码
* @param myEmailSMTPHost 发件人邮箱SMTP服务器地址
* @param mainSendNameAccounts 收件人主送名称及账号
* @param copySendNameAccounts 收件人抄送名称及账号
* @param secretSendNameAccounts 收件人暗送名称及账号
...
windows7配置nfs
安装haneWIN NFS SERVER
下载地址
打开nfs客户端,配置如下
编辑要共享的目录后,重启服务器,列表中就会显示共享的服务器。如果不生效,则打开win7的服务管理器重启nfsd服务。
问题
保存配置文件时显示没有权限保存文件,需要以管理员身份运行nfs客户端。如何打开win7的管理员账户,可以参考win7系统设置用户帐户为最高权限的操作方法
cas单点登录
cas登出源码解析
js原型
obj这个对象本质上是被Object函数创建的,因此obj.__proto__=== Object.prototype。我们可以用一个图来表示。
即,每个对象都有一个__proto__属性,指向创建该对象的函数的prototype。
自定义函数的prototype本质上就是和 var obj = {} 是一样的,都是被Object创建,所以它的__proto__指向的就是Object.prototype。但是Object.prototype确实一个特例——它的__proto__指向的是null。
函数也是一种对象,函数是由Function,所以Object.__proto__ === Function.prototype
function fn(x,y){
return x+y;
}
var fn = new Function('x','y','return x+y');