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实现一个简单的递归?
递归作为一种算法在程序设计语言中被广泛使用,是指过程,函数,子程序在运行过程中直接或间接调用自身而产生的重入现象。
递归算法一般用于解决三种问题:
数据的定义是递归定义的;
问题解决按递归算法实现;
数据的结构形式是递归定义的;
下面是使用递归算法实现计算某个整数在二进制中的个数:
28.排序都有哪几种方法?
插入排序(直接插入排序,希尔排序);
选择排序(直接选择排序,堆排序);
交换排序(冒泡排序,快速排序);
归并排序;
分配排序(箱排序,基数排序);