Java常见基础面试题

1、请说一下break和continue的区别?

  1. 这两个语句都可以用于跳出循环的;
  2. break是中止循环,执行循环体以后的语句,而continue是跳出本次循环,执行下一次循环;

2、switch 中用于判断的表达式,可以用哪些数据类型?

  1. 可以是char、byte、short、int,不可以是long、String等其他类型;
  2. 从JDK1.7开始,支持String类型;

3、char型变量中能不能存贮一个中文汉字?为什么?

Java里采用了Unicode编码格式,Unicode编码中一个char型占用2个字节,而一个汉字也是占用2个字节,所以可以存储中文汉字。
备注:C语言里,char占用1个字节,不能存汉字。

4、静态变量和实例变量的区别?

在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

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

不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。

6、Integer与int的区别

  1. int是基本数据类型,Integer是包装类;
  2. int的默认值是0,Interger的默认值是null;

7、Overload和Override的区别。参数列表相同,返回值不同的方法,是否是重载方法?

Overload是重载的意思,Override是覆盖的意思,也就是重写。
重载是指在一个类里,方法名相同,参数不同;
重写是指子类继承父类,子类里重新编写了父类中的同名(同参数)方法,也就是覆盖了父类的方法;
不是!因为重载必须要求参数列表不同!

8、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承具体类。
备注:只要明白了接口和抽象类的本质和作用,这些问题都很好回答。
只有记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法。

9、在面向对象有哪三大特性?

  1. 面向对象有三大特性,分别是:封装、继承和多态。
  2. 封装:面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个类中,有些属性是不希望公开的,或者说被其他对象访问的,所以我们使用private修饰该属性,使其隐藏起来;类中提供了方法(用public修饰),常用的是get、set方法,可以操作这些被隐藏的属性,其他类可以通过调用这些方法,改变隐藏属性的值!
    下面的回答是更高要求,不需要学生必须掌握:
    封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。在面向对象的编程语言中,对象是封装的最基本单位,面向对象的封装比传统语言的封装更为清晰、更为有力。
  3. 继承:在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,使用extends关键字实现继承;子类中可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。
  4. 多态:多态就是在声明时使用父类,在实现或调用时使用具体的子类;即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性,多态增强了软件的灵活性和扩展性。这里可以举个例子,比如声明时使用的是动物类,调用时传递的是一个猫类(动物类的子类)的对象,具体执行父类里动物——吃的方法时,实际执行的是猫——吃的方法。

10、abstract class和interface有什么区别?

  1. 抽象类里面可以用普通方法,而接口中的方法全部都是抽象的;
  2. 在应用范围上来说,接口往往在程序设计的时候,用来定义程序模块的功能,方便各模块协同工作;抽象类是对相似类进行抽象,形成一个抽象的父类可供重用!

11、 String是最基本的数据类型吗?

1、String是个类,不是基本数据类型;
2、基本数据类型包括byte、int、char、long、float、double、boolean和short。

12、String 和StringBuffer的区别

  1. String是个不可变长度的字符串,而StringBuffer是个可变长度的字符串;
  2. 在对String类进行操作的时候(例如增加字符),实际上是在内存中产生了一个新的String对象; 而StringBuffer是给原对象增加字符,不是新创建一个对象;

13、数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,有length的属性。String有length()这个方法。

14、final, finally, finalize的区别。

  • final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
  • finally是异常处理语句结构的一部分,表示总是执行。
  • finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用

15、请说一下你常用的几种异常?

  • 空指针异常;
  • 数组下标越界;
  • 类型转换异常;
  • 算数异常,例如除数为零;
  • IO异常,比如说找不到文件;
  • 找不到类异常;
  • sql异常,例如sql语句不能正常运行;

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

  1. 是程序执行流的最小单元。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
  2. 开始时:就绪状态,等待cpu调用后进入运行状态,运行过程中遇到阻塞事件,进入阻塞状态,等待阻塞事件结束后,重新进入就绪状态;如果没有阻塞事件,运行结束后,则进入结束状态。

17、sleep() 和 wait() 有什么区别?

sleep就是暂停当前线程一段时间,把cpu让给其他线程使用,到时后会自动恢复。调用sleep不会释放对象锁。 wait方法导致本线程放弃对象锁,进入等待,只有等到本对象的notify方法(或notifyAll)后本线程才进入就绪状态,等待执行。

18、多线程有几种实现方法? 几种方式的使用区别?

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
如果使用Thread 继承,那么该类就不能再继承其他类,因为java不允许多继承,可以使用层级继承实现多继承效果。

19、启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码,run()方法是该线程所关联的执行代码。

20、Set和List的区别,List和Map的区别

  1. Set是无序的,元素不可重复;List是有序的,元素可以重复;
  2. List存储的是单个对象的集合(有序的),Map存储的是键值对为对象的集合(无序的);

21、HashMap和Hashtable的区别Collections

  1. HashMap和Hashtable都完成了Map接口;
  2. HashMap非线程安全的,而Hashtable是线程安全的,原因是Hashtable里面的方法使用Synchronize关键字修饰的;
  3. 因为Hashtable使用了Synchronize关键字修饰,其性能比较差;

