自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhangdonghang

我要一步一步往上爬 在最高点乘着叶片往前飞

  • 博客(62)
  • 问答 (1)
  • 收藏
  • 关注

原创 git入门命令

2019-01-31 16:10:23 170

原创 生成JWT格式的token

JWT简介JWT是json web token缩写 它将用户信息加密到token里,服务器不保存任何用户信息 服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证 于token的身份验证可以替代传统的cookie+session身份验证方法JWT组成header部分{ "alg": "HS256", "typ": "JWT"}//对应base64U...

2019-01-22 11:28:21 2530

翻译 修炼内功---数据结构与算法31---构建高性能的二叉排序树

为什么要引入二叉排序树我们前面已经介绍了很多数据结构,比如数组、链表、散列表等,数组查找性能高,但是插入、删除性能差,链表插入、删除性能高,但查找性能差,在不考虑散列冲突的话,散列表的插入、删除、查找性能都很高,但是前提是没有散列冲突,此外,散列表存储的数据是无序的,散列表的扩容非常麻烦,涉及到散列冲突时,性能不稳定,另外,散列表用起来爽,构造起来可不简单,要考虑散列函数的设计、哈希冲突...

2018-12-28 09:18:42 210

翻译 修炼内功---数据结构与算法30---二叉树的遍历

二叉树的遍历指的是从根节点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次有多种方式可以遍历二叉树,如果限制从左到右的习惯方式,主要分为三种:前序遍历、中序遍历和后序遍历。下面我们简单介绍这几种遍历方式及对应实现算法,所谓的前序、中序和后序都是以根节点作为参照系前序遍历二叉树为空,则返回空,否则从根节点开始,先遍历左子树,再遍历右子树 &l...

2018-12-28 09:18:18 209

翻译 修炼内功---数据结构与算法29---二叉树的存储

树和二叉树的定义和特性,树这种结构不能简单通过线性表的前后关系来存储,在线性表中,一个节点只有至多一个前驱节点和至多一个后驱节点,树则不然,一个节点可能有多个后驱节点,这个时候,我们需要通过更加复杂的结构才能存储树。二叉树是一种特殊的树,比多叉树要简单,因为特定节点至多只有两个节点,这就极大简化了相应的数据结构,使得通过线性表就可以实现二叉树的存储。我们后面基本只讨论二叉树,下面我们通过数组和链表...

2018-12-27 12:47:27 224

翻译 修炼内功---数据结构与算法26---字符串匹配算法之BF算法

几个字符串匹配算法,首先从最简单的字符串匹配算法 —— BF 算法说起,BF 是 Brute Force 的缩写,中文译作暴力匹配算法,也叫朴素匹配算法。BF 算法的原理很简单,在继续介绍之前,我们先引入两个术语:主串和模式串。简单来说,我们要在字符串 A 中查找子串 B,那么 A 就是主串,B 就是模式串。作为最简单、最暴力的字符串匹配算法,BF 算法的思想可以用一句话来概括,那就是...

2018-12-27 11:45:38 189

转载 MySQL 大表优化方案(长文)

当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 1...

2018-12-27 11:40:49 263

翻译 修炼内功---数据结构与算法23---哈希算法及其应用场景

哈希算法的概念和特性 我们前面分享了散列表、散列函数和散列冲突,其实也可以译作哈希表、哈希函数和哈希冲突,是一个意思。哈希算法简单理解就是实现前面提到的哈希函数的算法,用于将任意长度的二进制值串映射为固定长度的二进制值串,映射之后得到的二进制值就是哈希值(散列值)。 我们日常开发中最常见的哈希算法应用就是通过 md5 函数对数据进行加密了,md5 就是一个哈希函数,结合 md5 我...

2018-12-27 11:36:15 209

翻译 修炼内功---数据结构与算法22---散列函数设计与散列冲突处理

