- 博客(111)
- 问答 (4)
- 收藏
- 关注
原创 partition算法思想的应用
1.partiton实现 partition(int[] a, int left, int right) int x = a[right];这行代码选中一个主元,这里我们每次选择的都是当前序列中最右边那个。int p = left - 1;这行代码保存了一个变量p,用来记录比主元小的所有元素中,在序列中存放的位置最靠右的那个。接下来是个循环,从当前序列的第一个循环到倒数第二个(right-1)元
2016-08-21 17:09:12
1295
原创 Python 导入机制 - import hook
Python import hook可以翻译为Python 探针。 它的实现原理涉及了以下几个知识点: 1. Python导入协议 2. sys.meta_path一,Python导入协议 Python 中所有加载到内存的模块都放在 sys.modules。当import 一个模 块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则 只是将模 块的名字加入到正在调用 im
2016-07-26 18:31:34
11640
1
原创 Python导入机制-查找模块
查找module的过程在import的第一个阶段,主要是完成了查找要引入模块的功能,这个查找的过程如下:检查 sys.modules (保存了之前import的类库的缓存),如果module被找到,则⾛到第二步。检查 sys.meta_path。meta_path 是一个 list,⾥面保存着一些 finder 对象,如果找到该module的话,就会返回一个finder对象。检查⼀些隐式的fin
2016-07-06 10:40:20
5994
转载 Git 常用命令详解
Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro)Git 的更多介绍,请参考我的上一篇博客:Git 版本管理工具一、 Git 命令初识在正式介绍Git命令之前,先介绍一下Git 的基本命令和操作,对Git命令有一个总体的认
2016-06-12 21:11:02
471
原创 c++友元
通过友元的方式,某个普通函数或者类的成员函数可以访问某个类中的私有数据,友元提供了一种不同类或对象的成员函数之间、类的成员函数与普通函数之间共享数据的机制。 有两种形式的友元: (1)友元函数:普通函数对一个访问某个类中的私有或保护成员。 (2)友元类:类A中的成员函数访问类B中的私有或保护成员。1.友元函数 友元函数是在类的声明中用关键字friend修饰的普通函数或者其他类的成员函数。
2016-06-11 17:51:13
439
原创 指针与引用c
引用的基本概念:指针和引用之间的区别: 总结如下: (1)非空区别. 引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。 并且不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL),一个引用必须总是指向某些对象. (2)可修改区别:指针可以重新赋值以指向另一个不同的对象.但是引用则总是指向在初始化时被指定的对象,以后不能改变 (3)传递性区别: 指针传递
2016-06-11 15:15:57
598
原创 C++学习笔记 指针与引用的区别
define: 宏定义。 在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。由预处理器处理。define ASPECT_RATIO 1.653记号名称ASPECT_RATIO也许从未被编译器看见,在编译器处理源代码之前就可能被预处理器移走了。于是记号就有可能没有进入到符号表中。
2016-06-11 14:56:40
392
原创 C++学习笔记 代替define
define: 宏定义。 在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。由预处理器处理。#define ASPECT_RATIO 1.653记号名称ASPECT_RATIO也许从未被编译器看见,在编译器处理源代码之前就可能被预处理器移走了。于是记号就有可能
2016-06-11 14:26:47
2287
原创 C++学习笔记-构造函数
1.构造函数 构造函数的作用就是在对象被创建时利用特定的初始值构造对象,把对象置于某一个初始状态,它在对象被创建的时候由系统自动调用,我们只需要使用默认的构造函数或者自己定义构造函数,而不用管怎么调用的。 构造函数也是类的成员函数,除了有成员函数的所有特征外,还有一些不同之处:构造函数的函数名跟类名一样,而且没有返回值。构造函数一般被声明为公有函数,除非我们不允许某
2016-06-07 16:20:00
479
转载 探索 Python 代码对象
由于受到 David Beazley 在 PyCon 上的 Keynote 的启发,近来我四处学习与 Python 代码对象 (code object) 相关的内容。我并没有什么特别的利器,也没有专门的任务去解决 (至今为止?),所以请将这篇文章看做一些也许有趣的记录和随笔 (如果没意思的话,抱歉)。免责声明: 这篇文章是关于 CPython 2.7 的,虽然其中的大部分对于其他的
2016-05-26 09:01:29
1621
转载 Python Import机制备忘-模块搜索路径(sys.path)、嵌套Import、package Import
最近在看《Python源码剖析》,对Python内部运行机制比以前了解的更深入了,感觉自己有机会也可以做个小型的动态脚本语言了,呵呵,当然是吹牛了。目的当然不是创造一个动态语言,目的只有一个:更好的使用Python。看到模块导入那块的时候,终于对模块导入机制比较了解了,以防忘记特记录下来。模块的搜索路径模块的搜索路径都放在了sys.path列表中,如果缺省的sys.path中没有含有自
2016-05-25 16:02:14
483
原创 C++运算符重载
要点总结如下:1.前置单目运算符重载和后置单目运算符重载在语法形式上的区别就是前者重载函数没有形参,而后者重载函数有一个整型形参,此形参对函数体没有任何影响,这只是语法上的规定,仅仅是为了区分前置和后置。 // 前置--运算符重载 Coordinate &operator--() { m_iX--; m_iY--;
2016-05-24 10:27:33
638
原创 Python 调用 Shell脚本的方法
1.os模块的popen方法 通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。>>> os.popen('date -u |wc')<open file 'date -u |wc', mode 'r' at 0x7f9539eb34b0>>>> os.popen('date -u |wc').read()' 1
2016-05-20 17:50:56
1846
原创 PBE加密系统
最近在做一个python方面的加密项目, 公司要求对加密系统的密钥进行加强保护,目前比较好的方法是混合加密系统 或者PBE 加密系统,前者是使用非对称算法加密密钥,后者一般还是用对称算法加密密钥.基于口令的密码(PBE),就是一种根据口令生成密钥并用该密钥进行加密的密钥保护方法,其特点在于口令由用户自己掌管,只有合法用户才可以拥有口令信息。它采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的
2016-05-18 16:01:12
1806
原创 GIT入门学习1
欢迎使用Markdown编辑器写博客重点内容本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 C
2016-05-18 11:00:30
350
转载 Linux内核-进程地址空间
下图是x86_64下linux进程的默认内存布局形式:下面逐一分析以上各个地址段的含义。 text 代码段代码段,从虚拟内存地址00400000开始,使用pmap $$可以查看到,这个地址是固定的:linux # pmap $$27729: bashSTART SIZE RSS PSS DIRTY
2015-08-28 09:07:58
567
转载 Linux 硬连接 软连接
在 Linux 系统中查看 inode 号可使用命令 stat 或 ls -i(若是 AIX 系统,则使用命令 istat)。清单 3.中使用命令 mv 移动并重命名文件 glibc-2.16.0.tar.xz,其结果不影响文件的用户数据及 inode 号,文件移动前后 inode 号均为:2485677。为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard lin
2015-08-26 21:07:57
527
原创 Linux挂载
Mount命令使用一般主要使用 -t选项 指定设备的文件系统类型 比如ext2 挂载点必须已经存在的目录挂载点的内容如要删除 必须首先执行umount命令mount和umount实际上做了什么?为什么需要挂载,将/dev/hdc挂载到/...下去,什么时候真正调用了设备驱动程序?与windows有什么区别?挂载即把一个分区
2015-08-25 09:14:37
815
转载 linux下的 fork vfork和clone函数
Linux的用户进程不能直接被创建出来,因为不存在这样的API。它只能从某个进程中复制出来,再通过exec这样的API来切换到实际想要运行的程序文件。 复制的API包括三种:fork、clone、vfork。 这三个API的内部实际都是调用一个内核内部函数do_fork,只是填写的参数不同而已。 vfork,其实就是fork的部分过程,用以简化并提高效率。
2015-08-24 22:59:42
485
原创 Shell脚本学习笔记
find 命令1.基于文件名或者正则表达式搜索例子:匹配多个条件 find . \( -name "*.txt" -o -name "*.pdf" \) -print 找到当前目录中所有txt pdf文件输出 加-o 表示OR条件 \( \)将中间部分视为一个整体 find . -regex ".*\( \.py\|\.sh\)$“ -rege
2015-08-17 22:02:06
425
转载 Linux Shell脚本编程--grep命令详解
grep简介grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展
2015-08-13 11:32:35
466
转载 容器改变着开发规则
容器改变着开发规则发表于2015-07-17 08:45|1509次阅读| 来源InfoWorld|6 条评论| 作者Sam Greenblatt云计算Container开发者摘要:容器最简单的形式是,它容器允许开发人员将所有的组件和相关的软件包放入一个“盒子”中,使得一个应用程序能从基本操作系统中抽取出来,并在一个隔离的环境中运行。有很多关于容器的文章
2015-07-20 20:55:08
828
原创 设计模式-状态模式
如果要实现一个状态机,对象内的状态建模的通用技巧是 创建一个实例变量来持有状态值并在方法内书写条件代码来处理不同的状态。设计一大概模版如下public class TestState{ final static int State1 = 0; final static int State2 = 1; public void dosomething{
2015-06-08 14:18:00
1526
原创 设计模式-模板方法模式 策略模式
模板方法模式定义 模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 模板方法非常常见,对创建框架来说,由框架控制如何做事情,而由你(使用这个框架的人)指定框架算法中每个步骤的细节。举个咖啡和茶的例子茶的制作方法:1.把水煮沸 2.用沸水浸泡茶叶 3.把茶倒进杯子4.加柠
2015-05-24 21:20:34
525
原创 设计模式-单例模式
单件模式 Singleton Pattern 类只存在一个实例,即只可以创建一个对象。有一些类如果创造出多个对象就会导致许多问题的产生,如程序的行为异常、资源使用过量,或者是不一致的结果。单件模式常常被用来管理共享的资源,例如数据库连接或者线程池。 简要定义:单件模式确保一个类只有一个实例,并提供一个全局访问点单件模式的实现 单件模式的实现是通过private构造
2015-05-23 21:54:12
519
原创 设计模式-工厂方法和抽象工厂方法
工厂方法。 工厂方法用来处理对象的创建,并将这样的行为封装在子类中。这样,客户程序中关于超类的代码就和子类对象创建代码解耦了。 工厂方法是抽象的,所以依赖子类来处理对象的创建。 工厂方法必须返回一个产品。超类中定义的方法,通常使用到工厂方法的返回值。 工厂方法将客户(也就是超类中的代码,如orderPizza())和实际创建具体产品的代码分隔开来。
2015-05-20 09:41:41
515
原创 设计模式-Python Java装饰者模式
装饰者模式定义 动态地将责任附加到对象上。若要扩展功能,装饰者提供比继承更有弹性的替代方案实现类图 装饰者模式的特点 A 装饰者和被装饰对象有相同的超类型。(注意这是利用继承达到”类型匹配“,而不是利用继承获得”行为“,行为来自装饰者和基础组件,或者与其他装饰者之间的组合关系) B 可以用一个或多个装饰者包装一个对象。 C 因为装饰者
2015-05-19 15:01:35
735
原创 设计模式-command模式
定义命令模式 命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。命令对象将动作和接收者包进对象中。应用场景 在面向对象的软件设计中,经常会遇到一个(或一系列)对象,对象本身的数据存储与对象的操作耦合在一起。例如一个对象有add(),edit(),delete()方法,这样对象支持的方法很难扩展,如果需要加入update(
2015-05-19 10:23:21
1609
原创 设计模式学习-Adapter Pattern
适配器模式定义: Adapter是将一个类的接口变换成客户端所期待的另一种接口,从而使得原本因接口不匹配的而无法一起工作的类可以一起工作 。 下图为适配器模式通用类图适配器模式的三个角色:1.Target目标角色 : 该角色定义把其它类转换为何种接口,也就是我们的期望接口2 Adaptee角色 : 该角色是已经存在的运行良好的类或者对象,经过适配器角色的包装,它会
2015-04-29 09:19:00
422
原创 爬山法实现 八皇后问题 (Python 实现)
本文主要简单阐述爬山法的基本算法思想,并给出用此算法实现八皇后问题详细过程最基本的爬上搜索算法表示:(节选自《人工智能》第二版):function HILL-CLIMBING(problem) return a state thate is a locak maximum inputs: problem local variables: current,
2015-04-24 11:13:08
9910
2
原创 Python虚拟机的函数机制
本文参考Pytho源码剖析第11章: python中函数就是一个对象,函数这种抽象机制是通过PyFunctionObject这个对象来实现的。 对比PyCodeObject与PyFunctionObject:前者是对一段Python源代码的静态表示,它包含了一个Code Block的静态信息,而后者是python执行def语句时动态创建的,在PyFunctionOb
2015-04-22 20:59:19
1029
原创 Python中模块的动态加载机制
Python引入了全局的module集合-sys.modules,这个集合作为module pool,保存了module的唯一映像 sys.modules 是一个字典,它包含了从Python 开始运行起,被导入的所有模块。键字就是模块名,键值就是模块对象。请注意除了你的程序导入的模块外还有其它模块。Python 在启动时先装入了一些模块,如果你在一个Python IDE
2015-04-20 21:35:10
3044
转载 Python Decorator
Python的修饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西。虽然好像,他们要干的事都很相似——都是想要对一个已有的模块做一些“修饰工作”,所谓修饰工作就是想给现有的模块加上一些小装饰(一些小功能,这些小功能可能好多模块都会用到),但又不让这个小装饰(小功能)侵入到原有的模块中的代码里
2015-04-15 15:10:39
2111
转载 AST 模块:用 Python 修改 Python 代码
本文介绍如何利用Python的AST模块得到或者修改python虚拟机编译过程中生成的语法树CPython 的编译过程在开始之前,我们应该先看看 CPython 的编译过程,这个过程在 PEP 339 中有详细的描述。当然,在读这篇文章的时候,你并不需要对这个步骤有很深入的理解,不过这可以帮助你对整个过程有一个大体的了解。首先,编译器会根据源代码生成一棵语法分析树 (P
2015-04-02 14:58:10
6917
转载 理解python中的装饰器
python的函数是对象要理解装饰器,首先,你必须明白,在python中,函数是对象. 这很重要.简单例子来理解为什么def shout(word="yes"): return word.capitalize()+"!"print shout()# outputs : 'Yes!'# 作为一个对象,你可以讲函数赋值给另一个对象scream = shout#
2015-04-01 21:29:00
602
原创 查看python字节码
1.查看python所有的字节码列表的方法 :执行这段代码就能看到字节码的列表: import opcode for op in range(len(opcode.opname)): print('0x%.2X(%.3d): %s' % (op, op, opcode.opname[op])) 既然叫“字节码”,这些操作码自然是以字节
2015-03-31 09:32:44
5657
转载 Python程序执行原理+
1. 过程概述Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行。2. 字节码字节码在Python虚拟机程序里对应的是PyCodeObject对象。.pyc文件是字节码在磁盘上的表现形式。3. pyc文件PyCodeObject对象的创建时机是模块加载的时候,即import。Python test.py
2015-03-30 21:28:15
579
转载 在Linux平台中调试C/C++内存泄漏方法 (腾讯和MTK面试的时候问到的)
以下转自IBM 韩 兆兵 (hanzb@cn.ibm.com), 软件工程师, IBM刘 盈 (cdlliuy@cn.ibm.com), 软件工程师, IBM强 晟 (qiangsh@cn.ibm.com), 软件工程师, IBM 2008 年 5 月 15 日 由于 C 和 C++ 程序中完全由程序员自主申请和释放内存,稍不注意,就
2015-03-30 16:06:03
641
转载 C++内存泄漏检查心得
闲话少说,切入正题,本人在参与一个大型Win32软件项目时,对整个项目进行了内存泄漏方面的检查,随着泄漏代码的一个个发现,发现许多的泄漏都具有某些共同性,于是乎总结了一些常见泄漏代码,发给同事们看了。希望能提醒下大家,但后来在项目的二期、三期版本出现的泄漏发现和以前的一些问题几乎是同一性质的,回过来看以前写的一些笔记发现都概括了(当时觉得自己是有那么两把刷子,^_^)。于是想到也许很多编程同志也会
2015-03-30 15:52:07
2523
转载 深入浅出单实例Singleton设计模式
单实例Singleton设计模式可能是被讨论和使用的最广泛的一个设计模式了,这可能也是面试中问得最多的一个设计模式了。这个设计模式主要目的是想在整个系统中只能出现一个类的实例。这样做当然是有必然的,比如你的软件的全局配置信息,或者是一个Factory,或是一个主控类,等等。你希望这个类在整个系统中只能出现一个实例。当然,作为一个技术负责人的你,你当然有权利通过使用非技术的手段来达到你的目的。比如:
2015-03-15 16:56:52
414
空空如也
Python针对项目 测试瓶颈函数信息
2014-12-31
Python的优化编译器pypy为什么C扩展性比较弱?
2014-12-21
python进行C扩展的各种方法本质原理是什么?
2014-12-20
如何进行Python优化使得Python模块能够得到2倍性能提升
2014-12-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人