JAVA面试题口语总结 持续更新 (基础篇)

面试题(基础篇)


1.List,set和map的区别?请举例说明两者的使用场景。

List是一个有序,可重复的集合,有序是指集合里面存储的元素有放入顺序(支持使用for循环遍历),并且可以有重复元素。

用的比较多的是ArrayList,用来查找数据和遍历数据。

set是一个无序的,不可重复的集合。无序是指集合里所存储的元素不按存储顺序,而是以元素所对应的hashcode决定的,其位置是固定的。无法使用for循环遍历,可以使用迭代器(Iterator),增强for循环遍历。无重复元素。

set一般用的较少。

map集合是一个键值对存储元素的集合。

map集合提供了一种(key,value)映射的存储形式,每一个key对应一个value,key是唯一的,value可以重复。

比如在做搜索服务的时候,业务层的返回值和接受参数都是Map集合。
因为返回值不光是需要List数据集合,还需要返回分页的相关数据,所以返回Map集合很方便。然后因为搜索不光是接受搜索关键字,后期还有可能按照其他的条件查询,所以也不能简单的用一个String来接受,而用Map进行相关查询参数的接受会更好。


2.谈谈你对面向对象的理解

面向对象思维是更符合我们平时的思维习惯,把复杂的问题简单化,把我们从执行者变成指挥者。
比如开汽车, 你只需要知道我挂挡加油门车就会跑就行, 不需要去了解加油门挂挡为啥车会跑, 不要要了解汽油怎么燃烧, 怎么推动阀门, 怎么带动机器, 怎样带动轮子.
也就是说, 你只要会用就行

面向对象有三大特征: 封装,继承,多态

封装就是将一个事物属性和行为抽象成一个类,属性变得私有化,行为变得公开化,还可以提高代码的复用性

继承则是进一步将一类事物共有的属性和行为抽象成一个父类,然后每一个子类既有父类的行为和属性,也有自己特有的行为和属性。进一步提高了代码的复用性。

多态的一大作用就是为了解除父子类继承的耦合度,简单来说,多态就是允许父类引用(或接口)指向子类(或实现类)对象。


3.事物管理(ACID)和隔离级别

原子性(Atomicity)
原子性是指事物像一个原子一样,是不能分割的,事物中的操作要么都发生,要么都不发生。
比如赚钱,A给B转了500块钱,A少了500块钱,B多500块钱,这两个步骤必须一起成功或者一起失败,不能只发生其中一个。

一致性(Consistency)
一个事务在执行之前和执行之后,数据库都必须处于一致性状态。

隔离性(Isolation)
多个事物之间不能互相影响。比如两个事务同时进行,其中一个事务不允许读取到另外一个事务还没有提交的数据。

持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不能对其有任何影响。

事务的隔离级别

脏读:
指一个事务读取了另外一个事务未提交的数据。

不可重复读:
在一个事务内读取数据库中的某一个数据,多次读取结果却不同,这是由于在查询间隔,被另一个事务修改并提交了。

虚读(幻读):
幻读是事务非独立执行时发生的一种现象。比如事物A操作一个表中的所有行的某个数据从“1”改为“2”,同时事物B又对这个表新添加了一行数据,而这一行中的数值还是为“1”并提交到了数据库,而操作事物A的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,这其实是事物B刚巧添加的,就像幻觉一样。这就是发生了幻读。

第一种隔离级别:Read uncommitted(读未提交)
如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据。
解决了更新丢失,但还是可能会出现脏读。

第二种隔离级别:Read committed(读提交)
如果一个事务已经开始写数据,则另外一个事务不允许同时进行读写操作。
解决了更新丢失和脏读问题,但会出现不可重复读。

第三种隔离级别:Repeatable read(可重复读取)
如果一个事务已经开始读写数据,则另外一个事务不允许同时进行写操作。
解决了更新丢失、脏读、不可重复读、但是还会出现幻读。

第四种隔离级别:Serializable(可序化)
要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。
解决了更新丢失、脏读、不可重复读、幻读(虚读)。


4.Cookie和Session的作用、区别和应用范围。

作用和区别:
1.Cookie和Session都是用来存储用户相关信息的,区别在于Cookie数据是存放在客户的浏览器上的,而Session数据存储在服务器上。
2.Cookie不是很安全,而Session存储在服务器,存储在服务器的数据会更加的安全,不容易被窃取。
3.但存储在服务器的Session数据也有一定的弊端,就是会占用服务器的资源,当考虑到减轻服务器性能方面,应当使用Cookie。
4.cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。
应用范围:
登录信息等重要信息存放在Session中。
其他比如记录下用户名、用户的设置等等,一些网站的“记住用户名”就是靠cookie实现的。

5.MVC的各个部分都有哪些技术实现?如何实现?

MVC是是Model-View-Controller的缩写。

Model:模型层
模型负责各个功能的实现(如登录、增加、删除功能),代表的是运用的业务逻辑。模型用JavaBean实现。

View:视图层
负责页面的显示;与用户的交互。包含各种表单。 实现视图用到的技术有html/css/jsp/js等前端技术。

Controller:控制层
主要是永作辅助捕获请求并控制请求转发。
①接收请求,并将该请求跳转(转发,重定向)到模型进行处理。②模型处理完毕后,再通过控制器,返回给视图中的请求处。


6.单例模式有几种?说出各自的优缺点。

单例模式主要有三种:
1.懒汉式单例:
优点:第一次调用才初始化,避免内存浪费。
缺点:必须加锁synchronized 才能保证单例,但加锁会影响效率。

2.饿汉式单例:
优点:没有加锁,执行效率会提高。
缺点:类加载时就初始化,浪费内存。

3.登记式模式:
内部类只有在外部类被调用才加载,产生SINGLETON实例;又不用加锁。此模式有上述两个模式的优点,屏蔽了它们的缺点,是最好的单例模式。


7.mysql如何实现分页。

一般情况下,客户端通过传递 页码 和 每页条数 两个参数去分页查询数据库中的信息,一般使用mysql自带的limit来解决这个问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值