昨天我们分享了散列表的实现,对 PHPer 来说,应该对散列表很熟悉,因为我们每天用的数组就是基于散列表实现的。比如 $arr['test'] = 123 这段代码,PHP底层会将键值 test 通过散列函数转化为散列码,然后将 123 映射到这个散列码上。在不考虑哈希冲突的情况下,散列表查找、删除、插入的时间复杂度都是 O(1),非常高效。 要减少哈希冲突,提高散列表操作效率,设计一...

2018-12-27 10:52:54 200

翻译 修炼内功---数据结构与算法21---散列表、散列函数和散列冲突

散列表(HashTable,也叫哈希表),是根据键(Key)直接访问在内存存储位置的数据结构原理:通过散列函数(也叫哈希函数)将元素的键映射为数组下标(转化后的值叫做散列值或哈希值),然后在对应下标位置存储记录值。当我们按照键值查询元素时,就是用同样的散列函数,将键值转化数组下标,从对应的数组下标的位置取数据: 散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的...

2018-12-27 10:34:55 202

翻译 修炼内功---数据结构与算法20---倒排索引

百度、Google等搜索引擎为我们日常查找信息带来了巨大的方便,你是否思考过搜索引擎是如何从海量 HTML 文档中通过关键词查找资源的?今天给大家介绍最简单,也是最基础的搜索引擎技术 —— 倒排索引。有倒排索引,就有正向索引,正向索引指的是通过文档 ID 找到对应的文档,如果通过文档ID查找对应文档,再在文档中匹配关键词,意味着要扫描所有文档,最后还要排序,对于互联网上的海量资源来说,显然是...

2018-12-27 10:19:53 282

翻译 修炼内功---数据结构与算法19---分块索引

提到了稠密索引的缺点,进而引出今天的主题 —— 分块索引 为了减少索引项个数,我们对数据集进行分块,并使其分块有序 然后再给每个分块建立一个索引项(索引值是分块中最大关键码),至于分块内部,则不管其有序性,从而减少索引项的个数 在查找的时候在索引项中通过二分查找找到指定索引项,然后根据该索引项中的关键码去相应分块遍历查找指定元素 这是一种折中方案,既兼顾了空间复...

2018-12-27 10:05:16 248 1

翻译 修炼内功---数据结构与算法18---稠密索引

前面我们提到的二分查找适用于有序线性表的查找此外针对二分查找还有升级版的插值查找不过一般我们使用二分查找就可以了二分查找不适用于高速增长的海量数据因为维护这个排序非常麻烦所以我们引出索引这种数据结构索引是为了加快查找速度而设计的一种数据结构索引就是把一个关键字与它对应的记录相关联的过程一个索引由若干索引项构成每个索引项至少包含关键字和其对应记录在存储器中的位置等信息索引技...

2018-12-27 09:52:24 213

翻译 修炼内功---数据结构与算法16---二分法变形2

在给定排序序列中查找第一个大于等于给定值的元素所不同的是判断节点不一样了,我们之前的需求都是查找等于给定值现在变成了大于等于给定值,所以我们要在 $nums[$mid] >= $num 这个判断条件上做文章思路还是和之前两个变形版本类似当 $mid 已经是最左边的元素,或者 $mid 的前一个元素值小于给定查询值,则 $mid 对应元素即为满足条件的元素,否则继续往前查找...

2018-12-27 09:35:07 156

翻译 修炼内功---数据结构与算法15---二分法变形1

除了正常的二分查找,还有很多二分查找的变形版本符合标准的二分查找条件的序列一般是比较理想的情况,如果要查找的元素在序列中有多个怎么办?在一个给定排序序列中查找第一个等于给定值的元素其实关键节点就在于在序列中找到值等于待查找元素值时的处理如果此时 $mid 位置已经到了序列的最左边,不能再往左了,或者序列中索引小于 $mid 的上一个元素值不等于待查找元素值,那么此时 $mid 就是...

2018-12-22 17:46:08 218

翻译 修炼内功---数据结构与算法14---二分法查找

