自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 MySQL count() 真的慢吗

为什么我建议你使用 count(*)MySQL 对 count(*) 的不同引擎实现MyISAM 引擎把一个表里的总行数存在磁盘上, count(*) 直接返回这个数,会很快。InnoDB 引擎执行 count(*) 会遍历索引树累积计数,当数据量大时,效率不高。为什么 InnoDB 不像 MyISAM 将表总行数存起来?因为 InnoDB 支持事务,根据MVCC原理,每个事务可见的行数是不确定的,因此需要逐条统计可见行。另外show table status 命令虽然会统计总行数,但因为是

2021-08-15 22:00:38 135

原创 MySQL 如何建立合适索引

如何建立合适的索引什么叫做合适的索引?笔者认为,在满足基本业务需求的条件下,尽可能的节约索引带来的时间和空间成本,或者是当时间与空间互斥时,选择一种最适合自己的索引方案。其实就是寻找最优解的过程。字符串字段索引创建完整索引将字段完整字符串放进索引。这种方法简单粗暴,就是有一个弊端:当字符串过长时可能比较占用空间。创建前缀索引顾名思义,字符串截取头部一定长度放进索引。例如有一个邮箱字段 email 其中一行的值为 [email protected],如果对 email创建前缀索引,指定长度为

2021-08-11 21:58:13 277

原创 MySQL 会选错索引吗

MySQL 会选错索引吗?我们在分析慢查询语句时,可能遇到过 MySQL 选错了索引, 似乎表现的不够智能。简单来说,就是在一张有多个索引的表上执行一条查询语句,明明应该走a索引的,但在实际执行过程中偏偏走了b索引,那是什么原因导致 MySQL 选错了索引?背景知识索引:相当于目录,能够加快查询效率优化器:MySQL架构中的重要组成,作用是从不同执行方案(计划)挑选出其认为最优的来执行执行计划:根据SQL语句将要达成的目标,制定出来相应的执行过程优化器的选择从上述问题及背景知识中不难推断出,

2021-08-08 22:15:11 120

原创 唯一索引与普通索引

唯一索引与普通索引本文将介绍唯一索引与普通索引在查询和更新操作下的性能对比、两者各自的使用场景等背景唯一索引相较于普通索引最大的区别就是多了唯一性约束,简单说如果对某列建立唯一索引,就是保证了该列中不存在相同的值。但是如果业务系统能保证不可能插入相同的值,那么好像使用普通索引也未尝不可。综上,我们希望通过对比它们在查询和更新两种操作上的性能差异,找到更优方案。下图(来自网络)是准备的测试数据:主键索引树、k列索引树[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W

2021-07-27 22:05:22 708

原创 MySQL 锁

概述数据库锁设计的初衷是处理并发问题根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类全局锁表级锁

2021-07-21 21:56:55 76

原创 MySQL Flush

flush:刷脏页是什么?WAL技术提高了更新性能,将数据库随机写转换成顺序写,但内存中的数据页或者redo log中的变更动作始终需要写入磁盘,这就是WAL机制的后续:flush(刷脏页)什么是脏页?内存数据页与磁盘数据页内容不一致,称为脏页;反之,内存数据写入磁盘,内存与磁盘的数据页内容一致,称为干净页。作用解决WAL技术带来的内存脏页问题。触发时机redo log写满了,需要擦除来腾出空间继续写内存空间不足,需要淘汰脏页系统空闲时MySQL正常关闭需要关注前两种所带来的性能

2021-07-14 21:10:52 81

原创 MySQL change buffer

change buffer是什么?当需要更新的数据页不在内存中,在不影响数据一致性前提下,可以将更新操作存储在change buffer中,这样就不需要从磁盘读入此页。在下次需要访问此数据页页,将其读入内存时,再执行change buffer中与此页有关的操作,这样就能保证数据正确性。change buffer 延缓了随机读入数据页的时机,以达到类似组提交的效果,减少随机读IO消耗。作用提高更新效率,减少随机IO读取(只作用普通索引)减少内存占用特点change buffer在内存

2021-07-13 21:35:01 161

原创 MySQL事务

数据库事务定义事务指的是一组数据库操作要么全部成功,要么全部失败。如果出现部分成功,那么将造成数据不一致等情况。重点概念事务特性(ACID):原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)隔离性和隔离级别多个事务同时执行,就可能出现脏读、不可重复读、幻读的问题,于是就有了隔离级别。隔离得越严实,效率就会越低。隔离级别从低到高分为:读未提交、读已提交、可重复读、串行化(读写加锁)四种,依次解决上面提到的三种问题。

