java基础面试

     2022-03-20     686

关键词:

 * 以下内容是我在准备java面试的时候觉得有用,面试官很可能会问的一些问题

 * 内容(除了代码)详情来自网络(学习的时候遇到不会的百度的 (*^__^*) )

 * 如果大家发现有什么地方不对,请告诉我。谢啦!!☆⌒(*^-゜)v

 

1:java的基础类型

Java语言提供了八种基本语言

boolean

char    

byte      

8位

short

 

 

16位

int

float

 

32位

long

double

 

64位

注意:String本身就是一个对象而不是基本数据类型,String的变量名是对String类的引用

2:String、StringBuffer、StringBuilder之间的区别

2.1:三者的执行速度:  String<StringBuffer<StringBulider

2.2:String是字符串常量,也就是说值是不会改变的,StringBuffer和StringBuilder是字符串变量,是可以对值进行操作的。

public class StringTest  {   

public static void main(String argv[]){

String s = "abc";

s = s+"def";

System.out.println("s="+s);//s=abcdef

/*

 * 我们明明就是改变了String型的变量s的,为什么说是没有改变呢?

 * 其实这是一种欺骗,JVM是这样解析这段代码的:

 * 首先创建对象s,赋予一个abc

 * 然后再创建一个新的对象s用来执行第二行代码,

 * 也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,

 * 由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,

 * 而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多低。

 */

    }  

}

2.3:StringBulider和StringBuffer的区别

StringBulider是线程非安全的,StringBuffer是线程安全的。JVM不能保证StringBuilder操作是安全的,虽然他速度快,但可以保证StringBuffer是可以确定操作的。但是因为大多数操作是在单线程环境下完成的,所以大多数情况下建议使用StringBuilder是因为速度问题。

2.4:对三者进行总结:如果操作少量的数据,使用String

单线程操作字符串缓冲区下大量的数据使用StringBulider

多线程操作字符串缓冲区下大量的数据使用StringBuffer

3:类型之间的转换

public class StringTest  {   

public static void main(String argv[]){

//String转化为int float double

String s = "123";

int i=Integer.parseInt(s);

float f = Float.parseFloat(s);

double d = Double.parseDouble(s);

System.out.println("i="+i+" f="+f+" d="+d);

System.out.println(Integer.valueOf(s));

//注意:虽然valueOf也可以将字符串转化为int等,但是valueOf调用的是parse的方法,返回的是已经封装的对象,如Integer等

//将int float double转化为String

String s1 = String.valueOf(i);

String s2 = String.valueOf(f);

String s3 = String.valueOf(d);

System.out.println("s1="+s1+" s2="+s2+" s3="+s3);

    }  

}

4:日期的用法

4.1:calendar和Date的区别

Date是类,Calendar是抽象类。在JDK1.0中,Date是唯一的代表时间的类,但因为Date不变实现国际化,所以JDK1.1版本开始,推荐使用Calendar类进行时间和日期的处理。

import java.util.Calendar;

import java.util.Date;

public class DateTest  {   

public static void main(String argv[]){

Calendar calendar = Calendar.getInstance();

Date date = calendar.getTime();

//Sun Jul 23 10:33:44 CST 2017(解释:星期天  7月 23号 10点33分44秒  2017年)

System.out.println(date);

//获取年月

int year = calendar.get(Calendar.YEAR);

int month = calendar.get(Calendar.MONTH)+1;//日期是0~11 所以要加1

System.out.println("year="+year+" month="+month);//year=2017 month=7

//获取日期

int day1 = calendar.get(Calendar.DAY_OF_YEAR);//本年的第204天

int day2 = calendar.get(Calendar.DAY_OF_MONTH);//这个月的第23天

int day3 = calendar.get(Calendar.DAY_OF_WEEK);//本周第一天(每周星期天开始)

int day4 = calendar.get(Calendar.DATE);

System.out.println("day1="+day1+" day2="+day2+" day3="+day3+" day4="+day4);//day1=204 day2=23 day3=1 day4=23

//获取时分秒

int hour1 = calendar.get(Calendar.HOUR_OF_DAY);

int hour2 = calendar.get(Calendar.HOUR);

int minute = calendar.get(Calendar.MINUTE);

int second = calendar.get(Calendar.SECOND);

//hour1=10 hour2=10 minute=59 second=26 10点59分26秒

System.out.println("hour1="+hour1+" hour2="+hour2+" minute="+minute+" second="+second);

    }  

}

