自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 详细讲述python自省函数getattr的用法

这两天看了公司的老代码,发现有大量的在用getattr….  虽然在不得已的时候,也会考虑用getattr,只是没这么频繁而已….    这边的getattr主要是用在函数调用上,比如一个简单的rpc服务,里面注册了N个函数,这时候,客户端是知道自己需要调用哪个函数的,他给我传递了一个名字叫getName函数名,那么我用getattr直接调用就OK了….关于python内建函数getatt

2015-12-07 15:29:14 16842

转载 关于Python中的yield

在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor)。一、迭代器(iterator)在Python中,for循环可以用于Python中的任何类型,包括列表、元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而

2015-12-03 15:34:39 657

转载 Python之美[从菜鸟到高手]--生成器之全景分析

yield指令可以暂停一个函数,并且返回中间结果。只要函数中包含了yield关键字,该函数调用就是生成器对象。------------------------yield指令,可以暂停一个函数并返回中间结果。使用该指令的函数将保存执行环境,并且在必要时恢复。生成器比迭代器更加强大也更加复杂,需要花点功夫好好理解贯通。看下面一段代码:[python] view

2015-12-03 15:21:57 738

转载 Python yield 使用浅析

-------------------------------您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ?我们先抛开 generator,以一个常见的编程题目来展示 yield 的概念。如何生成斐波那契數列斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数

2015-12-03 14:10:07 444

转载 Python xrange与range的区别

xrange用法和range完全一样,不同的是range生成的是一个list对象,而xrange生成的是一个生成器。在处理很大的数字序列的时候,xrange会比range性能高很多,因为不用一上来就开辟很大的内存空间。----------------------------range 前面小节已经说明了,range([start,] stop[, step]),根据start与

2015-12-03 13:57:55 605

转载 Pandas透视表(pivot_table)详解

介绍也许大多数人都有在Excel中使用数据透视表的经历,其实Pandas也提供了一个类似的功能,名为pivot_table。虽然pivot_table非常有用,但是我发现为了格式化输出我所需要的内容,经常需要记住它的使用语法。所以,本文将重点解释pandas中的函数pivot_table,并教大家如何使用它来进行数据分析。如果你对这个概念不熟悉,wikipedia上对它做了详细的解

2015-11-30 21:37:23 52811 7

转载 Python 文本挖掘:使用gensim进行文本相似度计算

在文本处理中,比如商品评论挖掘,有时需要了解每个评论分别和商品的描述之间的相似度,以此衡量评论的客观性。评论和商品描述的相似度越高,说明评论的用语比较官方,不带太多感情色彩,比较注重描述商品的属性和特性,角度更客观。那么Python 里面有计算文本相似度的程序包吗,恭喜你,不仅有,而且很好很强大。这是从52nlp大神的博客里面发现的,其实具体的处理流程和程序和他的基本一致,

2015-11-27 14:38:35 51827 2

转载 Python内存池管理与缓冲池设计

Python是一门开发效率很高的语言,而且其既下里巴人,又阳春白雪。也就是说这门语言只要稍加学习就可以上手开发,而深入探究也会发现Python有很多高深的东西。最近读了《Python源码剖析》,收获良多,今天就把Python的内存管理整理一番。本文的组织如下:第一部分:整理Python的内存管理机制,主要包括内存池以及对象缓存池第二部分:从百度的笔试题来探讨如何实现一个缓存池。

2015-11-17 15:24:49 2458

转载 继承和组合

C++的“继承”特性可以提高程序的可复用性。正因为“继承”太有用、太容易用,才要防止乱用“继承”。我们要给“继承”立一些使用规则:  一、如果类A 和类B 毫不相关,不可以为了使B 的功能更多些而让B 继承A 的功能。  不要觉得“不吃白不吃”,让一个好端端的健壮青年无缘无故地吃人参补身体。  二、如果类B 有必要使用A 的功能,则要分两种情况考虑:(1)若在逻辑上

2015-11-16 17:30:05 412

原创 虚函数的一个例子

做了一个虚函数的例子。在父函数中指定了print是虚函数,那么父类就可以调用子类的print方法。答案是:A::constructB::constructThis is BB::destroyA::destroy请按任意键继续. . .注意:1,2,用指针或者引用将B传个A,虚函数生效。3直接值传递,不生效。#include usin

2015-11-08 10:50:02 1738

原创 迭代器删除元素

1.序列容器,比如vector序列容器的erase返回的是被删除元素后的有效迭代器。vector vec;vector::iterator iter;for(iter = vec.begin();iter!=vec.end();){   if(need_delete)   {iter = vec.erase(iter);   }else++iter;}

2015-11-07 22:44:27 2405

原创 回调函数一个例子

什么是回调函数?回调函数就是函数形参中包含一个函数指针,实现的时候这个函数指针可以指向它的实现函数。这样就可以实现,定义函数,让回调函数来调用,调用和调用者分离了。举个例子:typedef int(*callbackFun)*(char *p)  //定一个回调函数模型定义两个方法int funcA(char *p) //方法A{//...}; 

2015-11-07 20:38:51 805

