
java
vvhaleCH
这个作者很懒,什么都没留下…
展开
-
SOA和微服务的区别
先讲一讲架构的演变。原创 2024-11-14 00:58:10 · 296 阅读 · 0 评论 -
@Transactional
3.isolation:事务的隔离级别,默认是DEFAULT,也就是使用数据源的默认隔离级别,对于mysql来说就是可重复读RR。7.最好是直接加在接口上,一些只读接口没必要加,同时只对public方法生效,这是由于事务的实现方式是AOP,反射获取方法。1.value属性:多数据源的时候可能会用来设置要用哪个事务管理器,默认是个空字符串。1.如果非要在加上该注解的地方使用try...catch语句块,可以考虑使用手动回滚。2.propagation:事务的传播行为,默认是REQUIRED。原创 2024-11-10 21:18:03 · 203 阅读 · 0 评论 -
Spring-
但是可以独立的回滚(父事务要try...catch一下,避免影响)。2.事务的传播是从上到下的,假如一个A方法是required,里面调用一个require_new的B方法,B会自己开一个事务,但是如果B抛异常回滚了,A还是能感知到,也回滚。1.如果使用never,因为是代理的方式处理事务,假如A有事务,调B方法,B方法还没执行,就是还没走到B,判断A有事务,B为Never,就直接报错了。3.使用nested可以实现的效果,A调B,B为nested,B的回滚不影响A,但是A如果报错回滚,B也跟着回滚。原创 2024-11-10 21:16:34 · 213 阅读 · 0 评论 -
Java-接口和抽象类
接口中的方法默认使用public修饰;抽象类中的方法可以是任意访问修饰符。抽象类可以有main方法,并且能够运行;接口不能有main方法。3.接口可以被实现但是不能实例化,所以其中没有普通的成员变量。抽象类可以有构造函数;接口不能有,它只能由实现类实现。2.一个普通类继承抽象类,要重写其中的抽象方法。1.一个普通的类实现接口,需要实现其中的方法。6.抽象类中可以有普通方法,也可以有静态方法。5.1.8版本之后,抽象类也可以有静态方法。类可以实现很多接口;4.抽象类中可以有普通成员变量。原创 2024-11-04 00:21:30 · 239 阅读 · 0 评论 -
Java-NIO
NIO有三大核心部分:Channel(通道)、Buffer(缓冲区)、Sellector。传统的IO面向流操作,而NIO面向缓冲区操作。数据总是从缓冲区写到通道或者从通道读入缓冲区。Selector用于监听各个通道的事件。Selector监听注册到它的连接,基于回调函数获取通知。原创 2024-11-04 00:20:05 · 221 阅读 · 0 评论 -
jvm调优浅谈
在java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,引用类型保存的是引用值,也就是地址值。原创 2024-11-04 00:19:26 · 220 阅读 · 0 评论 -
java中4种权限修饰符的区别
访问权限 类 包 子类 其他包 public √ √ √ √ protected √ √ √ × default √ √ × × private √ × × ×原创 2024-11-04 00:18:39 · 93 阅读 · 0 评论 -
Java-泛型 T和?的区别
方法上的<T>代表括号里面要用到的泛型,需要指定,若类中传了泛型,此处可以不传,调用类型上面的泛型参数,前提是方法中使用的泛型与类中的泛型保持一致。一般用于定义一个引用变量,这么做的好处是,定义一个sup的引用变量,可以指向多个对象。T extends T2 指传的参数为T2或者T2的子类型。是通配符,泛指所有类型。原创 2024-11-04 00:18:04 · 126 阅读 · 0 评论 -
Java-StringUtils中isEmpty和isBlank的区别
2.isBlank认为空格、换行符(\n)、tab都是空。1.isEmpty认为空格(无论几个)都不是空。原创 2024-11-04 00:11:20 · 154 阅读 · 0 评论 -
Java-Cloneable接口
Cloneable接口是一个标记型接口,内部没有方法和属性,实现该接口表示该对象能被克隆,也就是能使用Object.clone()方法。如果一个对象没实现该接口就调用clone()方法会抛出CloneNotSupportedException异常。原创 2024-11-04 00:10:50 · 106 阅读 · 0 评论 -
java-强引用、弱引用、软引用、虚引用
4.虚引用,最弱的引用,可以理解为没有引用一样,随时会被回收。3.弱引用,WeakReference,比软引用更弱的,无论内存是否足够,一旦开始垃圾回收,被弱引用关联的对象都会被回收。2.软引用,SoftReference,内存不足的时候才会回收,如果回收之后内存仍不足,会报内存溢出异常。一般我们见到的描述——“强引用对象不会被回收”,指的是依旧由gcRoot的有效引用到这个对象。简单想一想,我们平时写java代码,如果不回收的话,内存肯定是不够用的。几段典型的代码可以参考下方的链接。先说结论,会被回收。原创 2024-11-04 00:08:50 · 243 阅读 · 0 评论 -
Java-jvm中的方法区
2.运行时常量池一直是方法区的一部分,在不同版本的JDK中,由于方法区位置的变化,运行时常量池所处的位置也不一样.JDK1.7及之前方法区位于永久代.由于一些原因在JDK1.8之后彻底祛除了永久代,用元空间代替。运行时常量池中包含多种不同的常量,包括编译期就已经明确的数值字面量,也包括到运行期解析后才能够获得的方法或者字段引用。1.运行时常量池是每一个类或接口的常量池的运行时表示形式。具体体现就是在Java编译后生成的.class文件中,会有class常量池,也就是静态的运行时常量池。原创 2024-11-03 01:31:58 · 127 阅读 · 0 评论 -
Java-ConcurrentHashMap1.8
9.做size++的时候,使用的是cas,如果失败了,不会一直自旋,会把+1这个操作放到当前线程中的counterCell中,这是一个共享的数组变量。5.1.8的cchm可能会造成cpu飙高,原因在于自旋中的cas下的初始化代码崩溃的话,会不断自旋并且不放弃CPU执行权,一直cas。4.对比hashtable,hashtable 是对全table加锁,cchm对当前需要操作的index对应的node节点上锁。7.对于table中的某个node节点的修改权也是通过cas+自旋的方式确定的。原创 2024-11-03 01:30:24 · 276 阅读 · 0 评论 -
Java-ArrayList
1.modCount在add操作或remove操作时会更新。遍历时新增或删除会报错。3.扩容公式 newLen = oldLen + oldLen >> 1。2.和Vector实现的区别。2.数组的初始大小为10。1.懒加载初始化数组。原创 2024-11-03 01:27:41 · 303 阅读 · 0 评论 -
Java-HashMap
1.hashmap不存在缩容,要考虑重新计算index值的问题。原创 2024-11-03 01:26:37 · 227 阅读 · 0 评论 -
Java-HashSet
1.底层是hashmap实现,我们存的对象就是hashmap的key。2.value是一个object对象,占16个字节。原创 2024-11-03 01:26:07 · 299 阅读 · 0 评论 -
Java-LinkedList
1.底层是个双向链表。原创 2024-11-03 01:25:37 · 366 阅读 · 0 评论 -
Java-StringBuilder和StringBuffer
2.StringBuffer线程安全,方法用synchronized修饰,但是慢。1.StringBuilder线程不安全但更快。1.StringBuffer是一个final类。原创 2024-11-03 01:25:05 · 82 阅读 · 0 评论 -
Java-为什么不用System.out.println输入日志
1.该方法是一个同步方法,高并发情况下影响性能。原创 2024-11-03 01:24:31 · 287 阅读 · 0 评论 -
Java-volatile
4.因为不是每次改动都生效,所以不能仅依赖它实现计数锁。1.该关键字是可以保证有序性的,也就是禁止重排。3.如有改动对各个线程立即可见。原创 2024-11-03 01:23:46 · 386 阅读 · 0 评论 -
Java-finally
try...catch...finally,如果有如下代码。最后打印结果是2,如下。原创 2024-11-03 01:23:07 · 391 阅读 · 0 评论 -
Java-队列的API
element:查看首个元素,不会移除首个元素,如果队列是空的就抛出异常NoSuchElementException。peek:查看首个元素,不会移除首个元素,如果队列是空的就返回null。poll:将首个元素从队列中弹出,如果队列是空的,就返回null。相同点:都是返回队列首个元素。原创 2024-11-02 01:00:24 · 379 阅读 · 0 评论 -
Java-String
【代码】Java-String。原创 2024-11-02 00:57:57 · 121 阅读 · 0 评论 -
Java-Math
1.Math.floor(x)返回小于等于x的double值。计算余弦值使用Math类的cos()方法。toRadians()是将角度转换为弧度。toDegrees()是将弧度转换为角度。原创 2024-11-02 00:55:29 · 220 阅读 · 0 评论 -
Java-Integer
java中引用类型的实参向形参的传递,只是传递的引用,而不是传递的对象本身。返回值为true, 会将b自动拆箱。原创 2024-11-02 00:53:36 · 177 阅读 · 0 评论 -
Java-基本类型
B是错的,如果声明时不加f会默认是double类型,double到float需要强制类型转换(大转小,精度丢失)F是错误,100是int类型,可以自动装箱成Integer,但是不能是Double。G是对的int可以转成double。C是unicode写法,对的。原创 2024-11-02 00:50:17 · 118 阅读 · 0 评论 -
Java-super
用来访问父类被隐藏的非私有成员变量。用来调用父类中被重写的方法。1.super有哪些作用。用来调用父类的构造函数。原创 2024-11-02 00:49:08 · 72 阅读 · 0 评论 -
Java-继承
1.使用反射可以看出子类是继承了父类的私有方法的(不管是不是final),只是直接调用父类的私有方法是不可以的,但是可以利用反射方式调用。1.父类静态代码块 ->子类静态代码块 ->父类非静态代码块 -> 父类构造函数 -> 子类非静态代码块 -> 子类构造函数。1.如果父类没有无参构造方法,子类必须在构造方法中显式调用父类构造方法。通过setAccessible设置访问权限为可以被访问。通过getSuperClass获取父类。1.构造函数只能被调用,不可被继承。通过父类获取所有方法。原创 2024-11-02 00:48:33 · 144 阅读 · 0 评论 -
Java-instanceof
1.instanceof是java的二元运算符,用来判断他左边的对象是否为右面类(接口,抽象类,父类)的实例。原创 2024-11-02 00:47:31 · 73 阅读 · 0 评论 -
Java-标识符规范
1.标识符只有英文,数字,下划线和$,而且数字不能做开头~原创 2024-11-02 00:46:47 · 119 阅读 · 0 评论 -
Java-类加载
clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块static{}中的语句合并产生的,编译器收集的顺序是由语句在源文件中出现的顺序所决定的,静态语句块只能访问到定义在静态语句块之前的变量,定义在它之后的变量,在前面的静态语句块可以赋值,但是不能访问(要注意这里,是有坑的)验证阶段是非常重要的,但不是必须的,它对程序运行期没有影响,如果所引用的类经过反复验证,那么可以考虑采用-Xverifynone参数来关闭大部分的类验证措施,以缩短虚拟机类加载的时间。原创 2024-11-02 00:46:15 · 295 阅读 · 0 评论 -
Java-重写和重载
重写 要求两同两小一大原则, 方法名相同,参数类型相同,子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。再来说说这道题 A B 都是方法名和参数相同,是重写,但是返回类型没与父类返回类型有继承关系,错误 D 返回一个类错误 c的参数类型与父类不同,所以不是重写,可以理解为广义上的重载访问权限小于父类,都会显示错误。重载 方法名必须相同,参数类型必须不同,包括但不限于一项,参数数目,参数类型,参数顺序。原创 2024-11-02 00:32:01 · 203 阅读 · 0 评论 -
Java-yield()
yield()应该做的是让当前运行线程回到可运行(就绪态,等待CPU调度)状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。Thread.yield()方法作用是:暂停(注意是暂停)当前正在执行的线程对象,并执行其他线程。原创 2024-11-02 00:28:08 · 285 阅读 · 0 评论 -
Java-多态
2023.10.191.多态的作用不必编写每一子类的功能调用,可以直接把不同子类当父类看,屏蔽子类间的差异,提高代码的通用率/复用率父类引用可以调用不同子类的功能,提高了代码的扩充性和可维护性2024.7.31.下面代码运行结果是22 34 17思路如下:思考和解决这个题的主要核心在于对java多态的理解。个人理解时,执行对象实例化过程中遵循多态特性 ==> 调用的方法都是将要实例化的子类中。原创 2024-11-02 00:26:56 · 1720 阅读 · 0 评论 -
Java-线程
通过名字就能看出它们的含义了,当通过Condition调用await()时当前线程释放锁并等待,当通过Condition调用signal()时唤醒一个等待的线程,当通过Condition调用signalAll()时则唤醒所有等待的线程。在synchronized同步模式下,锁对象可以是任意的类型,所以通信方法自然就被定义在Object类中了,这些方法包括:wait()、notify()、notifyAll()。线程同步是线程通信的前提,所以究竟采用哪种方式实现通信,取决于线程同步的方式。原创 2024-10-31 00:46:56 · 143 阅读 · 0 评论 -
Java-Servlet
4.HttpServletRequest接口扩展ServletRequest接口,为HTTP Servlet提供HTTP请求信息。3.ServletConfig接口定义了在Servlet初始化的过程中由Servlet容器传递给Servlet的配置信息对象。2.大多数Servlet通过从GenericServlet或HttpServlet类进行扩展来实现。1.GenericServlet是一个抽象类,它是一个通用的、独立于底层协议的Servlet。原创 2024-10-31 00:42:12 · 217 阅读 · 0 评论 -
Java-抽象类
1.抽象类有构造方法,但是不可直接调用,一个普通类继承抽象类之后可以在它的构造方法中调用抽象父类的构造方法。1.抽象类中方法的默认修饰符——1.8之前是default,之后是protected。1.抽象类中可以没有抽象方法。原创 2024-10-31 00:40:44 · 129 阅读 · 0 评论 -
java源文件
1.一个.java文件中,可以有多个类,包括内部类和外部类。考虑到内部类的原因,一个.java文件可以中可以有多个public类。但是对于外部类而言,一个.java文件必须只能有一个public类,同时这个类的类名必须和.java的文件名一致(包括大小写)。原创 2024-10-31 00:32:45 · 86 阅读 · 0 评论 -
Java-静态变量、静态块、静态域
接着对t2进行初始化过程同t1相同(输出'构造块'),此时就对所有的static变量都完成了初始化,接着就执行static块部分(输出'静态块'),接着执行,main方法,同样也,new了对象,调用构造函数输出('构造块')而静态域中包含静态变量、静态块和静态方法,其中需要初始化的是静态变量和静态块,而他们两个的初始化顺序是靠他们俩的位置决定的。1.静态变量只能在类中定义,不能再方法中定义,总之静态变量属于类不属于方法,更具体一些,static关键只能修饰类的变量和方法,不能使用在方法中。原创 2024-10-31 00:32:06 · 103 阅读 · 0 评论 -
Java-构造函数
1.一个类中的重载出来的不同的构造函数可以通过像this()这样互相调用。1.构造函数不能有void这种修饰符,加了就变成一个普通方法了。原创 2024-10-31 00:28:56 · 92 阅读 · 0 评论