自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

nbaDWde的博客

爱琢磨琢磨小算法

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

原创 Linux线程(一)创建与退出

多线程目的是在单进程环境下执行多个任务。一个进程中的所有线程都可以访问该进程的组成部件,如文件描述符和内存。单个资源在多个用户间共享,就必须处理一致性问题。同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(th...

2018-10-09 17:48:04 497

原创 Linux中环境变量存放文件

Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量。所以管理环境变量的文件也分为系统级和用户级的,下面贴一个网上找到的讲的比较明白的文件介绍(略作修改)[1]:1.系统级:(1)/etc/profile:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件,应用于登录到系统的每一个用户。该文件...

2018-07-03 09:16:07 4181

原创 C/C++ I/O详解

一、C语言I/OC语言的I/O相关函数都是封装在头文件<stdio.h>中,该头文件中定义了一些变量、宏以及各种函数来执行输入输出。具体有关C标准库<stdio.h>参见:http://www.runoob.com/cprogramming/c-standard-library-stdio-h.html注意:C语言把所有的设备都当做文件(设备只是一种特殊的文件),所以所有设...

2018-06-28 14:04:03 3559

原创 python之GIL与多线程

1、问题的思考——python程序能通过多线程利用CPU的多核吗?先看一段程序下面这段 python 代码,CPU 占用率是多少?# 请勿在工作中模仿,危险:)def dead_loop(): while True: passdead_loop()答案是什么呢,占用 100% CPU?那是单核!还得是没有超线程的古董 CPU。在我的双核 CPU 上,这个死循环只会吃掉...

2018-06-16 16:59:11 926

原创 C语言中的restrict限定符

今天在写opencl的kernel端代码时用到了restrict关键字,做个记录。restrict限定符的作用C语言中的一种类型限定符,用于告诉编译器,对象已经被指针所引用,不能通过除去该指针以外的所有其他直接或间接的方式修改该对象的内容restrict限定符的用法restrict关键字允许编译器优化某部分代码以更好地支持计算。它只能用于指针,表明该指针是访问该对象唯一且初始的方式。要弄明白为什么...

2018-06-15 12:42:38 2652 1

原创 vim之实现函数/变量跳转功能

使用vim的时候, 会发现函数跳转的功能没有,怎么办?vim提供了强有力的函数跳转的插件功能!首先要安装ctags, 在ubuntu下直接输入sudo apt-get install exuberant-ctags接着,在源文件目录树(这里是在/home/ballack/test/目录下)执行如下命令:ctags -R .即可在/home/ballack/test目录下生成一个tags文件, 这个...

2018-06-13 12:23:28 2649

转载 C++模板元编程

        所谓的元编程就是编写直接生成或操纵程序的程序,C++模板为C++语言提供了元编程的能力。模板使 C++ 编程变得异常灵活,能实现很多高级动态语言才有的特性(语法上可能比较丑陋,一些历史原因见下文)。普通用户对 C++ 模板的使用可能不是很频繁,大致限于泛型编程,但一些系统级的代码,尤其是对通用性、性能要求极高的基础库(如 STL、Boost)几乎不可避免的都大量地使用 C++ 模板...

2018-06-13 09:42:22 10175 1

原创 Github有两种上传方式的对比——SSH/https

1、两种方式的对比Github有两种上传代码的方式httpsSSH大家也可以看一下这两种方式的URL是不同的。SSH方式([email protected]:xxx/test.git)https方式 (https://github.com/xxx/test.git)https方式提交代码的几种方式:首先使用git clone后面跟https方式 把仓库克隆下来,然后提交代码(clone后面只能跟http...

2018-05-18 10:34:21 4932

原创 python字符串

1、字符串编码字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节...

2018-05-16 12:53:00 243

原创 C语言变长数组

【前言】    C语言中是不能定义变长数组的(当然,有一些特殊方法可以解决,这里先不提),代码中若遇到类似这样的结构:char data[0],这种用法在linux内核代码中有很多,这是为了让数组长度可变的,根据需要进行分配,方便操作,节省内存空间。        【data[0]结构】    例如:struct buffer{ int data_len; //长度 char...

2018-03-28 09:23:12 10668 2

转载 Objective-C属性property详解

1、简介: property是Objective-C的关键词,与@synthesize配对使用,用来让编译好器自动生成与数据成员同名的方法声明。@synthesize则是用来生成对应声明方法的实现。1.1 property的语法格式:@property (参数1,参数2)类型名字;这里的参数,主要有以下三种:setter/getter方法(assign/retain/copy)读写属性(readw...

2018-03-14 11:33:28 988 1

转载 IO模型及select、poll、epoll和kqueue的区别

(一)首先,介绍几种常见的I/O模型及其区别,如下:blocking I/Ononblocking I/OI/O multiplexing (select and poll)signal driven I/O (SIGIO)asynchronous I/O (the POSIX aio_functions)—————异步IO模型最大的特点是 完成后发回通知。阻塞与否,取决于实现IO交换的方式。  ...

2018-02-09 15:28:43 1377

原创 如何利用android studio在手机上安装apk包

将手机连接到电脑上后,在android studio下面的run面板上依次执行如下命令:1. $ adb push 电脑上apk包的绝对路径 /data/local/tmp/// 复制apk到/data/local/tmp目录下.2. $ adb shell pm install -r "/data/local/tmp/apk包名"// 执行pm install  安装apk3

2018-02-01 12:55:41 17990 1

转载 STL之vector容器元素删除

删除vector容器的对象元素有三种方法:pop_back,erase,remove算法。向量容器的成员函数pop_back()可以删除最后一个元素;函数erase()可以删除由一个iterator指出的元素,也可以删除一个指定范围内的元素;通用算法remove()也可以用来删除vector容器的元素,不同的是remove一般情况下不会改变容器的大小,而pop_back()和erase

2018-01-30 10:06:23 2865

原创 TCP协议的RST包

前言:TCP中有几个比较重要的标志位, SYN ACK FIN RST PSH URG。比如: (B) --> [SYN] -->(A) (B)<--[SYN/ACK] A) (B)--> [ACK] --> (A) 以上是三次握手建立连接的过程。以上字段的具体含义:SYN: 表示建立连接FIN: 表示关闭连接ACK: 表示响应

2018-01-22 14:22:35 9998

原创 TCP连接的终止

前言:前面讲到过TCP连接的建立,这里继续记录TCP连接的终止过程。1、TCP连接的终止过程如上图是TCP连接的终止过程。下面来深入了解TCP连接的释放:由于TCP是连接是全双工的,所以每个方向上都必须进行单独关闭,这原则是当一方完成数据发送任务后就能发送一个FIN来终止这个方向的连接(收到一个FIN只意味着这一个方向上没有数据流动)。另一方收到一个FIN后仍能发送数据。首先进

2018-01-18 17:03:45 1705

原创 4、丑数 II

问题描述:设计一个算法,找出只含素因子2,3,5 的第 n 小的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...样例如果n = 9, 返回 10这一题思路很具有技巧性。其实说白了就是一个多链表Merge Sort的变形,看如下过程:Ugly Number: 1, 2, 3, 4,

2018-01-18 10:54:46 298

原创 TCP连接的建立

前言:TCP的问题已然困惑我很久了,一直是一知半解,靠记忆来记住TCP连接的过程,不能根本上理解,漏洞百出,最近抽时间把TCP经典书籍——《 TCP-IP详解》阅读了一下。废话不多说,这篇博客的目的是希望能帮助刚入门的老铁们以及和我一样一直只是知道大概的老铁们~1、TCP连接的建立过程先来放两张大家都熟悉的图:上图和下图对应着看。上图是TCP连接建立的宏观过程:1)

2018-01-16 15:37:18 10363 1

转载 3、统计数字

问题描述:计算数字k在0到n中的出现的次数,k可能是0~9的一个值样例例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)显然用暴力搜索能可以解决的,一个数字一个数字地确定,这样时间复杂度就会很高了。《编程之美》中给我们提供了一种思路:假设有一个5位数

2018-01-16 13:24:56 363

原创 2、尾部的零

问题描述:设计一个算法,计算出n阶乘中尾部零的个数样例11! = 39916800,因此应该返回 2.这个问题相信很多老铁都已经遇到过了,很经典的一个题目,还是那句老话,重要的是考虑的过程,是如何想到以5的个数来统计0的个数呢?又是如何想到除以25、除以125... ...的呢?这些事重点。首先n!中,哪些数字相乘可能会出现0呢,最简单的也是最根本的2*5(即使

2018-01-14 15:30:38 272

原创 1、A+B问题

这一题是LintCode上的第一题,有点意思。重要的不是代码,而是思考的过程。我一开始也没有思路,后来参考了一下别人的思路,见笑了~首先要想到用位运算首先肯定要想到用位运算来操作,即用二进制来处理,好,既然想到这里,当然要举个例子来想想,最简单的1+21的二进制 ····00012的二进制 ····00103的二进制 ····0011那a+b不就等于

2018-01-12 13:55:28 605

原创 堆排序算法

前言:一直对堆排序一知半解,现在总结一下,权当记录。1、堆的概念在介绍堆排序之前,首先需要说明一下,堆是个什么玩意儿。堆是一棵顺序存储的完全二叉树。其中每个结点的关键字都不大于其孩子结点的关键字,这样的堆称为小根堆。其中每个结点的关键字都不小于其孩子结点的关键字,这样的堆称为大根堆。举例来说,对于n个元素的序列{R0, R1, ... , Rn}当且仅当满足

2018-01-10 19:58:05 268

转载 C语言编译过程

IDE的使用让很多和我一样的人对C/C++可执行程序的底层生成一知半解,不利于我们深入理解原理。在这里小结一下,望路过的大神指正~前言:从一个源文件(.c文件)到可执行程序到底经历了哪几步,我想很多人都知道,但是每一步具体做了什么,估计很多像我一样的人就不能说的清清楚楚,明明白白了。编辑一个小程序,hello.c#include #include int mai

2018-01-10 10:05:20 1214

原创 C语言函数指针实现多态特性

1、函数指针函数指针是指向函数的指针变量,本质上是一个指针,类似于int*,只不过它是指向一个函数的入口地址。有了指向函数的指针变量后,就可以用该指针变量调用函数,就如同用指针变量引用其他类型变量一样。指针函数一般有两个作用:调用函数和做函数的参数。2、函数指针实现多态先来上一段代码:#include #include #include typedef int(*P

2018-01-09 16:29:14 2523

原创 python模块之subprocess

前言:subprocess 模块简介subprocess最早是在2.4版本中引入的。subprocess模块用来生成子进程,并可以通过管道连接它们的输入/输出/错误,以及获得它们的返回值。它用来代替多个旧模块和函数:os.systemos.spawn*os.popen*popen2.*commands.*关于这个模块可以取代的旧函数可以参见 subprocess

2017-06-12 10:19:30 917

原创 Ubuntu14.04 + opencv3.2.0 + contrib modules 配置

opencv3.X版本的编译和之前有些区别,它将一些不稳定或者说在开发中的模块都放到contrib modules里面了,用户视自己的需求去编译.这篇文章记录了Ubuntu14.04 + opencv3.2.0 + contrib modules 的配置方法,供自己记录和大家参考一下.谢谢1 opencv依赖项安装sudo apt-get install build-essentials

2017-06-07 12:20:17 2300

原创 C/C++关键字之extern

先来看一段代码,这段代码是jni自动生成的代码。/* DO NOT EDIT THIS FILE - it is machine generated */#include /* Header for class TestJni */#ifndef _Included_TestJni#define _Included_TestJni#ifdef __cplusplusextern

2017-05-08 13:14:07 369

原创 从C++指针定义字符串和数组定义字符串区别到C++堆和栈区别

先以一个前辈写的经典开头://main.cpp      int   a   =   0;   全局初始化区      char   *p1;   全局未初始化区      main()      {      int   b;   栈      char   s[]   =   "abc";   栈      char   *p2;   栈      char

2017-04-01 09:47:31 494

原创 C++中类成员对象与指针的区别

C++编程过程中,在一个类的数据成员是一个类时,定义这个成员变量为对象还是指针是有讲究的。在C++中,ClassTest objTest;就已经构造了对象,分配了空间而在C#、Java中,ClassTest objTest;只是声明,并没有分配空间。在C++中,ClassTest objTest;是在栈上分配空间,ClassTest *pobjTest = new Clas

2017-03-29 22:46:43 4471 2

转载 C++之Set

转载自:http://blog.csdn.net/wangran51/article/details/8836160感谢总结!set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。平衡二叉检索

2017-03-26 07:43:57 282

原创 算法之路(三)——BFS

最近由于要忙论文开题的事,还有实习工作也比较忙,所以这个系列的博客好久没有更新了。BFS是一种基于“队列”这种数据结构的搜索方式,特点是由一个状态拓展出很多状态,然后再由此扩展,直到找到目标状态或者队列中头尾指针相遇,即队列中所有状态都处理完毕。BFS对于解决最短或最少问题特别有效,而且寻找深度小,但缺点也很明显,内存消耗巨大(因为它需要大量的数组单元用来存储状态)。下面是实现BFS的

2017-03-25 16:58:45 833

原创 Linux学习之g++编译命令

有关gcc和g++的区别我就不赘述了,我个人更喜欢用g++来编译链接c++程序,因为它检查规则更严格。[介绍]gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步1.预处理,生成.i的文件[预处理器cpp]2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]3.有汇编变为目标代码(机器代码)生成.o的文件[汇

2017-03-25 15:13:02 976

原创 C++指针delete后需要做

C++标准规定:delete空指针是合法的,没有副作用。所以我们一般在delete后就以为万事大吉了,其实这是不安全的。 我们在Delete指针后赋值为NULL或0是个好习惯。对一个非空指针delete后,若没有赋NULL,若再次delete的话有可能出现问题。如下代码:可以看出delete是释放指针指向的内存,并不是指针本身所占有的内存。所以delete后,指针的

2017-03-24 12:34:24 2244

原创 C++单例模式原理与实现

今天有一个同学问我单例模式的实现方式,就顺手写篇文章记录一下。单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态变量的方式,这样比较简单,也是没学过设计模式的人所能想到的最简单的方式了。一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多

2017-03-24 12:17:53 938

转载 Linux学习之gdb调试

一.gdb常用命令:命令描述backtrace(或bt)查看各级函数调用及参数finish连续运行到当前函数返回为止,然后停下来等待命令frame(或f) 帧编号选择栈帧info(或i) locals查看当前栈帧局部变量的值list(或l)列出源代码,接着上次的位置往下列,每次列10行

2017-03-18 10:49:37 297

转载 C++之Map

看到一篇介绍map很不错的文章,转载一下,感谢原作者的整理。转载地址:http://blog.csdn.net/shuzfan/article/details/53115922一 声明二 插入操作1 使用 进行单个插入1 使用insert进行单个和多个插入三 取值四 容量查询五 迭代器六 删除交换1 删除2 交换七 顺序比较八 查找九 操作符

2017-03-17 09:44:04 407

原创 算法之路(二)

上一篇写了DFS的递归方式实现,这次写一下非递归实现。原理其实非常简单:我用栈去实现的,栈实现的基本思路是将一个节点所有未被访问的“邻居”(即一层层邻居节点)压入栈中“待用”,然后围绕顶部节点猛攻,每个节点访问 后被弹出。下面是实现的代码,仅供参考~#include #include using namespace std;#define MaxNode 20#

2017-03-16 21:45:43 314

原创 算法之路(一)

写在前面: 好久没有复习算法这部分的知识了,以前也养成了不好的习惯,眼高手低,理解了算法的原理,不怎么去写伪代码,也很少真的去编译一下代码。以后要改正这个不好的习惯。从今天开始,把以前学习过的算法编译一遍,当做复习。注:我编译代码的环境有两种:1、ubuntu14.04, g++4.8.4     2、VS2015代码基本上都是用C++写的,顺便改进下C++的编程习惯。有诸多不足,

2017-03-11 15:30:43 501

转载 我的第一个Windows程序-----HelloWindow

/*-----------------------------------------------------------------------------------      HelloWin.cpp -- Displays "Hello, Windows 7!" in client area   *------------------------------------------

2017-02-15 18:51:39 801

原创 预定义常量_WIN32,WIN32,_WIN64的区别

VC2012 下写 Windows 程序时,有时需要判断编译环境。在之前的文章《判断程序是否运行在 Windows x64 系统下。》里说过如何在运行期间判断系统环境,但在编译时如何判断?  MSDN 里说,VC 有 3 个预处理常量,分别是 _WIN32,_WIN64,WIN32。这三个常量如何使用呢?看起来简单,其实是很困惑的。  在 Win32 配

2017-02-12 17:14:51 1295

空空如也

空空如也

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

TA关注的人

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