Heritrix源码分析(一) 包介绍 
序号  包名                   说明

1 org.apache.commons.httpclient      封装了apache的httpclient用于Fetch网页内容

2 org.apache.commons.httpclient.cookie 封装了apache的httpclient用于Fetch网页内容,这里主要处理Cookie

3 org.apache.commons.pool.impl 封装了apache的httpclient用于Fetch网页内容,还待研究

4 org.archive.crawler Heritrix程序运行的入口包,如Heritrix运行可以直接抓取

5 org.archive.crawler.admin Heritrix的管理包,比如CrawlJob表示一个抓取任务job,CrawlJobHandler管理JOB,以及日志统计等

6 org.archive.crawler.admin.ui 服务于UI管理界面,如Job参数的设置

7 org.archive.crawler.datamodel Heritrix的数据模型包,如在Heritrix中代表一个URL的CandidateURI  
8 org.archive.crawler.datamodel.credential 管理Heritrix数据模型中的凭证,如抓取某些网站需要用户名和密码

9 org.archive.crawler.deciderules Heritrix的规则包,如决定哪些URL可以抓取可以调度

10 org.archive.crawler.deciderules.recrawl 还待研究,应该是决定哪些URL需要重新抓取

11 org.archive.crawler.event 事件管理,如Heritrix的暂停、重启、停止等  
12 org.archive.crawler.extractor Heritrix的造血器,通过它抽取新的URL再次进行抓取

13 org.archive.crawler.fetcher Heritrix的获取包,如获取HTTP、DNS、FTP数据

14 org.archive.crawler.filter Heritrix的过滤器,如配合Rule过滤一些不要的URL

15 org.archive.crawler.framework Heritrix的框架包,存放一些核心类,一般是父类,如Heritrix控制类CrawlController;调度器类Frontier  
16 org.archive.crawler.framework.exceptions Heritrix框架异常包,通常这里的异常抛出会导致Heritrix的停止  
17 org.archive.crawler.frontier Heritrix的调度器,决定抓取哪个URL  
18 org.archive.crawler.io Heritrix的IO格式包,感觉取名不合理,这里只是定义一些格式,如统计数据的格式,错误日志的格式  
19 org.archive.crawler.postprocessor 辅助处理器包,感觉取名也不合理,这里只是对处理URL前后进行一些处理,如URL重定向  
20 org.archive.crawler.prefetch Heritrix的预处理器包,如确定一个URL是否已经解析了DNS  
21 org.archive.crawler.processor 还没接触到,待研究

22 org.archive.crawler.processor.recrawl 还没接触到,待研究  
23 org.archive.crawler.scope Heritrix抓取范围管理,如种子  24 org.archive.crawler.selftest 管理Heritrix的Web工程self.war  
25 org.archive.crawler.settings 管理Heritrix配置文件order.xml中的各项配置  
26 org.archive.crawler.settings.refinements 管理Heritrix自己对数据格式的标准,如时间格式

27 org.archive.crawler.url 还没怎么接触到,待研究  
28 org.archive.crawler.url.canonicalize Heritrix的URL规范化,用于规范每一个URL  
29 org.archive.crawler.util Heritrix用于抓取的工具包,如BDB操作工具,IO操作工具

30 org.archive.crawler.writer Heritrix的下载包,用于将抓取的URL内容写入硬盘

31 org.archive.extractor 还没接触到,待研究  
32 org.archive.httpclient Heritrix为结合httpclient量身打造的包,让自身更好的获取网页内容  
33 org.archive.io Heritrix的IO包,自己封装的一些IO操作类

34 org.archive.io.arc 针对arc格式的IO操作包

35 org.archive.io.warc 针对warc格式的IO操作包  
36 org.archive.net Heritrix扩展了java.net的包,主要扩展java.net.URI类

37 org.archive.net.md5 Heritrix对URL MD5加密包,所用不多,待研究

38 org.archive.net.rsync 还没接触到,待研究

39 org.archive.net.s3 还没接触到,待研究

40 org.archive.queue 还没接触到,待研究  
41 org.archive.uid Heritrix ID管理,主要针对URI

