原文链接https://imququ.com/post/four-ways-to-post-data-in-http.html 感谢作者分享^_^ 四种常见的 POST 提交数据方式 HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式。 我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样: <method> <request-URL> <version> <headers> <entity-body> 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 继续阅读 >>


王伟豪 17/03/20 00:24:54
假设你的home目录为/home/work mysql-server 安装 下载mysql.tar.gz wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.17.tar.gz 下载cmake [5.5及以上的版本需要用cmake进行安装] cmake 官网下载 http://cmake.org/cmake/resources/software.html wget http://www.cmake.org/files/v2.8/cmake-2.8.12.2-Linux-i386.tar.gz 解压 tar -zxvf cmake-2.8.12.2-Linux-i386.tar.gz 无需编译 直接使用 cmake-2.8.12.2-Linux-i386/bin/cmake 安装mysql 1) tar -zxvf mysql-5.6.17.tar.gz 2) cd mysql-5.6.17 3) /home/work/cma 继续阅读 >>


王伟豪 17/02/25 12:46:49
原文 virtualenv virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够: 1. 在没有权限的情况下安装新套件 2. 不同应用可以使用不同的套件版本 3. 套件升级不影响其他应用 安装 sudo apt-get install python-virtualenv 使用方法 virtualenv [虚拟环境名称] 如,创建ENV的虚拟环境 virtualenv ENV 默认情况下,虚拟环境会依赖系统环境中的site packages,就是说系统中已经安装好的第三方package也会安装在虚拟环境中,如果不想依赖这些package,那么可以加上参数 –no-site-packages建立虚拟环境 virtualenv –no-site-packages [虚拟环境名称] 启动虚拟环境 cd ENV source ./bin/activate 注意此时命令行会多一个(ENV),ENV为虚拟环境名称,接下来所有模块都只会安装到该目录中去。 退出虚拟环境 deact 继续阅读 >>


王伟豪 16/10/21 10:56:36
原文链接 背景 原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 Docker 的镜像了, 于是就尝试了一下, 发现真是爽爆了, 几个命令就可以搭建一个完整的 ZK 集群. 下面我简单记录一下使用 Docker 搭建 ZK 集群的一些步骤. 镜像下载 hub.docker.com 上有不少 ZK 镜像, 不过为了稳定起见, 我们就使用官方的 ZK 镜像吧.首先执行如下命令: docker pull zookeeper 当出现如下结果时, 表示镜像已经下载完成了: docker pull zookeeper Using default tag: latest latest: Pulling from library/zookeeper e110a4a17941: Pull complete a696cba1f6e8: Pull complete bc427bd93e95: Pull complete 继续阅读 >>


