自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux系统下用pyenv安装python

很烦,奇奇怪怪的东西很多,基本是不懂就靠谷歌和SO .先是安装pyenv,过程如下:1  安装pyenv    (1) 选择安装到$HOME/.pyenv目录(但你可以在某处安装其他)。    git clone https://github.com/yyuu/pyenv.git ~/.pyenv  (2)配置环境变量   echo 'export PYEN

2017-03-30 19:00:54 10742 1

原创 ubuntu16.04上用虚拟环境上安装django的指南

Python兼容性坑太多,所以记一下。环境是ubuntu16.04 + python 2.7。先安装虚拟环境:$ sudo apt-get install python-virtualenv如果用pip安装了virtualenv或者python3-virtualenv,那么先卸装这两个包,再安装python-virtualenv,因为有冲突。接下来安装virtualenv的管理

2017-02-27 22:19:14 2013

原创 基数排序

基数排序,是基于计数排序的稳定排序。对于元素的每一位进行排序,例如十进制的101,100,111从个位先计数排序,再十位计数排序,最后百位上计数排序。当然也并一定是按十进制来进行排序,可以按任何进制进行排序。时间复杂度为O(k * n),k为位数;空间复杂度为O(radix + n),radix为计数所用的桶,比如10进制为10,十六进制为16。golang代码如下:package

2017-02-06 13:53:04 430

原创 最差情况为线性时间的选择

这个算法写了我好久,在这里记一下。算法的原理是利用中位数来作为划分元素选择第M小的元素,中位数需要递归自身来求得。算法的最优,平均,最差时间复杂度都为O(N)。相对于随机算法改善了最差时间复杂度。和快排用了同样的partition,但是这个算法所使用的pivot是确定的,即中位数。代码版本为golang 1.8.0。路径goWorkSpace/algorithms/worseLin

2017-02-02 13:14:06 440

原创 闭包中引用循环变量的问题

今天在看Go的语法,突然想对比一下python和Go的闭包机制的区别。假如闭包调用循环变量,在Go中的实现方法为,循环中用一个新的变量保存这个循环变量的值,具体实现代码如下://Gopackage mainimport ( "fmt" "reflect")func main() { var funcArray = count() for index := range f

2016-12-25 20:21:34 1267

原创 校招

扎实的基本功和宽阔的视角是校园招聘考察的最重要因素。

2016-10-14 20:37:20 338

原创 分布式入坑

工作需要,明天入坑分布式。老规矩,先挖坑有空填。。。

2016-07-27 23:52:12 373

原创 LinuxC/C++编程(10)—socket本地通信

直接贴代码。这是服务端://============================================================================// Name : localSocket.cpp// Author : Lin// Version :// Copyright : Your copyright no

2016-06-12 20:23:59 593

原创 Linux编程中的坑——C++中exit和return的区别

今天遇到一个坑,折腾了一天才把这个坑填上,情况是这样的:写了段代码,在main()函数中创建一个分离线程,结果这个线程什么都没干就直接挂掉了,代码长这样:int main(){ 创建一个分离线程(); return 0;}后来研(bai)究(du)了一下,原来在main()函数中写return,会被编译器优化成exit,也就是直接杀死进程,所以分离出来的线程什么都没干,

2016-06-02 20:56:30 1683

原创 LinuxC/C++编程(9)—映射内存

简单来说,映射内存,就是创建硬盘文件到进程地址空间的映射,在进程中读写这段映射内存,可以向硬盘文件中直接同步。利用这点,映射内存也可以像共享内存一样,用来进行不同进程之间的通信。(但共享内存的效率较高,因为不需要任何复制粘帖操作,而映射内存,所产生的只是内存到硬盘中的一个映射,所以比较节省内存开销,可以创建一个空间很大的映射内存区来满足进程间通信的要求)内存映射是Linux中一种很有特色的

2016-06-01 11:14:33 644

原创 LinuxC/C++编程(8)—共享内存通信

