
互联网
文章平均质量分 76
Survivor001
这个作者很懒,什么都没留下…
展开
-
【Mysql】 InnoDB引擎深入- 内存结构之ChangeBuffer | Log Buffer
ChangeBufferChangeBuffer是InsertBuffer 的升级版本,InsertBuffer主要是针对insert 操作进行缓存,而ChangeBuffer是针对 insert、update、delete 操作都进行缓存。ChangeBuffer是InnoDB引擎中比较关键的特性功能。它是一种特数据的数据结构。通过之前的学习,我们知道,当DML数据时,并不是直接去写入磁盘,而是先判断再缓冲池中判断是否有该页,如果有则直接修改(后续通过checkpoint刷新到磁盘中)。如果缓冲池中不存在原创 2022-06-24 16:56:22 · 334 阅读 · 0 评论 -
【Mysql】 InnoDB引擎深入- 内存结构之Buffer Pool缓冲池
缓冲池是InnoDB内存结构中比较重要的结构,主要目的就是解决CPU速度与磁盘速度之间的鸿沟,从而提高整体的性能。缓冲池其实就是一块内存区域,在数据库进行数据读取时,会将从磁盘读取到的数据页缓存到缓冲池中,下一次再读取到相同的页时,首先就先判断缓冲池中是否有命中的缓存页,如果有就直接读取,没有再去磁盘读取。所以缓存页的命中率也是优化的一个手段。 当数据发生改变时,首先会修改缓存池中的页,然后通过Master Thread线程以一定的频率刷新到磁盘中,需要注意的是,并不是修改了一个页就会刷新到磁盘中,这里需原创 2022-06-24 16:52:26 · 469 阅读 · 0 评论 -
【Mysql】 InnoDB引擎深入- InnoDB后台线程
下图是简单的一个InnoDB体系架构图,InnoDB存储引擎有多个内存快组成的内存池,负责如下工作:维护所有进程|线程需要访问的多个内部数据结构。缓存磁盘上的数据,方便快速的读取,同时在对磁盘文件的数据进行修改之前在这里进行缓存。重做日志..... 后台线程的主要目的就是负责刷新内存池中的数据,保证缓冲池中的缓存数据时最近的数据。此外将已经修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常情况下InnoDB能恢复到正常状态。核心线程如下:Master原创 2022-06-24 16:47:19 · 482 阅读 · 0 评论 -
【Mysql】 InnoDB引擎深入- 行溢出
知识点介绍:ascii字符集: n/1 (一个字符代表一个字节)gbk字符集: n/2utf8字符集: n/3 对于可变长度列最大存储长度为65535个字节(64kb),也就是说一行数据最大长度就是65535个字节,但是由于上面介绍过行格式中还存在其他相关信息的存储,例如null值、回滚指针的信息,所以最大长度为65535-2 个字节。 如果在ascii字符集下,也就是一行最多可以存储65532个字符; 在gbk字符集下65532/2字符; 在utf8字符集下65532/3字符; 根据数据页了解我们原创 2022-06-24 16:35:50 · 824 阅读 · 0 评论 -
【Mysql】 InnoDB引擎深入- 行格式
前面已经介绍了InnoDB的数据页结构,我们已经了解了InnoBD种数据和索引的存储结构以及页的概念。现在我们知道了数据库数据是以行存储在页种user record中的,那么现在就来了解下表的行格式。存储引擎支持四种行格式:、、 和,默认DYNAMIC表 14.9 InnoDB 行格式概述当前引擎中默认行格式为DYNAMIC(动态的),几种行格式基础格式差异不大,根据官网描述:那我们就直接看下COMPACT 行格式:我们向数据库插入一条数据,那么这条数据在磁盘上的存储格式是什么样的呢?大致介绍下相关内容:1原创 2022-06-24 16:30:23 · 450 阅读 · 0 评论 -
【Mysql】 InnoDB引擎深入- 二级索引、联合索引、回表、索引覆盖
接着上面文章内容对数据页的详细介绍以及聚集索引原理的了解【Mysql】 InnoDB引擎深入 - 数据页 | 聚集索引,有了这个知识前提,对了解二级索引、联合索引等相关内容的理解就变得非常简单了。二级索引(又名辅助索引、普通索引、非聚集索引),叶子节点不包含行记录的全部数据。叶子节点除了键值(索引建)之外,每个叶子节点中还包含了一个书签,该书签就是用来告诉引擎哪里可以找到该条记录的所有行数据,在InnoDB中该书签就是聚集索引建一般来说也就是聚集索键。 通俗来说,二级索引跟聚集索引有着一样的树原创 2022-06-24 16:19:53 · 975 阅读 · 0 评论 -
【Mysql】 InnoDB引擎深入 - 数据页 | 聚集索引
【Mysql】 InnoDB引擎深入 - 数据页 | 聚集索引原创 2022-06-24 16:12:45 · 826 阅读 · 1 评论 -
【Mysql】 InnoDB引擎 - 介绍
【Mysql】 InnoDB引擎 - 介绍原创 2022-06-24 16:00:20 · 768 阅读 · 0 评论 -
Mysql 优化数据库查询效率
mysql慢sql问题定位和优化 :Mysql优化 数据库查询效率转载 2022-05-20 09:43:05 · 139 阅读 · 0 评论 -
JAVA程序性能优化研究 - 循环内创建对象引用和初始化真的影响性能?
相信很多小伙伴在实际研发工作中大多数都是根据业务逻辑来实施研发,经常遇到循环体中集合的使用或者实体的使用场景,在大数据量下经常会遇到性能问题(效率和资源消耗),很多新人都不太注重研发时性能问题,今天就针对该场景下的优化记录下。(个人研究,有误留言)场景:很多业务都会有循环体中进行集合或者对象的使用,如下(方式一):public class ListForObject { public static void main(String[] args) { long startT原创 2022-05-05 13:55:45 · 2233 阅读 · 0 评论 -
OWASP列举的Web应用程序十大安全漏洞 - 安全配置错误
OWASP列举的Web应用程序十大安全漏洞 - 安全配置错误翻译 2022-02-11 13:17:17 · 1297 阅读 · 0 评论 -
OWASP列举的Web应用程序十大安全漏洞 - 跨站脚本 (XSS攻击)
跨站脚本 (XSS攻击)1、原理Cross Site Scripting,XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。基于存储的XSS攻击,是通过发表带有恶意跨域脚本的帖子/文章,从而把恶意脚本存储在服务器,每翻译 2022-02-11 13:11:52 · 418 阅读 · 0 评论 -
OWASP列举的Web应用程序十大安全漏洞 - 失效的身份认证和会话管理
OWASP列举的Web应用程序十大安全漏洞 - 失效的身份认证和会话管理原创 2022-02-11 11:28:13 · 3874 阅读 · 0 评论 -
OWASP列举的Web应用程序十大安全漏洞 - SQL注入
十大漏洞:SQL注入、跨站脚本、失效的访问控制、失效的身份认真和会话、安全配置错误、敏感信息泄露、攻击检测与防范不足、跨站请求伪造、使用含有已知漏洞的组件、未受保护的APIs。在系统架构设计、技术选型和编码阶段就需要充分考虑安全性要求,避免各类Web应用安全漏洞。SQL注入1、原理 SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应...原创 2022-02-11 10:46:59 · 3364 阅读 · 0 评论 -
JAVA1.8 Stream流
JAVA1.8 Stream流原创 2022-02-11 10:34:32 · 4880 阅读 · 0 评论 -
Mybatis3 深入源码 -- 分析Sql执行原理
上篇说到了getwapper方法获取到了Mapper接口的代理对象,现在分析下Mybatis执行Sql的相关内容原理。伴随着问题深入分析:Mybatis是如何通过Mapper接口找到对应的mapper.xml文件的sql执行语句?原理是什么? Mybatis怎么创建的数据库连接?什么方式创建的? Mybatis怎么进行参数处理的,原理是什么? 怎么执行sql语句的? 执行sql后结果集是怎么映射到实体类的?伴随着以上问题,我们渐渐深入源码探究:通过之两篇文章的介绍,我们知道...原创 2021-09-22 17:38:59 · 237 阅读 · 1 评论 -
Mybatis3 深入源码 -- getMapper返回代理mapper源码分析
经过前两篇文章的分析,我们知道了mybatis对配置文件mybatis-config.xml和mapper.xml 的一个加载原理,以及配置信息Configuraction和执行器Excutor 信息封装入DefaultSqlSession中。现在针对mapper相关源码进行解析,分析Mybaits是如果没有实体类的情况下,可以执行接口方法?示例:进入getmapper方法,实现类DefaultSqlSession:public <T> T getMapper(Cla.原创 2021-09-22 12:01:40 · 206 阅读 · 0 评论 -
Mybatis3 深入源码 -- sqlSession源码分析
接着上面博客内容Myabtis源码分析-SqlSessionFactory,这里讲解sqlSession相关源码内容。直接进入源码 openSession方法,默认接口实现类 DefaultSqlSessionFactory#openSessionFromDataSource: 这个函数核心目的就是创建一个Excutor private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsola.原创 2021-09-22 10:15:11 · 183 阅读 · 0 评论 -
Mybatis3 深入源码 -- SqlSessionFactory 源码分析
Mybatis3 官方文档入口实例:下面是简单的mybatis入口实例代码,一个简单的查询操作:SysUser 查询结果的实体类、SysUserMapper为dao层的mapper接口,方法queryList()public class MyMain { public static void main(String[] args) throws IOException { String resource = "mybatis-config.xml"; .原创 2021-09-20 18:38:49 · 332 阅读 · 0 评论 -
SpringSecurity 自定义JwtAuthorFilter基于JWT的Token验证
根据上篇的实现思想,现在我们正式实现下内容。需要实现的内容(基于之前的实现SpringSecurity 架子):1. 修改 JwtAuthenticationSuccessHandler ,需要将上下文信息存入redis: 因为验证环节需要实现从redis获取上下文,设置为SecurityContextHolder。2. 自定义实现JwtAuthorFilter,拦截所有请求,对token进行验证,验证内容:是否携带token,是 否有效等(根据需求实现):进行toke...原创 2021-09-15 16:50:48 · 6391 阅读 · 0 评论 -
SpringSecurity SecurityContextPersistenceFilter源码 和企业级Redis使用思想
之前几篇我们基本上讲述了SpringSecurity 登录认证和授权认证的实现和源码分析。我们大致清楚了 :SpringSecurity 登录认证原理。 如果自定义登录认证流程 授权验证的流程原理今天我们分析下整个认证过程和企业级redis使用的思想,是为了解决什么问题,以及怎么解决的?我们简单回顾下 SpringSecurity 流程。用户登录: 输入用户名 / 密码 JwtLoginFilter (自定义的UsernamePasswordAuthenticationFilter)..原创 2021-09-14 13:39:28 · 569 阅读 · 0 评论 -
SpringSecurity 源码解析 | 加JWT 实战 之 授权流程源码分析
前两篇分析了SpringSecurity 认证源码和自定义认证流程,本片主要讲下另一个核心授权。简单理解: 登录认证是用来确认用户是否能访问系统。 授权就是:你认证通过之后,还要检查是你是否满足资源所要求的权限。我们用之前的源码继续分析。首选思考下,要是你来实现这个框架,你怎么去处理授权这个流程?正常来说,基于RBAC思想(基于角色的权限控制),权限控制的源头是资源,比如 API_1,要想根据用户来控制是否能访问API_1,我们判断该用户是否有访问API_1的角色。那么简单流程就是: .原创 2021-09-13 21:47:45 · 703 阅读 · 0 评论 -
SpringSecurity 源码解析 | 加JWT 实战 之 自定义认证流程
上篇我们已经源码分析了SpringSecurity登录认证流程。很多内容都是默认实现,实际的企业开发中,对接很多内容都会有自行的扩充和增加。现在我们就实现自定以基于JWT登录认证,满足我们的登录需要。为什么要基于JWT登录认证?至于JWT相对于session的有点和好处我就不阐述了。主要说下我们用它来干嘛企业研发中,任何api的调用都不会是轻而易举的,必须是有合法的权限和资格才行调用api,所以前端在调用api的时候,必须带上标识token,调用之前对其进行验证,验证通过,在...原创 2021-09-13 19:41:19 · 884 阅读 · 1 评论 -
SpringSecurity 源码解析 | 加JWT 实战 之 登录认证源码解析
登录认证 对于登录认证是什么东西,这个就不用详解说了吧,在企业研发中,用户登录系统不单单简单的传递一个密码过来对比下,ok了就进入系统。一般来说为了在企业研发中,都会对此流程进行加强操作,比如密码的加密处理,用户是否过期,用户是否被停用了等等。但总结来说,目的都是一样,认证用户的信息。SpringSecurity框架就是帮我们实现了这样的流程功能的框架(这里只说登录认证)。稍微接触点SpringSecurity都知道,只要加入了SpringSecurity的依赖,访问api都会先进入...原创 2021-09-13 17:37:22 · 518 阅读 · 1 评论 -
SpringSecurity 源码解析 | 加JWT 实战 -- 介绍
Spring Security 是一个提供身份验证、授权和针对常见攻击的保护的框架。凭借对命令式和反应式应用程序的一流支持,它是保护基于 Spring 的应用程序的事实上的标准。Spring Security 是在Apache 2.0 许可下发布的开源软件。Spring Security 5.5 提供了许多新功能,详细内容见官方文档。SpringSecurity工作原理介绍(一下内容,为个人源码解析总结,可能不准确或者不完整)SpringSecurity 采用的是责任链的设计模式,它...原创 2021-09-13 15:34:23 · 250 阅读 · 1 评论 -
Spring IOC源码解析
全网最细、最全的Spring IOC源码解析图解内容,配合源码图形讲解,了解SpringIoc实现原理,Spring工厂创建过程,bean生命周期,单例、原型循环依赖解决办法等。SpringIoc源码解析图解原图原创 2021-08-09 11:36:37 · 190 阅读 · 0 评论 -
网络编程--多路复用器select、poll、epol,javaNIO原理和实现
网络编程–多路复用器select、poll、epol,javaNIO原理和实现之前已经说过了BIO模型的原理和实现,并根据其不足(阻塞,多线程资源消耗等),介绍了内核的升级实现了accpet和read不阻塞的方法,以及介绍了channel和buffer的模型和实现。上篇结束的时候提到了NIO(os层面)不足之处承接上文,如果有很多的链接进来,单纯的NIO的使用,我们程序需要对所有链接进行地毯式的遍历,监听所有链接事件,大致java实现模型如下:既然知道了上述模型的弊端,就会有解决的办法:如果程序原创 2021-06-13 18:04:30 · 1886 阅读 · 2 评论 -
网络编程--OS层级NIO的Channel和Buffer
网络编程–OS层级NIO的Channel和Buffer上篇文章讲述了BIO同步阻塞模型,大家都知道正是因为阻塞的原因,针对多连接,必须要用多线程去处理每一个连接,形成了每连接对应每线程的线程。由此,在多连接的场景下,过多的线程会线程内存浪费以及CPU的调度消耗。于是内核需要升级,将accept 和 recv 调用能设置成非阻塞的。服务器端建立连接后,内核程序会把该线程返回的文件描述符fd打上非阻塞标记NONBLOCKING。先看下抓包效果由上面我们可以看出来,操作系统内核升级之后,确实提供了,不阻原创 2021-05-31 23:30:31 · 313 阅读 · 1 评论 -
网络编程- Socket-BIO
网络编程- Scoket-BIO上图时对socket做一个简单介绍, 具体的实现这里就说了。主要将一下java网络编程几大IO模型实现、原理、演变,IO模型分别为BIO、OS级别的NIO(NONBLOCKING IO)、NIO java jdk1.4升级的NEW IO。BIO模型前提知识:想要彻底的了解IO模型及其原理和演变,你需要了解一下操作系统底层相关的一些系统调用知识,我上篇文章介绍过了,参考学习,有错误的望指出。系统调用|内核程序想必大家都知道IO操作肯定需要系统调用的,因为网络传输势必会原创 2021-05-30 22:48:23 · 299 阅读 · 3 评论 -
IO操作底层调用过程 | 用户态切换内核态原理 | 中断概念
IO操作底层调用过程|内核|中断|做后端的程序员都知道我们编写的程序主要分方法程序和IO操作程序。有什么不一样呢?方法程序就不多说了。IO程序有什么不同呢?IO操作指的是对硬件设备操作,比如键盘、鼠标、网卡、显卡…那又有什么区别呢?那就得说说系统调用先看下面简单的一个图,cpu主要从内存拉取数据执行,将返回结果返回给内存,是我们程序的执行过程(今天重点不是这)我们的程序分为 系统程序kernel(内核程序,操作系统自带的程序) 和 用户程序(app之类的我们自己放在系统程序)。系统程序k原创 2021-05-19 23:34:00 · 2833 阅读 · 0 评论 -
多线程透析--jvm创建对象过程|volatile作用和原理|线程三大特性
多线程透析–volatile作用和原理想必大家都听说过volatile这个修饰词,可能在你对他的理解仅停留在保证数据准确性的层面。今天详细说下volatile的一个功能和原理。说道volatile 千万不要和synchronize作用混淆了,都知道synchronize锁,主要是为了保证程序的执行的原子性,保证线程安全。多线程三大特性:原子性、有序性、可见性。而volatile 就可以保障有序性和可见性,但是记住,它是不能保证原子性的。那么就先说说什么是原子性,什么是有序性,什么是可见性?1.原创 2021-05-17 22:20:55 · 217 阅读 · 2 评论 -
ReenTrantLock之读写锁
ReenTrantLock之读写锁上几篇我们介绍了多线程同步相关锁Synchronsize锁和JDK的JUC锁Lock以及ReentrantLock锁。现在准备介绍的时JDK的读写锁(测试代码借用别人的博客,我这边只做一个总结)。先介绍下这个读写锁 ReentrantReadWriteLock这个读写锁也是JDK工具java.util.concurrent.locks包下,和ReentrantLock 不同的是ReentrantLock是继承了Lock,ReentrantReadWriteLock继承原创 2021-03-23 21:17:26 · 896 阅读 · 1 评论 -
多线程--线程不安全和线程死锁,同步锁Synchronize
线程不安全和线程死锁什么叫线程不安全?当多个线程共享同一个资源时,在不使用同步锁的情况下对共享资源进行读写操作是,导致的程序执行结果异常,产生不正常的结果数据。举个例子:两个人去抢票,当强到最后一张的时,在两个人眼里都看见有一张票,于是两个同时去抢,结果两个人都抢到了,而票的数量变成的-1。解决线程不安全的办法?解决线程不安全的办法就是给线程加锁,使用线程同步机制synchronize。线程同步其实就是个等待机制,多个线程访问同一个资源时,就要让这些线程进入一个等待池形成队列,等待前一个线程使用完原创 2021-03-08 23:02:55 · 353 阅读 · 0 评论 -
Centos7使用YUM安装MySQL详细步骤
Centos7安装MySQL详细步骤Centos7 安装MySQL详细步骤首先在虚拟机中安装一个Centos7(VM虚拟机安装Centos7)1.1 MySQL安装1.1.1 下载wget命令yum -y install wget1.1.2 在线下载mysql安装包wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm1.1.3 安装MySQLrpm -ivh mysql57-community-r原创 2021-01-04 18:49:31 · 696 阅读 · 1 评论 -
跨平台第三方平台登录和单点登录
跨平台第三方平台登录和单点登录官方介绍:单点登录:简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。个人理解: 对于单点登录和第三方平台登录功能我还是习惯以自己的理解去记忆: 单点登录: 从A平台通过链接方式到B系统,中间免去登录过程。 第三方登录: 从A平台通过B平台的登录进入A系统。中间免去A平台的直接登录,使用B平台的用户认证。 其实在功能实现流程上来说,“第三方登录”就是包含了“单点原创 2020-10-26 17:15:40 · 3998 阅读 · 2 评论 -
Spingboot Resttemplate连接池配置
Spingboot Resttemplate连接池配置package com.jshhxx.framework.config;import org.apache.http.client.HttpClient;import org.apache.http.client.config.RequestConfig;import org.apache.http.config.Registry;import org.apache.http.config.RegistryBuilder;import or原创 2020-09-27 15:00:07 · 1339 阅读 · 0 评论 -
springboot项目简单介绍、启动和部署
springboot项目介绍,启动和部署springboot介绍大家知道springboot是基于spring研发出来的,但是要知道springboot其实并不是对spring功能的增强,而是提供了一种快速使用spring的方式或者说是工具。springboot集合了大量的第三方库,Spring Boot应用中这些第三方库几乎可以是零配置的开箱即用,大部分的 Spring Boot 应用都只...原创 2019-04-16 09:44:10 · 39867 阅读 · 1 评论 -
为什么需要配置环境变量
为什么需要配置环境变量做开发的都知道在一个新的环境下都需要先安装个jdk,maven。。。,然后做环境变量配置,网上一搜配置方法到处都是,但是都没有介绍为什么需要配置环境变量。其实就是一个用处, 我们不管安装什么软件,要项启动这个软件都必须在安装目录下去执行启动软件(快捷键除外), 配置环境变量的用途就是,通过系统变量配置,让系统不管在什么目录下都能去执行改程序。想一下 要是不能再任意目录下都...原创 2019-04-15 10:09:45 · 959 阅读 · 0 评论 -
分布式系统
分布式系统开发分布式系统开发集中式系统想要理解分布式系统开发的含义,就要知道另一个开发模式,就是传统的一体化开发或者说集中式系统开发。很久以前就开始做项目的都知道,以前的系统开发都是集中式的,**所谓的集中式简单来说就是系统应用的内容就是一个整体的项目,一个项目就是所有的应用。**比如做一个网上商城的项目,可能我们需要划分很多模块比如商品信息、订单信息、用户信息等等。在集中式系统开发中这些...原创 2019-05-03 19:03:34 · 729 阅读 · 0 评论 -
分布式系统中CAP原理
分布式系统CAP原理分布式系统发开虽然有点很多但是并不是完美的,CAP原理就是其中的体现之一。CAP原理:指的是在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitontolerance(分区容忍性),三者不可得兼。一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。简单说就是所有节点在同一时刻的数据完全一致,这就意味着节点越...原创 2019-05-03 20:12:43 · 1643 阅读 · 0 评论