java
文章平均质量分 76
酒剑随马@
努力变强
展开
-
反射含义与原理
目录含义作用怎么使用反射通过反射获取对象获取类的成员变量的信息获取类的方法获得构造函数反射原理类加载含义反射是指在项目运行过程中,对于任意一个类可以获取其属性和方法信息,对于任意一个对象都可以调用其所有属性和方法,这种动态获取类信息以及动态调用对象方法的能力称为反射作用获取类名、package信息、所有属性、方法、注解、类型、类加载器等判断对象所属的类获取/修改对象中的属性值调用对象中的方法怎么使用反射通过反射获取对象获取Class对象Class class = Class.f原创 2022-05-02 21:38:25 · 611 阅读 · 0 评论 -
CyclicBarrier
目录CyclicBarrier是什么用例实现原理内部属性构造方法await方法breakBarrier()CyclicBarrier是什么CyclicBarrier又被称为同步屏障,可以让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时,所有被阻塞的线程才被唤醒,继续执行举个例子:CyclicBarrier类似一扇门,默认情况下关闭状态,堵住了线程执行的道路,直到所有线程都就位,门才打开,让所有线程一起通过用例public class CyclicBarrierUsing { p原创 2022-02-16 09:31:20 · 399 阅读 · 0 评论 -
CountDownLatch
目录简介原理解析newawaitcountDownQA简介java.util.concurrent.CountDownLatchCountDownLatch是一种一次性同步辅助工具,它实现了一个或一组线程等待被其他线程唤醒的机制使用场景举例:服务启动时,会同时加载多个组件,主线程需等待组件加载,当所有组件加载完毕之后,主线程才能去完成某个任务(去吃饭,等上菜、等人齐,之后才可以吃饭)核心方法:await: 阻塞调用线程,直到CountDownLatch中计数器到0;才会被唤醒countDow原创 2022-02-15 09:30:17 · 499 阅读 · 0 评论 -
Thread及Object中的一些方法
wait、notifywait和notify方法是Obejct类中的方法,相当于所有的对象均有这两个方法。当一个线程持有了锁对象object使用权之后才能object的wait、notify方法,因此需要将方法调用放在synchronized同步方法或代码块中,保证当前线程持有了锁的使用权,若线程没有持有锁对象obejct使用权,调用了object的wait、notify方法则会抛出 java.lang.IllegalMonitorStateExceptionwait() 线程会释放当前持有的所有锁,原创 2021-05-04 22:22:40 · 216 阅读 · 0 评论 -
java中的引用
java中引用分为强引用、软引用、弱引用、虚引用4种,下面分别针对这4种引用介绍一下(1)FinalReference 强引用,就是我们平常经常使用的类似于Object o = new Object(),这种就是强引用,该引用存在栈中,jvm进行垃圾回收时,如果堆中的对象被强引用指向它,那么是不会被回收的(2)SoftReference 软引用,被软引用指向的对象,当堆中内存不足的情况下,会被列入到可回收范围内,也就是说软引用指向的对象并非是安全的,在垃圾回收的过程中是有可能被回收掉的。Sof原创 2020-07-27 00:30:40 · 147 阅读 · 0 评论 -
AtomicInteger和volatile
由volatile关键字修饰的变量拥有的可见性和部分顺序性,更书面化的语言叫做不允许线程内部缓存和重排序AtomicInteger中的方法线程安全,它拥有一个volatile修饰的int类型的value值,我们通过AtoicInteger对象对value进行操作是线程安全的,以getAndIncrement()方法为例说明它是如何实现的,我们先看下源码public final int getAndIncrement() { return unsafe.getAndAddInt(th原创 2020-06-15 00:31:16 · 1972 阅读 · 2 评论 -
IDEA克隆代码后在右下角没有git分支
解决办法:1.VCS--->Enable Version Control Integration2.选择要关联的版本工具原创 2017-12-11 11:25:59 · 7002 阅读 · 2 评论 -
Spring中IOC和AOP的实现原理
IOC:java程序中的每个业务逻辑至少需要两个或以上的对象来协作完成,通常,在使用其他的合作对象时,均要使用像new object() 这样的语法来完成合作对象的申请工作。你会发现:对象间的耦合度高了。而IOC的思想是:Spring容器来实现这些相互依赖对象的创建、协调工作。对象只需要关心业务逻辑本身就可以了。从这方面来说,对象如何得到他的协作对象的责任被反转了(IOC、DI)。IOC是...原创 2017-12-18 22:17:58 · 9797 阅读 · 0 评论 -
java常量池
包括:class文件常量池和方法区中的运行时常量池可以看:https://www.jianshu.com/p/c7f47de2ee80一些文中总结:常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。例如字符串常量池,在编译阶段就把所有的字符串文字放到一个常量池中。(1)节省内存空间:常量池中所有相同的字符串常量被合并,只占用一个空间。(2)节省运行时间:比较...原创 2018-01-09 10:05:54 · 233 阅读 · 0 评论 -
java回调
回调的核心就是回调方将本身即this传递给调用方回调https://www.cnblogs.com/xrq730/p/6424471.htmlExecutorService、Callable 、futurehttp://www.cnblogs.com/xrq730/p/4872722.htmlpublic class CallableTest { public ...转载 2019-03-11 16:26:24 · 123 阅读 · 0 评论 -
java程序编译、运行的过程简介
https://www.cnblogs.com/qiumingcheng/p/5398610.htmljava程序执行包括了编译、运行两部分java文件首先被编译成字节码,jvm运行字节码文件编译:在编译一个类的时候,如果其依赖的一个类还没有被编译,被依赖的类就会先被编译,然后引用,否则直接引用,当找不到被依赖类的java或class文件时,就会报cant find symbol错误...原创 2019-05-20 15:00:59 · 1297 阅读 · 0 评论 -
kafka相关
1.为什么使用kafka?以实际业务中用户提现为例,比如一笔交易发生,这笔交易是否是欺诈交易,这笔交易是否已经达到限额了,相关用户是否在黑名单中,交易结果联动短信、Email等渠道通知用户……等等,也许一笔简单的交易,就要与反欺诈系统、黑名单系统、限额或授信管控系统、短信邮件系统进行通讯(1)解耦,避免子系统之间过度依赖(2)异步处理,使主程序关注自己的业务点(即正常交易逻辑的处理),将其...原创 2019-05-23 22:42:46 · 2724 阅读 · 0 评论 -
Shiro+JWT实现用户登陆认证,权限控制
shiro用来认证用户及权限控制,jwt用来生成一个token,暂存用户信息。为什么不使用session而使用jwt?传统情况下是只有一个服务器,用户登陆后将一些信息以session的形式存储服务器上,然后将sessionid存储在本地cookie中,当用户下次请求时将会将sessionid传递给服务器,用于确认身份。但如果是分布式的情况下会出现问题,在服务器集群中,需要一个sess...原创 2019-06-05 16:49:13 · 17784 阅读 · 3 评论 -
集合类相关
ConcurrentHashMap简介:https://www.jianshu.com/p/1a01d15df3f0,分段锁,默认分为16个segment(段),可以在创建的时候进行自定义,但设置后就不可以再进行更改,以后的扩容都是针对每一个segment的,segment相当于一个hashtable(线程安全,hashtable线程不安全),在每一个segment上加锁,当多线程操作时,只要不是...原创 2019-06-01 17:44:45 · 102 阅读 · 0 评论 -
网站如何高可用
1.前后端分离:可以使用更加轻量级的web容器如nginx部署静态资源,实现真正的前后端解耦;且可以同时水平扩展前后端服务器;减少后端服务器的并发/负载压力,即使后端服务暂时超时或者宕机了,前端页面也会正常访问,只不过数据刷不出来而已。2.拆分微服务,拆分后的服务支持分布式多实例(集群)部署,从而达到按需扩展的目的,在应对突发的流量暴增时,如营销活动等,可以迅速按需扩展,提高站点的可用性。...原创 2019-06-03 19:47:28 · 413 阅读 · 0 评论 -
classLoader双亲委派机制
java文件会被编译成class文件,而class文件就是通过类加载器classloader进行加载的,java中有BootStrapClassLoader、ExtClassLoader、AppClassLoader三类加载器。BootStrapClassLoader是使用c++编写的,用于加载java核心类库,是由jvm在启动时创建的,主要是加载JAVA_HOME/jre/lib目录下的类库...原创 2019-06-10 19:14:23 · 4116 阅读 · 1 评论 -
spring中BeanFactory和FactoryBean的区别
BeanFactory是一个factory,是spring的IOC的工场,而FactoryBean是个bean,它们两个只是名字很相似。BeanFactory是一个IOC工场,用于管理和创建Bean,它是IOC最基本的接口,为其他的IOC工场提供规范,很多其他的spring容器都实现了它,如ApplicationContext、XMLBeanFactory等。它提供了通过bean的名字获取实例...原创 2019-06-17 22:45:44 · 3836 阅读 · 0 评论 -
Spring 注解
Spring注解@Component、@Repository、@Service、@Controller区别所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层(dao层)、业务层(seriver层)和控制层(controller层)分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释,而用 @Component 对那些比较中原创 2017-11-30 16:34:40 · 273 阅读 · 0 评论 -
与10.110.12.30 mask 255.255.255.224属于同一网段的主机IP地址是?
IP和子网掩码转换为2进制分别为:00001010.00001010.01100100.00011110 和11111111.11111111.11111111.111000000它们两个进行或运算得到它的网络地址是 00001010.00001010.01100100.000 || 00000则它的后6位的取值范围是00001~11110即1~30(主机地址不能全为0和1,即少了0原创 2017-09-17 16:13:31 · 26433 阅读 · 3 评论 -
final finalize finally的区别
先简单做个总结final 可以用来修饰变量、方法、类、方法中的参数(1)当修饰变量时,如果它是一个基本类型,说明这是一个常量,它的值是不可以被改变的;如果修饰的是一对象,那么说明这个变量所被赋予的引用是不可改变的,但是这个引用所对应的对象中的属性是可以发生变化的;另外必须对final修饰的变量进行初始化,变量又分为静态和非静态两种类型,对于非静态变量,可以在声明它的时候进行初始化,原创 2017-09-20 11:03:36 · 434 阅读 · 0 评论 -
有关异常的常见面试题
一、java中的两种异常:受检查异常和不受检查异常不受检查异常又叫做运行时异常,这些异常都是runtimeException的子类,如NullPointerException空指针异常、IndexOutOfBoundsException下标越界异常。这一类异常是在程序运行时可能发生的,不要求一定要捕获该异常,一般是因为错误的程序逻辑引起的,想要解决此类异常需要仔细排查程序。受检查异常指的时原创 2017-09-18 16:27:49 · 632 阅读 · 0 评论 -
JAVA中Object类中的几个方法
protected Object clone()创建并返回此对象的一个副本。 boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。 protected void finalize()当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 Class getClass()返回此 Object 的运行时类。 in转载 2017-09-21 11:30:16 · 966 阅读 · 0 评论 -
int Integer
在jdk1.5的环境下,有如下4条语句:Integer i01 = 59;int i02 = 59;Integer i03 =Integer.valueOf(59);Integer i04 = new Integer(59);以下输出结果为false的是:A、System.out.println(i01== i02);B、System.out.println(i01== i03);原创 2017-09-21 13:52:17 · 543 阅读 · 0 评论 -
解决hash冲突的方法
1)开放定址法:其中 m 为表的长度对增量di有三种取法:线性探测再散列 di = 1 , 2 , 3 , ... , m-1平方探测再散列 di = 1 ² , -1² , 2² , -2² , 3² , -3² , ... , k² , -k²随机探测再散列 di 是一组伪随机数列例子:2)链地址法原创 2017-09-21 18:16:26 · 252 阅读 · 0 评论 -
在try catch finally 中有return时的返回结果
结论: 1、不管有木有出现异常,finally块中代码都会执行; 2、当try和catch中有return时,finally仍然会执行; 3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的; 4、f...原创 2017-09-20 11:38:58 · 1118 阅读 · 0 评论 -
String类总结之内存分析
转载自:http://blog.csdn.net/lvyoujt/article/details/50561890先上实例代码:[java] view plain copypublic class StringDemo { public static void main(String[] args) {转载 2017-10-22 11:52:09 · 284 阅读 · 0 评论 -
内部类
1.概述:把类定义在其他类的内部,这个类就称为内部类。如:类B定义在类C中,B就是C的内部类。class C{//B为类A的内部类class B{}}2.访问特点:(1)内部类可以直接访问外部类的成员,包括私有成员;(2)外部类访问内部类成员,必须创建对象,通过对象访问。原创 2017-10-13 14:29:22 · 225 阅读 · 0 评论 -
transient关键字
我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。这个类的有些属性需要序列化,而其他属性不需要被序列化;java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要原创 2017-10-13 14:32:24 · 144 阅读 · 0 评论 -
&&和&的区别
两者都可以表示逻辑与运算,但是不同的是如果使用&&当前一条件不成立时不会执行后面的判断,可是如果使用&会判断后面的条件,如a=10 if(a==11&&++a>0) 输出a, a=10 if(a==11&++a>0) 输出a, a=11此外&可以表示按位与运算,相同的两个数字都为1,则为1;若有一个不为1,则为0原创 2017-10-13 14:59:33 · 361 阅读 · 0 评论 -
互斥量和信号量
(1)互斥量用于线程的互斥,信号量用于线程间的同步问题,互斥主要为资源的互斥,一个资源同一时刻只允许一个线程对它进行使用,但互斥无法限制线程对资源的访问顺序,同步是指多个线程的执行顺序,比如有A B C三个线程,可以通过信号量的获取顺序的控制他们的执行先后顺序(2)互斥锁只能为0或1,信号量可以为非0整数(3)互斥锁由同一个一个线程获取和释放,信号量可以由一个线程释放由另一个线程获取原创 2017-10-13 16:01:19 · 164 阅读 · 0 评论 -
Array、arraylist、linkedlist
Array和arraylist的区别:(1)array和arraylist的底层实现都是数组,但是arraylist实现了list接口(2)array的长度是一定的,arraylist的长度是可变的(3)array中可以存储基本类型数据和对象,arraylist中只能存储对象(4)arraylist提供了更多的方法,add(item)添加一条数据,addall(list)将list中的原创 2017-10-13 16:04:33 · 204 阅读 · 0 评论 -
Comparable和Comparator接口
这两个接口时进行对象大小比较排序的功能,在comparable接口中有一个compareto(object a)方法,该方法比较的是传入的对象与实现compareble接口对象的大小,如person implement comparable 则person的对象现在就是一个可以比较大小的,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。Comparator接口包含compa原创 2017-10-13 16:10:04 · 230 阅读 · 0 评论 -
高性能IO设计模式之阻塞/非阻塞,同步/异步解析
做任何事最重要的第一步就是要把概念弄的清晰无误不是么?在这里就是:阻塞,非阻塞,同步,异步。1. 阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,说白了是一种读取或者写入操作函数的实现方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函数会立即返回一个状态值。2. 同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进原创 2017-09-22 10:41:19 · 297 阅读 · 0 评论 -
Enumeration和iterator
14.(1)enumeration不能在遍历过程中删除集合的元素,iterator可以调用自己的remove()方法删除元素,但是如果使用其他方式改变被遍历的集合将会抛出异常。(2)iterator比enumeration安全,因为他不允许其他的线程改变被遍历的集合中的元素,所以更加的安全(3)Enumeration比iterator速度快,占用内存小原创 2017-10-13 16:32:05 · 240 阅读 · 0 评论 -
Hashset和treeset
相同点 两者都实现了set接口,集合中的元素都不允许重复不同点:hashset的底层是hashmap,它的元素判断重复是靠hashcode()和equals()方法实现了,并且它存储的元素是无序的;treeset的底层是treemap,而它判断元素是否重复是依靠存储进treeset的元素的类都要继承comparable接口,重写其中的compareto方法来实现的,存储的元素有序。原创 2017-10-13 16:32:42 · 430 阅读 · 0 评论 -
hashcode和equals方法
Object类中的equals方法默认是public boolean equals(Object obj) { return (this == obj);}可见默认的equals方法,直接调用==,比较对象地址。默认情况下,Object中的hashCode() 返回对象的32位jvm内存地址String类源码中重写的hashCode方法如下,public int hashCo原创 2017-10-16 16:55:45 · 176 阅读 · 0 评论 -
互斥锁 自旋锁 读写锁的区别
互斥锁:共享资源的使用是互斥的,即一个线程获得资源的使用权后就会将该资源加锁,使用完后会将其解锁,如果在使用过程中有其他线程想要获取该资源的锁,那么它就会被阻塞陷入睡眠状态,直到该资源被解锁才会被唤醒,如果被阻塞的线程不止一个,那么它们都会被唤醒,但是获得资源使用权的只有一个线程,其它线程又陷入沉睡.可重入锁:同一个线程可以多次获得该资源锁,别的线程必须等该线程释放所有次数的锁才可...原创 2017-09-12 19:52:16 · 3440 阅读 · 2 评论