42 org.archive.util 整个Heritrix的工具类

43 org.archive.util.anvl 还没接触到,待研究

44 org.archive.util.bdbje Heritrix对BDB的封装

45 org.archive.util.fingerprint 还没接触到,待研究

46 org.archive.util.iterator Heritrix自身封装的迭代器

47 org.archive.util.ms 还没接触到,待研究  
48 st.ata.util 扩展的其他包,待研究              
 
 
Heritrix自己的包有48个之多,还有它导入的第三方包也有30多个,可见其复杂性...

Heritrix源码分析(二) 配置文件order.xml介绍 
order.xml是整个Heritrix的核心,里面的每个一个配置都关系到Heritrix的运行情况,没读源码之前我只能从有限的渠道去获知这些配置的运用.读完之后才知道Heritrix竟然有如此灵活的运用,如可以控制抓取速度,可以优化电脑性能,可以在某一次的抓取上继续抓取.当然整个order.xml里我也没有全部掌握,只知道大部分配置的作用,希望大家指点改正以及补充,谢谢!    
1.     <meta></meta>  代表着该抓取JOB的元素,相当于Html的meta  Xml代码 
 
1. <meta>   
2.    <name>myheritrix</name>                    <!-- Heritrix抓取JOB的名字,由用户输
入,用来区分不同的抓取JOB,Heritrix没有默认值 -->   
3.    <description>my heritrix</description>  <!-- Heritrix抓取JOB的描述,由用户输入,用来描述
该抓取JOB,Heritrix没有默认值-->   
4.    <operator>Admin</operator>                 <!--Heritrix抓取JOB的操作者,由用户输入,Heritrix没
有默认值  -->   
5.    <organization></organization>               <!--Heritrix抓取JOB的操作者所属组织,由用户输
入,Heritrix没有默认值,可以为空 -->   
6.    <audience></audience>                          <!--Heritrix抓取JOB的用户或客户,由用户输
入,Heritrix没有默认值,可以为空 -->   
7.    <date>20090520051654</date>             <!--提交该Heritrix抓取JOB的时间,由系统生成 -->

Xml代码 
 
1. </meta>

2.<controller></controller> 跟抓取有关的所有参数,由于内容较多,并且Heritrix也已将他们分成不同模块,所以这里我也将他们拆分来说明.

Xml代码 
 
1.  <controller>   
2.     <string name="settings-directory">settings</string> <!-- Heritrix的顶级目录 -->

3.     <string name="disk-path"></string><!-- order.xml所在目录,单个Heritrix实例的目录 -->

4.     <string name="logs-path">logs</string><!-- 用于保存Heritrix的日志文件,可以是绝对路径,
也可以是相对路径,相对路径是相对于disk-path-->   
5.     <string name="checkpoints-path">checkpoints</string><!-- 用于保存checkpoints(定点备份)
文件的目录, 可以是绝对路径,也可以是相对路径,相对路径是相对于disk-path-->   
6.     <string name="state-path">state</string> <!-- 用于保存crawler-state文件的目录,,可以是绝
对路径,也可以是相对路径,相对路径是相对于disk-path -->   
7.     <string name="scratch-path">scratch</string>  <!-- 用于保存网页内容临时文件的目录,,可以
是绝对路径,也可以是相对路径,相对路径是相对于disk-path-->   
8.     <long name="max-bytes-download">0</long>   <!-- 最大下载字节数,当下载字节超出该值爬
虫将停止下载。如果该值为0则表示没有限制-->   
9.     <long name="max-document-download">0</long>  <!-- 最大文档下载数,当下载文档超出该
值时爬虫将停止下载。如果该值为0则表示没有限制-->   
10.     <long name="max-time-sec">0</long> <!-- 最大时间抓取(秒),如果抓取时间超过该值,则爬虫
将停止抓取。如果该值为0则表示没有限制-->   
11.     <integer name="max-toe-threads">30</integer>  <!-- 最大线程数用于同时处理多个URI-->

