自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(267)
  • 收藏
  • 关注

转载 佛祖保佑 永无bug" 注释模板设置详解(仅供娱乐)

/** * _ooOoo_ * o8888888o * 88" . "88 * (| -_- |) * O\ = /

2017-12-22 14:50:02 1312

转载 修改Ubuntu终端中,Vim插入模式下光标实现为竖线状

Change cursor shape in different modesFor the Gnome-Terminal (version 2.26)EditThis makes your cursor change in all open terminals. Upgrade your terminal and use the version above instead.if has("auto

2017-11-12 20:57:31 8141 4

原创 【面经笔记】

常量表达式:编译期确定值 普通const变量:运行期初始化

2017-09-24 11:46:37 535

原创 【面经笔记】TCP如何保证可靠传输

TCP协议如何保证可靠传输参考1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就会重传。2、数据校验:TCP报文头有校验和,用于校验报文是否损坏3、数据合理分片和排序:tcp会按最大传输单元(MTU)合理分片,接收方会缓存未按序到达的数据,重新排序后交给应用层。而UDP:IP数据报大于1500字节,大于MTU。这个时候发送方的IP层就需要分片,把数据报分成若干片,是的每一片都

2017-09-17 22:08:09 3812 1

原创 【算法题】全排列,字典序

参考全排列:/* * 递归输出序列的全排列 */void FullArray(char* array, size_t array_size, unsigned int index){ if(index >= array_size) { for(unsigned int i = 0; i < array_size; ++i) {

2017-09-17 16:07:35 574

原创 【面经笔记】软件测试相关问题

为什么选择测试这行?答:它是一个新兴的行业,有发展潜力,而且很锻炼人,需要掌握更多的技能,比做开发要更全面。请问功能测试和性能测试的区别是什么?答:1)测试目的:功能测试:检测实际软件的功能是否符合用户需求,测功能是不是全部实现,某个实现是不是有BUG。主要为了发现以下几类错误:A、是否有不正确或遗漏的功能?B、功能实现是否满足用户需求和系统设计的隐藏需求?C、能否正确接收输入?能否正确输出结果?性

2017-09-17 14:42:43 1239

原创 【算法题】最小生成树

参考#include <iostream>#include <vector>using namespace std;#define max 99999int func(vector<vector<int>>& map){ int sum(0); int n = map.size(); vector<int> visited(n,0); vector<int> lo

2017-09-17 10:04:43 389

原创 【算法题】博弈论:数组选数字

给定一个数组,两个人A、B依次从数组最左端选择一个或者两个数字,最后选择的数字之和较大者赢。假设两个人都足够聪明,A先选,给定数组,判断A、B谁能赢。分析: dp[i]表示当前数组为Array[i]…Array[n]时,当前选择的人最多能从数组中选出多少值。则dp[i]=max⎧⎩⎨sum[i]−dp[i+1]sum[i]−dp[i+2]dp[i] = max\begin{cases}sum[i

2017-09-15 15:33:26 1967

原创 【算法题】博弈论:leetcode 486 数组取数

参见【题目】:给定一个正整数数组,选手1从数组的头部或者尾部选择一个数,选手2从剩下部分的头部或尾部选择一个数,循环往复,直到该数组中的数都被取完。选手1、2都足够聪明。判断选手1取的数的和值是否大于选手2.【思路】:dp[i][j]dp[i][j]表示原数组中从i到j的这么多数中,按照游戏规则,某个玩家所能获得的最大分数。 dp[i][j]=max(sum[i][j]−dp[i+1][j],

2017-09-15 11:28:55 1887

原创 【算法题】神奇数

东东在一本古籍上看到有一种神奇数,如果能够将一个数的数字分成两组,其中一组数字的和等于另外一组数字的和,我们就将这个数称为神奇数。例如242就是神奇数,我们能够将这个数字分成两组,分别是{2,2}以及{4},给定区间[l,r],统计这个区间有多少个神奇数,请你来帮助他。首先判断数组能否被平分,即数组分割问题,dp[i][j]dp[i][j]表示数组前 ii 个数字能否求和得到 jj 则dp[i][j

2017-09-09 09:58:06 2196

原创 【算法题】触宝2018编程题二

在平面上有N个点,他们有各自的速度向量。现在我们给出时刻0时他们的位置由于速度不变,所以解函数是个凹函数,凹函数的梯度是左边小于0,右边大于0。可以根据梯度,使用二分查找梯度为0 的位置。题目没有限制t的范围,注意初始查找的区域设定:不能太大,如果太大,会造成计算距离溢出,而且会计算过程中会发生精度丢失,导致梯度计算错误。不能太小,如果太小,区域很可能没有包含解的位置试了半天,99999999999

2017-09-08 15:40:51 933

原创 【算法题】判断素数/质数

判断素数埃拉托斯特尼筛法:这种方法的思想是设置一个标志数组isPrimes[n],标志数组的每一位标示相应的数是不是素数,初始化为全true。算法从i=2开始,依次将质数的倍数标记为非素数,即将标记数组的相应位改为false。标记质数的倍数的时候从i*i也就是i的平方开始标记,不需要从i*j(且j<i)开始,因为i*j,在遇到j时已经被标记了,因为j比i小,所以遇到j比遇到i要早。因为从i*i开始标

2017-09-08 10:18:41 787

原创 【智力题】 4红牌、4蓝牌算法实现

有4 张红色的牌和4 张蓝色的牌,主持人先拿任意两张,再分别在 A、B、C 三人额头上贴任意两张牌,A、 B、C 三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌,A 说不知道,B 说不知道,C 说不知道,然后 A 说知道了。如何推理,A 是怎么知道的。如果用程序,又怎么实现呢?推理过程推理过程比较复杂,没有代码好理解代码思路:首先是三个人的第一反应都是不知道,所以任意两

2017-09-07 15:48:01 987

原创 【算法题】字符串匹配算法KMP

详解见博客KMP算法#include <iostream>#include <string>#include <vector>using namespace::std;vector<int> GetNext(string str){ vector<int> next(str.size()); if (str.empty()) { return next

2017-09-06 09:19:26 442

原创 【读书笔记】同步设备I/O与异步设备I/O

同步IO最方便和常用的对设备数据进行读写的函数时ReadFile和WriteFile。 打开设备时如:CreatFile、WSASocket。没有指定FILE_FLAG_VERLAPPED标志,则执行同步IO操作。异步IO打开设备时如:CreatFile、WSASocket。指定FILE_FLAG_VERLAPPED标志,则执行异步IO操作。当调用ReadFile()或WriteFile()时,函

2017-09-06 09:18:40 340

原创 【面经笔记】内存映射、共享内存

知道共享内存吗?额,是把同一块内存映射到两个进程的地址空间?。。。。。。(还不如说不知道)内存映射内存映射主要应用于三种情况:系统使用内存映射文件载入EXE,DLL文件。这节省了大量页交换文件的空间以及程序启动时间。开发人员使用内存映射文件来访问磁盘上的数据文件,这使得我们避免直接对文件I/O操作和文件内容的缓存通过使用内存映射文件,可以实现不同进程间的共享数据(进程间共享内存通信)创建一个

2017-09-05 17:05:29 1802 1

原创 【面经笔记】Windows下的动态链接(DLL)

使用DLL的优点共享、模块化,可方便的组合,重用,升级基地址和RVA当一个PE文件装载时,其进程地址空间中的起始地址就是基地址,对于可执行文件exe,一般为0x400000,对于DLL文件一般为0x10000000。若该地址被占用,则会选用其他空闲的地址,RVA就是一个地址相对于基地址的偏移。声明可以通过_declspec(dllexport)表示该符号是从dll导出的符号,_declspec(dl

2017-09-05 11:59:50 1630

原创 【面经笔记】装载,CRT

双击可执行文件发生了什么创建一个独立的虚拟地址空间创建虚拟地址空间不是创建空间,而是创建映射函数所需要的相应的数据结构。读取可执行文件头,并建立虚拟空间与可执行文件的映射关系上一步是建立虚拟空间到物理内存的映射关系,这一步是建立虚拟空间与可执行文件的映射关系。将cpu的指令寄存器设置为可执行文件的入口地址,启动运行。装载PE可执行文件过程:RVA(Relative Virtual Add

2017-09-04 22:19:53 497

原创 【面经笔记】C++语法

C++11有哪些新特性?auto类型推导Override和finallambda表达式constexpr常量表达式智能指针:weak_ptr、shared_ptr、unique_ptrMove语义、右值引用c++中的隐藏、重载、覆盖(重写) 成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。 覆盖是指派生类函数覆

2017-09-04 11:42:58 622

原创 【剑指offer】题65:滑动窗口最大值

使用双向队列保存当前可能成为最大值的数值vector<int> maxInWindows(const vector<int>& num, unsigned int size){ vector<int> max_vec; if (num.size()<size||size<1) return max_vec; deque<int> index; for (a

2017-09-03 16:10:32 350

原创 【剑指offer】题64:数据流中的中位数

STL适配器:heap、priority_queue 默认是 vector 实现的最大堆stack,queue默认是 dequeue 实现的试用一个最大堆和一个最小堆,保持两个最大堆中所有数小于最小堆,且保证两个堆元素个数相差不超过1。#include <iostream>#include <vector>#include <algorithm>#include <numeric>#incl

2017-09-03 14:55:51 273

原创 【剑指offer】题63:二叉搜索树的第k个节点

TreeNode* KthNode_core(TreeNode* pRoot, int& k){ TreeNode* target(NULL); if (pRoot->left!=NULL) { target = KthNode_core(pRoot->left, k); } if (target == NULL) {

2017-09-03 11:33:49 256

原创 【剑指offer】题61:二叉树序列化、反序列化

#include <iostream>#include <string>#include <sstream>using namespace std;struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x),

2017-09-03 10:32:58 241

原创 【剑指offer】题61:之字打印二叉树

vector<vector<int>> Print(TreeNode* pRoot){ vector<vector<int>> vec; if (pRoot== NULL) return vec; stack<TreeNode*> my_stack[2]; int cur_deep(0); int next_deep(1); my_stac

2017-09-02 22:00:54 230

原创 【剑指offer】题60:分层遍历打印二叉树

void Print(TreeNode* pRoot){ queue<TreeNode*> que; int cur_count(0); int next_count(0); if (pRoot == NULL) { return; } que.push(pRoot); cur_count = 1; while (!

2017-09-02 21:35:57 240

原创 【算法题】对称二叉树判断

解法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 341

原创 【语法】sizeof和strlen

http://blog.csdn.net/niushuai666/article/details/7677210一、sizeofsizeof(…)是运算符,而不是一个函数。其值在编译时即计算好了。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。具体而言,当参数分别如下时,sizeof返回的值表示的含义如下: 数组——编译时分配的数组空间大小; 指针——

2017-08-31 10:50:18 98

原创 【面经笔记】进程调度方式

分为两大类:可剥夺和不可剥夺基于优先级调度:优先级高的进程先运行,可剥夺基于调度策略:选择函数:先进先出(FIFO) 将优先级与队列结合,每个优先级一个队列轮询/轮转 周期性间隔产生中断,中断发生时,当前运行的进程置于就绪队列中,然后基于FIFO策略选择下一个就绪进程。最短进程优先(Shortest Process Next,SPN) 下一次选择预计处理时间最短的进程进行处理,难点是不知道进

2017-08-31 10:28:45 658

原创 【面经笔记】多线程

线程的基本概念、线程的基本状态及状态之间的关系?http://blog.csdn.net/bornlili/article/details/55805732线程是进程的一个顺序执行流。线程是进程中的一个执行控制单元,执行路径。 一个进程中如果只有一个执行路径,这个程序称为单线程 一个进程中有多个执行路径时,这个程序成为多线程新建态、就绪态、运行态、阻塞态、挂起态、结束态线

2017-08-30 15:33:24 496

原创 【算法题】两有序数组中位数

有两个排序的数组,长度都为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 488

原创 【面经笔记】主定理

递归式: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 378

原创 【编程题】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 1375

原创 【数据结构】搜索二叉树

手写实现搜索二叉树:树的节点定义: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 333

原创 【算法题】2018今日头条编程题一

维持一个当前边界点的数组,按x从小到达排序,由于是边界点,故其y对应是从大到小排序的。对于一个新加入的点,分别按x和y坐标值二分查找其在边界点数组中的位置:iter_x , iter_y若iter_x == iter_y: 则直接插入新边界点若iter_x < iter_y : 非边界点若iter_x>iter_y: 删除iter_x 与iter_y之间的无效边界点,并插入新边界点#

2017-08-23 11:47:34 1096 1

原创 【算法题】2018今日头条编程题二

使用dp[i,j]表示区间【i,j】能得到计算值的最大值k表示区间【i,j】的最小值min的下标索引则序列结构可表示如下: 【i,k-1】【min】【k+1,j】【i,j】所有子区间分为两种情况:包含min、不包含min在所有包含min的子区间【m,n】中,计算值:min∗sum[m,n]<=min∗sum[i,j]min*sum[m,n] <= min*sum[i,j]所以: dp[i,j]=

2017-08-23 10:56:04 834

原创 【面经笔记】好未来 - 已挂

1、 手写二叉搜索树的插入、删除没写过,删除操作完全写错了。2、手写堆的实现实现了自顶向下的维护堆的函数,面试官说不好,应该写个自底向上的、、、3、给定一个M*N的棋盘,给定一个出发点,终点。只能走”日”,即马走日。判断能否到达终点。我写了个广度优先搜索路径的算法面试官想了半天说可能不对:已经遍历的点,不会再入队列,所以某个点如果要走两遍的话会出问题。当时没坚持。回来想想,这种情况根本就是扯淡。面试

2017-08-21 22:18:42 2014 3

原创 【算法题】查找旋转数组的值

在一个排序的数组中,如{1,2,3,4,5,6,7},经过旋转后得到{4,5,6,7,1,2,3},当然也可以得到原数组{1,2,3,4,5,6,7},在该旋转后的数组中查找某个元素。陷阱在于数组不是严格递增的比如{1,1,1,1,0,1,1}这样有很多重复的元素的数组时,当要查找0时,在mid位置的元素为1,不能判断怎么缩小范围#include <iostream>#include <strin

2017-08-20 20:28:01 569

原创 【面经笔记】

如果真的被问到不会的,就直接说你不会(说你不会、说你不会,我再补充两遍),礼貌地说这方面可能我还要多学习。(对一个拿不准的问题千万不要猜,即使是二选一的那种问题,猜错了直接完蛋,猜对了被人看出来,再往深问还是完蛋) 另外,像可能,大概是,我觉得这种表达最好不要,一听就是对一个点没把握,有可能会让面试官觉得学习太浮躁不喜欢寻求原理。印象最深的项目,最大的难点是什么?

2017-08-20 15:05:26 346

原创 【算法题】最大乘积

给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 无序整数数组A[n]输出描述: 满足条件的最大乘积输入例子1: 4 3 4 1 2输出例子1: 24#include <iostream>#include <string>#include <cstring>#include <vector>#i

2017-08-19 16:04:46 1457

原创 【读书笔记】windows核心编程 - 异常处理相关

_try 和 _finally的使用:终止处理程序:不管try段代码是如何退出的——无论是return、goto、break、continue(除非是exitprocess、exitthread、terminateprocess、terminatethread),finally段的代码都能执行。finally段的return会覆盖try段的return。_try 和 _except

2017-08-19 15:22:19 255

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除