自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员光剑

AI 天才研究院和光剑读书创始人兼 CEO

  • 博客(32)
  • 资源 (9)
  • 问答 (1)
  • 收藏
  • 关注

原创 大数据 Lambda 架构

目标市场上的许多玩家已经建立了成功的MapReduce工作流程来每天处理以TB计的历史数据。但是谁愿意等待24小时才能获得最新的分析结果?这篇博文将向您介绍旨在利用批处理和流处理方法的Lambda架构。我们将利用Apache Spark(Core,SQL,Streaming),Apache Parquet,Twitter Stream等实时流数据快速访问历史数据。还包括清晰的代码和直观的演示!...

2019-10-30 15:37:41 9454 1

转载 实时协同编辑的实现

在最近某个项目中打算使用协同编辑来解决冲突问题,因此抽空调研了现有的实现方案,结果发现要想做完美是很难的,但我们可以低成本地做到不错的效果,本文将介绍几种实现方法,大家在项目中如果有需要可以参考。什么是实时协同编辑这里所说的实时协同编辑,是指多人同时编辑一个文档,最典型的例子是 Google Docs,你可以实时看到别人做出的修改,不用手动刷新页面。要实现实时编辑,我们需要解决两个技术...

2019-10-30 15:03:21 10793

原创 数据湖 与 Lambda 架构

数据湖 与 Lambda 架构目录数据湖 与 Lambda 架构1.Lambda架构背景介绍2.大数据系统的关键特性3.数据系统的本质3.1.数据的本质3.1.1.数据的特性:When & What3.1.2.数据的存储:Store Everything Rawly and Immutably3.2.查询4.Lambda架构4.1.Batch L...

2019-10-27 21:37:42 9324

转载 Lambda架构已死,去ETL化的IOTA才是未来

经过这么多年的发展,已经从大数据1.0的BI/Datawarehouse时代,经过大数据2.0的Web/APP过渡,进入到了IOT的大数据3.0时代,而随之而来的是数据架构的变化。▌Lambda架构在过去Lambda数据架构成为每一个公司大数据平台必备的架构,它解决了一个公司大数据批量离线处理和实时数据处理的需求。一个典型的Lambda架构如下:...

2019-10-27 21:26:17 8624

原创 云原生 (Cloud Native) = 微服务 + DevOps + 持续交付 + 容器化 ?

容器化包装:软件应用的进程应该包装在容器中独立运行。动态管理:通过集中式的编排调度系统来动态的管理和调度。微服务化:明确服务间的依赖,互相解耦。imagehttps://dzone.com/articles/cloud-native-seeing-through-the-hypeimage什么是云原生?云原生准确来说是一种文化,更是一种...

2019-10-27 14:07:08 10508

原创 云原生 (Cloud Native) = 微服务 + DevOps + 持续交付 + 容器化 ?

云原生准确来说是一种文化,更是一种潮流,它是云计算的一个必然导向。意义在于让云成为云化战略成功的基石,而不是障碍。Cloud Native 翻译为云原生,是Matt Stine提出的一个概念,它是一个思想的集合,包括DevOps持续交付微服务(MicroServices)、敏捷基础设施(Agile Infrastructure)、康威定律(Conways Law)等,以及根据商业能力对公司进行重组。

2019-10-27 12:08:44 21044 2

原创 基于函数工作流的函数组合

基于函数工作流的函数组合函数工作流(Function Flow,简称 FnF)是一个用来协调多个分布式任务执行的全托管 Serverless 云服务,简化了开发和运行业务流程所需要的任务协调、状态管理以及错误处理等繁琐工作,让用户更好的专注业务逻辑开发。可以说函数工作流是转为函数组合而生,有效的解决了上面几种异步组合模式的局限性。上面的所有模式都是通过点对点的方式来组合函数,而函数工作...

2019-10-27 11:56:43 9404

原创 MySQL索引底层实现原理 & MyISAM非聚簇索引 vs. InnoDB聚簇索引

MySQL索引底层实现原理MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n...

2019-10-25 11:15:33 9087

原创 数据库中的 “行式存储”和“列式存储”

传统的关系型数据库,如 Oracle、DB2、MySQL、SQL SERVER 等采用行式存储法(Row-based),在基于行式存储的数据库中, 数据是按照行数据为基础逻辑存储单元进行存储的, 一行中的数据在存储介质中以连续存储形式存在。随着大数据的发展,现在出现的列式存储和列式数据库。它与传统的行式数据库有很大区别的。行式数据库是按照行存储的,行式数据库擅长随...

2019-10-25 11:04:08 9782

