Archive 2020

Leetcode30

Published at April 12, 2020 ·  1 min read

寻找到达某个节点的路径 这是今天面试遇到的一道算法题,看起来比较简单,思路很清楚,但是有些细节没有想清楚,所以没有一下子,答出来。现在整理下思路继续写出来。 题目是: 有如下数组[1, 2, [5,6,8,[21,22]],[12,15]],返回到达给定元素的路径。 思路是深度有限遍历,然后把路径放进一个栈里面,进入节点压栈,出节点退栈。 <?php function deepin($arr, $needle, $path) { if (is_array($arr)) { foreach ($arr as $key => $value) { $path[] = $key; if ($res = deepin($value, $needle, $path)) { return $res; } else { array_pop($path); } } } if ($arr == $needle) { return $path; } else { array_pop($path); return false; } } $array = [3, 5, [9, 10, 11], [12, 13, 29]]; $path = []; $path = deepin($array, 5, $path); 因为用到了递归,所以数据规模比较大的话会爆栈,还需要优化下,用非递归的方式去遍历。...


ElasticSearch 系列(一)

Published at April 5, 2020 ·  1 min read

ElasticSearch 简介 ElasticSearch 是什么 ElasticSearch 是分布式的搜索和分析引擎。它可以为各种类型的数据提供接近实时的搜索和分析功能,不管是结构化的还是非结构化的文本,数值型数据或者地理位置数据,ElasticSearch 可以有效的存储和索引。 下面列出一些可以使用 ElasticSearch 的场景: 给网站或者 APP 添加搜索功能 存储和分析日志,系统指标和安全事件数据 使用机器学习实时自动化建模数据行为 把 ElasticSearch 当做存储引擎自动化业务流程 用来做地理位置信息系统(GIS),存储分析空间信息 用来做生物信息研究工具 等等,总而言之真的很强大 数据存入: 文档和分片 相较于列数据的行存储,ElasticSearch 使用可以被序列化成 JSON 文档的复杂的数据结构,当你有一个有多节点的群时,存储的文档会被分布到集群的每个节点上,每个节点都可以访问到你存储的数据。 当文档被存储在 ElasticSearch 后,你可以在 1 秒钟之内搜索到它。原因是因为它使用一种叫倒排索引的数据结构,倒排索引支持快速的全文搜索。倒排索引会列出文档中出现的每个单词,并且标识单词出现的所有文档。这有有一段维基百科的解释比较清楚的介绍了倒排索引的原理。 以英文为例,下面是要被索引的文本: T0 = “it is what it is” T1 = “what is it” T2 = “it is a banana”...


Mysql 分区表实践

Published at April 4, 2020 ·  2 min read

Mysql 表分区实践 为什么要分区 单表数据量过大时,查询操作会导致 CPU 飙升,机器压力很大,所以 Mysql 官方开发了分区功能,可以用来解决这个问题。 Mysql 的分区原理 分区就相当于把原先存在一张表中的数据,按照指定规则放到几张小表里,当查询进来后再按照这个规则去找对应的表。比如按照区间分表,把用户 id 0-100000 的放到一个表,100000-200000 的放一个表,一般是根据业务来定规则。 分区的策略 Range Partition 按照某个字段的区间来分,比如说按照store_id区间分,stroe_id 在 [0,6] [6,11] [11,16] [16,21] 这些区间分属于不同的区域 CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT NOT NULL, store_id INT NOT NULL ) PARTITION BY RANGE (store_id) ( PARTITION p0 VALUES LESS THAN (6), PARTITION p1 VALUES LESS THAN (11), PARTITION p2 VALUES LESS THAN (16), PARTITION p3 VALUES LESS THAN (21) ); List Partition...


Kafka 入门

Published at April 3, 2020 ·  2 min read

Kafka 入门 Kafka 是什么 Kafka 是分布式的流处理平台。 Kafka 主要的应用场景大体分为两类: 在多个应用之间构建一条实时流式数据管道 构建用于响应或修改流数据的应用 Kafka 中的几个概念 Topic Kafka 中给流记录是按分类来存储的,每个分类就是一个 Topic Broker 消息中间件处理节点,一个 Kafka 节点就是一个 Broker,一个或者多个 Broker 可以组成一个 Kafka 集群,一般情况下 Kafka 都是已集群方式运行的,由 Zookeeper 来管理每个节点 Producer 数据生产者 它的职责是选择分配记录给哪个 Topic 的哪个 Partition,一般采用的策略是轮训,也可以根据记录的 key 进行自定义配置 Consumer 数据消费者 每个消费者保留的唯一元数据是该消费者在日志中的 offset 或 position,消费者可以以任意顺序来处理记录 消费者默认都会有一个消费者组,消费者组中的消费者可以使用在多个进程中或者多个机器中,发布到一个 Topic 的记录会被发送到每个消费者组内的其中一个消费者,也就是说一个消费者组实际上算是一个订阅者,内部的消费者有统一的 offset。...


Hugo 安装

Published at March 31, 2020 ·  1 min read

