多益网络一面面试问题记录

  1. 什么是面向对象?面向对象和面向过程有什么区别?

    面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

    面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

  2. ArrayList和LinkedList有什么区别?

    ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。

    当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。

    当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。

    ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。

    ArrayList主要控件开销在于需要在lList列表预留一定空间;而LinkList主要控件开销在于需要存储结点信息以及结点指针信息。

  3. 链表和数组有什么区别?在什么时候应该使用链表/数组?

    数组便于查询,链表便于插入删除。数组节省空间但是长度固定,链表虽然变长但是占了更多的存储空间。

  4. HashMap的实现方式,HashMap的底层数据结构是什么?

    HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。

    HashMap的底层数据结构是数组+链表

    当链表长度大于等于8时会转换为红黑树

  5. 算法题:Leetcode 141.环形链表 如何判断一个链表是否有环?

    快慢指针解决,时间复杂度为O(n)

  6. 什么是线程不安全?Java要实现线程安全可以用哪些关键字?

    是指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

    实现线程安全可以用Lock和synchronized

  7. 算法题:Leetcode 46.全排列 给定一个值n,输出1-n数字的全排列

    回溯算法解决,时间复杂度:O*(n×*n!),其中 n为序列的长度

  8. 数据库事物的四个基本特性是什么?

    • 原子性:即不可分割性,事务要么全部被执行,要么就全部不执行。
    • 一致性:事务的执行使得数据库以一种正确的状态转换成另一种正确状态。
    • 隔离性:在事务提交之前,不允许把该事务对数据的任何改变提供给任何其他事务。
    • 持久性:事务正确提交之后,其结果将永久保存在数据库中,即使事务提交后有了其他故障,事务的处理结果也会得到保存。