Java面试题

Java面试题

为何说java是跨平台的语言:

                                                           Java面试题_第1张图片

        Java自带的虚拟机很好地实现了跨平台性。 Java源程序代码经过编译后生成二进制的字节码是与平台无关的,但是可被Java虚拟机识别的一种机器码指令。 Java虚拟机提供了一个字节码到底层硬件平台及操作系统的屏障(不同平台需要使用不同虚拟机,也就是安装不同的jkd),使得Java语言具备跨平台性。

JDK ,JRE,JVM三者的区别?

JVM:就是java虚拟机,只认识.class文件,它能够将class文件,它能够将class文件中的字节码指令进行识别并调用操作系统向上的API完成动作。使得Java语言具备跨平台性。

JRE:java运行时环境。它主要包含两个部分,jvm的标准实现和java的一些基本类库

JDK:java开发工具包。jdk是整个java开发核心,集成了jre和一些小工具

三者关系 :JDK>JRE>JVM

java和javac指令的作用于区别?

javac是编译指令,java是运行指令。

javac负责的是编译,将.java文件编译.class。当执行java的编译器程序,对指定的扩展名为.java的文件进行编译,生成了

jvm可以识别的字节码文件,即.class文件。

java负责的运行,当执行java时,会启动jvm加载运行时所需要的类库,并执行.class文件。

JAVA语言之父:

詹姆斯.高斯林

JAVA语言是一种什么样的语言:

java是一种强类型语言

js,pothon属于弱类型语言

例:

      js:var a=3,a=4.3(数据不丢失)

      java:int a=3,a=4.3(a=4数据丢失)

字符串比较是否相等

这里不能用==

只能用equals(表达式);(与该表达式是否相等)

==,equals,hashcode的区别

==

1.基本数据类型,也称原始数据类型

byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(==),比较的是他们的值。 

2.引用类型(类、接口、数组)   

当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。

对象是放在堆中的,栈中存放的是对象的引用(地址)。由此可见'=='是对栈中的值进行比较的。如果要比较堆中对象的内容是否相同,那么就要重写equals方法了。

equals

1、默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)。

2 、要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相等。

这里对equals重新需要注意五点:
1   自反性:对任意引用值X,x.equals(x)的返回值一定为true. 
2   对称性:对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true; 
3   传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true 
4   一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变 
5   非空性:任何非空的引用值X,x.equals(null)的返回值一定为false 

hashcode

hashCode()方法返回的就是一个数值,从方法的名称上就可以看出,其目的是生成一个hash码。hash码的主要用途就是在对对象进行散列的时候作为key输入,据此很容易推断出,我们需要每个对象的hash码尽可能不同,这样才能保证散列的存取性能。事实上,Object类提供的默认实现确实保证每个对象的hash码不同(在对象的内存地址基础上经过特定算法返回一个hash码)。Java采用了哈希表的原理。哈希(Hash)实际上是个人名,由于他提出一哈希算法的概念,所以就以他的名字命名了。 哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。

自增,自减

{
    int a=3;
    int b=3;
    for(int i=1;i<=100;i++)
    {
        a=a++;
        b=++b;
    }
    System.out.println("a="+a+",b="+b);
}        

a=3,b=103

JAVA基本数据类型和基本数据类型的包装类

byte int         short long   float  double char           boolean

Byte Integer Short Long Float Double Character  Boolean

数组中不同类型默认值

byte short int long 默认值为0

char 默认值为 ‘字符型空’

boolern 默认值 false

String 默认值 null

常用排序(冒泡排序)

package com.cdz;
import java.util.Arrays;
import java.util.Scanner;
/*
 * 冒泡数组冒泡排序基础应用
 */
public class MaoPaoPaiXu {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);		
		int arr[]={1,2,3,11,5,6,7,13,9,10};	
		int temp = 0; // 用来交换的临时数		 
	    // 要遍历的次数
	    for (int i = 0; i < arr.length - 1; i++) {
	        // 从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上
	        for (int j = arr.length - 1; j > i; j--) {
	            // 比较相邻的元素,如果前面的数大于后面的数,则交换
	            if (arr[j - 1] > arr[j]) {
	                temp = arr[j - 1];
	                arr[j - 1] = arr[j];
	                arr[j] = temp;
	            }
	        }
	    }  		
		//Arrays.sort(arr);//自动排序数组arr
		
		//增强for循环		
