美文网首页
阿里巴巴笔试(错题反思)

阿里巴巴笔试(错题反思)

作者: 飞猪的浪漫 | 来源:发表于2021-08-31 07:54 被阅读0次

    (英语:heap)通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:

    堆中某个节点的值总是不大于或不小于其父节点的值;

    堆总是一棵完全树。

    将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。

    堆的定义如下:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。

    (ki<= k2i,ki<= k2i+1)或者(ki>= k2i,ki>= k2i+1), (i = 1,2,3,4...n/2)

    堆是一种完全二叉树

    大顶堆:每个节点的值都大于等于其孩子结点的值

    小顶堆:每个节点的值都小于等于其孩子结点的值

    方法:把关键字按顺序写成完全二叉树即可,在判断是否是堆。

    首先矩阵相乘一般是不能交换顺序的,所以选项CDE就是错误的。

    首先使较小的矩阵相乘,最后乘较大的矩阵可以减少运算量。所以B选项的效率最高

    A:(AB)C

    B: A(BC)

    C[1..m]表示的环形队列,m 为数组的长度。假设 f 为队头元素在数组中的位置,r 为队尾元素的后一位置(按顺时针方向)。

    环形(顺序)队列的元素个数的公式应为(r+m-f)%m+1,最后还要加上1

    二分查找树里查询一个关键字的最坏时间复杂度是______

    最坏的情况就是节点的插入序列有序,此时树退化为单枝树,查找退化为顺序查找,最坏情况变为O(n)。

    哈夫曼树

    两个并发的进程,其中一个进程对另一个进程的影响常常是不可预期 的,甚至是无法再现的。这是因为两个并发进程执行的相对速度无法相互控制,交往的并发进程的速率不仅处理器调度的影响,而且还受到与这两个交往的并发进程 无关的其它进程的影响,所以一个进程的速率通常无法为另一个进程所知。因此交往的并发进程的执行就可能产生各种与时间有关的错误。

           那么一个进程被中断后,哪个进程可以运行呢?被中断的进程什么时候能再去占用处理器呢?这是与进程调度策略有关的.所以,进程执行的相对速度不能由进程自己来控制,还与进程调度策咯有关

    未定义行为(Undefined Behavior)是指C语言标准未做规定的行为。同时,标准也从没要求编译器判断未定义行为,所以这些行为有编译器自行处理,在不同的编译器可能会产生不同的结果,又或者如果程序调用未定义的行为,可能会成功编译,甚至一开始运行时没有错误,只会在另一个系统上,甚至是在另一个日期运行失败。当一个未定义行为的实例发生时,正如语言标准所说,“什么事情都可能发生”,也许什么都没有发生。一句话,未定义行为就是运行结果不确定

    1.变量即是左边结果,又是右边的操作数,如a+=a++,a %= b ^= a ^= b ^= a

    2.使用越界数组也是C的一个“未定义行为”

    3.允许一个随便指的指针的读写。

    4.使用未初始化的变量

    分布式缓存是能保证服务快速响应,是高效性的需求,不是可扩展性的需求

    栈:在Windows下,栈是向低地址扩展的数据结构是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将 提示overflow。因此,能从栈获得的空间较小。    

     堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储  的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小  受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。 

    在C/C++中,内存一般分为,堆区,栈区,全局区,文字长量区,程序代码区!在函数中定义的局部变量是存在栈区除static局部变量,他是存在在全局区),动态生成的变量存在在堆区,由指针进行读写!全局变量,静态全局变量,静态局部变量是存放在全局区的堆是程序员进行申请和释放的,因此堆是向上,也就是向高地址方向的!

    栈是系统进行释放的,且栈区大小一般是定的2M,因此栈是向下,也就是向底地址方向! 另外说下,静态局部变量,静态全局变量和全局变量的区别,静态变量没有初始化时,系统会给默认值,而全局变量不会!全局变量在整个工程中都是可见的,而静态全局变量只在本文件中可见,静态局部变量只在此函数内部可见,但函数结束后不释放!

    所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,一般银行都使用短连接。

    通俗解释就是长连接:一次连接发多个包。短连接:一次连接发少量包

    所以长连接相对短连接可以节省建立连接的时间

    TCP建立连接3次握手,断开链接需要4次

    对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。

    在调用sleep()方法的过程中,线程不会释放对象锁。

    而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备。

    相关文章

      网友评论

          本文标题:阿里巴巴笔试(错题反思)

          本文链接:https://www.haomeiwen.com/subject/nrlmdltx.html