- 博客(25)
- 资源 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 17、go语言:分布式爬虫
1、分布式系统简介:多个节点:容错性可扩展性(性能)固有分布性消息传递:节点具有私有存储易于开发可扩展性(功能)对比:并行计算完成特定的需求:消息传递的方法:REST(动作、URL)RPC(序列化传输、远端序列化后调用)中间件(可以存储消息、一对多、消息队列)一般消息传递的方法:对外:REST模块内部:RPC模块之间:中间件,REST分布式架构VS为微服务架构...
2019-12-21 21:58:19
541
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 分治法求解-最长公共前缀
注意审题:只是求解最长公共前缀,而不是字符串数组中的最长公共字符串1、分治法的定义:当求解的问题较复杂,不能立刻得到原问题的解,不过这一类问题可以分解为若干个与原问题性质相类似的子问题,而子问题可以方便得到它们的解,最后通过合并子问题的解得到原问题的解。2、分治法适用的条件(1)、原问题可以分解为若干个与原问题性质相类似的子问题;(2)、问题的规模缩小到一定程度后可方便求解;(3)、子...
2019-02-27 10:03:06
531
原创 7、openresty:nginx配置文件说明
#以哪个用户,运行nginx应用#nobody是个低权限用户,为了安全#user nobody;#nginx进程数 启动进程,通常设置成 cpu的核数查看cpu核数# cat /proc/cpuinfoworker_processes 1;#全局错误日志#nginx的error_log类型如下(从左到右:debug最详细 crit最少):#[ debug | info | n...
2020-02-03 17:26:30
590
原创 6、openresty:nginx平滑升级
把服务器从低版本升级为高版本,强行停止服务器,会影响正在运行的进程。平滑升级不会停掉正在进行中的进程,这些进程会继续处理请求。但不会再接受新请求,这些老的进程在处理完请求之后 会停止。此平滑升级过程中,新开的进程会被处理。一、平滑升级进入nginx可执行程序的目录# cd /usr/local/nginx/sbin/# ./nginx -V #查看nginx版本1、下载高版本ng...
2019-12-26 21:51:05
967
原创 5、openresty:nginx命令、信号控制
一、nginx命令1、nginx启动指令:nginx程序 -c nginx配置文件# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf2、nginx重启#cd /usr/local/nginx/sbin##重启# ./nginx -s reload 进入nginx可执行程序的目录# cd...
2019-12-26 21:40:35
444
原创 3、openresty:nginx下载安装
1、Nginx下载:nginx-1.13.0.tar.gz,下载到:/opt/softwares/$ wget http://nginx.org/download/nginx-1.13.0.tar.gz2、Nginx解压安装:$ tar -zxvf nginx-1.13.0.tar.gz -C ./3、预先安装$ yum -y install gcc gcc-c++ ncurses-...
2019-12-24 09:59:39
157
原创 16、go语言:数据存储和展示
1、ItemSaver的架构:抽象出Task的概念FetchTask,PersistTask共用一个Engine,Scheduler需要创建FetchWorker,PersistWorker本项目中显得过重为每个Item创建goroutine,提交给ItemServerpackage enginetype ConcurrentEngine struct { Scheduler Sc...
2019-12-19 22:07:23
418
原创 15、go语言:并发版爬虫
1、并发版爬虫架构://单任务版架构,耗时最多的是fetcherfetcher的输出其实就是Parser的输入,可以把两者放一个模块//送很多种子func Run(seeds ...Request){ var requests []Request for _,r := range seeds { requests := append(requests,r) } for l...
2019-12-19 21:42:48
219
原创 14、go语言:单任务版爬虫
1、获得初始页面内容:获取并打印所有城市第一页用户的详细信息func main(){ resp,err := http.Get("http://www.zhenai.com/zhenghun") if err != nil { panic(err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOk {...
2019-12-12 10:15:17
151
原创 13、go语言:开始项目实战
1、爬虫项目介绍:网络爬虫分类:通用爬虫,如baidu,google聚焦爬虫,从互联网获取结构化数据go语言的爬虫库/框架:henrylee2cn/pholcusgocrawlcollyhu17889/go_spider将不使用现成的爬虫库/框架使用ElasticSearch作为数据存储使用go语言标准模板库实现http数据展示部分2、总体算法:登录后可见的需要设置coo...
2019-12-12 09:54:55
574
原创 12、go语言:迷宫的广度优先搜索
1、迷宫算法:为爬虫实战项目做准备应用广泛,综合性强面试常见11011上作下右深度优先找不了最短路径广度优先倒过来走,就可以找到最优路径2、迷宫代码实现:6 50 1 0 0 00 0 0 1 00 1 0 1 01 1 1 0 00 1 0 0 10 1 0 0 0func readMaze(filename string) [][]int{ file,e...
2019-12-11 10:04:35
89
原创 11、go语言:http及其他标准库
1、http标准库:使用http客户端发送请求使用http.Client控制请求头部等使用httputil简化工作func main(){ request,err := http.NewRequest( http.MethodGet, "http://jessiejacob.com",nil) //加头部 request.Header.Add("User-Agent","Mo...
2019-10-09 19:21:21
150
原创 10、go语言:Channel
1、channel:goroutine和goroutine的双向通道就是channelfunc chanDemo(){ //var c chan int //c==nil,用var定义的chan,等于nil的channel用不了 c := make(chan int) //通常使用make来创建channel,可以直接使用 c <- 1 //会死锁,发了数据没人收 c <-...
2019-10-09 19:10:47
271
原创 9、go语言:Goroutine
1、goroutine:func main(){ for i:=0 ; i<1000;i++{ go func(i int){ //并发地执行 for { fmt.Printf("Hello from goroutine %d\n",i) } }(i) } time.Sleep(time.Millisecond) //main还没来得及打印就结...
2019-10-09 18:34:56
143
原创 8、go语言:测试与性能调优
1、测试:程序应该多做测试,少做调试传统测试 VS 表格驱动测试(go语言使用)//传统测试@Test public void testAdd(){ assertEquals(3,add(1,2));}测试数据和测试逻辑混合在一起出错信息不明确一旦一个数据出错测试全部结束//表格驱动测试test := []struct{ a,b,c int32}{ {1,2,3},...
2019-09-26 09:58:15
166
原创 7、go语言:错误处理和资源管理
1、defer调用:go语言通过defer调用来实现资源管理,defer先进后出的顺序确保调用在函数结束时发生func tryDefer(){ defer fmt.Println(1) defer fmt.Println(2) fmt.Println(3) panic("error occurred") fmt.Println(4)}//输出321panic: err...
2019-09-25 10:11:31
172
原创 6、go语言:函数式编程
1、函数式编程函数和闭包,go语言对函数式编程主要体现在闭包的能力//累加器函数func adder () func (value int) int { sum := 0 return func(value int) int { sum += value return sum } //返回的是闭包}func main(){ adder := adder() for i...
2019-09-25 09:46:28
142
原创 5、go语言:面向接口
1、duck typing的概念:type Traversal interface{ Traverse()}func main(){ traversal := getTraversal() traversal.Traverse()}duck typing原话:“像鸭子走路,像鸭子叫(长得像鸭子),那么就是鸭子”描述事物的外部行为而非内部结构严格说go属于结构化类型系统,类似...
2019-09-24 09:58:13
98
原创 4、go语言:面向对象
1、结构和方法:type treeNode struct{ value int left,right *treeNode}func (root *treeNode) traverse(){ if root == nil { return } root.left.traverse() fmt.Print(root.Value) root.right.traverse()...
2019-09-16 20:36:16
122
原创 3、go语言:内建容器
1、数组://创建一个mapcache := make(map[string] string)cache["name"] = "jacob"//定义数组:var arr1 [5]intarr2 := [3]int{1,3,5}arr3 := [...]int{2,4,6,8,10} //...就是让编译器来帮我们数有几个intvar grid [4][5]int //4行5列/...
2019-09-10 10:04:17
118
原创 十大经典排序算法-冒泡排序
冒泡排序-算法求解步骤目的,将大的元素放到数组最尾部,相当于将数组正序排序。示例:[8,3,7,4] 排序后 [3,4,7,8]比较相邻的元素。如果第一个比第二个元素大,则交换他们两个。对每一组相邻元素做同样的工作,从开始第一对,到结尾的最后一对,一轮比较之后,最后的元素就是本轮最大的数。针对所有元素重复以上步骤1和步骤2,直到没有任何一对数字需要比较。动画演示可以参考:http...
2019-07-22 23:28:22
125
原创 2、go语言:基础语法
1、定义变量:func params(){ var a string //变量名 变量形式 var s string fmt.Printf("%d %q\n",a,s) //%q可以将空字符串输出 var a,b int =3,4 //规定类型 var a,b,c,s = 3,4,true,"abc" //不规定类型 a,b,c,s := 3,4,true,"abc" ...
2019-07-22 23:27:30
139
原创 基础数学法求解链表两数相加
1、题目定义给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 ->...
2019-03-01 10:20:02
141
原创 vim学习笔记
Vim刚启动的时候进入的是命令模式,常用的几个命令有: i 切换到输入模式,以输入字符x 删除当前光标所在处的字符: 切换到底线命令模式,以在最底一行输入命令。输入模式:命令模式按下i进入输入模式字符按键以及Shirt组合 输入字符ENTER回车键 换行BACKSPACE退格键 删除光...
2019-02-28 22:18:42
118
原创 Markdown基本用法
PHP与算法基础算法二分查找功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入基础算法本篇博客注意记录了博主自己学习的...
2019-02-20 13:03:45
324
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人