基础了解
文章平均质量分 60
为了生活
一片星空~
毕业l来北京快一年的菜鸟
展开
-
事务的隔离级别以及传播行为
使用步骤:步骤一、在spring配置文件中引入tx:命名空间步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持<bean id="defaultTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" />转载 2020-06-16 00:08:20 · 116 阅读 · 0 评论 -
编程式事务和声明式事务的区别
编程式事务就是自己写Try catch语句调用commit\rollback等函数来实现那段业务数据改变的事务性。声明式事务是通过框架和事务定义配置给自己的业务代码添加事务性,比如Spring里面的AOP。前者需要自己写大量重复的事务控制代码,后者通过设置可以一次性给所有的业务方法添加上事务特性。希望所写的你们能够用到...原创 2020-06-16 00:09:10 · 332 阅读 · 0 评论 -
list和map的常规使用
1.List、Map、SetList以特定索引来存取元素,可以有重复元素。Set不能存放重复元素(用对象的equals()方法来区分元素是否重复)。Map保存键值对(key-valuepair)映射,映射关系可以是一对一或多对一。Set和Map容器都有基于哈希存储和排序树的两种实现版本,基于哈希存储的版本理论存取时间复杂度为O(1),而基于排序树版本的实现在插入或删除元素时会按照元素或元素的键(key)构成排序树从而达到排序和去重的效果。2.ArrayList、Vector、LinkedList的存储性原创 2020-07-30 16:13:02 · 525 阅读 · 0 评论 -
HashMap线程不安全-两种情况
HashMap会进行resize扩容操作,在resize扩容操作的时候会造成线程不安全。下面将举两个可能出现线程不安全的地方。1、put的时候导致的多线程数据不一致。这个问题比较好想象,比如有两个线程A和B,首先A希望插入一个key-value对到HashMap中,首先计算记录所要落到的桶的索引坐标,然后获取到该桶里面的链表头结点,此时线程A的时间片用完了,而此时线程B被调度得以执行,和线程A一样执行,只不过线程B成功将记录插到了桶里面,假设线程A插入的记录计算出来的桶索引和线程B要插入的记录计算出来的原创 2020-06-24 15:22:47 · 425 阅读 · 0 评论 -
HashMap底层原理-1.8后红黑树实现
在上述文章中,写到了hashmap put值时,如果hashcode相等时,会在物理地址同一位置处,加入链表的操作;链表过长会出现什么问题了?链表过长会出现遍历过长,我们说一个算法好与坏时间复杂度来决定,而这种链表的特点是:插入快,查询慢。所以其时间复杂度为O(N)。此时JDK1.8后,就引用了hashmap 数组+链表+红黑树的实现。数组+链表与数组+链表+红黑树的区别:1.当hashcode相同时,相同物理地址中存放的链表数据<= 8 ,时,会采用数组+链表,否则会采用数组+链表+红黑树原创 2020-06-24 15:21:18 · 443 阅读 · 0 评论 -
HashMap底层原理-hashcode的含义以及作用
一、hashcode是什么?了解三个概念,hash,hash表,hashcode,1.hash是一个函数,该函数中的实现就是一种算法,专门生成hashcode的算法。2.hashcode就是通过hash函数得来的,hashcode就是在hash表中有对应的位置。3.hash表就是所有的hash值组成的。3.每个对象都有hashcode,引申除了这个概念:如果两个对象equals相等,那么这两个对象的HashCode一定也相同,如果hashcode 相等,对象不一定相等,只能说明这两个对象在散列存储原创 2020-06-24 15:20:47 · 984 阅读 · 0 评论 -
HashMap底层原理-hashcode多种方法生成
Hash一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。根据同一散列函数计算出的散列值如果不同,那么输入值肯定也不同。但是,根据同一散列函数计算出的散列值如果相同,输入值不一定相同。两个不同的输入值,根据同一散列函数计算出的散原创 2020-06-24 15:20:14 · 400 阅读 · 0 评论 -
HashMap底层原理
HashMap:1.关注点存储内容:key-value存储结构:数组-链表-红黑树存储位置:数组下标存储大小:数组长度2.数组采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);对于一般的插入删除操作,涉及到数组元素的移动,其平均复杂度也为O(n),数组:采用一段连续的存储单元来存储数据。特点:指定下标O(1) 删除插入O(N) 数组:查询快 插入慢 ArrayList3.链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的原创 2020-06-21 17:58:20 · 710 阅读 · 0 评论 -
使用反射访问成员变量的值、入参对象
反射操作属性,以及类入参原创 2020-07-03 14:04:18 · 2156 阅读 · 0 评论 -
反射获取泛型信息
一 点睛获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型://获取Field对象f的类型Class<?> a = f.getType();通过这种方式只对普通类型的Field有效。但如果该Field的类型是有泛型限制的类型,如Map<String , Integer>类型,则不能准确的得到该Field的泛型参数。为了获得指定Field的泛型类型,应先使用如下方法来获取指定Field的泛型类型://获得F原创 2020-07-03 14:02:59 · 2592 阅读 · 0 评论 -
中断线程的三个常用函数
一 点睛中断一个线程,意味着该线程在完成任务之前,停止它正在进行的一切当前的操作。有三个比较常用的函数:interrupt():一个正在运行的A线程,可以调用B线程对应的interrupt方法来中断线程B。这个方法的核心功能是,将线程B的中断标识位属性设置为true。isInterrupted():通过该方法判断某个线程是否处于中断状态。interrupted():这是一个静态方法,用来获取当前线程的中断状态,并清除中断状态。获取的是清除之前的值,也就是说连续两次调用此方法,第二次一定会返回fal转载 2020-07-03 14:14:27 · 1111 阅读 · 0 评论 -
线程池原理及实现
1、线程池简介:多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。一个线程池包括以下四个基本组成部分:1、线程池管理器(ThreadPool):用于创建并管理线程池,包括 创建线程池,销毁线程池,添加新任务;2、工作线程(PoolWorker):线程池中线程转载 2020-07-03 14:09:41 · 192 阅读 · 0 评论 -
java中final和static的区别
都可以修饰类、方法、成员变量。 static 可以修饰类的代码块,final 不可以。 static不可以修饰方法内的局部变量,final 可以。static 修饰表示静态或全局,被修饰的属性和方法属于类,可以用类名.静态属性 / 方法名 访问 static修饰的代码块表示静态代码块,当 Java 虚拟机(JVM)加载类时,就会执行该代码块,只会被执行一次 static修饰的属性,也就是类变量,是在类加载时被创建并进行初始化,只会被创建一次 static 修饰的变量可以重新赋值 static 方法中原创 2020-08-24 18:26:08 · 1129 阅读 · 0 评论 -
接口的幂等性
接口的幂等性接口调用存在的问题现如今我们的系统大多拆分为分布式SOA,或者微服务,一套系统中包含了多个子系统服务,而一个子系统服务往往会去调用另一个服务,而服务调用服务无非就是使用RPC通信或者restful,既然是通信,那么就有可能在服务器处理完毕后返回结果的时候挂掉,这个时候用户端发现很久没有反应,那么就会多次点击按钮,这样请求有多次,那么处理数据的结果是否要统一呢?那是肯定的!尤其在支付场景。什么是接口幂等性接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因原创 2020-08-20 18:47:18 · 154 阅读 · 0 评论 -
值传递和引用传递针对的对象是谁
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 所以对引用对象进行操作会同时改变原对象.一般认为,java内的传递都是值传递.希望能够帮助到你们...原创 2020-07-30 11:55:55 · 138 阅读 · 0 评论 -
JDK1.5后的装箱拆箱到底干什么
Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。Java 为每个原始类型提供了包装类型:原始类型: boolean,char,byte,short,int,long,float,double包装类型:Boolean,Character,By原创 2020-07-30 11:50:20 · 124 阅读 · 0 评论 -
加密和加签的区别
加密与加签就拿A给B发送经过签名加密信息来说:1、A对信息签名的作用是确认这个信息是A发出的,不是别人发出的;2、加密是对内容进行机密性保护,主要是保证信息内容不会被其他人获取,只有B可以获取。也就是保证整个过程的端到端的唯一确定性,这个信息是A发出的(不是别人),且是发给B的,只有B才被获得具体内容(别人就算截获信息也不能获得具体内容)。这只是大概说了作用,具体说来,涉及到密钥相关的东西。密钥有公钥和私钥之分。那么这里一共有两组四个密钥:A的公钥(PUB_A),A的私钥(PRI_A);B的公钥原创 2020-07-26 14:08:55 · 2341 阅读 · 3 评论 -
并行和并发、同步和异步的区别
并行和并发、同步和异步的区别戎·码一生 2013-08-06 20:49:32 3498 收藏 5分类专栏: 操作系统版权1、并行 对多处理器而言--多个程序在同一时刻发生,具有并发的含义,但并发不一定并行,也亦是说并发事件之间不一定要同一时刻发生。 并行:在单处理器中多道程序设计系统中,进程被交替执行,表现出一种并发的外部特种;在多处理器系统中,进程不仅可以交替执行,而且可以重叠执行。在多处理器上的程序才可实现并行处理。计算机操作系统中把并行性和并发性明显区分开,主要是从微观的角度转载 2020-07-19 15:44:59 · 778 阅读 · 0 评论 -
java对象序列化与反序列化(二)
文章目录在远程方法调用 RMI 学习的过程中,涉及到一个概念,序列化,本文进行详述。Java 对象的序列化和反序列化 的两种应用场景有时候需要将 Java 对象保存永久保存,比如保存到文件中,过程:Java 对象 -> IO 对象流 -> 写入文件 -> 字符串。当我们需要将文档中的字符串恢复为 Java 对象的时候,需要相反的过程:字符串 -> 读文件 -> IO 流 -> (强制)转化为 Java 对象。还有一种场景,在网络通信中,对象要先变为IO流经过网络传转载 2020-06-30 11:42:03 · 160 阅读 · 0 评论 -
java对象序列化与反序列化(一)
我对Java Serializable(序列化)的理解和总结博客分类: Java技术JavaOSSocketCC++1、序列化是干什么的?简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。2、什么情况下需要序列化a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;b)当你想用套接字在网转载 2020-06-30 11:36:50 · 171 阅读 · 0 评论 -
声明对象和实例化对象的区别
1. 声明对象对象的声明和基本类型的数据声明在形式上是一样的:类名 对象名;对象名也是用户标识符,和基本类型的变量遵循同样的命名规则和使用规则。声明一个变量,并不会分配一个完整的对象所需要的内存空间,只是将对象名所代表的变量看成是一个引用变量,并为它分配所需内存空间,它所占用的空间远远小于一个类的对象所需要的空间。如此处理,使得Java中声明一个对象的消耗很小,但也有一个副作用,就是对象不能马上使用,还需要对它进行实例化。2. 实例化对象用new关键字创建一个新对象,即进行实例化。格式如下:原创 2020-06-29 15:00:28 · 2153 阅读 · 1 评论 -
java栈实例
public class MyStack {private int maxSize;private long[] stackArray;private int top;public MyStack(int s) {maxSize = s;stackArray = new long[maxSize];top = -1;}public void push(long j) {stackArray[++top] = j;}public long pop() {return stackArr原创 2020-06-29 14:57:09 · 146 阅读 · 0 评论 -
对象的常用方法
protected Object clone()创建并返回此对象bai的一个副本。duboolean equals(Object obj)指示其他某zhi个对象是否与此对象“相dao等”。protected void finalize()当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。Class<?> getClass()返回此 Object 的运行时类。int hashCode()返回该对象的哈希码值。void notify()唤醒在此对象监视器上等待的单个原创 2020-06-29 14:55:09 · 316 阅读 · 0 评论 -
java对象的存在周期
Java 对象的生命周期在Java中,对象的生命周期包括以下几个阶段: 创建阶段(Created) 应用阶段(In Use) 不可见阶段(Invisible) 不可达阶段(Unreachable) 收集阶段(Collected) 终结阶段(Finalized) 对象空间重分配阶段(De-allocated)1.创建阶段(Created)在创建阶段系统通过下面的几个步骤来完成对象的创建过程1.1为对象分配存储空间1.2开始构造对象1.3从原创 2020-06-29 14:52:37 · 275 阅读 · 0 评论