原创 Redis 为什么这么快? Redis 的有序集合 zset 的底层实现原理是什么? —— 跳跃表 skiplist

Redis有序集合 zset 的底层实现——跳跃表skiplistRedis简介Redis是一个开源的内存中的数据结构存储系统,它可以用作:数据库、缓存和消息中间件。它支持多种类型的数据结构,如字符串(Strings),散列(Hash),列表(List),集合(Set),有序集合(Sorted Set或者是ZSet)与范围查询,Bitmaps,Hyperloglogs 和地理空间...

2019-10-24 17:50:57 15709 1

原创 聚簇索引与非聚簇索引

InnoDB 聚簇索引InnoDB使用的是聚簇索引,将主键组织到一棵B+树中,而行数据就储存在叶子节点上,若使用"where id = 14"这样的条件查找主键,则按照B+树的检索算法即可查找到对应的叶节点,之后获得行数据。若对Name列进行条件搜索,则需要两个步骤:第一步在辅助索引B+树中检索Name,到达其叶子节点获取对应的主键。第二步使用主键...

2019-10-23 23:08:31 8627

原创 MySQL 聚簇索引和非聚簇索引 & mysql 索引为啥用b 树

聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据 非聚簇索引:数据存储和索引分开放,索引结构的叶子节点指向了数据的对应行,myisam通过 key_buffer 把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在 key buffer 命中时,速度慢的原因(磁盘 IO)。澄清一个概念:inno...

2019-10-23 22:48:31 11499 2

原创 使用 Kotlin 写一段函数式的递归遍历树结构,处理节点的代码

