我的求职面试题日记
去粗取精,去伪存真,面试题精选如下所示
1、什么是“依赖注入”和“控制反转”?为什么有人使用?
控制反转(IOC)是Spring框架的核心思想,用我自己的话说,就是你要做一件事,别自己可劲new了,你就说你要干啥,然后外包出去就好~
依赖注入(DI) 在我浅薄的想法中,就是通过接口的引用和构造方法的表达,将一些事情整好了反过来传给需要用到的地方~
2、ArrayList 和 LinkedList 的区别是什么?
1、 数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。
2、 随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找。
3、 增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。
4、 内存空间占用:LinkedList 比 ArrayList 更占内存,因为 LinkedList 的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。
5、 线程安全:ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;
6、 综合来说,在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList。
7、 LinkedList 的双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。
3、观察者模式应用场景
1、 关联行为场景,需要注意的是,关联行为是可拆分的,而不是“组合”关系。事件多级触发场景。
2、 跨系统的消息交换场景,如消息队列、事件总线的处理机制。
1、 定义抽象观察者,每一个实现该接口的实现类都是具体观察者。
2、 定义具体观察者
3、 定义主题。主题定义观察者数组,并实现增、删及通知操作。
4、 定义具体的,他继承继承Subject类,在这里实现具体业务,在具体项目中,该类会有很多。
5、 运行测试
4、Array与ArrayList有什么不一样?
Array与ArrayList都是用来存储数据的集合。ArrayList底层是使用数组实现的,但是arrayList对数组进行了封装和功能扩展,拥有许多原生数组没有的一些功能。我们可以理解成ArrayList是Array的一个升级版。
5、实例化数组后,能不能改变数组长度呢?
不能,数组一旦实例化,它的长度就是固定的
#牛客创作赏金赛#