//		for(double d:arr){
//			System.out.print(d+" ");
//			
//		}		
		//普通for循环输出
		for(int i=0;i

方法重载

1. 一个类有多个方法,

2.  方法名相同,

3. 参数列表不同(参数的个数不同,参数的类型不同),

4. 与方法的返回值无关

满足上方的方法称为方法的重载(“两同一不同”,同一个类下的方法或构造器,同一个方法名或构造器名,不同的参数列表。)

方法重写

方法的重写有前提条件:有子类继承父类

子类继承父类后,若父类的方法对子类不适用,那么子类可以对父类的方法进行重写(overwrite)

重写的规则:

  1. 要求子类方法的“返回值类型 方法名(参数列表)”与父类的方法一样

  2. 子类方法的修饰符不能小于父类方法的修饰符

  3. 若父类方法抛异常,那么子类方法抛异常的类型不能大于父类的

  4. 子类的方法必需同为static或非static的

面相对象

对象(看得见的,摸得着的,能够唯一确定事物)

面向对象:面向对象(Object  Oriented,简称OO)的思想是把一个项目、一件事情分成更小的项目,或者说分成一个个更

小的部分,每一部分负责什么方面的功能,最后再由这些部分组合而成为一个整体。就是的分工合作,对应责任分配给对应的对

象 。

面相过程

过程(就是步骤)

面向过程:面向过程的思想是把一个项目、一件事情按照一定的顺序,从头到尾一步一步地做下去,先做什么,后做什

么,一直到结束。就是一个人做事的方法。

类和对象的关系

类是对象的模板或规则(一个类可以创建n个对象,且每个对象是独一无二的)

对象是类的实例(也就是类实例化的结果就是对象)

类描述了一组有相同特性(属性)和相同行为(方法)的 对象

抽象类和接口的关系

1.抽象类和接口都不能被实例化

2.抽象类中有构造方法,接口中没有构造方法

3.抽象类要被子类继承,接口要被子类实现

4.接口里面只能由抽象方法,抽象类既可以有抽象方法,也可以有普通方法

5. 接口里面只能对方法进行声明,抽象类既可以对方法进行声明也可以对方法进行实现

抽象类

1.抽象类不能有对象,(不能用new此关键字来创建抽象类的对象);

2.有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法;

3.抽象类中的抽象方法必须在子类中被重写。

4.abstract修饰的类为抽象类,此类不能有对象,(无法对此类进行实例化,说白了就是不能new);

5.abstract修饰的方法为抽象方法,此方法不能有方法体(就是什么内容不能有);

抽象类的意义:为其子类提供一个公共的类型,封装子类中的重复内容,定义抽象方法,子类虽然有不同的实现但是定义是一样的。

接口

1.接口中的所有属性默认为:public static final ****;

2.接口中的所有方法默认为:public abstract ****;

3.接口不再像类一样用关键字 extends去“继承”,而是用 implements 去“实现”,也就是说类和接口的关系叫做实现,(例如:A类实现了B接口,那么成为A为B接口的实现类。而类与类之间的继承的话,叫做A类继承了B类,其中B类即为A类的父类)。实现接口与类的继承比较相似

String StringBulider StringBuffer的区别

String 字符串常量

在字符串不经常发生变化的业务场景优先使用String(代码更清晰简洁)。如常量的声明,少量的字符串操作(拼接,删除等)。

StringBuffer 字符串变量(线程安全)

在单线程情况下,如有大量的字符串操作情况,应该使用StringBuilder来操作字符串。不能使用String"+"来拼接而是使用,避免产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)。如JSON的封装等。

StringBuilder 字符串变量(非线程安全)

在多线程情况下,如有大量的字符串操作情况,应该使用StringBuffer。如HTTP参数解析和封装等。

什么是Applet ?解释一下Applet的生命周期

java applet是能够被包含在HTML页面中并且能被启用了java的客户端浏览器执行的程序。Applet主要用来创建动态交互的

web应用程序

applet可以经历下面的状态:

init :每次被载入的时候都会被初始化。Start:开始执行Applet. Strop:结束执行。Destroy:卸载applet之前,做最后的清理工作

&&和&区别,||和|区别?

&&和||是短路与,短路或,当左边的表达式能判断当前结果,则不判断右边的表达式。