懒,先贴代码,有空再更原理:写共享内存://============================================================================// Name : shmWrite.cpp// Author : Lin// Version :// Copyright : Your copyrig

2016-05-31 16:08:24 566

原创 LinuxC/C++编程(7)—守护进程

守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任 务或等待处理某些发生的事件。        守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器 inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。        假如不依赖Linu

2016-05-27 15:33:01 1417

原创 LinuxC/C++编程(6)—重定向、管道重定向

LinuxC中的重定向功能,必须依靠等位文件描述符函数dup,该函数的介绍如下:dup和dup2用来复制文件描述符。函数介绍:#include int dup(int oldfd);int dup2(int oldfd,int newfd);dup用来复制oldfd所指的文件描述符。但复制成功时返回最小的尚未被使用的文件描述符。若有错误则返回-1,错误代码存入errno中。返回

2016-05-26 17:28:38 2582

原创 LinuxC/C++编程(5)—SystemV信号量

Linux中有多种类型的信号量,其中SystemV是比较重要的一种,常用于多进程同步和进程间通信。常用的函数均包含于中。参考了一篇很不错的博客文章:http://www.cnblogs.com/hjslovewcl/archive/2011/03/03/2314341.html自己写了一个程序,两个进程分别向控制台打印字符串,两个进程几乎一样,只是B进程中没有初始化/删除信号量。

2016-05-25 18:33:36 476

原创 LinuxC/C++编程(4)—管道通信

管道是Linux为进程提供的一种通信方式,这里所说的管道只能用于有血缘关系的进程(一般是子进程和父进程之间)。一般用来做进程同步和进程间通信。Linux中提供的有名管道的建立函数为:int pipe(int pipe[2]);pipe(建立管道):1) 头文件 #include2) 定义函数: int pipe(int filedes[2]);3) 函数说明: pipe()会

2016-05-25 15:27:39 1248

原创 LinuxC/C++编程(3)—异步清理子进程(避免成为僵尸进程)

先了解Linux中进程的一些机制:孤儿进程和僵尸进程:1 如果父进程先退出,子进程尚未退出,那么子进程会成为孤儿,这时候会被init进程领养,等到子进程生命周期结束后,init会作为父进程释放掉子进程所占用的资源,所以孤儿进程并没有危害;2 如果子进程先退出,父进程尚未退出,父进程必须调用wait()函数释放掉子进程所占用的资源,如果没有这样做,子进程的资源将不会自动释放,成为僵尸

2016-05-23 16:33:30 1240 2

原创 LinuxC/C++编程(2)—文件夹操作

Linux中文件和文件夹操作有所不同,这里写了个代码,实现了以下几个功能:1 设置和显示当前工作路径;2 显示工作路径下的子文件名称;3 在工作路径下创建一个新的文件夹;//============================================================================// Name : DiretoryTes

2016-05-23 15:33:17 636

原创 LinuxC/C++编程(1)—文件操作

这里以复制文件test到test1为例,例举了Linux编程的基本文件操作,代码如下://============================================================================// Name : FileTest.cpp// Author : Lin// Version :// Copyr

2016-05-23 11:16:02 452

原创 调整数组顺序使奇数位于偶数前面

#include using namespace std;inline bool IsOdd(int *a){ return *a % 2 == 0;}void Sort(int a[], int len){ if (a == NULL || len == 0) return; else { int *p1 = a, *p2 = a + len - 1; whi

2016-04-18 21:21:22 376

原创 两个用大数相加(转化为字符串再相加)

#include #include #include using namespace std;string AddTwoString(string a, string b){ reverse(a.begin(), a.end()); //把a,b翻转,以对齐低位 reverse(b.begin(), b.end()); int sizeA = a.size(); int si

2016-04-13 14:46:43 477

原创 打印1到最大的n位数

打印1到最大的n位数,例如n = 2时打印出1,2。。。99这里用了分治(应该是分治吧。。。),直接贴代码,挺有意思的:#include #include using namespace std;void Print(string s){ for (int i = 0; i != s.size(); ++i) { if (s[i] != '0') { cou