所谓二分查找,针对的是一个有序的数据集合(这点很重要),查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。注意到二分查找针对的必须是已经排序过的有序数组,否则不能使用该算法。<?phpfunction binary_search($nums, $num){ if (count($nums)...

2018-12-22 16:59:33 168

翻译 修炼内功---数据结构与算法12---快速排序

https://blog.csdn.net/adusts/article/details/80882649这个博客写的很好<?phpfunction quick_sort($nums){ if (count($nums) <= 1) { return $nums; } quick_sort_c($nums, 0, count($...

2018-12-22 16:32:26 170

翻译 修炼内功---数据结构与算法11---归并排序

所谓归并排序指的是如果要排序一个数组我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了归并排序使用了分治思想分治,顾名思义,就是分而治之,将一个大问题分解成小的子问题来解决归并排序就是通过递归来实现的这个递归的公式是每次都将传入的待排序数组一分为二,直到不能分割,然后将排序后序列合并,最终返回排序后的数组&...

2018-12-22 14:35:46 121

翻译 修炼内功---数据结构与算法10---选择排序

选择排序算法的实现思路有点类似插入排序也分已排序区间和未排序区间但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾<?php /** * 选择排序算法实现 */ function selection_sort($nums) { if (count($nums) <= 1) { ...

2018-12-22 12:56:38 158

翻译 修炼内功---数据结构与算法9---插入排序

插入排序的原理我们将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。<?php/** * 插入排序实现函数(PHP)从小到大 * @param $num...

2018-12-22 12:47:15 140

翻译 修炼内功---数据结构与算法8---冒泡排序

在选择排序算法的时候,通常会根据以下几个维度来考虑:1、时间复杂度2、空间复杂度(对内存空间的消耗)3、算法的稳定性(如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变)冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求,如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次...

2018-12-22 10:41:12 183

翻译 修炼内功---数据结构与算法6---队列

<?php/** * 通过 PHP 数组实现的队列 */class SimpleQueue{ private $_queue = []; private $_size = 0; public function __construct($size = 10) { $this->_size = $size; } ...

2018-12-22 10:29:05 99

翻译 修炼内功---数据结构与算法5---栈

<?php/** * 通过 PHP 数组实现简单的顺序栈 */class SimpleStack{ private $_stack = []; private $_size = 0; public function __construct($size = 10) { $this->_size = $size; }...

2018-12-22 10:26:55 113

翻译 修炼内功---数据结构与算法4---链表结构

前置知识<?php/** * array_splice — 去掉数组中的某一部分并用其它值取代 * array array_splice ( array &$input , int $offset [, int $length = count($input) [, mixed $replacement = array() ]] ) * 把 input 数组中由 offs...

2018-12-22 10:19:46 149

翻译

一、锁的兼容性    InnoDB 实现了以下两种类型的行锁        共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁        排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁    为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB 还有两种内部使用的意向锁(Intention Locks),这两种意向...

2018-12-21 10:58:03 103

翻译 MVCC

转载https://blog.csdn.net/whoamiyang/article/details/519018881.1 什么是MVCC    MVCC是一种多版本并发控制机制1.2 MVCC是为了解决什么问题    大多数的MYSQL事务型存储引擎,如InnoDB都不使用一种简单的行锁机制     事实上,他们都和MVCC多版本并发控制来一起使用     大家都应该知道,锁...

2018-12-20 15:03:26 148

翻译 事务

脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据 不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没...

2018-12-20 11:51:40 307

翻译 不知疲倦的Crontab

检查cron服务检查Crontab工具是否安装:crontab -l检查crond服务是否启动:service crond status安装cron-yum install vixie-cron-yum install crontabs一个简单的例子每分钟都打印当前时间到一个日志文件中crontab -e*/1 * * * * date >> /tmp/log....

2018-12-18 15:07:59 173

翻译 Socket Demo

看到这篇博客,写的非常好,成功尝试完记录一下。http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.htmlPHP的手册有很多没有中文翻译,看来有时间学习一下英语是有必要的,算了还是翻译吧。TCP/IP,即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。 UDP(User Data Pr...

2018-12-17 16:13:09 196

翻译 PHP7新特性

一、标量类型声明标量类型声明 有两种模式: 强制 (默认) 和 严格模式现在可以使用下列类型参数(无论用强制模式还是严格模式)字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)它们扩充了PHP5中引入的其他类型:类名,接口,数组和 回调类型function sumOfInts(int ...$ints){ print_r(...

2018-12-15 21:00:19 105

翻译 秒杀抽奖防超卖

任何需求都要认真思考,不要想当然,多想多做多自测,感谢慕课网提供优秀的视频资源帮助我进步。//第一种思路function v1(){ //奖励限额 $amountLimit = 100; //计数器名称 $keyName = getKeyName('v1'); $redis = getRedisClient(); //每次步进1 ...

2018-12-15 17:09:28 415

翻译 伪静态和重定向学习笔记

在HTTP中,301永久重定向,302临时重定向,重定向技术来实现伪静态,最大的一个好处就是安全。因为可以不暴露web程序的真实地址第一个例子修改Apache的配置,修改目录权限AllowOverride All 工作环境生成.htaccess文件避免每次重启apache 生产环境中配置到apache配置中<Directory />    Options +Index...

2018-11-30 23:51:07 328

原创 代理模式和装饰器模式:似是而非

<?php/** * 抽象主题角色(Subject):定义了RealSubject和Proxy公用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。 * 真正主题角色(RealSubject):定义了Proxy所代表的真实实体。 * 代理对象(Proxy):保存一个引用使得代理可以访问实体,并提供一个与RealSubject接口相同的接口,这样代理可以用来代替...

2018-11-07 16:12:09 122

原创 深入浅出MySQL读书笔记3

18.2索引问题18.2.1索引的存储分类MySQL目前不支持函数索引,但是能对列的前面某一部分进行索引,例如标题title字段,可以只取title的前10个字符进行索引,这个特性可以大大缩小索引文件的大小,但前缀索引也有缺点,在排序Order By和分组Group By操作的时候无法使用。create index idx_title on film(title(10));Inn...

2018-09-10 23:26:45 208

原创 深入浅出MySQL2

 第18章    SQL优化18.1    优化SQL语句的一般步骤18.1.1    通过show status命令了解各种SQL的执行效率查询当前session中所有统计参数的值:show status like 'Com_%';Com_select:一次查询只累加一次; Com_insert:对于批量插入的INSERT操作,只累加一次; Com_update: Co...

2018-09-09 23:06:14 299

原创 深入浅出MySQL读书笔记1

第10章 索引的设计和使用索引用于快速找出在某个列中有一特定值的行。如果不用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。表越大,花费的时间越多。如果用索引,MySQL能快速到达一个位置去搜索数据文件的中间,没有必要看所有的数据。索引是提高SELECT操作性能的最佳途径 。10.1 索引举例explain select * from city where city...

2018-09-09 20:24:56 203

原创 MySQL必知必会读书笔记

-- 第三章 # 返回可用数据库的一个列表SHOW DATABASES;# 返回当前选择的数据库内可用表的列表SHOW TABLES;# 返回一个表各列的信息 DESCRIBE customers是该命令的简写SHOW COLUMNS FROM customers;-- 第四章# 检索不同的行 SELECT vend_id FROM products;...

2018-09-05 17:44:13 187

原创 go语言web系列3 mysql单表原生增删改查

package mainimport ( "database/sql" _ "github.com/go-sql-driver/mysql" "fmt")func main() { insert()}func insert() { db, err := sql.Open("mysql", "root:root@/test") checkErr(err) stmt...

2018-08-30 17:02:05 344

原创 go语言web系列2 json

package mainimport ( "net/http" "fmt" "net/url" "io/ioutil" "encoding/json" "log" "strconv")type Hero struct { Name string Skill []Action Position int}type Acti

2018-08-30 15:14:13 334

原创 go语言web系列1 接收请求的参数

package mainimport ( "net/http" "fmt" "net/url" "io/ioutil" "encoding/json" "log")/*** Form:存储了post、put和get参数,在使用之前需要调用ParseForm方法* PostForm:存储了post、put参数,在使用之前需要调用ParseForm方法* Mult

2018-08-28 12:37:24 1993

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除