2021-06-22 21:43:25 85

原创 从网络包初探网络协议

什么是网络协议协议可以看作是沟通桥梁,形象如语言,通过语言可以知道对方表达的意思。人与机器也通过语言沟通,这种语言就是一种协议。机器与机器通过网络协议沟通协作,共同达成目的。常见网络协议HTTP、TCP、IP、MAC等网络分层自上而下分为应用层、传输层、网络层、链路层、物理层。你一定听过 HTTP是应用层协议、TCP是传输层协议、IP是网络层协议等。那么网络为什么要分层呢?因为复杂,复杂的程序都要分层,这是程序设计的要求。保证将复杂工作拆分,每层专注于做本层事情。例如二层设备摘下MAC头。三

2021-06-14 21:12:03 172 2

原创 从MySQL架构说起

从执行一条SQL语句开始要执行SQL语句,首先要获取数据库连接。连接器连接器负责跟客户建立连接、获取权限、维持管理连接建立连接需要认证,也就是校验用户名密码。通过认证后连接器回到权限表里查出该用户拥有的权限,之后这个连接遇到的所有权限判断逻辑都依赖此时读到的权限(意味着建立连接后修改用户权限对已存在的连接无影响)连接完成后如果没有后续动作,就会处于空闲状态。长时间空闲连接器会自动断开连接,这个时间就是 wait_timeout(默认8h)。连接断开后想要继续操作就需要重连,而建立连接往往复杂,

2021-05-30 20:57:10 70

原创 HTTPS

