![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java学习
文章平均质量分 55
CRUD_coder
不会吧不会吧,不会现在还有人认为女生不适合当程序员吧!
展开
-
事务、MVCC、锁
不可重复读与幻读都是读取的结果不同,前者侧重于修改,是对单条记录;后者侧重于增删,是查询出的结果集的变化。Read View:一致性视图,也叫快照,用来判断事务应该看到版本链中的哪个版本数据。版本链:记录中的roll_pointer指向的一系列操作的undo log链表。通过为该记录加锁,这个锁本质上是一个在内存中的结构。概念:多个未提交事务对同一条记录进行改动时,需要。:事务A读取到未提交事务B修改的数据。:事务A修改了未提交事务B读取的数据。:事务A增删了未提交事务B读取的数据。原创 2024-01-30 18:03:57 · 709 阅读 · 0 评论 -
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 · 409 阅读 · 0 评论 -
redo log
redo log是什么?拿来干嘛的?:如果提交一个事务,就刷新一次磁盘。那么会存在如下问题:1、单改一条记录,至少都是刷新一个页,造成大量的磁盘I/O浪费2、随机I/O比连续I/O慢(就是一件一件衣服洗与一堆衣服洗)。且一个事务还可能涉及到索引的维护等等,等这些全部做完再提示事务提交成功,太慢了。:将这些事务记录在redo log中(redo log刷盘到log file里),就提示事务提交成功。原创 2024-01-26 17:28:51 · 410 阅读 · 0 评论 -
Buffer Pool
其实二者的整个过程分 加载和读两个过程,二者都会加载,加载的时候都是加载到冷区的头部。而预读不一定会读,但全表扫一定会读,所以提供了判断全表扫的规则:即当前后访问一个页的时间间隔<1000ms(默认),数据就不会去加载到热区。比如第一次查询数据之后,数据库中对应的数据页就加载到缓冲页,第二次查询就不用去数据库了,直接内存查到返回。用户查询过的缓冲页的控制块组成的链表,最新访问的在最前面。由空闲的缓冲页的控制块组成的链表,新增的时候就在这里面找空闲的内存。由修改过的缓冲页(脏页)的控制块组成的链表。原创 2024-01-25 17:54:18 · 352 阅读 · 0 评论 -
InnoDB索引
回表:用非聚簇索引查找数据时,找到对应的叶子节点,再根据存储的主键去聚簇索引查找到对应的叶子节点,即为数据。索引的数据结构就是B+树,它的叶子节点存储数据(数据页),非叶子节点存储索引(索引页)。所以索引走树,全表扫走叶子节点的单向链表(mysql里优化成双向)目录项记录 = 每页记录的最小值 + 主键值 + 页号。二级索引页(非主键) = 多个目录项记录。原创 2024-01-25 16:52:00 · 333 阅读 · 0 评论 -
MySQL InnoDB 底层数据存储
比如下面的分组步骤2,根据主键在槽数组中二分查找,找到对应槽之后,但还有要向上一个槽(因为是单向链表,所以无法向上),再往下遍历next record。1、安全性:为了减少上述这种数据迁移,且大数据的情况下,一般选用主键自增,所以数据主键很容易就猜到,然后拿去一个一个试,就暴露了其他数据。2、业务性:数据主键是数据库生成,实际没有任何业务意义,对于用户来说不适用。记录的物理插入是随机的,就是在磁盘上的位置是无序的。比如,查询的时候,并不是只从磁盘读取某条记录,而是记录所在的页。原创 2024-01-23 17:02:10 · 416 阅读 · 0 评论 -
【泛型】
早期用Object表示任意类型,在编码期就不会报错。当使用向下强转,出现类型不一致时,运行期就会报错。所以在JDK1.5引入了泛型,直接在编码期限制了类型,主要用于集合中。原创 2024-01-19 15:14:33 · 353 阅读 · 0 评论 -
双亲委派模型
到此,可以看到是让当前线程的上下文类加载器去加载Driver.class,那么上下文类加载器又是什么呢?这样就实现了在DriverManager里面加载Driver,所以说SPI就能够破坏双亲委派机制。看个例子:Class.forName(“com.mysql.cj.jdbc.Driver”);在JDBC4.0之后就不需要这行代码了,使用SPI的方式加载。其实分两步:检查(自底而上)—>加载(自顶向下)原创 2024-01-18 17:16:30 · 347 阅读 · 0 评论 -
六大设计原则
1、针对于继承的方法,子类需要扩展最好是新写方法去调用,而不是重写修改逻辑;或者不继承,直接将需要的类注入进来去调方法。2、非要选择重写的话,父类就应该抽象,这样代码就无法实例化,也就不存在上述问题。下层模块引入上层模块的依赖,改变了自上而下的依赖方向。调用接口,无需关心接口的实现过程。扩展功能应该是新加方法,而不是直接修改原有代码,要做到向下兼容。多用组合,少用继承。避免子类替换父类时,逻辑不一致的问题。eg:买电饭煲,不用知道电饭煲的工作原理。eg:微服务中,对外提供的接口。原创 2024-01-15 16:17:58 · 424 阅读 · 0 评论 -
ReentrantLock 的源码分析
公平锁代码流程文字描述非公平锁代码流程文字描述注意:1、入队 ≠ 排队2、自旋 ≠ 自旋加锁(pre为head的node)3、效率:非公平锁 优于 公平锁原创 2021-07-21 16:29:49 · 134 阅读 · 0 评论 -
Bug随手记
1、打断点与不打断点 的执行结果不一样原因:在执行方法的时候所需要的参数在获取的时候需要一段时间,而debug的时候是一步一步执行代码,时间很充足,而当程序正常执行的时候由于执行的时间很快,某一个或一些参数没有获取到就直接执行了此方法,由此导致执行结果就会出现和debug时候的执行结果不一致的问题解决方法:在执行这个方法之前让程序停一会儿,给获取需要的参数所执行的代码足够的时间代码://线程休眠1000毫秒Thread.sleep(1000);2、jenkins部署之后,dev环境和本地运行结原创 2021-06-08 10:34:55 · 345 阅读 · 0 评论 -
QuartZ
核心 = scheduler + JobDetail + Trigger原理:1、scheduler是一个计划调度器容器(总部),容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。2、JobDetail是一个可执行的工作,它本身可能是有状态的。(何事)3、Trigger代表一个调度参数的配置,什么时候去调。(何时)4、当JobDetail和Trigger在scheduler容器上注册后,形成了装配好的作业(原创 2021-05-20 17:41:21 · 147 阅读 · 0 评论 -
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 · 194 阅读 · 2 评论 -
IDEA 自定义类注解和方法注解
一、类注解模板代码/** * @Description 类作用描述 * @Author shp * @Date ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINUTE} */===================================================================二、方法注解1、先创建一个模板组2、选中模板组,创建模板3、设置模板注释模板** * @Description 功能描述$param$原创 2021-01-06 17:03:59 · 419 阅读 · 1 评论 -
Spring全家桶之SpringSecurity
SpringSecurity:一个能够为 基于Spring的企业应用系统 提供声明式的安全访问控制解决方案的安全框架,主要两个功能:认证和授权。基于Filter实现认证和授权,底层通过FilterChainProxy代理去调用各种Filter(Filter链),Filter通过调用AuthenticationManager完成认证 ,通过调用AccessDecisionManager完成授权。===================================================那么其原创 2020-11-25 13:11:07 · 229 阅读 · 0 评论 -
Ajax
AJAX:Asynchronous Javascript And XML,异步JavaScript和XML,是改善用户体验的网页开发技术;===================================================传统交互方式与ajax交互方式传统交互方式:客户端(浏览器)向服务器发送请求,服务器接收请求并处理完毕后会重新加载一个完整的网页(与之前的网页几乎差不多),并且将响应数据返回给客户端(浏览器),浏览器解析网页显示给用户;缺点:1.发送的请求是一个同步请求,销原创 2020-11-09 16:23:03 · 691 阅读 · 0 评论 -
我的文章目录
写的东西太多了,自己都快找不到了,所以写个目录;搜索快捷键:Ctrl F===================================================================Java问题解决:1、运行java文件乱码错误===================================================================JavaSE1、Java基础冷知识2、变量、类型转换、运算符3、交换2个变量的值的四种方法4、switc原创 2020-10-26 10:37:41 · 283 阅读 · 0 评论 -
js中的DOM对象
DOM【Document Object Model】 :文档对象模型。就是根据文档的标签层次在内存中形成的一个树状结构对象,就是为了方便操作节点===================================================================常用事件onabort:用户终止页面加载。onblur: 失去焦点onchange 用户改变对象的值。onclick 用户点击对象。ondblclick 用户双击对象。onfocus(和onblur相反) 用户获得焦点原创 2020-10-16 19:03:50 · 178 阅读 · 0 评论 -
原生JS
JS:JavaScript,是一种解释性脚本语言(代码不进行预编译),由浏览器解释执行,用来向页面添加交互行为JS的三个主要组成部分:1、ECMAScript:核心,描述了Js的基本语法:类型、语句、关键字、保留字、运算符和对象等,大部分浏览器支持的是ES5,不支持ES62、BOM(浏览器对象模型):是浏览器的一种特性,它可以对浏览器窗口进行访问和操作,例如移动、关闭窗口,调整窗口的大小等;3、DOM(文档对象模型):是把整个文档中的所有节点解析成一个一个对象,并且这些对象之间会形成一个层级关系。通原创 2020-10-15 19:38:23 · 416 阅读 · 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 · 118 阅读 · 0 评论 -
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 · 136 阅读 · 0 评论 -
SpringMVC基础
SpringMVC:是一个基于MVC模式的WEB/表现层框架,可以理解为它代替了Servlet;是Spring框架中的一个功能模块,可以与Spring无缝集成,提高开发效率;它解决WEB开发中常见的问题:参数接收、文件上传/下载、表单验证、国际化等等;...原创 2020-09-27 15:45:52 · 145 阅读 · 0 评论 -
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 · 149 阅读 · 0 评论 -
Spring测试
Spring框架提供了对单元测试(junit4)的强大支持,我们不用在使用传统的单元测试去测试Spring功能通过Spring测试,使用注解帮我们读取配置文件和赋值,简化测试代码,提高测试效率;问:为什么要用Spring测试?因为三大框架整合的时候,如果Spring的配置文件不能读取,那么整个项目是跑不起来的,;而Spring的测试可以让我们在不启动服务器的情况下,使用注解读取相应的配置文件,把项目跑起来,完成对功能的测试。====================================原创 2020-09-25 14:42:06 · 185 阅读 · 0 评论 -
Spring(二:AOP)
AOP:Aspect Oriented Programming,面向切面编程,把业务代码中公共的代码抽离出来。然后再通过动态代理的方式动态的切入到页面代码中。就跟抽方法一个道理,抽公共的部分,但是并不在类中再调用,而是在事务管理器里面织入(规定通知的执行顺序)使用:事务管理,日志管理,性能监测,权限校验;===============================================================AOP术语连接点(Joinpoint):程序执行的某一个特定位置,如原创 2020-09-25 13:51:41 · 154 阅读 · 0 评论 -
Spring(一:IOC)
Spring是一个开源的轻量级控制反转(IOC)和面向切面编程(AOP)的容器框架;底层原理:xml+dom4j+工厂设计模式+反射====================================================================IOC:Inverse of control,是一种思想,将对象的控制权(对象创建,销毁的过程)和依赖关系维护(字段赋值)交给Spring容器;在系统运行中,动态的向某个对象提供它所需要的其他对象;白话就是以前创建对象,是用到的时候自原创 2020-09-25 12:10:24 · 130 阅读 · 0 评论 -
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 · 105 阅读 · 0 评论 -
mapper.xml中的结果映射
域对象(就是domain下面的类)之间的关联关系:按照多重性可分为一对一、一对多、多对一和多对多,即数据库中的表之间的关系根据关联关系,所以以右为主,所以一对一、多对一的处理方式是一样的,一对多和多对多一样,而左边决定抽象方法的返回类型。举例:一个年级的班级信息表与学生信息表如果用一张表来存储的话,每条学生数据都有班级字段,并且都是写“xx班级”;但如果将学生信息和班级信息拆分,而学生表仍有班级Id字段,虽然看起来并没有什么区别,但是这样就会减少占用的存储空间,毕竟数字肯定是比"xx班级"的字节原创 2020-09-21 17:02:09 · 882 阅读 · 0 评论 -
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 · 534 阅读 · 0 评论 -
MyBatis(二:增强)
这篇文章主要写的是:Mapper.xml=OGNL表达式(#{})+动态SQL(标签)===========================================================OGNL:Object-Graph Navigation Language,表达式中有三种符号,分别是#(使用最多)、$(一般不用)和%(目前还没用过);作用就是取值先上代码 <select id="findOne" parameterType="long" resultType="Produ原创 2020-09-21 14:26:32 · 241 阅读 · 0 评论 -
Mybatis(一:初级)
MyBatis是一个半ORM的数据库持久化框架,底层还是JDBC,所以单用Mybatis时,事务需要手动提交历史扩展:它本是apache的一个开源项目iBatis,所以很多jar的名字还是iBatisORM:对象关系映射(Object Relational Mapping),一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术;操作数据库关系方式有很多种,常用的是这两种:1、半映射:把SQL写在配置文件中,通过不同SQL中完成对象实体和数据库关系相互转换的操作,如Mybatis2、完整映射原创 2020-09-20 12:01:55 · 1023 阅读 · 1 评论 -
MVC思想 & 三层架构
MVC是程序设计的一种思想,全名是Model(业务模型) View(页面视图) Controller(控制器)MVC职责(1)控制器C:整个过程中,控制器即要与前端界面交互,也要与后台Java代码(Model)进行交互,起到核心控制作用。Web 用户向服务器提交的所有请求都由控制器接管。接受到请求之后,控制器负责决定应该调用哪个模型来进行处理(根据用户请求进行相应的业务逻辑处理,并返回数据。最后控制器跳转到相应的视图并将数据呈现给用户)或直接跳转页面;(2)模型M:后台Java代码,包括业务代码、原创 2020-09-19 15:58:06 · 352 阅读 · 0 评论 -
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 · 141 阅读 · 0 评论 -
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 · 234 阅读 · 0 评论 -
页面静态化技术
什么叫页面静态化?使用FreeMaker技术(全称FreeMarker Template Language (FTL)),它是一款模板引擎: 即一种基于模板(.ftl)和要改变的数据(Map对象或Java实体 ,但是List集合不行,但是它们可以放到Map里)其实就是数据库中有很多条记录,它们的展示界面都差不多,就比如淘宝里的商品,只是信息不一样,但是展示页面都是一样的。然而每次用户访问时都要查询一次数据库,大量的访问增加了数据库的压力。所以为了减轻数据库的压力,就每次在添加或者修改商品的时候,在原创 2020-09-18 19:41:00 · 280 阅读 · 0 评论 -
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 · 145 阅读 · 0 评论 -
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 · 228 阅读 · 0 评论 -
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 · 370 阅读 · 0 评论 -
java反射机制
反射:其实就是通过类的全限定类名,获取该类的字节码文件,然后通过该字节码文件获取字段、构造方法、普通方法等信息那有什么意义呢?就是在某个类还没有设计好的时候,可以保证继续向后开发。但只是保证功能开发完成,是运行不了的,因为这个类里的某些字段,或构造方法,或普通方法还没写。而项目真正运行的时候,肯定所有的项目中的类都已经设计完毕,这时候,就可以保证代码正常运行了1、获取构造器,创建对象public class ReflectConstructor { public static void ma原创 2020-08-21 15:08:27 · 156 阅读 · 1 评论 -
23种设计模式
设计模式是是程序设计的高级思想,在框架中使用主要有:单例模式、装饰者模式、适配器模式、 简单工厂模式==================================================================一、单例模式设计一个类,这个类只能创建一个对象,即限制创建对象的数量步骤:1、私有化构造方法2、 在类中创建一个对象,并且用private、static、final修饰private为了避免在外部直接访问当前对象static是为了在静态方法中可以返回当前类中的对原创 2020-08-21 13:39:43 · 182 阅读 · 1 评论