- 博客(28)
- 资源 (2)
- 收藏
- 关注
原创 Linux CPU性能监控工具
微信公众号:云计算通俗讲义持续输出技术干货,欢迎关注!通过本文你将了解:架构性能指标监控工具故障分析架构CPU架构主要包括桌面端和移动端两种。对于桌面端,主要有Intel和AMD两家半导体厂商,2006年前主要是Intel 80386/80486等32位指令集,又称X86或8086,后来AMD推出64位指令集,又称AMD64/X86_64,该64位指令集兼容32位。对于移动端,只有ARM(现已被GPU巨头NVIDIA收购)一家独大,2010年之前,ARM指令集包括AR
2020-12-02 20:56:07 596
原创 一文详解什么是代理模式
微信公众号:云计算通俗讲义持续输出技术干货,欢迎关注!通过本文你将了解: 背景 概述 模式结构 代码实现 特点 应用场景 背景在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外服务。通过引入一个新的对象来实现对真实对象的操作或者将新的对象作为真实对象的一个替身
2020-11-29 00:20:59 1809
原创 算法思想 | 贪心算法
微信公众号:云计算通俗讲义持续输出技术干货,欢迎关注!通过本文你将了解: 背景 概述 条件 特点 应用场景 背景有1元、5元、10元、20元、100元、200元的钞票无穷多张。现使用这些钞票支付X元,最少需要多少张?例如,X=628我们应该尽可能使用面值较大的钞票,最佳支付方法:3张200元的,1张20元的,1张5元的,3张1元的,共需要3+1+1+3=8张。为何这么做一定是对的?面额为1元、5元、10元、20元、100.
2020-11-26 22:46:22 480
原创 MySQL filesort原理及优化
微信公众号:云计算通俗讲义持续输出技术干货,欢迎关注!01概述在MySQL中的ORDER BY有两种排序实现方式: 1、利用有序索引获取有序数据; 2、文件排序。在使用explain分析查询的时候,利用有序索引获取有序数据显示Using index。如果MySQL在排序的时候没有使用到索引那么就会输出using filesort,即使用文件排序。文件排序是通过相应的排序算法,将取得的数据在内存中进行排序:MySQL需要将数据在内存中进行排序,...
2020-11-25 19:27:30 344
原创 MySQL binlog原理及应用
01概述Binlog它记录了所有的DDL和DML(除了数据查询语句)语句,以事件(EVENT)形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。一般来说开启二进制日志大概会有1%的性能损耗(MySQL官方测试数据),虽然会降低性能,但是binlog可以用于主从复制(replication)和point-in-time的恢复,所以还是很有必要开启的。 查看:SHOWBINLOGEVENTIN'mysqld.00001'\G; ...
2020-11-20 00:27:12 344
原创 大数据领域常用算法总结
01概述 大数据必然涉及海量数据,所谓海量数据,就是数据量太大,要么在短时间内无法计算出结果,要么因为数据太大无法一次性装入内存。针对时间,我们可以使用巧妙的算法搭配合适的数据结构,如bitmap/堆/trie树等进行优化。针对空间,就一个办法,大而化小,分而治之,常采用hash映射等方法。02hash映射这里的hash映射是指通过一种哈希算法,将海量数据均匀分布在对应的内存或更小的文件中,这是一种分而治之的实现思想。使用Hash映射有个最重...
2020-11-18 00:40:44 3555
原创 面试官问我:什么是布隆过滤器?
01背景假如需要过滤某些不安全网页,现有100亿个黑名单页面,每个网页的URL最多占用64字节。现要设计一种网页过滤系统,可以根据网页的URL判断该网页是否在黑名单上,要求该系统允许有万分之一以下的判断错误率,并且使用的额外空间不要超过30G。可以采用如下几种方案: 1、将访问过的URL保存到数据库每次需要过滤网页就需要启用一个数据库select查询,且当数据量变得非常庞大后,关系型数据库查询的效率会变得很低。 2、用HashSet将访问过的URL保...
2020-11-15 00:20:19 183
原创 数据库备份与恢复
01背景备份恢复的几个重要理由:1、灾难恢复2、审计3、测试4、误操作恢复02概述2.1 frm与表相关的元数据信息都存放在.frm文件中,主要是表结构的定义信息,不论什么存储引擎,每一个表都会有一个以表名命名的.frm文件。2.2 .MYD和.MYI .MYD:MY Data,是MyISAM存储引擎专用的用于存放MyISAM表的数据; .MYI:MY Index,也是专属于MyISAM存储引擎的主要...
2020-11-15 00:19:01 304
原创 MySQL主从复制
01背景之所以引入主从复制,是基于实际业务需求考虑的: 1、存在这样的一种场景:有一句SQL语句需要锁表,导致系统暂时无法提供读服务,这样就很影响运行中的业务,如果使用主从复制,让主库负责写操作,从库负责读操作,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作; 2、从库可以做数据的热备; 3、架构的扩展,业务量越来越大,I/O访问频率过高,单机无法满足,此时多从库存储,可以提高单个机器的I/O性能。02概述复制是指将主数据库的...
2020-11-15 00:18:52 99
原创 MySQL数据库锁机制
01概述数据库事务ACID中的隔离性是通过锁和MVCC实现的,锁用于并发写操作,MVCC用于并发读操作。因此,数据库锁是控制并发的一种手段。02分类2.1 粒度锁/范围锁根据锁的粒度,可以分为:记录锁:锁住行表锁:锁住表页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般数据库锁:锁住整个库2.2 算法锁算法锁(基于行锁的算法):记录锁,间隙锁,临键锁。注:...
2020-11-15 00:18:46 194
原创 分布式锁实现方案
01背景在单机系统中,多个线程同时访问某个共享资源时,可以采用线程间加锁保证数据一致性。但是,在分布式系统中,程序运行在多台机器上,各个节点之间无从知晓共享资源的锁定状态,即这种共享资源已经不是线程级别的,而是进程之间的。此时,就需要引入分布式锁,以实现多个客户端互斥访问共享资源。需要加锁的场景需要满足以下条件: 1、共享资源;2、共享资源互斥;3、多任务环境。分布式锁的思路是:在系统中提供一个全局唯一的针对共享资源获取锁的...
2020-11-15 00:18:38 97
原创 RabbitMQ原理
01AMQP协议1.1概述AMQP:是具有现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。1.2核心概念Publisher消息的生产者。也是一个向交换器Exchange发送消息的客户端应用程序。Consumer消息的消费者。表示一个从消息队列中取得消息的客户端应用程序。Server/Broker又称Broker,接受客户端...
2020-11-15 00:18:32 344
原创 详解HTTP协议
01概述HTTP(Hyper Text Transformer Protocol,超文本传输协议)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。它是一个应用层协议,承载于TCP协议之上。作用:规定了应用进程间通信的准则 特点:1、传输效率高无连接:交换HTTP报文前,不需要建立HTTP连接无状态:数据传输过程中,不保存任何历史和状态信息传输格式简单:请求时,...
2020-11-15 00:18:24 395
原创 面试官:介绍一下数据库事务
01概述事务一般是指数据库事务,简称事务,是一组不可分割的操作。事务会把数据库从一种一致状态转换为另一种一致状态。在数据库提交工作时,可以保证要么所有修改都保存了,要么所有修改都不保存(事务是数据库区别于文件系统的重要特征之一)。 说明:1、每个SQL语句都是一个事务;2、事务只对DML语句有效,对于DQL无效。用转账的例子来说,A 账户要给 B 账户转 100块,这中间至少包含了两个操作:1、A 账户减100块...
2020-11-15 00:17:58 629
原创 数据库索引原理及优化
01概述索引是帮助MySQL高效获取数据的排好序的数据结构,用于快速找出某个列中有一特定值的行。通过上述定义可以理解索引三个基本特性: 1、索引的作用是为了追求高效查找;2、索引是一种数据结构,且是有序的;3、索引用于快速查找某一个特定值的行(非特定值情况,即模糊匹配的情况是无效的)。不使用索引,MySQL必须从第一条记录开始读完整个表,直到找到相关的行,表越大,查询数据所花费的时间就越多(全表扫描)。如果表中查询的列有一个索引,MyS...
2020-11-15 00:17:45 473
原创 C与C++
01概述可以简单理解为C++是C的超集(当然,也有C的部分特性是C++不支持的),C语言较为底层,在嵌入式、操作系统等领域使用,C++则是面向对象的编程语言,引入了classes、templates、exceptions 等很多新特性,二者应用领域不同,不存在孰优孰劣。 C语言知识图谱:https://en.cppreference.com/w/c/language C++语言知识图谱:https://en.cppreference.com/w/...
2020-11-15 00:17:18 101
原创 RPC原理及应用
01背景对于一个电商平台而言,往往涉及购物车,订单,支付,商品等多个模块,这就需要多个人员进行维护,如果采用单机系统,就会导致这样的问题:1、某人在维护自己模块代码时,需要将所有代码编译打包,其余模块可能需要回归测试;2、其中一个模块出问题,可能导致整个系统故障。这就出现了远程过程调用RPC,它使得我们可以像调用本地函数一样调用远程服务器的函数。RPC是分布式的基石。从单机走向分布式,产生了很多分布式的通信方式: 1、TCP/UD...
2020-11-14 00:09:03 1075
原创 LVM磁盘逻辑卷管理
01卷管理卷管理软件对待RAID提交给上层操作系统的逻辑盘(操作系统视为物理磁盘)和真正的物理磁盘是一视同仁的,即不管底层的磁盘组织形式如何,只要OS认为它是一块物理磁盘,卷管理器就可以对它进行卷管理。稍微不同的是,对于RAID提交的逻辑卷,最终还是要通过RAID控制器来和底层的物理磁盘交互。卷管理器包括: LDM(逻辑磁盘管理):Windows2000引入的动态磁盘VxVM(VeritasVolume Manager) LVM(Logic Vol...
2020-11-14 00:08:05 408
原创 详解块存储、文件存储、对象存储区别
01块存储1.1 概述块存储是将裸磁盘空间整个映射给主机使用的,比如磁阵中有3块1T硬盘,可以选择直接将裸设备给操作系统使用(此时识别出3个1T的硬盘),也可以划分经过RAID、逻辑卷等方式划分出多个逻辑的磁盘供系统使用(比如划分为6个500G的磁盘),主机层面操作系统识别出硬盘,但是操作系统无法区分这些映射上来的磁盘到底是真正的物理磁盘还是二次划分的逻辑磁盘,操作系统接着对磁盘进行分区、格式化,与我们服务器内置的硬盘没有什么差异。块存储不仅仅是直接使用物理设备,间接使用物理设...
2020-11-14 00:07:21 841
原创 数据冗余技术—RAID
01背景某台机器上安装了2块IDE硬盘(80G/块)和4块SCSI硬盘(73G/块),IDE硬盘直连到主板内置IDE接口,SCSI磁盘连接到PCI接口的SCSI卡上。此时,系统识别出6块磁盘,经过文件系统格式化后,挂载到某个目录下,供应用程序读写。这样其实是没有数据的校验和冗余的,安全性和效率较差。如果安装RAID后,将2块IDE硬盘做成一个RAID0系统,则变成一个16G的虚拟硬盘,将4块SCSI硬盘做成一个RAID5系统,则变成3个磁盘,容量为216G(因为RAID程序需要使用...
2020-11-14 00:06:30 1629
原创 哈希表原理及应用
01背景假设某大学有10000名同学,每个人的学号是由学院-年级-班级-序号组成,例如学号为16140113表示是16系,14级1班的13号。为了快速查找到13号的成绩信息,可以建立一张表,但是不能用学号作为下标,学号的数值实在太大。因此将学号除以1100100取余,即得到编号作为该表的下标,那么,要查找学号为16140113的成绩的时候,只要直接访问表下标为13的数据即可。这就能够在O(1)时间复杂度内完成成绩查找。实际上这里就用到了散列的思想。02概述理想散列表(哈希表)...
2020-11-14 00:05:21 427
原创 单例模式
01背景以我们常用办公软件WPS为例,我们使用的时候期望点击一次工具栏弹出一个对话框,再次点击的时候仍然是当前对话框,而不是出现多个对话框。反映到编程中,其实就是对话框只被实例化一次,这就是单例模式的一个应用场景。02概述单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。根据定义可知单例模式的要点有三个: 1、某个类只能有一个实例;...
2020-11-14 00:03:37 161
原创 设计模式分类及设计原则
01概述设计模式的基础是:多态。学习设计模式将有助于更加深入地理解面向对象思想,让你知道: 1、如何将代码分散在几个不同的类中? 2、为什么要有“接口”? 3、何谓针对抽象编程? 4、何时不应该使用继承? 5、如何不修改源代码增加新功能? 6、更好地阅读和理解现有类库与其他系统中的源代码。 推荐书籍:《设计模式:可复用面向对象软件的基础》《大话设计模式》02分类 1、从目的...
2020-11-14 00:03:04 127
原创 负载均衡算法及方案
01背景面对大量用户访问、高并发请求,单机网站可以从软硬件两个方面寻求解决方法: 1、硬件方面:可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器; 2、软件方面:采用高效率的编程语言(比如Go,Erlang,Scala)等。但是,当单机容量达到极限时,我们需要考虑业务拆分和分布式部署,来解决大型网站访问量大,并发量高,海量数据的问题。即需要从架构方面寻求解决方案。02概述负载均衡(Load Balance),意思是将负载(如前端...
2020-11-14 00:02:15 612
原创 高并发架构设计
01 概述高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。高并发一方面可以提高资源利用率,加快系统响应速度,但是同时也会带来安全性,分布式事务、死锁等问题。并发:一个处理器同时处理多个任务。并行:多个处理器或者是多核的处理器同时处理多个不同的任务。02度量指标并发的指标一般有QPS,TPS,IOPS,并发用户数,PV,响应时间等。2.1QPS...
2020-11-14 00:01:25 2097 1
原创 进程间通信方式
01概述1.1 发展 Linux进程间通信(IPC)大致发展如下:早期UNIX进程间通信、基于System V进程间通信、基于Socket进程间通信和Posix进程间通信。 UNIX进程间通信方式包括:管道、FIFO、信号。 System V进程间通信方式包括:System V消息队列、System V信号量、System V共享内存。 Posix进程间通信包括:Posix消息队列、Posix信号量、Posix共享内存。1.2 目的进...
2020-11-14 00:00:26 427
原创 线程同步与互斥
01概述线程同步,是协调步调,按预定先后次序执行,解决与时间相关的错误。线程不同步,产生的现象就是数据混乱: 1、资源共享(系统层面)2、调度随机(系统层面)3、缺乏必要的同步机制(用户层面,我们可以在这里做限制)多个控制流访问同一共享资源时,必须同步。02互斥锁2.1 概述 当多个线程并发的访问同一个共享资源的时候,可能导致数据异常。可以通过互斥锁确保一个共享资源每次只能被一个线程访问。互斥锁属于重量级...
2020-11-13 23:57:11 795
原创 详解gdb的使用技巧
01概念GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。在实际应用中,有两种调试方法:在线调试和离线调试。离线调试适用于开发测试环境,可以自由启停进程,设置断点;在线调试一般用于现场问题分析,不能随便启停进程,对于技术要求较高。02前提条件2.1 编译若想执行gdb调试,在Makefile文件中需要增加编译调试选项-g,例如:gdbdup_file.c –o dum_file...
2020-11-13 23:54:58 1317
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人