HTTPS一、出现原因:1、HTTP 有以下安全性问题:使用明文进行通信,内容可能会被窃听;不验证通信方的身份,通信方的身份有可能遭遇伪装;无法证明报文的完整性,报文有可能遭篡改。2、HTTPS通过(报文加密)(CA证书认证)(数字签名防篡改)解决上述问题二、关键词对称加密:加密和解密都是用同一个密钥非对称加密:加密用公开的密钥,解密用私钥(公钥看作是锁头,私钥看作钥...

2020-04-08 17:18:17 201

原创 Java集合框架——Set

Set接口:无序集合,不允许添加重复元素,如果视图把两个相同的元素加入到同一个集合中,add方法返回false.set判断对象是否相同使用equals方法, 就是说返回true就表示两个对象相同 set不会接受.需要注意的是:虽然Set中元素没有顺序,但是元素在set中的位置是有由该元素的HashCode决定的,其具体位置其实是固定的。HashSet:不能保证元素的排列顺序,不是同步的...

2020-03-22 16:04:57 116

原创 Java集合框架——List

ArrayList1、数据结构基于数组结构,默认大小为10,支持快速随机访问 (实现了RandomAccess),但插入删除代价高2、主要使用的apiboolean add(E e)E get(int index)int size()3、一般使用流程 //1、创建ArrayList List list = new ArrayList(); //2...

2020-03-17 17:18:16 130

原创 Java并发编程

一、并发编程的挑战并发编程的目的是为了让程序运行的更快。但并发编程也会带来很多问题:例如上下文切换、死锁、硬件软件资源限制等。上下文切换1、什么是上下文切换?cpu通过不断切换线程,让我们感觉多个线程同时执行。这种切换前会保存上一个任务的状态,以便切换回此任务时,能加载这个任务的状态。任务从保存到再加载就是一次上下文切换。2、那么多线程一定快吗(并行一定比串行快吗?)不一定,由于...

2020-03-17 01:27:41 191 1

原创 Java集合框架——Map

hashMap1、存储结构:1.7:数组+链表1.8:数组+链表+红黑树内部包含了一个 Entry 类型的数组 table。Entry 存储着键值对,又存放了下一个Entry。所以Entry其实是一个链表。即数组中的每个位置被当成一个桶,一个桶存放一个链表。HashMap 使用拉链法来解决冲突,同一个链表中存放哈希值和散列桶取模运算结果相同的 Entry。2、拉链原理:插入:计算放...

2020-03-15 11:25:59 172

原创 面向对象思想

面向对象思想与面向过程思想的区别:观点:面向过程:自己造电脑;面向对象:自己组装电脑;面向过程是一件事“该怎么做“,按一系列步骤来完成;面向对象是一件事“该让谁来做”,那个“谁”就是对象;将所有步骤(功能)分配给一个个对象,最后由这些对象共同完成这件事;举例:如何将大象装进冰箱面向过程:1、冰箱门打开2、大象装进去3、冰箱门关上面向对象:1、对象冰箱开门2、冰箱装进(...

2020-03-14 17:11:49 175

原创 数据库四大范式详解

第一范式(1NF)所有属性都不可再分,即数据项不可分。例如:不符合1NF,要将它查拆分开第二范式(2NF)消除非主属性对主码的部份依赖。例如有关系(Sno,Sdept,Sloc,Cno,Grade)第三范式(3NF)消除非主属性对主码的传递依赖。BCNF消除主属性的部分+传递依赖(符合3NF,并且主属性不依赖于主属性)例如:仓库(仓库编号,货物编号,仓库管理员编号),其...

2020-03-14 17:02:28 1674 1

原创 Mysql三大日志

数据库崩溃时事务的恢复机制1、Undo LogUndo Log是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用了Undo Log来实现多版本并发控制(MVCC)。原理:在操作任何数据之前,首先将数据备份到一个地方(Undo Log)然后进行数据的修改。如果出现了错误或者用户执行了ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状...

2020-03-14 15:40:19 167

原创 Mysql优化方案

sql优化查询性能优化1、使用 Explain 进行分析比较重要的字段有:select_type : 查询类型,有简单查询、联合查询、子查询等key : 使用的索引rows : 扫描的行数2、优化数据访问减少请求的数据量只返回必要的列:最好不要使用 SELECT * 语句。只返回必要的行:使用 LIMIT 语句来限制返回的数据。缓存重复查询的数据:使用缓存可以避免在数...

2020-03-14 00:27:48 99

原创 Mysql索引

什么是索引索引的出现就是为了提高查询效率,就相当于字典的目录一样。索引的数据模型1、hash:以key-value形式存放数据,同一个key下拉出链表优点: 等值查询或是插入操作效率高。缺点: 区间查询效率极低。[X,Y] 适用场景: Memcached或NoSql数据库引擎2、有序数组:优点: 利用二分法,查询效率高。缺点: 除了递增的追加插入外,中间插入效率很低,...

2020-03-12 14:05:47 114

原创 Mysql引擎及特点

常用MyISAM:读多表锁、无事务Innodb:写多行级锁、支持事务、支持外键了解Memory(redis效果):远古时代可作为缓存使用速度快、纯内存、但不持久化...

2020-03-08 10:49:56 151

转载 数据库并发问题和隔离级别

总结一下为什么会出现“脏读”?因为没有“select”操作没有规矩。为什么会出现“不可重复读”?因为“update”操作没有规矩。为什么会出现“幻读”?因为“insert”和“delete”操作没有规矩。“读未提(Read Uncommitted)”能预防啥?啥都预防不了。“读提交(Read Committed)”能预防啥?使用“快照读(Snapshot Read)”,...

2020-03-02 17:45:32 123

原创 跨域访问

什么是跨域访问出于安全考虑,浏览器中设置了同源策略。限制从JS脚本发起的跨源HTTP请求同源策略:要求发送请求的url地址和返回响应的url地址必须保证, 协议、IP地址、端口号不能够发生改变;只要这三个位置有一个发生变化, 那么浏览器就会认为这个响应不安全, 会拒绝接收响应数据, 就是跨域请求访问.响应方能收到请求,也会返回响应,但是响应被请求方拒绝接收。页面之间的跳转(即使带有数据)...

2020-02-29 11:26:15 215

原创 mysql远程访问权限开启

1、登陆mysql数据库mysql -u root -pEnter password: ****查看user表mysql> use mysqlDatabase changedmysql> select host,user,password from user;+-----------+------+------------------------------------...

2020-02-29 10:05:38 121

原创 单点登陆与 CAS

什么是单点登录:单点登录又叫做SSO, SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。在大型项目中,存在诸多子系统分别部署在不同服务器上,但是tomcat的session不能共享,因此就需要SSO 单点登陆。使用场景(作用):传统企业项目: 做系统权限集成互联网项目: soa分布式架构下, 是多个项目, 如果跨项目跳转访问能够自动认证.单点登...

2020-02-26 17:17:58 275

原创 数据库集群方案分析

在互联网企业, 高并发, 大数据量的情况下, 单个数据库指定在一定情况下会造成数据库宕机.数据库怎么做集群:业务:读大于写(大多数企业业务都这样)数据库解决方案:集群, 读写分离, 一台主库作为写入的数据库, 写数据库不允许读, 多台从库, 也就是读取库, 读取库不允许人为的往里写数据. 平时高并发读的时候, 例如: a用户从一个库中去读取数据, b用户去另一个从库中去读取数据,...

2020-02-25 17:42:03 534

原创 短信发送业务——阿里云

申请服务1、申请签名个人只能申请一个,不需要上传资质认证。2、申请模板3、创建子账户(AccessKey)申请服务

2020-02-25 17:38:00 357

原创 Springboot微服务

什么是springbootspringboot是spring组织生产的一个后端全栈框架(不包括页面的技术)作用:提倡零配置, 不用整合框架结构, 直接编写业务代码, 提高开发效率.但是springboot只适合小项目使用(对性能要求不高).springboot Demo1、导入依赖使用springBoot的项目打包成jar包,而不是war包部署到tomcat上,springboo...

2020-02-24 14:41:59 129

原创 JMS(Java消息服务)

什么是JMSjms的全称叫做Java message service (Java消息服务) jms是jdk底层定义的规范, 各大厂商实现的是这个规范的技术作用:在soa分布式架构系统中, 或者企业中的多个项目中, 进行多个系统异步传递消息.优点: 1.使用消息服务器当做大的队列使用, 先进先出, 来处理高并发写入操作 2. 使用消息服务器可以将业务系统的串行执行改为并行执行, 处...

2020-01-12 15:42:11 295

原创 网页静态化 Freemarker

什么是freemarker:freemarker是apache的一个开源的模板引擎.作用:freemaker模板引擎可以通过模板和数据生成静态化页面.优点:提前根据模板和数据生成静态化页面通过 io流将页面写入到硬盘上, 访问的时候直接访问.就不用访问数据库了, 可以大大提高数据库的高并发读取性能. 使数据库访问量降低.由于页面是提前生成好的, 所以访问速度快, 客户体验好由于h...

2020-01-12 15:23:05 190

原创 Solr全文检索

什么是solr:solr是一个apache的全文检索引擎系统, 就是个war包, 部署到Tomcat下就可以独立运行,我们使用它的客户端工具包 solrj 来远程调用solr服务器, 完成对索引库的操作(对索引库的添加修改删除, 查询)solr底层使用lucene编写。Lucene是一个全文检索引擎工具包,它不是一个完整的全文检索应用而Solr的目标是打造一款企业级的搜索引擎系统s...

2020-01-02 03:03:26 372

原创 Redis 和 SpringDataRedis

redis分布式缓存redis底层使用C语言编写, 存储数据是放在内存中, 速度非常快.作用:redis在互联网项目中一般充当分布式缓存使用业务流程:获取数据的时候先从redis中获取, 如果获取到数据则直接返回, 就不用访问数据库了如果获取不到数据, 可以从数据库中查询, 查询到后放入redis中一份, 下回就可以直接从redis中查询到这样大大降低了数据库的高并发访问压力.持...

2019-12-30 13:53:11 182

原创 分布式文件服务器FastDFS

什么是fastDFSfastDFS是一个底层使用C语言编写并且开源的, 分布式文件系统作用:可以统一管理存储服务器集群, 统一管理存储读取文件.fastDFS原理fastDFS一共分为三部分, client客户端(我们的项目), trackerServer管理端, storageServer存储端client客户端: 使用fastDFS的jar包中的api来存储文件,调用fastDFS...

2019-12-27 00:42:02 184

原创 电商项目的一些琐碎知识点

电商概念SPU与SKUSPU = Standard Product Unit (标准产品单位)通俗点讲,属性值、特性相同的商品就可以称为一个SPU。例如:iphone8 就是一个SPU,与商家,与颜色、款式、套餐都无关。SKU=stock keeping unit (库存量单位)SKU是物理上不可分割的最小存货单元例如:iphone8 64G 8000元 白色 联通ip...

2019-12-25 01:14:14 176

原创 Spring Security

Spring Security简介springSecurity是spring生产的一个安全框架, 也就是权限管理框架作用:将springSecurity集成到我们系统中, 我们就可以用它来完成系统的权限控制管理.a) 用户名, 密码认证(判断用户名密码是否正确)b) 授权: 给予登录用户对应的访问权限.一、Spring Security Demo引入jar包(略)核心配置文件1、...

