一些java面试题目+_+自我总结之一Java基础

用自己的话说一些面试中可能会出到的题目:

1.一个“.java”源文件是否可以包括多各类(不是内部类)?有什么限制?

    可以包含多各类,但是只能有一个public类,并且public类的类名必须与文件名保持一致。如果源文件没有public类,那么用什么名字都行。一般建议一个源文件中只写一个类。

2.java语言与其他编程语言的不同之处?

    1.Java与C/C++相比:Java是一种完全面向对象的语言,它的底层(运行时库)是由C语言开发的,但不依赖于C语言。因为Java的运行是由运行时库支持的,所以它的效率没有更接近底层的C/C++高。但是Java跨平台的特性更为实用。

    2.Java与C#相比:C#和Java的语法几乎相同,C#是由微软开发的编程语言,和Java类似,是由运行时库支持运行的,不过支持的平台有限,只能在windows和Linux上运行,并且在Linux上运行是由momo支持的,将其转化为Java,所以本质上其实他只能在Windows上运行,而Java可以在各个平台上运行。

3.java中有没有“goto”?

"goto"是java中的保留字,现在没有在java中使用(以后有可能使用)。

4.“&”和“&&”的区别?

    “&”和“&&”都是逻辑与(and)运算符,当两边的表达是结果都为true的时候,返回结果为true。

    “&&”具有短路功能,即如果第一个表达式为false,则不再计算第二个表达式,直接返回false;

    “&”当操作符两边表达式不是布尔类型时,可作为位运算符。

5.最有效率的方法计算出2*8等于几?

    2<<3

    8是2 的3次方,将一个数左移n位,将相当于乘以了2的n次方。

    位运算是CPU直接支持的,效率最高。

6.回答以下名词的意思:JVM  JDK  JRE  JavaEE  JavaME  GC?

   JVM:java虚拟机,是一个虚构的计算机,通过在计算机上仿真模拟计算机的功能来运行,JVM有自己完善的硬件架构,如处理器,堆,栈,寄存器等以及相应的指令系统。JVM屏蔽了具体操作平台的相关信息,使Java程序只需要生成在JVM上的执行代码,从而在各个平台上不加修改的运行。

  JDK:Java工具包,是Java的核心,包括了:Java运行环境,Java基础类库,Java工具。

  JRE : Java运行环境,运行Java程序必须的环境,包含JVM标准实现和Java核心类库。

  JavaSE:标准版,从jdk5.0开始改名为JavaSE,主要用于桌面应用软件的开发。

  JavaEE:  企业版,是j2EE的一个新名称,主要用于分布式网络程序开发。

  JavaME:  是为移动电话,机顶盒,PDA等嵌入式消费电子设备所提供的Java语言平台,也包括了Java虚拟机和标准API。

  GC:垃圾回收。当Java虚拟机发觉内存紧张时,会自动清理无效对象(没有引用的对象)的内存空间。

7.JVM能有几个实例?

  每个Java程序对应一个Java虚拟机实例,每运行一个Java程序时会自动创建一个Java虚拟机实例,所以Java虚拟机实例的个数取决于同时运行的Java程序的个数。

8.Java跨平台是如何实现的?

  是利用JVM(Java虚拟机)实现跨平台的。

  Java源代码(*.Java)经过Java编译器变异成Java字节码(*.class),Java字节码经过Java虚拟机解释为具体平台的具体指令并执行,主流平台都有Java虚拟机,所以Java字节码可以再各个主流平台上执行。所以其实是Java字节码是跨平台的。

9.TCP和UDP协议的区别?

  1.TCP是面向连接的,UDP是面向非连接的。

  2.TCP可靠,UDP不可靠。

  3.TCP慢,UDP快。

10.说一下 类的命名规范,方法的命名规范,变量的命名规范,包的命名规范,常量的命名规范?

  首先这些命名规范都要符合Java标识符的命名规范:

  1,由字母,数字,_,$ 组成

  2,不能用数字开头

  3,可以使用中文,但不提倡

  4,Java大小写敏感,命名时要注意

  5,不能用Java保留字(int if for 等)

另外,它们各自还有限制:

  类:首字母大写,如果由多个单词组成,每个单词的首字母都要大写。

  方法:首字母小写,如果由多个单词组成,除了第一个单词外其他单词首字母大写。

  变量:首字母小写,每个单词首字母大写。

    包:所有字母都小写,com.公司名.项目名.模块名

  常量:基本数据类型的常量为全大写,由多个单词可以由_隔开连接。

11.阐述一下Java共有几种注释方法?

  单行注释://

  多行注释:/*

                     *

                     */

  javadoc注释:/**   */,可以跨多行,而且生成JavaAPI时,这些注释会被生成标准的Java API注释。