王伟豪 16/09/16 08:35:01
记录一些自己不常用的 SQL 查询语句。 例子:现有一张老员工表 staff,员工信息包括姓名,部门,薪水以及等级,公司将新员工放入数据库中的另一张表 newStaff。现在我需要我们查询哪一个部门的哪位员工薪水最高。 join 查询 简单分析一下,两张表,我们要一起查询获得结果首先会用到连接查询,条件是最高的一位,简单使用 order by 排序然后 limit 1 即可。 那么设想的 SQL 语句为 mysql> (select staff.name, staff.dept, max(staff.salary) as MaxSalary from staff left join newStaff on staff.dept = newStaff.dept) union (select newStaff.name, newStaff.dept, max(newStaff.salary) as MaxSalary from staff right join newStaff on staff.dept = newStaf 继续阅读 >>


王伟豪 16/09/02 02:01:30
前几天百度面试,当时让实现一个 LRU Cache,要求 O(1) 完成查找。后来发现这个也可以用在自己简易的 key-value 数据库项目中。 简单来说 LRU 是内存管理的一种算法,淘汰最近不用的页。 O(1) 时间完成查找,那除了 hash 别无选择。LRU 用双向链表实现即可。数据结构选择好了,查找我们用 hash 通过 key 得到链表节点的位置,然后更新 LRU 链表即可。 简单说下自己的项目,一个类似 Memcache 的小型数据库。 当时和 Memcache 设计不同的一点是没有将所有 Slab 上的 item 串到一起。而是将 Slab 串成一个链,每个 Slab 有自己的 Free Item List 和 Alloc Item List,当前 Slab 锁如果被占用,自旋若干次,还失败则到下一个 Slab 尝试获取锁,避免阻塞。这样减小锁的颗粒度,在并发情况下性能应该会好些。每个 Slab 的 Alloc Item List 就是一个 LRU Cache。若 Free Item 分配完时,则通过 hashmap 来找到 All 继续阅读 >>


王伟豪 16/09/01 19:13:19
写在前面 在进行大型网站技术架构设计以及业务实现的过程中,多少都会遇到需要使用分布式锁的情况。那么问题也就接踵而至。分布式锁zk和memcached以及redis三者都能实现,同样是分布式锁,三者的区别何在?各自适用什么场景? Zookeeper 1、实现原理: 基于zookeeper瞬时有序节点实现的分布式锁,其主要逻辑如下(该图来自于IBM网站)。大致思想即为:每个客户端对某个功能加锁时,在zookeeper上的与该功能对应的指定节点的目录下,生成一个唯一的瞬时有序节点。判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个。当释放锁的时候,只需将这个瞬时节点删除即可。同时,其可以避免服务宕机导致的锁无法释放,而产生的死锁问题。 2、优点 锁安全性高,zk可持久化,且能实时监听获取锁的客户端状态。一旦客户端宕机,则瞬时节点随之消失,zk因而能第一时间释放锁。这也省去了用分布式缓存实现锁的过程中需要加入超时时间判断的这一逻辑。 3、缺点 性能开销比较高。因为其需要动态产生、销毁瞬时节点来实现锁功能。所以不太适合直接提 继续阅读 >>


王伟豪 16/08/17 21:05:34
一、背景 我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如: 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱; 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的; 创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题。 等等很多重要的情况,这些逻辑都需要幂等的特性来支持。 二、幂等性概念 幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和setTrue()”函数就是一个幂等函数. 更复杂的操作幂等保证是利用唯一交易号(流水号)实现. 我的理解:幂等就是 继续阅读 >>


王伟豪 16/08/17 20:27:41
原文链接 问题 业务场景 业务需求上经常会有一些边缘操作,比如主流程操作A:用户报名课程操作入库,边缘操作B:发送邮件或短信通知。 业务要求 操作A操作数据库失败后,事务回滚,那么操作B不能执行。(失败后也可以重新进行自调度) 操作A执行成功后,操作B也必须执行成功 如何实现 普通的执行A,之后执行B,是可以满足要求1,对于要求2通常需要设计补偿的操作 一般边缘的操作,通常会设置成为异步的,以提升性能,比如发送MQ,业务系统负责事务成功后消息发送成功,然后接收系统负责保证通知成功完成 本文内容 如何在spring事务提交之后进行异步操作,这些异步操作必须得在该事务成功提交后才执行,回滚则不执行。 要点 如何在spring事务提交之后操作 如何把操作异步化 实现方案 使用TransactionSynchronizationManager在事务提交之后操作 public void insert(TechBook techBook){ bookMapper.inser 继续阅读 >>


王伟豪 16/08/05 10:10:29
目录: PHP 变量 print 和 echo PHP 数据类型 PHP 常量 PHP 字符串变量 PHP 运算符 算数运算符 赋值运算符 递增递减 比较运算符 逻辑运算符 数组运算符 三元运算符 ifelseswitch PHP 数组 在 PHP 中创建数组 PHP 数组排序 超级全局变量 PHP 循环 PHP 函数 PHP 魔术变量 命名空间 PHP 面向对象 PHP 变量 变量以 $ 符号开始,后面跟着变量的名称。 变量名是区分大小写的($y 和 $Y 是两个不同的变量)。 PHP 和 python 一样是一门弱类型语言,不用声明类型。PHP 会根据变量的值,自动把变量转换为正确的数据类型。 local:局部作用域,一般在函数内部定义。 global:全局作用域,在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。(PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的 继续阅读 >>


王伟豪 16/07/28 11:41:27