2019-12-13 15:09:23 133

原创 关于SOA项目的一些配置文件

SOA是大型项目的架构,每个项目之间存在依赖关系,项目中的配置文件也因为这种依赖关系相互加载或被加载例如下面这个大型项目:(各个项目之间的依赖关系如下)common中的配置文件/resources/spring/applicationContext-dubbox.xml<!-- 加载properties文件--><context:property-placeholde...

2019-11-27 17:01:20 380

原创 Java源码分析

一、String类1、string不可变的理由:public final class String : String是final类,不可继承private final char value[] :成员变量用 final 修饰,变成常量。常量的好处是线程安全。(如果通过反射还是可以修改value的)用 private 修饰 表示成员变量独有,其他程序不能操作value字符数组2、pub...

2019-11-26 14:53:14 106

原创 dubbo和zookeeper

SOA架构传统行业项目: 并发低, 数据量小, 不需要高可用, 例如: oa, erp, crm项目, 或者政府项目, 银行项目等(针对特定人群,则同一时间请求少).互联网项目: 高并发, 大数据量, 高可用 例如: 京东, 百度, 淘宝, 天猫, 饿了么, 美团, 滴滴, ofo, 钉钉(针对所有人,同一时间请求并发高,高可用不可断线)单台Tomcat极限基本是可以同时抗住500个并发,所...

2019-11-26 14:52:40 94

原创 数据结构与算法三之树

八、二叉树遍历二叉树:查找二叉树的节点删除二叉树的节点顺序存储的二叉树堆排序线索二叉树赫夫曼树(最优二叉树)赫夫曼编码为什么需要树?顺序存储:优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入删除值(按一定顺序)会整体移动,效率较低链式存储:优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点...

2019-09-18 14:29:25 143

原创 数据结构与算法二之排序算法

七、排序算法时间复杂度常见排序算法(八种)冒泡排序选择排序插入排序希尔排序快速排序归并排序基数排序时间复杂度引出:时间频度:一个算法中的语句执行次数称为语句频度或时间频度。记为 T(n)。T(n)的求解:1、忽略常数项。 2、忽略低次项 。3、忽略系数。例如:T(n) = 3n^2+3n+6 ——>n^2时间复杂度:f(n):即三忽略后的辅助函数。T(n) / f(n) 的极...

2019-09-18 14:28:58 195

空空如也

空空如也

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

TA关注的人

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