java基础面试题


1.面向对象有哪些特点?

继承:继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性方法,使其获得与父类别不同的功能。
封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问别。
多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过向基类的指针,来调用实现派生类中的方法。

2、 String和StringBuffer的区别?

答:它们都是操作字符串的,但是String是final类,字符串的值不会改变。而StringBuffer类提供的字符串可以修改。

3.同步和异步有什么区别?在什么情况下使用?

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据
可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序
在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,
就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

4、 gc是什么?为什么要有gc?

答:GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求
垃圾收集,可以调用下面的方法之一: System.gc() Runtime.getRuntime().gc()

5、 Math.round(11.5)等于多少?Math.round(-11.5)等于多少?

答:12 -11  四舍五入的原理是在参数上加 0.5 然后进行下取整。
案例:
System.out.println("1.4 round结果" + Math.round(1.4));
System.out.println("1.5 round结果" + Math.round(1.5)); 
System.out.println("1.6 round结果" + Math.round(1.6));
System.out.println("2.4 round结果" + Math.round(2.4));
System.out.println("2.5 round结果" + Math.round(2.5));
System.out.println("2.6 round结果" + Math.round(2.6));
System.out.println("-1.4 round结果" + Math.round(-1.4));
System.out.println("-1.5 round结果" + Math.round(-1.5));
System.out.println("-1.6 round结果" + Math.round(-1.6));
System.out.println("-2.4 round结果" + Math.round(-2.4));
System.out.println("-2.5 round结果" + Math.round(-2.5));
System.out.println("-2.6 round结果" + Math.round(-2.6));

运行结果为

1.4 round结果1
1.5 round结果2
1.6 round结果2
2.4 round结果2
2.5 round结果3
2.6 round结果3
-1.4 round结果-1
-1.5 round结果-1
-1.6 round结果-2
-2.4 round结果-2
-2.5 round结果-2
-2.6 round结果-3

6、 abstract的mathod是否可以同时是static,是否可以同时是native,是否可以同时是synchronized?

答:都不能。都不可以,因为abstract申明的方法是要求子类去实现的,abstract只是告诉你有
这样一个接口,你要去实现,至于你的具体实现可以是native和synchronized,也可以不是,
抽象方法是不关心这些事的,所以写这两个是没有意义的。然后,static方法是不会被覆盖的,
而abstract方法正是要子类去覆盖它,所以也是没有意义的。所以,总的来说,就是java语法
许你这样做,事实上,也没有意义这样做。

7、线程的基本概念、基本状态及状态之间的关系?

答:线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线
程,也就是程序本身。 Java中的线程有四种状态分别是:运行、就绪、挂起、结束

8、mvc的各个部分都有哪些技术实现?如何实现?

答: M model业务逻辑(javaBean ,EJB组件)V view 表示层(jsp页面)
C controller 控制层(servlet)视图层接受用户的输入和请求等,然后请求到达Servlet的控制器
后,转发到相应的业务逻辑,业务逻辑运算完成后,再将数据呈现给相应表现层view

9、xml文档定义有几种形式?之间的区别?解析xml文档有哪几种方式?

答:两种形式 dtd schema,本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的),有DOM,SAX,STAX等DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问STAX:Streaming API for XML (StAX)

10、servlet的生命周期?

答:Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

11、描述一下jvm加载class文件的原理机制?

答:JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

12.Spring最有用的功能是什么?举例说明IOC和AOP的作用。

答:
IOC依赖注入。IOC通过容器而不是直接将java对象间的关系注入应用程序中,可以应用程序就实现了解耦,分层。
AOP 面向切面编程,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

13、何为编程

编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。

为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就是编程。

14、什么是Java

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

15、JVM、JRE和JDK的关系

JVM
Java Virtual Machine是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。
JRE
Java Runtime Environment包括Java虚拟机和Java程序所需的核心类库等。核心类库主要是java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包
如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JDK
Java Development Kit是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK,就无需再单独安装JRE了。其中的开发工具:编译工具(javac.exe),打包工具(jar.exe)等

16、什么是跨平台性?原理是什么

所谓跨平台性,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行。

实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行java程序。

Java语言有哪些特点

简单易学(Java语言的语法与C语言和C++语言很接近)

面向对象(封装,继承,多态)

平台无关性(Java虚拟机实现平台无关性)

支持网络编程并且很方便(Java语言诞生本身就是为简化网络编程设计的)

支持多线程(多线程机制使应用程序在同一时间并行执行多项任)

健壮性(Java语言的强类型机制、异常处理、垃圾的自动收集等)

安全性

17、break ,continue ,return 的区别及作用

break 跳出总上一层循环,不再执行循环(结束当前的循环体)
continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件)
return 程序返回,不再执行下面的代码(结束当前的方法 直接返回)

18、构造器(constructor)是否可被重写(override)

构造器不能被继承,因此不能被重写,但可以被重载。

19重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?

方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。

重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同),与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分

重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(里氏代换原则);如果父类方法访问修饰符为private则子类中就不是重写。

20、== 和 equals 的区别是什么

== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址)

equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:

情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。

情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。

21、JDK 中常用的包有哪些

java.lang:这个是系统的基础类;
java.io:这里面是所有输入输出有关的类,比如文件操作等;
java.nio:为了完善 io 包中的功能,提高 io 包中性能而写的一个新包;
java.net:这里面是与网络有关的类;
java.util:这个是系统辅助类,特别是集合类;
java.sql:这个是数据库操作的类。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北街风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值