Java面试题63个---基础

目录

1.String s = new String("xyz");创建了几个String Object? 二者之间有什么区别?

2.常见的应用服务器有那些? 

3.说说&和&&的区别?

4.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

5.列举几个常见的runtime exception。

6.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

7.数组有没有length()这个方法? String有没有length()这个方法?

8.==与equals()有何区别?

9.是否可以继承String类,列举几个不可被继承的类。

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

11.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

12.error 和 exception 有什么区别?

13.面向对象的特征有哪些方面? 

14.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 

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

16.说一说 Servlet 的生命周期?

17.String 和StringBuffer、StringBuilder的区别? 

18.数据库三范式是什么?

19.java中实现多态的机制是什么?

20.Java中的基本数据类型有哪些?String是最基本的数据类型吗? 

21.请说出作用域public,private,protected,以及不写时(默认)的区别

22.什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。

23.MYSQL的两种存储引擎区别?

24.SQL语言分类,分别有哪些操作?

25.drop、truncate、 delete区别?

26.你所知道的集合类都有哪些?主要方法?

27.简述ArrayList,Vector, LinkedList的存储性能和特性 。

28.简述HashMap和Hashtable的区别? 

29.List、Map、Set三个接口,存取元素时,各有什么特点?

30.Integer与int的区别

31.request.getAttribute() 和 request.getParameter() 有何区别? 

32.forward()与redirect()的区别?

33.HTTP请求中GET与POST方式的区别。 

34.MVC的各个部分都有哪些技术来实现? 

35.MyBatis里面的动态Sql是怎么设定的?用什么语法? 

36.讲一下MyBatis的缓存?

37.什么是Spring的IOC和AOP?

38.谈谈对MyBatis框架的理解。

39.DAO设计模式包括哪些内容? 

40.你所知道的设计模式有哪些?

41.说说SpringMVC框架的组成部分。

42.说说Cookie和Session的区别。

43.关系数据库中连接池的机制是什么?

44.说一说 Servlet 的生命周期?

45.启动一个线程是用 run()还是 start()?

46.线程和进程有什么区别?

47.事务四大特性?

48.Redis有哪些优势?

49.Redis支持哪些数据结构?

50.Redis的搭建有哪些模式?

51.varchar和char的使用场景?

52.反射中获得一个类的类对象有哪些方式?

53.如何通过反射创建对象?

54.如何实现对象克隆?

55.索引的作用?它的优点缺点是什么?

56.mysql都有什么锁?

57.Redis 的持久化方式?

58.Redis 和 Memcached 有什么区别?

59.负载均衡的常用算法?

60.阐述final、finally、finalize的区别。

61.jsp 有哪些内置对象?作用分别是什么?

62.运⾏Spring Boot有哪⼏种⽅式?

63.常见的SQL代码优化有哪些? 


1.String s = new String("xyz");创建了几个String Object? 二者之间有什么区别?

两个或一个, ”xyz”对应一个对象, 这个对象放在字符串常量缓冲区, 常量”xyz”不管出现多少遍, 都是缓冲区中的那一个。 New String 每写一遍, 就创建一个新的对象, 它一句那个常量”xyz”对象的内容来创建出一个新 String 对象。 如果以前就用过’xyz’, 这句代表就不会创建”xyz”自己了, 直接从缓冲区拿。

2.常见的应用服务器有那些? 

WebLogic,jBoss,Tomcat 。

3.说说&和&&的区别?

答:&和&&都可以用作逻辑与的运算符, 表示逻辑与(and) , 当运算符两边的表达式的结果都为 true 时,整个运算结果才为 true, 否则, 只要有一方为 false, 则结果为false。&&还具有短路的功能, 即如果第一个表达式为 false, 则不再计算第二个表达式。

4.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

答:前者错后者对,对于前者由于 s1+1 运算时会自动提升表达式的类型, 所以结果是 int 型, 再赋值给 short 类型 s1 时, 编译器将报告需要强制转换类型的错误。对于后者由于 += 是java 语言规定的运算符, java 编译器会对它进行特殊处理, 因此可以正确编译。

5.列举几个常见的runtime exception

ArithmeticException数学运算异常, ClassCastException类型转换异常,  ArrayIndexOutOfBoundsException数组下标越界异常, StringIndexOutOfBoundsException字符串下标越界异常,NullPointerException空指针异常,

6.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

  接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数。

7.数组有没有length()这个方法? String有没有length()这个方法?

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

8.==equals()有何区别?

