面试题汇总2020/10/13(10/14更新)

interface和abstract class的区别

1、抽象类中可以包含非抽象的普通方法,接口中的所有方法必须是抽象的,不能有非抽象的普通方法。
2、抽象类中可以有普通成员变量,接口中没有普通成员变量。
3、抽象类中的抽象方法的访问类型是public,protect,但是接口中的的抽象方法只能是public类型的,且默认为public abstract类型。
4、抽象类中可以有静态方法,接口中不能包含静态方法。

HashMap和Hashtable的区别

1、HashMap是非线程安全的,只用于单线程环境下。Hashtable是线程安全的,能用于多线程。
2、HashMap中key和value都允许为null。key为null的键值对永远都放在table[0]为头结点的链表中;Hashtable中不允许key和value为null。
3、两者内部实现使用的数组初始化和扩容方式不同;Hashtable默认容量是11,而HashMap是16。Hashtable扩容时,将容量变成原来的2倍加1,而HashMap扩容时,将容量变成原来的2倍。

ArrayList、Vector和LinkedList的存储性能和特性(ArrayList和LinkedListed都是非线程安全的)

ArrayList和Vector都是通过数组方式存储的,此数组元素大于实际存储的数据以便增加和插入元素,他们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入慢。
*ArrayList:
底层的实现就是一个可变数组非同步实现,当数组长度不够用的时候就会重新开辟一个新的数组,然后将原来的数据拷贝到新的数组内。由于这一底层实现,所以ArrayList集合中元素存储的位置是连续的,查询起来效率比较高,插入删除效率较低。Vector与ArrayList的主要是区别是,Vector是线程安全的,但是性能比ArrayList要低 *

LinkedList使用的双向链表实现存储(将内存中零散的内存单元通过附加的引用关联起来,形成一个可以按序号索引的线性结构,这种链式存储方式与数组的连续存储方式相比,内存的利用率更高),按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快

Java常用的几种设计模式,说明工厂模式

常用模式:单例模式、观察者模式、装饰者模式、工厂模式、代理模式

工厂模式:工厂模式就是在接口和子类之间加入了一个过渡端,通过此过渡端获得接口的实例化对象,这个过渡端也就是所谓的工厂类。

关于Spring的一些问题

Spring框架的核心:IoC容器和AOP模块。通过IoC容器管理POJO对象以及他们之间的耦合关系;通过AOP以动态非侵入的方式增强服务。

IOC(控制反转):IOC是Inversion of Control的缩写,将你设计好的对象交给容器控制,而不是在你对象的内部自己控制。IOC理论提出的观点大体就是这样的,借助于“第三方”实现具体有依赖关系的对象之间的耦合。如下图
IOC容器
如上图,由于引入了中间位置的“第三方”,就是IoC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠第三方了;全部对象的控制权全部上缴给了“第三方”IOC容器,所以这个IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象给粘合起来,一起发挥作用。如果没有这个“粘合剂”那各个对象之间就会失去联系,这就是为什么有人把IOC容器比喻成“粘合剂”的由来。把上图的IOC容器拿掉之后就变成了下图:
无IOC容器时
●谁依赖于谁:当然是应用程序依赖于IoC容器;

●为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;

●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;

●注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。
PS:
再对比一下在没有IOC容器的时候,如果对象A要依赖对象B,那么对象A在初始化或者运行到某一时刻,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。

如果引入了IOC容器,对象A和对象B失去了直接的联系,所以当对象A运行到需要对象B的时候。IOC容器会主动创建一个对象B注入到对象A需要的地方。

通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。
简单的理解就是:实现IoC思想,并提供对象创建、对象装配以及对象生命周期管理的软件就是IoC容器。

AOP(面向切面编程):

2020年10月14日更新 ↓↓↓

mysql中innodb和myisam对比及索引原理区别

1、myisam是默认表类型不是事务安全的;innodb支持事务。
2、myisam不支持外键;Innodb支持外键。
3、执行大量select,myisam是最好的选择;执行大量的update和insert最好用innodb。
为什么Myisam要比Innodb的查询速度快?
InnoDB 在做SELECT的时候,要维护的东西比MYISAM引擎多很多;
1)InnoDB 要缓存数据和索引,MyISAM只缓存索引块,这中间还有换进换出的减少;
2)innodb寻址要映射到块,再到行,MyISAM记录的直接是文件的OFFSET,定位比INNODB要快;
3)InnoDB 还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护MVCC ( Multi-Version Concurrency Control )多版本并发控制。

HashMap是什么?

死锁(deadlock)是什么?

死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象。
导致死锁的原因:
(1)因为系统资源不足
(2)进程运行推进顺序不合适
(3)资源分配不当
如果资源充足,进程的资源请求每次都能够得到满足,死锁出现的可能性就很低,否则因为争夺有限的资源而陷入死锁。其次,进程运维推进顺序与速度不同,也可能产生死锁。

同步是什么?

说出几种锁

list和set的区别

list与set方法的区别有:list可以允许重复对象和插入多个null值,而set不允许;list容器是有序的,保持了每个元素的插入顺序;而set容器是无序的,list可以插入多个null元素,而set只允许插入一个null元素。

List中的元素存放是有序的,可以存放重复的元素,检索效率较高,插入删除效率低。
Set没有存放顺序,不能存放 重复的元素,元素检索效率低,插入删除效率高。

JVM是什么?

解释SpringBoot原理和工作流程

Mybits的第一缓存和第二缓存

如何看待约定大于配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值