- 博客(59)
- 收藏
- 关注
原创 MySQL中幻读是如何解决的
在我们的数据库隔离级别中幻读的解决是在串行化的级别下进行处理的,虽然这种方法可以解决幻读,但是这种方法在高并发下效率是非常低的,经过学习了解到两种解决幻读的方法:加间隙锁和MVCC。加间隙锁间隙锁:将数据分为不同区间,对该区间进行加锁。作用在索引上,其目的是为了防止同一事物的两次当前读出现幻读的情况。如果对一条记录添加了间隙锁,并不会影响其他事务对这条记录加记录锁或者继续加gap锁。比如说我们有1,3,5,10,12这几条数据:在当前事务对5-9中的数据进行一次查询并添加间隙锁后,另一个事务想要在
2022-04-10 19:42:12
5318
4
原创 mysql索引知识
为什么要使用索引?对于一般的系统,读写的比例大概在10:1左右,而且插入操作和更新操作一般很少出现性能问题。容易出现问题的就是我们的复杂查询,一些复杂查询会大大降低我们系统的性能,而索引就是用来解决这个问题的。什么是索引?索引在mysql中也叫作一种“键”,是对数据库中一列或多列的值进行排序的一种结构,良好的索引对于性能的影响是至关重要的,尤其当数据量越来越大时,索引对于性能的影响愈发重要!索引的优化是提升查询性能优化最有效的手段,就相当于我们查询字典中的某个字,音序表会帮助我们快速定位到所要查找的字
2022-02-19 11:42:46
519
原创 静态代理和动态代理
静态代理与动态代理代理,顾名思义就是对象的行为被别人代为执行,举个例子:租房房东想要出售房屋,但是不想管理这里面复杂的步骤,就会有一个中间商来代理房东执行,当用户想要租房的时候,就会去找中间商来租房,由中间商来沟通房东对代理模式进行分析:抽象角色:一般是接口或者抽象类,比如这里的租房,具有相同的功能真实角色:被代理的角色,比如这里的房东代理角色:代理真实角色,在代理真实角色后可以做一些附加操作,比如这里的中介客户:访问代理对象静态代理就以房东出租房屋为例看一下静态代理的代码:租房
2022-02-15 23:48:40
683
原创 JVM中关于对象的一些知识点
对象在内存中的存储布局java中一个对象在创建好之后会包含对象头,实例数据,对齐填充,结构图如下:对象头对象头包括运行数据和类型指针,运行数据就是用来存储对象的hashcode,gc年龄和锁信息,运行数据也称为markword,类型指针就是指向当前类的class模板,表示是哪一个类的实例。另外对于数组来说,对象头中还要存储数组的长度对于这个markword,在32位系统的它是占4个字节的:在64位的系统中,对象头占16个字节,markword占8个字节,并且对应的类型指针也是8个字节,下面我们
2022-02-09 13:01:13
433
原创 Java线程池理解
线程池从名字行就可以理解为有很对个线程的一个池子,它负责对我们的线程进行管理,不需要我们在使用线程的时候频繁的创建和销毁。线程池的优点降低资源消耗:避免了线程频繁的创建和销毁带来的消耗提高响应速度:当任务到达的时候,不用再创建线程,可以由线程池中空闲的线程来执行提高线程的可管理性:如果线程无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以对线程进行统一的分配,监控和调优线程池的创建三大方法//一个线程池只有一个线程ExecutorService service = E
2022-01-25 14:04:07
225
原创 LRU算法与LFU算法
LRU算法LRU是Least Recently Used的缩写,即最近最少使用算法,是操作系统中页面置换算法的一种,由于内存中存放的页数有限,所以将最近没有使用到的算法会移出内存。LRU原理:LRU原理如下图所示:它会将最近访问的节点放在前面,将最近没有访问的节点放在后面。如果缓存空间满了,就会将最后一个节点删掉,并将新的节点添加到首部。Java实现对于链式存储的结构,使用到的集合有ArrayList和LinkedList,而ArrayList底层是基于数组的,对元素的移动花费的时间复杂度较高
2022-01-23 16:15:38
4162
原创 mysql数据库中字段为空带来的影响
count数据丢失我们都知道,count是用来计数的,当表中某个字段存在null值时,就会造成count计算出来的数据丢失。比如表中name子段有空值,我们使用select count(*),count(name) from user;查询出来的结果是不同的。解决办法:如果某列存在null值,就使用count(*)或者count(id)进行统计。在阿里巴巴《Java开发手册》中规定:不要使用count(列名)或count(常量)来代替count()。distinct数据丢失当使用语句count(d
2022-01-22 19:01:24
1942
原创 二分查找多种情况分析
首先二分查找主要分为三类,分别是:寻找一个数,寻找左侧边界,寻找右侧边界public class Test { public static void main(String[] args) { int[] nums = {1, 2, 2, 2, 3}; System.out.println(binarySearchLeftBound(nums, 3)); } /** * 普通的二分查找,搜索边界为[left, right] *
2022-01-20 13:47:19
211
原创 juc并发学习笔记
JUC什么是JUC?JUC就是java包中java.uril.concurrent的包以及它的子类。我们以前学的Callable接口就是这个包下的一个接口线程和进程进程:一个程序,就比如QQ.exe,Music.exe ,一个进程通常包含多个线程,至少包含一个线程:程序执行的最小单位,Java中默认有两个线程,分别是Main线程和GC线程java真的可以自己开启线程吗?public synchronized void start() { /** * This method i
2022-01-13 17:05:53
667
原创 Redis简单笔记
Redis什么是Redis?Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI (C语言)编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis特点Redis以内存作为存储介质,读写数据的效率高由于存储在内存中的数据是断电即失,而储存在Redis中的数据是持久化的,断点或重启数据也不会丢失,与memcache是不同的Redis存储分为内存存储,磁盘存储和日志文件Redis支持主
2022-01-12 20:04:37
948
原创 简单理解SpringBoot自动配置原理
SpringBootApplication注解首先在我们的主启动类上面有@SpringBootApplication注解@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}点进注解查看,可以看到@SpringBootAp
2022-01-12 12:22:46
235
原创 多线程实现以及一些问题
多线程笔记要实现多线程,主要是通过Thread类进行执行,具体有继承Thread类,实现Runnable接口,实现Callable接口(理解)其实在juc中我们都尽量不去继承Thread或者实现Runnable,Callable接口,都是通过线程调用一个资源类来实现多线程并发执行,这在juc中会学到如何使用继承Thread类//线程开启并不一定立即执行,由CPU调度执行public class TestThread1 extends Thread { @Override publi
2021-12-30 20:44:57
243
原创 Swagger学习记录
SwaggerSwagger简介官网:https://swagger.io/在项目中使用swagger需要springfoxswagger2swaggeruiSpringboot继承Swagger新建一个springboot-web项目导入相关依赖<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --><dependency> <gro
2021-11-15 21:09:17
553
原创 String常见问题
字符串常量池常见问题在研究问题之前,先了解一下字符串常量池字符串常量池对于编译期间可以确定值的字符串,也就是字符串常量池,JVM会将其放入字符串常量池。字符串常量池是JVM为了提高性能和减少内存消耗专门为字符串开辟的一块区域,主要目的是为了避免字符串的重复创建。JDK1.7之前字符串常量池存放在运行时常量池存放在方法区中,JDK1.7时字符串常量池从方法区拿到了堆中。问题研究我们先看下这段代码的执行结果:String str1 = "Str";String str2 = "ing";Stri
2021-11-08 22:27:25
195
原创 HTTP相关问题总结
什么是HTTPHTTP:超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。HTTP长连接和短连接在HTTP/1.0阶段默认使用短连接,也就是说,客户端和服务器每进行一次操作,就建立一次链接,任务解说就中断连接。当客户端浏览器访问的某个HTML或其他类型的web页中包含有其他的
2021-10-30 16:00:22
225
原创 springboot整合数据库相关操作
springboot整合JDBC创建项目,勾选依赖:至少要勾选jdbc和mysql Driver配置数据库文件,也就是连接数据库的必要参数spring: datasource: url: mysql 8 以上要添加时区参数,否则会报错 username: password: driver-class-name: springboot中有很多的XXX Template,我们拿来即用就行配置完之后首先要查看手否配置正确,简单测试一下即可@Rest
2021-10-11 11:09:17
453
原创 JVM简单总结
什么是JVM?JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM的位置JVM位于操作系统之上。JVM的体系结构栈,本地方法栈,程序计数器中没有垃圾回收,因为栈中的方法一用就会弹出去,如果栈中有垃圾,main方法就不会结束,程序就会陷死。所以垃圾回收都在方法区和堆的区域,并且大部分时间在进行堆优化。类加载器负责加载class文件,将class文
2021-09-05 17:10:24
143
原创 JSTL简单总结
什么是JSTL?JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。JSTL标签库使用步骤:引入对应的taglib标签库使用其中的方法JSTL核心库使用<c
2021-08-31 18:58:19
240
原创 jsp总结
什么是jsp?jsp的全程是java server page,即java的服务器界面jsp的主要作用是代替servlet程序回传好HTML页面的数据jsp本质是一个servlet程序,第一次访问jsp页面,tomcat会将jsp页面翻译为一个java文件,并对其进行编译生成一个字节码文件。打开源文件会发现:向上查看会发现,HtpJspBase继承HttpServlet类,证明jsp是一个Servlet程序。jsp中的常用脚本表达式脚本格式:<%=你要展现在网页上的内容%>
2021-08-31 09:50:55
145
原创 springmvc学习!
什么是springmvc?MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在差异。Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行
2021-08-30 19:39:45
95
原创 spring简单整合mybatis笔记
在整合spring与mybatis之前先看一下spring与mybaits都是什么吧。spring: 什么是spring?Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业
2021-08-09 18:47:44
104
原创 Mybatis学习笔记
什么是mybatis?从官方文档我们可以了解到,MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。也就是说,mybatis简化了我们对数据库操作的步骤,不用再像以前一样通过jdbc来操作数据库。第一个myb
2021-07-17 12:16:28
177
原创 Spring及JdbcTemplate操作
什么是JdbcTemplate?Spring对Jdbc进行封装,方便对数据库进行操作。准备工作①:引入jar包②:在spring配置文件中配置数据库连接池,也就是配置数据库的url,username,password,driverClassName③:配置JdbcTemplate对象,将数据库的信息注入JdbcTemplate对象④:创建service类,dao类。在对数据库进行操作之前,要对应数据库创建实体类这是User类public class User { privat
2021-05-29 10:12:32
136
原创 Spring5即AOP操作笔记
○ MyLog代码: public class MyLog { public void before(){ System.out.println("前置通知"); } public void after(){ System.out.println("后置通知"); } } ○ xml配置: <bean id="myLog" class="com.study.log.MyLog"/>
2021-05-28 09:01:02
100
原创 Spring及IOC容器学习笔记!
spring是什么?简单来说,spring是一个轻量级的开源的javaEE框架,用来解决企业开发过程中的复杂性。spring有两个核心:IOC和AOP。IOC:控制反转:把创建对象的过程以及调用的过程交给spring管理。AOP:面向切面:不修改源代码的情况下进行功能增强。spring特点:①:方便解耦,简化开发②:Aop编程支持③:方便程序测试④:方便与其他框架结合⑤:方便事务操作⑥:降低API开发的难度初次使用步骤:①:加载配置文件。②:获取配置创建的对象。IOC容器
2021-05-23 16:00:39
170
原创 Filter学习笔记!
当我们访问一个资源的时候,这个资源可以是html页面,jsp页面,图片,mp4等资源,如果我们访问html之类时候,我们可以在html中写上过滤的代码,但是图片写不了代码,这就需要我们来实现Filter接口对访问路径进行过滤。Filter是什么?1.Filter过滤器是JavaWeb的三大组件之一(Servlet程序,Filter过滤器,Listener监听器)2.Filter过滤器是JavaEE的规范,也就是接口。3.Filter过滤器它的作用是拦截请求,过滤响应注:Filter过滤器在浏览器访
2021-05-18 14:01:12
179
原创 Cookie笔记!
cookie是什么:cookie是服务器通知客户端保存键值对的一种技术。客户端有了cookie之后,每次请求都发送给服务器。每个cookie的大小不超过4kb。Cookie的创建与保存cookie是一个键值对,包含key值与value。cookie在创建后通常以resp.addCookie(cookie)的形式保存到客户端。Cookie的获取与修改通过req.getCookies()获取cookie数组Cookie的修改: 如果要对指定的cookie值进行修改,可以创建一个key值相同的co
2021-05-13 20:39:13
109
原创 jQuery学习笔记!
什么是jQuery?JQuery即javaScript 和查询(Query),是辅助javaScript开发的js类库。核心思想:写的更少,做的更多jQuery如何而使用:$(function(){ //相当于winod.onload = function表示页面加载完毕 var $jqobj = $("#id"); // 表示按id查找对象 $jqobj.click(function(){ //给按钮绑定单击事件 //执行函数操作 });});注意:$是jQuery中的核心函数,
2021-05-13 14:13:47
113
原创 Java Servlet学习笔记!
Srevlet是什么?Servlet是基于Java技术的Web组件,由容器管理并产生动态的内容。Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能。Servlet与客户端通过Servlet容器实现的请求/响应模型进行交互。Servlet的作用:当我们在使用一个交互式 的Web站点的时候,我们所浏览到的所有内容都应该是在浏览器中显示的。在这些场景背后,都会有一个Web服务器接收会话中来自于我们的请求,其中可能要切换到其他代码来处理该请求和访问数据,并生成在浏览器中显示的结果。Serv
2021-05-12 15:03:36
81
原创 关于求图的最短路径的算法:普利姆算法,迪鲁斯卡尔算法,弗洛伊德算法,贝尔曼福特算法!!!
本篇用于记录我在做图的最短路径的问题过程中学到的算法,如果有不足之处,还请指出。关于图的最短路径,有四种算法,分别是普利姆算法,迪鲁斯卡尔算法,弗洛伊德算法和贝尔曼福特算法,接下来将对这些算法依次进行讲解。1.普利姆算法...
2021-05-02 15:31:49
1275
原创 LeetCode91:解码方法
问题描述:一条包含字母 A-Z 的消息通过以下映射进行了 编码 :‘A’ -> 1‘B’ -> 2…‘Z’ -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“11106” 可以映射为:“AAJF” ,将消息分组为 (1 1 10 6)“KJF” ,将消息分组为 (11 10 6)注意,消息不能分组为 (1 11 06) ,因为 “06” 不能映射为 “F” ,这是由于 “6” 和 “06” 在映射中并不等价。给
2021-04-21 19:54:01
89
原创 LeetCode11:盛最多水的容器
问题描述:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。示例:其实这道题的最优解法是使用双指针,但是我第一次拿到这道题的时候并没有想到要使用使用双指针,只是想着找到每个点的最大存水量。接下来是我个人的做题思想,可以忽略。想要找到一个点的最大存水量,就要从最右边开始找,如果最右边的数大于当前的数,即就是
2021-04-17 21:01:29
59
原创 LeetCode打家劫舍问题!
LeetCode打家劫舍问题是一道经典的动态规划问题,接下来我将我解这道题的过程记录下来(实际上是参考了网上的思路),也算是我对这道题的笔记,希望对各位有所帮助。打家劫舍I问题描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。输入示例:输入:[1,2,
2021-04-15 20:04:41
114
原创 LeetCode783:二叉搜索树节点最小距离
今天的题是一道简单题,当我第一眼看上去会得无从下手,但是仔细观察过后,发现这道题的规律很明显,下面,让我们来看看吧。问题描述:给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。示例:思路:题目中很明显的说了,这道题是一个二叉搜索树,既然要找最小差值,那么肯定是排序后的左右节点离这个数最近了,最小差值肯定在这两个之间。又由于这是一个二叉搜索树,左小右大,先左后中再右,这不就是中序遍历吗,左中右,既然是中序排序,那么定义三个变量,pre(前一个节点),cur(现在
2021-04-13 20:28:28
69
原创 JDBC学习笔记!
JDBC:Java DataBase ConnectivityJDBC是sun公司制定的一套接口,目的是为了进行面向接口编程。因为每个数据库底层实现原理不一样,这就需要制定这样一套接口来连接各大数据库。为什么面向接口编程:解耦合。降低程序的耦合度,提高程序的扩展力。JDBC编程六步:第一步:注册驱动(告诉java程序,即将要连接哪个品牌的数据库)DriverManager.registerDriver(Driver driver);第二步:获取连接(表示JVM的进程和数据库进程之
2021-04-06 20:23:00
101
原创 Sql学习笔记!
此文只用于记录我学习Sql过程中的学习笔记,以后可能还会更新!工具:MySql表:什么是表:一个表包括行和列。行被称为数据,列被称为字段。(字段可以参与算数运算)一个字段要求包括字段名,参数类型,相关约束。Sql的分类:DQL:查询语句(select)DML:对表中的数据进行增删改(insert,delete,update)DDL:对表结构增删改(create,Drop,Alter)TCL:事务控制(transaction)DCL:数据控制在数据库中,字符串要求用单
2021-04-04 17:05:20
134
原创 蓝桥杯 历届试题 递增三元组
问题描述:给定三个整数数组A=[A1,A2,…AN],B=[B1,B2,…BN],C=[C1,C2,…CN],请你统计有多少个三元组 (i,j,k) 满足:1≤i,j,k≤NAi<Bj<Ck输入格式:输入格式第一行包含一个整数 N。第二行包含 N 个整数 A1,A2,…AN。第三行包含 N 个整数 B1,B2,…BN。第四行包含 N 个整数 C1,C2,…CN。思路:由于A数组要比B数组小,B数组要比C数组小,所以对A,B,C数组进行排序,对排完序后的数组B
2021-03-31 21:16:32
162
原创 LeetCode1641. 统计字典序元音字符串的数目
问题描述:给你一个整数 n,请返回长度为 n 、仅由元音 (a, e, i, o, u) 组成且按 字典序排列 的字符串数量。字符串 s 按 字典序排列 需要满足:对于所有有效的 i,s[i] 在字母表中的位置总是与 s[i+1] 相同或在 s[i+1] 之前。示例:输入:n = 2输出:15解释:仅由元音组成的 15 个字典序字符串为[“aa”,“ae”,“ai”,“ao”,“au”,“ee”,“ei”,“eo”,“eu”,“ii”,“io”,“iu”,“oo”,“ou”,“uu”]
2021-03-30 20:00:47
219
原创 蓝桥杯历届试题:合根植物
问题描述:w星球的一个种植园,被分成 m * n 个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。 这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成为一体。 如果我们告诉你哪些小格子间出现了连根现象,你能说出这个园中一共有多少株合根植物吗?输入格式:第一行,两个整数m,n,用空格分开,表示格子的行数、列数(1<m,n<1000)。 接下来一行,一个整数k,表示下面还有k行数据(0<k<100000) 接下来k
2021-03-25 19:49:14
206
原创 蓝桥杯历届试题 :k倍区间
问题描述:给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。你能求出数列中总共有多少个K倍区间吗?输入格式:第一行包含两个整数N和K。(1 <= N, K <= 100000)以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)输出格式:输出一个整数,代表K倍区间的数目。思路:首先因为这道题给的最大数据范围是
2021-03-23 19:28:38
295
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人