- 博客(41)
- 问答 (1)
- 收藏
- 关注
原创 Eclipse安装sts插件(eclipse 内置应用市场无法搜索到sts时)
下面提供一个可以通过help->install new software->add添加外部sts(spring tool suite)插件,springplugins - https://download.springsource.com/release/TOOLS/update/e4.12/官网(https://spring.io/tools3/sts/all)可以下载不同的版本。输入以上内容,然后next,等待下载,下载时间偏长,需要有耐心哟~
2023-09-26 21:14:13
1421
1
原创 树的遍历方式
所以就是说先中后的顺序都是指根节点,除了根节点之外都是先左子树后右子树。一棵树的三种遍历方式:先序遍历,中序遍历,后序遍历。这里根节点是最优先级,因为是先序(根节点放最前)前中后三种顺序其实指的是根的顺序,具体看后文。因为是中序,所以根节点就放在了中间。后序,所以根节点放在最后。前序:FCADBEHGM。中序:ACBDFHEMG。后序:ABDCHMGEF。
2023-07-09 23:46:47
285
原创 java向上转型和向下转型
向下转型可以调用子类类型中所有的成员,不过需要注意的是如果父类引用对象指向的是子类对象,那么在向下转型的过程中是安全的,也就是编译是不会出错误。但是如果父类引用对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现我们开始提到的 Java 强制类型转换异常,一般使用 instanceof 运算符来避免出此类错误。使用向上转型可以调用父类类型中的所有成员,不能调用子类类型中特有成员,最终运行效果看子类的具体实现。与向上转型相反,子类对象指向父类引用为向下转型。
2023-06-29 22:25:18
1275
原创 java中this与super的区别
this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针,代表本类对象的引用super可以理解为指向自己父类对象的指针,而这个父类只的是离自己最近的一个父类注意:this指本身对象,super指父类对象,所以在静态方法和静态的代码块中不能有this和super。
2023-06-29 20:42:42
150
原创 HashMap中的computeifAbsent()方法
结果可以看出,当HashMap中不存在对应的key时,在使用computeIfAbsent()方法是,会根据key后的表达式对key对应的value进行计算,并把key-value这个键值对,保存到map中。的意思是存在key为a的键值,返回value值,computeifAbsent()方法是对hashMap中指定的key的值进行重新计算,如果不存在这个key,则添加到hashMap中。结果可以看出,map中存在key是,是不会对value进行重新计算的,方法返回的是key原来对应的值。
2023-06-26 19:39:11
1000
原创 java中静态代理和动态代理
方法save是重写了目标类中的save方法。CGLIB生成的代理实例是通过继承目标类的方式生成的一个目标类的子类,在代理实例的方法中会去调用传入的方法拦截器(实现MethodInterceptor接口的类)中的intercept方法,在intercept方法中做了对目标类的增强处理。2.JDK动态代理生成的代理实例, 主要通过实现目标接口的方式,并通过反射获取接口中的方法,在代理实例中的方法会调用方法拦截(实现InvocationHandler接口的类)中的invoke方法,以此达到对方法的增强。
2023-06-17 19:19:09
130
原创 数据库事务-持久性原理
在存储引擎执行时,会先在缓存池中检测的数据是否在缓存池中,如果在可以直接修改,不在就加载数据所在的磁盘数据文件,把数据加载到缓存池中,在缓存池中修改,修改成功后就会把修改的数据加载到redo日志文件中,而在缓存池中修改后的数据,数据库后台会有异步的IO线程,把数据随机写入磁盘。如果缓存池中的数据丢失,就可以通过redo日志文件追回。(如当数据库服务器宕机,服务器重启后会把redo日志中的数据加载到缓存池中,这样就可以保证数据不会丢失)
2023-05-24 22:15:52
330
原创 数据库MVCC
trs_id保存的是这行数据被操作的记录数,roll_pointer(回滚指针)指向上一条记录数。MVCC(Multi-Version Concurrency Control)多版本并发控制,在数据库管理系统中,实现对数据库的并发访问。MVCC会保存某个时间节点上的数据快照,这意味着事务可以看到一个一致的数据视图,不管他们需要跑多久。这同时意味着不同的事务在同一个时间点看到的同一个表的数据可能是不同的。数据被操作一次就会有一次记录,在undo日志中会记录数据的不同版本,这是版本记录链。
2023-05-24 22:15:49
181
原创 数据库索引
答:因为InnoDB存储引擎它的表数据文件本身就是按B+树组织的一个索引文件,这样就要求存储的数据要有一列的数据是不会有重复值的,不建主键,数据库就会扫描每列看那一列不会有重复值依次列为主键去构建数据的存储,如果每列都有重复值,数据库会增加一个隐藏列依次列为主键去构建数据的存储并且这一列是数据库帮助维护他的唯一性。非叶子节点数据存储的格式和聚集索引一样,但是叶子阶段存储的数据,是改数据所在行的主键,通过非聚集索引查找到改行数据的主键,根据查找到的主键,然后通过聚集索引(主键索引)查找改行数据信息。
2023-05-24 22:15:43
192
原创 数据库语句及方法
select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = '要查询的表'SET TRANSACTION ISOLATION LEVEL [隔离级别]WHERE table_name='表名'如:设置隔离基本为序列化。
2023-05-24 22:14:49
96
原创 数据结构,树
在学数据库索引前先了解数据结构的树、二叉树、二叉搜索树、平衡二叉树、红黑树、B树、B+树。什么树:树是n(n大于等于0)个节点的有限集合,当n等于0是称为空树,在任意一个非空树中,有且只有一个称为根的结点,其余结点可分为m(m大于等于0)个互不相交的有限集T1,T2....Tm,并且每个集合都是一棵树,并且称为根结点的子树。如下图:什么是二叉树: 二叉树是n(n>=0)个结点所构成的集合,它或为空树(n=0);或为非空树。 对于非空二叉树: - 有且仅有一个称之为根的结点; - 除根结点以外的其余结点分为
2023-05-17 20:08:04
193
原创 Synchronized的优化-CAS-AtomicInteger
CAS的作用:CAS可以将比较和交换转换为原子操作,这个原子操作直接有CPU保证,CAS可以保证共享变量赋值时的原子操作,CAS操作依赖3个值:内存中的值V,旧的预估值X,要修改的新值B,如果旧的预估值X等于内存中的值V,就将新的值B保存到内存中。Unsafe类使用java拥有的C语言的指针一样操作内存空间的能力,同时也到来的指针的问题,过度的使用Unsafe类会使得出错的几率变大,因此java官方并不建议使用,官方文档几乎没有,unsafe对象不能直接调用,只能通过反射获得。结果:运行结果都是5000。
2023-05-08 19:28:40
139
原创 JAVA对象布局
这一部分用于存储对象的类型指针,改指针指向它的类元数据,JVM通过这个指针确定对象是哪个类的实例,改指针的位长度为JVM的一个字大小,即32位的JVM为32位,64位的JVM为64位。如果应用的对象过多,使用64位的指针将浪费大量内存,统计而言,64位的jvm将比32位的JVM多消耗50%的内存,为了节约内存可以使用选项-XX:+UseCompressedOops 开启指针压缩,其中oop即ordinary object pointer普通对象指针。2.每个对象的属性指针(即对象变量)
2023-05-08 19:28:17
125
原创 JAVA中的锁
同时,虚拟机开发团队也注意到在许多应用上,共享数据的锁定状态会持续很短的一段时间,为了这段时间阻塞和唤醒线程并不值得,如果物理机器有一个以上的处理器,能让两个或以上的线程同时并行执行,我们就可以让后面请求锁的那个线程“稍微等一下”,但不放弃处理器的执行时间,看看持有锁的线程能否很快就会释放锁,为了让线程等待,我们只需要让线程执行一个忙循环(自旋),这项技术就是所谓的自旋锁。否则只能说明该锁对象已经被其他线程抢占了,这时轻量级锁需要膨胀为重量级锁,锁标志位变成10,后面等待的线程将会进入阻塞状态。
2023-05-08 19:27:17
112
原创 synchronized关键字作用和原理
结果:从结果看出虽然方法用的synchronized修饰 线程1和2是并发并发执行的,因为线程1使用的对象SynchronizedClass1而线程2使用的是对象SynchronizedClass2,两个线程使用的不同的对象,而synchronized修饰普通方法是以this当前对象为锁,线程1this对象是SynchronizedClass1,线程2this对象是SynchronizedClass2,所以两线程运行没有影响。非同步方法2 非静态方法 线程 Thread2 运行结束。
2023-04-25 23:00:56
1479
原创 java 内存模型(JMM)
Java内存模型(即Java Memory Model,简称JMM)本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。
2023-04-21 21:37:58
271
原创 java内存JVM
类构造器()方法是由编译器自动收集类中所有类变量的赋值动作和静态代码块的语句合并产生的。(类构造器是构造类信息的,不是构造该类对象的构造器)将class文件字节码内容加载到内存中,并将这些静态数据转换方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象。启动类加载器检查是否能够加载当前这个类,能加载就结束,使用当前加载的加载器,否则抛出异常,通知子加载进行加载。当初始化一个类时,如果发现其父类没有初始化,则需要先触发其父类的初始化。
2023-03-20 22:12:34
292
原创 Executors.newScheduledThreadPool(num);创建固定大小 线程数 支持定时和周期性任务
多线程的newScheduledThreadPool(num)
2022-07-10 22:27:11
1437
原创 Spring Aop
1. AopAspect Oriented Programming:面向切面编程 ,通过预编译或和运行期动态代理实现程序的统一维护的一种技术。如果多个类中出现重复的代码,可以考虑定义一个共同的抽象类,将这些共同的代码提取到抽象类中。AOP就是希望将这些分散在各个业务逻辑代码中的相同代码,通过横向切割的方式抽取到一个独立的模块中,让业务逻辑类依然保存最初的单纯。主要的功能是:日志记录,性能统计,安全控制,事务处理和异常处理等等AOP实现方式.预编译 -AspectJ.运行期动态代理(JDK
2022-03-30 22:31:27
589
原创 注解@Resource(JSR250)和@Inject(JSR330)和@Autowired(Spring)的区别
JSRJSR是JavaSpecification Requests的缩写,意思是“Java 规范提案”。是指向JCP(JavaCommunity Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。简单的就是jsr是java开发者以及授权者指定的标准,而java开发者以及授权者形成一个jcp国际组织。职能是指定java标准。JCPJCP由SUN于1995年创造Java的非正式过程,演进到如今有数
2022-03-27 20:18:16
705
原创 @Autowired注解说明和@Bean注解
1.可以把@Autowired 注解,理解为 “传统的” setter方法。它可以写在 成员变量、seter方法和构造器上2.可以用@Autowired注解哪些众所周知解析依赖性的接口,如 BeanFactory、ApplcationContext、Environment、ResourceLoader、ApplicationEventPublisher、MessageSource3.@Autowired 可以给需要该类型的数组的字段或方法,以提供ApplicationContext所有特定.
2022-03-27 17:31:35
922
原创 Spring 装配Aware 接口和Resource
Spring 装配Aware接口aware,翻译过来是知道的,已感知的,意识到的,所以这些接口从字面意思应该是能感知到所有Aware前面的含义。 实现BeanNameAware接口,可以让该Bean感知到自身的BeanName(对应Spring容器的BeanId属性)属性,同理,其他的Aware接口也是为了能够感知到自身的一些属性。 比如实现了ApplicationContextAware接口的类,能够获取到ApplicationContext,实现了BeanFactoryAware接口的类
2022-03-21 21:15:25
590
原创 Bean的作用域和生命周期
1.singleton :单例 每个Bean中只有一个,Spring 只会为每一个bean创建一个实例,并保持bean的引用 。Spring的scope的默认值是singleton2.prototype作用域:每次请求(每次使用)都会创建一个实例 destroy方式不生效3.request作用域:HTTP request表示该针对每一次HTTP请求都会产生一个新的bean,仅适用于WebApplicationContext环境4.session作用域:HTTP session表示该针对每一次
2022-03-16 22:11:14
697
原创 Spring 注入方式
Spring 注入方式有三中1.setter注入2.构造器注入3.基于注解的注入1.setter注入在InjectionServiceImple 中有 变量 injectionDao 并有其的set方法还有一点需要注意:如果通过set方法注入属性,那么spring会通过默认的空参构造方法来实例化对象,所以如果在类中写了一个带有参数的构造方法,一定要把空参数的构造方法写上,否则spring没有办法实例化对象,导致报错。2.构造器注入注意:配置文件中的nam.
2022-03-15 21:29:07
8432
1
转载 【无标题】SpringContext理解
文章目录BeanFactory和ApplicationContextApplicationContextApplicationContext概述ApplicationContext类体系结构ApplicationContext初始化ApplicationContext两个主要实现类ClassPathXmlApplicationContextFileSystemXmlApplicationContext加载一组配置文件基于类注解的配置方式Spring4支持Groovy DSL配置Bean
2022-03-14 22:13:33
224
空空如也
数据库创建存储过程报 成功但编译失败
2023-08-20
多线程 同步锁Lock
2022-07-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人