- 博客(237)
- 资源 (10)
- 收藏
- 关注
原创 日志规范建设
一、日志1、日志的作用日志记录用户操作、系统运行状态,好的日志系统可以帮助研发和运维:掌握线上服务运行状态; 快速定位线上问题; 发现系统瓶颈; 服务报警; 挖掘数据价值; ……2、日志级别基本级别(由低到高):DEBUG:The DEBUG Level designates fine-grained informational events that are mo...
2019-12-10 16:19:12 651
原创 Golang对自定义类型排序
在实际项目中用到对结构按结构体中的某个字段进行排序,在网上查到一个比较好的办法,mark一下。首先golang的sort包提供了基本的排序,包括插入排序(insertionSort)、归并排序(symMerge)、堆排序(heapSort)和快速排序(quickSort)。其实现如下func Sort(data Interface) { // Switch to heapsort...
2018-09-04 10:28:48 5261 1
原创 Python服务端开发
之前的爬虫https://blog.csdn.net/column/details/17218.html几篇文章为Python实现客户端以Get/Post等方法请求服务。最近用Python写了一个服务,在此总结一下知识点:1、Python代码中执行shell命令;2、白名单设置---通过查看客户端ip是否在服务端的list中存在;3、日志分割---引入loggin类实现日志记录,引入TimedRo...
2018-05-03 20:25:57 10905
原创 Python之项目路径的引入
在Python中,通过安装anaconda就可以直接引用大部分工具包了,通过IDE也不用担心引用路径的问题。但如果是引入自定义的包、项目等,路径问题稍须转弯。 下图是我Demo的项目层次结构:Demo名称为---ImportPath;一级目录下有Main.py、OuterFunc.py和InFile文件夹;InFile文件夹下有InnerFunc.py; ...
2018-05-03 20:11:42 5579
原创 获取Python多线程的返回值
用python多线程时,遇到需要获取每个线程返回值的问题,经查资料学习总结如下:Python中使用线程有两种方式:用方法包装线程和用类包装线程方法一、用方法包装线程thread.start_new_thread ( function, args[, kwargs] )-function 表示线程需要执行的函数-args 表示传入的参数# coding:utf-8import thread, t...
2018-04-21 18:39:43 26278 3
原创 Go环境变量配置及系统配置文件的区别
趁周末总结一下对学习和使用go的环境变量的理解。一、Go环境变量 在学习和使用go的第一步便是下载安装并配置好环境,下载安装过程直接参见go官网指导,这里主要说一下对要配置的环境变量的理解。(1)GOROOT:表示go在电脑上的安装位置,如我go的安装位置在/usr/local/go,我在配置文件中对应配置GOROOT=/usr/local/go。(2)GOBIN
2018-01-13 13:36:25 5336
原创 Go---channel实现生产者消费者
一、无缓冲区 package main// 无缓冲的channelimport ( "fmt" "time")func produce(ch chan<- int) { for i := 0; i < 10; i++ { ch <- i fmt.Println("Send:", i) }}func consumer(ch <-c...
2017-12-28 21:26:11 9139 5
原创 Redis事务
事务同命令一样,都是Redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。一、Redis事务的实现 Redis通过multi、exec、watch等命令来实现事务功能,Redis中一个事务从开始到结束包含三个阶段:事务开始、命令入队、事务执行。其中multi命令标志着事务开始,exec命令标志着事务执行,期间所有命令都会存放到事务队列中。在redis.h/r
2017-11-29 18:41:19 898
原创 Redis发布与订阅功能
发布/订阅”功能包含两种角色:发布者和订阅者。Redis的发布与订阅功能由publish、subscribe、psubscribe等命令组成。通过执行publish命令可以发布消息;通过执行subscribe命令,客户端可以订阅一个或多个频道;通过执行psubscribe命令,客户端可以订阅一个或多个模式。一、发布与订阅频道 如图所示,频道的发布与订阅功能。客户端A、B、C都
2017-11-29 18:11:10 2184
原创 Redis的集群结构
Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)进行数据共享,并提供复制和故障转移功能。一、节点 同其他分布式的集群一样,Redis集群也是由多个相互独立的节点组成的,通过将各个相互独立的节点连接起来,构成一个包含多个节点的集群。通过CLUSTER MEET 命令,将指定节点添加当前节点所在的集群:
2017-11-29 16:49:59 722
原创 Redis的监控功能
Redis通过引入一个或多个Sentinel实例组成的Sentinel系统以监视任意多个服务器,当主服务器进入下线状态时自动将从服务器升级为新的主服务器,然后由新服务器代替已下线的主服务器处理命令请求,达到提供高可用性的解决方案。一、监控功能 Sentinel本质上是一个运行在特殊模式下的Redis服务器,所以初始化时不会载入RDB文件或者AOF文件,而是创建连向被监视主服务
2017-11-29 16:10:59 1075
原创 Redis的复制功能
Redis中,通过slaveof命令或者设置slaveof选项,让一个服务器去复制另一个服务器,从而形成主从服务器关系,具有主从关系的服务器数据库状态一致。Redis的复制功能分两个步骤实现:同步(sync)和命令传播(command propagate)。同步操作是将从服务器数据库状态更新至主服务器数据库当前所处状态;命令传播则用于主服务器的数据库状态被修改导致主从服务器的数据库状态
2017-11-29 11:54:31 560
原创 Redis中的事件
Redis服务器是一个事件驱动程序,服务器需要处理两类事件:文件事件和时间事件。一、文件事件 Redis服务器通过套接字与客户端进行连接,文件事件就是服务器对套接字操作的抽象。 文件事件是由文件事件处理器处理的。文件事件处理器以单线程方式运行,使用I/O多路复用程序监听多个套接字(既实现了高性能的网络通信模型又可以很好地与Redis服务器中其他单线程方式运行
2017-11-28 16:30:11 840
原创 Redis数据持久化
由于Redis是内存数据库,一旦服务器进程退出,服务器中的数据库状态也会消失。为解决这个问题,Redis提供了RDB快照形式、AOF日志形式两种持久化方式,将内存中的数据保存到磁盘中,以免数据意外丢失。一、RDB持久化 RDB持久化就是将服务器某个时间点上的数据库状态以快照形式保存到一个二进制文件中,在Redis服务器重新启动时可以自动载入RDB文件,还原数据库状态。有两个R
2017-11-28 15:20:02 1012
原创 Redis键的生存时间和过期时间
Redis作为内存数据库,和memcached一样提供了设置键的生存时间和过期时间的功能。通过expire命令或者pexpire命令实现秒级或者毫秒级的生存时间的设置功能:EXPIRE : 将键的生存时间设为 ttl 秒PEXPIRE :将键的生存时间设为 ttl 毫秒EXPIREAT :将键的过期时间设为 timestamp 所指定的秒数时间戳PEXPIREAT : 将
2017-11-28 11:25:46 17683 2
原创 Redis数据库
在上一节介绍了Redis的对象系统:String、List、Hash、Set、ZSet,这些对象是如何组成Redis数据库与用户所见的数据库映射的呢?一、 Redis服务器 在redis.h/redisServer结构中有关系数据库的两个属性:redisDb和dbnum,每个redisDb结构就代表着一个数据库,dbnum则表示Redis服务器创建的数据库个数(默认为16个)
2017-11-28 10:51:23 1110
原创 Redis对象系统
在上一节学习Redis中的六种基础数据结构,但在Redis中并没有直接使用以上的数据结构实现键值对数据库,而是基于这些数据结构构建了一个对象系统:字符串对象(String)、列表对象(List)、哈希对象(Hash)、集合对象(Set)和有序集合对象(ZSet)。在Redis中每个对象都由一个redisObject结构表示:/* * Redis 对象 */typedef struct r
2017-11-27 18:28:36 847
原创 Redis的六种数据结构
本节将对Redis底层的六种数据结构展开详述:简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表。一、简单动态字符串(SDS) Redis基于C语言开发但并没有直接使用C语言传统的字符串,而是构建一种叫简单动态字符串(simple dynamic string,SDS)的抽象类型作为Redis默认的字符串表示。SDS不仅用来保存数据库中的字符串值,同时还用于实现缓冲区(b
2017-11-27 15:38:37 6558 1
原创 Kafka中的消息是否会丢失和重复消费
在之前的基础上,基本搞清楚了Kafka的机制及如何运用。这里思考一下:Kafka中的消息会不会丢失或重复消费呢?为什么呢? 要确定Kafka的消息是否丢失或重复,从两个方面分析入手:消息发送和消息消费 1、消息发送 Kafka消息发送有两种方式:同步(sync)和异步(async),默认是同步方式,可通过producer.type属性进行配置
2017-11-21 16:10:26 30366 3
原创 Kafka的高级消费者与低级消费者
在Kafka实战章节,我们写的例子都是Kafka的高级消费实例,可以看到在消息消费者的程序中,我们只需要指定zookeeper、及消费群组的groupId即可实现从消息队列中消费消息,屏蔽了大量的底层细节:如消息的偏移量等信息都不在程序中维护。Kafka的高级消费实例,满足以下几点规则:(1)同一个消费群组中,如果线程数大于Topic分区数,那么一些线程永远接收不到消息;(2)同一个消
2017-11-20 12:08:03 6898
原创 Kafka实战
从搭建Windows下的Kafka运行环境和搭建Linux下的Kafka运行环境可以看出,环境一旦搭建完成,执行以下逻辑程序是固定的顺序,与环境无关:启动Zookeeper启动Kafka创建Topic启动生产者Producer发消息启动消费者Consumer消费消息 因此,这里以Windows下的运行环境为例(windows环境搭建可以参见笔者之前的...
2017-11-03 11:51:27 1409 3
原创 Linux下搭建Kafka运行环境
在前面的章节讲述了Windows下Kafka的运行,以及Kafka知识点总结一、知识点总结二。这里通过搭建服务器,实践编程的角度,进一步理解Kafka原理。一、安装配置JDK 参见http://www.cnblogs.com/a2211009/p/4265225.html,笔者以第一种方式安装,便于后面通过 apt-get upgrade 方式方便获得jdk的升级//添加
2017-11-02 17:57:32 2511 1
原创 Kafka知识点总结二
上一节从各概念入手总结了Kafka的知识,这里从系统结构展开,进一步总结Kafka的知识点。 Kafka以集群的方式部署,集群由多个服务器(Broker)组成,每个Broker的Kafka由哪些层组成呢?答案是:SocketServer(Socket服务层)、KafkaRequestHandlerPool(请求转发层)、Kafka api(业务逻辑层)、Control(集群状态控
2017-10-23 15:28:51 900
原创 Kafka知识点总结一
之前学习过kafka,但在项目中用的时候,发现还有一些点特别需要注意,这里全部总结一下:1、Kafka是一个【消息订阅-发布系统】 由消息生产者(Producer)和消息消费者(Consumer)组成,Producer将消息推送(Push)到Kafka集群,Consumer从Kafka集群中将消息拉取(Pull)下来。客户端和服务端通过TCP协议进行通信。...
2017-10-18 10:15:34 1877 1
原创 Python3爬虫之六网页的初步分析【抓取豆瓣最新电影影评并用词云显示】
在做本章内容之前,先做两件事:1、安装结巴分词jieba;2、安装云词库wordcloud一、安装结巴分词1、上Git上下载Jieba源码:https://github.com/xingzhexiaozhu/jieba2、进入对应的文件目录,执行 python setup.py install安装完成二、安装云词库1、进入http://www.lfd.uci
2017-09-21 13:36:31 2632
原创 Python3爬虫之五网页下载器的几种方法【Python使用cookie模拟登录CSDN】
(1)直接请求from urllib import request# 目标网址url = "http://www.zhihu.com"# 直接请求response = request.urlopen(url)# 获取请求的状态码,200表示成功# 读取内容if(response.getcode() == 200): print(response.read())(
2017-09-05 11:26:34 2325 1
原创 Python3爬虫之四简单爬虫架构【爬取百度百科python词条网页】
前面介绍了Python写简单的爬虫程序,这里参考慕课网Python开发简单爬虫总结一下爬虫的架构。让我们的爬虫程序模块划分更加明确,代码具有更佳的逻辑性、可读性。因此,我们可以将整个爬虫程序总结为以下5个模块: 1、爬虫调度端:负责启动、停止、监控爬虫程序的运行; 2、URL管理器:负责爬虫执行过程中待爬取的URL队列和已爬取的URL队列的管理【防重复、
2017-09-04 19:53:48 2433 1
原创 Python3爬虫之三网页解析【爬取豆瓣Top电影】
这里再练习一下对豆瓣Top250电影的爬取,其首页长这样 我们需要的信息是电影的序号、电影的名字,因此直接按上一节的方法查看网页代码,解析网页结构,提取我们所需要的信息,完成代码如下:# coding = utf-8import refrom urllib import requestfrom urllib import errorclass DouBan
2017-08-31 13:46:53 5703 1
原创 Python3爬虫之二网页解析【爬取自己CSDN博客信息】
与Java类比,Java的网页解析有Jsoup工具,Python的网页解析工具对应的是BeautifulSoup。详情可以阅读其官方文档。 这里以爬取我的CSDN博客信息,包括获取每篇博客的标题、链接、书写日期、访问量、评论数量等信息为例,结合BeautifulSoup,进行网页的解析,详细的说明在代码的注解中讲解。# coding=utf-8# 对CSDN博客信息进行爬
2017-08-31 13:18:22 6667 1
原创 Python3爬虫之一初试
前面系列学习了Java的爬虫,相比而言,楼主更倾向于Python简洁易懂。与Java类似,都要封装请求,Python2系列使用的是urllib2,Python3后全部融合为urllib。 下面以请求知乎首页的例子,说明Python的简单使用。# coding = utf-8from urllib import request# 目标网址url = "http://w
2017-08-31 13:02:10 880
原创 Java爬虫系列之四模拟登录【模拟登录人人网】
通过前面的学习,我们已经可以对不需要登录的网页正常访问,但现在的网页大部分都需要用户注册,因此这里以学人人网为例,学习一下网站的模拟登录。 首先对http://www.renren.com/进行爬取,对得到的内容进行分析:package RenRen;import org.apache.http.client.methods.CloseableHttpRespon
2017-08-29 11:35:28 8628 4
原创 Java爬虫系列之三模拟浏览器【模块浏览OSChina网站】
第一节的学习使得我们学会使用HttpClient请求网页的基本方法;第二节进一步学习了Jsoup从网页中解析出所需要的内容。但在请求时,我们仍可能遇到目标网址没有错,但就是请求得不到响应的情况,比如OSChina、CSDN等网址,因此这里必须伪装成浏览器才可以进行正常的访问。 模拟浏览器在代码的实现层,就是给请求加上Header,那么如何看应该封装的Header内容呢?运用浏览器
2017-08-29 11:01:43 4927
原创 Java爬虫系列之二网页解析【爬取知乎首页信息】
上一节以一个小Demo开始了Java的爬虫之旅,熟悉了HttpClient请求资源得到返回结果,得到初步处理的结果。但对于得到的网页是怎么解析的呢?这里讨论一下Jsoup的使用。 Jsoup是一款Java的HTML解析器,提供了一套非常省力的API,可以方便的从一个URL、文件、或字符串中解析出HTML,然后使用DOM或者Select选择出页面元素、取出数据。如下:Strin
2017-08-23 18:08:18 3377 2
原创 日志记录方法---SLF4J和Log4j
SLF4J(Simple Logging Facade For Java),没有实现具体的日志解决方法,只是一个抽象块层,使代码可以独立于任意特定的日志API。 Log4j(Log For Java),是Apache一个开源项目,可以灵活记录日志信息,通过Log4j的配置文件更改日志记录格式、级别等信息。 不论是在写程序还是线上的系统,及时打印出代码运行阶段的日
2017-08-22 15:21:57 890
原创 Java爬虫系列之一HttpClient【爬取京东Python书籍信息】
一、概念 HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。 HttpClient实现了所有HTTP的方法(GET/POST/PUT/HEAD等),支持自动转向、HTTPS以及代理服务器能。二、HttpCli
2017-08-21 20:13:34 3238 1
原创 Java注解及通过自定义Java注解实现数据库的操作
在Java程序中通过注解,可以让编程更加简洁、代码更加清晰。因此在Java框架代码中,嵌入了大量的注解。 讲注解,首先得讲注解的概念:Java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法。一、注解的分类1、按照运行机制分为源码注解、编译注解和运行时注解(1)源码注解:注解只在源码中存在,编译成.class文件就不存在了(2)编译注解:注解在源码和.
2017-08-21 15:51:31 7392
原创 Spring boot之单元测试
在写工程代码的时候,经常需要调试自己的方法、接口是否有问题,能否正常调用,尤其多人合作开发项目时,工同程的融合,每个接口的问题都将导致工程不能正常运行。 对于Spring boot程序,框架对测试提供了很好的支持,这里简单总结一下测试方法。这里的单元测试主要包括Service的测试和API的测试(即Controller的测试)。一、Service的测试 Ser
2017-08-18 19:56:51 2813
原创 Spring boot之代码规范书写
在实际工程中的代码应该尽量保证良好的代码风格,这里以前面的例子为例:向数据库中插入学生信息时,如果学号满足要求,插入成功,则返回该记录具体信息字段;如果插入失败,则返回错误及错误提示信息。第一步:首先建立一个消息返回内容类Result.java第二步:读题目意思,得知对消息的返回应该有一个统一的格式,因此创建ResultUtil.java类,封装消息返回的格式第三步:在
2017-08-18 17:17:00 6707
原创 Spring boot之AOP面向切面编程
AOP(Aspect Oriented Programing):面向切面编程,将通用的逻辑从业务逻辑中分离出来。这里以获取HTTP请求中的字段为例进行解读:1、在pom.xml中引用spring-boot-starter-aop依赖2、创建HttpAspect.java类,加上@Aspect注解@Pointut注解表示切入的点,这里是请求的路径@Before注解表示当前
2017-08-18 16:25:34 20837 2
原创 Redis入门
一、概念 Redis是一个开源的、支持网络的、可基于内存的、可持久化的日志型、Key-Value数据库,提供了多种语言的API。Redis支持的数据类型有五种:string(字符串)、list(列表)、set(集合)、sorted set(有序集合)、hash(散列)。二、Redis特点 1、Redis本质上是一个Key-Value类型的内存数据库(Key-
2017-08-17 20:18:06 664
中国计算机学会推荐国际刊物会议列表(数据库数据挖掘与内容检索)
2016-06-20
GroupLens_MovieLens数据集
2016-01-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人