原创 Sting类的实现

为什么要进行操作符重载?举个例子,正常的数字才可以进行加,如果对string进行+,实际上进行的是拼接的操作。那么这个时候,就需要对+进行操作符重载, 实现拼接的操作。‘为什么赋值操作符(=)重载需要返回引用?因为返回的是自己,而不是自己的一个拷贝。什么是this指针?this指针表示的类对象本身。它只作用在非静态成员函数中,作为一个隐藏参数。所以它的生

2015-11-07 19:45:23 845

转载 多表联合查询(join、union等)

内部连接 inner join 两表都满足的组合full outer--全连.两表相同的组合在一起,A表有,B表没有的数据(显示为null),同样B表有A表没有的显示为(null)A表 left join B表--左连,以A表为基础,A表的全部数据,B表有的组合。没有的为nullA表 right join B表--右连,以B表为基础,B表的全部数据,A表的有的组合。

2015-09-05 22:34:28 421

转载 如何只在堆或者栈上分配类对象

昨天一个同学去网易面试C++研发,问到了这么一个问题:如何限制一个类对象只在栈(堆)上分配空间?一般情况下,编写一个类,是可以在栈或者堆分配空间。但有些时候,你想编写一个只能在栈或者只能在堆上面分配空间的类。这能不能实现呢?仔细想想,其实也是可以滴。在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。

2015-08-13 13:42:11 1866

转载 C++类内存分布

书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来:  先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到

2015-08-12 17:13:08 409

转载 取余与位运算