==比较地址,equals()比较值,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。equals 方法是用于比较两个独立对象的内容是否相同。 

9.是否可以继承String类,列举几个不可被继承的类。

String类是final类故不可以继承。 常见的不可被继承的类有:StringBuffer,StringBuilder,所有的包装类:Integer,Double,Float,Character,Long等

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

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

11.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

finally表示无论是否有异常,都要执行的语句,所以会执行,在return前执行。

12.error 和 exception 有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。 比如说内存溢出。 不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。 也就是说, 它表示如果程序运行正常, 从不会发生的情况。

13.面向对象的特征有哪些方面? 

面向对象的三大特征:1.继承 2.封装 3.多态性

(1)继承:就是保留父类的属性,扩展新的东西。通过子类可以实现继承,子类继承父类的所有状态和行为,同时添加自身的状态和行为。

(2)封装:就是类的私有化。将代码及处理数据绑定在一起的一种编程机制,该机制保证程序和数据不受外部干扰。

(3)多态:是允许将父对象设置成为和一个和多个它的子对象相同的技术。包括重载和重写。 重载是同一个类中多态的一种表现形式,重写是父类和子类之间的一种多态的表现形式。

(4)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。

默认情况下面向对象有3大特性封装、继承、多态,如果面试官问让说出 4 大特性,那么我们就把抽象加上去。

14.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 

重载和重写。重载:同一个类中,方法名相同,参数列表不同,和其他部分无关。重写:子类中方法名相同方法体不同,子类访问修饰符不小于父类的,返回值类型不大于父类的,和参数列表无关

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

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

16.说一说 Servlet 的生命周期?

Servlet 被服务器实例化后, 容器运行其 init 方法, 请求到达时运行其 service 方法, service 方法自动派遣运行与请求对应的 doXXX 方法(doGet, doPost) 等, 当服务器决定将实例销毁的时候调用其destroy 方法。

17.String 和StringBuffer、StringBuilder的区别? 

StringBuffer、StringBuilder和String一样,也用来代表字符串:

String是不可变字符串,每次赋值都是新的字符串,老的还存在;

StringBuffer和StringBuilder是可变字符串,每次是修改原有的值,性能更佳。

StringBuffer是线程安全,StringBuilder线程不安全

18.数据库三范式是什么?

第一范式(1NF) : 字段具有原子性,不可再分

第二范式(2NF) 是在第一范式(1NF) 的基础上建立起来的, 即满足第二范式(2NF) 必须先满足第一范式(1NF) 。要求数据库表中的每个实例或行必须可以被惟一地区分。

第三范式(3NF) 必须先满足第二范式(2NF) 。 简而言之, 第三范式(3NF) 要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

19.java中实现多态的机制是什么?

靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

20.Java中的基本数据类型有哪些?String是最基本的数据类型吗? 

基本数据类型包括byte、short、int、long、double、float、char、boolean。 String类不是。

21.请说出作用域public,private,protected,以及不写时默认的区别

Public同项目下皆可访问;protected同包下和非同包下的子类;不写是只能同包下访问;private只能当前类访问

22.什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用。

序列化:是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:需要被序列化的类应实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用对应的输入流。

23.MYSQL的两种存储引擎区别?

MYISAM:不支持外键,表锁,插入数据时,锁定整个表,查表总行数时,不需要全表扫描。

INNODB:支持外键,行锁,查表总行数时,全表扫描。

24.SQL语言分类,分别有哪些操作?

数据查询语言DQL:SELECT,FROM,WHERE

数据操纵语言DML:插入 INSERT,更新 UPDATE,删除 DELETE

数据定义语言DDL:CREATE TABLE 创建表,CREATE  VIEW 创建视图,CREATE  INDEX 创建索引,CREATE  SYN 创建同义词,CREATE  CLUSTER 创建簇。

DDL操作是隐性提交的!不能rollback!

数据控制语言DCL:GRANT 授权,ROLLBACK [WORK] TO [SAVEPOINT] 回退到某一点,COMMIT [WORK] 提交。

25.drop、truncate、 delete区别?

drop直接删掉表。

truncate删除表中数据,再插入时自增长id又从1开始。

delete删除表中数据,可以加where字句。

26.你所知道的集合类都有哪些?主要方法?

Map接口和Collection接口是所有集合框架的父接口:

Collection接口的子接口包括:Set接口和List接口

List集合对应实现类:ArrayList、LinkedList,常用方法:添加add、remove移除、获取get。

