
专题学习
文章平均质量分 76
zhixin9001
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Prometheus的一些基础知识
核心组件任务和实例时间序列PromQL核心组件Prometheus是一个开源的监控告警系统,它支持按多个维度存储监控数据,配套的PromQL可以对数据进行灵活的查询。下图为其整体的架构:主要包含四部分:Prometheus Server,Prometheus Server用于从Exporters拉取数据,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中(Prometheus Server本身也是一个时序数据库);并支持通过PromQL和通过API Client对数据进行查询; 它还负责通过服务发现或者原创 2022-05-31 08:33:22 · 1509 阅读 · 0 评论 -
Nginx基础学习
Nginx介绍Nginx是一款高性能的Web服务器,最初由俄罗斯程序员Igor Sysoev开发,自2004年问世以来,凭借其高性能、高可靠、易扩展等优点,在反向代理、负载均衡、静态文件托管等主流场合得到了广泛的应用。Nginx具有以下优点。高性能:相比于其他Web服务器如Apache,在正常请求以及高峰请求期,可以更快地响应请求。高可靠:Nginx采用多进程模型,分为主进程和工作进程。主进程负责监视工作进程,当工作进程异常退出时,可以快速拉起一个新的工作进程,从而为用户提供稳定服务高并发:Ng原创 2021-11-30 20:53:14 · 2190 阅读 · 0 评论 -
Kubernetes笔记 (1) - 系统概述
Kubernetes概述Kubernetes由google开源,它的开发和设计都深受Google内部久负盛名的系统Borg的影响,而且,它的许多顶级贡献者之前也是Borg系统的开发者。Borg是Google内部使用的大规模集群管理系统。Kubernetes吸取了Borg在过去十数年间积累的经验和教训,刚刚面世就立即广受关注和青睐,目前已经成为容器编排领域事实上的标准。很多人将Kubernetes视为Borg系统的一个开源实现版本。Kubernetes使用共享网络将多个物理机或虚拟机汇集到一个集群中,在原创 2021-03-21 08:43:04 · 222 阅读 · 1 评论 -
《深入浅出React和Redux》(4) - 服务器通信、单元测试
与服务器通信与服务器通信的时长不可控,需要采用异步的形式,可以使用js的fetch函数来调用api。fetch函数fetch函数的基本使用形式为:fetch(apiUrl).then((response) => { if (response.status !== 200) { throw new Error('Fail to get response with status ' + response.status); } response.json().then((res原创 2021-02-23 21:13:06 · 220 阅读 · 0 评论 -
《深入浅出React和Redux》(3) - Export & Import, 高阶组件
Export & Importexport可以导出函数、class等,有两种导出方式:默认导出(default export)命名导出(named export)默认导出(default export)default export不需要指定名称,但每个文件中只能有一个default export// 导出纯值或表达式结果export default 1;const a = 1;export default a;// 导出函数export default function(原创 2021-02-19 07:24:14 · 211 阅读 · 0 评论 -
《深入浅出React和Redux》(2) - Redux
Redux是Flux理念的一种实现。关于Flux理念可以通过类比MVC模式来做简单理解。MVC模式中,用户请求先到达Controller,由Controller调用Model获得数据,然后把数据交给View,按照这种模式,MVC应该也是一个controller->model->view的单向数据流,但是,在实际应用中,由于种种原因,往往会让view直接操作Model,随着应用的演进、逻辑变得越来约复杂,view与model之间的关系就会变得错综复杂、难以维护。在MVC中让View和Model原创 2021-02-08 20:48:45 · 186 阅读 · 0 评论 -
《深入浅出React和Redux》(1) - React基础
create-react-appReact技术依赖的技术栈比较多,比如,转译JavaScript代码需要使用Babel,模块打包工具要使用Webpack,定制build过程需要grunt或者gulp。create-react-app命令可以免去配置这些技术栈的麻烦,自动生成一个基本的react-app模版项目,让开发者可以基于这个模版快速开始React应用的开发。首先要安装create-react-app命令:npm install --global create-react-app然后就可以创建原创 2021-02-06 09:06:31 · 267 阅读 · 1 评论 -
《Effective C#》笔记(5) - 异常处理
程序总是会出错的,因为即便开发者做得再仔细,也还是会有预料不到的情况发生。令代码在发生异常时依然能够保持稳定是每一位C#程序员所应掌握的关键技能。.NET Framework Design Guidelines建议,如果方法不能完成调用者所请求的操作,那就可以考虑抛出异常,此时必须提供各种信息,使得调用者能够据此诊断问题。此外,还必须保证如果应用程序能够从错误中恢复,那么必须处在某种已知的状态。考虑在方法约定遭到违背时抛出异常如果方法不能够履行它与调用者所订立的契约,那就应该让它其抛出异常。这些无法原创 2021-02-02 21:12:38 · 151 阅读 · 0 评论 -
《Effective C#》笔记(4) - Linq
优先考虑提供迭代器方法,而不要返回集合在创建这种返回一系列对象的方法时,应该考虑将其写成迭代器方法,使得调用者能够更为灵活地处理这些对象。迭代器方法是一种采用yield return语法来编写的方法,采用按需生成(generate-as-needed)的策略,它会等到调用方请求获取某个元素的时候再去生成序列中的这个元素。类似下面这个简单的迭代器方法,用来生成从0到9的int序列:public static IEnumerable<int> GetIntList() { var原创 2021-02-01 22:17:20 · 155 阅读 · 0 评论 -
《Effective C#》笔记(3) - 泛型
只定义刚好够用的约束条件泛型约束可以规定一个泛型类必须采用什么样的类型参数才能够正常地运作。设定约束条件的时候,太宽或太严都不合适。如果根本就不加约束,那么程序必须在运行的时候做很多检查,并执行更多的强制类型转换操作。而且在编译器为这个泛型类型的定义生成IL码的时候,通过约束还可以为提供更多的提示,如果你不给出任何提示,那么编译器就只好假设这些类型参数所表示的都是最为基本的System.Object,也就是假设将来的实际类型只支持由System.Object所公布的那些方法,这使得凡是没有定义在Syst原创 2021-01-31 22:24:21 · 162 阅读 · 0 评论 -
《Effective C#》笔记(2) - .NET的资源管理
理解并善用.NET的资源管理机制.NET环境会提供垃圾回收器(GC)来帮助控制托管内存,这使得开发者无须担心内存泄漏等内存管理问题。尽管如此,但如果开发者能够把自己应该执行的那些清理工作做好,那么垃圾回收器会表现得更为出色。非托管的资源是需要由开发者控制的,例如数据库连接、GDI+对象、IO等;此外,某些做法可能会令对象在内存中所待的时间比你预想的更长,这些都是需要我们去了解、避免的。GC的检测过程是从应用程序的根对象出发,把与该对象之间没有通路相连的那些对象判定为不可达的对象,也就是说,凡是无法从应用原创 2021-01-30 22:39:50 · 196 阅读 · 0 评论 -
《Effective C#》笔记(1) - 编程习惯
1.优先使用隐式类型的局部变量推荐优先使用隐式类型的局部变量,即用var来声明,因为这可以令人把注意力放在最为重要的部分,也就是变量的语义上面,而不用分心去考虑其类型.有时隐式类型比自己指定类型表现更好用var来声明的变量不是动态变量,隐式类型的局部变量的类型推断也不等于动态类型检查。只是编译器会根据赋值符号右侧的表达式来推断变量的类型。var的意义在于不用专门指定变量的类型,而是交给编译器来判断,所以局部变量的类型推断机制并不影响C#的静态类型检查。有时隐式类型会有比专门指定类型更好的表现,比如下原创 2021-01-29 22:08:42 · 212 阅读 · 0 评论 -
Redis入门(7) - 持久化、主从复制、安全
持久化RDB方式Redis实现快照的过程AOF方式操作系统缓存RDB与AOF复制主从数据库主从复制的意义安全持久化Redis通过将数据存储在内存中而获得了极快的速度,但为了保证Redis在重启后数据不丢失,需要将数据从内存持久化到硬盘中。持久化的方式有两种,二者可以只用一种,也可以组合使用:RDB方式AOF方式RDB方式RDB是Redis默认采用的持久化方式,当符合一定条件时Redis会自动将内存中的所有数据进行快照(snapshotting).原创 2020-06-07 21:31:51 · 164 阅读 · 0 评论 -
Redis入门(6) - Lua脚本
Lua基本语法表类型函数Redis执行脚本KEYS与ARGV沙盒与随机数脚本相关命令原子性和执行时间Lua是一种高效的轻量级脚本语言,能够方便地嵌入到其他语言中使用。在Redis中,借助Lua脚本可以自定义扩展命令。Lua基本语法数据类型空(nil),没有赋值的变量或表的字段值都是nil布尔(boolean)数字(number),整数或浮点数字符串(string),字符串可以用单引号或双引号表示,可以包含转义字符如\n \r等表(table),表类型是Lua语言中唯一的数.原创 2020-06-01 20:57:54 · 414 阅读 · 0 评论 -
Redis入门(5) - 消息通知
使用列表实现任务队列优先级队列按照规则订阅Redis也可以作为任务队列。任务队列顾名思义,就是“传递任务的队列”。任务队列与消息队列什么区别呢?任务队列是逻辑模型,而消息队列是通信模型,两者是不同层次的抽象,用消息队列可以实现任务队列。与任务队列进行交互的实体有两类,一类是生产者(producer),一类是消费者(consumer)。生产者会将需要处理的任务放入任务队列中,而消费者则不断地从任务队列中读入任务信息并执行。使用任务队列可以达到松耦合的效果,生产者和消费者无需知道彼此的实现细节,只.原创 2020-05-31 20:56:34 · 281 阅读 · 0 评论 -
Redis入门(4) - 排序
SORT命令LIMIT参数BY参数GET参数STORE参数排序性能优化很多场合需要对元素进行排序,这时除了使用有序集合外,还可以借助Redis提供的SORT命令来排序。SORT命令SORT命令可以对列表类型、集合类型和有序集合类型的键进行排序。 SORT key SORT key DESC SORT key ALPHASORT命令会根据元素自身的值进行排序,在对有序集合类型排序时会忽略元素的分数。默认按从小到大的顺序排列,增加DESC参数可以按照倒序排列。如果元素为非数字,.原创 2020-05-30 20:46:35 · 221 阅读 · 0 评论 -
Redis入门(3) - 事务和缓存
事务的使用方式事务的错误处理WATCH命令生存时间缓存策略Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次执行这些命令。事务的使用方式> MULTIOK> SADD key1 1QUEUED> SADD key2 2QUEUED> EXEC1) (integer) 12) (i.原创 2020-05-24 08:01:34 · 159 阅读 · 0 评论 -
Redis入门(2) - 数据类型
Redis中的数据类型字符串散列列表集合有序集合Redis中的数据类型Redis定义了这几种数据类型:string(字符串)hash(散列)list(列表)set(集合)zset(有序集合)后面会介绍它们各自的特点和使用场景。可以用TYPE命令来获取键的类型。字符串字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。可以用其存储用户的邮箱、JSON化的对象甚至是一张图片。一个字符串类型键允许存储的数据的最大容量是512 MB。字符串类型.原创 2020-05-20 22:50:37 · 148 阅读 · 0 评论 -
Redis入门(1) - 使用Cli
* [在Docker中使用Redis]* [Redis-Cli]* [命令的返回值类型]* [Redis中的多数据库]* [基础命令]Redis是REmote DIctionary Server(远程字典服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。Redis数据库中的所有数据都存储在内存中。由于内存的读写速度远快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库有非常明显的优势,在一台普通的笔记本电脑上,Redis可以在一秒内读写超过十万个.原创 2020-05-17 21:15:15 · 261 阅读 · 0 评论 -
ASP.NET Core笔记(5) - 中间件
中间件管道模型中间件的配置自定义中间件中间件是一类装配在应用管道的代码,负责处理请求和响应。每个中间件都可在管道中的下一个组件前后执行工作,并选择是否将请求传递到管道中的下一个中间件。在Startup.Configure方法中可以进行中间件的装配。中间件管道模型中间件管道模型如下图所示:ASP.NET Core请求管道包含一系列请求委托,沿黑色箭头依次被调用执行,每个委托均可在下...原创 2020-04-26 13:36:59 · 200 阅读 · 0 评论 -
ASP.NET Core笔记(4) - 选项模式
选项接口IOptionsSnapshot与IOptionsMonitor的区别选项的后期配置选项的验证在ASP.NET Core笔记(3) - 配置中介绍了各种配置提供程序以及配置的读取方式,但实际使用中,不推荐应用程序直接从一堆配置中读取的做法,而是使用强类型绑定,将配置按组绑定到不同服务所属的类。使用这种方式可以让配置方案遵守两个重要的软件工程原则:接口分离原则 (ISP) 或...原创 2020-04-15 21:43:39 · 184 阅读 · 0 评论 -
ASP.NET Core笔记(3) - 配置
- 配置规则- 命令行配置提供程序- 环境变量配置提供程序- 文件配置提供程序- 配置的读取- 自定义配置数据源ASP.NET Core中的配置项可以通过命令行、环境变量、json/xml/ini配置文件来提供。Web应用在生成主机时会调用CreateDefaultBuilder方法,这个方法按照下面的顺序添加各种配置提供程序:- 文件配置提供程序...原创 2020-03-30 21:55:24 · 396 阅读 · 0 评论 -
ASP.NET Core笔记(1) - 了解Startup类
Startup构造函数ConfigureServices方法Configure方法在ConfigureWebHostDefaults中直接配置服务和请求管道ASP.NET Core一般使用Startup类来进行应用的配置。在构建应用主机时指定Startup类,通常通过在主机生成器上调用WebHostBuilderExtensions.UseStartup 方法来指定 Startup类:...原创 2020-03-21 21:55:10 · 536 阅读 · 0 评论 -
Docker基础(3) 数据卷
创建数据卷挂载Host目录作为数据卷挂载Host的文件作为数据卷数据卷容器数据卷的备份和恢复Docker容器一旦被删除,容器本身对应的rootfs文件系统就会被删除,容器中的所有数据也将随之消失。Docker提供了数据卷的方式来持久化容器产生的数据,通过数据卷,还可以在容器之间共享数据。创建容器时,通过-v参数可以数据卷,-v参数的格式为[host-dir]:[containe...原创 2020-03-02 21:14:09 · 226 阅读 · 0 评论 -
Docker基础(2) 实践篇
Docker基础(2) 实践篇Docker的指令系统全局指令Docker仓库管理Docker镜像管理DockerfileDocker容器管理Docker Compose命令的嵌套Docker的指令系统Docker指令的操作对象主要针对四个方面:针对守护进程的系统资源设置和全局信息的获取。比如:docker info、docker deamon等。针对Doc...原创 2020-03-01 21:44:03 · 168 阅读 · 0 评论 -
Docker基础(1) 原理篇
Docker是什么Docker的构成Docker的分层和写时拷贝策略Docker与主流虚拟机的区别Docker镜像与容器的关系镜像的变更管理Docker是什么Docker是一个开源的应用容器引擎。它的理念是“Buildonce, Run anywhere, Configure once, Run anything”,这与Java提出的“Write Once, Run Anywhe...原创 2020-02-24 17:44:54 · 146 阅读 · 0 评论 -
《数据库系统概念》14-静态散列
顺序文件组织的缺点之一是必须通过访问索引或使用二分法搜索来定位数据,这需要较多的I/O操作。基于散列技术的文件组织方式则不需要访问索引结构,散列也提供了一种组织索引的方式。在散列(hash)技术中,用桶(bucket)来表示能存储一条或多条记录的存储单元。如果K代表所有搜索码的集合,B代表所有bucket的集合,则散列函数h表示一个从K到B的映射函数。插入搜索码为Ki的记录时,通过散列函数原创 2017-12-25 21:27:23 · 489 阅读 · 0 评论 -
《数据库系统概念》13-索引
索引分为顺序索引(ordered indixes)和散列(hash indices)索引,前者基于值的顺序;后者将值平均分布到若干bucket中,值所属的bucket由散列函数决定。索引和散列的实现技术有多种,但没有哪一种是绝对最好的,每种方式有其最适合的场景,可通过这几个方面来进行评估:访问类型(能有效支持的访问类型,如特定值查找、范围查找)、访问时间、插入时间、删除时间、空间开销(索引额原创 2017-12-18 22:02:25 · 360 阅读 · 0 评论 -
《数据库系统概念》15-可扩展动态散列
静态散列要求桶的数目始终固定,那么在确定桶数目和选择散列函数时,如果桶数目过小,随着数据量增加,性能会降低;如果留一定余量,又会带来空间的浪费;或者定期重组散列索引结构,但这是一项开销大且耗时的工作。为了应对这些问题,为此提出了几种动态散列(dynamic hashing)技术,可扩展动态散列(extendable hashing)便是其一。一、可扩展动态散列A)用一个数组来存原创 2017-12-30 07:48:10 · 1511 阅读 · 1 评论 -
《数据库系统概念》17-查询优化
一、查询优化是为处理查询找出一个好的策略的过程。一个查询一般有多种方法可以计算出结果,系统负责将用户输入的查询转换成能够更有效执行的等价查询。复杂的查询操作涉及多级存取磁盘的操作,由于从磁盘中传输数据比从内存中要慢得多,所以有必要进行查询优化,以选择一个能够最小化磁盘存取的方法。有很多等价规则可供将一个表达式转化成等价表达式,可以使用这些规则系统地产生与所给查询等价的所有表达式。选择查原创 2018-01-15 20:20:17 · 358 阅读 · 0 评论 -
单元测试(一)-NUnit基础
单元测试作为提高代码和软件质量的有效途径,其重要性和益处自不必多说,虽然我没有实践过TDD之类,但坚信单元测试的积极作用。作为一种开发方法,单元测试早在上世纪70年代就已经在Smalltalk语言被运用了,这么多年来,单元测试一次又一次证明了自身的价值,在各种开发方式此起彼伏的浪潮中,经受住了时间的考验。现在,俺也开始学习了,并在以后好好实践。这个系列的学习素材为Roy Osherove所著T原创 2017-05-21 22:21:34 · 294 阅读 · 0 评论 -
《数据库系统概念》12-文件的组织
一个数据库被映射到多个不同的文件,这些文件由底层的操作系统来维护。每个文件分成定长的存储单元,称为块(bolck),块是存储分配和数据传输的基本单元。数据库默认的块在4-8k之间。通常没有记录比块更大(图片音频等大文件先不考虑),此外还要求每条记录保存在单个块中。一、定长记录instructor表的属性有:ID char(5); name char(20)。假设每个字符占用1字节,原创 2017-12-16 22:00:05 · 301 阅读 · 0 评论 -
《数据库系统概念》9-附加关系运算
除了基本的关系操作,还有一些附加(Additional)的操作,因为如果只用基本运算,有些表达式会比较繁琐,而附加操作是对某些基本表达的简化。a)交集(Set-Intersection Operation)交集运算符为∩,用于找出几个集合共有的数据,比如在2009秋季和2010春季都开课的课程(semester = “Fall” ∧ year=2009 (section) ∩原创 2017-12-04 21:45:59 · 427 阅读 · 0 评论 -
《数据库系统概念》7-函数、存储过程、触发器
一、函数和存储过程a)通过函数和存储过程可以将业务逻辑保存在数据库,在需要的时候调用。比如学生在一个学期可以修的最大课程数、导师的最小授课数等,这些判断具有比较复杂的逻辑,虽然在数据库外也可以实现这样的控制,但用函数或存储过程在数据库的入口来把关,可以与应用程序独立开来,便于维护。但感觉将业务逻辑独立写在存储过程也不一定就能便于维护。b)SQL标准规定的函数定义方法为:create f原创 2017-11-24 22:00:30 · 698 阅读 · 0 评论 -
《数据库系统概念》10-ER模型
通过建立实体到概念模型的映射,Entity-Relationship Model可以表达整个数据库的逻辑结构,很多数据库产品都采用E-R模型来表达数据库设计。一、E-R模型采用了三个基本概念:实体集、关系集和属性a)实体集实体Entity相当于现实中的事物或对象,比如大学中的一个person就是一个entity,实体具有一系列属性,通过其中的某个或某几个属性可以唯一地确定这个实体,原创 2017-12-08 21:09:52 · 776 阅读 · 0 评论 -
《数据库系统概念》4-DDL、集合运算、嵌套子查询
一、DDLa) SQL Data DefinitionSQL的基本数据类型有char(n)、varchar(n)、int、smallint、numeric(p,d)、real,double precision、float(n)等,int smallint real float依赖机器的精度b) char(n)不够的用空格补齐,比较两个char(n)时会先补齐成一样的长度;比较char和原创 2017-11-15 22:13:21 · 219 阅读 · 0 评论 -
《数据库系统概念》6-数据类型、授权等
一、一致性一致性包括not null、unique、checka)Not nullname varchar(20) not nullb)Unique如果A1, A2...等构成了候选键,可以用unique(A1, A2...)来保证其唯一性,但这些字段仍然可为空,而为空值与任何值都不相等。c)Check限制semester的值:check (semester in原创 2017-11-20 21:56:15 · 302 阅读 · 0 评论 -
《数据库系统概念》20-恢复系统
计算机系统因磁盘、电源、软件等的原因发生故障时,会造成数据库系统信息的丢失。此外,事务也可能因各种原因失败,如破坏了完整性约束或发生了死锁。数据库系统的一个重要组成部分就是恢复机制,它负责检测故障以及将数据库恢复至故障发生前的某一状态。一旦故障发生,数据库系统的状态可能不再一致,即它不能反映数据库试图保存的现实世界的状态,为保持一致性,要求每个事务都必须是原子的。恢复机制的职责就是要保证原子性原创 2018-01-30 22:10:36 · 439 阅读 · 0 评论 -
《数据库系统概念》19-并发控制
当多个事务在数据库中并发地执行时,数据的一致性可能无法再维持。系统有必要控制各事务之间的相互作用,这是通过被称为并发控制的机制来实现的。最常用的机制是各种封锁协议、时间戳排序机制、有效性检查技术与多版本机制。一、封锁协议是一组规则,这些规则阐明了事务何时对数据库中的数据项进行加锁和解锁。两阶段封锁协议仅在一个事务未曾释放任何数据项上的锁时才允许该事务封锁新的数据项。该协议保证可串行性,但不原创 2018-01-24 21:50:36 · 300 阅读 · 0 评论 -
学习安卓开发[3] - 使用RecyclerView显示列表
在上一篇学习安卓开发[2] - 在Activity中托管Fragment中了解了使用Fragment的好处和方法,本次记录的是在进行列表展示时RecyclerView的使用。RecyclerView介绍RecyclerView及其相关类RecyclerView的应用引入RecyclerView关联RecyclerView和fragmentViewHolderAdapter将Ad...原创 2018-11-24 20:07:02 · 268 阅读 · 0 评论