4.2:DateFormat和SimpleDateFormat的区别

DateFormat可以直接使用、但其本身是一个抽象类,可以根据Locate指定的区域得到不同的日期显示效果。SimpleDateFormat是DateFormat的子类,一般情况下DateFormat类很少直接使用,而都是由SimpleDateFormat类完成。

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

public class DateTest  {   

public static void main(String argv[]){

Calendar calendar = Calendar.getInstance();

Date date = calendar.getTime();

 

DateFormat df1 = DateFormat.getDateInstance();

DateFormat df2 = DateFormat.getDateTimeInstance();

System.out.println(df1.format(date));//2017-7-23

System.out.println(df2.format(date));//2017-7-23 12:18:51

 

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年mm月dd日");

System.out.println(sdf.format(date));//2017年18月23日

    }  

}

5:集合List Set Map的区别

集合List有序,其中的元素可以重复

集合Set无序,其中元素不可以重复

集合Map是一种把键对象和值对象映射的集合,每个元素都包含一个键和一个值,键不允许重复,但是可以将任意多个键独享映射到一个值对象上。

6:文件

我对文件非常不熟悉,所以这块会单独列出来_(:зゝ∠)_

7:面向对象编程的特性

7.1:封装

封装即把对象的属性饥饿操作结合成为一个独立的整体,并尽可能的隐藏对象内部实现细节

public class User {
    private int id;
    private String name;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

这是一个典型的封装案例,user类的属性id和name都是用private隐藏起来了的,只能通过get和set方法来对属性进行操作

7.2:抽象

使用了关键词abstract声明的类叫作“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。

public abstract class AbstractTest {
    public abstract void get();
    public String set(){
        return "这是一个抽象类";
    }
}

7.3:继承

继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力

public class TestExtends {
  public static void main(String argv[]){
    B b = new B();
    b.get();
    //测试结果:正在执行子类…… 这是父类
  }
}
class A{
  public String toString(){
    return "这是父类";
  }
}
class B extends A{
  public void get(){
    System.out.print("正在执行子类…… "+toString());
  }
}

7.4:多态

多态可以分成编译多态(主要体现在重载上面)和运行多态(主要体现在继承上面)

8:重载和重写的区别

重载是同一个类里面有相同名称不同参数列表的方法

重写是子类里面创建一个除了方法体其余的(方法名,参数列表,返回值)都和父类一样的方法,覆盖父类方法

需要注意的是一个重写的方法不能抛除没有在基类中定义的非运行时异常,但是它可以抛出没有在基类中定义的运行时异常

原因:1:就算有运行时异常也是可以通过编译的,而如果出现非运行时异常就必须进行处理(throws或者try{}catch{})

   2:子类重写父类方法所抛出的一场不能超过父类的范畴

9:接口和抽象类的区别

9.1:抽象类里面的方法可以有具体实现,但接口里面所有的方法都是抽象方法。

9.2:抽象类可以有构造器,接口不能有构造器

9.3:抽象方法可以有publicprotecteddefault这些修饰符,但是接口只能使用public修饰符

9.4:抽象方法可以继承一个类和实现多个接口,接口只可以继承一个或多个其它接口

 

未完待续……O(∩_∩)O~~





































java基础面试

...么地方不对,请告诉我。谢啦!!☆⌒(*^-゜)v 1:java的基础类型Java语言提供了八种基本语言booleanchar   byte &nb 查看详情

java多线程和并发基础面试问答(转载)

