JAVA后端开发面经7

​面经来源于github上的

Java-Interview

在学习时,用自己的语言解释​

 61.去掉一个Vector集合中重复的元素

第一种方法: 

Vector newVector = new Vector();
For (int i=0;i

第二种方法:

HashSet set = new HashSet(vector);

62.Collection 和 Collections的区别。

Collection是集合类的上级接口,继承与他的接口主要有Set 和List。

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

63.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

Set里的元素是不能重复的,元素重复与否是使用equals()方法进行判断的。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:

String a=new String("foo");
String b=new String("foo");

两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。

简单来说:equals比较数据的内容,==比较数据的首地址(也可以理解为存放这个数据的地址)

64.你所知道的集合类都有哪些?主要方法?

最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。

Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。(也就是键值对:key-value

记住的一些思想就是:

  • List类会有get(int index)这样的方法,因为它可以按顺序取元素,而set类中没有get(int index)这样的方法。
  • List和set都可以迭代出所有元素,迭代时先要得到一个iterator对象,所以,set和list类都有一个iterator方法,用于返回那个iterator对象。
  • map可以返回三个集合,一个是返回所有的key的集合,另外一个返回的是所有value的集合,再一个返回的key和value组合成的EntrySet对象的集合,map也有get方法,参数是key,返回值是key对应的value。

65.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

对。

如果对象要保存在HashSet或HashMap中,它们的equals相等,那么,它们的hashcode值就必须相等。(hashCode的作用主要是用于查找的快捷性,比如在散列存储结构中确定对象的存储地址。

如果不是要保存在HashSet或HashMap,则与hashcode没有什么关系了,这时候hashcode不等是可以的,例如arrayList存储的对象就不用实现hashcode,当然,我们没有理由不实现,通常都会去实现的。

66.TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常!

原作者写的好,通俗易懂,不用解释了

当前的add方法放入的是哪个对象,就调用哪个对象的compareTo方法,至于这个compareTo方法怎么做,就看当前这个对象的类中是如何编写这个方法的。

代码:

public class Parent implements Comparable {
    private int age = 0;
    public Parent(int age){
        this.age = age;
    }
    public int compareTo(Object o) {
        // TODO Auto-generated method stub
        System.out.println("method of parent");
        Parent o1 = (Parent)o;
        return age>o1.age?1:age

 

67.说出一些常用的类,包,接口,请各举5个。

常用的类:BufferedReader    BufferedWriter   FileReader     FileWirter       String     Integer

java.util.Date,System,Class,List,HashMap

常用的包:java.lang 、java.io 、java.util 、java.sql ,javax.servlet、org.apache.strtuts.action

常用的接口:Remote List Map Document NodeList,Servlet,HttpServletRequest,HttpServletResponse,HttpSession

这个没有啥好解释的,就是平常做项目用到的东西,不知道的可以去查一下

68.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

字节流,字符流。

字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

69.字节流与字符流的区别

字节流和字符流的主要区别在于它们处理数据的方式和底层表示不同。

  1. 组成:字节流是由字节组成的,而字符流是由字符组成的。
  2. 处理方式:字节流主要用于处理二进制数据,而字符流主要用于处理文本数据。字节流的处理方式是按字节进行的,而字符流的处理方式则是根据虚拟机的编码来处理,需要进行字符集的转换。
  3. 读写单位:字节流的读写单位是字节(8bit),而字符流的读写单位是字符,根据码表映射进行读写,有时候可能会一次性读取多个字节。
  4. 缓冲区要求:字节流在操作时本身不会用到缓冲区,是对文件本身进行操作。而字符流在操作的时候使用到了缓冲区,所以在操作字符流的时候,不关闭流是没办法对写入的数据进行保存的。
  5. 处理对象:字节流能处理所有类型的对象,如MP3、AVI视频文件、图片等。而字符流一般只能处理字符类数据。

总的来说,字节流和字符流的区别主要表现在处理方式、读写单位、缓冲区要求、处理对象等方面。在处理纯文本数据时,优先考虑使用字符流;其他情况则使用字节流。

70.什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。

Java序列化是指将一个Java对象转换为字节流的过程,以便将其传输到网络上或者存储到磁盘上。一旦对象被序列化,它就可以被反序列化回其原始对象状态。这个过程通常用于实现远程方法调用(RPC)、保存应用程序状态等。

要实现Java序列化,需要实现Serializable接口。Serializable接口是一个标记接口,没有任何方法需要实现。当一个类实现了Serializable接口后,该类的对象就可以被序列化和反序列化。

例如,要将java对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java对象变成某个格式的字节流再传输。

但是,jre本身就提供了这种支持,我们可以调用OutputStream的writeObject方法来做,如果要让java 帮我们做,要被传输的对象必须实现serializable接口,这样,javac编译时就会进行特殊处理,编译的类才可以被writeObject方法操作,这就是所谓的序列化。需要被序列化的类必须实现Serializable接口,该接口是一个mini接口,其中没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的。

例如,在web开发中,如果对象被保存在了Session中,tomcat在重启时要把Session对象序列化到硬盘,这个对象就必须实现Serializable接口。如果对象要经过分布式系统进行网络传输或通过rmi等远程调用,这就需要在网络上传输对象,被传输的对象就必须实现Serializable接口。

你可能感兴趣的:(java面经基础,java,开发语言,学习,经验分享,面试,spring,boot,java-ee)