Set集合对应实现类:HashSet、TreeSet,常用方法同上。

Map集合对应实现类:HashMap、TreeMap,常用方法:添加put、移除remove

27.简述ArrayList,Vector, LinkedList的存储性能和特性 

ArrayList数组结构存储,数组因为有下标且长度不可变,所以查询速度快,增删改速度慢。LinkedList链表结构存储,增删改速度快,查询速度慢。Vector是线程安全的,干啥都慢

28.简述HashMap和Hashtable的区别? 

父子关系:Map>Hashtable>HashMap。

1.HashMap允许将null作为键,Hashtable不允许。

2.Hashtable的方法是Synchronized的,HashMap不是

29.List、Map、Set三个接口,存取元素时,各有什么特点?

List:有序,可重复。 Set特点:无序,不可重复。 Map特点:键值对存储,无放入顺序,键不可重复。

30.Integer与int的区别

int是基本数据类型。Integer是int对应的包装类类型,是引用数据类型,Integer比int多保存一个null

31.request.getAttribute() 和 request.getParameter() 有何区别? 

getParameter():是获取 POST/GET 传递的参数值,得到的都是String类型。

getAttribute():是获取对象容器中的数据值,得到的是Object对象,如需具体类型可以进行转换。

32.forward()与redirect()的区别?

Forward是请求转发,是服务器端跳转,服务器端把请求转发到别的地方处理,是同一个请求,客户端看不到地址的变化。

Redirect是响应重定向,是客户端跳转,服务器端无法处理请求,客户端重新发起请求到别的地方,客户端看得到地址的变化,是两次请求

33.HTTP请求中GET与POST方式的区别。 

1.get是从服务器上获取数据,post是向服务器传送数据。

2.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。

3.get安全性非常低,会在地址栏显示携带的数据;post安全性较高,地址栏看不到数据。

4.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

34.MVC的各个部分都有哪些技术来实现? 

Model:模型层,对应dao等,JDBC、Mybatis。

View:视图层,对应页面,JSP。

Controller :控制层,对应controller层,Servlet、SpringMVC

35.MyBatis里面的动态Sql是怎么设定的?用什么语法? 

where节点是判断包含节点有内容就插入where,否则不插入。

if节点是判断条件成立就插入节点内容,否则不插入。

36.讲一下MyBatis的缓存?

MyBatis一级缓存放在session里面,默认就有。

二级缓存放在它的命名空间里,默认是打开的,

37.什么是Spring的IOC和AOP?

IOC:控制反转,所有对象的创建权都被spring管理,对象创建的控制权被反转了,需要时直接找spring注入(DI)即可

AOP:面向切面编程,将程序中的交叉业务逻辑(比如安全,日志,事务),封装成一个切面,然后注入到目标业务逻辑中去。

38.谈谈对MyBatis框架的理解。

MyBatis 是一个半自动的JDBC框架,可以手动定制sql语句,使用更加灵活;但最基本的sql语句也要自己写,不如Hibernate方便。对于定制化更高或业务逻辑更加复杂的项目使用较友好。会自动帮我们封装查询结果方便使用。

39.DAO设计模式包括哪些内容

DAO设计模式包括以下5个主要部分: 

(1)、数据库连接类;      

(2)、Model类:

(3)、DAO接口:

(4)、DAO实现类:

(5)、DAO工厂类:

40.你所知道的设计模式有哪些?

Java 中一般认为有 23 种设计模式。跳五种说一下即可

总体来说设计模式分为三大类:

  1. 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
  2. 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
  3. 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

41.说说SpringMVC框架的组成部分

  Spring的MVC框架主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。

42.说说Cookie和Session的区别。

Cookie 和Session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

43.关系数据库中连接池的机制是什么?

前提:为数据库连接建立一个缓冲池。

  1. 从连接池获取或创建可用连接
  2. 使用完毕之后,把连接返回给连接池
  3. 在系统关闭前,断开所有连接并释放连接占用的系统资源
  4. 能够处理无效连接,限制连接池中的连接总数不低于或者不超过某个限定值。

44.说一说 Servlet 的生命周期?

默认情况下,Servlet第一次被访问的时候,调用init方法初始化,中间调用service(doGet/doPost)处理请求,直到服务器关闭调用destroy方法销毁

45.启动一个线程是用 run()还是 start()?

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

46.线程和进程有什么区别?

线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。

不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。

47.事务四大特性?

原子性,要么执行,要么不执行

隔离性,一个事务的成功还是失败,别的事务不受影响

