hls协议分析

目录

  • 1、简介
    • 1.1、 综述
    • 1.2 、HLS 协议编码格式要求
    • 1.3 、HLS 协议优势
    • 1.4 、HLS 协议劣势
    • 1.5 、框架图
  • 2、m3u8
    • 2.1 、单码率适配流m3u8文件
    • 2.2 、多码率适配流m3u8文件
    • 2.3 、Playlist file
    • 2.4 、Tags
  • 3、ts
    • 3.1 、ts文件结构
    • 3.2、ts文件结构部分截图
    • 3.3、ts层(ts header)
    • 3.4、ts层(adaptation field)
      • 3.4.1、视频流和音频流加 adaptation field 情况部分截图
    • 3.5、ts层(PAT)
      • 3.5.1、PAT情况截图
    • 3.6、ts层(PMT)
      • 3.6.1、PMT情况截图

1、简介

1.1、 综述

作为 Apple 提出的一种基于 HTTP 的协议,HLS(HTTP Live Streaming)用于解决实时音视频流的传
输。尤其是在移动端,由于 iOS /H5 不支持 flash,使得 HLS 成了移动端实时视频流传输的首选。HLS
经常用在直播领域,一些国内的直播云通常用 HLS 拉流(将视频流从服务器拉到客户端)。 HLS 值得诟
病之处就是其延迟严重,延迟通常在 10-30s 之间。

HLS(HTTP Live Streaming) 把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。
HLS 协议由三部分组成:HTTP、M3U8、TS。这三部分中,HTTP 是传输协议,M3U8 是索引文件,TS
是音视频的媒体信息。

1.2 、HLS 协议编码格式要求

视频的编码格式:H264
音频的编码格式:AAC、MP3、AC-3
视频的封装格式:ts
保存 ts 索引的 m3u8 文件

1.3 、HLS 协议优势

1、HLS 相对于 RTMP 来讲使用了标准的 HTTP 协议来传输数据,可以避免在一些特殊的网络环境下被屏蔽。

2、HLS 相对 RTMP 在服务器端做负载均衡要简单得多。因为 HLS 是基于无状态协议 HTTP 实现的,客户端只需要按照顺序使用下载存储在服务器的普通 ts 文件进行播放就可以。而 RTMP 是一种有状态协议,很难对视频服务器进行平滑扩展,因为需要为每一个播放视频流的客户端维护状态。

3、HLS 协议本身实现了码率自适应,在不同带宽情况下,设备可以自动切换到最适合自己码率的视频播放。

1.4 、HLS 协议劣势

1、HLS 协议在直播的视频延迟时间很难做到 10 s 以下延时,而 RTMP 协议的延时可以降到 1s 左右。

1.5 、框架图

hls协议分析_第1张图片
hls协议分析_第2张图片

2、m3u8

m3u8 文件是用文件方式对媒体文件进行描述,由一些列标签组成。

2.1 、单码率适配流m3u8文件

 #EXTM3U
 #EXT-X-VERSION:3
 #EXT-X-ALLOW-CACHE:YES
 #EXT-X-MEDIA-SEQUENCE:2
 #EXT-X-TARGETDURATION:16
 #EXTINF:14.357, no desc
 livestream-2.ts
 #EXTINF:15.617, no desc
 livestream-3.ts
 #EXTINF:14.358, no desc
 livestream-4.ts
 #EXTINF:15.618, no desc
 livestream-5.ts
 #EXTINF:11.130, no desc
 livestream-6.ts

2.2 、多码率适配流m3u8文件

 #EXTM3U
 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000
 http://example.com/low.m3u8
 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000
 http://example.com/mid.m3u8
 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000
 http://example.com/hi.m3u8
 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS="mp4a.40.5"
 http://example.com/audio-only.m3u8

包含多种比特率的 Master Playlist。该文件是一个实际使用中的顶级 m3u8 文件,该文件中又定义了
http://example.com/low.m3u8 、 http://example.com/mid.m3u8 等 几 个 二 级文件 。 顶 级m3u8 文件主要是做码率适配的,二级 m3u8 才是真正的切片文件,客户端会默认选择码率最高的请求,如果发现码率达不到,会请求降低码率的流。客户端拿到二级 m3u8 文件后,会继续请求里面的文件,这时就可以进行播放了。

2.3 、Playlist file

一个 m3u 的 Playlist 就是一个由多个独立行组成的文本文件,每行由回车/换行区分。每一行可以是一个
URI、空白行或是一个 以 “#” 号开头的字符串,并且空格只能存在于一行中不同元素间的分隔。
一个 URI 表示一个媒体段或是 “variant Playlist file”(最多支持一层嵌套,即一个 m3u8 文件中嵌套另
一个 m3u8),以 “EXT” 开头的表示一个 “tag”,否则表示注释,直接忽略。

2.4 、Tags

1、
#EXTM3U :
每个 m3u8 文件第一行必须是这个 tag,如上面的两个示例。

2、
#EXT-X-VERSION:
m3u8文件版本号,比如#EXT-X-VERSION:3。

3、
#EXTINF :
指定每个媒体段(ts)的持续时间,这个仅对其后面的 URI 有效,
每两个媒体段 URI 间被这个 tag 分隔开其格式为: #EXTINF: </span>
比如<span class="token comment">#EXTINF:14.357, no desc</span>
duration:表示持续的时间(秒),<span class="token string">"Durations MUST be integers if the protocol version of the Playlist file is less than 3"</span>,否则可以是浮点数。

4、
<span class="token comment">#EXT-X-BYTERANGE :</span>
表示媒体段是一个媒体 URI 资源中的一段,只对其后的 media URI 有效,
格式: <span class="token comment">#EXT-X-BYTERANGE:<n>[@o]</span>
n:表示这个区间的大小
o:表示在 URI 中的 offset
The EXT-X-BYTERANGE tag appeared <span class="token keyword">in</span> version 4 of the protocol

5、
<span class="token comment">#EXT-X-TARGETDURATION :</span>
指定当前视频流中的单个切片(即 ts)文件的最大时长(秒)。
所以
<span class="token comment">#EXTINF :</span>
中指定的时间长度必须小于或是等于这个最大值。这个 tag 在整个 Playlist 文件中只能出现1次(在嵌套的情况下,
一般有真正ts url 的 m3u8 才会出现该 tag)。格式: <span class="token comment">#EXT-XTARGETDURATION:<s></span>
s:表示最大的秒数。

6、
<span class="token comment">#EXT-X-MEDIA-SEQUENCE :</span>
每一个 media URI 在 Playlist 中只有唯一的序号,相邻之间序号 +1。
格式:<span class="token comment">#EXT-X-MEDIA-SEQUENCE:<number> </span>
一个 media URI 并不是必须要包含的,如果没有,默认为 0.
 
 7、
<span class="token comment">#EXT-X-KEY :</span>
表示怎么对 media segments 进行解码。其作用范围是下次该 tag 出现前的所有media URI。
格式为: <span class="token comment">#EXT-X-KEY:<attribute-list></span>
NONE 或者 AES-128。如果是 NONE,则 URI 以及 IV 属性必须不存在,如果是 AES-128<span class="token punctuation">(</span>Advanced Encryption Standard<span class="token punctuation">)</span>,
则 URI 必须存在,IV 可以不存在。对于 AES-128 的情况,keytag 和 URI 属性共同表示了一个 key 文件,通过 URI 可以获得这个key,
如果没有 IV(Initialization Vector),则使用序列号作为 IV 进行编解码,将序列号的高位赋到 16 个字节的 buffer 中,
左边补 0;如果有 IV,则将该值当成 16 个字节的 16 进制数。