22、说出ArrayList, LinkedList的区别

  1. ArrayList和LinkedList都完成了List接口;
  2. ArrayList底层是用数组实现的,而LinkedList使用链表实现的;
  3. ArrayList在插入、删除时,需要移动数组元素,故性能较差;但是在查询时,因为是连续的数组,所以查询速度快;LinkedList正好相反。

23、请描述一下JDK1.5有哪些新特性?

  • 泛型
  • For-Each循环
  • 自动装包/拆包
  • 枚举
  • 静态导入
  • Annotation

24、为什么要使用单例模式

  1. 避免在开发程序的时候,创建出一个类的多个实例(占用空间,性能问题),所以使用单例模式,保证该类只创建一个对象;
  2. 一般单例模式通常有两种形式:它的构造函数为private的,必须有一个静态方法,静态方法返回自己的实例;实行形式有两种,懒汉式和饿汉式;所谓的饿汉式就是在声明实例的时候直接初始化对象,而懒汉式是先声明一个空对象,在静态方法中实例化该对象并返回。

28、HTTP请求的GET与POST方式的区别

Get和Post都是提交表单的方式之一;

  1. get方式表单中的数据放到HTTP数据包的头部,post方式放到body中;
  2. get方式提交后,数据会在地址栏中显示出来,而post方式不会,所以post更安全;
  3. get方式在提交数据的时候,数据长度是有限制的;而post方式在理论上对提交数据的大小是无限制的;
  4. get提交表单永远使用字符方式提交;而post方式提交表单可以是字节方式也可以是字符方式

32、Session和Cookie的区别?

  1. Session和Cookie都是会话跟踪技术;
  2. Session是保存在服务器端的技术(保持用户登录状态的检查常用Session),而Cookie是保存在客户端的技术;
  3. Cookie只能存字符串,Session可以存对象;

37、数据库中索引的好处是什么?一个数据库表,经常要进行添加和删除记录的操作,应该为该表建多个索引吗?

  1. 索引是一种特殊的查询表,简单的理解就是在数据库中,将数据按一定的顺序进行排列(分物理索引:只有1个 和逻辑索引:可以有多个),查询的时候,可以有效提高查询速度。
  2. 如果一个表要频繁的进行添加和删除记录的操作(不是查询),不建议建立多个索引,因为添加和删除记录,都需要调整索引,增加数据库负担,影响性能。

39、什么是事务?

  1. 事务是一系列的数据库操作,是数据库应用的基本逻辑单位,事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
  2. 事务具有如下特性:(其中原子性最为重要,必须掌握)
  • 原子性(atomicity) 一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
  • 一致性(consistency) 事务必须是使数据库从一个一致性状态变到另一个一致性状态。
  • 隔离性(isolation) 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持久性(durability) 持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

43、内连接和外连接的区别?

  1. 内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。
  2. 在外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行。分左连接、右连接、全连接(笛卡尔集)三种。

44、请介绍一下数据库连接池技术?

  1. 数据库连接池技术,就是数据库启动时会建立一定数量的数据库连接(也称为池连接),并一直维持不少于此数目的池连接。
  2. 客户端程序需要连接数据库时,数据库连接池会返回一个未使用的池连接给数据库使用。如果当前没有空闲连接,数据库连接池就新建一定数量的连接。当使用的池连接调用完成后,连接池将此连接表记为空闲,其他调用就可以使用这个连接。这样做的目的是提高了应用程序访问数据库的性能。

45、MySQL、Oracle、SQL Server各数据库服务的端口号?

  • MySQL:3306
  • Oracle:1521
  • SQL Server:1433

46、Oracle和SQL Server的分页有什么区别?

  • 在SQL Server中使用TOP分页,
  • 在Oracle中用ROWNUM,或分析函数ROW_NUMBER,
  • 在MySQL中用Limit。

47、如何对数据库进行优化?

  1. 先优化SQL语句;
  2. 表级别优化:比如说建立索引;
  3. 数据库级别优化:比如说数据库参数设置,例如连接池数量;

60、session的load()和get()的区别

  1. get()采用立即加载方式;而load()采用延迟加载;
  2. get()方法执行的时候,会立即向数据库发出查询语句,而load()方法返回的是一个代理(此代理中只有一个id属性),只有等真正使用该对象属性的时候,才会发出sql语句;
  3. 如果数据库中没有对应的记录,get()方法返回的是null。而load()方法出现异常ObjectNotFoundException

63、什么是AOP?谈谈你对他的理解。

  1. AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种思想。
  2. 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 当项目中需要编写大量相同功能重复代码时,可以考虑使用AOP的形式来实现。如声明式事务管理、权限校验等。

64、什么是IOC和DI?

1、IOC是控制反转,DI是依赖注入,其基本含义差不多。
2、IOC:原来创建对象的控制权是由我们自己来创建的,现在不再是由程序员创建了,由IOC容器为我们提供,这样带来的好处是,降低代码的耦合度,更加符合开闭原则;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值