一致性,事务前后,数据总额一致

持久性,事务执行期间出现断线关机等情况,数据立马回滚不受影响,事务一旦提交,数据的改变就是永久的

48.Redis有哪些优势?

1.速度快,因为数据存在内存中

2.支持丰富数据类型,支持string,list,set,sorted set,hash

3.支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

4.丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除

5.单线程,单进程,采用IO多路复用技术。

49.Redis支持哪些数据结构?

string(字符串),hash(哈希),list(队列),set(集合)及zset(sorted set:有序集合)。

50.Redis的搭建有哪些模式?

主从模式、哨兵模式、Cluster(集群)模式。

51.varchar和char的使用场景?

1.char是定长字符串,长度固定。Varchar是不定长字符串,用不完的空间回收。

2.char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找。

3.char的存储方式是:对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节。

4.两者的存储数据都非unicode的字符数据。

52.反射中获得一个类的类对象有哪些方式?

方法1:类型.class,例如:String.class

方法2:对象.getClass(),例如:"hello".getClass()

方法3:Class.forName(),例如:Class.forName("java.lang.String")

53.如何通过反射创建对象?

方法1:通过类对象调用newInstance()方法

方法2:通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象

54.如何实现对象克隆?

实现Cloneable接口并重写Object类中的clone()方法;

实现Serializable接口,通过对象的序列化和反序列化实现克隆

55.索引的作用?它的优点缺点是什么?

作用:

协助快速查询、更新数据库表中数据

优点:

可以大大加快数据的检索速度

可以加速表和表之间的连接

在使用分组和排序子句进行数据检索时提高效率

缺点:

创建索引和维护索引要耗费时间

索引需要占物理空间

当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护

56.mysql都有什么锁?

表级锁:开销小,加锁快;不会出现死锁

行级锁:开销大,加锁慢;会出现死锁

页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁

57.Redis 的持久化方式?

RDB 快照:将存在于某一时刻的所有数据都写入到硬盘中

AOF:AOF 持久化方式记录每次对服务器执行的写操作。当服务器重启的时候会重新执行这些命令来恢复原始的数据。

58.Redis 和 Memcached 有什么区别?

数据类型:Memcached 仅支持字符串类型;而 Redis 支持五种不同种类的数据类型,使得它可以更灵活地解决问题。

数据持久化:Memcached 不支持持久化;Redis 支持两种持久化策略:RDB 快照和 AOF 日志。

分布式:Memcached 不支持分布式;Redis Cluster 实现了分布式的支持。

59.负载均衡的常用算法?

1、随机(Random) 

2、轮询(Round Robin)

3、Least-Connection(最少连接)

60.阐述final、finally、finalize的区别。

final:表示最终的,修饰类表示最终的类,不能被继承;修饰方法表示最终的方法,不能被重写;修饰变量表示是常量,值不可改

finally:通常放在try…catch…的后面,不管是否有异常都要执行的语句

finalize:垃圾回收器,当jvm判断一个对象不会再有更多引用时,会进行回收

61.jsp 有哪些内置对象?作用分别是什么?

答:JSP 共有以下 9 个内置的对象:

Page: JSP 网页本身

pageContext: 网页的属性是在这里管理

Request: 用户端请求,此请求会包含来自GET/POST 请求的参数

Response: 网页传回用户端的回应

session: 与请求有关的会话期

application:整个应用/项目 

out:输出流 

config:项目配置,可以做启动前传值等 

exception 针对错误网页,未捕捉的例外

62.运⾏Spring Boot有哪⼏种⽅式?

1、打jar包或war包运行

2⽤ Maven/Gradle 插件运⾏

3、直接执⾏ main ⽅法运⾏

63.常见的SQL代码优化有哪些? 

1、查询语句中不要使⽤select *

2、尽量减少⼦查询,使⽤关联查询(left join,right join,inner join)替代

3、减少使⽤IN或者NOT IN ,使⽤exists,not exists或者关联查询语句替代

4、or 的查询尽量⽤ union或者union all 代替(在确认没有重复数据或者不⽤剔除重复数据时,

union all会更好)

5、应尽量避免在 where ⼦句中使⽤!=或<>操作符,否则将引擎放弃使⽤索引⽽进⾏全表扫描。

6、应尽量避免在 where ⼦句中对字段进⾏ null 值判断,否则将导致引擎放弃使⽤索引⽽进⾏全表

扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null

如有问题,欢迎讨论 ~

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值