自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

恩,其实你很菜...

https://github.com/chankeh

  • 博客(264)
  • 收藏
  • 关注

原创 StringBuffer和StringBuilder

无论是做Java或是Android,都避免不了遇到这个问题,其实开发过程中一般情况下是不会纠结,这个问题是面试必选经典题,今天有时间,就总结一下。String、StringBuffer、StringBuilder区别StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可变类,任何对String的改变都 会引发新的String对象的生成;St

2017-11-12 21:23:56 394

原创 SegNet-基于深度学习的图像分割

特别感谢剑桥大学提供的Caffe版源码 官方Tutorial:应用democaffe版SegNetTensorFlow重写版SegNet注意: 这里是基于TensorFlow的重写版本,因为在做毕设,处理的是三维CT数据。 运行时需要使用GPU(显存大小须>4G)

2017-10-18 18:09:38 7128 13

原创 要转Java了,暂时告别C++

向每一个C++程序员致敬! 很多学编程的人认为,特别是初学者会认为:“我又不找C++的工作,为什么要学C++?”,就像“我又不找C语言的工作,为什么要学C语言”一样;其实答案不在于你做不做C++的工作,而在于你做不做编程行业的工作。道理很简单,打个比方如果你听到这样的话,估计你也晓得为什么了。“我是数学老师,不是语文老师,所以我不要学语文”这话看似正确,其实当你语文不好,你的数学表达能力也就欠佳,

2017-10-05 18:43:09 5438 7

原创 函数对象---operator()

