java支持的数据类型有哪些?什么是自动拆箱和装箱

 java支持基本数据类型和引用数据类型。基本数据类型有八种,分别为 int char double float boolean short long byte。除了基本数据类型都是引用数据类型比如 string。
 自动拆箱就是把包装类型的数据转化成基本数据类型,自动装箱就是把基本数据类型转化为包装数据类型。比如:int -> Integer
基本数据类型比如int默认值是0,而Integer默认值是null,Integer必须实例化之后才能使用,并且存储的是指向该对象的引用。在比较中,new Integer之间的比较是false;对于非new Integer和new的进行对比,由于非new的指向的常量池中的,new的是指向新建的堆中的,所以地址不一样,是false;
 对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false。

什么是值传递,什么是引用传递

 值传递是对于基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
 引用传递一般是对于对象型而言的,传递的是该对象地址的一个副本,并不是原对象本身,所以对引用对象进行操作会同时改变原对象。一般认为,java内的传递都是值传递。

Array和ArrayList有什么区别,使用场景讲述一下

 Array是静态数组,定义大小的数组,ArrayList是动态数组,一开始没有初始化,插入一个数之后初始化容量为10,会发生扩容,扩容机制是重新创建一个新的ArrayList,大小是原来的1.5倍(Array可以包含基本类型和对象类型,ArrayList只能包含对象类型,并且arrayList提供了更多的方法,ArrayList数组最大长度为:0x7ffffff7,超过就会舍弃多余元素)

你了解大O符号吗,给出不同数据结构的例子吗?

 大O符号是表示时间或者空间复杂度的最大值。比如冒泡排序O(n2) 堆排序O(logn)快速排序O(logn)。也就是说大O符号是算法的规模或者是性能最坏的场景下的程度,可以描述内存消耗,因为集合实际上是数据结构,我们一般使用大O符号基于时间,内存和性能来选择最好的实现。

String是最基本的数据类型吗?

 java中基本的数据类型有八种,分别是 int short char byte float double long boolean。string是引用数据类型,它是用final进行修饰的类型,不可继承,修改。对于StringBuffer和StringBuilder,前者是线程安全的,使用了synchronize进行修饰,后者是线程不安全的,用append等方法较快。String中常用的方法有比如:index of,trim,equals,replace,replaceAll,split等。

&和&&的区别,|和||的区别

 &有逻辑与和按位与,其中&是前后都要计算是否正确,&&如果前面是false,后面就不会计算了。
 |表达式两边都会进行计算,||如果左边是true就不计算了在登陆判断是要用&&而不用&的原因:如果验证用户登陆时用户名不是null且不是空字符串,要用name!=null&&name.equals(“”),如果用&,前者是为null,根本不能进行字符串的equals比较,会报出空指针异常。

如何跳出多重循环

 在需要跳出的多重循环前添加A:,然后在需要跳出的地方写break A

java和javaScript的相同和不同

 java是面向对象的,是解释性语言,强类型;javaScript是脚本语言,也是解释性语言,弱类型。两个公司开发的,JS是一种可嵌入Web页面中运行的基于对象和时间去懂的解释性语言。代码格式不一致。

正则表达式的看法,用途,思考

 正则表达式是描述和查找符合某些复杂规则的字符串的需要,可以进行字符串匹配和处理,因为大多数计算机处理的信息不是数值而是字符串。正则表达式可以匹配字符串。string类中提供的正则表达式有,replaceAll,split,matches等,其中java中可以用Pattern类表示正则表达式对象

Synchronized锁,Lock锁对比;悲观锁,乐观锁场景;锁升级的过程;Synchronized锁修饰静态方法锁住了什么,成员方法锁住了什么?

 Synchronized锁是关键字,Lock锁是接口;前者可以自动释放锁,后者需要在finally代码块中释放;前者不能知道是否已经有锁,后者可以用tryLock来获取,前者如果没有获取到锁会一直等待,后者可以通过设置时间等进行中断。
 悲观锁是指对什么都不放心,每一次读写操作都加锁,乐观锁是指以一种乐观的态度看待,认为不会修改代码,每一次读写操作前,都比较一下是否修改过,如果有就抛出异常,如果没有就读或者写。乐观锁用的是CAS, compare and swap,传入2个值,一个是期待的值,一个是修改的值,每一次修改都是使得next增加,但是会引发ABA问题,可以通过用版本号,修改时间等。
 锁升级的过程,一开始判断是不是无锁的状态,接着如果我去获取资源,那么我会对获取这个资源是偏向的,产生一个偏向锁,就是下次还是获取资源时,优先让这个线程去获取锁,如果这个线程没有获取到锁,就会升级为轻量级的锁,用CAS乐观锁,不断的尝试,如果没有成功,会自旋,然后自旋到一定次数就会变成重量级的锁,也就是使用Synchronized。
 Synchronized锁修饰静态方法锁住的是类,如果是成员方法锁住的是方法。如果是成员方法的话,线程获取的是当前调用该方法的对象实例的对象锁。