12.     <integer name="recorder-out-buffer-bytes">4096</integer> <!-- 每一个线程的输出缓冲区大
小,也就是在内存里存放多大的字节数才写入到文件中-->   
13.     <integer name="recorder-in-buffer-bytes">65536</integer> <!-- 每一个线程的输入缓冲区大
小,也就是在内存里存放多大的字节数才写入到文件中-->   
14.     <integer name="bdb-cache-percent">0</integer> <!--分配给DBB缓存堆的百分比,默认为0
则表示没有其他要求(通常BDB是需要60%或者是最大值) -->   
15. <newObject name="scope" class="org.archive.crawler.deciderules.DecidingScope"> <!-- 抓取
范围,构造CrawlScope,等下拆分来说明-->

16. </newObject>   
17. <map name="http-headers"> <!-- HTTP协议,当处理爬虫HTPTP协议时需要构造,等下拆分说
明-->

18. </map>

19.  <newObject name="robots-honoring-policy" class="org.archive.crawler.datamodel.RobotsHon
oringPolicy"> <!--Robots.txt协议控制,等下拆分来说明 -->

20. </newObject>   
21.  <newObject name="frontier" class="org.archive.crawler.frontier.BdbFrontier"> <!-- Frontier 调
度器,等下拆分来说明-- >   22. </newObject>   
23. <map name="uri-canonicalization-rules"> <!-- URL规范化规则,URL规范化规则有序列表,规
则适用于从上至下列出的顺序,等下拆分来说明-->

24. </map>   
25. <map name="pre-fetch-processors"> <!--预先处理链,在抓取前需要从网络获取或配置相关参数,
等下拆分来说明 -->   26. </map>   
27. <map name="fetch-processors">  <!-- 获取链,等下拆分来说明 -->

28. </map>   
29. <map name="extract-processors"> <!-- 抽取链,等下拆分来说明 -->

30. </map>   
31. <map name="write-processors"> <!--写链,等下拆分来说明 -->

32. </map>   
33. <map name="post-processors"> <!-- 请求链:清理URI和在URI范围内填充新的URI ,等下拆分
来说明-->

34. </map>   
35. <map name="loggers"> <!-- 统计跟踪链.统计跟踪模块,指定用于监视抓取和写日志,以及报告
和提供信息给用户接口,等下拆分来说明-->

36. </map>   
37. <newObject name="credential-store" class="org.archive.crawler.datamodel.CredentialStore"> 
<!--凭证存储,如登陆凭证,等下拆分来说明 -->

38.  </newObject>

39.  </controller>   
3.接下来拆分每个组件的配置文件一一进行说明,最后对Heritrix主要的配置也就是我们可以影响抓取的配置进行说明。 
   3.1:抓取范围<newObject name="scope" class="org.archive.crawler.deciderules.DecidingScope">     Xml代码 
 
1. <newObject name="scope" class="org.archive.crawler.deciderules.DecidingScope"><!-- 抓取
范围,构造CrawlScope-->   
2.       <boolean name="enabled">false</boolean> <!-- 是否运行这个组件 -->

3.       <string name="seedsfile">seeds.txt</string> <!--种子文件名-->   
4.       <boolean name="reread-seeds-on-config">true</boolean> <!-- 是否每一个配置发生变法
都要引发重新读取原始种子文件 -->   
5.       <newObject name="decide-rules" class="org.archive.crawler.deciderules.DecideRuleSequ
ence"> <!--抓取范围限定的规则,由于自己一直做的是垂直抓取,没有使用以及研究它 -->

6.         <map name="rules"><!-- 不同的规则-->   
7.           <newObject name="rejectByDefault" class="org.archive.crawler.deciderules.RejectDeci
deRule"> <!-- -->