8、
<span class="token comment">#EXT-X-PROGRAM-DATE-TIME :</span>
将一个绝对时间或是日期和一个媒体段中的第一个 sample 相关
联,只对下一个 media URI 有效,
格式: <span class="token comment">#EXT-X-PROGRAM-DATE-TIME:<YYYY-MMDDThh:mm:ssZ></span>
例如: <span class="token comment">#EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00</span>

9、
<span class="token comment">#EXT-X-ALLOW-CACHE :</span>
是否允许做 cache,这个可以在 Playlist 文件中任意地方出现,
并且最多只出现一次,作用效果是所有的媒体段。
格式: <span class="token comment">#EXT-X-ALLOW-CACHE:<YES|NO></span>

10、
<span class="token comment">#EXT-X-PLAYLIST-TYPE :</span>
提供关于 Playlist 的可变性的信息,这个对整个 Playlist 文件有效,是可选的,
格式: <span class="token comment">#EXT-X-PLAYLIST-TYPE:<EVENT|VOD></span>
VOD,即为点播视频,服务器不能改变 Playlist 文件,换句话说就是该视频全部的 ts 文件已经被生成好了。
EVENT,就是实时生成 m3u8 和 ts 文件。服务器不能改变或是删除 Playlist 文件中的任何部分,
但是可以向该文件中增加新的一行内容。它的索引文件一直处于动态变化中,
播放的时候需要不断下载二级index文件。

11、
<span class="token comment">#EXT-X-ENDLIST :</span>
表示 m3u8 文件的结束,live m3u8 没有该 tag。它可以在 Playlist 中任意位置出现,
但是只能出现一个,格式: <span class="token comment">#EXT-X-ENDLIST</span>

12、
<span class="token comment">#EXT-X-MEDIA :</span>
被用来在 Playlist 中表示相同内容的不同语种/译文的版本,
比如可以通过使用 3个这种 tag 表示 3 种不同语音的音频,
或者用 2 个这个 tag 表示不同⻆度的 video。在 Playlist中,
这个标签是独立存在的,
其格式: <span class="token comment">#EXT-X-MEDIA:<attribute-list></span>
该属性列表中包含:URI、TYPE、GROUP-ID、LANGUAGE、NAME、DEFAULT、
AUTOSELECT。

URI:如果没有,则表示这个 tag 描述的可选择版本在主 PlayList 的 EXT-X-STREAM-INF 中存在。

TYPE:AUDIO and VIDEO。

GROUP-ID:具有相同 ID 的 MEDIAtag,组成一组样式。

LANGUAGE:identifies the primary language used <span class="token keyword">in</span> the rendition。

NAME:The value is a quoted-string containing a human-readable description of the rendition.
 If the LANGUAGE attribute is present <span class="token keyword">then</span> this description SHOULD be <span class="token keyword">in</span> that language。

DEFAULT:YES 或是 NO,默认是 No,如果是 YES,则客户端会以这种选项来播放,除非用户自己进行选择。

AUTOSELECT:YES 或是 NO,默认是 No,如果是 YES,则客户端会根据当前播放环境来进行选择(用户没有根据自己偏好进行选择的前提下)。

The EXT-X-MEDIA tag appeared <span class="token keyword">in</span> version 4 of the protocol。

13、
<span class="token comment">#EXT-X-STREAM-INF :</span>
指定一个包含多媒体信息的 media URI 作为 Playlist,
一般做 m3u8 的嵌套使用,
它只对紧跟后面的 URI 有效,
格式: <span class="token comment">#EXT-X-STREAM-INF:<attribute-list></span>
常用的属性如下:

BANDWIDTH:带宽,必须有。

PROGRAM-ID:该值是一个十进制整数,唯一地标识一个在 Playlist 文件范围内的特定的描述。一个 Playlist 文件中可能包含多个有相同 ID 的此 tag。

CODECS:指定流的编码类型,不是必须的。

RESOLUTION:分辨率。

AUDIO:这个值必须和 AUDIO 类别的 <span class="token string">"EXT-X-MEDIA"</span> 标签中 <span class="token string">"GROUP-ID"</span> 属性值相匹配。

VIDEO:同上。

14、
<span class="token comment">#EXT-X-DISCONTINUITY :</span>
当遇到该 tag 的时候说明以下属性发生了变化:

<span class="token function">file</span> <span class="token function">format</span> :文件格式

number and <span class="token function">type</span> of tracks :轨道

encoding parameters :编码参数

encoding sequence :编码序号

timestamp sequence :时间戳序号