12.如何增加代码的清晰度和可观性?

  1,包名,类名,方法名等遵循规范

  2,给代码添加注释

  3,注意缩进排版

  4.添加异常处理

   5,使用测试类和测试方法

13.Java中的void和null有什么区别?

  在Java中,void仅用于没有返回值的方法上:public void a(){}

  null 用于变量的赋值上,表示变量值为空,int a = null  表示变量a 没有被实例化,没有指向具体的内存地址。

14.Java中的程序设计有哪三种基本流程,分别对应什么语句?

  分别有顺序,选择,循环三种;顺序代表程序中的操作按照他们的先后顺序执行;选择有if语句,switch语句;循环有for语句,while语句,do-while语句。

15.写出Java中的8中原始数据类型及其字节长度?

  byte   1个字节(8位);存储一个字节的数据

 short    2个字节(16位);一般不用

  int       4个字节(32位);常用于整型

  long     8个字节(64位);常用于长整型

  float     4个字节(32位);常用于浮点型

  doble    8个字节(64位);常用于双精度浮点型

  char     2个字节(16位);常用于字符型

boolean  1个字节(8位);存储逻辑变量true false

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

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

17.软件开发中迭代的含义理解?

 在软件开发的过程中,各个阶段不是顺序执行的,而是每一个阶段都进行迭代,然后进入下一个阶段的开发,这样对于开发中的需求变化及人员变动都能得到很好地适应。

18.什么是进程?

  进程是操作系统的程序基础,是一个计算机中正在运行的程序实例。可以分配给处理器并由处理器执行的一个实体,由单一顺序的执行显示,是当前状态和一组相关资源所组成的活动单位。

19.什么是垃圾回收?什么时候触发垃圾回收?如何降低垃圾回收的触发效率?他能保证程序有足够的可用内存吗

  GC 垃圾回收是Java的一个重要属性,作用是释放不再使用的内存。

  垃圾回收是系统进行管理的,在系统认为需要的时候释放一个线程进行处理。

 尽量减少垃圾内存,也就是新建对象的数量。

 不能

20.请简单描述Java中的内存泄漏?

  Java中存在内存泄漏

一种是在堆中分配的内存,在没有将其释放的时候,就删除了所有可以访问该内存的方式;(已经由Java中引用的垃圾回收机制解决)

另一种是在内存对象已经不需要的时候,仍然保留该内存以及可以访问该内存的方式。

21. 用final修饰一个关键字时,是引用不能变还是引用对象不能变?

引用不能变,引用对象所指向的内容可以变。

22.静态变量和实例变量的区别?

在语法上的区别:静态变量要加static关键字,实例变量不用。

在程序运行时的区别:实例变量属于某个对象的属性,只有创建了实例对象,才能给这个实例变量分配内存空间,才能使用这个实例变量。而静态变量属于类,也成为类变量,只要程序加载了类的字节码,静态变量就会被调用。

23.是否可以从一个static方法内部发出对非static方法的调用?

不可以。调用非static方法,必须要创建一个对象,在该对象上进行方法的调用。而static方法可以直接调用,不用创建对象。所以如果从一个static方法内部发出对非static方法的调用,那么肥static方法应该关联到哪个对象上呢?

24.ineger和int方法的区别?

integer是int的包装类,integer的默认值是null,int的默认值是0

25.说出作用域pubic  private protect 以及不写时的区别?

public:当前类,同一包,子孙类,不同包

private:当前类

protect:当前类,同一包,子孙类

friendly:当前类,同一包

26.列出自己常用的JDK包?

Java.lang包:包含了JDK提供的Java基础类,如String,是唯一一个不用导入就可以使用的包。

Java.io包:输入输出相关类,文件操作等

Java.util包:系统辅助类,collection类,list,map等

Java.net包:网络相关类,URL,URLconnection等

Java.sql包:数据库操作相关类,connection类,statement类,resuleset类等

27.简单说明什么是递归,什么时候会使用递归?用Java实现一个简单的递归?

递归作为一种算法在程序设计语言中被广泛使用,是指过程,函数,子程序在运行过程中直接或间接调用自身而产生的重入现象。

递归算法一般用于解决三种问题:

数据的定义是递归定义的;

问题解决按递归算法实现;

数据的结构形式是递归定义的;

下面是使用递归算法实现计算某个整数在二进制中的个数:

一些java面试题目+_+自我总结之一Java基础

28.排序都有哪几种方法?

插入排序(直接插入排序,希尔排序);

选择排序(直接选择排序,堆排序);

交换排序(冒泡排序,快速排序);

归并排序;

分配排序(箱排序,基数排序);