Hugo 安装 由于最近换了一台新的服务器,想把博客迁移过来所以决定把hugo 在新服务器上再安装一遍 环境: CentOS Linux release 7.3.1611 x86_64 阅读 Hugo 的文档 发现新版本需要 go1.11 所以先安装 go 找到下载地址下载地址 我们选择最新版本 1.14.1 选中x86_64 对应的二进制包 切换到临时目录 cd /tmp/ 下载 wget https://dl.google.com/go/go1.14.1.linux-amd64.tar.gz 我想把 go 安装到 /usr/local/, 于是把安装包解压到 /usr/local/ tar -C /usr/local -xzf go1.14.1.linux-amd64.tar.gz 然后把 go 的 bin 目录添加到系统 PATH 路径中...


单点登录系列(一)

Published at March 23, 2020 ·  1 min read

单点登录出现的背景 企业内的办公软件繁多,每个软件都有一套自己的用户系统,每个系统都需要注册一个账号,对员工来说需要记录许多账号密码,难以使用,对企业来说需要管理多系统的用户,难以管理。如果有一个系统实现用户的统一管理,登录企业内的所有软件只需要一个账号,对员工和企业都是好事。 单点登录的出现就解决了这个问题。 单点登录的实现方式 单点登录实现的核心就是多应用共享会话,共享会话的实现方式因协议而异,目前主要有三种协议。 SAML(Security Assertion Markup Language) SAML 是一种基于 XML 结构提供应用间交换用户信息的协议。下面放一张 SAML 单点登录的流程图。 其中有三个角色, Client(客户端),Identify Provider(认证服务提供者),Service Provider(服务提供者),SP 提供服务,IP 负责认证 SAML协议 比较复杂,上面的流程图只是 web 浏览器的访问模式,还有 ECP(Enchaned Client Or Proxy) 加强型客户端或代理,IDP(Identity Provider Discovery) 认证服务发现等几种模式。 OIDC(OpenID Connect) OpenId Connect 是基于 OAuth 2.0 协议的一种简单认证层协议。它允许客户端通过授权服务去校验终端用户的身份,并通过易上手的 REST 风格的接口获取用户的基本信息。 OIDC 的基本流程如下图 +--------+ +--------+ | | | | | |---------(1) AuthN Request-------->| | | | | | | | +--------+ | | | | | | | | | | | End- |<--(2) AuthN & AuthZ-->| | | | | User | | | | RP | | | | OP | | | +--------+ | | | | | | | |<--------(3) AuthN Response--------| | | | | | | |---------(4) UserInfo Request----->| | | | | | | |<--------(5) UserInfo Response-----| | | | | | +--------+ +--------+ RP (Reply Party) 代表需要验证用户身份的客户端...


Composer 自动加载解析

Published at March 22, 2020 ·  4 min read

Composer 自动加载分析以及优化 自动加载的原理 自动加载的核心实现是依靠 spl_autoload_register 函数 spl_autoload_register 可以注册自动加载器到SPL __autoload函数队列中。用通俗一点的话说就是这个方法允许我们自己定义一个自动加载函数。 下面给出一个官方的例子 A.class.php <?php class A { function foo() { echo __CLASS__ . PHP_EOL; } } autoload.php <?php spl_autoload_register(function ($class) { echo $class . PHP_EOL; $filename = $class . '.class.php'; if (file_exists($filename)) { include $filename; } else { throw new Exception("Unable to load {$class}", 1); } }); try { $obj = new A(); } catch (Exception $e) { echo $e->getMessage() ....


RabbitMq 基本概念以及使用

Published at March 3, 2020 ·  5 min read

RabbitMQ 基本概念以及使用 AMQP 中的一些概念 RabbitMQ 原生实现了 AMQP 协议,下面讲的一些概念都是 AMQP 0-9-1 模型的概念 在 AMQP 中有以下几种角色 Publisher 消息发布者,这个应该很好理解就是发送消息的一方 Broker 中转站,接收消息并根据制定规则发给接收方 Exchange 交换机,消息送到中转站后首先会被发给它,它再根据规则发给指定的队列 Queue 队列,存储消息的地方 Consumer 消费者,接收消息的一方,消费端会从指定的队列中取消息 给出一张 AMQP 协议的模型图 Exchange 的类型分为 4 种 Direct Exchange Fanout Exchange Topic Exchange Headers Exchange 下面会按照类型给出相应的 PHP 示例 首先要下载安装 rabbitmq 的 server 端,我选择使用 docker...


西方哲学史读书笔记

Published at January 3, 2020 ·  1 min read

最近在读罗素写的西方哲学史,其中有一首关于酒神的诗 Will they ever come to me, ever again, The long long dances, On through the dark till the dim stars wane? Shall I feel the dew on my throat, and the stream Of wind in my hair? Shall our white feet gleam In the dim expanses? Oh, feet of a fawn to the greenwood fled,...


西方哲学史读书笔记

Published at January 3, 2020 ·  1 min read

最近在读罗素写的西方哲学史,其中有一首关于酒神的诗 Will they ever come to me, ever again, The long long dances, On through the dark till the dim stars wane? Shall I feel the dew on my throat, and the stream Of wind in my hair? Shall our white feet gleam In the dim expanses? Oh, feet of a fawn to the greenwood fled, Alone in the grass and the loveliness; Leap of the hunted, no more in dread, Beyond the snares and the deadly press: Yet a voice still in the distance sounds, A voice and a fear and a haste of hounds; O wildly labouring, fiercely fleet, Onward yet by river and glen… Is it joy or terror, ye storm-swift feet?...



Recent posts

Leetcode30

ElasticSearch 系列(一)

Mysql 分区表实践

Kafka 入门

Hugo 安装


Archives

2020 (11)
2019 (56)