而& 和|则将两边的表达式都运算完毕后,再算结果。

public, protected, default,private修饰符的区别  

  

修饰符 类内部 同一个包中 子类 任何地方
private yes - - -
default(缺省) yes yes - -
protected yes yes yes -
public yes yes yes yes

进程与线程的区别

一个程序至少有一个进程,一个进程至少有一个线程,线程的划分尺度小于进程,使得多线程程序并发性高。进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而提高程序运行效率。

合法的标识符

由字母,数字,_和$组成,长度不限,字母可以是大写或小写英文字母,数字0-9,(标识符的第一个字符不能是数字,标识符区分大小写,标识符不能包含空格)

常用的类,包,接口

类 

String     Integer     WriterFileReaderFileWirter           Buffered    ReaderBuffered

java.lang      java.awt       java.io      java.util      java.sql

接口

Remote    List    Map     Document   NodeList

final,finally ,finalize的区别

final 用于声明属性,方法和类,分别表示属性不可变,方法不可重写,类不可继承

finally是异常处理语句结构的一部分,表示一定会执行,

finalize 是Object类的一个方法,在垃圾集器执行的时候 会调用回收对象的此方法,可以重写此方法提供垃圾收集时的其

他资源回收,像关闭文件等;

父类的静态方法能否被子类重写,why?

子类继承父类后,用相同的静态方法和非静态方法,非静态方法覆盖父类的的方法(称为重写),父类的该静态方法被隐

藏(也就是对象是父类则调用该隐藏的方法),子类可以继承父类的静态与非静态的方法,至于方法重载的其中一个要素就 是在

同一类中,不能说父类中的什么方法与子类里的什么方法是方法重载的体现

collection,collections,connection的区别

java.util.Collection是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法。

Collection 接口在Java类库中有很多具体的实现。Collection 接口是意义是为各种具体的集合提供了最大化的统一操作方

式 。

java.util.Collections是一个包装类。它包含了有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,

服务于java的Collection框架。

Connection对象是一个连接对象,主要功能是建立与物理数据库的连接。代表与数据源进行的唯一会话。如果是客户端/服务器数据库系统,该对象可以等价于到服务器的实际网络连接。取决于提供者所支持的功能,Connection 对象的某些集合、方法或属性有可能无效。

Java连接数据库jdbc的步骤:

注册驱动     建立连接       创建语句     执行语句        拿到结果集       释放语句    

内部类的作用

内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立 ,在每个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类创建内部类对象的时刻并不依赖于外围的创建,内部类就是一个独立的实体。内部类提供更好的封装,除了外围类,其他类都 不能访问。


Java中是否支持多继承?接口可以继承多个接口?接口是否可以继承抽象类?

java对类不支持多继承,子类只能只有一个父类,如果一个子类同时继承了两个父类,而这两个父类拥有相同的属性或方法,子类调用的时候系统不知道该调用哪个父类的属性或方法,

抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。而接口中的成员变量均默认为static final类型,即常量,并且接口中定义的都是抽象方法,没有方法体,不能在接口中实现方法,一个类可以实现多个接口。

接口里的方法是不能有方法体的,但抽象类的方法可以有方法体,接口是用来实现的,实现接口的类叫实现类,抽象类里面没有方法。

Html面试题

post与get的区别?

post:提交的数据比较重要,提交方式安全,但速度慢

get:提交的数据可以显示出来,且速度也很快

什么时候用post: 增加,修改(也就是写入的时候用)

                    get: 删除,查找(也就是显示的时候用)

css的优势?

1.为页面提供元素

2.实现内容与样式的分离

3.减少程序员代码量

id与class的区别

id与class同为选择器:

1. 同一页面中可以有多个元素,class命名是可以有相同的;在一个页面上id名是唯一的(因为多个元素id名相同,在js中操作是有冲突的)

2. class选择器,一般用在写样式上,id选择器,一般用在写js里

3. class属性中可以写多个class名,中间用空格隔开,id 属性只能写一个id名

Js面试题

js运算

1+“12”=“112”

1+2+“12”=“312”

1%-2=1

-1%2=-1

2+true=3

2+null=2

2+undefinend=NaN

1>2&&a>3    返回false

1>2&a>3       报错(a没有定义)

你可能感兴趣的:(常用)