- 博客(62)
- 收藏
- 关注

原创 我的文章目录
写的东西太多了,自己都快找不到了,所以写个目录;搜索快捷键:Ctrl F===================================================================Java问题解决:1、运行java文件乱码错误===================================================================JavaSE1、Java基础冷知识2、变量、类型转换、运算符3、交换2个变量的值的四种方法4、switc
2020-10-26 10:37:41
308
原创 事务、MVCC、锁
不可重复读与幻读都是读取的结果不同,前者侧重于修改,是对单条记录;后者侧重于增删,是查询出的结果集的变化。Read View:一致性视图,也叫快照,用来判断事务应该看到版本链中的哪个版本数据。版本链:记录中的roll_pointer指向的一系列操作的undo log链表。通过为该记录加锁,这个锁本质上是一个在内存中的结构。概念:多个未提交事务对同一条记录进行改动时,需要。:事务A读取到未提交事务B修改的数据。:事务A修改了未提交事务B读取的数据。:事务A增删了未提交事务B读取的数据。
2024-01-30 18:03:57
744
原创 undo log
2、purge:删除语句的事务提交之后,断开正常记录链表,PAGE_FREE指向该记录,该记录的next_recoed再指向之前的垃圾链头部(头插法):被删除的记录根据next_record形成的链表,page—>page header—>PAGE_FREE属性—>垃圾链头部。:undo log(撤销日志)。事务执行中断(违背原子性,不可执行)时,需要回滚数据。1、delete mark:只将该记录的deleted_flag设置为1。,表示当前记录的所属事务,默认0。每条记录上都有一个隐藏列。
2024-01-26 18:17:36
436
原创 redo log
redo log是什么?拿来干嘛的?:如果提交一个事务,就刷新一次磁盘。那么会存在如下问题:1、单改一条记录,至少都是刷新一个页,造成大量的磁盘I/O浪费2、随机I/O比连续I/O慢(就是一件一件衣服洗与一堆衣服洗)。且一个事务还可能涉及到索引的维护等等,等这些全部做完再提示事务提交成功,太慢了。:将这些事务记录在redo log中(redo log刷盘到log file里),就提示事务提交成功。
2024-01-26 17:28:51
435
原创 Buffer Pool
其实二者的整个过程分 加载和读两个过程,二者都会加载,加载的时候都是加载到冷区的头部。而预读不一定会读,但全表扫一定会读,所以提供了判断全表扫的规则:即当前后访问一个页的时间间隔<1000ms(默认),数据就不会去加载到热区。比如第一次查询数据之后,数据库中对应的数据页就加载到缓冲页,第二次查询就不用去数据库了,直接内存查到返回。用户查询过的缓冲页的控制块组成的链表,最新访问的在最前面。由空闲的缓冲页的控制块组成的链表,新增的时候就在这里面找空闲的内存。由修改过的缓冲页(脏页)的控制块组成的链表。
2024-01-25 17:54:18
383
原创 InnoDB索引
回表:用非聚簇索引查找数据时,找到对应的叶子节点,再根据存储的主键去聚簇索引查找到对应的叶子节点,即为数据。索引的数据结构就是B+树,它的叶子节点存储数据(数据页),非叶子节点存储索引(索引页)。所以索引走树,全表扫走叶子节点的单向链表(mysql里优化成双向)目录项记录 = 每页记录的最小值 + 主键值 + 页号。二级索引页(非主键) = 多个目录项记录。
2024-01-25 16:52:00
357
原创 MySQL InnoDB 底层数据存储
比如下面的分组步骤2,根据主键在槽数组中二分查找,找到对应槽之后,但还有要向上一个槽(因为是单向链表,所以无法向上),再往下遍历next record。1、安全性:为了减少上述这种数据迁移,且大数据的情况下,一般选用主键自增,所以数据主键很容易就猜到,然后拿去一个一个试,就暴露了其他数据。2、业务性:数据主键是数据库生成,实际没有任何业务意义,对于用户来说不适用。记录的物理插入是随机的,就是在磁盘上的位置是无序的。比如,查询的时候,并不是只从磁盘读取某条记录,而是记录所在的页。
2024-01-23 17:02:10
439
原创 【泛型】
早期用Object表示任意类型,在编码期就不会报错。当使用向下强转,出现类型不一致时,运行期就会报错。所以在JDK1.5引入了泛型,直接在编码期限制了类型,主要用于集合中。
2024-01-19 15:14:33
384
原创 双亲委派模型
到此,可以看到是让当前线程的上下文类加载器去加载Driver.class,那么上下文类加载器又是什么呢?这样就实现了在DriverManager里面加载Driver,所以说SPI就能够破坏双亲委派机制。看个例子:Class.forName(“com.mysql.cj.jdbc.Driver”);在JDBC4.0之后就不需要这行代码了,使用SPI的方式加载。其实分两步:检查(自底而上)—>加载(自顶向下)
2024-01-18 17:16:30
376
原创 六大设计原则
1、针对于继承的方法,子类需要扩展最好是新写方法去调用,而不是重写修改逻辑;或者不继承,直接将需要的类注入进来去调方法。2、非要选择重写的话,父类就应该抽象,这样代码就无法实例化,也就不存在上述问题。下层模块引入上层模块的依赖,改变了自上而下的依赖方向。调用接口,无需关心接口的实现过程。扩展功能应该是新加方法,而不是直接修改原有代码,要做到向下兼容。多用组合,少用继承。避免子类替换父类时,逻辑不一致的问题。eg:买电饭煲,不用知道电饭煲的工作原理。eg:微服务中,对外提供的接口。
2024-01-15 16:17:58
458
1
原创 ReentrantLock 的源码分析
公平锁代码流程文字描述非公平锁代码流程文字描述注意:1、入队 ≠ 排队2、自旋 ≠ 自旋加锁(pre为head的node)3、效率:非公平锁 优于 公平锁
2021-07-21 16:29:49
163
原创 Bug随手记
1、打断点与不打断点 的执行结果不一样原因:在执行方法的时候所需要的参数在获取的时候需要一段时间,而debug的时候是一步一步执行代码,时间很充足,而当程序正常执行的时候由于执行的时间很快,某一个或一些参数没有获取到就直接执行了此方法,由此导致执行结果就会出现和debug时候的执行结果不一致的问题解决方法:在执行这个方法之前让程序停一会儿,给获取需要的参数所执行的代码足够的时间代码://线程休眠1000毫秒Thread.sleep(1000);2、jenkins部署之后,dev环境和本地运行结
2021-06-08 10:34:55
409
原创 有趣的文案
我对象很好,我对狗也很好我对猪也不错,我很善良,谢谢。人生就像愤怒的小鸟,当你失败时总有几只猪在笑上辈子做恶多端,这辈子早起上班只要我不努力,老板就永远过不上他想要的生活一直很尊重金钱,没偷,没抢,没有太礼貌了也不是什么好事,刚被踩了一脚。我习惯性的说了声:谢谢……只有当你走出舒适圈,你才会知道:舒适圈到底有多舒适今天我依然是个碌碌无为的知食分子钱能不能买到快乐我不知道但我很快乐,可以卖钱吗晚安,这个点还没睡的,受益人能不能写我名字我一生普通,遇到过最浪漫的事,也不过是斗地
2021-05-31 17:11:49
496
4
原创 QuartZ
核心 = scheduler + JobDetail + Trigger原理:1、scheduler是一个计划调度器容器(总部),容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。2、JobDetail是一个可执行的工作,它本身可能是有状态的。(何事)3、Trigger代表一个调度参数的配置,什么时候去调。(何时)4、当JobDetail和Trigger在scheduler容器上注册后,形成了装配好的作业(
2021-05-20 17:41:21
173
原创 jQuery基础
jQuery是继prototype之后一个优秀的开源的JavaScript代码库(或JavaScript框架),它封装JavaScript常用的功能代码原生JSjQuery页面加载window.οnlοad=function(){ //代码;}$(function(){})获取节点document.getElementById(“name”);$("#mytime")绑定事件:Js中1.<a href=“javascript:void(0);” οncl
2021-05-19 17:22:39
221
2
原创 IDEA 自定义类注解和方法注解
一、类注解模板代码/** * @Description 类作用描述 * @Author shp * @Date ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINUTE} */===================================================================二、方法注解1、先创建一个模板组2、选中模板组,创建模板3、设置模板注释模板** * @Description 功能描述$param$
2021-01-06 17:03:59
447
1
原创 Spring全家桶之SpringSecurity
SpringSecurity:一个能够为 基于Spring的企业应用系统 提供声明式的安全访问控制解决方案的安全框架,主要两个功能:认证和授权。基于Filter实现认证和授权,底层通过FilterChainProxy代理去调用各种Filter(Filter链),Filter通过调用AuthenticationManager完成认证 ,通过调用AccessDecisionManager完成授权。===================================================那么其
2020-11-25 13:11:07
271
原创 Ajax
AJAX:Asynchronous Javascript And XML,异步JavaScript和XML,是改善用户体验的网页开发技术;===================================================传统交互方式与ajax交互方式传统交互方式:客户端(浏览器)向服务器发送请求,服务器接收请求并处理完毕后会重新加载一个完整的网页(与之前的网页几乎差不多),并且将响应数据返回给客户端(浏览器),浏览器解析网页显示给用户;缺点:1.发送的请求是一个同步请求,销
2020-11-09 16:23:03
724
原创 js中的DOM对象
DOM【Document Object Model】 :文档对象模型。就是根据文档的标签层次在内存中形成的一个树状结构对象,就是为了方便操作节点===================================================================常用事件onabort:用户终止页面加载。onblur: 失去焦点onchange 用户改变对象的值。onclick 用户点击对象。ondblclick 用户双击对象。onfocus(和onblur相反) 用户获得焦点
2020-10-16 19:03:50
209
原创 原生JS
JS:JavaScript,是一种解释性脚本语言(代码不进行预编译),由浏览器解释执行,用来向页面添加交互行为JS的三个主要组成部分:1、ECMAScript:核心,描述了Js的基本语法:类型、语句、关键字、保留字、运算符和对象等,大部分浏览器支持的是ES5,不支持ES62、BOM(浏览器对象模型):是浏览器的一种特性,它可以对浏览器窗口进行访问和操作,例如移动、关闭窗口,调整窗口的大小等;3、DOM(文档对象模型):是把整个文档中的所有节点解析成一个一个对象,并且这些对象之间会形成一个层级关系。通
2020-10-15 19:38:23
466
1
原创 SSM集成项目
SSM:Spring+SpringMVC+MyBatis项目(提取码:ssm1)结构:===================================================================1、 所需要的jar包(提取码:jars )2、SpringMVC的配置<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/bean
2020-09-29 18:48:33
149
原创 SpringMVC:文件的上传与下载
下载前端代码:.jsp<%@page import="java.net.URLEncoder"%><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.d
2020-09-27 16:59:57
166
原创 SpringMVC基础
SpringMVC:是一个基于MVC模式的WEB/表现层框架,可以理解为它代替了Servlet;是Spring框架中的一个功能模块,可以与Spring无缝集成,提高开发效率;它解决WEB开发中常见的问题:参数接收、文件上传/下载、表单验证、国际化等等;...
2020-09-27 15:45:52
167
原创 Spring细节
1、由spring创建的对象默认都是单例;如果想要多例,配置的时候设置作用域属性:scope=“prototype”<bean id="scopeBean" class="cn.itsource._03_scope.MyScopeBean" scope="prototype"/>扩展:===================================================================2、Spring默认使用的是及时加载模式,即启动就会创建好所有的B
2020-09-25 15:42:44
180
原创 Spring测试
Spring框架提供了对单元测试(junit4)的强大支持,我们不用在使用传统的单元测试去测试Spring功能通过Spring测试,使用注解帮我们读取配置文件和赋值,简化测试代码,提高测试效率;问:为什么要用Spring测试?因为三大框架整合的时候,如果Spring的配置文件不能读取,那么整个项目是跑不起来的,;而Spring的测试可以让我们在不启动服务器的情况下,使用注解读取相应的配置文件,把项目跑起来,完成对功能的测试。====================================
2020-09-25 14:42:06
228
原创 Spring(二:AOP)
AOP:Aspect Oriented Programming,面向切面编程,把业务代码中公共的代码抽离出来。然后再通过动态代理的方式动态的切入到页面代码中。就跟抽方法一个道理,抽公共的部分,但是并不在类中再调用,而是在事务管理器里面织入(规定通知的执行顺序)使用:事务管理,日志管理,性能监测,权限校验;===============================================================AOP术语连接点(Joinpoint):程序执行的某一个特定位置,如
2020-09-25 13:51:41
173
原创 Spring(一:IOC)
Spring是一个开源的轻量级控制反转(IOC)和面向切面编程(AOP)的容器框架;底层原理:xml+dom4j+工厂设计模式+反射====================================================================IOC:Inverse of control,是一种思想,将对象的控制权(对象创建,销毁的过程)和依赖关系维护(字段赋值)交给Spring容器;在系统运行中,动态的向某个对象提供它所需要的其他对象;白话就是以前创建对象,是用到的时候自
2020-09-25 12:10:24
152
原创 log4j
log4j:log for java,即java的日志可以将信息分级别(严重fatal、错误error、警告warn、调式debug、信息info)按不同方式(控制台、文件、数据库)和格式输出;主要有以下3部分组件构成:(1)日志器(Logger):负责消息输出,提供了各种不同级别的输出方法;(2)输出器(Appender):负责控制消息输出的方式,例如输出到控制台、文件输出等;(3)布局器(格式器,Layout):负责控制消息的输出格式;使用步骤:1、如果是eclipse,要 导入jar包(
2020-09-25 09:47:17
126
原创 mapper.xml中的结果映射
域对象(就是domain下面的类)之间的关联关系:按照多重性可分为一对一、一对多、多对一和多对多,即数据库中的表之间的关系根据关联关系,所以以右为主,所以一对一、多对一的处理方式是一样的,一对多和多对多一样,而左边决定抽象方法的返回类型。举例:一个年级的班级信息表与学生信息表如果用一张表来存储的话,每条学生数据都有班级字段,并且都是写“xx班级”;但如果将学生信息和班级信息拆分,而学生表仍有班级Id字段,虽然看起来并没有什么区别,但是这样就会减少占用的存储空间,毕竟数字肯定是比"xx班级"的字节
2020-09-21 17:02:09
963
原创 mapper.xml中细节
直接上代码:接口中的抽象方法:List<Person> findAll();Person findOneById(Long id);Integer findCountBySex(Boolean sex);映射文件中对应的sql:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.o
2020-09-21 15:33:06
596
原创 MyBatis(二:增强)
这篇文章主要写的是:Mapper.xml=OGNL表达式(#{})+动态SQL(标签)===========================================================OGNL:Object-Graph Navigation Language,表达式中有三种符号,分别是#(使用最多)、$(一般不用)和%(目前还没用过);作用就是取值先上代码 <select id="findOne" parameterType="long" resultType="Produ
2020-09-21 14:26:32
273
原创 Mybatis(一:初级)
MyBatis是一个半ORM的数据库持久化框架,底层还是JDBC,所以单用Mybatis时,事务需要手动提交历史扩展:它本是apache的一个开源项目iBatis,所以很多jar的名字还是iBatisORM:对象关系映射(Object Relational Mapping),一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术;操作数据库关系方式有很多种,常用的是这两种:1、半映射:把SQL写在配置文件中,通过不同SQL中完成对象实体和数据库关系相互转换的操作,如Mybatis2、完整映射
2020-09-20 12:01:55
1049
1
原创 MVC思想 & 三层架构
MVC是程序设计的一种思想,全名是Model(业务模型) View(页面视图) Controller(控制器)MVC职责(1)控制器C:整个过程中,控制器即要与前端界面交互,也要与后台Java代码(Model)进行交互,起到核心控制作用。Web 用户向服务器提交的所有请求都由控制器接管。接受到请求之后,控制器负责决定应该调用哪个模型来进行处理(根据用户请求进行相应的业务逻辑处理,并返回数据。最后控制器跳转到相应的视图并将数据呈现给用户)或直接跳转页面;(2)模型M:后台Java代码,包括业务代码、
2020-09-19 15:58:06
385
原创 JSTL
JSTL(JavaServer Pages Standard Tag Library):JSP标准标签库,=标签库+EL,用来消除JSP中的JAVA代码=============================================================标签库一共有5个一般核心标签库就够了,在JSP页面引用:<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>3个常用标签:if、fore
2020-09-19 15:26:30
165
原创 servlet与jsp
Servlet:是一个接口,一个规范(sun公司并没有去实现它),它的实现就是由各大服务器厂商(Tomcat)去实现JSP(java server page):java服务器端(动态)网页,JSP就是Java中用来做动态网页的技术;底层就是一个Servlet,可不是一个html问:如果想把页面做好看一些,怎么做?很明显Servlet是不行的,所以需要用到JSP(看上去就跟HTML页面差不多),Servlet主要是处理业务为主(Java后台代码),JSP主要以表现为主(HTML,CSS,JS等前端代码)
2020-09-19 13:30:35
252
原创 页面静态化技术
什么叫页面静态化?使用FreeMaker技术(全称FreeMarker Template Language (FTL)),它是一款模板引擎: 即一种基于模板(.ftl)和要改变的数据(Map对象或Java实体 ,但是List集合不行,但是它们可以放到Map里)其实就是数据库中有很多条记录,它们的展示界面都差不多,就比如淘宝里的商品,只是信息不一样,但是展示页面都是一样的。然而每次用户访问时都要查询一次数据库,大量的访问增加了数据库的压力。所以为了减轻数据库的压力,就每次在添加或者修改商品的时候,在
2020-09-18 19:41:00
306
原创 CSS选择器
Css选择器:把设置的“样式”作用于网页中的哪些元素;就是使用选择器1、基本选择器:*对页面上所有的元素的样式进行渲染,这样就会使页面的渲染速度变慢,所以基本不用*{ color:bule;}2、标签选择器如果想匹配多种标签,就用分号隔开,这样就又叫多元素选择器div,table{ width:300px;}3、类选择器: . class.ren{ font-size:30px;}<span class="ren">我用了类选择器</span>
2020-08-29 16:56:12
169
原创 JDBC中的细节
1、为什么要使用JDBC?因为把要数据持久化,持久化数据的最好方式就是把数据保存到数据库,而Java要数据保存到数据,就需要使用JDBC2、持久化到数据库的技术,唯一的只有JDBC ,其他的所有框架实现的底层都是JDBC,eg:Hibernate, MyBatis,JPA,SpringData JDBC3、什么是JDBC?JDBC(Java DataBase Connectivity,Java数据库连接):是一种用于执行SQL语句(DML,DDL,DQL)的Java API,可以为多种关系数据库(
2020-08-29 15:40:31
253
原创 XML && Dom4J
XML定义:eXtensible Markup Language:一种可扩展的标记语言作用:作为配置文件,因为它是一种通用的数据交换格式(即可以使数据在不同的语言中进行使用)来源:XML技术是W3C组织(万维网联盟)发布的,因为发布即完美,所以一直都是1.0版本编写细节:1、Eclipse快速创建某种文件:Window—>Perspective—>Customize Perspective—>Shortcuts–>勾选对应文件类型2、XML文件的第一行:<?xml
2020-08-29 11:56:57
392
原创 java反射机制
反射:其实就是通过类的全限定类名,获取该类的字节码文件,然后通过该字节码文件获取字段、构造方法、普通方法等信息那有什么意义呢?就是在某个类还没有设计好的时候,可以保证继续向后开发。但只是保证功能开发完成,是运行不了的,因为这个类里的某些字段,或构造方法,或普通方法还没写。而项目真正运行的时候,肯定所有的项目中的类都已经设计完毕,这时候,就可以保证代码正常运行了1、获取构造器,创建对象public class ReflectConstructor { public static void ma
2020-08-21 15:08:27
176
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人