栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java常见面试题一

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java常见面试题一

1. Java面向对象4个特征及理解

封装、继承、抽象、多态。
封装 : 这里指的是对外隐藏内部信息,只保留对外接口使之与外部发生联系。
优点:使对象以外的部分不能随意存取对象内部的数据,有效避免交叉感染,使软件错误局部化,减少查错和排错的难度。

继承 : 使用 extend 关键字。 使用一个特殊类拥有其全部的属性和服务,作为父类,他可以有多个子类,但是子类只能有一个父类。子类继承父类的时候,可以重写父类的方法,也可以有自己的方法。

抽象 : Java中的抽象类可以是抽象类、抽象方法、使用 abstract修饰。抽象方法可以是抽象方法或者是非抽象方法。抽象方法一般是只有方法名,没有方法的实现。它的权限修饰必须是 prtected public 的。因为子类在继承抽象父类的时候,必须实现父类所有的抽象方法。

多态 :具有三个条件:

    继承重写父类对象引用指向子类对象

优点:

    对已经存在的代码具有可替代性对代码具有可扩充性超类是通过方法签名,向子类提供一个共同的接口。由子类来完善或者覆盖它而实现的提高了使用性简化代码的编写和修改的过程
2. &和&&的区别

相同点: &和&&都可以用逻辑与的运算符,表示逻辑与and
不同点:

    && 具有短路的功能,而&不具备短路功能当&两边的表达式都为true,整个结果才是true。而&&第一个表达式的结果为false,就不会计算第二个表达式&还可以作为位运算符,当&操作符两边的表达式不是布尔类型式,&表示按位与操作。我们通常使用0xOf来与一个整数进行&运算。来获取该整数的最低4个bit位。
3. Int/Interger/AtomicInterger的区别

int是基本数据类型,int的包装类是Interger。int是基本数据类型。int的默认值为0,而Interger 的默认值为null,它必须实例化后才能使用,而int不需要实例化。AtomiclInterger它是一个提供原子操作的Interger的类。在Java语言中。++a 和a++ 并不是线程安全的,在使用的时候,不可避免的会用到synchronized 关键字,而AtomicInterger则通过一种线程安全的加减操作接口。它提供了一些接口

public final int get()//获取当前的值
public final int getAndSet(int newValue)//获取当前当值,并设置新的值
public final int getAndIncrement ( ) //获取当前值,并自增
public final int getAndDecrement ( ) //获取当前值,并自减
public final int getAndAdd(int detal)//获取当前的值,并加上预期的值

4. equals()和==的区别

== : 一般用于基本数据类型的比较,判断引用是否指向堆内存的同一块地址,属于内容比较。
equals :用于判断两个变量是否对同一个对象的引用,即堆中的内容是否是否相同,返回值为布尔类型,比较的是字符串的内容,属于内容比较。

string a1= new String("Java");
string a2= new String("Java");
System.out.println(a1==a2);            //false
System.out.println(a1.equals(a2)       //true

String a3=a2;
System.out.println(a2==a3);            //true
System.out.println(a2.equals(a3));     //true

String a4="Java";
String a5="Java";
System.out.println(a4==a5);            //true
System.out.println(a4.equals(a5));     //true
5. String/StringBuffer/StringBuilder的区别

对字符串的修改的时候,需要使用StringBuffer 和 StringBuilding类,进行多次修改不产生新的未使用的对象。而String每new,就会创建一个新的对象。StringBuffer效率低,但是它线程安全。而S同日能否Builder效率高,但是线程不安全

6. Heap和Stack的区别

JVM内存划分:
寄存器:CPU自己的内存
本地方法栈:JVM自己使用的内存
方法区:存储类的信息的,static修饰的成员
堆内存:new出来的东西,类的成员变量的值
栈内存:方法调用时消耗的内存,局部变量

7. 抽象类和接口区别

抽象类:使用abstract修饰;抽象类不能实例化,即不能使用new关键字来实例化对象;3含有抽象方法(使用abstract关键字修饰的方法)的类是抽象类,必须使用abstract关键字修饰;抽象类可以含有抽象方法,也可以不包含抽象方法,抽象类中可以有具体的方法;如果一个子类实现了父类(抽象类)的所有抽象方法,那么该子类可以不必是抽象类,否则就是抽象类;抽象类中的抽象方法只有方法体,没有具体实现;

接口:使用interface修饰;接口不能被实例化;一个类只能继承一个类,但是可以实现多个接口;接口中方法均为抽象方法;接口中不能包含实例域或静态方法(静态方法必须实现,接口中方法是抽象方法,不能实现)

8. 方法重写(Override)和重载(Overload)

重载: 方法名一致,参数列表中参数的顺序,类型,个数不同。重载与方法的返回值无关,存在于父类和子类,同类中。可以抛出不同的异常,可以有不同修饰符。

重写:参数列表、方法名、返回值类型必须完全一致,构造方法不能被重写;声明为 final 的方法不能被重写;声明为 static 的方法不存在重写(重写和多态联合才有意义);访问权限不能比父类更低;重写之后的方法不能抛出更宽泛的异常

9. Java死锁的原因是什么?如何避免?
    互斥条件:进程对于所分配到的资源具有排它性,即一个资源只能被一个进程占用,直到被该进程释放

解决方式:每个线程单独拷贝钥匙作为备份

    请求和保持条件:一个进程因请求被占用资源而发生阻塞时,对已获得的资源保持不放。

解决方法:规定任何情况下,一个线程获取到一把钥匙后,必须归还后,才能请求另外一把钥匙

    不剥夺条件:任何一个资源在没被该进程释放之前,任何其他进程都无法对他剥夺占用

解决方法:设置一个时间的阈值

    循环等待条件:当发生死锁时,所等待的进程必定会形成一个环路(类似于死循环),造成永久阻塞。

解决方法:规定任何线程取钥匙的顺序

10. MVC理解

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,主要提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。主要使用的技术:数据模型:实体类(JavaBean),数据访问:JDBC,Hibernate等。

View(视图):负责进行模型的展示,一般就是我们见到的用户界面,比如JSP,Html等

Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。主要使用的技术:servlet,Struts中的Action类等。

11. 使用Spring有什么好处

轻量: Spring 是轻量的,基本的版本大约2MB。
控制反转: Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
面向切面的编程(AOP): Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
容器: Spring 包含并管理应用中对象的生命周期和配置。

12. 连接池的工作原理

第一、连接池的建立。

第二、连接池的管理。

第三、连接池的关闭。

13. jdbc如何防止SQL注入
    传统JDBC,采用PreparedStatement 。预编译语句集,内置了处理SQL注入的能力采用正则表达式,将输入的所有特殊符号转换为空格或其他字符JAVA Web中,编写Fileter,实现对renquest请求中参数的不合法字符替换hibernate防止sql注入
14. Linux常用命令及其作用 15. 线程同步的实现有哪些方法

wait():使一个线程处于等待状态,并且释放所持有的对象的 lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉
InterruptedException 异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒
某一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且不是按优先级。
notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是
让它们竞争。

16. 常见的有哪些设计模式

单例模式:保证被创建一次,节省系统开销。
工厂模式(简单工厂、抽象工厂):解耦代码。
观察者模式:定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。
外观模式:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用。
模版方法模式:定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤。
状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/708962.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号