- 博客(195)
- 收藏
- 关注

原创 链接网房源信息redis分布式爬虫及数据可视化-武汉市
项目描述: 使用lxml+MongoDB+echart进行链家网房产信息数据的爬取、存储及可视化,分布式爬虫采用redis主-从结构,主机负责爬取一级URL并生成二级URL,从机负责二级URL数据爬取、存储及相关信息反馈给主机,主从通信采用redis的set实现。 反爬策略:从免费IP代理池中选择代理IP,不断换取User-Agent,并且控制随机访站时间。主机采用双线程,分别
2017-03-20 09:48:33
2312
原创 groupcache源码走读
->func (g *Group) Get(ctx Context, key string, dest Sink) ->value, cacheHit := g.lookupCache(key) ->value, ok = g.mainCache.get(key) ->vi, ok := c.lru.Get(key) ->"lru cache 是...
2019-10-12 23:09:23
293
原创 NSQ源码笔记
1.消息不可持久化(默认),默认情况下消息都在内存中。2.消息最少会被投递一次3.接收到的消息是无序的4.消费者最终找出所有话题的生产者"go-svc" ->兼容windows&&linux->opts := nsqd.NewOptions()->nsqd, err := nsqd.New(opts)->p.nsqd.LoadMetad...
2019-10-08 22:49:29
463
原创 Go通过select和channel结合实现异步IO
select是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。 select随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的。package mainimport "fmt"func main() { var c1, c2, c3 chan int ...
2018-06-13 13:58:05
4988
原创 Go语言多线程爬取图片并保存:sync.WaitGroup
//使用golang中sync.WaitGroup来实现协程同步 package main import ( "fmt" "net/http" "io/ioutil" "time" "os" "sync" ) var waitGroup = new(sync.WaitGroup)
2018-06-11 22:02:17
2003
原创 Logistic回归-小结
《机器学习实战》中关于Logistic回归,很多人想问:“此处略去了一个简单的数学推导”,这个数学推导我来讲解一下:梯度理论:f(x,y,z)在点(a,b,c)的梯度,注意说法,函数在某一点的梯度。我们先假设有两个样本[x0,x1,x2],[y0,y1,y2],它们对应的类别分别为[z0,z1]现在要求[w0,w1,w2],使得矩阵X*W=Z与Z0最为接近,下面是推导过程。...
2018-05-16 17:42:30
439
原创 朴素贝叶斯算法-小结
'''Created on Oct 19, 2010@author: Peter'''from numpy import *def loadDataSet(): postingList=[['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'], ['maybe', 'not', '...
2018-05-15 15:27:13
1288
原创 决策树-小结
1. k-近邻算法最大的缺点是无法给出数据的内在含义。2. 使用信息论划分数据集,必须评估每个特征3. 使用ID3算法划分数据集,该算法处理如何划分数据集,何时停止划分数据集4. 我们将对每个特征划分数据集的结果计算一次信息熵,然后判断按照哪个特征划分数据集是最好的划分方式。5. 使用python字典存储树的信息。6. 在python 中使用matplotlib注解绘制树形图。trees.py'...
2018-05-14 10:23:34
396
原创 k-近邻算法(kNN)小结
运用实例:1. 使用k-近邻算法改进约会网站的配对效果。2.手写数字识别系统的运用。(二维数据(m,n)特征转换为一维特征(1,m*n))3.使用k-近邻算法分类爱情片和动作片。'''Created on Sep 16, 2010kNN: k Nearest NeighborsInput: inX: vector to compar
2018-05-10 10:16:04
319
原创 Go并发
1.goroutinepackage mainimport( "fmt" "math" "sync")func sum(id int) { var x int64 for i := 0; i < math.MaxUint32; i++ { x+=int64(i) } fmt.Println(id,x)}fu
2017-11-21 16:58:38
414
原创 Go接口
1.接口定义接口是一个或多个方法签名的集合,任何类型的“方法集”中只要拥有与之对应的全部方法,就表示它 "实现"了该接口,无须在该类型上显式添加接口声明。所谓对应方法,是指有相同名称、参数列表 (不包括参数名)以及返回值。当然,该类型还可以有其他方法。• 接口命名习惯以 er 结尾,结构体。• 接口只有方法签名,没有实现。• 接口没有数据字段。• 可在接
2017-11-20 11:28:01
341
原创 Go学习笔记(五)
1.通常以 2 倍容量重新分配底层数组。在大批量添加数据时,建议一次性分配足够大的空间,以减少内存分配和数据复制开销。或初始化足够长的len 属性,改用索引号进行操作。及时释放不再使用的 slice 对象,避免持有过期数组,造成 GC 无法回收。s := make([]int, 0, 1)c := cap(s)for i := 0; i < 50; i++ {s =
2017-11-03 15:00:49
288
原创 Go学习笔记(四)
3.函数3.1函数定义3.2变参3.3返回值3.4匿名函数3.5延迟调用3.6错误处理1.函数是第一类对象,可作为参数传递。建议将复杂签名定义为函数类型,以便于阅读。package mainimport "fmt"func test(fn func() int) int { return fn()}type FormatFunc
2017-10-31 10:35:37
370
原创 Go学习笔记(三)
2.表达式1.保留字2.运算符3.初始化4.控制流if forrange switchgoto break continue1.初始化初始化复合对象,必须使用类型标签,且左大括号必须在类型尾部。 // var a struct { x int } = { 100 } // syntax error// var b []int = { 1
2017-10-31 10:04:45
780
原创 Go学习笔记(二)
1.多变量赋值时,先计算所有相关值,然后再从左到右依次赋值。ar s string // 全局变量没问题。func main() {i := 0 // Error: i declared and not used。 (可使⽤ "_ = i" 规避)}2.编译器会将未使用的局部变量当做错误。var s string // 全局变量没问题。func main() {i :=
2017-10-30 09:49:39
498
原创 C++实现MySQL数据库连接池
1.连接池的介绍:1.1应用背景:一般的应用程序都会访问到数据库,在程序访问数据库的时候,每一次数据访问请求都必须经过下面几个步骤:建立数据库连接,打开数据库,对数据库中的数据进行操作,关闭数据库连接。而建立数据库连接和打开数据库是一件很消耗资源并且费时的工作,如果在系统中很频繁的发生这种数据库连接,必然会影响到系统的性能,甚至会导致系统的崩溃。1.2技术思想:在系
2017-10-08 22:40:28
5459
2
原创 5种服务器网络编程模型
1.同步阻塞迭代模型同步阻塞迭代模型是最简单的一种IO模型。其核心代码如下:[cpp] view plain copybind(srvfd); listen(srvfd); for(;;){ clifd = accept(srvfd,...); //开始接受客户端来的连接 read(cl
2017-10-08 20:40:06
9353
原创 [leetcode] median of two sorted arrays[C++ vector版本]
There are two sorted arrays nums1 and nums2 of size m and n respectively.Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).Example 1:nums1 =
2017-10-06 20:47:40
358
转载 Mysql事物四种隔离级别
第1级别:Read Uncommitted(读取未提交内容)第2级别:Read Committed(读取提交内容)第3级别:Repeatable Read(可重读)第4级别:Serializable(可串行化) SQL标准定义了4种隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销
2017-10-05 13:01:47
365
原创 [leetcode] House Robber [i ii iii]
You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent house
2017-10-03 10:56:20
258
原创 Go搭建一个web服务器
如果你以前是php程序员,那么需要nginx,apache这些服务器;如果你以前是python程序员,可能需要tornadoGo不需要这些
2017-10-02 10:45:42
767
原创 Go并发设计
goroutine(极少的栈内存,比thread更易用、更高效、更轻便)runtime.Gosched()表示把CPU时间片让给别人,下次某个时候恢复执行该goroutine想要发挥多核处理器的并行,设置runtime.GOMAXPROCS(n)默认情况下,channel接受和发送数据都是阻塞的,除非另一端已经准备好,这样就使得goroutines同步变的更加的
2017-10-01 09:35:04
254
原创 Go学习笔记(一)
Go 语言用途Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。
2017-09-28 18:07:50
344
原创 理解RESTful API架构
REST,即Representational State Transfer的缩写,"表现层状态转化"RESTful架构:(1)每一个URI代表一种资源;(2)客户端和服务器之间,传递这种资源的某种表现层;(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因
2017-09-27 14:41:48
303
转载 【C++】 四种强制类型转换
总 结 去const属性用const_cast。 基本类型转换用static_cast。 多态类之间的类型转换用daynamic_cast。 不同类型的指针类型转换用reinterpreter_cast。static_cast任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast;
2017-09-22 09:45:46
1503
原创 C++构造函数与析构函数中的“异常”
从语法上来说,构造函数和析构函数都可以抛出异常。但从逻辑上和风险控制上,构造函数和析构函数中尽量不要抛出异常,万不得已,一定要注意防止资源泄露。在析构函数中抛出异常还要注意栈展开带来的程序崩溃。1.构造函数中抛出异常在C++构造函数中,既需要分配内存,又需要抛出异常时要特别注意防止内存泄露的情况发生。因为在构造函数中抛出异常,在概念上将被视为该对象没有被成功构造,因此当前对象的析构
2017-09-21 16:40:29
1697
原创 【effective C++】不要在构造函数或析构函数内调用虚函数
1.构造函数跟析构函数里面都可以调用虚函数,编译器不会报错!2.但是由于类的构造次序是由基类到派生类,所以在构造函数中调用虚函数,这个虚函数不会呈现出多态3.相反,类的析构是从派生类到基类,当调用继承层次中某一层次的类的析构函数时往往意味着其派生类部分已经析构掉,所以也不会呈现出多态。(因此如果在基类中声明的是纯虚函数并且在基类的析构函数中调用之编译器会报错)
2017-09-21 15:09:57
386
原创 shared_ptr的引用计数原理
引用计数原理指向相同资源的所有 shared_ptr 共享“引用计数管理区域”,并采用原子操作保证该区域中的引用计数值被互斥地访问。“引用计数管理区域”是指通过 new 创建的 sp_counted_impl_p 或 sp_counted_impl_pd 对象,在创建成功后立即由其基类指针指向它,而该基类指针被 shared_ptr 间接持有。类之间的关系为:
2017-09-19 11:13:57
10546
6
转载 线程池参数:基于Java ThreadPoolExecutor的重要参数
JDK1.5中引入了强大的concurrent包,其中最常用的莫过了线程池的实现ThreadPoolExecutor,它给我们带来了极大的方便,但同时,对于该线程池不恰当的设置也可能使其效率并不能达到预期的效果,甚至仅相当于或低于单线程的效率。ThreadPoolExecutor类可设置的参数主要有:corePoolSize在创建了线程池后,默认情况下,线程池中并没有任何线
2017-09-18 16:59:59
456
原创 亲自操刀:cache页面置换算法LRU AND LFU
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get andput.get(key) - Get the value (will always be positive) of the key if
2017-09-17 22:26:20
769
原创 单链表的归并排序:时间复杂度O(nlogn),空间复杂度O(1)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* so
2017-09-17 20:23:48
3222
原创 Makefile示例
相信在unix下编程的没有不知道makefile的,刚开始学习unix平台下的东西,了解了下makefile的制作,觉得有点东西可以记录下。 下面是一个极其简单的例子:现在我要编译一个Hello world,需要如下三个文件: 1. print.h #include void printhello(); 2. print.c
2017-09-16 16:35:14
252
转载 分布式锁服务关键技术和常见解决方案
| 导语 在单机环境下,由于使用环境简单和通信可靠,锁的可见性和原子性很容易可以保证,可以简单和可靠地实现锁功能。到了分布式的环境下,由于公共资源和使用方之间的分离,以及使用方和使用方之间的分离,相互之间的通信由线程间的内存通信变为网络通信。网络通信的时延和不可靠,加上分布式环境中各种故障的常态化发生,导致实现一个可靠的分布式锁服务需要考虑更多更复杂的问题。锁,核心
2017-08-01 10:09:30
4563
原创 SQL知识点总结
1.where与having的区别:WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。 HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。2.相同字段值显示一次,则使用SELECT DISTINCT可去除重复值3.方法一:使用NOT IN选出在employees但不在dept_manag
2017-07-30 17:55:29
313
原创 C++面试基础
1.const与define 相比,有何优点const作用:定义常量、修饰函数参数、修饰函数返回值三个作用。被Const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。 1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。 2) 有些集成化的调试工具
2017-07-28 10:12:07
446
原创 SNG mini项目总结
Mini项目总结一.项目介绍 一款懂你的陌生人社交APP二. 项目内容1.产品使用流程: 图一 产品使用流程2.前端框架: 图二 前端框架3.后端框架 图3 后端框架4.算法框架: 本项目算法框架由两部分构成,分别是用户标签过滤算法与情感分析算法,其中本项目主要完成用户标签过滤算法,情感分析算法由BosonNLP的API
2017-07-13 20:00:46
985
原创 良好的书写规范提高PHP代码执行效率
用单引号代替双引号来包含字符串,这样做会更快一些。因为 PHP 会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP 手册中说 echo 是语言结构,不是真正的函数,故把函数加上了双引号)。 1、如果能将类的方法定义成 static,就尽量定义成 static,它的速度会提升将近4倍。 2
2017-06-01 14:51:52
405
原创 SQL注入攻击:php篇
1.用注释欺骗MySQL注释号--导致SQL代码行的余下部分被忽略SQL注入所利用的漏洞是没有验证表单域中可能出现的危险字符。“危险字符”就是任何有可能改变一个SQL查询实质的字符,如逗号、引号或--注释字符,甚至一段数据最后的空格也可能是有害的。2.SQL注入可以通过适当的处理表单数据来避免。trim()函数去除这个表单数据的前导或末尾空格(去除额外空格)mysqli
2017-05-27 19:10:07
602
原创 php中POST和GET的微妙差别
1.POST请求只能从表单发出,而GET请求可以打包URL我们总是通过一个Web表单向脚本传递数据,在Web表单中可以指定脚本作为表单提交按钮的动作。当用户填写完表单并按下提交按钮时,表单数据会被打包,并作为一个POST请求发送到脚本。在PHP中,使用$_POST[]数组获取相应值。2. GET主要用于从服务器获取数据而不影响服务器上的任何其他方面。POST通常会向服务器发送数据,
2017-05-25 22:56:32
681
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人