- 博客(226)
- 资源 (58)
- 收藏
- 关注
原创 堆排序
将所有序列构建成一个完全二叉树,然后将完全二叉树构造成大堆顶或者小堆顶。以小堆顶为例,要求二叉树中所有节点必须小于自己的左右两个叶子节点,用数学公式表达就是:k(n)<=k(2n+1) && k(n)<=k(2n+2) 当一轮堆排序完成后,堆顶就是该序列最小值。此时将堆顶元素取走,对剩下的n-1个元素再做一轮堆排序,直到全部元素从堆顶吐出。 小堆顶取值,则整个序列是倒序排列;大堆顶取值,则整个序列是正序排列。 核心问题有2个,第一:如何对无序的堆进行排序;第二:吐出堆顶后二叉树被破坏,如果重新构建这个二
2017-12-10 22:51:09 435
原创 归并排序
相邻两个元素二二合并形成一个小序列进行比较,合并一轮后再两个子序列二二合并形成更大的子序列进行排序,中间过程中遇到单个的子序列则等到下一个合并周期,直到所有序列合并成一个总序列,排序后结束。
2017-12-09 19:12:29 224
原创 快速排序详解与实现
选一个序列中的值,所有元素跟这个值做比较,序列被分为两部分,然后对剩下每部分继续做相同操作。 快排随机性很大,跟选取的值有关系,每次选值有可能将序列平均分为两份,也有可能做了无用功选取了最大或者最小的那个值,所以时间消耗上随机性很大.
2017-12-09 12:49:54 348
原创 冒泡排序
序列中相连的元素从左到右两两做比对和位移,[0,1]、[1,2]、[2,3]……[n-1,n],比对完一轮后最大的(或最小的)就落到了队尾,对剩下的n-1个元素继续做相同操作,直到结束。每次比对关注的值越来越大,最终露出水面,所以很形象的称为冒泡排序。时间复杂度方面,冒泡复杂而且稳定,不会因数据的随机性而变化,比对次数=(n-1)+(n-2)+…+(n-n+1)=(n^2)/2-n/2,所以复杂度O(n^2) 稳定性方面我们可以控制冒泡的规则,不打破相等数值原来的相对位置,所以是稳定的. 空间复杂度
2017-12-08 19:19:23 219
原创 简单选择排序和二元选择排序
简单选择排序在整个数组中选取最小值替换队首,再对剩下的n-1个元素选取最小值,依此类推直至结束。二元选择是对简单排序的优化,每次选取最小最大两个极限值分别放在队首和队尾的位置,整个序列两头有序中间无序。二元选择减少了对无序部分的便利次数,复杂度和稳定性跟简单选择排序一样.
2017-12-07 22:55:58 589
原创 希尔插入排序:
按一定跨度d两两进行比对并按序交换位置,进行完一轮比对后跨度缩小再进行下一轮,经过几轮后先将整个序列变成部分有序,然后再进行直接插入排序,减少直接插入排序的开销。希尔算法涉及到2个概念,跨度和深度,跨度一般我们选取总长度n的一半,下一轮再减半,也就是[n/2,n/4,n/8,…],深度根据序列元素的大小自己设置,深度越深希尔算法消耗越大,但是希尔后的列表越趋近有序,直接查插入时消耗越小,极限情况下希尔排序后序列已经完全有序,直接插入消耗约等于零。
2017-12-07 22:28:20 603
原创 直接插入排序
从第一个元素开始,被认为是一个有序的序列,剩下的元素按位置顺序逐一与前面的有序序列进行比对并按序插入到序列中。这样序列首部从小大到序列在增长,序列尾部无序的部分在削减,直到最尾部一个元素比对结束后,整个序列变成有序。
2017-12-07 22:07:45 220
原创 详解Https出现的前因后果
虽然自己不直接从事互联网行业,但是对互联网行业的技术一直没有放松学习,特别是安全方面一直是我薄弱的方面,所以最近踏下心来好好的研究了下互联网安全方面的内容。网上关于SSL、Https的学习资料比较多,有些讲的太宽泛,有些讲的又不容易理解,我以自己的角度和自己的顺序来好好摸清这些内容。 首先澄清3个概念:SSL、TLS、Https。SSL:Secure Sockets Layer,中...
2017-12-05 18:51:46 765
原创 Python验证RSA非对称加密
加密方式从密钥是否相同的角度分为对称加密和非对称加密。对称加密:“加密”和“解密”使用【相同的】密钥。非对称加密:“加密”和“解密”使用【不相同的】密钥。非对称加密服务端生成一对密钥(公钥和私钥),将公钥公开给访问者,要求访问者通过公钥来加密,自己通过私钥来解密。从效率上来讲,对称加密速率快很多,但是密钥的保存和传输的安全性成了很大的风险;而非对称加密只传输公钥,没有私钥是无法解开密文的,所以安全性更高,但是开销更大。现阶段流行的非对称加密是RSA加密,本文主要解释下RSA非对称加密,并用Pyt
2017-12-04 18:27:07 968 2
原创 Java转Python入门之运算与循环
做Java有很多年,做到后面发现Java在后台业务处理、微服务架构、系统框架建设等方面有突出的优点,但是在某些方面确实疲软,例如在研究机器学习时一些发杂的运算和演练用Java写起来费劲甚至基本写不出来,所以需要一种跟精进的脚本语言帮助做运算,所以选择转学Python,第一两条腿走路在研发这行能走得更远,第二利用Python敲开机器学习的大门,开拓自己的视野和事业。
2017-12-03 19:25:51 1077 1
原创 Java基础学Python之环境与语法
做Java有很多年,做到后面发现Java在后台业务处理、微服务架构、系统框架建设等方面有突出的优点,但是在某些方面确实疲软,例如在研究机器学习时一些发杂的运算和演练用Java写起来费劲甚至基本写不出来,所以需要一种跟精进的脚本语言帮助做运算,所以选择转学Python,第一两条腿走路在研发这行能走得更远,第二利用Python敲开机器学习的大门,开拓自己的视野和事业。
2017-12-01 22:24:50 592
原创 SpringBoot模拟单点登录
简言之,系统内部通过某种技术实现用户统一登录和注销,所以单点登录技术一定要包括两部分:登录、注销。出现的原因是Cookie不能跨域。认证客户端应该具备的能力:1必须以Filter或者插件等形式提供,方便系统接入SSO。2未登陆的用户重定向到SSO认证中心3接收SSO发来的令牌并将该令牌发回给SSO做令牌认证4处理令牌认证结果并创建局部会话5拦截用户注销请求并重定向到SSO6处理SSO发来的注销会话请求 认证服务端应该具备的能力:0独立的web服务1提供登陆页面,和对用户的校验2创建全
2017-11-30 21:48:34 13384 16
原创 验证码原理详解与案例
验证码技术的出现是为了防止对服务和数据库进行暴力攻击而设置的一道墙,客户端与服务端交互步骤如图剩下的细节问题还有:1, 验证码如何加噪成图片,主要靠java.awt下的类包2, 服务端如何维护验证码,靠Redis和SessionID
2017-11-24 21:25:35 1769
原创 Cookie详解与跨域问题
Http是无状态的协议,客户端每次对服务端的http请求都是独立的,不受该客户端其它的请求的影响。为了把Http这个无状态协议变的与上下文有关系,我们引入了会话(Session)的概念,具有相同会话ID的请求使之变成了有状态。服务端可以给请求setSession的信息,信息保存在服务端内存,同时在response时将session内容推送给客户端浏览器,浏览器为了保存SessionID等信息,又有了Cookie这玩意,Cookie本质是一块存储少量数据的存储空间,可以存到内存也可以写入磁盘。每次浏览器向
2017-11-23 18:22:21 6726
原创 Spring Framework灰度发布
今天简单介绍下SpringFramework微服务中几种服务发布策略以及实现方式。我接触过的有蓝绿、滚筒和灰度发布。
2017-11-17 16:47:35 3423
原创 Redis的应用场景
Redis应用的场景算是我接触过的组件中应用范围最广的,我的一位学C的朋友告诉我说,Redis的学习就是数据结构的学习,Redis的设计充满了艺术的美感。Redis的应用场景是围绕着它的本质来展开的,分布式内存NoSql数据库,下面看下几种应用场景
2017-11-16 18:29:41 740
原创 Redis的事务机制和订阅发布
Redis事务提供了一种“将多个命令打包,然后一次性、按顺序地执行”的机制。一个事务从开始到执行会经历以下三个阶段: 1. 开始事务。2. 命令入队。3. 执行事务。Redis的订阅发布有基于频道和基于模式两种策略。
2017-11-15 20:03:23 961
原创 Redis持久化(RDB+AOF)与容灾备份
Redis持久化配置分为3种:第一种:不做持久化,做为纯内存数据库来使用,Redis关闭重启后恢复白板一张,数据全部丢失。第二种:RDB,将Reids在内存中数据快照定时dump到磁盘上,在 Redis 重启动时,RDB程序可以通过载入 RDB文件来还原数据库的状态。配置如下:save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。...
2017-11-15 19:48:21 943
原创 Redis在Centos7下的集群安装
最近花了3天时间,终于把Redis的集群搭建起来了,高开低走,开始觉得还算容易,装到后面做集群的时候被Ruby环境坑了2天,不过最后还是搞定了,这里跟大家分享下。Redis集群的安装分为3大步骤:步骤一:Redis节点安装步骤二:OS上Ruby环境搭建步骤三:Redis集群配置
2017-11-13 17:24:05 654
原创 三张图秒懂Redis集群设计原理
Redis集群设计包括2部分:哈希Slot和节点主从,本篇博文通过3张图来搞明白Redis的集群设计。想扩展并发读就添加Slaver,想扩展并发写就添加Master,想扩容也就是添加Master,任何一个Slaver或者几个Master挂了都不会是灾难性的故障。
2017-11-08 22:27:20 43143 24
原创 Redis数据结构与五种基本类型
Redis数据结构与五种基本类型Redis 是一个键值对内存数据库(key-value DB),数据库的值可以是字符串、集合、列表等多种类型的对象,而数据库的键则总是字符串对象。
2017-11-07 17:37:39 1207
原创 分布式事务详解
到目前为止,分布式事务仍是个技术性难题,仍没有一个银弹能完美的解决跨事务的问题,本文结合自己实际应用中的案例和一些成熟设计与大家探讨下。XA、二阶段、业务补偿、本地事务化、TCC、人工处理
2017-11-06 15:49:04 597
原创 ElasticSearch作为搜索引擎-Spring Boot集成
ElasticSearch作为搜索引擎,我们需要解决2大问题:1, 如何将被搜索的数据在ES上创建反向索引2, Java代码如何与ES交互其中第一个大问题又分为两个小问题1.1,如何初始化已有的数据1.2,如何同步增量数据第二个大问题也有两种集成方式2.1 Spring Data 9300端口集成2.2 Restful API 9200端口集成本篇先解决第二大问题。
2017-11-01 16:07:18 23662 2
原创 ElasticSearch作为搜索引擎-Oracle数据同步
ElasticSearch作为搜索引擎,我们需要解决2大问题:1, 如何将被搜索的数据在ES上创建反向索引2, Java代码如何与ES交互其中第一个大问题又分为两个小问题1.1,如何初始化已有的数据1.2,如何同步增量数据第二个大问题也有两种集成方式2.1 Spring Data 9300端口集成2.2 Restful API 9200端口集成本篇先解决第一大问题。
2017-11-01 15:42:15 8105
原创 ElasticSearch中文检索支持-ik插件
英文的分词相对简单,因为英语单词之间是通过空格分隔开的,这就具备了先天上的优势,剩下的工作只需要做些助词剔除、时态单复数转化就可以了。虽然汉字没有单复数的区别,省去了一部分转化的开销,但是汉字的字和词在书写时是没有任何物理上的分割能力的,完全要靠语境进行“智能”的推测。在创建反向索引和进行搜索时需要对中文分词进行一些特殊的处理,在ElasticSearch中是通过插件的形式实现的。
2017-10-30 14:46:15 8054
原创 CentOS下Maven安装
今天在安装ElasticSearch ik插件时遇到一个问题,需要对解压后的文件用maven命令进行打包,但执行打包命令时发现mvn命令不可用。mvn clean package借此机会Pick up了Centos上Maven的安装。
2017-10-27 14:35:35 319
原创 走向边缘的设计模式
在起草本篇博文之前,关于这个题目该如何命名斟酌了好久,随着互联网技术的兴起和日异月新的发展,代码设计上的美感比起为达目的面向服务编程已经变得微乎其微。本来想起名为“走向灭亡的设计模式”,但是仔细思考下也不对,第一每个架构师和程序员都有追求完美代码的意愿,第二设计模式留下的思想上的精髓依然适用于互联网时代。所以本篇不套用任何设计模式的代码公式,只研究每种模式的思想。
2017-10-26 09:37:11 526
原创 Spring Cloud各组件总结归纳
前面介绍了很多Spring Cloud的组件,本篇按照自己的角度来做一次归纳。Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。Ribbon,客户端负载均衡,特性有区域亲和、重试机制。Hystrix,客户端容错保护,特性有服务降级、服务熔断、请求缓存、请求合并、依赖隔离。Feign,声...
2017-10-24 16:46:34 52056 7
原创 Spring Cloud Sleuth (2)-与ELK集成
通过Spring Cloud Sleuth (1)-入门篇我们已经引入了Sleuth的基础模块完成一次任务链的跟踪,但是由于日志文件都离散的存储在各个微服务结点上,日常运维时仅仅通过查看日志文件来分析定位问题还是一件繁琐的问题。所以我们需要一些工具来收集、存储、分析和展示日志信息,例如ELK(ElasticSearch、Logstash、kibana)组件。
2017-10-23 14:06:22 15051
原创 ELK-ElasticSearch+Logstash+Kibana
ELK,ElasticSearch+Logstash+Kibana三个组件的缩写,应用场景比较广泛:1, 用于微服务架构中日志收集、分析、展示功能的基础组件。2, 用于网站操作动作捕获监控、分析、展示功能的基础组件。ElasticSearch:承担存储和分析功能,原理和具体操作前面已经花了大量篇幅来介绍。Logstash:ELK架构的内容来源,负责收集和简单数据处理。Kibana:提供友好展示、报表统计功能
2017-10-20 11:08:58 2651
原创 ElasticSearch 命令-(进阶篇)
本篇主要学习DSL格式的ElasticSearch查询语法,了解Filter的作用,了解常用的聚合。
2017-10-13 17:16:26 3049
原创 ElasticSearch 命令-(基础篇)
ElasticSearch的命令调用是基于http的,提供了丰富的RESTFul API,从功能上来分可以分为4类:(1) 检查集群、节点、索引等状态信息;(2) 管理集群、节点、索引数据及元数据;关。(3) 执行CRUD操作及搜索操作; (4) 执行高级搜索操作,例如paging、filtering、scripting、faceting、aggregations及其它操作;
2017-10-11 17:34:18 6258
原创 ElasricSearch集群搭建
前一篇介绍了2种单结点安装的方式,现在我们看下2台CentOS7如何搭建一套Cluster,不同ES版本配置略有出入,自报家门我使用的是5.6.1版本。前面讲过ES的结点配置在/conf/elasticsearch.yml中,里面的英文描写已经很详细,es通过发现机制寻找默认集群名称的所有节点,最终拥有相同集群名称的节点就自动的构成了一个ElasticSearch集群。
2017-09-28 23:33:19 3014
原创 ElasticSearch单节点安装
Linux版本(本人使用的是CentOS7)ElasticSearch是基于Lucene实现的,而Lucene是java开发的,所以在安装ElasticSearch之前需要先准备好java环境。 在elastic网站上找到自己想要下载的版本,而且网站上还有安装步骤和案例https://www.elastic.co/downloads/elasticsearch目前最新的版本...
2017-09-28 18:09:21 2558
原创 ElasticSearch原理
ElasticSearch(简称ES)是一个基于Lucene构建的开源(open-source),分布式(distributed),RESTful,实时(real-time)的搜索与分析(analytics)引擎。一一拆分定义:基于Lucene,那就需要我们要提前了解好Lucene的相关知识(Lucene原理分析);分布式的,分片原理是分布式的基础;RESTFul,说明我们对ElasticSearch的调用是通过http RESTFul格式的;实时,说明搜索效率高;搜索与分析,说明不仅只提供单独的反向索引
2017-09-27 22:56:03 703
原创 Lucene技巧分析
Lucene中用到的一些设计,主要是为了满足2个特点:1存储小;2检索快。这里把Lucene里用到的技巧单独领出来了解下,是为了多学习一些优秀的算法,开阔思路,在工作中万一遇到类似的场景可以学以致用。
2017-09-26 18:13:29 526
原创 Lucene原理分析
ElasticSearch是基于Lucene的搜索服务器,lucene承载了elasticSearch的核心算法和设计系想,所以要想彻底学透ElasticSearch需要从学习Lucene开始。
2017-09-25 22:19:25 745
ChaosBlade项目外部分享.pdf
2020-07-22
深度学习在线下场景的探索与实践-云栖大会.pdf
2020-07-21
集成智能接入网关APP:优化企业级移动办公网络.pdf
2020-07-21
运营商如何实现大型企业大型企业应用上用云.pdf
2020-07-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人