考研复试专业课(一)

1、当i是一个整数时候, i++和++i 那个更快?它们的区别是什么?

  几乎是一样的。
  i++返回的是i的值,在对i进行+1操作
  ++i返回的是i+1的值

2、指针和引用的区别

  本质上的区别是,指针是一个新的变量,只是这个变量存储的是另一个变量的地址,我们通 过访问这个地址来修改变量。
  而引用只是一个别名,还是变量本身。对引用进行的任何操作就是对变量本身进行操作,因 此以达到修改变量的目的。

3、死锁

  死锁:指两个或两个以上的进程在执行过程中,由于竞争资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

形式死锁的必要条件:互斥条件、请求和保持条件、不可剥夺条件、循环等待条件
产生死锁的原因:系统资源不足、资源分配不当等、进程推进的顺序不合适。
死锁的解决办法:破坏死锁的四个必要条件、对资源进行动态分配、银行家算法

  数据库中死锁产生的原因:一个进程需要访问数据库表或者字段的时候,另外一个程序正在执行带锁的访问(比如修改数据),那么这个进程就会等待,当等了很久锁还没有解除的话就会锁超时,报告一个系统错误,拒绝执行相应的SQL操作。

4、数组和链表的区别

数组:
1、在内存中,数组是一块连续的区域
2、数组需要预留空间:在使用时需要提前申请占用内存空间的大小,就预先申请可能会浪费内存空间;即数组空间利用率低
3、在数组起始位置处,插入数据和删除数据效率低
4、随机访问效率很高,时间复杂度可以达到O(1)
5、数组的空间是从栈区分配的

链表:
1、在内存中, 元素的空间可以在任意地方,空间是分散的,不需要连续
2、任意位置插入元素和删除元素效率较高,时间复杂度为O(1)
3、空间不需要提前指定大小,是动态申请的,根据需求动态的申请和删除内存空间,扩展方便,故空间的利用率较高
4、查找数据时效率低,时间复杂度为O(N)
5、链表的空间是从堆区中分配的

5、二分查找(折半查找)

寻找左右边界low,high,确定中间变量mid=(low+high)/2。
查询时,待查询元素与中间变量mid进行比较。
如果待查询元素>中间变量,则将low=mid+1,mid=(low+high)/2;
带查询元素<中间变量,则将high=mid-1;mid=(low+high)/2;
待查询元素=中间变量,则查询成功。否则缩短查询区间继续查询。
当low>=high时,查询失败。

使用二分查找必须要求是有序的

扫描二维码关注公众号,回复: 13814373 查看本文章

6、链表有哪些优缺点

优点:
(1)插入和删除速度快,保留原有的物理顺序,在插入或者删除一个元素的时候,只需要改变指针指向即可。
(2)没有空间限制,存储元素无上限,只与内存空间大小有关.
(3)动态分配内存空间,不用事先开辟内存
(4)是内存的利用率变高
缺点:
(1)占用额外的空间以存储指针,比较浪费空间,不连续存储,malloc函数开辟空间碎片比较多)
(2)查找速度比较慢,因为在查找时,需要遍历链表。

7、数据库的数据物理独立性和逻辑独立性

  物理独立性是指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。
  逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的,即,当数据的逻辑结构改变时,用户程序也可以不变。
  逻辑数据独立性比物理数据独立性更难做到,这是因为应用程序对于它们所访问的数据的逻辑结构依赖程度很大。

8、头指针和头结点的区别

头指针:是指向第一个节点存储位置的指针,具有标识作用,头指针是链表的必要元素,无论链表是否为空,头指针都存在。
头结点:是放在第一个元素节点之前,便于在第一个元素节点之前进行插入和删除操作,头结点不是链表的必要元素,可有可无,头结点的数据域也可以不存在任何信息。

9、栈和队列的区别

队列是允许在一段进行插入另一端进行删除的线性表。对于进入队列的元素按“先进先出”的规则处理,在表头进行删除在表尾进行插入。
栈是只能在表尾进行插入和删除操作的线性表。对于插入到栈的元素按“后进后出"的规则处理,插入和删除操作都在栈顶进行。

猜你喜欢

转载自blog.csdn.net/weixin_45573296/article/details/123444907