15、
<span class="token comment">#ZEN-TOTAL-DURATION :</span>
表示这个 m3u8 所含 ts 的总时间长度
</code></pre> 
  <h1>3、ts</h1> 
  <p>ts 文件为传输流文件,视频编码主要格式为 H264/MPEG4,音频为 AAC/MP3。<br> ts 文件分为三层:<br> ------ ts 层:Transport Stream,是在 pes 层的基础上加入数据流的识别和传输必须的信息。<br> ------ pes 层: Packet Elemental Stream,是在音视频数据上加了时间戳等对数据帧的说明信息。<br> ------ es 层:Elementary Stream,即音视频数据。<br> <a href="http://img.e-com-net.com/image/info8/b823fe3556644bfd96762b1564618f87.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/b823fe3556644bfd96762b1564618f87.jpg" alt="hls协议分析_第3张图片" width="650" height="436" style="border:1px solid black;"></a></p> 
  <h2>3.1 、ts文件结构</h2> 
  <p><a href="http://img.e-com-net.com/image/info8/159723e9f11746d4a4a4f1a135bcb285.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/159723e9f11746d4a4a4f1a135bcb285.jpg" alt="hls协议分析_第4张图片" width="534" height="298" style="border:1px solid black;"></a><br> PAT(Program Association Table)节目关联表:主要的作用就是指明了 PMT 表的 PID 值。<br> PMT(Program Map Table)节目映射表:主要的作用就是指明了音视频流的 PID 值。</p> 
  <h2>3.2、ts文件结构部分截图</h2> 
  <p>刚开始的TS包是PAT(Program Association Table):节目关联表。<br> 再跟的TS包是PMT(Program Map Table):节目映射表。<br> 然后再跟视频、音频的TS包。<br> <a href="http://img.e-com-net.com/image/info8/0ff40bc9655c43e5a85323de4f1eccd2.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/0ff40bc9655c43e5a85323de4f1eccd2.jpg" alt="hls协议分析_第5张图片" width="650" height="429" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/24234e33b4b246628a54a1ec1bbbdb9b.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/24234e33b4b246628a54a1ec1bbbdb9b.jpg" alt="hls协议分析_第6张图片" width="650" height="403" style="border:1px solid black;"></a></p> 
  <h2>3.3、ts层(ts header)</h2> 
  <p>ts 包大小固定为 188 字节,ts 层分为三个部分:ts header、adaptation field、payload。<br> ts header :固定 4 个字节。<br> adaptation field : 可能存在也可能不存在,主要作用是给不足 188 字节的数据做填充。<br> payload : pes 数据。<br> <a href="http://img.e-com-net.com/image/info8/dd8ad427811f40b4ad24a1003c0f401d.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/dd8ad427811f40b4ad24a1003c0f401d.jpg" alt="hls协议分析_第7张图片" width="650" height="369" style="border:1px solid black;"></a><br> ts 层的内容是通过 PID 值来标识的,主要内容包括:PAT 表、PMT 表、音频流、视频流。<br> 解析 ts 流要先找到 PAT 表,只要找到 PAT 就可以找到 PMT,然后就可以找到音视频流了。<br> PAT 表的和 PMT 表需要定期插入 ts 流,因为用户随时可能加入 ts 流,这个间隔比较小,<br> 通常每隔几个视频帧就要加入 PAT和 PMT。<br> PAT 和 PMT 表是必须的,还可以加入其它表如 SDT(业务描述表)等,不过 hls 流只要有<br> PAT 和 PMT 就可以播放了。</p> 
  <h2>3.4、ts层(adaptation field)</h2> 
  <p>ts 包大小固定为 188 字节,ts 层分为三个部分:ts header、adaptation field、payload。<br> ts header :固定 4 个字节。<br> adaptation field : 可能存在也可能不存在,主要作用是给不足 188 字节的数据做填充。<br> payload : pes 数据。<br> <a href="http://img.e-com-net.com/image/info8/defaa14f3b09479a912f9b554d9690e2.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/defaa14f3b09479a912f9b554d9690e2.jpg" alt="hls协议分析_第8张图片" width="650" height="174" style="border:1px solid black;"></a><br> 自适应区的长度要包含传输错误指示符标识的一个字节。pcr 是节目时钟参考,pcr、dts、pts 都是对同<br> 一个系统时钟的采样值,pcr 是递增的,因此可以将其设置为 dts 值,音频数据不需要 pcr。如果没有字<br> 段,ipad 是可以播放的,但 vlc 无法播放。打包 ts 流时 PAT 和 PMT 表是没有 adaptation field 的,<br> 不够的长度直接补 0xff 即可。视频流和音频流都需要加 adaptation field,通常加在一个帧的第一个 ts<br> 包和最后一个 ts 包中,中间的 ts 包不加。</p> 
  <p><strong>adaptation field 详解:</strong><br> flag 标志位:0x10就表示有PCR,下面视频流截图也是这个情况,0x50是random_access_indicator标志位和PCR_flag标志位都有。<br> <a href="http://img.e-com-net.com/image/info8/a3269966ff7141dcac87ef4b6afd315f.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/a3269966ff7141dcac87ef4b6afd315f.jpg" alt="hls协议分析_第9张图片" width="650" height="831" style="border:1px solid black;"></a></p> 
  <h3>3.4.1、视频流和音频流加 adaptation field 情况部分截图</h3> 
  <p><strong>1、视频帧:</strong><br> I帧:第一个TS包和最后一个TS包有adaptation field,根据ts header 最后一个字节判断。<br> (第一个TS包要存PCR)<br> <a href="http://img.e-com-net.com/image/info8/333243369bb3449fb4737ac478542aad.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/333243369bb3449fb4737ac478542aad.jpg" alt="hls协议分析_第10张图片" width="650" height="497" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/8400f108a1a34719bfe130248dcf6a35.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/8400f108a1a34719bfe130248dcf6a35.jpg" alt="hls协议分析_第11张图片" width="650" height="346" style="border:1px solid black;"></a><br> P帧:最后一个TS包有adaptation field,根据ts header 最后一个字节判断。<br> <a href="http://img.e-com-net.com/image/info8/0d9e3a5447344b49a3603fe72753702f.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/0d9e3a5447344b49a3603fe72753702f.jpg" alt="hls协议分析_第12张图片" width="650" height="227" style="border:1px solid black;"></a><br> <strong>2、音频帧:</strong><br> 最后一个TS包有adaptation field,根据ts header 最后一个字节判断。<br> <a href="http://img.e-com-net.com/image/info8/eed779a46d6745b8a105540989919d43.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/eed779a46d6745b8a105540989919d43.jpg" alt="hls协议分析_第13张图片" width="650" height="203" style="border:1px solid black;"></a></p> 
  <h2>3.5、ts层(PAT)</h2> 
  <p>PAT(Program Association Table)节目关联表:主要的作用就是指明了 PMT 表的 PID 值。<br> <a href="http://img.e-com-net.com/image/info8/4b237cbe3834410dbd65f7c3192f08fb.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/4b237cbe3834410dbd65f7c3192f08fb.jpg" alt="hls协议分析_第14张图片" width="650" height="600" style="border:1px solid black;"></a></p> 
  <h3>3.5.1、PAT情况截图</h3> 
  <p>1、下面0x01字节表示有PMT。<br> 2、下面0XF0 01的后13b就是PMT的PID(4097)。<br> (注意这个PID与ts header的pid的字节序是不同的)<br> <a href="http://img.e-com-net.com/image/info8/e9591696efa84133a9eb49e527bab19f.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/e9591696efa84133a9eb49e527bab19f.jpg" alt="hls协议分析_第15张图片" width="650" height="529" style="border:1px solid black;"></a></p> 
  <h2>3.6、ts层(PMT)</h2> 
  <p>PMT(Program Map Table)节目映射表:主要的作用就是指明了音视频流的 PID 值。<br> <a href="http://img.e-com-net.com/image/info8/d12c4c25d00f4b4db3fab2fa25e0356d.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/d12c4c25d00f4b4db3fab2fa25e0356d.jpg" alt="hls协议分析_第16张图片" width="650" height="334" style="border:1px solid black;"></a><br> <a href="http://img.e-com-net.com/image/info8/e71a00dba158440a84509b15155f2236.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/e71a00dba158440a84509b15155f2236.jpg" alt="hls协议分析_第17张图片" width="650" height="429" style="border:1px solid black;"></a></p> 
  <h3>3.6.1、PMT情况截图</h3> 
  <p>1、下面0xE1 00字节后13b表示PCR的PID(256)。<br> 2、下面0X0F 字节就是stream type AAC。<br> 3、下面0xE1 01字节后13b就是elementary_PID (257)。<br> 4、下面0X1B 字节就是stream type H264。<br> 5、下面0xE1 00字节后13b就是elementary_PID (256)。<br> <a href="http://img.e-com-net.com/image/info8/50e9b25279094b7bbf66bfcd1e7b040b.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/50e9b25279094b7bbf66bfcd1e7b040b.jpg" alt="hls协议分析_第18张图片" width="650" height="589" style="border:1px solid black;"></a></p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1396498071013085184"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(hls,hls,m3u8,ts,流媒体)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1892508570369454080.htm"
                           title="cocos creator从零开发简单框架(12)-代码生成单色Sprite" target="_blank">cocos creator从零开发简单框架(12)-代码生成单色Sprite</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/cocos/1.htm">cocos</a>
                        <div>在写Panel前,先写个方法生成单色Sprite,这样当碰到需要单色Sprite的时候不需要在编辑器拖拽和代码动态加载资源。编辑framework/scripts/AppUtil.ts,添加newSpriteNode方法。//生成默认白色100x100大小Sprite(单色)节点publicstaticnewSpriteNode(name:string='newSpriteNode'):cc.No</div>
                    </li>
                    <li><a href="/article/1892508571845849088.htm"
                           title="cocos creator从零开发简单框架(14)-Panel遮罩" target="_blank">cocos creator从零开发简单框架(14)-Panel遮罩</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/cocos/1.htm">cocos</a>
                        <div>遮罩相关属性编辑framework/scripts/view/PanelMgr.ts,增加遮罩相关成员变量及初始化方法。//所有面板privatestatic_panels:Map=newMap()privatestatic_maskName='_mask'privatestatic_maskPrefab:cc.Nodepublicstaticinit(){this._panels.clear()</div>
                    </li>
                    <li><a href="/article/1892507686784790528.htm"
                           title="cocos creator从零开发2048(06)-格子移动逻辑和键盘控制移动" target="_blank">cocos creator从零开发2048(06)-格子移动逻辑和键盘控制移动</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/cocos/1.htm">cocos</a>
                        <div>编辑scripts/Game.ts,添加_moving属性标识当前是否移动中。privategridsReversed:Grid[][]=[]private_moving=false添加move方法移动格子。privatemove(grids:Grid[]){letlastIdx=grids.length-1letlastNum=grids[lastIdx].numfor(leti=grids.l</div>
                    </li>
                    <li><a href="/article/1892501610588860416.htm"
                           title="java实现,使用向量相似度 输入字符串,在定义好的字符串集合中根据语义匹配出最准的一个。" target="_blank">java实现,使用向量相似度 输入字符串,在定义好的字符串集合中根据语义匹配出最准的一个。</a>
                        <span class="text-muted">melck</span>
<a class="tag" taget="_blank" href="/search/1024%E7%A8%8B%E5%BA%8F%E5%91%98%E8%8A%82/1.htm">1024程序员节</a>
                        <div>以下是完整的Java示例代码,包括字符串集合的定义和根据输入字符串匹配最相似字符串的逻辑:importjava.util.*;publicclassSemanticMatching{publicstaticvoidmain(String[]args){//定义字符串集合ListstringCollection=Arrays.asList("Whereistherestroom?","Canyout</div>
                    </li>
                    <li><a href="/article/1892494551290015744.htm"
                           title="UDP通信开发" target="_blank">UDP通信开发</a>
                        <span class="text-muted">Charary</span>
<a class="tag" taget="_blank" href="/search/udp/1.htm">udp</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>开发流程:UDP本身不考虑链接,不存在客户和服务器的概念,UDP开发只有三步:创建UDP的套接字socket(AF_INET,SOCK_DGRAM,0)绑定自己的属性bindUDP随意的发送和接收数据sendto/recvfromUDP接口函数:sendto()函数功能:UDP专用的发送函数函数原型:ssize_tsendto(intsockfd,//套接字constvoid*buf,//待发送的</div>
                    </li>
                    <li><a href="/article/1892492536317014016.htm"
                           title="顺序表,链表,栈" target="_blank">顺序表,链表,栈</a>
                        <span class="text-muted">于冬恋</span>
<a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a>
                        <div>(1)顺序表1.顺序表的定义:【1】.静态分配(大小固定,无法改变)#include#include#definemax10usingnamespacestd;typedefstruct{intdate[max];intlenth;}seqlist;voidinitlist(seqlist&L){for(inti=0;i#include#defineinitsize10usingnamespace</div>
                    </li>
                    <li><a href="/article/1892490897438863360.htm"
                           title="Anaconda 环境克隆、迁移 ,用Anaconda里面的conda命令创建虚拟环境并克隆环境或者复旧电脑实验环境包、_conda复制环境" target="_blank">Anaconda 环境克隆、迁移 ,用Anaconda里面的conda命令创建虚拟环境并克隆环境或者复旧电脑实验环境包、_conda复制环境</a>
                        <span class="text-muted">好像要长脑子了1</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/conda/1.htm">conda</a>
                        <div>###9、设置国内镜像http://Anaconda.org的服务器在国外,安装多个packages时,conda下载的速度经常很慢。清华TUNA镜像源有Anaconda仓库的镜像,将其加入conda的配置即可:#添加Anaconda的TUNA镜像condaconfig--addchannelshttps://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/f</div>
                    </li>
                    <li><a href="/article/1892485222465859584.htm"
                           title="34、深度学习-自学之路-深入理解-NLP自然语言处理-RNN一个简单的程序,可以从程序中理解RNN的基本思想。" target="_blank">34、深度学习-自学之路-深入理解-NLP自然语言处理-RNN一个简单的程序,可以从程序中理解RNN的基本思想。</a>
                        <span class="text-muted">小宇爱</span>
<a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0-%E8%87%AA%E5%AD%A6%E4%B9%8B%E8%B7%AF/1.htm">深度学习-自学之路</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a><a class="tag" taget="_blank" href="/search/rnn/1.htm">rnn</a>
                        <div>importsys,random,mathfromcollectionsimportCounterimportnumpyasnpf=open('tasks_1-20_v1/en/qa1_single-supporting-fact_train.txt','r')raw=f.readlines()f.close()tokens=list()forlineinraw[0:1000]:tokens.ap</div>
                    </li>
                    <li><a href="/article/1892474123364397056.htm"
                           title="GATK3.5GATK4.0与java版本的关系" target="_blank">GATK3.5GATK4.0与java版本的关系</a>
                        <span class="text-muted">探序基因</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>探序基因肿瘤研究院整理操作系统centosstream9yum安装java后,输入java-version可看到:openjdkversion"11.0.20.1"2023-08-24LTSOpenJDKRuntimeEnvironment(Red_Hat-11.0.20.1.1-2)(build11.0.20.1+1-LTS)OpenJDK64-BitServerVM(Red_Hat-11.0.</div>
                    </li>
                    <li><a href="/article/1892471976795107328.htm"
                           title="前端导出word文件—包含canvas(echarts图表)" target="_blank">前端导出word文件—包含canvas(echarts图表)</a>
                        <span class="text-muted">Liuer_Qin</span>
<a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/canvas/1.htm">canvas</a><a class="tag" taget="_blank" href="/search/echarts/1.htm">echarts</a><a class="tag" taget="_blank" href="/search/echarts/1.htm">echarts</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>一、使用的插件html-docx-js二、整体思路因为canvas是运行在内存中的,所以不能简单的通过dom获取canvas图片,需要手动的先将canvas转为image。三、实现先克隆要下载的DOM的副本。因为canvas是运行在内存中的,所以也不能通过cloneNode方法克隆下来(克隆下来是空的)。我们这里将原DOM中的canvas转成图片,然后插入到副本的对应位置,这样操作不会影响原DOM</div>
                    </li>
                    <li><a href="/article/1892464031814447104.htm"
                           title="2025年2月9日(数据分析_2)" target="_blank">2025年2月9日(数据分析_2)</a>
                        <span class="text-muted">Mason Lin</span>
<a class="tag" taget="_blank" href="/search/Python%E5%AD%A6%E4%B9%A0/1.htm">Python学习</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a>
                        <div>散点图frommatplotlibimportpyplotaspltfrommatplotlibimportfont_manager#字体相关#字体font_path=r"C:\Windows\Fonts\msyh.ttc"my_font=font_manager.FontProperties(fname=font_path)x=list(range(31))x2=list(range(31,62</div>
                    </li>
                    <li><a href="/article/1892461756320641024.htm"
                           title="hget和get redis_redis get hget 区别" target="_blank">hget和get redis_redis get hget 区别</a>
                        <span class="text-muted">weixin_39615257</span>
<a class="tag" taget="_blank" href="/search/hget%E5%92%8Cget/1.htm">hget和get</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a>
                        <div>下标是从0开始的,接着上面例子redis>substrk08"hello,wor"redis>getk"hello,world"3.listredis的list类型其实就是一个每个子元素都......String–>SETNG“NewGrand”–>ok–>GETNG–“NewGrand”Redis常用命令?Hash–HSET–HGET–HEXISTS–HDEL应用场景:存储用户信息......5</div>
                    </li>
                    <li><a href="/article/1892461251104141312.htm"
                           title="Playwright 入门介绍和使用指南" target="_blank">Playwright 入门介绍和使用指南</a>
                        <span class="text-muted">IT鱼多多</span>
<a class="tag" taget="_blank" href="/search/Python%E5%9F%BA%E7%A1%80/1.htm">Python基础</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Python%E6%8E%A5%E5%8F%A3%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6/1.htm">Python接口测试框架</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/Playwright/1.htm">Playwright</a>
                        <div>Playwright入门介绍,Playwright使用指南请参考另一篇博客此博客为Playwright官网:译文希望让读者可以快速了解Playwriht可以用来做什么,怎么用。有些专业名词可能翻译不准确哈文章目录1.入门1.1Installation安装1.1.1AddExampleTest添加示例测试1.1.2RunningtheExampleTest运行示例测试1.2WritingTests编</div>
                    </li>
                    <li><a href="/article/1892458724304416768.htm"
                           title="Python-tkinter自制登录界面(含注册)" target="_blank">Python-tkinter自制登录界面(含注册)</a>
                        <span class="text-muted">GCHEK</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>简单的用户登录、注册界面importtkinterastkimporttimeimportsubprocessimportsysimportosimporttkinter.messageboxwindow=tk.Tk()window.title('GCHEK')window.geometry('400x300')#设置储存用户信息的容器,这里用的txt。ifnotos.path.exists('U</div>
                    </li>
                    <li><a href="/article/1892458219784171520.htm"
                           title="【干货】视频文件抽帧(opencv和ffmpeg方式对比)" target="_blank">【干货】视频文件抽帧(opencv和ffmpeg方式对比)</a>
                        <span class="text-muted">zkFun</span>
<a class="tag" taget="_blank" href="/search/%E8%B6%85%E7%A1%AC%E5%B9%B2%E8%B4%A7/1.htm">超硬干货</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/opencv/1.htm">opencv</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>1废话不多说,直接上代码opencv方式importtimeimportsubprocessimportcv2,osfrommathimportceildefextract_frames_opencv(video_path,output_folder,frame_rate=1):"""使用OpenCV从视频中抽取每秒指定帧数的帧,并保存到指定文件夹。如果视频长度不是整数秒,则会在最后一帧时补充空白</div>
                    </li>
                    <li><a href="/article/1892456456029007872.htm"
                           title="Python爬虫requests(详细)" target="_blank">Python爬虫requests(详细)</a>
                        <span class="text-muted">dme.</span>
<a class="tag" taget="_blank" href="/search/Python%E7%88%AC%E8%99%AB%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8/1.htm">Python爬虫零基础入门</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>本文来学爬虫使用requests模块的常见操作。1.URL参数无论是在发送GET/POST请求时,网址URL都可能会携带参数,例如:http://www.5xclass.cn?age=19&name=dengres=requests.get(url="https://www.5xclass.cn?age=19&name=deng")res=requests.get(url="https://www</div>
                    </li>
                    <li><a href="/article/1892441060429328384.htm"
                           title="【学习笔记】Elasticsearch之环境搭建" target="_blank">【学习笔记】Elasticsearch之环境搭建</a>
                        <span class="text-muted">聪明马的博客</span>
<a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a>
                        <div>Elasticsearch官网本文是自己在学习Elasticsearch的过程中,记下的觉得非常有用的笔记,希望对大家认识Elasticsearch有一点点帮助。1.什么是Elasticsearch官网上是这么介绍的:Elasticsearchisadistributeddocumentstore.Insteadofstoringinformationasrowsofcolumnardata,El</div>
                    </li>
                    <li><a href="/article/1892440430042214400.htm"
                           title="还不会Mybaits吗?一招解决" target="_blank">还不会Mybaits吗?一招解决</a>
                        <span class="text-muted">聪明马的博客</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                        <div>MyBatis是一种优秀的JavaORM框架,它可以帮助开发人员轻松地管理数据库,并提供了一种简单易懂的编程模型,以便于快速地进行数据库访问操作。MyBatis的出现为Java开发人员提供了一种更加高效和灵活的数据访问方式。在本篇博客中,我们将深入了解MyBatis的含义,各种用法以及如何使用Java代码来实现各种操作。一、MyBatis的含义MyBatis是一种开源的JavaORM框架,它可以帮</div>
                    </li>
                    <li><a href="/article/1892439923475148800.htm"
                           title="Git Submodule用的多吗?" target="_blank">Git Submodule用的多吗?</a>
                        <span class="text-muted">Eleven</span>
<a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/%E5%85%A8%E6%A0%88%E5%B7%A5%E7%A8%8B%E5%B8%88/1.htm">全栈工程师</a>
                        <div>接上篇文章,再来一起学习下gitsubmodule。我之前在项目中遇到过这种情况:多团队开发微信小程序,一个主包有很多分包的,做法是在主包里用一个脚本文件管理各分包的情况。主包在编译前,需执行一下这个脚本文件,已便于update各分包。GitSubmodule是Git提供的一种管理项目依赖的方式,允许你将一个Git仓库作为另一个Git仓库的子目录。这种方式非常适合管理项目依赖的第三方库或模块化开发</div>
                    </li>
                    <li><a href="/article/1892437431316180992.htm"
                           title="chatgpt pro是什么?和chatgpt plus有什么区别?如何升级chatgpt pro?" target="_blank">chatgpt pro是什么?和chatgpt plus有什么区别?如何升级chatgpt pro?</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/chatgpt/1.htm">chatgpt</a>
                        <div>chatgptpro是什么?chatGPTPro是openAI推出的目前最高级别的付费订阅服务,一个月200美元.这对于一般用户来说是一个比较昂贵的费用。chatgptpro和chatgptplus有什么区别?chatGPTPlus官网原文:EverythinginFreeExtendedlimitsonmessaging,fileuploads,advanceddataanalysis,andi</div>
                    </li>
                    <li><a href="/article/1892434902729682944.htm"
                           title="发送http请求" target="_blank">发送http请求</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a>
                        <div>发起GET请求usereqwest::Client;usetokio;#[tokio::main]asyncfnmain()->Result>{//创建reqwest客户端letclient=Client::new();//发起GET请求letresponse=client.get("https://jsonplaceholder.typicode.com/posts/1").send().awa</div>
                    </li>
                    <li><a href="/article/1892431724265140224.htm"
                           title="React学习笔记(组件通信)_千峰教育 react" target="_blank">React学习笔记(组件通信)_千峰教育 react</a>
                        <span class="text-muted">m0_54846402</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>reduxprinciple-+//定义一个dispatch的方法,接收到动作之后,自动调用constdispatch=(action)=>{changeState(action)renderCount(countState)}```创建createStore方法Reduxprinciple02reduxprinciple-+//定义一个方法,用于集中管理state和dispatchconstcr</div>
                    </li>
                    <li><a href="/article/1892426922990825472.htm"
                           title="[附源码]计算机毕业设计基于SpringBoot的小说阅读系统" target="_blank">[附源码]计算机毕业设计基于SpringBoot的小说阅读系统</a>
                        <span class="text-muted">计算机毕设程序设计</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>项目运行环境配置:Jdk1.8+Tomcat7.0+Mysql+HBuilderX(Webstorm也行)+Eclispe(IntelliJIDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:SSM+mybatis+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.ID</div>
                    </li>
                    <li><a href="/article/1892426670128820224.htm"
                           title="瑞芯微平台RK3568系统开发(9)移远EC20 4G模块驱动调试" target="_blank">瑞芯微平台RK3568系统开发(9)移远EC20 4G模块驱动调试</a>
                        <span class="text-muted">龙猫不是猫!</span>
<a class="tag" taget="_blank" href="/search/%E7%91%9E%E8%8A%AF%E5%BE%AE%E5%B9%B3%E5%8F%B0%E5%BC%80%E5%8F%91/1.htm">瑞芯微平台开发</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a><a class="tag" taget="_blank" href="/search/%E7%91%9E%E8%8A%AF%E5%BE%AE/1.htm">瑞芯微</a><a class="tag" taget="_blank" href="/search/RK/1.htm">RK</a>
                        <div>1.在RK3568开发板上调试4G(EC20)驱动1.1查看RK3568关于4G模块的原理图,获取需要配置的信息1.2需要配置的信息如下14G模块电源使能引脚GPIO4_C324G模块W_DISABLE1引脚GPIO4_B534G模块复位引脚GPIO4_B41.3DTS配置如下{rk_modem:rk-modem{compatible="4g-modem-platdata";pinctrl-nam</div>
                    </li>
                    <li><a href="/article/1892419734998151168.htm"
                           title="【后端】k8s" target="_blank">【后端】k8s</a>
                        <span class="text-muted">骑鱼过海的猫123</span>
<a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a>
                        <div>1.命令1.1获取service服务获取集群内所有命名空间的service服务sudokubectlgetservice--all-namespaces获取集群内指定命名空间的service服务sudokubectlgetservice-n命名空间当权限限制到一个命名空间时,只能使用下面这个sudokubectl-n命名空间getservice获取集群内当前命名空间的service服务sudoku</div>
                    </li>
                    <li><a href="/article/1892410909121376256.htm"
                           title="xml DOM高级" target="_blank">xml DOM高级</a>
                        <span class="text-muted">夜夜yaya</span>
<a class="tag" taget="_blank" href="/search/WSDL%E8%A7%A3%E6%9E%90/1.htm">WSDL解析</a>
                        <div>XMLDOM(DocumentObjectModel)定义了访问和操作XML文档的标准方法。XMLDOMDOM把XML文档视为一种树结构。通过这个DOM树,可以访问所有的元素。可以修改它们的内容(文本以及属性),而且可以创建新的元素。元素,以及它们的文本和属性,均被视为节点。在本教程的较早章节中,我们介绍了XMLDOM,并使用了XMLDOM的getElementsByTagName()从DOM树中</div>
                    </li>
                    <li><a href="/article/1892407248836161536.htm"
                           title="uniapp 使用web-view 来套地址实现分离式打包" target="_blank">uniapp 使用web-view 来套地址实现分离式打包</a>
                        <span class="text-muted">luckycoke</span>
<a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>exportdefault{data(){return{title:'http://www.baidu.cn/'//你可以根据需要替换成你的URL};},mounted(){//在应用启动时清除本地缓存this.clearAppCache();},methods:{clearAppCache(){if(uni.getSystemInfoSync().platform==='android'){//</div>
                    </li>
                    <li><a href="/article/1892407250018955264.htm"
                           title="自动化的抖音" target="_blank">自动化的抖音</a>
                        <span class="text-muted">luckycoke</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a>
                        <div>文件命名main.jsvaruiModule=require("ui_module.js");if(!auto.service){toast("请开启无障碍服务");auto.waitFor();}varisRunning=true;varswipeCount=0;vartargetSwipeCount=random(1,10);varwindow=uiModule.createUI();uiMo</div>
                    </li>
                    <li><a href="/article/1892392249963114496.htm"
                           title="LQB(4)-python-DFS搜索" target="_blank">LQB(4)-python-DFS搜索</a>
                        <span class="text-muted">AAA顶置摸鱼</span>
<a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AFpython%E7%BB%84/1.htm">蓝桥杯python组</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E4%BC%98%E5%85%88/1.htm">深度优先</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AF/1.htm">蓝桥杯</a>
                        <div>前言DFS即深度优先搜索(Depth-FirstSearch),是一种用于遍历或搜索树或图的算法,有三种核心的应用场景(基础遍历、回溯、剪枝)。一、DFS-基础遍历1.核心原理深度优先搜索(DFS)是一种遍历或搜索树/图的算法,优先沿着一条路径尽可能深入,直到无法继续再回溯。实现方式:递归:隐式利用系统调用栈。栈模拟:显式使用栈数据结构。2.代码实现(1)递归实现(树结构)classTreeNod</div>
                    </li>
                    <li><a href="/article/1892387966651789312.htm"
                           title="Python's SQLAlchemy and Object-Relational Mapping" target="_blank">Python's SQLAlchemy and Object-Relational Mapping</a>
                        <span class="text-muted">zhanglizhuo</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a>
                        <div>Acommontaskwhenprogramminganywebserviceistheconstructionofasoliddatabasebackend.Inthepast,programmerswouldwriterawSQLstatements,passthemtothedatabaseengineandparsethereturnedresultsasanormalarrayofrec</div>
                    </li>
                                <li><a href="/article/31.htm"
                                       title="312个免费高速HTTP代理IP(能隐藏自己真实IP地址)" target="_blank">312个免费高速HTTP代理IP(能隐藏自己真实IP地址)</a>
                                    <span class="text-muted">yangshangchuan</span>
<a class="tag" taget="_blank" href="/search/%E9%AB%98%E9%80%9F/1.htm">高速</a><a class="tag" taget="_blank" href="/search/%E5%85%8D%E8%B4%B9/1.htm">免费</a><a class="tag" taget="_blank" href="/search/superword/1.htm">superword</a><a class="tag" taget="_blank" href="/search/HTTP%E4%BB%A3%E7%90%86/1.htm">HTTP代理</a>
                                    <div>  
  
124.88.67.20:843
190.36.223.93:8080
117.147.221.38:8123
122.228.92.103:3128
183.247.211.159:8123
124.88.67.35:81
112.18.51.167:8123
218.28.96.39:3128
49.94.160.198:3128
183.20</div>
                                </li>
                                <li><a href="/article/158.htm"
                                       title="pull解析和json编码" target="_blank">pull解析和json编码</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/pull%E8%A7%A3%E6%9E%90/1.htm">pull解析</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a>
                                    <div>n.json文件: 
[{name:java,lan:c++,age:17},{name:android,lan:java,age:8}] 
  
pull.xml文件 
<?xml version="1.0" encoding="utf-8"?> 
<stu> 
    <name>java</div>
                                </li>
                                <li><a href="/article/285.htm"
                                       title="[能源与矿产]石油与地球生态系统" target="_blank">[能源与矿产]石油与地球生态系统</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E8%83%BD%E6%BA%90/1.htm">能源</a>
                                    <div> 
      按照苏联的科学界的说法,石油并非是远古的生物残骸的演变产物,而是一种可以由某些特殊地质结构和物理条件生产出来的东西,也就是说,石油是可以自增长的.... 
 
      那么我们做一个猜想: 石油好像是地球的体液,我们地球具有自动产生石油的某种机制,只要我们不过量开采石油,并保护好</div>
                                </li>
                                <li><a href="/article/412.htm"
                                       title="类与对象浅谈" target="_blank">类与对象浅谈</a>
                                    <span class="text-muted">沐刃青蛟</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80/1.htm">基础</a>
                                    <div> 
       类,字面理解,便是同一种事物的总称,比如人类,是对世界上所有人的一个总称。而对象,便是类的具体化,实例化,是一个具体事物,比如张飞这个人,就是人类的一个对象。但要注意的是:张飞这个人是对象,而不是张飞,张飞只是他这个人的名字,是他的属性而已。而一个类中包含了属性和方法这两兄弟,他们分别用来描述对象的行为和性质(感觉应该是</div>
                                </li>
                                <li><a href="/article/539.htm"
                                       title="新站开始被收录后,我们应该做什么?" target="_blank">新站开始被收录后,我们应该做什么?</a>
                                    <span class="text-muted">IT独行者</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/seo/1.htm">seo</a>
                                    <div>新站开始被收录后,我们应该做什么? 
  
      百度终于开始收录自己的网站了,作为站长,你是不是觉得那一刻很有成就感呢,同时,你是不是又很茫然,不知道下一步该做什么了?至少我当初就是这样,在这里和大家一份分享一下新站收录后,我们要做哪些工作。 
      至于如何让百度快速收录自己的网站,可以参考我之前的帖子《新站让百</div>
                                </li>
                                <li><a href="/article/666.htm"
                                       title="oracle 连接碰到的问题" target="_blank">oracle 连接碰到的问题</a>
                                    <span class="text-muted">文强chu</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>Unable to find a java Virtual Machine--安装64位版Oracle11gR2后无法启动SQLDeveloper的解决方案 
作者:草根IT网 来源:未知 人气:813标签: 
导读:安装64位版Oracle11gR2后发现启动SQLDeveloper时弹出配置java.exe的路径,找到Oracle自带java.exe后产生的路径“C:\app\用户名\prod</div>
                                </li>
                                <li><a href="/article/793.htm"
                                       title="Swing中按ctrl键同时移动鼠标拖动组件(类中多借口共享同一数据)" target="_blank">Swing中按ctrl键同时移动鼠标拖动组件(类中多借口共享同一数据)</a>
                                    <span class="text-muted">小桔子</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%BB%A7%E6%89%BF/1.htm">继承</a><a class="tag" taget="_blank" href="/search/swing/1.htm">swing</a><a class="tag" taget="_blank" href="/search/%E6%8E%A5%E5%8F%A3/1.htm">接口</a><a class="tag" taget="_blank" href="/search/%E7%9B%91%E5%90%AC/1.htm">监听</a>
                                    <div>        都知道java中类只能单继承,但可以实现多个接口,但我发现实现多个接口之后,多个接口却不能共享同一个数据,应用开发中想实现:当用户按着ctrl键时,可以用鼠标点击拖动组件,比如说文本框。 
编写一个监听实现KeyListener,NouseListener,MouseMotionListener三个接口,重写方法。定义一个全局变量boolea</div>
                                </li>
                                <li><a href="/article/920.htm"
                                       title="linux常用的命令" target="_blank">linux常用的命令</a>
                                    <span class="text-muted">aichenglong</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/1.htm">常用命令</a>
                                    <div>1 startx切换到图形化界面 
2 man命令:查看帮助信息 
 man 需要查看的命令,man命令提供了大量的帮助信息,一般可以分成4个部分 
 name:对命令的简单说明 
 synopsis:命令的使用格式说明 
 description:命令的详细说明信息 
 options:命令的各项说明 
3 date:显示时间 
 语法:date [OPTION]... [+FORMAT] 
 </div>
                                </li>
                                <li><a href="/article/1047.htm"
                                       title="eclipse内存优化" target="_blank">eclipse内存优化</a>
                                    <span class="text-muted">AILIKES</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a>
                                    <div>一 基本说明      在JVM中,总体上分2块内存区,默认空余堆内存小于 40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。     1)堆内存(Heap memory):堆是运行时数据区域,所有类实例和数组的内存均从此处分配,是Java代码可及的内存,是留给开发人</div>
                                </li>
                                <li><a href="/article/1174.htm"
                                       title="关键字的使用探讨" target="_blank">关键字的使用探讨</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/%E5%85%B3%E9%94%AE%E5%AD%97/1.htm">关键字</a>
                                    <div>//关键字的使用探讨/*访问关键词private 只能在本类中访问public 只能在本工程中访问protected 只能在包中和子类中访问默认的 只能在包中访问*//*final   类 方法 变量 final 类 不能被继承  final 方法 不能被子类覆盖,但可以继承 final 变量 只能有一次赋值,赋值后不能改变 final 不能用来修饰构造方法*///this()</div>
                                </li>
                                <li><a href="/article/1301.htm"
                                       title="JS中定义对象的几种方式" target="_blank">JS中定义对象的几种方式</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/js/1.htm">js</a>
                                    <div>    1. 基于已有对象扩充其对象和方法(只适合于临时的生成一个对象): 
<html>
<head>
    <title>基于已有对象扩充其对象和方法(只适合于临时的生成一个对象)</title>
</head>
<script>
    var obj = new Object();
 </div>
                                </li>
                                <li><a href="/article/1428.htm"
                                       title="表驱动法实例" target="_blank">表驱动法实例</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%A1%A8%E9%A9%B1%E5%8A%A8%E6%B3%95/1.htm">表驱动法</a><a class="tag" taget="_blank" href="/search/TDD/1.htm">TDD</a>
                                    <div>获得月的天数是典型的直接访问驱动表方式的实例,下面我们来展示一下: 
MonthDaysTest.java 
package com.study.test;

import org.junit.Assert;
import org.junit.Test;

import com.study.MonthDays;

public class MonthDaysTest {

	@T</div>
                                </li>
                                <li><a href="/article/1555.htm"
                                       title="LInux启停重启常用服务器的脚本" target="_blank">LInux启停重启常用服务器的脚本</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>启动,停止和重启常用服务器的Bash脚本,对于每个服务器,需要根据实际的安装路径做相应的修改 
  
#! /bin/bash

Servers=(Apache2, Nginx, Resin, Tomcat, Couchbase, SVN, ActiveMQ, Mongo);
Ops=(Start, Stop, Restart);
currentDir=$(pwd);
echo</div>
                                </li>
                                <li><a href="/article/1682.htm"
                                       title="【HBase六】REST操作HBase" target="_blank">【HBase六】REST操作HBase</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/hbase/1.htm">hbase</a>
                                    <div>HBase提供了REST风格的服务方便查看HBase集群的信息,以及执行增删改查操作 
  1. 启动和停止HBase REST 服务 1.1 启动REST服务 
前台启动(默认端口号8080) 
[hadoop@hadoop bin]$ ./hbase rest start 
  
后台启动 
hbase-daemon.sh start rest 
  
启动时指定</div>
                                </li>
                                <li><a href="/article/1809.htm"
                                       title="大话zabbix 3.0设计假设" target="_blank">大话zabbix 3.0设计假设</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>What’s new in Zabbix 2.0? 
去年开始使用Zabbix的时候,是1.8.X的版本,今年Zabbix已经跨入了2.0的时代。看了2.0的release notes,和performance相关的有下面几个: 
 
          :: Performance improvements::Trigger related da</div>
                                </li>
                                <li><a href="/article/1936.htm"
                                       title="http错误码大全" target="_blank">http错误码大全</a>
                                    <span class="text-muted">byalias</span>
<a class="tag" taget="_blank" href="/search/http%E5%8D%8F%E8%AE%AE/1.htm">http协议</a><a class="tag" taget="_blank" href="/search/javaweb/1.htm">javaweb</a>
                                    <div>响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行。 
响应码分五种类型,由它们的第一位数字表示: 
1)1xx:信息,请求收到,继续处理 
2)2xx:成功,行为被成功地接受、理解和采纳 
3)3xx:重定向,为了完成请求,必须进一步执行的动作 
4)4xx:客户端错误,请求包含语法错误或者请求无法实现 
5)5xx:服务器错误,服务器不能实现一种明显无效的请求 
 
 
</div>
                                </li>
                                <li><a href="/article/2063.htm"
                                       title="J2EE设计模式-Intercepting Filter" target="_blank">J2EE设计模式-Intercepting Filter</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a>
                                    <div>Intercepting Filter类似于职责链模式 
有两种实现 
其中一种是Filter之间没有联系,全部Filter都存放在FilterChain中,由FilterChain来有序或无序地把把所有Filter调用一遍。没有用到链表这种数据结构。示例如下: 
 
 

package com.ljn.filter.custom;

import java.util.ArrayList;</div>
                                </li>
                                <li><a href="/article/2190.htm"
                                       title="修改jboss端口" target="_blank">修改jboss端口</a>
                                    <span class="text-muted">chicony</span>
<a class="tag" taget="_blank" href="/search/jboss/1.htm">jboss</a>
                                    <div>修改jboss端口 
  
%JBOSS_HOME%\server\{服务实例名}\conf\bindingservice.beans\META-INF\bindings-jboss-beans.xml 
  
中找到 
  
   <!-- The ports-default bindings are obtained by taking the base bindin</div>
                                </li>
                                <li><a href="/article/2317.htm"
                                       title="c++ 用类模版实现数组类" target="_blank">c++ 用类模版实现数组类</a>
                                    <span class="text-muted">CrazyMizzz</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a>
                                    <div>最近c++学到数组类,写了代码将他实现,基本具有vector类的功能 
 
 

#include<iostream>
#include<string>
#include<cassert>
using namespace std;
template<class T>
class Array
{
public:
	//构造函数 
	</div>
                                </li>
                                <li><a href="/article/2444.htm"
                                       title="hadoop dfs.datanode.du.reserved 预留空间配置方法" target="_blank">hadoop dfs.datanode.du.reserved 预留空间配置方法</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E9%A2%84%E7%95%99%E7%A9%BA%E9%97%B4/1.htm">预留空间</a>
                                    <div>对于datanode配置预留空间的方法 为:在hdfs-site.xml添加如下配置 
 <property> 
    <name>dfs.datanode.du.reserved</name> 
    <value>10737418240</value> 
  
 </div>
                                </li>
                                <li><a href="/article/2571.htm"
                                       title="mysql远程访问的设置" target="_blank">mysql远程访问的设置</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E9%98%B2%E7%81%AB%E5%A2%99/1.htm">防火墙</a>
                                    <div>第一步: 激活网络设置 你需要编辑mysql配置文件my.cnf. 通常状况,my.cnf放置于在以下目录: /etc/mysql/my.cnf (Debian linux) /etc/my.cnf (Red Hat Linux/Fedora Linux) /var/db/mysql/my.cnf (FreeBSD) 然后用vi编辑my.cnf,修改内容从以下行: [mysqld] 你所需要: 1</div>
                                </li>
                                <li><a href="/article/2698.htm"
                                       title="ios 使用特定的popToViewController返回到相应的Controller" target="_blank">ios 使用特定的popToViewController返回到相应的Controller</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/controller/1.htm">controller</a>
                                    <div>1、取navigationCtroller中的Controllers
NSArray * ctrlArray = self.navigationController.viewControllers;
2、取出后,执行,
[self.navigationController popToViewController:[ctrlArray objectAtIndex:0] animated:YES</div>
                                </li>
                                <li><a href="/article/2825.htm"
                                       title="Linux正则表达式和通配符的区别" target="_blank">Linux正则表达式和通配符的区别</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/%E9%80%9A%E9%85%8D%E7%AC%A6%E5%92%8C%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E5%8C%BA%E5%88%AB/1.htm">通配符和正则表达式的区别</a><a class="tag" taget="_blank" href="/search/%E9%80%9A%E9%85%8D%E7%AC%A6/1.htm">通配符</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/1976579 
 
首先得明白二者是截然不同的 
通配符只能用在shell命令中,用来处理字符串的的匹配。 
判断一个命令是否为bash shell(linux 默认的shell)的内置命令 
 type -t commad  
返回结果含义 
 file  表示为外部命令 
 alias  表示该</div>
                                </li>
                                <li><a href="/article/2952.htm"
                                       title="Ubuntu Mysql Install and CONF" target="_blank">Ubuntu Mysql Install and CONF</a>
                                    <span class="text-muted">gengzg</span>
<a class="tag" taget="_blank" href="/search/Install/1.htm">Install</a>
                                    <div>http://www.navicat.com.cn/download/navicat-for-mysql
    Step1: 下载Navicat ,网址:http://www.navicat.com/en/download/download.html  
      
    Step2:进入下载目录,解压压缩包:tar -zxvf  navicat11_mysql_en.tar.gz  </div>
                                </li>
                                <li><a href="/article/3079.htm"
                                       title="批处理,删除文件bat" target="_blank">批处理,删除文件bat</a>
                                    <span class="text-muted">huqiji</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/dos/1.htm">dos</a>
                                    <div>@echo off
::演示:删除指定路径下指定天数之前(以文件名中包含的日期字符串为准)的文件。
::如果演示结果无误,把del前面的echo去掉,即可实现真正删除。
::本例假设文件名中包含的日期字符串(比如:bak-2009-12-25.log)
rem 指定待删除文件的存放路径
set SrcDir=C:/Test/BatHome
rem 指定天数
set DaysAgo=1</div>
                                </li>
                                <li><a href="/article/3206.htm"
                                       title="跨浏览器兼容的HTML5视频音频播放器" target="_blank">跨浏览器兼容的HTML5视频音频播放器</a>
                                    <span class="text-muted">天梯梦</span>
<a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a>
                                    <div>HTML5的video和audio标签是用来在网页中加入视频和音频的标签,在支持html5的浏览器中不需要预先加载Adobe Flash浏览器插件就能轻松快速的播放视频和音频文件。而html5media.js可以在不支持html5的浏览器上使video和audio标签生效。    How to enable <video> and <audio> tags in </div>
                                </li>
                                <li><a href="/article/3333.htm"
                                       title="Bundle自定义数据传递" target="_blank">Bundle自定义数据传递</a>
                                    <span class="text-muted">hm4123660</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/Serializable/1.htm">Serializable</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E4%BC%A0%E9%80%92/1.htm">自定义数据传递</a><a class="tag" taget="_blank" href="/search/Bundle/1.htm">Bundle</a><a class="tag" taget="_blank" href="/search/Parcelable/1.htm">Parcelable</a>
                                    <div>      我们都知道Bundle可能过put****()方法添加各种基本类型的数据,Intent也可以通过putExtras(Bundle)将数据添加进去,然后通过startActivity()跳到下一下Activity的时候就把数据也传到下一个Activity了。如传递一个字符串到下一个Activity 
  
把数据放到Intent</div>
                                </li>
                                <li><a href="/article/3460.htm"
                                       title="C#:异步编程和线程的使用(.NET 4.5 )" target="_blank">C#:异步编程和线程的使用(.NET 4.5 )</a>
                                    <span class="text-muted">powertoolsteam</span>
<a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/%E5%BC%82%E6%AD%A5%E7%BC%96%E7%A8%8B/1.htm">异步编程</a>
                                    <div>异步编程和线程处理是并发或并行编程非常重要的功能特征。为了实现异步编程,可使用线程也可以不用。将异步与线程同时讲,将有助于我们更好的理解它们的特征。 
本文中涉及关键知识点 
1. 异步编程 
2. 线程的使用 
3. 基于任务的异步模式 
4. 并行编程 
5. 总结 
 
  异步编程  
 
什么是异步操作?异步操作是指某些操作能够独立运行,不依赖主流程或主其他处理流程。通常情况下,C#程序</div>
                                </li>
                                <li><a href="/article/3587.htm"
                                       title="spark 查看 job history 日志" target="_blank">spark 查看 job history 日志</a>
                                    <span class="text-muted">Stark_Summer</span>
<a class="tag" taget="_blank" href="/search/%E6%97%A5%E5%BF%97/1.htm">日志</a><a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a><a class="tag" taget="_blank" href="/search/history/1.htm">history</a><a class="tag" taget="_blank" href="/search/job/1.htm">job</a>
                                    <div>SPARK_HOME/conf 下:  
spark-defaults.conf 增加如下内容 
spark.eventLog.enabled true spark.eventLog.dir hdfs://master:8020/var/log/spark spark.eventLog.compress true  
spark-env.sh 增加如下内容 
export SP</div>
                                </li>
                                <li><a href="/article/3714.htm"
                                       title="SSH框架搭建" target="_blank">SSH框架搭建</a>
                                    <span class="text-muted">wangxiukai2015eye</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a>
                                    <div>MyEclipse搭建SSH框架 Struts Spring Hibernate 
1、new一个web project。 
2、右键项目,为项目添加Struts支持。 
   选择Struts2 Core Libraries -<MyEclipes-Library> 
     点击Finish。src目录下多了struts</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>