
计算机笔记
文章平均质量分 77
记录计算机学习中的笔记
lilesien
这个作者很懒,什么都没留下…
展开
-
MySQL中幻读是如何解决的
在我们的数据库隔离级别中幻读的解决是在串行化的级别下进行处理的,虽然这种方法可以解决幻读,但是这种方法在高并发下效率是非常低的,经过学习了解到两种解决幻读的方法:加间隙锁和MVCC。加间隙锁间隙锁:将数据分为不同区间,对该区间进行加锁。作用在索引上,其目的是为了防止同一事物的两次当前读出现幻读的情况。如果对一条记录添加了间隙锁,并不会影响其他事务对这条记录加记录锁或者继续加gap锁。比如说我们有1,3,5,10,12这几条数据:在当前事务对5-9中的数据进行一次查询并添加间隙锁后,另一个事务想要在原创 2022-04-10 19:42:12 · 5448 阅读 · 4 评论 -
mysql索引知识
为什么要使用索引?对于一般的系统,读写的比例大概在10:1左右,而且插入操作和更新操作一般很少出现性能问题。容易出现问题的就是我们的复杂查询,一些复杂查询会大大降低我们系统的性能,而索引就是用来解决这个问题的。什么是索引?索引在mysql中也叫作一种“键”,是对数据库中一列或多列的值进行排序的一种结构,良好的索引对于性能的影响是至关重要的,尤其当数据量越来越大时,索引对于性能的影响愈发重要!索引的优化是提升查询性能优化最有效的手段,就相当于我们查询字典中的某个字,音序表会帮助我们快速定位到所要查找的字原创 2022-02-19 11:42:46 · 588 阅读 · 0 评论 -
静态代理和动态代理
静态代理与动态代理代理,顾名思义就是对象的行为被别人代为执行,举个例子:租房房东想要出售房屋,但是不想管理这里面复杂的步骤,就会有一个中间商来代理房东执行,当用户想要租房的时候,就会去找中间商来租房,由中间商来沟通房东对代理模式进行分析:抽象角色:一般是接口或者抽象类,比如这里的租房,具有相同的功能真实角色:被代理的角色,比如这里的房东代理角色:代理真实角色,在代理真实角色后可以做一些附加操作,比如这里的中介客户:访问代理对象静态代理就以房东出租房屋为例看一下静态代理的代码:租房原创 2022-02-15 23:48:40 · 810 阅读 · 0 评论 -
JVM中关于对象的一些知识点
对象在内存中的存储布局java中一个对象在创建好之后会包含对象头,实例数据,对齐填充,结构图如下:对象头对象头包括运行数据和类型指针,运行数据就是用来存储对象的hashcode,gc年龄和锁信息,运行数据也称为markword,类型指针就是指向当前类的class模板,表示是哪一个类的实例。另外对于数组来说,对象头中还要存储数组的长度对于这个markword,在32位系统的它是占4个字节的:在64位的系统中,对象头占16个字节,markword占8个字节,并且对应的类型指针也是8个字节,下面我们原创 2022-02-09 13:01:13 · 501 阅读 · 0 评论 -
Java线程池理解
线程池从名字行就可以理解为有很对个线程的一个池子,它负责对我们的线程进行管理,不需要我们在使用线程的时候频繁的创建和销毁。线程池的优点降低资源消耗:避免了线程频繁的创建和销毁带来的消耗提高响应速度:当任务到达的时候,不用再创建线程,可以由线程池中空闲的线程来执行提高线程的可管理性:如果线程无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以对线程进行统一的分配,监控和调优线程池的创建三大方法//一个线程池只有一个线程ExecutorService service = E原创 2022-01-25 14:04:07 · 267 阅读 · 0 评论 -
LRU算法与LFU算法
LRU算法LRU是Least Recently Used的缩写,即最近最少使用算法,是操作系统中页面置换算法的一种,由于内存中存放的页数有限,所以将最近没有使用到的算法会移出内存。LRU原理:LRU原理如下图所示:它会将最近访问的节点放在前面,将最近没有访问的节点放在后面。如果缓存空间满了,就会将最后一个节点删掉,并将新的节点添加到首部。Java实现对于链式存储的结构,使用到的集合有ArrayList和LinkedList,而ArrayList底层是基于数组的,对元素的移动花费的时间复杂度较高原创 2022-01-23 16:15:38 · 4329 阅读 · 0 评论 -
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 · 2110 阅读 · 0 评论 -
二分查找多种情况分析
首先二分查找主要分为三类,分别是:寻找一个数,寻找左侧边界,寻找右侧边界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 · 239 阅读 · 0 评论 -
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 · 716 阅读 · 0 评论 -
Sql学习笔记!
此文只用于记录我学习Sql过程中的学习笔记,以后可能还会更新!工具:MySql表:什么是表:一个表包括行和列。行被称为数据,列被称为字段。(字段可以参与算数运算)一个字段要求包括字段名,参数类型,相关约束。Sql的分类:DQL:查询语句(select)DML:对表中的数据进行增删改(insert,delete,update)DDL:对表结构增删改(create,Drop,Alter)TCL:事务控制(transaction)DCL:数据控制在数据库中,字符串要求用单原创 2021-04-04 17:05:20 · 152 阅读 · 0 评论 -
JDBC学习笔记!
JDBC:Java DataBase ConnectivityJDBC是sun公司制定的一套接口,目的是为了进行面向接口编程。因为每个数据库底层实现原理不一样,这就需要制定这样一套接口来连接各大数据库。为什么面向接口编程:解耦合。降低程序的耦合度,提高程序的扩展力。JDBC编程六步:第一步:注册驱动(告诉java程序,即将要连接哪个品牌的数据库)DriverManager.registerDriver(Driver driver);第二步:获取连接(表示JVM的进程和数据库进程之原创 2021-04-06 20:23:00 · 124 阅读 · 0 评论 -
蓝桥杯历届试题 :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 · 315 阅读 · 0 评论 -
LeetCode303. 区域和检索 - 数组不可变
题目描述:给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象int sumRange(int i, int j) 返回数组 nums 从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点(也就是 sum(nums[i], nums[i + 1], … , nums[j]))示例:思路:这道题可以使用前缀和的方法解决,通过使原创 2021-03-01 17:14:27 · 78 阅读 · 0 评论 -
LeetCode304. 二维区域和检索 - 矩阵不可变
题目:示例:代码思路:由于前一天做的是用前缀数组求一位数组的和,然后今天的是二维数组,所以第一步想到的是创建一个二维的前缀数组preSumclass NumMatrix { int[][] preSum; public NumMatrix(int[][] matrix) { int n = matrix.length; if(n > 0){ int m = matrix[0].length;原创 2021-03-02 22:20:57 · 119 阅读 · 0 评论 -
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 · 141 阅读 · 0 评论 -
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 · 210 阅读 · 0 评论 -
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 · 184 阅读 · 0 评论 -
Java Servlet学习笔记!
Srevlet是什么?Servlet是基于Java技术的Web组件,由容器管理并产生动态的内容。Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能。Servlet与客户端通过Servlet容器实现的请求/响应模型进行交互。Servlet的作用:当我们在使用一个交互式 的Web站点的时候,我们所浏览到的所有内容都应该是在浏览器中显示的。在这些场景背后,都会有一个Web服务器接收会话中来自于我们的请求,其中可能要切换到其他代码来处理该请求和访问数据,并生成在浏览器中显示的结果。Serv原创 2021-05-12 15:03:36 · 110 阅读 · 0 评论 -
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 · 272 阅读 · 0 评论 -
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 · 157 阅读 · 0 评论 -
HTTP相关问题总结
什么是HTTPHTTP:超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。HTTP长连接和短连接在HTTP/1.0阶段默认使用短连接,也就是说,客户端和服务器每进行一次操作,就建立一次链接,任务解说就中断连接。当客户端浏览器访问的某个HTML或其他类型的web页中包含有其他的原创 2021-10-30 16:00:22 · 252 阅读 · 0 评论 -
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 · 125 阅读 · 0 评论 -
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 · 124 阅读 · 0 评论 -
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 · 178 阅读 · 0 评论 -
springmvc学习!
什么是springmvc?MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在差异。Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行原创 2021-08-30 19:39:45 · 113 阅读 · 0 评论 -
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 · 583 阅读 · 0 评论 -
Mybatis学习笔记
什么是mybatis?从官方文档我们可以了解到,MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。也就是说,mybatis简化了我们对数据库操作的步骤,不用再像以前一样通过jdbc来操作数据库。第一个myb原创 2021-07-17 12:16:28 · 193 阅读 · 0 评论 -
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 · 495 阅读 · 0 评论 -
简单理解SpringBoot自动配置原理
SpringBootApplication注解首先在我们的主启动类上面有@SpringBootApplication注解@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}点进注解查看,可以看到@SpringBootAp原创 2022-01-12 12:22:46 · 263 阅读 · 0 评论 -
String常见问题
字符串常量池常见问题在研究问题之前,先了解一下字符串常量池字符串常量池对于编译期间可以确定值的字符串,也就是字符串常量池,JVM会将其放入字符串常量池。字符串常量池是JVM为了提高性能和减少内存消耗专门为字符串开辟的一块区域,主要目的是为了避免字符串的重复创建。JDK1.7之前字符串常量池存放在运行时常量池存放在方法区中,JDK1.7时字符串常量池从方法区拿到了堆中。问题研究我们先看下这段代码的执行结果:String str1 = "Str";String str2 = "ing";Stri原创 2021-11-08 22:27:25 · 241 阅读 · 0 评论 -
JVM简单总结
什么是JVM?JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM的位置JVM位于操作系统之上。JVM的体系结构栈,本地方法栈,程序计数器中没有垃圾回收,因为栈中的方法一用就会弹出去,如果栈中有垃圾,main方法就不会结束,程序就会陷死。所以垃圾回收都在方法区和堆的区域,并且大部分时间在进行堆优化。类加载器负责加载class文件,将class文原创 2021-09-05 17:10:24 · 183 阅读 · 0 评论 -
多线程实现以及一些问题
多线程笔记要实现多线程,主要是通过Thread类进行执行,具体有继承Thread类,实现Runnable接口,实现Callable接口(理解)其实在juc中我们都尽量不去继承Thread或者实现Runnable,Callable接口,都是通过线程调用一个资源类来实现多线程并发执行,这在juc中会学到如何使用继承Thread类//线程开启并不一定立即执行,由CPU调度执行public class TestThread1 extends Thread { @Override publi原创 2021-12-30 20:44:57 · 272 阅读 · 0 评论