一个函数对象,即一个重载了括号操作符“()”的对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象。举个最简单的例子:[cpp] view plain copy print?class FuncObjType  {  public:      void operator() ()      {          cout<<”Hello C++!”<<endl;

2017-09-21 15:54:07 1313

原创 多继承小记

#include <iostream>using namespace std;class A{public: virtual void f(){cout<<"A"<<endl;} void s(){cout<<"A:s"<<endl;}};class B:public A{public: virtual void f(){cout<<"B"<<endl;} v

2017-09-18 11:53:17 450

原创 ping命令执行过程详解

ping命令执行过程详解 机器A ping 机器B同一网段ping通知系统建立一个固定格式的ICMP请求数据包ICMP协议打包这个数据包和机器B的IP地址转交给IP协议层(一组后台运行的进程,与ICMP类似)IP层协议将以机器B的IP地址为目的地址,本机IP地址为源地址,加上一些其他的控制信息,构建一个IP数据包获取机器B的MAC地址 4.1 IP层协议通过机器B的IP地址和自己的

2017-09-15 12:25:41 3326

原创 TCP 连接的建立和终止

三路握手 建立一个TCP连接时会发生下述情形。 (1)服务器必须准备好接受外来的连接。这通常通过调用socket、bind和listen这3个函数来完成的,我们称之为被动打开。(2)客户通过调用connect发起主动打开。这导致客户TCP发送一个SYN(同步)分节,它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号。通常SYN分节不携带数据,其所在IP数据报只含有一个IP首部、一个TC

2017-09-09 12:47:05 433

原创 数组中重复的数字

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。第一种方法, 哈希:class Solution {public: bool duplicate(int numbers[],

2017-09-07 10:51:26 328

原创 翻转单词顺序列

题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?class Solutio

2017-09-06 21:02:59 248

原创 左旋转字符串

题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!class Solution {public: string LeftRotateStri

2017-09-06 20:28:13 274

原创 和为S的连续正数序列

题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续正数序列

2017-09-06 18:57:01 299

原创 HTTP请求报文和HTTP响应报文

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。HTTP请求报文一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。or<request-line><headers><blank line>[<request-body> 1.

2017-09-04 23:30:37 440

原创 和为S的两个数字

题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测试案例,输出两个数,小的先输出。数列满足递增,设两个头尾两个指针i和j, 若ai + aj == sum,就是答案(相差越远乘积越小) 若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的数已是不可能),j

2017-09-04 00:12:08 244

原创 数组中两个只出现一次的数字

题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。方法1://二话不说,直接哈希class Solution {public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) { sort(data.begin(),data.end());

2017-09-02 21:14:06 351

原创 平衡二叉树

题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if(!pRoot) return true; if(!pRoot->left&&!pRoot->right)

2017-09-02 19:45:38 284

原创 常见排序算法

1.归并排序#include <iostream>#include <vector>using namespace std;void merge(vector<int>&a,vector<int>&dst,int s,int m,int e){ int i = s,j = m+1,k = s; while(i<=m&&j<=e) { if(a[i]<=a[

2017-09-02 00:05:09 226

原创 数组中的逆序对

题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述: 题目保证输入的数组中没有的相同的数字 数据范围: 对于%50的数据,size<=10^4 对于%75的数据,size<=10^5 对于%1

2017-09-01 10:34:57 337

原创 把数组排成最小的数

题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 class Solution { public: static bool judge(int a,int b) { string A = ""; string B

2017-08-31 12:19:40 216

原创 连续子数组的最大和

经典动态规划HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度

2017-08-29 23:50:28 243

原创 二叉查找树,红黑树,AVL树,B~/B+树(B-tree),伸展树——优缺点及比较

二叉查找树(Binary Search Tree)很显然,二叉查找树的发现完全是因为静态查找结构在动态插入,删除结点所表现出来的无能为力(需要付出极大的代价)。BST 的操作代价分析:    (1) 查找代价: 任何一个数据的查找过程都需要从根结点出发,沿某一个路径朝叶子结点前进。因此查找中数据比较次数与树的形态密切相关。         当树中每个结点左右子树高度大致相同时,树高为logN。则

2017-08-29 19:01:56 654

原创 数组中出现次数超过一半的数字

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。//其实这个题目很简单,直接排一次序,然后计算中位数的个数,如果中位数个数大于总数//的1/2,那么就返回mid,否则返回0class Solution {public: int

2017-08-29 00:24:39 355

原创 二叉搜索树与双向链表

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。//这个问题往中序遍历比较好想,先用递归的中序遍历将遍历的节点存放到vector中//然后,遍历vector元素两次,将它改成双向链表/*struct TreeNode { int val; struct TreeNode *left; struct Tre

2017-08-27 21:58:57 170

原创 复杂链表的复制

题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)//这个问题如果不用递归来做会很麻烦,所以为了简便,直接递归/*struct RandomListNode { int label; struct Rand

2017-08-27 20:13:03 289

原创 TIME_WAIT和CLOSE_WAIT

在服务器的日常维护过程中,会经常用到下面的命令:[plain] view plain copy print?netstat -n | awk ’/^tcp/ {++S[NF]} END {for(a in S) print a, S[a]}'   </span></span></li></ol></d

2017-08-26 10:55:23 226

转载 倒叙打印文件第二行的前100个大写字母

第一种方法:sed -n '2p' afile | grep '[[:upper:]]' -o | tr -d '\n' | cut -c1-100 | rev处理第二行 grep:提取大写字母 o: 不显示非结果 tr:删除换行 Cut:截取1-100个字符 rev:逆序head -n 2 afile | tail -n 1那第二种方法:head -n 2 afile | tai

2017-08-26 10:11:16 719

原创 二叉树中和为某一值的路径

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x),

2017-08-25 17:00:12 248

原创 迭代器失效问题讲解

迭代器失效问题-外链

2017-08-25 10:09:18 251

原创 二叉搜索树的后序遍历序列

题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解析: //左子树一定比右子树小,因此去掉根后,数字分为left,right两部分,right部分的 //最后一个数字是右子树的根他也比左子树所有值大,因此我们可以每次只看有子树是否符合条件 //即可,即使到达了左子树左子树也可以看出由左右子树组

2017-08-24 22:37:14 198

原创 从0开始动态规划

动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都是叙述概念,讲解原理,让人觉得晦涩难懂,即使一时间看懂了,发现当自己做题的时候又会觉得无所适从。我觉得,理解算法最重要的还是在于练习,只有通过自己练习,才可以更快地提升。话不多说,接下来,下面我就通过一个例

2017-08-23 20:05:24 350

原创 线程同步的方式-互斥锁/读写锁

读写锁特点:1)多个读者可以同时进行读 2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行) 3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)互斥锁特点:一次只能一个线程拥有互斥锁,其他线程只有等待

2017-08-23 10:09:56 350

原创 编号转换

#include <iostream>#include <stdlib.h>#include <vector>#include <string> #include <cctype>using namespace std;bool isrc(string &s){ if(s.size()<2) return false; if(!(s[0]=='R'&&isdigit(s

2017-08-21 21:49:42 359

原创 乘法表

2016年百度笔试题 #include <iostream>using namespace std;typedef long long int64; // int64(LL): 64位整型数, 即long long的别称int64 m,n,k;int64 cal(int64 x) // 计算比x小的数的个数 { int64 sum=0; for(int i=1;i<=n

2017-08-21 15:15:49 273

原创 二叉树的镜像

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10

2017-08-18 22:42:08 149

原创 树的子结构

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)class Solution {public:    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)    {        if(pRoot2 == NULL || pRoot1 == NULL )            return fals

2017-08-18 22:34:50 231

原创 iterator迭代器和指针的区别

iterator迭代器和指针的区别 迭代器与指针的差别:迭代器:      (1)迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->,*,++ –等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指

2017-08-18 17:12:50 602 2

原创 C++后端开发面试题

后端开发面试题后端开发面试知识点大纲:语言类(C++):关键字作用解释:volatile作用Volatile关键词的第一个特性:易变性。所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接使用上一条语句对应的volatile变量的寄存器内容,而是重新从内存中读取。Volatile关键词的第二个特性:“不可优化”特性。volatile告诉编译器,不要对我这个变量进行各种激进的优化,甚至将

2017-08-18 10:35:51 1256 2

原创 翻转单链表

/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) {

2017-08-17 22:27:15 164

原创 STL中的vector如何处理才可以避免内存碎片

答: 使用vector内的reserve函数。 reserve函数主要是为提升vector的效率而存在的,如果已知vector的大小,可以在初始化时为vector执行reserve操作,分配足够的内存空间,之后数据加入vector就不会造成内存再次分配,也可以减少内存碎片。另外reserve操作只分配内存空间,并不执行元素初始化,因此效率上要比resize要高,假如vector中存储的是复杂的对

2017-08-17 16:19:15 2475

原创 C++的static用法

C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:[cpp] view plain copy print?#i

2017-08-17 10:05:52 397

原创 变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。关于本题,前提是n个台阶会有一次n阶的跳法。分析如下: f(1) = 1 f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。 f(3) = f(3-1) + f(3-2) + f(3-3) …

2017-08-16 21:04:33 162

空空如也

空空如也

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

TA关注的人

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