- 博客(76)
- 收藏
- 关注
原创 《程序员自我修养》阅读笔记
1,gcc hello.c所包含的过程:预处理,编译,汇编,链接。其中预处理主要是对程序代码进行展开,精简。编译把预处理之后的文件进行一系列的词法分析,语法分析,语义分析,中间代码生成,以及目标代码生成和优化产生汇编代码。汇编把汇编代码转成机器代码。链接:将代码的不同部分进行组装,主要包括:地址和空间分配,符号绑定,重定位。对于编译之后生成的目标文件里面主要包含以下几段:
2014-04-03 12:00:57
759
原创 爬虫系列四:为你的爬虫加速
注意:本文所写主要是基于单机的爬虫程序,也就是怎么把单机的爬虫程序,效率提高。1、手工识别和拒绝爬虫的访问有相当多的爬虫对网站会造成非常高的负载,因此识别爬虫的来源IP是很容易的事情。最简单的办法就是用netstat检查80端口的连接。拒绝爬虫请求既可以通过内核防火墙来拒绝,也可以在web server拒绝。应对方案:反IP,那么就变IP,设置代理。2、通过识别爬虫的Use
2014-03-27 15:27:17
1462
原创 爬虫系列三:开发爬虫
1,Java工具:Java开发爬虫常用的工具就是httpclient和htmlparser这两个jar包了。httpclient实际上就是模拟浏览器发送post或者get请求,这个在本博客的《开启新浪微博的门禁》中有所介绍,可以回去浏览一下。htmlparser实际上就是解析每一个html页面,以dom树的形式来解析每一个页面。另外值得一说的是,现在在页面系统里比较风行的ajax,
2014-03-27 15:20:41
779
原创 爬虫系列二:认识爬虫
1,爬虫框架结构爬虫的准备知识,已经普及完毕,那么接下来从整体的角度把握一下爬虫:这是选自《自己动手写爬虫》一书的一张图,所有的爬虫都离不开这个框架,工程的巨大只是由于你实现较为复杂,但是整体这个架构还是不会变。2,常见的爬虫框架C++:LabinJava:Nutch(分布式处理),HeritxPython:scripy这些爬虫框架,提供了较为友好的api,现在
2014-03-27 15:05:19
609
原创 爬虫系列一:准备知识
1,HTTP常用状态码:2,截包工具:爬虫是模拟浏览器的事情,那么在开发爬虫之前,最好还是按照浏览器走一遍,看一看都是发送些什么请求。工具:Wireshark例如新浪微博:截包内容如下:这就是要封装的内容,而自己开发的爬虫也同时需要封装这些信息,才能完成模拟访问。
2014-03-27 14:47:53
571
原创 Python编程的一些技巧
1,type和instance:type可以适用于任何类型,包括用户自定义的类型,instance是用来判断一个实例属不属于某一个类。2,xrange和range:两者功能类似,但是xrange适用于很大范围的列表,不具体化,也就是省内存,并且仅适用于for语句当中。3,tuple和listtuple是不可变对象,可用于hash的key,而list的就不行了。创建单元素的tup
2014-03-21 17:06:29
555
转载 Python可变参编程*args和**kwargs
先来看个例子:def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '---------------------------------------'if __name__ == '__main__': foo(1,2,3,4) foo(a=1,
2014-03-20 21:41:37
457
原创 Python字符串
先说1双引号与3个双引号的区别,双引号所表示的字符串通常要写成一行如:s1 = "hello,world"如果要写成多行,那么就要使用\ (“连行符”)吧,如s2 = "hello,\world"s2与s1是一样的。如果你用3个双引号的话,就可以直接写了,如下:s3 = """hello,world,hahaha.""",那么s3实际上就是"hello,\nwo
2014-03-13 17:17:33
644
转载 Linux下vim的tab和空格
像Python这种靠对其来执行逻辑的语言,往往在windows下,写好的程序不能获得执行,很是烦人。在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:set ts=4 (注:ts是tabstop的缩写,设TAB宽4个空格)set expandtab 对于已保存的文件,可以使用下面的方法进行空格和TAB的替换: TAB替换为空格:
2014-03-10 18:11:13
1536
转载 Apriori算法:频繁模式挖掘
1 算法思想算法使用频繁项集性质的先验知识。Apriori使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集。首先,通过扫描数据库,累积每个项的计数,并收集满足最小支持度的项,找出频繁1项集的集合。该集合记作L1.然后,L1用于找频繁2项集的集合L2,L2用于找L3,如此迭代,直到不能再找到频繁k项集。找每个Lk需要一次数据库全扫描。Apriori性质可用于压缩搜索空间,
2014-03-07 10:38:22
1414
1
转载 Java 各种运行内存问题解决
http://www.wallcopper.com/os/319.htmlCaused by: java.lang.OutOfMemoryError: GC overhead limit exceededCaused by: java.lang.OutOfMemoryError: GC overhead limit exceeded问题的解决办法.一、异常如下:
2014-03-04 11:13:45
1575
转载 Linux 系统资源监控常用命令
http://blog.csdn.net/daniel_ustc/article/details/12872991文章内容写的很详尽,是研发、测试人员的宝贝。
2014-02-18 09:02:32
560
原创 More Effective C++ 阅读笔记
3.1指针与引用的区别:首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变。
2014-02-14 16:18:22
679
原创 IT笔试面试回忆录
2014年,兹于毕业生找工作之际,共揽七记offer,再回首,呈以小结记忆。1、快速找出故障机器a、一组数字中,所有的数字全部全部出现两次,现在删除其中一个数字,找出这个数。所有数字进行异或运算,得出出现一次的数字。b、现在提升a的难度,把题目改为偶数次中找一个出现奇数次的数字:依然是一步异或运算。 现在继续提升难度,把题目改为偶数次中找两个出现奇数次的数
2014-02-14 16:06:11
827
转载 阅读笔记转载链接
More effective c++读书笔记:http://blog.csdn.net/dotscylla/article/details/5392350
2014-01-02 15:53:08
552
原创 ROC曲线
在评价预测效果时,除了准确率、召回率之外,还有ROC曲线,我们先来看一下ROC的画法:为了比较分类模型的效果,人们相应地引入了ROC(receiver operatingcharacteristic)曲线。ROC曲线是一种比较两个分类模型的有用的可视工具。ROC曲线源于信号检测理论,是第二次世界大战期间为雷达图像分析开发的。ROC曲线显示了给定模型的真正率或灵敏度(正确识别的正元组的比例)
2014-01-02 08:59:28
1607
原创 如何打开微博的门禁
在实验室,一直处理爬虫程序,对于微博数据也是抓了又抓,微博的门禁如何开启,进入之后方能游刃有余,还是先把这个大门开启吧。先后,对方换了几把锁,越换越垃圾,还真说不定以后全开放啦。现在下面这段代码,仅仅适用于2013年11月至今(2013年12月),以后对方肯定还会换锁,不过大同小异,先来看看代码吧。import java.io.IOException;import java.io.Uns
2013-12-23 20:45:06
1069
原创 c++模糊问题系列1
问题1:数组的地址问题?#include#includeusing namespace std;int main(){ char a[5]; printf("%x\n",a); printf("%x\n",&a); printf("%x\n",&a[0]); printf("%x\n",a+1); printf("%x\n",&a+1);
2013-11-21 21:41:24
764
原创 网络中环的检测
在微策略和SAP的面试中,都被问及了网络中环路的问题,另外在自己的毕设中也涉及到了此问题。今天小结一下:网络中的环,一般可以用三种方法进行发现:1,拓扑排序:这种方法,比较简单需要存下每个结点的初度、入度;然后选择入度为0的结点进行删除,比较简单。2,BELLMAN-Ford算法:这种方法,适用于发现负回路,当然普通网络,我们通过赋权,可以实现转化。但是效率不高。代码:
2013-11-18 20:45:36
1301
原创 Hashmap与Trove4j
HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。 通常,默认加载因子 (0.75) 在时间和空间成本上寻求一种折
2013-11-03 16:15:57
3335
原创 hashmap
最近面试,经常有一些很二的面试官问一些hash函数的实习,以及冲突避免的情况:常见的hash函数:1. 直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a•key + b,其中a和b为常数(这种散列函数叫做自身函数)2. 数字分析法:分析一组数据,比如一组员工的出生年月日,这时我们发现出生年月日的前几位数字大体相同,这样的话
2013-10-22 22:00:48
650
原创 redis的底层架构
简历中写着熟悉redis,结果找工作中,人家就问redis的底层架构,源码:试着积累一下:1、redis的数据类型:redis是一种key-value的结构,key主要就是字符串,value则可以是字符串、列表、哈希表、集合或者有序表。2、关于redis的一点小结:数据库主要由 dict 和 expires 两个字典构成,其中 dict 保存键值对,而 expires
2013-10-22 18:43:03
1193
转载 c++构造函数
一、 构造函数是干什么的class Counter{public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类型 Counter() { m_value = 0; } private:
2013-10-21 16:51:44
455
原创 内存回收机制
垃圾收集技术的三大传统算法——引用计数算法(无法解决循环引用的问题)、标记-清除算法(效率问题)和复制算法(空间利用率减半)。现在的回收算法:标记-整理,增量收集算法(实际是对多线程的运用),分代收集(分类收集、在JVM中得到了应用)。具体讲解一下JVM的垃圾回收机制:Space(命名为S0和S1)具体分为这么几块,那么在每一块又是怎么进行内存分配及回收的那:1、年轻代
2013-10-15 15:51:44
655
原创 2014年IT求职难题积累
昨晚(10.9)参加了美团的笔试,第六题最难:题目描述:给一个浮点数序列,取最大乘积连续子串的值,例如 -2.5,4,0,3,0.5,8,-1,则取出的最大乘积连续子串为3,0.5,8。也就是说,上述数组中,3 0.5 8这3个数的乘积3*0.5*8=12是最大的,而且是连续的。鄙人用了暴力方法,注定被鄙视了。后来解决此题,依然用动态规划:max = max(a[i],ma
2013-10-10 20:12:45
522
原创 《深度探索C++对象模式》——中篇
C++内存布局:先看个小例子。class A{};class B:public virtual A{};class C:public virtual A{};class D:public B, public C{};int main(){ cout<<"sizeof(A)"<<sizeof(A)<<endl; cout<<"sizeof(B)"
2013-10-08 10:30:40
720
原创 《深度探索c++对象模型》——上篇
1,默认构造函数:C++继承机制,按照父类-->子类的流程构造对象,但是如若没有声明构造函数,c++会自动生成默认构造函数,不含形参。子类的默认构造函数,也是调用父类的默认构造函数。此时如若父类声明了含参的构造函数,调用就会出错。class Base{ public: Base() { cout<<"Base constructor"<<endl; }};
2013-10-07 20:06:13
834
原创 设计模式总结
设计模式的分类:关于设计模式,正如武侠里面的一招一式,出略来看,十分僵硬,但是要做到融汇贯通,做到无招胜有招,还需要持之以恒的coding,正所谓风清扬使玉女19剑,依然可以胜过一般的高手。
2013-10-07 15:23:40
521
原创 设计模式13:模板方法
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的步骤。UML图:模板方法和其他设计模式的联系:策略模式和模板方法都是封装算法,策略用的是组合,模板用的是继承;工厂方法是模板方法的一种特殊版本。
2013-10-07 15:04:17
655
原创 设计模式12:策略模式
策略模式:定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。UML图:与状态模式的区别:•使用策略模式时,客户端需要知道所选的具体策略是哪一个,而使用状态模式时,客户端无须关心具体状态,环境类的状态会根据用户的操作自动转换。•如果系统中某个类的对象存在多种状态,不同状态下行为有差异,而且这些状态之间可以发生转换时使用状态
2013-10-07 11:30:18
611
原创 设计模式11:状态模式
状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。在下面的两种情况下均可使用State模式:1) • 一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为。2) • 代码中包含大量与对象状态有关的条件语句:一个操作中含有庞大的多分支的条件(if else(或switch case)语句,且这些分支依赖于该对象的状态。这个状态通常用一
2013-10-07 10:30:09
571
原创 设计模式10:观察者模式
注:sap2014年校园招聘提供了此题。观察者模式:定义了对象之间的一对多的依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。UML图如下:实现了观察者和订阅者之间的松耦合。应用:Swing大量使用观察者模式,许多GUI框架也是如此,还有JavaBeans、RMI。
2013-10-07 09:53:04
561
原创 设计模式9:迭代器模式
迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。联想java实现的Iterator。迭代器常被应用到象复合(模式)这样的递归结构上。
2013-10-06 22:38:48
621
原创 设计模式8:命令模式
命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。关于设计模式的几点领悟:1)命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开。2)每一个命令都是一个操作:请求的一方发出请求,要求执行一个操作;接收的一方收到请求,并执行操作3)命令模式允许请求的一方和接收的一方独立开来,使得请
2013-10-06 22:07:24
630
原创 设计模式7:代理模式
联想远程代理,借助一中间过程,给出类似的访问接口,但是实际上,代理需要进行一步转发。和其他设计模式的联系:1)适配器模式Adapter:适配器Adapter 为它所适配的对象提供了一个不同的接口。相反,代理提供了与它的实体相同的接口。然而,用于访问保护的代理可能会拒绝执行实体会执行的操作,因此,它的接口实际上可能只是实体接口的一个子集。2) 装饰器模式Decorat
2013-10-06 21:37:58
535
原创 设计模式6:外观模式
外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。即,实现封装。例子1:一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。该电源总开关可以同时控制上述所有电器设备,电源总开关即为该系统的外观模式设计。外观模式,可以有多套外观,以适应不同的应用。外观模式和其他模式的
2013-10-06 09:27:04
693
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人