2016-04-13 09:59:28 238

原创 各种常见排序函数的C++代码

#include using namespace std;/**********直接插入排序****************/void InsertSort(int *a, int len){ for (int i = 0; i != len -1; ++i)//i代表已经排好序的元素下标 { int tar = a[i+1]; for (int j = i; j >= 0;

2016-04-08 12:45:11 553 1

原创 重建二叉树

对于一颗二叉树,可以根据先序遍历(后序遍历)和中序遍历重新还原出二叉树。比如前序遍历为{1,2,4,7,3,5,6,8},中序遍历为{4, 7, 2, 1,5,3,8,6}。根据先序遍历和中序遍历还原二叉树的主要思想:1、先序遍历序列的第一个元素必定是根节点,可以由此获取二叉树的根节点。2、根据根节点,在中序遍历序列中查找该节点,由中序遍历的性质可知,中序遍历中该根节点左边的序列必定在

2016-04-07 15:23:25 355

原创 回溯反向打印一个数组

反向打印一个数组,最简单就是回溯,当然也可以用栈来实现。上代码:#include using namespace std;void PrintHelp(int *a, int p, int i){ if (p < i - 1)PrintHelp(a, p + 1, i); cout << a[p] << endl;}void Print(int a[], int i){

2016-04-07 10:08:21 480

原创 把字符串中的空格替换成“00”

#include using namespace std;void ReplaceBlank(char* str, int len){ if (str == NULL || len == 0) return; else { int len1 = 0, len2 = 0, blank = 0; for (int i = 0; str[i] != '\0'; ++i) {

2016-04-06 22:17:26 607

原创 二维数组面试题(外加创建动态数组)

自己老是忘掉,所以干脆写一个在博客存着:一维数组:int *x = new int [size];delete [] x;二维数组,直接上代码(包括如何把二维数组作为参数传递):#include using namespace std;int colFind(int **a, int row, int col){ for (int i = 0; i != row

2016-04-06 15:02:34 590

原创 二叉搜索树BinarySearchTree的实现

这里因为删除节点的函数写得不错,所以代码放上来保存一下,这个函数当然不是我写的。//BTNode.h#ifndef BTNODE_H#define BTNODE_H#include typedef int datatype;typedef struct BTNode{ datatype data; BTNode* left; BTNode* right; BTNod

2016-04-05 01:11:01 379

原创 后端面试问题汇总——目录索引

后端开发面经,C++研发工程师也能用。部分是转载的,自己也更了一部分一、linux和os(这部分答案见)1、命令:netstat tcpdump ipcs ipcrm  这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验2、cpu 内存 硬盘 等等与系统性能调试相关的命令必须熟练掌握,设置修改权限 tcp网络状态查看 各进程状态 抓包相关等相关命令 必须熟练掌握

2016-04-03 22:16:57 821

原创 后端面试题集——网络部分(持续更新中)

目录一 TCP和UDP的区别.1二 TCP连接中的时序图和状态图.22.1全部11种状态.22.2状态变迁讲解.3三、EPOLL的触发模式和区别.4四、TCP连接和断开连接时的握手方式,以及TIME_WAIT状态、FIN_WAIT_2状态的讲解 44.1 TCP连接需要3次握手.44.2 TCP断开需要4次握手.54.3

2016-04-03 22:14:40 642

原创 C写的表达式求值

表达式求值的原理是从这里看来的:http://www.cnblogs.com/mygmh/archive/2012/10/06/2713362.html先getPostExp()把表达式转为后缀表达式,再用calPostExt()求值直接贴代码:#include #include #include using namespace std;bool isNum(ch

2016-04-02 23:05:34 409

原创 二叉树的总结

//BTNode.h#ifndef BTNODE_H#define BTNODE_H#include typedef int datatype;typedef struct BTNode{ datatype data; BTNode* left; BTNode* right; BTNode(datatype dataPara) :data(dataPara),lef

