- 博客(67)
- 收藏
- 关注
原创 计算机操作系统原理期末总复习
1、现代操作系统的四个特征是什么?(4分)并发、共享、虚拟、异步并发 :两个或多个事件在同一时间间隔内发生。共享 :内存中多个并发执行的进程共同使用系统中的资源。2、操作系统内核的四个主要功能是什么?(4分)内存管理、进程管理、设备管理、文件管理3、为什么多道程序系统的平均周转时间比单道程序系统的平均周转时间长?(1分)存在CPU等待的时间4、分时系统与人机交互相关的一个重要性能指标是什么?(1分)响应时间5、衡量实时系统是否满足时间性能要求的两个主要指标是什么?(2分)
2023-09-05 22:44:56
419
原创 【问题】‘git‘ is not recognized as an internal or external command, operable program or batch file.
如果未安装"git",则需要安装git,安装时选择"从Windows命令提示符使用Git"选项.您需要关闭命令提示符并再次打开.Git命令现在应该可以工作了!
2023-06-21 23:21:51
1674
原创 项目中的Echarts图表统计
1、导入echarts2、原始的option代码3、修改目录:折线:横坐标:纵坐标:series(与相应折线legend对应)4、定义echart图标对应的dom元素html5、定义echarts容器js6、根据时间范围加载最新的数据htmljs二、后端(SpringBoot+MyBatis)1、请求接口2、返回前端的数据
2023-06-07 21:27:12
971
原创 【SpringBoot+MyBatis】项目的Invalid bound statement (not found)错误
则表示在类路径下的 mapper 目录中查找所有后缀为 .xml 的文件,并将其作为 Mapper XML 文件使用。通常情况下,Mapper XML 文件都会放在单独的目录中,以便进行管理和维护。这段代码是 MyBatis 的配置文件中的一个标签,用于指定 Mapper XML 文件的位置。表示从类路径下开始查找,而。
2023-06-06 23:43:47
422
原创 AOP日志功能实现
在需要实现日志功能的方法上添加注解@LogAnnotation(module为名字,operator为方法的操作名称)@LogAnnotation(module = "用户" , operator = "获取用户列表")
2023-05-29 21:07:26
2339
原创 为何使用 B+ 树而非二叉查找树或 B 树做索引?
而 B+ 树只在叶子结点存储数据,非叶子结点存储关键字,且不同非叶子结点的关键字可能重复,因此查询数据时,时间复杂度固定为 O(log n)。文件系统需要从磁盘读取数据时,一般以页为单位进行读取,假设一个页内的数据过少,那么操作系统就需要读取更多的页,涉及磁盘随机 I/O 访问的次数就更多。由于索引文件很大因此索引文件存储在磁盘上,B+ 树的非叶子结点只存关键字不存数据,因而单个页可以存储更多的关键字,即一次性读入内存的需要查找的关键字也就越多,磁盘的随机 I/O 读取次数相对就减少了。
2023-05-12 13:08:55
607
原创 MySQL的最左匹配原则
这个原则的实际含义是:当我们查询的条件包含多个字段时,如果建立了多列组合索引,那么 MySQL 只会使用该索引中最左边的列作为索引键,从而定位到第一个匹配的行,然后再逐个匹配剩余条件。因此,如果不按照索引建立顺序来定义 WHERE 子句,那么 MySQL 将无法利用多列索引,而需要进行全表扫描,对性能将产生很大的影响。具体来说,如果有一个由 (a,b,c) 组成的复合索引,则在查询时必须先使用 a 进行过滤,然后才能使用 b 或 c 进行过滤,即使 b 或 c 也属于索引的一部分。
2023-05-11 09:59:36
620
原创 MySQL的事务特性、事务特性保证和事务隔离级别
如果出现任何问题导致事务失败,则必须回滚事务并撤销所有更改,以确保数据库状态与开始事务之前的状态一致。这意味着,在事务执行期间,如果出现任何错误,则必须回滚所有对数据库的更改以确保其状态的一致性。:最低级别的事务隔离级别,允许一个事务中的修改可以被另外一个未提交的事务所读取。:这种隔离级别保证同一事务内多次读取同样的数据时,它们所读取的内容总是一致的。事务是指要么所有的操作都成功执行,要么所有的操作都不执行的一组数据库操作。:一个事务中的所有操作要么全部提交成功,要么全部回滚失败,保证事务的原子性。
2023-05-09 20:08:41
562
原创 MyIsAm和InnoDB的区别
但 InnoDB 是聚集索引(聚簇索引),而 MyISAM 是非聚集索引(非聚簇索引)。(聚簇索引是指按照表主键创建的索引,非聚簇索引则不是按照主键创建的索引。InnoDB支持事务(Transaction),具有提交(Commit)、回滚(Rollback)和崩溃恢复(Crash Recovery)等特性,适合处理大量数据的插入、删除和修改操作。MyISAM通常需要较少的磁盘空间,因为它将索引和数据分开存储。的过程(先去辅助索引中查询数据,找到数据对应的key之后,再通过key回表到聚簇索引树查找数据))
2023-05-09 12:13:07
475
原创 MySQL常见的存储引擎
文件:xxx.ibd: xxx代表的是表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引参数: innodb_file_per_table。:是早期MySQL使用的非事务型存储引擎,没有提供类似于InnoDB的事务功能,但有支持全文索引和压缩等功能。:InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL 5.5之后,InnoDB是默认的MySQL存储引擎。:全部存储在内存中的存储引擎,可以快速地进行读写操作,但会受到内存限制。
2023-05-08 23:20:49
741
原创 常见的数据库操作语言DDL、DML、DQL和DCL
DDL(数据定义语言),DML(数据操作语言),DQL(数据查询语言)和DCL(数据控制语言)是SQL(结构化查询语言)中的四种子类。DDL、DML、DQL和DCL是常见的数据库操作语言,分别代表数据定义语言、数据操纵语言、数据查询语言和数据控制语言。总之,DDL、DML、DQL和DCL都是数据库操作语言的重要组成部分。用于在数据库中创建、修改或删除表、视图、索引、序列等对象。常见的DDL命令有CREATE、ALTER和DROP等。用于在数据库中对表进行插入、更新、删除等操作。用于从数据库中查询数据。
2023-05-07 00:03:41
2015
原创 Spring boot 常用注解
GetMapping("")、@PostMapping("")、@PutMapping("")、@DeleteMapping("/{userId}"):分别对应HTTP的GET、POST、PUT、DELETE请求方法,将它们绑定到UserController中的相应方法上,其中@DeleteMapping还使用了@PathVariable注解来获取请求参数中的userId值。@RequestMapping("/users"):将"/users"路径映射到UserController类上。
2023-05-06 23:28:22
538
原创 Spring Beans的理解
因此,总体而言,在Spring Boot中使用`@Component`和使用其他专属的注解效果相同,主要取决于个人的编程习惯和习惯。上述代码中,`UserDao`和`UserService`都使用了`@Component`注解标识其为Spring Bean,并且在`UserService`中使用了`@Autowired`注解实现了`UserDao`的依赖注入。另外,我们还可以使用`@Configuration`和`@Bean`注解来定义Java Config类型的配置类和其中的bean。
2023-05-06 17:15:31
832
原创 简单的例子来理解Spring Aop的基本概念
(4)`aop:around`元素则将该切面的拦截动作设置为"环绕通知",将前置、后置通知(切面操作)和目标方法合并在一个方法体中,并控制是否执行目标方法或直接返回结果,同时在合适的时候添加新的流程处理。其中第一行表示启用注解扫描,并设置扫描包路径为`com.example`,第二行则表示启用AspectJ注解的AOP自动代理机制,第三行定义的是之前实现的日志切面`LogAspect`类的Bean。(2)在`aop:config`标签内声明了一个aspect(切面),引用了声明好的`logAspect`。
2023-05-06 16:29:17
627
原创 Spring事务的传播行为
假设我们有一个Service类包含了两个方法:methodA()和methodB(),其中methodA()需要开启一个事务,如果methodB()内部发生了异常,则整个事务需要回滚。然而,在复杂的应用程序中,可能会涉及到多个事务操作嵌套在一起,这就需要我们考虑事务的传播行为。否则,方法将开启一个新的事务运行,并在自己的事务内执行。:方法支持当前事务,也就是说,如果当前存在一个事务,就在该事务的上下文中执行方法;:方法不支持事务,如果有一个存在的事务,将被挂起,在方法执行期间,不会使用该事务上下文。
2023-05-06 15:58:17
750
原创 Spring事物的隔离级别
比如,当需要避免并发访问时出现幻读等问题时,就应该使用SERIALIZABLE隔离级别(即最严格的隔离级别);在Spring中,事务的隔离级别指的是一个事务在与其他事务隔离的程度。:该隔离级别下,所有事务依次执行,就像串行执行一样。:该隔离级别下,事务执行期间可以多次读取同一记录,并保证得到的结果是一致的。:该隔离级别下,事务只能读取已经提交的数据,可以避免脏读问题,但仍可能出现不可重复读和幻读问题。:该隔离级别下,事务可以读取其他事务尚未提交的数据,会出现脏读、不可重复读和幻读等问题。
2023-05-06 15:33:20
861
原创 Spring事务失效场景
注解标记的方法A中调用了另外一个没被事务管理的方法B并在B中发生异常,就会导致整个事务失效,并不会出现回滚。原因在于,Spring事务实现是通过生成代理对象并对应用程序进行拦截来实现的,而内部调用的方法不通过代理对象的方式调用,因此不会触发事务机制。当一个事务方法抛出异常时,如果异常被捕捉住(try/catch块中),那么Spring就无法获取到异常信息,并且整个事务也就无法回滚。如果一个被注解的类不是由Spring容器来创建的,比如手动new对象,那么该类的事务注解则不会生效。属性来改变这种默认的行为。
2023-05-05 12:56:53
890
1
原创 Spring的事务原理
当调用转账方法时,Spring会对其进行拦截并开启一个新事务,如果整个过程没有发生异常,则提交事务。事务的原理:当一个方法加上@Transactional注解,spring会基于这个类生成一个代理对象并将这个代理对象作为bean,当使用这个bean中的方法时,如果存在@Transactional注解,就会将事务自动提交设为false,然后执行方法,执行过程没有异常则提交,有异常则回滚。声明式事务的优点:不需要编程,减少了代码的耦合,在配置文件中配置并在目。一致性:事务执行的前后,数据完整性保持一致。
2023-05-05 12:34:38
471
原创 Spring、SpringMvc、SpringBoot的区别
3、由于Spring的配置非常复杂,各种XML、JavaConfig、servlet处理起来比较繁琐,为了简化开发者的使用,从而创造性地推出了springBoot框架,默认优于配置,简化了springMvc的配置流程;但他们的基础都是Spring的Ioc、Aop等。2、springBoot框架相对于springMvc框架来说,更专注于开发微服务后台接口,不开发前端视图,同时遵循默认优于配置,简化了插件配置流程,不需要配置xml,相对springmvc,大大简化了配置流程。
2023-04-25 21:27:12
247
原创 Spring的优势
MyBatis是另一个开源的ORM框架,它通过将SQL语句和Java代码分离,在代码层面上实现了数据访问层与业务逻辑层的分离,从而简化了系统设计。2、Spring框架之外还存在一个构建在核心框架之上的庞大生态圈,它将Spring扩展到不同的领域,如Web服务、REST、移动开发以及NoSQL。8、Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。7、Spring的ORM和DAO提供了与第三方持久层框架的的良好整合,并简化了底层的数据库访问。
2023-04-25 20:55:26
446
原创 Spring的核心
是实现的方式)将之前程序中需要手动创建对象的操作,交由 Spring 框架来实现,创建对象的操作被反转到了 Spring 框架。对象的生命周期由 Spring 来管理,直接从 Spring 那里去获取一个对象。Spring 框架创建 Bean 对象时,动态的将依赖对象注入到 Bean 组件中,实现依赖对象的注入。容器:包含并管理应用对象的生命周期,就好比用桶装水,spring就是桶,而对象就是水。spring是为了简化企业开发而生的,使得开发变得更加优雅和简洁。(IOC控制反转是实现的思想,
2023-04-24 22:00:06
422
原创 简单的例子来理解Spring IoC的基本概念
在应用程序启动时,Spring会自动创建这些bean,并将它们注入到其它需要的对象中,从而构建出完整的对象图谱。这些操作都是由Spring IoC框架所控制的,我们不必亲自去关心对象的创建和依赖的处理,大大提高了代码的可维护性和可扩展性。在这个例子中,我们使用Spring的IoC容器来管理Person和Address对象。我们通过XML配置文件定义这些对象(称为bean),并告诉Spring如何将它们组合起来创建一个Person实例。
2023-04-24 21:51:49
66
原创 八股文之HashMap原理
(2)如果这个位置有值,先进性equals比较,若结果为true则取代该元素,若结果为false,就使用高低位平移法将节点插入链表(JDK8以前使用头插法,但是头插法在并发扩容时可能会造成环形链表或数据丢失,而高低位平移发会发生数据覆盖的情况)HashMap的默认容量为16,默认的负载因子为0.75,当HashMap中元素个数超过容量乘以负载因子的个数时,就创建一个大小为前一次两倍的新数组,再将原来数组中的数据复制到新数组中。当数组长度到达64且链表长度大于8时,链表转为红黑树。
2023-04-22 14:11:44
73
原创 八股文之接口和抽象类的区别
(3)抽象类中的成员属性可以是各种类型的,接口的成员属性只能是 public static final 类型的,并且必须赋值(这个赋值是在声明变量时进行的,而不是在接口的构造方法中进行的)(4)定义关键字不同,接口使用关键字 interface 来定义,抽象类使用关键字 abstract 来定义。(1)抽象类可以包含普通方法和代码块,接口里只能包含抽象方法,静态方法和默认方法,(2)实现接口或继承抽象类的普通子类都必须实现这些抽象方法。(2)抽象类可以有构造方法,而接口没有。(1)接口和抽象类都。
2023-04-21 23:45:25
66
原创 八股文之多态的作用
这样,我们就可以通过一个Shape类型的变量r、c、t动态地调用它所关联的Rectangle、Circle、Triangle对应的getArea方法,分别计算出不同图形的面积。这样做,代码看起来更加简洁清晰,扩展性也更好,而且减少了重复的代码,提高了代码的可读性。可替代性:使用多态使得同样的操作可以被不同类型的对象所执行,这也就提高了代码的可替代性。简化代码:使用多态能够减少代码量,因为需要写的代码更少,而且代码更加简洁、清晰。代码可读性:使用多态可以降低代码的复杂性,提高代码的可读性。
2023-04-20 19:28:54
179
原创 八股文之面向对象和面向过程的区别
相比之下,面向过程的编程思想简单直接,更适合偏向于计算机底层的操作。但随着软件开发需求的不断增加,面向对象的编程思想因其更好的复用、扩展和维护性,越来越受到人们的青睐。,将程序设计成由一些相互独立的对象组成的集合,每个对象都包含数据以及对数据的操作,即方法。面向对象(Object-Oriented)和面向过程(Procedural)是两种不同的编程思想。:同一种类型的对象可以执行多种不同的操作,从而提高代码的灵活性和可扩展性。:将数据和操作数据的方法封装在一起,以便实现信息隐藏和保护数据的安全性。
2023-04-19 11:54:51
356
原创 关于异步的理解
future.thenAccept()方法则是使用回调函数的方式,在异步任务完成后通知主线程执行处理。但是如果使用异步方式,先发起下载请求,然后继续渲染页面,当图片下载完成后再来更新图片位置即可,使得用户不会感到卡顿。通常使用异步任务提交给线程池或单独的线程来处理,主线程则不阻塞地继续执行后续代码,等异步任务完成后再通过回调或Future返回结果或通知主线程进行处理。异步是指在程序执行过程中,不需要等待某个任务的完成,而是在发出该任务后继续执行后面的代码,等任务完成后再回来处理该任务的结果。
2023-04-16 13:19:08
1021
原创 八股文之sleep和wait方法的区别
在以上示例代码中,SleepDemo类使用sleep()方法暂停了当前线程一段时间,WaitDemo类使用wait()方法来进行线程间的通信。3、 锁的持有:sleep()方法不会释放锁,即使当前线程持有某个对象的锁,调用该对象的sleep()方法也不会导致这个锁被释放掉。4、异常处理:sleep()方法会休眠指定时间后自动恢复执行,而wait()方法最好要结合notify()或notifyAll()使用,否则可能会因为死锁、饿死等问题一直处于等待状态。
2023-04-16 13:12:22
59
原创 八股文之Java中的线程状态、实现方式、停止方式
2. 可能导致死锁:如果一个线程占用了某一资源,在该线程被stop()方法强制停止时,该线程持有的锁可能会永远不会被释放,导致其他线程永久等待。调用interrupt()方法会将中断标志位设置为true,线程需要主动处理中断标志位,当中断标志位为true时,线程自行退出运行。1. 无法保证线程安全退出:stop()方法会随机终止线程,因此有可能在一个关键点上终止线程,导致数据不一致。线程调用了wait()、join()等方法,进入到该状态,表示线程需要等待其他线程的通知或者状态改变。
2023-04-16 12:57:49
74
原创 八股文之什么是反射
在上面的代码中,我们首先通过`Person.class`来获取`Person`类的`Class`对象,然后使用`getDeclaredField()`方法来获取`name`属性的`Field`对象,并使用`getDeclaredMethod()`方法来获取`sayHello()`方法。简单来说,就是通过调用Java API中的一些特定的方法,来查看、修改类的属性和方法,而不需要直接使用该类的代码。总之,反射提供了一种动态获取和操作类的成员变量和方法的方式,可以极大地扩展Java语言的能力。
2023-04-16 10:42:59
83
原创 八股文之深拷贝和浅拷贝
在上面的例子中,我们把`person1`和`person2`都设置成`Person(18, "Alice")`,然后通过浅拷贝将`age`和`name`的值复制到了`person2`中。需要注意的是,在使用Java自带的浅拷贝方法`clone()`时,其中包含的引用类型数据会被复制其引用地址而非数据本身,因此需要特别注意在使用`clone()`方法进行拷贝时处理好有引用类型的数据。在上面的例子中,我们通过在`Person`类中实现`Cloneable`接口并重写其`clone()`方法来实现深拷贝。
2023-04-16 10:30:29
44
原创 引用数据类型和非引用数据类型
在对引用类型数据进行赋值操作时,实际上是将该数据类型对象的引用地址赋给了相应的变量,因此多个引用变量可以同时引用同一个对象,在改变其中任意一个引用变量所引用对象的属性时,其他引用变量引用的对象也会发生相应变化。非引用数据类型即基本数据类型,包括`byte`、`short`、`int`、`long`、`float`、`double`、`char`、`boolean`这8种。例如`byte`类型会被转换为`Byte`类,`int`类型会被转换为`Integer`类等。
2023-04-16 10:25:01
199
原创 时间复杂度为O(n)和复杂度为O(1)
需要注意的是,时间复杂度仅仅是一种估计,它描述了算法的增长趋势并且可以帮助我们评估各种算法的优劣,但它并不能准确预测每个操作所需的时间,实际运行时间受到许多因素的影响,例如计算机硬件、操作系统、编程语言等因素。时间复杂度等于算法中基本操作执行次数与输入数据规模n之间的关系,即T(n)=O(f(n)),其中f(n)是执行次数最多的语句关于n的函数。例如,访问一个数组中给定位置的元素值的操作,其时间复杂度为O(1)。例如,遍历一个包含n个元素的数组,并将所有元素相加的操作,其时间复杂度为O(n)。
2023-04-16 09:55:27
317
原创 八股文之ArrayList和LinkedList的区别
在这个例子中,我们分别创建了一个ArrayList类型的arrayList和一个LinkedList类型的linkedList,然后往它们中添加了一些元素,对它们进行访问、修改、删除等基本操作。从输出结果可以看出,在相同的操作下,ArrayList通常比LinkedList运行更快,但是在某些特定场景下(如频繁插入删除元素时),LinkedList的效率更高。运行一下代码,就可以看到在删除元素的操作中,ArrayList确实要进行大量的数组元素移动,因此删除的时间代价较高。LinkedList以。
2023-04-16 09:52:10
91
原创 八股文之List和set的区别
在这个例子中,我们首先定义了一个List类型的fruitList和一个Set类型的fruitSet,分别往它们中添加了相同的元素。然后,我们对它们进行一些基本的操作,比如访问、修改、删除等。从输出结果可以看出,List是有序的,而且可以包含重复元素;Set是无序的,不能包含重复元素。- List是有序的集合,可以包含重复元素,允许通过索引来访问、插入、修改和删除元素;- Set是无序的集合,不允许包含重复元素,只能判断集合中是否包含某个元素。
2023-04-16 09:19:17
46
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人