在C风格语言中(比如C,C++,C# (注:排名按出生日期 ^_^)),取余运算符定义为“%”。但在很久很久以前,CPU采用如下方法计算余数(注意,该方法只对2的N次方数系有效):X & (2^N - 1)首先从求余数谈起,我们知道,计算机中存储的方式是0和1序列:1 0001 2^02 0010 2^13 0011 2^1 + 14 0100 2^

2015-08-11 15:11:21 5968

转载 在遍历中使用 iterator/reverse_iterator 进行 Erase 的用法

众所周知,在使用迭代器遍历 STL 容器时,需要特别留意是否在循环中修改了迭代器而导致迭代器失效的情形。下面我来总结一下在对各种容器进行正向和反向遍历过程中删除元素时,正确更新迭代器的用法。本文源码:https://code.csdn.net/snippets/173595首先,要明白使用正向迭代器(iterator)进行反向遍历是错误的用法,要不干嘛要有反向迭代器呢(reverse_it

2015-08-11 09:23:47 603

转载 C语言中的未定义行为

C语言中的未定义行为(Undefined Behavior)是指C语言标准未做规定的行为。同时,标准也从没要求编译器判断未定义行为,所以这些行为有编译器自行处理,在不同的编译器可能会产生不同的结果,又或者如果程序调用未定义的行为,可能会成功编译,甚至一开始运行时没有错误,只会在另一个系统上,甚至是在另一个日期运行失败。当一个未定义行为的实例发生时,正如语言标准所说,“什么事情都可能发生”,也许什么

2015-08-10 22:41:59 4802 1

转载 C++类的构造函数和析构函数的调用顺序

有时候我们做一些笔试或者是面试中可能会遇到定义一些类,然后叫你写出类的构造函数和析构函数调用顺序。这时候我们就需要对这个有了解才能够正确的做出来。先看看下面的一段代码。#include using namespace std;class A {public: A() { cout << "A()" << endl; } ~A() {

2015-08-09 23:56:20 471

转载 C++中虚函数内存布局

由sizeof()求带有虚函数的类的大小引发的思考,在查看相关资料的过程中看到了陈皓先生的一篇文章《C++ 虚函数表解析》(详情见http://blog.csdn.net/haoel)觉得讲的十分的好,只是看完之后仍对为什么要又为什么可以由父类的指针调用子类的对象的虚函数不解,如这种典型的描述:Derive d;//Derive 是Base的子类Base *b1 = &d;//这必

2015-08-09 16:18:00 762

原创 C语言中32位和64位的数据类型长度

char *long字符指针和长整形有不同,在32位下是4个字节,在64位是8个字节。

2015-08-09 11:43:28 5880

原创 内存池的实现

1.内存池要解决什么问题?直接用malloc/free进行内存的申请和释放,有一些弊端,比如开销比较大,在申请的时候会根据最优匹配算法找到一个空闲的内存,在释放的时候可能需要合并空闲的内存块,这些都设计到开销;第二个会产生大量的内存碎片,影响效率;第三个,可能发生内存泄露。而用内存池代替malloc/free去分配内存,是在内存池中查找合适的内存块,而不是直接的向操作系统申请。它有几个优点

2015-05-11 23:24:29 497

原创 EPOLL服务器端

EPOLL逻辑图。EPOLL的server端的流程图如下。参考资料:http://blog.csdn.net/chencheng126/article/details/45479241http://blog.csdn.net/chencheng126/article/details/45397229

2015-05-11 14:41:38 424

转载 内存池的实现(二)

《内存池的实现(一)》中,介绍了使用内存池的原因,设计内存池应该考虑的问题,最后给出一个简单的内存池实现例子。使用上一篇文章中介绍的内存池实现方案,要在一定的限定条件下,下面我们来看更通用的内存池实现——Apache服务器的内存池实现。 Apache服务器的开发人员将代码中可移植的部分整理出来,编辑成Apache可移植运行库(Apacheportable Run-timelibra

2015-05-08 10:16:47 424

转载 内存池的实现(一)

引言C/C++下内存管理是让几乎每一个程序员头疼的问题,分配足够的内存、追踪内存的分配、在不需要的时候释放内存——这个任务相当复杂。而直接使用系统调用malloc/free、new/delete进行内存分配和释放,有以下弊端:调用malloc/new,系统需要根据“最先匹配”、“最优匹配”或其他算法在内存空闲块表中查找一块空闲内存,调用free/delete,系统可能需要合并空闲内

2015-05-08 10:13:23 544

转载 内存池

引言本书主要针对的是 C++ 程序的性能优化,深入介绍 C++ 程序性能优化的方法和实例。全书由 4 个篇组成,第 1 篇介绍 C++ 语言的对象模型,该篇是优化 C++ 程序的基础;第 2 篇主要针对如何优化 C++ 程序的内存使用;第 3 篇介绍如何优化程序的启动性能;第 4 篇介绍了三类性能优化工具,即内存分析工具、性能分析工具和 I/O 检测工具,它们是测量程序性能的利器。本章首先简单介绍

2015-05-07 16:28:37 435

原创 C++单例模式

C++ 线程安全的单例模式http://blog.csdn.net/chencheng126/article/details/45535161包括懒汉模式和饥汉模式。懒汉模式就是在第一次调用该实例的时候,产生一个新的该类的实例,以后都调用这个实例。这里需要用锁来保证线程的安全性。饥汉模式就是不管是否调用该类实例,在程序开始的时候就会产生一个实例,并在以后返回该实例。因为

2015-05-06 14:14:46 435

转载 C++中的单例模式

单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。       单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做

2015-05-06 14:10:48 414

转载 C++ 线程安全的单例模式

废话不多说,常用的代码积淀下来。一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety.使用double-check来保证thread safety.但是如果处理大量数据时,该锁才成为严重的性能瓶颈。1、静态成员实

2015-05-06 14:05:37 626

转载 C++中的static关键字

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

2015-05-06 11:27:13 403

转载 Hadoop:你不得不了解的大数据工具

如今Apache Hadoop已成为大数据行业发展背后的驱动力。Hive和Pig等技术也经常被提到,但是他们都有什么功能,为什么会需要奇怪的名字(如Oozie,ZooKeeper、Flume)。  Hadoop带来了廉价的处理大数据(大数据的数据容量通常是10-100GB或更多,同时数据种类多种多样,包括结构化、非结构化等)的能力。但这与之前有什么不同?  现今企业数据仓库

2015-05-05 15:27:15 602

转载 Epoll简介以及例子

第一部分:Epoll简介问题 :  Select,Poll和Epoll的区别答案 : Epoll和Select的区别1. 遍历方式的区别。select判断是否有事件发生是遍历的,而epoll是事件响应的,一旦句柄上有事件来了,就马上选出来。2. 数目的区别。select一般由一个内核参数(1024)限制了监听的句柄数,但是

2015-05-04 12:51:24 1935

转载 Epoll模型详解

Linux 2.6内核中提高网络I/O性能的新方法-epoll I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。1、为什么select落后    首先,在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在 我用的2.6.15-25-386内核中,该值是1024,搜

2015-04-30 17:15:57 2771

转载 MySQL性能优化的最佳20+条经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。1. 为

2015-04-23 22:16:39 393

转载 一分钟教你知道乐观锁和悲观锁的区别

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人

2015-04-23 21:48:02 532

转载 数据库锁

1 前言数据库大并发操作要考虑死锁和锁的性能问题。看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T1为一个线程,T2 为另一个线程。T3,T4以此类推。下面以SQL Server(2005)为例。2 锁的种类共享锁(Shared lock)。例1:--------

2015-04-23 21:47:22 375

转载 C++中的三种继承public,protected,private

三种访问权限public:可以被任意实体访问protected:只允许子类及本类的成员函数访问private:只允许本类的成员函数访问 三种继承方式public 继承protect 继承private 继承 组合结果基类中 继承方式 子类中public & public继承 => publicp

2015-04-23 20:09:58 355

转载 C++中四种类型转换方式

类型转换有c风格的,当然还有c++风格的。c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传统的c语言风格的类型转换没有区分这些

2015-04-23 19:33:11 394

转载 C++类的构造函数和析构函数的调用顺序

有时候我们做一些笔试或者是面试中可能会遇到定义一些类,然后叫你写出类的构造函数和析构函数调用顺序。这时候我们就需要对这个有了解才能够正确的做出来。先看看下面的一段代码。#include using namespace std;class A {public: A() { cout << "A()" << endl; } ~A() {

2015-04-23 17:26:40 475

空空如也

空空如也

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

TA关注的人

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