fun visitNavigation(navData: List<NavigationNodeVO>?, visitor: (NavigationNodeVO) -> Unit) { navData?.map { visitor(it) val children = it.children visitNavigation(...

2019-10-23 19:55:54 8711

原创 《绿皮书》中的经典台词

电影简介《绿皮书》第91届奥斯卡金像奖最佳影片。许多知名国际影评人甚至将其评为2019年最具人文主义美感的文艺电影。该片根据真人真事改编,主要讲述在上世纪60年代的美国,意裔美籍白人保镖托尼阴差阳错被爵士黑人钢琴家唐聘用为司机,一路从纽约开始一路南下举办巡回演奏的故事。途中二人最开始矛盾抵触,后来慢慢调和,甚至惺惺相惜。该片以最诙谐幽默且张弛有度的方式描绘了一段跨...

2019-10-21 09:52:30 12886

转载 分布式系统原理介绍

1 概念1.1 模型节点在具体的工程项目中,一个节点往往是一个操作系统上的进程。在本文的模型中,认为节点是一个完整的、不可分的整体,如果某个程序进程实际上由若干相对独立部分构成,则在模型中可以将一个进程划分为多个节点。异常机器宕机:机器宕机是最常见的异常之一。在大型集群中每日宕机发生的概率为千分之一左右,在实践中,一台宕机的机器恢复的时间通常认为是24 小时,一般需要人工...

2019-10-19 14:43:37 8682

原创 分布式系统:一致性hash算法 & 在分布式系统中的应用

前段时间在了解分布式,发现firefoxbug在博客中写的这篇《一致性hash在分布式系统中的应用》对这个问题说明得比较清晰易懂,本文主要是自己的理解和实践。在后端一般会遇到这样的场景:随着应用系统的访问量或者DB/文件存储系统的数据量增大,系统由于负载增大而出现响应延迟甚至down掉的情况。为了解决这个问题,往往会对系统采用垂直扩展和水平扩展的架构设计,而分布式系统正是水平扩展架构的一...

2019-10-19 14:40:54 9231

原创 Paxos 算法 : 一种基于消息传递且具有高度容错特性的一致性算法

Paxos算法是莱斯利·兰伯特(英语:Leslie Lamport,LaTeX中的“La”)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。问题和假设分布式系统中的节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程可能会慢、被杀死或者重启,消息可能...

2019-10-19 14:37:15 11111

转载 图解各路分布式ID生成算法

在分布式系统中,通常会用到分布式ID来标注数据的唯一性,而分布式ID的生成方式又多种多样,今天我们就来讨论一下主流的分布式ID生成策略。分布式ID基本需求 全局唯一 趋势递增 信息安全 全局唯一这是基本要求,不必解释趋势递增为什么要趋势递增呢?第一,由于我们的分布式ID,是用来标识数据唯一性的,所以多数时候会被定义为主键或者唯一索引。第二,并且绝大多数...

2019-10-19 12:44:05 9650

原创 在 IDEA 中配置 PlantUML (一门快速画图的设计语言)开发环境

PlantUML 简介一门可以快速画图的设计语言:http://plantuml.com/zh/state-diagram@startumlclass Space{ id name members gmtCreate gmtModified}class DataSource{ id name type access...

2019-10-17 11:21:07 10265

转载 架构三要素:职责明确的模块或者组件、关联关系、约束和指导原则

架构三要素:职责明确的模块或者组件、关联关系、约束和指导原则架构三要素:职责明确的模块或者组件组件间明确的关联关系约束和指导原则Linux 的创始人 Torvalds 有...

2019-10-16 18:02:24 9764

原创 哨兵 (sentinal) 机制的工作原理

哨兵 (sentinal) 机制的工作原理什么是哨兵机制?Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务: 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。 提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(senti...

2019-10-16 17:51:00 14895

转载 MyISAM 和 InnoDB 索引的区别

阅读目录一 MyISAM索引实现 二 InnoDB索引实现 三 InnoDB索引和MyISAM索引的区别一 MyISAM索引实现1. 主键索引MyISAM引擎使用B+树作为索引结果,叶节点的data域存放的是数据记录的地址。下图为MyISAM表的主索引,Col1为主键。2. 辅助索引在MyISAM中,主索引和辅助索引在结构上没有任何区别,只是主索引要求key是唯...

2019-10-16 17:29:58 8500

转载 理解RESTful架构 & RESTful API 设计指南

理解RESTful架构越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。网站开发,完全可以采用软件开发的模式。但是传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信。互联网的兴起,使得这两个领域开...

2019-10-16 16:49:44 8667

原创 Maven引入依赖后自动下载并关联源码 Source

在下载依赖包的同时下载其源代码包的方法:使用maven命令:mvn dependency:sources 下载依赖包的源代码。使用参数: -DdownloadSources=true 下载源代码jar。-DdownloadJavadocs=true 下载javadoc包。mvn dependency:sources -DdownloadSources...

2019-10-15 13:59:22 8843

原创 Kotlin (Java) 获取 mysql 数据库的所有表,表的所有字段,注释,字段类型

import com.mysql.jdbc.jdbc2.optional.MysqlDataSourceimport org.slf4j.LoggerFactoryimport org.springframework.stereotype.Serviceimport java.sql.*import java.util.*import javax.sql.DataSource@Ser...

2019-10-15 10:13:17 8905

原创 Kotlin (Java) 获取 mysql 数据库的所有表,表的所有字段,注释,字段类型

import com.mysql.jdbc.jdbc2.optional.MysqlDataSourceimport org.slf4j.LoggerFactoryimport org.springframework.stereotype.Serviceimport java.sql.*import java.util.*import javax.sql.DataSour...

2019-10-15 10:12:20 8780

原创 Kubernetes API

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.15/

2019-10-09 16:54:10 8397

原创 PlantUML 简明教程

PlantUML 简介PlantUML 是一个开源项目,支持快速绘制时序图、用例图、类图、活动图、组件图、状态图、对象图、部署图等。同时还支持非 UML 图的甘特图、架构图等。例如下面等用例图:@startumlP: PENDINGP: Pending for resultN: NO_RESULT_YETN: Did not send the KYC c...

2019-10-09 15:44:20 12987

原创 怎样成为一个优秀的架构师?

怎样才算是架构师?架构师是一个既能掌控整体又能洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。看似完美的“人格模型”背后,是艰辛的探索。架构师不是一个人,他需要建立高效卓越的体系,带领团队去攻城略地,在规定的时间内完成项目。架构师的分类从业界来看对于架构师的理解可以大概区分为: 企业架构师:专注于企业总体 IT 架构的设计。 IT 架构师-软件产品架构...

2019-10-08 17:17:14 175551 298

转载 谷歌开源内部代码评审规范

谷歌成立于 1998 年,以搜索起家,到目前为止已经发展了 21 年。在过去的 21 年中,谷歌不断创新,开发了七款产品,拥有超过 10 亿级活跃用户,谷歌的工程师文化一直被认为是优秀且特别的。近日,谷歌开源了其内部一直在使用的代码评审规范,InfoQ 对其进行了翻译和整理,分享给广大开发者,看看谷歌工程师是如何评审代码的。代码评审标准代码评审的主要目的是确保代码库的整体质量随时间...

2019-10-08 15:34:03 13380

原创 一种用于决策(decision-making)的系统架构

一种用于决策(decision-making)的系统架构前言大数据(big data)时代什么是大数据Gartner是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。麦肯锡一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软...

2019-10-08 13:56:14 9542 1

原创 《一个人的朝圣》:爱,才是救赎一切的良药

​​#一个人的朝圣#爱,才是救赎一切的良药。就算你站在所有人的前面,但还是孤身一人。多少人爱你青春欢畅的时辰,爱慕你的美丽,假意或真心,只有一个人爱你那朝圣者的灵魂,爱你衰老了的脸上痛苦的皱纹。(叶芝)去接受一些你不了解的东西,去争取,去相信自己可以改变一些事情。——蕾秋·乔伊斯《一个人的朝圣》 ​因一封信,因一句话,哈罗德决定...

2019-10-05 01:18:51 9956 1

ClickHouse 高性能、可扩展和低成本的OLAP数据库 陈光剑 20230912

ClickHouse 设计哲学 具体问题具体分析 use good algorithms in a good context; 深入细节 dig into details; 度量指标 measure everything; 贴近生产环境 be close to production; 基准测试 do benchmarks, more of them; 不断试验、实践never stop experimenting; 大规模测试 test at scale; 大胆创新 do weird stuff; have fun! It is a database: A database has both a storage engine and a query engine. ClickHouse can efficiently ingest data from various sources and its query engine provides low-latency query responses. It is an OLAP database: An On-Line Analytic

2023-09-14

Will AI Fix Work? 工作节奏超过了我们的跟上能力 人工智能有望创造一种全新的工作方式

The pace of work is outpacing our ability to keep up. AI is poised to create a whole new way of working. 工作节奏超过了我们的跟上能力。人工智能有望创造一种全新的工作方式。 微软工作趋势指数年度报告( Work Trend Index Annual Report ) Key findings: The data points to three urgent insights business leaders must know now as they look to quickly and responsibly adopt AI. 1. Digital debt is costing us innovation: 64% of people have struggled with finding time and energy to get their work done, and those workers are 3.5x more likely to say they

2023-05-17

THE AI INDEX REPORT 人工智能指数报告 Measuring trends in Artificial Inte

THE AI INDEX REPORT 人工智能指数报告 Measuring trends in Artificial Intelligence 衡量人工智能的趋势 TOP TAKEAWAYS 最重要的要点 Industry races ahead of academia. 工业界领先于学术界。 Until 2014, most significant machine learning models were released by academia. Since then, industry has taken over. In 2022, there were 32 significant industry-produced machine learning models compared to just three produced by academia. Building state-of-the-art AI systems increasingly requires large amounts of data, compute, and money, resources

2023-04-06

四大常用限流算法原理详解:计数器固定窗口、计数器滑动窗口、漏桶、令牌桶算法.pdf

四大常用限流算法原理详解:计数器固定窗口、计数器滑动窗口、漏桶、令牌桶算法.pdf

2021-05-28

Kotlin Coroutines by Tutorials (1st Edition)

Kotlin Coroutines by Tutorials (1st Edition)

2021-04-28

Principles of programming languages by Gilles Dowek (auth.) (z-lib.org).pdf

Principles of programming languages by Gilles Dowek (auth.) (z-lib.org).pdf

2021-04-28

A Brief History of Artificial Intelligence

A Brief History of Artificial Intelligence What It Is, Where We Are, and Where We Are Going by Michael Wooldridge (z-lib.org).pdf

2021-04-28

An introduction to functional programming through lambda calculus.PDF.zip

Author: Michaelson, Greg Functional programming is rooted in lambda calculus, which constitutes the world's smallest programming language. This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, and it assumes no prior knowledge of mathematics or functional programming. Cogent examples illuminate the central ideas, and numerous exercises appear throughout the text, offering reinforcement of key concepts. All problems feature complete solutions.

2019-09-22

《Kotlin项目实战开发》第3章+类型系统与可空类型

《Kotlin项目实战开发》 第3章 类型系统与可空类型 跟Java、C和C ++ 一样, Kotlin也是“静态类型编程语言”。 通常,编程语言中的类型系统中定义了  如何将数值和表达式归为不同的类型  如何操作这些类型  这些类型之间如何互相作用 我们在编程语言中使用类型的目的是为了让编译器能够确定类型所关联的对象需要分配多少空间。 在每一个编程语言中,都有一个特定的类型系统。静态类型在编译时期时,就能可靠地发现类型错误。因此通常能增进最终程序的可靠性。 类型系统在各种语言之间有非常大的不同,主要的差异存在于编译时期的语法,以及运行时期的操作实现方式。 本章我们简单介绍一下Kotlin的类型系统。

2017-09-30

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

TA关注的人

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