面试题
文章平均质量分 67
xiaxzhou
这个作者很懒,什么都没留下…
展开
-
【数据结构】 堆
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)void MakeHeap(int * array, int len){ for (auto i = len - 1; i >= 1;--i) { if (array[(i-1)/2] < array[i]) { std::swap(array[i / 2], a原创 2017-06-02 18:01:30 · 295 阅读 · 0 评论 -
【面经笔记】多线程
线程的基本概念、线程的基本状态及状态之间的关系?http://blog.csdn.net/bornlili/article/details/55805732线程是进程的一个顺序执行流。线程是进程中的一个执行控制单元,执行路径。 一个进程中如果只有一个执行路径,这个程序称为单线程 一个进程中有多个执行路径时,这个程序成为多线程新建态、就绪态、运行态、阻塞态、挂起态、结束态线原创 2017-08-30 15:33:24 · 550 阅读 · 0 评论 -
【语法】sizeof和strlen
http://blog.csdn.net/niushuai666/article/details/7677210一、sizeofsizeof(…)是运算符,而不是一个函数。其值在编译时即计算好了。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。具体而言,当参数分别如下时,sizeof返回的值表示的含义如下: 数组——编译时分配的数组空间大小; 指针——原创 2017-08-31 10:50:18 · 135 阅读 · 0 评论 -
【面经笔记】Windows下的动态链接(DLL)
使用DLL的优点共享、模块化,可方便的组合,重用,升级基地址和RVA当一个PE文件装载时,其进程地址空间中的起始地址就是基地址,对于可执行文件exe,一般为0x400000,对于DLL文件一般为0x10000000。若该地址被占用,则会选用其他空闲的地址,RVA就是一个地址相对于基地址的偏移。声明可以通过_declspec(dllexport)表示该符号是从dll导出的符号,_declspec(dl原创 2017-09-05 11:59:50 · 1732 阅读 · 0 评论 -
【面经笔记】好未来 - 已挂
1、 手写二叉搜索树的插入、删除没写过,删除操作完全写错了。2、手写堆的实现实现了自顶向下的维护堆的函数,面试官说不好,应该写个自底向上的、、、3、给定一个M*N的棋盘,给定一个出发点,终点。只能走”日”,即马走日。判断能否到达终点。我写了个广度优先搜索路径的算法面试官想了半天说可能不对:已经遍历的点,不会再入队列,所以某个点如果要走两遍的话会出问题。当时没坚持。回来想想,这种情况根本就是扯淡。面试原创 2017-08-21 22:18:42 · 2144 阅读 · 3 评论 -
【面经笔记】装载,CRT
双击可执行文件发生了什么创建一个独立的虚拟地址空间创建虚拟地址空间不是创建空间,而是创建映射函数所需要的相应的数据结构。读取可执行文件头,并建立虚拟空间与可执行文件的映射关系上一步是建立虚拟空间到物理内存的映射关系,这一步是建立虚拟空间与可执行文件的映射关系。将cpu的指令寄存器设置为可执行文件的入口地址,启动运行。装载PE可执行文件过程:RVA(Relative Virtual Add原创 2017-09-04 22:19:53 · 566 阅读 · 0 评论 -
【面经笔记】线程、多线程 - 死锁、读写、消费者问题、TLS【续2】
死锁:定义:一组相互竞争资源或进行通信的进程间的永久阻塞。死锁条件:互斥、占有并等待、不可剥夺、(循环等待)死锁预防:解除死锁的必要条件,排除发生死锁的可能性。互斥:不可禁止占有并等待:要求进程一次性请求所有资源,阻塞直到所有请求满足不可剥夺:进程若进一步请求被拒绝,则需释放最初占有的资源;优先级高的进程可以抢占优先级低的进程资源。死锁避免:允许三个发生死锁的条件,但是通过明智的策略,确原创 2017-07-23 20:30:17 · 655 阅读 · 0 评论 -
【算法题】两有序数组中位数
有两个排序的数组,长度都为n,求合并后的排序数组的中位数。要求时间复杂度为log(n)。解法1:直接的解法是遍历两个数组并计数,类似归并排序里面的有序数组的合并,复杂度为O(n)解法2:分治策略:设两个数组为A[n],B[n]。 若A[n/2] < B[n/2]:中位数k必定位于A[n/2]-A[n]、B[0]-B[n/2]。且k也是两个数组A[n/2]-A[n]、B[0]-B[n/2]的中位数原创 2017-08-27 17:08:52 · 536 阅读 · 0 评论 -
【面经笔记】主定理
递归式:T(n)=aT(n/b)+f(n)T(n)=aT(n/b)+f(n) 含义: 将规模n的问题分为a个子问题,每个子问题的规模是n/b,其中a个子问题递归地进行求解,每个花费时间T(n/b)。函数f(n)包含了问题分解和子问题解合并的代价。 T(n)有如下渐进界:1、若对于某常数c>0有 : f(n)=O(nlogb(a−c))f(n)=O(n^{log_b(a-c)})原创 2017-08-27 14:45:50 · 419 阅读 · 0 评论 -
【数据结构】搜索二叉树
手写实现搜索二叉树:树的节点定义:class TreeNode{public: TreeNode(int v) :value(v){}; TreeNode* left_son = NULL; TreeNode* right_son = NULL; TreeNode* p = NULL; //一定保存双亲的指针 int value = 0;原创 2017-08-25 17:09:00 · 379 阅读 · 0 评论 -
【算法题】对称二叉树判断
解法1:分层遍历二叉树,判断每一层的节点是否轴对称。#include <iostream>#include <vector>#include <algorithm>#include <numeric>using namespace std;#define debug_struct TreeNode { int val; struct TreeNode *left;原创 2017-09-02 18:50:08 · 387 阅读 · 0 评论
分享