面试-Java SE

Java基础

一、Java中是如何支持正则表达式操作的?

答:Java中的String类提供了支持正则表达式操作的方法,包括:matches()、replaceAll()、replaceFirst()、split()。此外,Java中可以用Pattern类表示正则表达式对象,他提供了丰富的API进行各种正则表达式操作。

二、请你简单描述一下正则表达式及其用途?

答:在编写处理字符串的程序时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。计算机处理的信息更多的时候不是数值而是字符串,正则表达式就是在进行字符串匹配和处理的时候最为强大的工具,绝大多数语言都提供了对正则表达式的支持。

三、请你比较一下Java和JavaScript?

答:JavaScript与Java是两个公司开发的不同的两个产品。Java是原Sun公司推出的面向对象的程序设计语言,特别适合与互联网应用开发;而JavaScript是Netscape公司的产品,为了扩展其浏览器的功能而开发的一种可以嵌入Web页面中运行的基于对象和事件驱动的解释性语言。下面对于两种语言的异同如下比较:

①基于对象和面向对象:Java是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象。JavaScript是种脚本语言,它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是一种基于对象和事件驱动的编程语言,因而它本身提供了非常丰富的内部对象供设计人员使用。

②解释和编译:Java的源代码在执行之前,必须经过编译。JavaScript是一种解释性编程语言,其源代码不需经过编译,由浏览器解释执行。

③强类型变量和弱类型变量:Java采用强类型变量检查,即所有变量在编译之前必须作声明;JavaScript中变量是弱类型的,甚至在使用变量前可以不作声明,JavaScript的解释器在运行时检查推断其数据类型。

④代码格式不一样。

四、在Java中如何跳出当前的多重嵌套循环?

答:带标签的break语句,就是在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。

五、请你讲讲&和&&的区别?

答:&运算符有两种用法:①按位与;②逻辑与。&&运算符是短路与运算。两者都要求运算符左右两端的布尔值都是true整个表达;式的值才是true。&&之所以称为短路与是因为如果&&左边的表达式的值为false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们经常用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username!=null&&!username.equals(" "),  二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则则会产生空指针异常。

六、int和Integer有什么区别?

答:为了能够将基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型。从java5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转换。Java为每个原始类型提供了包装类型:

原始类型:boolean,char,byte,short,int,long,float,double;

包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double.

七、请你说明String和StringBuffer的区别?

答:它们可以存储和操作字符串,既包含多个字符的字符数据。String类提供了数值不可改变的字符串。而这个StringBuffer类型提供的字符串进行修改。当字符数据要改变的时候就可以用StringBuffer,它也是线程安全的。

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

答:不是。java.lang.String类是final类型的,因此不可以继承这个类,不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类。

九、请你讲讲数组(Array)和列表(ArrayList)的区别?什么时候应该使用Array而不是列表?

答:①Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。

②Array大小是固定的,ArrayList的大小是动态变化的。

③ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。

十、请你解释什么是值传递和引用传递?

答:值传递是对基本类型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量;

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

十一、请你说说Lamda表达式的优缺点?

答:优点:①简洁;②非常容易并性计算;③可能代表未来的编程趋势;

缺点:①若不能进行并行计算,很多时候计算速度没有比传统的for循环快;②不容易调试;③若其他程序员没有学过Lamda表达式,代码不容易若其他程序员看懂。

十二、你知道java8的新特性吗?请你简单介绍一下?

答:①Lambda表达式-Lambda允许把函数作为一个方法的参数放进方法中。

②方法引用:可以直接引用已有的Java类或对象的方法或构造器,与Lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。

③默认方法:默认方法就是在一个接口里面有了一个实现的方法。

十三、请你说明符号“==”比较的是什么?

答:“==”对比两个对象基于内存的引用,如果两个对象的引用完全相同(指向同一对象)时,“==”操作将返回true。“==”如果两边是基本类型,就是比较数值是否相等。

十四、请你解释为什么重写equals?还要重,写hashCode?

答:在HashMap中,如果要比较key是否相等,要同时使用这两个函数!因为自定义类的hashMap()方法继承于Object类,其hashCode码为默认的内存地址,这样即使有相同含义的两个对象,比较也是不相等的。HashMap中的比较key是这样的,先求出key的hashcode(),比较其值是否相等,若相等在比较equals(),若相等则认为她们是相等的。如equals()不相等则认为他们不相等。如果只重写了hashcode而不重写equals()方法,当比较equals()时只看他们是否为同一对象(即进行内存地址的比较),所以必定要两个方法一起重写。

十五、请你介绍一下map分类和常见情况?

答:java.util.Map,它有四个实现类,分别为HashMap,HashTable,LinkedHashMap和TreeMap.

①HashMap:最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。HashMap最多只允许一条记录的键为null;允许多条记录的值为null.HashMap不支持线程同步,即任一时刻可以有可以有多个线程同时写HashMap,可能会导致数据的不一致。

②HashTable:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了HashTable在写入时会比较慢。

③LinkedHashMap:是HashMap的一个子类,保存了记录的插入顺序,在用Iterator遍历时,先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比LinkedHashMap慢,因此LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和它的容量有关。

④TreeMap:实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。

总结:一般情况下,我们用的最多的是HashMap,在Map中插入、删除和定位元素,HashMap是最好的选择。但如果您要按自然排序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排序。HashMap是一个常用的Map,它根据键的hashcode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为null,允许多条记录的值为null。HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。HashTable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写HashTable,因此也导致了HashTable在写入时会比较慢。LinkedHashMap保存了记录的插入顺序,在用Iterator遍历时,先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢,TreeMap能够把它保存的记录根据键排序,默认是升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。

发布了17 篇原创文章 · 获赞 26 · 访问量 7433

猜你喜欢

转载自blog.csdn.net/qq_41629684/article/details/104050226
今日推荐