- 博客(42)
- 收藏
- 关注
原创 从零构建爬虫系统(二)——面向中小企业的爬虫解决方案
前言从2020年五月开始,我开始主导我们公司的网络采集系统,由于从二月到四月一直在做数据质量风控相关的项目,采集这个项目便一直在搁置中。
2020-07-26 16:21:44 727
原创 程序员的学习工具?四个就够了!
前言我们作为程序员每天其实都在处于一个学习的状态,比如工作时调研一个新工具是在学习,解决一个bug的过程是在学习,看了一个很不错的公众号也是在学习。但是我认为学习本身也需要一个技巧,比如说从侧重点,时间进度方面,比如学习过程,比如学习过程的挖掘,比如最后的总结。...
2020-10-26 15:05:27 403 2
原创 尚硅谷Springs5框架-IOC相关知识提纲
IOC(概念与原理)什么是IOC?控制反转,把对象创建与对象调用之间的调用过程,交给Spring进行管理。2.1、使用IOC的目的:降低耦合。2.3、做入门案例就是IOC的实现。2、IOC底层原理2.1、xml解析。2.2、工厂模式。2.3、反射IOC(BeanFacory接口)1、IOC思想基于IOC容器完成,IOC容器底层就是对象工厂。2、Spring提供IOC容器实现两种方式:(两个接口)2.1、BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提
2020-10-23 10:50:33 240
原创 Cspiration Edward老师讲如何刷LeetCode题
前言今天早上看了关于youtube上Cspiration Edward关于如何快速刷题的攻略,时长比较长,大概一个小时,但内容是干货满满的,这篇文章主要总结下这个视频中的几个关键点。快速刷题Edward主要说了下如果自己刷题应该注意的要点。自己刷题主要分为三遍:第一遍第一次刷题注重基础。 按照类型刷题。按照分类顺序表刷前400道。 第一遍直接看答案。比如sliding window,treemap。第一遍初学者的学习状态应该是下面这样的:不要创造数据结构、算法,而是要使用.
2020-10-16 10:13:25 998 2
原创 分享下大数据工程师学习Spring过程中可能需要的资料
前言对于一个公司的大数据部门来说,为外部提供接口查询服务,开发一些简单的数据产品是必不可少的。而开发接口查询服务、数据产品肯定绕不过Spring技术栈。本文主要讨论下,作为一个大数据平台开发工程师在学习Spring技术栈的过程中可能需要的资料。学习重点是Model层我之前在数据采集、图数据库、金融风控等项目中都或多或少的使用过Spring Boot开发过接口。对于大数据背景的工程师,我认为学习SpringBoot的重点应该放在Spring Data、MyBatis这一model层上。
2020-10-14 12:04:53 579
原创 LeetCode刷题思路:Cspiration+花花酱
目前知乎上主要推荐的刷题up主有两个:1、Cspiration的Edward,优点是品质高、循序渐进,但是他的课程是收费的,主要面向突击找工作人群,有效期2个月,适合突击学习。https://cspiration.com/leetcodeClassification2、花花酱的youtube视频,优点是免费的课程,但没有章法。https://www.youtube.com/c/HuaHuaLeetCode/playlists,3、BackToBack SWE的youtube。https://ww
2020-10-13 09:01:47 1987
原创 基于Gitlab Issues为导向的分支管理
前言Gitlab的开发分支流程规范对于日常开发十分重要,本文主要介绍下基于Issues为导向的中小型数据项目开发规范。以Issues为导向的GIt开发规范对于数据类项目,代码大多是Sql、Shell、Python脚本。各个模块、代码源文件关系不大,不会产生功能类错误,影响系统稳定性。因此可以采用以issue为导向的分支管理方法,来管控开发流程。大致流程如下:1、开发人员根据需求提交Issue开发人员A在Gitlab中首先提交一个Issue。填好Issue中的标题、描述:代..
2020-08-07 13:59:37 5124
原创 CDH 6.3.x/6.2.x 环境下Apache Atlas 2.0.0的编译与安装部署(Not-embedded)
前言按照官方文档[1]的说法,Atlas的编译与安装主要有Not-embedded、embedded两种方式。Not-embedded是指Atlas使用的JanusGraph的Hbase与Solr需要单独部署,embedded指Atlas的在编译过程中会自动下载JanusGraph的Hbase与Solr。当然JanusGraph的图数据存储也可以放在BerkeleyDB、Cassandra中、索引数据也存放在Elasticsearch中。本系列博文默认图数据存储在Hbase,索引数据放在Solr中。
2020-08-07 10:17:57 1138 5
原创 使用Apache Atlas 2.0.0快速定位数据仓库中的脏数据问题
以阿里增量数据项目为例,目前有一张DW层表biz_dw.dwb_acloud_pzx_rmb_diff,里面的其中一个字段有脏数据,我们需要快速定位这个字段可能来自于哪张表。通过Atlas UI界面,选择“hive_table”类型,在查询框中搜索“dwb_acloud_pzx_rmb_diff”,点击查询结果中的“Lineage”,得到以下查询结果:上图中红色圈中的“dwb_acloud_pzx_rmb_diff”,为我们的查询目标,可以看出这张表主要来自于dwb_acloud_pzx_.
2020-08-07 10:07:59 641 2
原创 使用Apache Atlas 2.0.0解决数据溯源问题(CDH 6.2/CDH 6.3环境)
Atlas是什么?Atlas是由Hadoop发行商HortonWorks公司2015贡献给Apache基金组织的一款面向Hadoop生态圈的数据溯源工具。主要用于监控Apache Hive、Apache Hbase、Apache Kafka、Apache Storm的元数据变更,并会自动生成数据流动图,通过UI的Web界面展示给用户。Atlas的数据溯源效果如下:什么是数据溯源?数据溯源(Data province)的概念在20实际90年代就有提出[1],是数据治理范畴的一部分,主.
2020-08-07 10:03:35 2364 1
原创 风控系统(三)——使用flink开发风控系统(下)
前言上期的文章中,我们主要讨论了使用flink解决数据源对比的问题。从kafka接受企业当期的报文数据,与mysql数据库中的上期数据进行对比,捕捉差异进行预警。这最近的工作中我们准备将要处理的数据量从一个set扩展到12个set,这期间遇到了如下三个问题:每个set中的区域包括多个区域的报文类型。 技术提出要求,当上游程序扩展set时候,我们的程序尽量最小化工作量。 业务逻辑发生...
2020-07-26 16:24:24 1549
原创 风控系统(二)——使用flink开发风控系统(上)
前言在上一节我们使用了陌陌的开源框架来处理json中的单值校验,在这一篇文章里我们主要分享通过flink sql的核心api来处理更为复杂的风控场景。业务场景这一部分业务场景主要是校验当期的企业需要报税的科目,相比于企业往期报税科目是否有增加或减少,以此来防止漏报税务。当期的企业报税科目通过mq传送过来,以json的格式作为序列化方式,包含任务id,科目名称。往期的企业报税科目...
2020-07-26 16:24:19 4225
原创 风控系统(一)——针对陌陌框架的定制化开发
前言我们的项目是基于报税业务进行风险控制,检测出报错税的情况。对于比较复杂的风险情况,比如两个json进行比较这种情况,可能涉及到时间窗口、流程化的部分,我们采用flink cep进行处理。对于较为简单的风险情况,比如判断json的某一个数据项是否为空,数值类型是否在一个范围之内,这一部分的业务,我们将借鉴陌陌的风控框架进行定制化开发。需求分析通过陌陌的介绍,我们可以看出它的产品定...
2020-07-26 16:24:15 2460
原创 从0构建爬虫系统(一 )——需求调研与技术调研
-------------------------------------更新:2020年1月13日从这几天开始我负责搭建企业级的爬虫系统,以下是领导的需求要点:1、尽量做到减少爬虫开发量,最好使用可视化的方式进行配置,自动生成爬虫代码。2、做到目标网站每天30万左右请求的采集目标。针对第一点目前国内做的比较好的是八爪鱼采集系统,采用C/S的软件架构进行采集,另外就是国外厂商Scr...
2020-07-26 16:24:08 488
原创 风控系统(四)——上线后记
上线后记在调研了陌陌框架、flink框架之后,我们最终使用了flink进行了风控开发。但是再与业务人员核对数据的过程中,我们发现我们作出的风控功能是与其他团队有重合的。再从需求说起我们的需求是由其他同事向业务人员了解后整理完成的。风控模型也是其他同事设计完直接写好文档给我们看的,我们基于文档直接找到了相对应的业务人员了解了基本的逻辑后,就开始了开发过程。整个过程当中我们没有对需求进...
2020-07-26 16:23:21 570
原创 画图神器visual-paradigm
最近写文档发现一个在linux和windows上都可以用的工具:visual-paradigmhttps://online.visual-paradigm.com/drive/#diagramlist:proj=0&new以后再也不需要用process on了
2020-01-20 15:24:25 2936
原创 leetcode刷题——Heap就是优先队列吗?
前言最近在做python爬虫项目,爬虫项目在数据结构与算法和操作系统这边其实涉及到两个问题:1个是有优先队列管理和去重,另一个是协程代替线程,减少内存消耗,今天这篇文章我们主要是通过刷leetcode的heap结构来认识heap与优先队列的关系。从爬虫引发的思考我们在分析Scrapy的原理时候,分析过Scrapy的querylib模块对优先队列的,使用的是一个字典表,以key作为优先级...
2020-01-11 18:08:00 339
原创 python老男孩scrapy视频刷课记录
python全栈3 day96 02 抽屉示例:初识Scrapy并获取新闻标题:主要讲了scrapy的生成框架结构scrapy startproject day96、生成爬虫模板(cd scrapy;scrapy genspider example)、单页parse的xpath语法(//全局变量下的子孙,.//当前子孙变量,)。python全栈3 day96 03 抽屉示例:递归获取所有页码:...
2020-01-11 11:32:11 326 1
原创 pycharm中sourceroot与倒入问题
注意pycharm的sourceroot要与run时候的woringDictory保持一致,这样IDE解释器的import入口才能与运行入口保持一致,否则IDE自动引入依赖会出问题。These roots contain the actual source files and resources. PyCharm uses the source roots as the sta...
2019-12-11 16:27:47 2300
原创 django连接容器内mysql遇到的问题
django.db.utils.OperationalError: (2026, 'SSL connection error: SSL_CTX_set_tmp_dh failed')初步怀疑是因为docker中的mysql实例是8.0.18,django的版本是2.2.6。一般5.6版本的mysql不需要在django中配置mysql的ssl的ca认证。show variables...
2019-12-11 13:45:54 584
原创 Mysql的安装:是放进docker中运行还是deb安装运行?
前言工作中总免不了安装mysql,现在有mysql社区版本,有mariadb,有mysql版本,还可以通过docker直接安装。今天笔者在工作中还是遇到了常规的设置root密码,删除重装等问题,很是麻烦。一方面还是要加深对mysql数据库的整体理解,另一方面也打算在这篇文章中探索下docker运行mysql的入门难度。使用docker安装Mysql主要参考的文章是https://blo...
2019-12-10 12:43:01 695
原创 leetcode刷题——Trie
前言在之前的多叉树学习中,我们学会了基本的遍历与搜索,今天来看一个N叉树的经典应用——前缀树。什么是字典树在面试中,我们经常会看到这样的题目:说一下搜索框中的自动补全技术是如何实现的? Word中的单词检查是怎样做到的? IP路由是什么原理(最长前缀匹配)?这些题目都涉及到了前缀的匹配问题,以及查找到数据集中同一前缀的单词问题(1)。我们最开始的思路是使用哈希表的技术,将所有...
2019-12-02 13:08:16 186
原创 记录一道不错的python面试题
题目描述在最近的一次面试中,遇到了一个很不错的代码填空题,知识点包含了递归思路、装饰器、字典做缓存等。题目不难,就是leetcode136,n个台阶,一次下一步或者一次下两步,问有几种走法。题目分析题目中的代码结构明确了递归解法,要求填写return 值,同时加了装饰器,装饰器函数中有传参,n是key,f(n)也就是递归方法的返回值为value。...
2019-11-30 18:06:45 103
原创 Scrapy源码分析(四):链接去重器的实现
前言我们在上一篇文章中,分析了Scrapy中调度器的源码,了解了其中优先队列与内存队列、磁盘队列的结合使用。今天我们将目光转向Scrapy的链接去重器——dupefilters.py在调度器scheduler.py中,from_crawler定义了调度器的链接去重器类:RFPDupeFilterclass Scheduler(object): def __init__(s...
2019-11-26 10:22:30 289
原创 Scrapy源码分析(三):调度器的实现
前言在上一篇文章“Scrapy源码分析(二):一个参考Scrapy实现的爬虫框架TinyScrapy”,我们基本明白了引擎是爬虫的新增,它主要通过内部的_next_request作为消费者,种子列表生成器和get_response_callback作为生产者,与调度器进行了方法调用。我们在前文讲过,调度器在本质上可以把它看为队列,在引擎中也主要是入队列enqueue_request和出队列...
2019-11-25 22:49:43 1546 1
原创 Scrapy源码分析(番外):queuelib优先队列
前言在Scrapy的调度器中的类变量里,有一个叫做pqclass的,是库queuelib中优先队列的一个类名,今天我们来分析下它的原理。代码思想queuelib是从Scrapy中分离出来的一个库,今天我们主要看其中的类PriorityQueue:class PriorityQueue(object): """ PriorityQueue的实现是由一个has...
2019-11-25 18:42:20 633
原创 Scrapy源码分析(一):代码结构初探
前言很多朋友在使用scrapy编写爬虫的时候,都能感受到这个框架的在定制性方面的强大。我们完成一个爬虫只需要定义好Spider抽取规则即可。即使再复杂一点的需求,我们也可以通过pipeline来控制爬虫的输出,middleware来控制下载中的请求定制。可是大家有没有想过scrapy是如何将我们的初始种子url一步步的下载、解析、加入新队列,周而复始的运行呢?这篇文章我来带着大家通过阅读文...
2019-11-24 22:37:19 1051 1
原创 Scrapy源码分析(二):一个参考Scrapy实现的爬虫框架TinyScrapy
前言本文的源码来自于网络,为老男孩培训课中的讲解示例,笔者在听完讲解后发现确实讲出了Scrapy的精髓,因此在这里分享给大家,也希望大家支持原视频作者,从Scrapy到TinyScrapyScrapy的整体架构我们从他的文档中基本能理清。但是到代码层级,我们发现它主要是使用的twisted,一个基于事件驱动的网络框架来实现各个组件间的逻辑处理。因此既要弄明白twisted原理,还要...
2019-11-24 16:05:51 805 4
原创 爬虫小菜:要注意Accept-Encoding为br时候的问题
我们在爬虫做请求的时候,一般会在request中添加请求头:Accept-Encoding,往往会指定方式为“gzip,deflate,br”三种压缩方式。gzip和deflate为传统的压缩格式br指的是Brotli,Google在2015年时候发布的新的数据压缩算法,而我们的工具request的response等文本只支持gzip,deflate格式的解压缩,还不支持br形式的解压...
2019-11-23 22:57:22 4704
原创 leetcode刷题中遇到的宝藏资源
码农找工作系列,知乎上很不错的算法系列,可以按照问题导向识别算法和数据结构,与leetcode刷题思维正好相反,它总结了常见的问题模式:1. 滑动窗口。2. 双指针。3. 快慢指针。4. 区间合并。5. 循环排序。6. 原地反转链表。7. 树上的BFS。8. 树上的DFS。9. 双堆。10. 子集。11. 变种二分。12. 最大前K个元素。13. ...
2019-11-23 15:45:46 300
原创 leetcode刷题——BinarySearchTree
前言在刷完二叉树和N叉树的教程卡片后,我们终于来到了更经典的二查搜索树问题。特性二叉树的特性是左节点的数值小于中序节点小于右节点,中序遍历的时候为升序。在做题当中基本使用递归进行深度搜索解决问题。有一类问题是对比两个二叉树,看是否相等,求合并等。典型题:938-range-sum-of-bst:求某一区间内的节点的值。利用了二叉搜索树的特性:只要在任一边界内,就继续把任...
2019-11-18 22:02:16 126
原创 leetcode刷题——N-aryTree
前言在完成二叉树的遍历后,我们看N叉树,教程中分为两部分介绍N-aryTree:遍历与递归遍历N叉树的遍历也分为深度优先搜索(DFS)和广度优先搜索(BFS)。DFS中只有前序遍历和后序遍历,因为有了多个子节点,中序遍历中到底在哪个子节点后遍历这个问题,一般不做考虑。前序遍历先访问根节点,然后依次遍历子节点。后序遍历先依次遍历字节点,然后访问根节点。在教程卡中,列...
2019-11-11 10:21:07 185
原创 leetcode刷题——BinaryTree
前言终于刷到了二叉树这一个经典的题目,之所以说它经典,是因为它涉及的知识点很多。从数据结构的存储上来看,它与链表最相近,写起来也更复杂。同时遍历涉及到策略,最基本也分为深度优先搜索和广度优先搜索,深度优先搜索又分为前序、中序、后序。而解题思路又可以分为递归和迭代两种解法。递归本身就属于一种比较抽象的方式,虽然写起来可能相对简单,但想起来还是比较麻烦,要确定好递归的步骤,每步返回的值,以...
2019-11-10 17:41:35 212
原创 leetcode刷题——LinkedList
前言链表数据结构属于链式数据结构(链表、树、图)中最简单的一种形式,在题目中主要是考察遍历、复制、倒序、增加节点、删除节点等操作,上周我用了3天时间刷完了教程,做了大概20道题目。常见操作与编程技巧一个链表中的节点可以用下面来表示(python语言):class ListNode(object): def __init__(self, x): self.v...
2019-11-04 23:05:18 236
原创 leetcode刷题——HashTable
前言本周主要对HashTable进行了复习,用了2天的晚上时间看完了教程,然后用了1天时间做了难度为easy的题目,目前总体对散列表的用法有了一些认识。HashTable知识点hashtable主要是运用hash方法,将数据映射到一段连续或者分散的内存地址上,以便于在O(1)的时间内寻找、插入数据。hashtable分为两种表示形式,分别应对不同的问题:hashset。hash...
2019-10-25 16:06:48 303
原创 爬虫小菜:使用fake-useragent随机伪装UA头部
在爬虫中我们经常需要伪装请求中的User-Agent头部,用于访问目标网站。但是只用一个User-Agent短时间内连续访问目标网站可能会有被Banned风险。一般网上有解决方案说讲一批User-Agent写入到配置文件中,爬虫在请求中随机拿一个User-Agent再去请求即可。...
2019-10-11 11:08:23 1226
原创 使用scrapy cluster构建企业级爬虫系统——(2)实现网站深度抓取
上回博客中,我们对scrapy cluster进行了介绍,今天我们来搭建scrapy cluster的开发环境。这里我使用的开发机环境是Ubuntu 18.04。大家日常如果使用windows开发时候,最好把zookeeper,kafka,redis安装在linux开发服务器上,避免一些不必要的坑。我们先看下scrapy cluster的文档结构:整体部分包括Introductio...
2019-07-25 10:38:00 543
原创 爬虫小菜:Scrapy cluster中连接不上zookeeper的原因
配置好Scrapy cluster各个组件、编写好爬虫后在运行spider时候,我们可能会遇到以下爬虫连接不到zookeeper的问题:如果你的日志打印的没有我的全,新建一个localsettings.py,把日志级别都改为“DEBUG”的级别:# coding=utf8# 爬虫模块的日志级别SC_LOG_LEVEL="DEBUG"# QUEUE_HITS = 60# QUE...
2019-07-10 13:37:21 251
原创 爬虫小菜:你知道xpath中text()和string(.)的区别吗?
我们在进行爬虫时候,经常会遇到如下这样的页面:<span> <div> <em>你好</em>,北京 </div></span>在日常抓取的时候,遇到更多的情况是抓取<em>中的你好,这时使用xpath("//div/em/text()")就可以提取到。现在我们考虑下...
2019-07-09 22:50:25 3384 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人