8.           </newObject>   
9.           <newObject name="acceptIfSurtPrefixed" class="org.archive.crawler.deciderules.SurtPr
efixedDecideRule"><!-- -->   
10.             <string name="decision">ACCEPT</string> <!-- -->   
11.             <string name="surts-source-file"></string> <!--用于推断SURT前缀的文件,文件里的任
何文件将转换为所提供的SURT前缀,显示在行里的SURT前缀都会通过+开始 -->   
12.             <boolean name="seeds-as-surt-prefixes">true</boolean> <!--种子文件是否也应当解析
成SURT前缀 -->   
13.             <string name="surts-dump-file"></string> <!--保存SURT前缀的文件,用于实际调试
SURTS时 -->   
14.             <boolean name="also-check-via">false</boolean><!--是否也检查该CrawlURI中的
via -->   
15.             <boolean name="rebuild-on-reconfig">true</boolean><!-- 当配置文件更改后,是否也跟
着更改-->   
16.           </newObject>   
17.           <newObject name="rejectIfTooManyHops" class="org.archive.crawler.deciderules.Too
ManyHopsDecideRule"><!-- -->   
18.             <integer name="max-hops">20</integer><!--最大跃点数,也就是抓取深度 -->

19.           </newObject>   
20.           <newObject name="acceptIfTranscluded" class="org.archive.crawler.deciderules.Trans
clusionDecideRule"><!-- -->   
21.             <integer name="max-trans-hops">3</integer><!--除去链接L,PathFromSeed的最大长
度 -->   
22.             <integer name="max-speculative-hops">1</integer><!--抽取的链接X,可能是链接L或
者嵌入式E,在JS里的最大个数,通过pathFromSeed判断 -->

23.           </newObject>   
24.           <newObject name="rejectIfPathological" class="org.archive.crawler.deciderules.Patholo
gicalPathDecideRule"><!-- -->   
25.             <integer name="max-repetitions">2</integer><!--一个URL相同目录段名最大重复次
数,超过该值返回REJECT,如http://www.baidu.com/a/a/a/index.html ,其中/a出现三次,超过了2次,所以返回REJECT(拒绝)-->

26.           </newObject>

27.           <newObject name="rejectIfTooManyPathSegs" class="org.archive.crawler.deciderules.
TooManyPathSegmentsDecideRule"><!-- -->   
28.             <integer name="max-path-depth">20</integer><!--URL中段的次数是否超过该值,超过
返回REJET,段表示http://www.baidu.com/a/b,其中a和b表示一个段 -->   29.           </newObject>   
30.           <newObject name="acceptIfPrerequisite" class="org.archive.crawler.deciderules.Prereq
uisiteAcceptDecideRule"><!-- -->   31.           </newObject>   32.         </map>   33.       </newObject>   34.     </newObject>     
    3.2: HTTP协议<map name="http-headers">      Xml代码 
 
