面试题之:java基础1

请你谈谈java中是如何支持正则表达式操作的?

参考回答:
java中的String类提供了支持正则表达式的操作方法,包括matches()、replaceAll()、replaceFirst()、split()。此外,hava中可以用Pattern类表示正则表达式对象,踏提供了丰富的api进行各种正则表达式的操作。比如:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
class RegExpTest {
    
    
    public static void main(String[] args) {
    
    
        String str = "成都市(成华区)(武侯区)(高新区)";
        Pattern p = Pattern.compile(".*?(?=\\()");
        Matcher m = p.matcher(str);
        if(m.find()) {
    
    
            System.out.println(m.group());
        }
    }
}

请你比较一下java和javaScript?

参考回答:
java和javascript是两个公司开发的不同的两个产品,java是sun microsystems公司推出的面向对象的程序设计语言,特别适合于互联网应用程序的开发,而javascript是netscape公司的产品,为了扩展netscape浏览器功能而开发的一种可嵌入web页面中运行的基于对象和时间驱动的解释性语言,javascript的前身是LiveScript;而java的前身是Oak语言
下面对两种语言间的异同进行一下比较:

  • 基于对象和面向对象:java是一种很饿正的面向对象的语言,即使开发简单的程序,必须设计对象;javascript是种脚本语言,它可以用来制作与网络无关的,与用户交互的作用的复杂软件,它是一种基于对象和事件驱动的编程语言,因而它本身提供了非常丰富的内部对象供设计人员使用。
  • 解释和编译:java的源代码在执行之前,必须经过编译。javascript是一种解释性编程语言,其源代码不需要经过编译,由浏览器解释执行(目前几乎所有的浏览器都使用了JIT(即时编译器)技术来提升javascript的运行效率)
    • 强类型变量和类型弱变量:java采用强了性的变量检查,即所有的变量在编译之前必须做声明;javascript中变量是弱类型的,甚至在使用变量之前可以不做声明,javascript的解释器在运行时检查推断其数据类型
  • 代码格式不一样。

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

参考回答:
在最外层循环前加一个标记A,然后用breakA;就可以跳出多重循环(java中支持带标签的break和continue,因为他不会让你的程序变得更优雅,很多时候甚至会有相反的作用,所以这种语法其实不知道更好),根本不能进行字符串的equals比较,否则会产生nullpointerException异常

int和Integer有什么区别?

参考回答:
java设计一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本的数据类型,但是为了能够将这些基本数据类型当成对象操作,java为每一个基本数据累西ing都引入了对应了包装类型(wrapper class),int的包装类型就是integer,从java5开始引入了自动装箱/拆箱机制,使得两者可以互相转换。

  • 原始类型:boolean,char,byte,short,int,long,float,double
  • 包装类型:Boolean,Charcter,Byte,Short,Integer,Float,Double

请你说明String和StringBuffer的区别

参考回答:
JAVA平台提供了两个类,String和StringBuffer,他们可以存储和操作字符串,即包含了多个字符的字符数据,这个String类提供了数值不可以改变的字符串,而这个StriingBuffer类提供的字符串进行修改,当你知道字符数据要改变的时候,你就可以使用这个StringBuffer。典型的,你可以使用StringBuffers来动态的构造字符数据。

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

参考回答:
Array和ArrayList的不同点

  • Array可以包含基本类型和对象类型,而ArrayList只能包含对象类型
  • Array大小是固定的,ArrayList的大小是动态变化的。
  • ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。对于基本类型的数据,集合使用自动装箱来减少编码工作量,但是当处理固定大小的基本数据类型的时候这种方式相对比较慢

请你解释一下什么事值传递和引用传递?

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

请你说说Lamda表达式的优缺点

优点:

  1. 简洁
  2. 非常容易并行计算
  3. 可能代表未来的编程趋势

缺点:

  • 若不用并行计算,很多时候计算速度没有比传统的for循环快(并行计算有时需要预热才能显示出效率优势)
  • 不容易调试
  • 若其他程序员没有学过lambda表达式,代码不容器让其他语言的程序员看懂。

java8的一些新特性

参考回答:

  • Lambda表达式-Lambda表达式允许把函数作为一个方法的参数(函数作为参数传递进方法中)
  • 方法引用-方法引用提供了非常有用的语法,可以直接引用已有的java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使用语言的构造更紧凑简洁。减少代码的冗余。
  • 默认方法-默认方法就是一个在接口里面有了一个实现的方法
  • 新工具-新的编译工具,如:Nashorn引擎 JJS、;类依赖分析器jdeps
  • Stream API-新添加的Stream API(java.util.stream)把正真的函数式编程风格引入到java中。
  • Data Time API -加强了对日期和时间的处理
  • Optional类,-Optional类已经成为了java8类库的一部分,用来解决空指针异常
  • Nashorn、javaScript引擎-java8提供了一个新的Nashorn JavaScript引擎,他允许在JVM上运行特定的javascript应用。

请你解释一下为什么重写了equals还要重写hashcode?

HashMap中,如果要比较key是否相同,要同时使用这两个函数,因为自定义的类的hashcode()方法继承与Object类,其hashcode码为默认的内存地址,这样即便有相同含义的两个对象,比较也是不相等的。HashMap中的比较key是这样的:
先求出key的hashcod(),比较其值是否等,若相等再使用equals()不想等则认为他们不想等。如果知识重写了hashcode()不重写equals()方法,当比较equals()时没知识看他们是是否是同一对象(即只是内存地址的比较),所以必须要两个方法一起重写,HashMap用来判断key是否相等的方法,其实是调用了hashset判断加入元素是否相等,重载hashcode()是为了同一个key,能得到相同的Hashcode,这样hashMap就可以定义到我们的key上,重载equals()是为了向HashMap表明当前对象和key上所保存的对象是相等的,这样我们才真正的获得了这个key所对应的这个键值对。

请你解释一下map的分类和常见的情况

在这里插入图片描述

参考回答:
java为数据结构中的映射定一个接口java.util.map 它有四个实现类,分别是HashMap Hashtable LinkedHashMapTreeMap。
Map主要用于存储键值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复

  • HashMap是一个最常用的map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得的数据的顺序是完全随机的。HashMap最多只允许一条记录的键为null,允许多条数据的值为Null,HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致,如果需要同步,可以使用Collection的sysnchronziedmap方法可以使用HashMap具有同步的能力,或者直接使用ConcurrentHashMap。
  • Hashtable于Hashmap类似,它继承Dictionary类,不同的是,它不允许记录的键或者值为空,它支持线程的同步,即任一时刻只有一个线程能写hashtable,因此也直接导致了Hashtable在写入的时候比较慢,所以通常不会使用
  • LinkedHashMap 是HashMap的一个子类,保存了记录的插入顺序,在使用Iterator遍历LinkedHashMap的时候,先得到的记录肯定是先插入的,也可以在构造的时候使用带参数,按照应用的次数排序,在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap的容量很大,实际数据比较少的时候,遍历起来可能会比LinkedMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和它的容量有关。
  • TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序比较器,当用Iterator遍历TreeMap的时候,得到的记录是排过序的。

一般情况下,我们使用最多的是HashMap,在Map中插入、删除、和定位元素,HashMap是最好的选择,但是如果按照自然顺序或者自定义顺序进行遍历键,那么TreeMap会更好,如果要输出的顺序和输入的相同,那么使用LinkedHashMap可以实现,他还可以按照读取顺序来排序。

猜你喜欢

转载自blog.csdn.net/l2470334493/article/details/108818106
今日推荐