
阿里巴巴面试题
文章平均质量分 58
xiaxzhou
这个作者很懒,什么都没留下…
展开
-
【面经笔记】动态规划的原理与本质
与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。与分治法最大的差别是:适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶原创 2017-07-12 10:12:00 · 1352 阅读 · 0 评论 -
【面经笔记】TCP/IP
位码即tcp标志位,有6种表示:SYN(synchronous 建立连接)ACK(acknowledgement 表示响应、确认)PSH(push 表示有DATA数据传输)FIN(finish 关闭连接)RST(reset 表示连接重置)URG(urgent 紧急指针字段值有效)三次握手:第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第原创 2017-07-14 20:54:36 · 531 阅读 · 0 评论 -
【面经笔记】哈希表
http://blog.youkuaiyun.com/xxpresent/article/details/55806298哈希表几种方法:直接定址法:取关键字key的某个线性函数为散列地址 Hash(key) = A*key+B除留取余法 :关键值除以比散列表长度小的素数所得的余数作为散列地址 Hash(key) = key % p;字符串:BKDR哈希算法(字符串哈希算法) size_t BKDRH原创 2017-07-15 18:25:54 · 553 阅读 · 0 评论 -
【面经笔记】堆排序与topk问题
最大堆的数组实现维持堆函数:h为新元素位置,假设h的两个孩子树已经是最大堆1、 如果D[h]为D[h]、左孩子、右孩子中的最大值,则结束调整。 2、 否则,将X[h]与孩子中的最大值互换,更新h值,返回上一步void KeepHeap(int * array, int len, int h){ int lagest = h; int leftchild = (h << 1)原创 2017-07-11 11:53:03 · 1132 阅读 · 0 评论 -
【编程题】2018阿里编程题题一
转化为最短路径搜索:将D中存储的词看为一条路径:如”like”表示“ilikealibaba”中存在一条从S[1]: “l”直接到S[5]: “a”的路径。则最少空格数的解就是从S[0]走到S[n]最短路径的解。测试样例中存在两条路径:1: S[0]->S[1]->S[5]->S[7]->S[12]2: S[0]->S[1]->S[5]->S[12]#include <stdio.h>#inclu原创 2017-08-26 09:54:05 · 1431 阅读 · 0 评论 -
【算法题】编程测试:射击场
在某射击场有N个靶,每个靶上都有一个分数,存在score数组中,击中第i个靶的得分为score[left]*score[i]*score[right],同时原left和right两个靶变为相邻的靶,其中得分为0的靶是不能射击的,当left不存在或者不能射击时,得分为score[i]*score[right],同理,right也遵循此规则,当left和right都不存在或者都不能射击时,得分为scor原创 2017-08-17 10:50:38 · 1462 阅读 · 0 评论 -
【算法题】兔子
#include <iostream>#include <vector>#include <algorithm>#include <windows.h>#include <numeric>using namespace std;#define debug_int x, y;long long func(){ vector<long long> vec(x,0);//vec[i原创 2017-08-17 15:30:25 · 949 阅读 · 0 评论 -
【面经笔记】线程、多线程 - 死锁、读写、消费者问题、TLS【续2】
死锁:定义:一组相互竞争资源或进行通信的进程间的永久阻塞。死锁条件:互斥、占有并等待、不可剥夺、(循环等待)死锁预防:解除死锁的必要条件,排除发生死锁的可能性。互斥:不可禁止占有并等待:要求进程一次性请求所有资源,阻塞直到所有请求满足不可剥夺:进程若进一步请求被拒绝,则需释放最初占有的资源;优先级高的进程可以抢占优先级低的进程资源。死锁避免:允许三个发生死锁的条件,但是通过明智的策略,确原创 2017-07-23 20:30:17 · 661 阅读 · 0 评论 -
【面经笔记】
如果真的被问到不会的,就直接说你不会(说你不会、说你不会,我再补充两遍),礼貌地说这方面可能我还要多学习。(对一个拿不准的问题千万不要猜,即使是二选一的那种问题,猜错了直接完蛋,猜对了被人看出来,再往深问还是完蛋) 另外,像可能,大概是,我觉得这种表达最好不要,一听就是对一个点没把握,有可能会让面试官觉得学习太浮躁不喜欢寻求原理。印象最深的项目,最大的难点是什么?原创 2017-08-20 15:05:26 · 385 阅读 · 0 评论 -
【面经笔记】内存泄漏检测
参考: http://www.cnblogs.com/juncheng/archive/2009/11/12/1602165.htmlnew/new[]表达式会首先调用operator new/new[]操作运算符函数开辟内存,再调用构造函数构造对象而为了给操作运算符函数传递额外的参数:文件名与行号,需要使用定位new表达式(C++primer P729) new(void ) type原创 2017-07-26 10:16:32 · 365 阅读 · 0 评论 -
【面经笔记】访问私有变量
有一个类里面只有一个私有int类型成员变量,也有一个类对象,怎么访问这个变量class A{public: A(int lhs) :i(lhs){ }; virtual void func(){};private: int i;};int main(){ A a(1); int * b = (int *)&a; cout << *(b+原创 2017-07-24 19:47:37 · 292 阅读 · 0 评论 -
【面经笔记】进程间通信方式、线程同步机制
线程进程的区别:进程是资源分配的基本单位、线程是调度的基本单位一个进程可包含多个线程线程又称轻量级进程:进程间切换代价大,线程间切换代价小进程有独立的资源,如内存空间,IO资源等,进程中线程共享这些资源进程间通信常用有4种方式,以下从简单到复杂:1.管道(pipe) 匿名/无名管道: http://blog.youkuaiyun.com/shltsh/article/details/4652原创 2017-07-12 16:58:07 · 855 阅读 · 0 评论 -
【面经笔记】TCP
确认应答当数据到达接收主机时,接收端主机会返回一个确认应答:ACK如果发送端一定时间内没有等到确认应答,认为数据丢失,并重发。没有收到确认应答有可能是因为:数据丢失 或者 应答丢失为了避免应答丢失时,接收端重复接收数据,需要能识别是否已接收数据、又能判断是否需要接收:按顺序给发送的数据的每个字节标上编号:序列号接收端查询接收数据TCP首部的序列号和包含的数据的长度,将自己下一步应该接收的序列号作为确原创 2017-07-29 10:52:57 · 767 阅读 · 0 评论 -
【面经笔记】多线程
线程的基本概念、线程的基本状态及状态之间的关系?http://blog.youkuaiyun.com/bornlili/article/details/55805732线程是进程的一个顺序执行流。线程是进程中的一个执行控制单元,执行路径。 一个进程中如果只有一个执行路径,这个程序称为单线程 一个进程中有多个执行路径时,这个程序成为多线程新建态、就绪态、运行态、阻塞态、挂起态、结束态线原创 2017-08-30 15:33:24 · 552 阅读 · 0 评论 -
【面经笔记】进程调度方式
分为两大类:可剥夺和不可剥夺基于优先级调度:优先级高的进程先运行,可剥夺基于调度策略:选择函数:先进先出(FIFO) 将优先级与队列结合,每个优先级一个队列轮询/轮转 周期性间隔产生中断,中断发生时,当前运行的进程置于就绪队列中,然后基于FIFO策略选择下一个就绪进程。最短进程优先(Shortest Process Next,SPN) 下一次选择预计处理时间最短的进程进行处理,难点是不知道进原创 2017-08-31 10:28:45 · 729 阅读 · 0 评论 -
【面经笔记】线程、多线程
多线程方式、threadlocal,各种锁,synchronized和lock , 多线程中的wait和sleep区别,notify的作用 , 线程池对线程的管理方式,包括初始化线程的方法、线程创建后的管理、指派任务的方式 线程池的了解、优点、调度处理方式和保护任务队列的方式 多线程可以使用多核吗 多线程同步、 线程池、 无锁编程: 有锁编程的问题与解决方法:阻塞(效率下降)、死锁、原创 2017-07-22 11:43:24 · 469 阅读 · 0 评论 -
【面经笔记】线程、多线程【续1】
各种锁pthread中提供的锁有:pthread_mutex_t, pthread_spinlock_t, pthread_rwlock_t。pthread_mutex_t是互斥锁,同一瞬间只能有一个线程能够获取锁,其他线程在等待获取锁的时候会进入休眠状态。因此pthread_mutex_t消耗的CPU资源很小,但是性能不高,因为会引起线程切换。pthread_spinlock_t是自旋锁,同原创 2017-07-22 22:36:21 · 216 阅读 · 0 评论 -
【面经笔记】排序算法的空间、时间复杂度
直接选择排序时间复杂度:O(n2)O(n^2) 空间复杂度:O(1)O(1) 稳定性:不稳定插入排序时间复杂度:O(n2)O(n^2) 空间复杂度:O(1)O(1) 稳定性:稳定折半插入排序 折半插入排序是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法原创 2017-07-24 17:17:41 · 461 阅读 · 0 评论 -
【面经笔记】TCP超时等待
IP协议的不可靠性:IP协议仅仅负责数据的运输,可以说就是一个运输工; 非常无脑地送数据包,不管包中的数据是否出现错误,也不管数据包送的顺序等等,就算丢包了也不管,就是无脑送。TCP/IP是分工协作的,是互补的: IP只负责运送数据,TCP协议负责数据安全; TCP会在IP收到数据包后丢数据包进行检查,保证确认无误才接受,否则就会通知发送端重新发送那个数据包原创 2017-07-14 21:43:20 · 1243 阅读 · 0 评论 -
【面经笔记】struct与class的区别
http://blog.youkuaiyun.com/yuliu0552/article/details/6717915C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗? 能!struct能继承吗? 能!!struct能实现多态吗? 能!!!有很多人应该已经知道这样一个事实,但总有些不知道的人,看到这些会原创 2017-07-15 21:26:53 · 315 阅读 · 0 评论 -
【面经笔记】STL库的介绍
STL库的介绍STL**六大组件**简介1、容器(Containers):各种数据结构,如Vector,List,Deque,Set,Map,用来存放数据,STL容器是一种类模板。2、算法(Algorithms):各种常用算法如Sort,Search,Copy,Erase,从实现的角度来看,STL算法是一种函数模板。3、迭代器(Iterators):扮演容器与算法之间的胶合剂,是所谓的“泛型指针”,原创 2017-07-15 22:39:03 · 603 阅读 · 0 评论 -
【面经笔记】STL
空间配置器:为什么不说allocator是内存配置器:空间不一定是内存,空间也可以是磁盘或其他存储介质,你可以写一个allocator直接向硬盘取空间。SGI STL的配置器名为alloc,是缺省的空间配置器。 虽然也定义了一个符合部分标准的allocator配置器,但只是把C++中new和delete简单包装而已,性能不佳。 SGI std::alloc:new包含了:operator原创 2017-07-16 21:10:37 · 733 阅读 · 0 评论 -
【面经笔记】STL(续)
hashset(散列集合)、hashmap(散列映射表)的实现方式:hashtable(散列表)map、set、multiset、multimap的实现方式:红黑树原创 2017-07-16 21:19:05 · 404 阅读 · 0 评论 -
【面经笔记】红黑树的特性与其在C++ STL中的应用
AVL树和红黑树适合内部存储应用,B树适合外部存储应用AVL树和红黑树都是用旋转保持平衡,AVL树对每个插入操作最多需要两次次旋转(单/双旋),对每个删除操作最多需要O(logn)次旋转;而红黑树对每个插入和删除操作,任何不平衡都会在三次旋转之内解决。查找、插入、删除的时间均为log(n),红黑树的算法时间复杂度和AVL相同,但红黑树的统计性能要好于平衡二叉树,但极端性能略差。平衡二叉树/AVL树:原创 2017-07-11 22:08:55 · 3260 阅读 · 0 评论 -
【面经笔记】析构函数一般写成虚函数的原因
为多态性质的基类声明虚析构函数:继承类对象经由一个基类指针被删除,若基类是非虚的析构函数,继承类的成分没有被销毁,造成局部销毁对象,形成资源泄漏,败坏数据结构。当一个类不被当做基类、或者不具有多态性时,令其析构函数为虚函数是多余的,浪费内存。原创 2017-07-17 10:37:05 · 1208 阅读 · 0 评论 -
【面经笔记】B树、B+树
原文: https://www.nowcoder.com/discuss/27739?type=2&order=1&pos=30&page=2B树、B+树、存储模型参考: http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html http://blog.youkuaiyun.com/v_JULY_v/art原创 2017-07-09 11:33:41 · 944 阅读 · 0 评论 -
【面经笔记】哲学家进餐问题
哲学家进餐问题场景:5个哲学家,5把叉子,5盘意大利面(意大利面很滑,需要两把叉子才能拿起)大家围绕桌子,进行思考与进食的活动。哲学家的活动方式为:要么放下左右手刀叉进行思考,要么拿起刀叉开始吃饭(刀叉拿起时,必须拿两把,而且只能左右手依次拿,先左手拿左边,后右手拿右边,或者先右手拿右边,左边拿左边)。其只有这两种交替状态。哲学家们面临的问题为:如何安排哲学家们一致的行动逻辑,保证他们至少有人且尽可原创 2017-07-17 12:02:20 · 822 阅读 · 0 评论 -
【面经笔记】范围搜索/最近邻搜索
例1:平面上百万个点,设计数据结构求每个点最近的k个点例2:游戏中打怪时已经各个小怪的坐标,你放一个技能是圆形范围,快速求能打到的小怪KD树:http://www.cnblogs.com/v-July-v/archive/2012/11/20/3125419.html最近邻搜索: k近邻搜索:参考: http://blog.youkuaiyun.com/dark_scope/article/detai原创 2017-07-24 16:15:31 · 1877 阅读 · 0 评论 -
【面经笔记】Bloom过滤器处理大规模问题
Bloom过滤器处理大规模问题时的持久化,包括内存大小受限、磁盘换入换出问题 http://www.360doc.com/content/13/1226/18/15234639_340327658.shtml由于BF所用的空间非常小,所有BF可以常驻内存,Key-Value系统中Value 保存在磁盘中,使用布隆过滤器可以快速判断某个Key对应的Value是否存在,因此可以避免很多不必要的磁盘原创 2017-07-15 21:03:33 · 1736 阅读 · 0 评论 -
【面经笔记】面向对象
面向对象的三大基本特征:封装、继承、多态封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。 实现多态,有二种方式,覆盖,函数重载面向对象设计的六大原则单一职责原则(Single-Resposibility原创 2017-07-09 20:44:30 · 408 阅读 · 0 评论 -
【面经笔记】持久化数据结构,序列化与反序列化时机
可持久化数据结构 就是使数据结构可以返回历史版本一般的实现方法是新建有修改的点 其他点与上一版本共用 这样做到空间复杂度带上一个或两个log序列化:将程序中的对象或者数据结构转换成二进制串的过程。反序列化:将在序列化过程中所生成的二进制串转换成对象或者数据结构的过程序列化与反序列化对应于ISO-OSI七层参考模型的表示层,对应到TCP/IP协议栈则是应用层。原创 2017-07-09 21:48:08 · 690 阅读 · 0 评论 -
【面经笔记】trie树/字典树
字典树构造及其优化与应用字典树的核心就是空间换时间,利用字符串的公共前缀来避免无谓的字符串比较,降低查询时间。对于统计/查询单词的问题,可将哈希表改进为字典树提升效率。性质: - 根结点不包含字符,除了根结点每个结点都包含一个字符 - 从根结点到某一结点的路径经过的字符连接起来就是该结点对于的字符串 - 查询和建树可以同时进行例:有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16原创 2017-07-09 20:09:56 · 1096 阅读 · 0 评论