1. <map name="http-headers"><!-- HTTP协议,当处理爬虫HTPTP协议时需要构造 -->   2.       <string name="user-agent">Mozilla/5.0 (compatible; heritrix/1.14.3 +http://127.0.0.1)</stri
ng><!-- 用户代理,这个值字段必须包含有效的URL,如此才可以用爬虫访问个人或者组织的网站 -->   
3.       <string name="from">guoyunsky@hotmail.com</string><!--联系人信息,该字段必须包含有
效的email,来代表使用本爬虫的个人或组织 -->   4.     </map>     
    3.3:爬虫协议 <newObject name="robots-honoring-policy" class="org.archive.crawler.datamodel.RobotsHonoringPolicy">      Xml代码 
 
1. <newObject name="robots-honoring-policy" class="org.archive.crawler.datamodel.RobotsHon
oringPolicy"><!--Robots.txt协议控制 -->   
2.       <string name="type">classic</string>         <!-- 爬虫协议类型,有
classic,ignore,custom,most-favored,most-favored-set 5种类型 -->   
3.       <boolean name="masquerade">false</boolean>   <!-- 我们应当在当爬虫遵循所有它声明
的规则时伪装另一个代理,唯一相关的类型是:most-favored和most-favored-set-->

4.       <text name="custom-robots"></text>  <!-- 如果type是custom,则机器人自定义-->

5.       <stringList name="user-agents"> <!-- 如果type是most-favored-set,代替的user-agents,
这里列表多个 -->   6.       </stringList>   7.     </newObject>     
   3.4:Frontier 调度器<newObject name="frontier" class="org.archive.crawler.frontier.BdbFrontier"><!-- Frontier 调度器-->     Xml代码 
 
1. <newObject name="frontier" class="org.archive.crawler.frontier.BdbFrontier"><!-- Frontier 调度
器-->   
2.       <float name="delay-factor">4.0</float><!-- 从同一个服务器(host)获取需要等待的间隔时间,
可以预防无节制的抓取一个网站.通常是用该值去乘以上一个url的抓取时间来表示为下一个url需要等待的时间 -->   
3.       <integer name="max-delay-ms">20000</integer><!-- 最大的等待时间,单位毫秒 -->

4.       <integer name="min-delay-ms">2000</integer><!--  最小等待时间,单位毫秒-->

5.       <integer name="respect-crawl-delay-up-to-secs">300</integer><!--当读取robots.txt时推
迟抓取的时间,单位毫秒 -->   
6.       <integer name="max-retries">30</integer><!-- 已经尝试失败的URI的重新尝试次数,很多
人在跑Heritrix的时候,发现只跑了30个URL就停止了,其实是一个URL都没成功,它这里重试了30次 -->   
7.       <long name="retry-delay-seconds">900</long><!--默认多长时间我们重新去抓取一个检索
失败的URI -->   
8.       <integer name="preference-embed-hops">1</integer><!--嵌入或者重定向URI调度等级,
例如,该值为1(默认也为1),调度时将比普通的link等级高.如果设置为0,则和link一样 -->

9.       <integer name="total-bandwidth-usage-KB-sec">0</integer><!--爬虫所允许的最大宽带平
均数,实际的读取速度是不受此影响的,当爬虫使用的宽带接近极限时,它会阻碍新的URI去处理,0表示没有限制 -->   
10.       <integer name="max-per-host-bandwidth-usage-KB-sec">0</integer><!--爬虫允许的每个
域名所使用的最大宽带数,实际的读取速度不会受此影响,当爬虫使用的宽带接近极限时,它会阻碍新的URI去处理,0表示没有限制 -->   
11.       <string name="queue-assignment-policy">org.archive.crawler.frontier.HostnameQueueAs
signmentPolicy</string><!--定义如何去分配URI到各个队列,这个类是相同的host的url就属于同一个队列 -->   
12.       <string name="force-queue-assignment"></string><!--强制URI的队列名字, -->

13.       <boolean name="pause-at-start">false</boolean><!-- 在URI被尝试前,当爬虫启动后是否
暂停?这个操作可以在爬虫工作前核实或调整爬虫。默认为false -->   
14.       <boolean name="pause-at-finish">false</boolean><!-- 当爬虫结束时是否暂停,而不是立刻
停止工作.这个操作可以在爬虫状态还是可用时,有机会去显示爬虫结果,并有可能去增加URI和调整setting,默认为false-->   
15.       <boolean name="source-tag-seeds">false</boolean><!-- 是否去标记通过种子抓取的uri作
为种子的遗传,用source值代替.-->   
16.       <boolean name="recovery-log-enabled">true</boolean><!--设置为false表示禁用恢复日志
写操作,为true时候表示你用checkpoint去恢复crawl销毁的数据 -->   
17.       <boolean name="hold-queues">true</boolean><!--当队列数量未达到时,是否不让其运行,
达到了才运行。是否要去持久化一个创建的每个域名一个的URI工作队列直到他们需要一直繁忙(开始工作)。如果为false(默认值),队列会在任何时间提供URI去抓取。如果为true,则队列一开始(还有收集的url)会处于不在活动中的状态,只有在Frontier需要另外一个队列使得所有线程繁忙的时候才会让一个新的队列出于活动状态. -->   
18.       <integer name="balance-replenish-amount">3000</integer><!--补充一定的数量去使得队
列平衡,更大的数目则意味着更多的URI将在它们处于等待队列停用之前将被尝试 -->

19.       <integer name="error-penalty-amount">100</integer><!-- 当队列中的一个URI处理失败时,
需要另外处罚的数量.加速失活或问题队列,反应迟钝的网站完全退休。,默认为100-->

20.       <long name="queue-total-budget">-1</long><!--单个队列所允许的活动的开支,队列超出部
分将被重试或者不再抓取,默认为-1,则表示没有这个限制 -->   
21.       <string name="cost-policy">org.archive.crawler.frontier.ZeroCostAssignmentPolicy</strin
g><!-- 用于计算每个URI成本,默认为UnitCostAssignmentPolicy则认为每个URI的成本为1-->

22.       <long name="snooze-deactivate-ms">300000</long><!--任何snooze延迟都会影响队列不
活动,允许其他队列有机会进入活动状态,通常设置为比在成功获取时暂停时间长,比连接失败短,默认为5分钟 -->   
23.       <integer name="target-ready-backlog">50</integer><!--准备积压队列的目标大小,这里多
个队列将会进入准备状态即使线程不再等待.只有hold-queues为true才有效,默认为50 -->

24.       <string name="uri-included-structure">org.archive.crawler.util.BdbUriUniqFilter</string><!-- -->   
25.       <boolean name="dump-pending-at-close">false</boolean><!-- -->

26.     </newObject>     
   3.5:URL规范化规则,主要用来规范化每个URL,用Heritrix默认的就好了,这里不做说明了,其实也是通过各种规则 
   3.6:预先处理链组件: <map name="pre-fetch-processors"> Xml代码

1. <map name="pre-fetch-processors"> <!--预先处理链,在抓取前需要从网络获取或配置相关参
数 -->   
2.       <newObject name="Preselector" class="org.archive.crawler.prefetch.Preselector"><!--该组
件使用的类 -->   
3.         <boolean name="enabled">true</boolean><!--是否启用该组件 -->   
4.         <newObject name="Preselector#decide-rules" class="org.archive.crawler.deciderules.De
cideRuleSequence"><!-- 该组件的规则,可以忽略不符合规则的URL不处理-->

5.           <map name="rules"><!-- 该组件的规则-->

6.           </map>

7.         </newObject>   
8.         <boolean name="override-logger">false</boolean><!-- 如果启用则覆盖这个类的默认日
志器,默认日志器将日志打印在控制台.覆盖的日志器将把所有日志发送到在日志目录下的以本类命名的日志文件中。在heritrix.properties中设置好日志等级和日志格式,这个属性在重启后知获取一次. -->   
9.         <boolean name="recheck-scope">true</boolean><!--是否需要在这一步重新检索
Crawl Scope -->   
10.         <boolean name="block-all">false</boolean><!--指定所有的URIS(通常是由host给定)在
这一步阻止 -->   
11.         <string name="block-by-regexp"></string><!-- 指定允许所有在这里匹配这个正则表达式
的则阻止-->   
12.         <string name="allow-by-regexp"></string><!-- 指定允许在这里所有匹配正则表达式的则
允许,会对每个url都进行判断-->

13.       </newObject>   
14.       <newObject name="Preprocessor" class="org.archive.crawler.prefetch.PreconditionEnforc
er"><!-- -->   
15.         <boolean name="enabled">true</boolean><!-- -->   
16.         <newObject name="Preprocessor#decide-rules" class="org.archive.crawler.deciderules.
DecideRuleSequence"><!-- -->

17.           <map name="rules"><!-- -->

18.           </map>

19.         </newObject>   
20.         <integer name="ip-validity-duration-seconds">86400</integer><!--DNS有效的最低时间
间隔(单位为秒),如果记录的DNS TTL较大,那将被用来代替,设置为0则表示永久有效 -->

21.         <integer name="robot-validity-duration-seconds">86400</integer><!--提取robots.txt信息
有效时间(单位为秒),如果该设置为0则robots.txt信息永不过期 -->   
22.         <boolean name="calculate-robots-only">false</boolean><!--是否只计算一个URI的
robots状态,没有任何实际应用的除外.如果该值为true,排除的url只将记录在crawl.log,但仍将抓取,默认为false(false的话,排除的url是不应该被抓取的)-->

23.       </newObject>

24.     </map>

heritrix源码分析(未完成。太长了!!)相关推荐

  1. Heritrix源码分析(二) 配置文件order.xml介绍(转)

    本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/613412      本博客已迁移到本人独立博客: http://www.yun5u. ...

  2. Heritrix源码分析(六) Heritrix的文件结构分析

    本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.javaeye.com/blog/642618        欢迎加入Heritrix群(QQ): 109148319 ...

  3. MyBatis 源码分析系列文章合集

    1.简介 我从七月份开始阅读MyBatis源码,并在随后的40天内陆续更新了7篇文章.起初,我只是打算通过博客的形式进行分享.但在写作的过程中,发现要分析的代码太多,以至于文章篇幅特别大.在这7篇文章 ...

  4. MyBatis 源码分析 - 映射文件解析过程

    1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...

  5. axios从入门到源码分析 -http-xhr

    axios从入门到源码分析 1 HTTP相关 1.1.MDN文档 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Overview 1.2. HTT ...

  6. SRS4.0源码分析-CMake

    本文采用的 SRS 版本是 4.0-b8 , 下载地址:github <SRS4.0源码分析-调试环境搭建> 讲了 SRS 在 Clion 里面的调试,本文主要讲解 srs-4.0-b8\ ...

  7. 详细讲解:RocketMQ的限时订单实战与RocketMQ的源码分析!

    目录 一.限时订单实战 1.1.什么是限时订单 1.2.如何实现限时订单 1.2.1.限时订单的流程 1.2.2.限时订单实现的关键 1.2.3.轮询数据库? 1.2.4.Java 本身的提供的解决方 ...

  8. Yolov3Yolov4网络结构与源码分析

    Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 论文汇总 ...

  9. EOS智能合约:system系统合约源码分析

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. eosio.system 概览 笔者使用的IDE是VScode,首先来看eosio.system的源码结构.如下图所示. ...

最新文章

  1. 【UVA624 01背包中的路径问题】
  2. 第三章 经典场景设计
  3. 头部ct能检查出什么_【安全用药】做CT检查时应注意什么?
  4. SpringMVC请求处理流程、springMVC工作流程
  5. 笔试题--计算组合数
  6. request payload怎么发_如果不是你,我也不会发朋友圈
  7. 简单Java类和数据库操作及javafx的结合小项目(二)
  8. Ubuntu18.04配置ork(ecto、ecto_image_pipeline、ecto_opencv、ork_reconstruction)
  9. centos7查看进程ps_查看进程之ps命令
  10. 2022芒果TV算法赛_用户下一个观看视频预测_baseline_CF召回YoutubeDNN
  11. 一体化伺服电机一圈多少脉冲
  12. 下载网页上的视频—Flash Video Downloader插件
  13. 汇编程序:查表求平方
  14. java 线程耗尽_关于线程耗尽导致请求超时系统假死
  15. C++计算矩阵对角线和的程序
  16. python第三方库的下载、安装与升级(包含whl,zip,tra.gz格式)
  17. 哈哈~ 开心死了 厚厚
  18. STM32使用串口1配合DMA接收不定长数据,大大减轻CPU载荷。
  19. Typora 0.11.18版不能使用:This beta version of Typora is expired, please download and install a newe
  20. MATLAB使用:如何将其他格式的数据转换成MATLAB喜欢的“.mat”格式

热门文章

  1. Shell中语句if -z至-d含义
  2. 学习 Python 最正确的步骤(0 基础必备)
  3. RFS的web自动化验收测试——更新篇(安装指南)——首次使用RF请先读我
  4. 如果回到十八岁,我要对自己说......
  5. “读者--写者”问题练习题目:南北桥问题
  6. 界面开发控件SpreadJS为什么广获五百强企业青睐!三大核心技术加快你的研发周期
  7. ffmpeg-音频淡入淡出混合滤镜(二十三)
  8. 控制面板的dos命令是什么_原来DOS命令还这么实用!
  9. 云计算类型(服务模式)
  10. 【安全面试】安全面试总结1