2016-04-01 21:48:07 394

原创 16年华为春季实习生机试题

给出一个字符串形式表达的二叉树,求出指定节点深度。输入的树形结构字符串格式为:1、以父节点、左子树、右子树表示的二叉树;每个父节点不会超过两个子节点;2、树的每一个节点采用单个字母表示;树的层次采用数字表示,树根的层次为1,下一层为2,不会超过9层;3、字符串以“节点名称 层次数 节点名称 层次数…”的形式出现,同一个父节点下,先出现的为左子树。例如字符串“

2016-03-31 16:17:12 561

原创 更一份微信的面试题

1 给定一个递增循环整数数组,最小的整数可能出现在数组的中间,例如,int array[] = {7, 9, 10, 51, 56, 0, 2};求查找某个值的算法,给定函数头如下int find(int array[], int len, int key);找到了就返回元素下标,没找到就返回-1。//看到题的第一反应就是用二分查找

2016-03-28 14:51:58 609

原创 整理一些C++面试容易被问到的问题及其答案

这是陈硕在知乎给出的几个问题(针对校招)标准库各容器的基本操作的复杂度。标准库算法的复杂度,例如 std::sort() 的平均复杂度、最坏复杂度(答 O(N^2) 和 O(N log N) 都算对),最坏情况什么时候出现。标准库各容器(deque 除外)的数据结构(标准党勿喷,主流 STL 实现的数据结构都差不多),以及 vector 的容量增长方式。如果回答得特别好,还可以补充问为

2016-03-21 22:28:34 3119

转载 操作系统中最基本的概念——库调用和系统调用

http://blog.csdn.net/clearriver/archive/2009/05/05/4152780.aspxUnix操作系统设计上的陈述:理解库函数的区别和系统调用,首先要里理解Unix的kernel mode和user mode。考虑下面的函数段:int main(){    int fd = create("filename",0666);    ex

2016-03-20 15:24:59 1812

转载 又是一个面试容易被问到的东西——C++内联

转自地址:http://blog.csdn.net/coder_xia/article/details/6723387 突然看到C++Primer中讲到,对于vector的一个循环,调用语句:(示例代码i=v.begin()不是很规范,虽然不会出错,客官请将就着看)[cpp] view plain copyprint?for (int i

2016-03-20 15:17:27 614

转载 计算机一个很重要但却容易被忽视的概念——堆和栈

转自:http://blog.csdn.net/byr_syr/article/details/8573623刚上路的小司机忽视的概念——堆栈这两天学习win32的API, 了解到了计算机中堆栈的概念,相信很多程序员有时候也弄不明白计算机中的堆栈的数据结构。再次为堆栈做一下详细解析。在英文中,我们管栈称为stack,管堆称为heap。在计算机中,堆栈是两种不同的数据结构,但

2016-03-19 23:15:52 527

转载 C++多态的实现机制

转自:http://blog.csdn.net/tujiaw/article/details/67534981. 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。2. 存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。3. 多态性是一个接口多种实现,是面向对象的核心。分为类的多态性和

2016-03-19 13:17:59 659

原创 图的邻接多重表和搜索(C++版本)

最近在学数据结构,学到图这一章,网上的C++版本的代码乱得不行,所以自己写了一个完整C++版本的放这里。用邻接多重表表示一个无向图,并给出DFS和BFS搜索代码。邻接多重表好处就是贼直观,几条边就几个边表的元素。代码如下:边表节点定义(其实就是边的定义)typedef struct EdgeNode //邻接多重表{ int iVertex;

2016-03-18 16:19:46 455

原创 C++的一个奇技淫巧

C++如何写一个函数,得到一个数组的长度呢?size_t GetArrayLength(int Array []){     return sizeof(Array)/sizeof(Array[0]);        //传进来的Array已经退化成一个指针了}这种方法是不行的正解如下图:#include using namespace std;templa

2016-03-18 16:19:44 758

空空如也

空空如也

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

TA关注的人

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