 JAVA多线程和并发基础面试问答  原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-answers/  多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的... 查看详情

java多线程和并发基础面试问答(转载)

...                 JAVA多线程和并发基础面试问答  原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-answers/  多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里... 查看详情

怎么准备java面试:基础内容

...体的技术思维。那么在这篇博客中,小编就从java面试基础来说起,基础面试基本上也是在我们的一面中经常问到的。二、基础要掌握哪些? 查看详情

怎么准备java面试:基础内容

...体的技术思维。那么在这篇博客中,小编就从java面试基础来说起,基础面试基本上也是在我们的一面中经常问到的。二、基础要掌握哪些? 查看详情

怎么准备java面试:基础内容

...体的技术思维。那么在这篇博客中,小编就从java面试基础来说起,基础面试基本上也是在我们的一面中经常问到的。二、基础要掌握哪些? 查看详情

备战2022年春季面试java基础面试题库《收藏》(代码片段)

...问题点比较多各种各样的,本文主要涉及到的是Java的基础、集合类、并发编程、框架、面试题我就把我常遇到的和一些出现频率比较多的问题整理出来了。如果想要更多的学习资料的小伙伴可以点击下面的链接交个朋友我们... 查看详情

java开发基础面试题,java研发工程师年终总结

Spring面试高频问题SpringMVC面试高频问题MyBatis面试高频问题SpringBoot面试高频题SpringCloud面试高频问题Redis高级面试题Dubbo高频常问面试问题Java虚拟机(JVM)MySQL数据库高频面试问题Java高频面试专题合集解析:当然在这还... 查看详情

java面试基础题整理学习

最近投了一些java岗位,面试和笔试的问题更关注基础的掌握,因为基础知识是安身立命以及决定自己上限的东西。结合了网上一些优秀文章,做了如下整理: 1.JDK和JRE有什么区别?JDK:JavaDevelopmentKit的简称,java开发工具包... 查看详情

java多线程和并发基础面试问答

...部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题。(校对注:非常赞同这个观点)Java多线程面 查看详情

java多线程和并发基础面试问答

...部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题。(校对注:非常赞同这个观点)Java多线程面 查看详情

java面试java基础,2021年阿里java面试题精选

...Kafka进阶篇知识点Kafka高级篇知识点44个Kafka知识点(基础+进阶+高级)解析如下析如下**[外链图片转存中…(img-eZNcvhqD-1625748 查看详情

java多线程和并发基础面试问答

...部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题。(校对注:非常赞同这个观点)Java多线程面试问题1.进程和线程之间有什么不同?一个进程是一个 查看详情

java基础面试题

publicclassAprotectedinta=1;A()a=2;publicstaticvoidmain(String[]args)newC();classBextendsAprotectedintb=2;B()b=3;classCextendsBprotectedintc=3;C()super();c=4;print();voidprint( 查看详情

飞越面试官--java基础

大家好!我是本公众号唯一官方指定没头屑的小便--怕屁林。  众所周知,现场面试(包括视频面试)多数时候是没有白板,也就是说,对于你的知识点、项目经验、过往经历和个人介绍等等,都是靠一张嘴。所以考虑到... 查看详情

java基础面试java基础问题

Java基础问题1.==和equals的区别是什么?2.两个对象的hashCode()相同,则equals()也一定为true,对吗?3.final在java中有什么作用?4.String属于基础的数据类型吗?5.Java中操作字符串都有哪些类?它们之间... 查看详情

java基础面试题

java基础面试题 https://blog.csdn.net/qq_39031310/article/details/83050263一、小策略1、说区别的时候,先单独说出每一个的特性,再列出相同点即可。2、当遇到自己不太擅长的问题的时候,一定不要慌张,想法设法的往自己熟悉的地方... 查看详情

android面试题网络基础

Android面试题(一)Java基础Android面试题(二)Android基础Android面试题(三)Java虚拟机Android面试题(四)设计模式Android面试题(五)数据结构/算法Android面试题(六)网络基础写出OSI七层模型和TCP/IP的五层模型( 查看详情