May 28, 2016
利用tcpdump抓取MySQL执行的SQL
"http://ourmysql.com/archives/1358 编写脚本文件dumpsql.sh,内容如下:\n#!/bin/bash #this script used montor mysql network traffic.echo sql tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e \u0026#39; while(\u0026lt;\u0026gt;) { chomp; next if /^[^ ]+[ ]*$/; if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL)/i) { if (defined $q) { print \u0026#34;$q\\n\u0026#34;; } $q=$_; } else { $_ =~ s/^[ \\t]+//; $q.=\u0026#34; $_\u0026#34;; } } 运行并抓去sql的执行。\n抓取后在当前目录出现out.log文件,执行strings out.log即可看到sql的运行情况"
May 21, 2016
理解OAuth 2.0
"客户端的授权模式 客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0定义了四种授权方式。\n授权码模式(authorization code)最完整、流程最严密的授权模式,如GitHub、微信等网站第三方登录方式 简化模式(implicit) 密码模式(resource owner password credentials)如目前手机APP中使用此模式 客户端模式(client credentials) http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html"
May 11, 2016
Vue.js学习资料
"在学习vue前,建立先了解一下 webpack https://fakefish.github.io/react-webpack-cookbook/index.html\n官方网站(中文版): http://cn.vuejs.org/ 构建大型应用使用组件 Vue-router: https://github.com/vuejs/vue-router 网络通讯插件Vue-resource: https://github.com/vuejs/vue-resource 单元测试karma: http://karma-runner.github.io/0.12/index.html https://cn.vuejs.org/ https://cn.vuejs.org/v2/api/ https://router.vuejs.org/zh-cn/ https://vuex.vuejs.org https://vue-loader.vuejs.org/zh-cn/ https://ssr.vuejs.org …"
May 10, 2016
mysql 数据表读锁机制详解
"为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制。 **一、概述 ** MySQL有三种锁的级别:页级、表级、行级。 MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。 MySQL这3种锁的特性可大致归纳如下: 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。\n从上述特点可见,很难笼统地说哪种锁更好,只能就具体应用的特点来说哪种锁更合适!仅从锁的角度来说:表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如Web应用;而行级锁则更适合于有大量按索引条件并发更新少量不同数据,同时又有并 …"
May 9, 2016
修改gitlab的项目部署url地址
"\u0026lt;刚在centos7上部署了最新版本的gitlab 8.7.3,发现在创建的git项目地址为http://localhost/username/www.git ,外网无法访问,这时我们只需要修改一个配置文件即可。我安装的时候全部使用的默认配置,路径为 /var/opt/gitlab/gitlab-rails/etc/,配置文件为 gitlab.yml ,文件顶部配置如下:\nhost: localhost port: 80 https: false 修改host值为你想使用的外网域名或服务器IP地址即可,保存退出。\ngitlab-ctl restart 注意这里的命令是restart不是 reconfigure(根据配置文件/etc/gitlab/gitlab.rb 重新生成配置) ,否则还会恢复原来的配置。\n用ps -ef | grep nginx命令看了下,发现运行的nginx的路径是/opt/gitlab/embedded/sbin/nginx,而配置文件路径是/var/opt/gitlab/nginx,怪不得我打开/etc/nginx/nginx.conf没看到gitlab …"
April 18, 2016
Mac上使用Brew 进行PHP多版本管理
"http://yansu.org/2014/09/26/use-old-version-of-brew-php.html\n版本切换方式 通过brew安装的php可以通过 brew link 和 brew unlink 来切换不同版本。\n例如\nbrew list brew unlink php56 brew link php55 大版本可以用 brew list 来查,如果是小版本的话只能去 /usr/local/Cellar/php55 看了。这个时候使用 php-version 可以更方便一点。\n我测试的此方法不行,只能使用php-verson 进行切换。\n安装 php-version php-version 是一个帮助管理从brew安装的php版本切换的工具。\n安装非常简单\nbrew install php-version 然后执行\n\u0026lt;span class=\u0026#34;nb\u0026#34;\u0026gt;source\u0026lt;/span\u0026gt; \u0026lt;span class=\u0026#34;k\u0026#34;\u0026gt;$(\u0026lt;/span\u0026gt;brew --prefix …"
April 18, 2016
HomeBrew中国镜像源
"Mac 终端跑入即可\ncd /usr/local/ git remote set-url origin http://mirrors.ustc.edu.cn/homebrew.git #或者这个: git remote set-url origin git://mirrors.tuna.tsinghua.edu.cn/homebrew.git brew update 如果还是感觉慢,看看这个: https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/\ncd ~/tmp git clone git://mirrors.tuna.tsinghua.edu.cn/homebrew.git rm -rf /usr/local/.git rm -rf /usr/local/Library cp -R homebrew/.git /usr/local/ cp -R homebrew/Library /usr/local/ 然后重试update。\n使用homebrew-science或者homebrew-python cd …"
April 13, 2016
JWT介绍
"JWT是什么\nJWT全称是JSON Web Tokens,是RFC 7519标准,用于安全校验两方可信性的安全措施。\nJWT解决了哪些问题?\nJWT本身设计是用于解决Session机制不能够很好的在SPA/API类型(restful)应用中处理身份认证问题。通常API的调用是无状态(stateless)的,使用Session等形式会有上下文要求。如当用户登录完成后,可以通过下发JWT的形式进行无状态的API调用。在此之前通常是使用的方式包括不限于如Basic Auth、Oauth2或Token形式进行。\nJWT相比是额外添加了签名校验方式,本质上来说对抗如暴力碰撞等形式有一些作用。但是由于本身长度的限制,存储的信息量有限。\nJWT处理方式\nJWT内容主要分为三段,分别对应头部信息,存储数据和签名信息三部分,中间使用『.』符号连接,三段信息均进行Base64编码。\n具体实现方式可参考如下伪代码实现:\nencodeBase64(header) + ‘.’ + encodeBase64(payload) + ‘.’ + Sign(key + encodeBase64(header) + …"
April 3, 2016
[翻译]理解 GO 语言的内存使用
"许多人在刚开始接触 Go 语言时,经常会有的疑惑就是“为什么一个 Hello world 会占用如此之多的内存?”。 Understanding Go Lang Memory Usage 很好的解释了这个问题。不过“简介”就是“简介”,更加深入的内容恐怕要读者自己去探索了。另外,文章写到最后,作者飘了,估计引起了一些公愤,于是又自己给自己补刀,左一刀,右一刀……\n————翻译分隔线————\n理解 Go 语言的内存使用 2014年12月22日,星期一\n温馨提示:这仅是关于 Go 语言内存的简介,俗话说不入虎穴、焉得虎子,读者可以进行更加深入的探索。\n大多数 Go 开发者都会尝试像这样简单的 hello world 程序:\npackage main import ( \u0026#34;fmt\u0026#34; \u0026#34;time\u0026#34; ) func main() { fmt.Println(\u0026#34;hi\u0026#34;) time.Sleep(30 * time.Second) } 然后他们就完全崩溃了。\n这个笔记本也只有 16 G 内存!\n虚拟内存 vs 常驻内存 Go 管理内存的方式可能与你以前使用的 …"