HLS 协议入门指南以及延迟优化策略

HLS是什么

HLS是HTTP Live Streaming 的缩写,是由苹果公司推出的基于HTTP的能自适应的流媒体传输协议,常用于直播和点播。

HLS 的工作原理是当推流端把视频流推到服务端后,服务端会把视频流切割成一个个小的媒体文件(一般是ts文件,也有可能是fmp4文件)。然后服务器会把这些媒体文件的播放地址按照播放顺序罗列到一个索引文件当中,供客户端查找可以的媒体流。这个索引文件也就是我们平时在播放hls视频的时候,最常见到的m3u8文件。

image.png

码率自适应

为了能够适应观众的不同网络环境,服务端会以不同的比特率和分辨率创建多个流,并把不同流的媒体文件地址放到了不同的索引文件(media playlist)当中,并最终把不同流的索引文件的地址放到一个主索引文件中(master playlist)。

image.png

客户端在播放HLS媒体流时,能够基于当前的网络情况,选择当前可流畅播放的最高分辨率的媒体流进行播放。

image.png

M3U8文件详解

对于HLS客户端来讲,最先要面对的并需要播放的媒体文件,而是告知客户端从何获取媒体文件的索引(M3U8)文件。所以对于HLS客户端来说,最首要的事情是对M3U8文件进行解析。

从上面的介绍我们能够知道,索引文件分为两种类型,一种是 master playlist,一种是 media playlist。

media playlist

media playlist 内部存放着一系列媒体片段资源,客户端只要顺序播放这些媒体片段资源,就能够完整地播放服务端提供地媒体资源。

media playlist 文件地格式如下所示:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:11
#EXTINF:10.000,
url_462/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_463/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_464/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_465/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_466/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_467/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_468/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:9.950,
url_469/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.050,
url_470/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_471/193039199_mp4_h264_aac_hd_7.ts
#EXTINF:10.000,
url_472/193039199_mp4_h264_aac_hd_7.ts
#EXT-X-ENDLIST

master playlist

master playlist 文件内记录着多个 media playlist 文件的地址,这些 media playlist 文件指向到的媒体文件的码率、格式各不相同。同时,还能够提供不同语言的音频文件,以及不同角度拍摄的视频文件等等。客户端能够根据用户不同的网络环境,或者是不同的语言、兴趣爱好的因素选择合适的媒体资源。

maser playlist 文件的格式如下所示:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2149280,CODECS="mp4a.40.2,avc1.64001f",RESOLUTION=1280x720,NAME="720"
url_0/193039199_mp4_h264_aac_hd_7.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=246440,CODECS="mp4a.40.5,avc1.42000d",RESOLUTION=320x184,NAME="240"
url_2/193039199_mp4_h264_aac_ld_7.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=460560,CODECS="mp4a.40.5,avc1.420016",RESOLUTION=512x288,NAME="380"
url_4/193039199_mp4_h264_aac_7.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=836280,CODECS="mp4a.40.2,avc1.64001f",RESOLUTION=848x480,NAME="480"
url_6/193039199_mp4_h264_aac_hq_7.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=6221600,CODECS="mp4a.40.2,avc1.640028",RESOLUTION=1920x1080,NAME="1080"
url_8/193039199_mp4_h264_aac_fhd_7.m3u8

M3U8文件格式解析

playlist 文件定义

M3U8 文件必须以 UTF-8 [ RFC3629 ] 进行编码,不能包含 Byte Order Mark(BOM)字节序, 不能包含 UTF-8 控制字符(U+0000 到 U+001F 和 U+007F 至 U+009F),CR (U+000D) 和 LF 除外(U+000A)。

M3U8 文件的每行的内容只能是以下三种中的其中一种。

  • URI
  • 空行
  • 以 # 开头的字符串

除了明确指定的元素之外不能有空格的存在。

以字符“#”开头的行要么是注释,要么是标签。标签以 #EXT 开头,大小写敏感。其他以“#”开头的行都是注释,客户端解析时应该忽略掉。

属性列表

某些特定的标签的值是一个属性列表。

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2149280,CODECS="mp4a.40.2,avc1.64001f",RESOLUTION=1280x720,NAME="720"

属性列表以逗号作为分隔符,分离出多组不带空格的 AttributeName=AttributeValue 对。如上面的EXT-X-STREAM-INF属性能够分离出:

# AttributeName=AttributeValue
PROGRAM-ID=1,
BANDWIDTH=2149280,
CODECS="mp4a.40.2,avc1.64001f",
RESOLUTION=1280x720,
NAME="720"

标签

标签用于说明 M3U8 文件的全局参数,以及 切片文件和媒体播放列表 的信息。标签可分以下几种:

  • 基础标签(Basic Tags)
  • 媒体片段标签(Media Segment Tags)
  • 媒体播放列表标签(Media Playlist Tags)
  • 主播放列表标签 (Master Playlist Tags)
  • 媒体播放列表或主播放列表都使用的标签(Media or Master Playlist Tags)

下面会分别介绍这几种类型中一些比较重要和常用的标签。

基础标签(Basic Tags)

基础标签既能够媒体播放列表(Media Playlist)中使用,也可以在主播放列表(Master Playlist)中使用。

  • EXTM3U:每个 M3U8 文件必须将该标签放置在第一行,表明该文件是一个 M3U8 文件。
  • EXT-X-VERSION:表示 HLS 协议的版本号,该标签与流媒体的兼容性相关。该标签为一个全局参数,能够在整个 M3U8 文件中进行使用。每个 M3U8 文件内最多只能出现一个版本定义。如果 M3U8 文件内不包含该标签,则默认1。

媒体播放列表标签(Media Playlist Tags)

媒体播放列表标签为 M3U8 文件的全局参数信息并且只能在 M3U8 文件中至多出现一次。媒体播放列表标签只能出现而在媒体播放列表(Media Playlist)当中,而不能出现在主播放列表(Master Playlist)中。

EXT-X-TARGETDURATION

表示所有媒体片段最大的时长(单位秒),为必选标签。

#EXT-X-TARGETDURATION:

EXT-X-MEDIA-SEQUENCE

表示播放列表第一个 URL 片段文件的序列号。每个媒体片段 URL 都拥有一个唯一的整型序列号,每个媒体片段序列号按出现顺序依次加 1。如果该标签未指定,则默认序列号从 0 开始。媒体片段序列号与片段文件名无关。

#EXT-X-MEDIA-SEQUENCE:
EXT-X-ENDLIST

表明 文件的结束,该标签可出现在 M3U8 文件任意位置,一般是结尾。

当media playlist中出现该标签时,则说明改媒体流是一个点播源而不是一个直播源

EXT-X-PLAYLIST-TYPE

用于指明流媒体类型,该标签为可选标签。
其格式为:

#EXT-X-PLAYLIST-TYPE:

其中:type-enum可为:

  • VOD:即 Video on Demand,表示该媒体流为点播源,因此服务器不能更改该 M3U8 文件;

  • EVENT:表示该媒体流为直播源,服务器不能更改或删除该 M3U8 文件任意部分内容,但是可以在文件末尾添加新内容。

VOD 文件通常带有 EXT-X-ENDLIST 标签,因为其为点播源,结束位置不会改变;而 EVEVT 文件初始化时一般不会有 EXT-X-ENDLIST 标签,暗示有新的文件会添加到播放列表末尾,因此也需要客户端定时获取该 M3U8 文件,以获取新的媒体片段资源,直到访问到 EXT-X-ENDLIST 标签才停止)。

EXT-X-I-FRAMES-ONLY

该标签全局生效,表示每个媒体片段都是一个 I 帧。I 帧编码时不需要依赖于其他帧,因此可以通过I 帧进行快速播放等操作。

#EXT-X-I-FRAMES-ONLY

如果媒体播放列表设置了 EXT-X-I-FRAMES-ONLY,那么媒体片段的时长(EXTINF 标签的值)即为当前媒体分片的 I 帧开始到下一个 I 帧出现的时长。
媒体资源如果包含I 帧切片,那么必须提供媒体初始化块或者通过 EXT-X-MAP 标签提供媒体初始化块的获取途径,这样客户端就能通过这些I 帧切片以任意顺序进行加载和解码。

媒体片段标签(Media Segment Tags)

每个媒体片段的 URI 前面都有一系列媒体片段标签,用于描述媒体片段的信息。有些片段标签只对其后切片资源有效,有些片段标签对其后所有切片都有效,直到后续遇到另一个相同的标签描述。媒体片段类型标签只能出现而在媒体播放列表(Media Playlist)当中,而不能出现在主播放列表(Master Playlist)中(因为媒体片段URI只会出现在媒体播放列表中)。

EXTINF

表示其后 URI 指定的媒体片段时长(单位为秒)。每个 URL 媒体片段之前必须指定该标签。该标签的使用格式为:

#EXTINF:,[]
</code></pre> 
 <p>其中,duration是一个十进制的整数或者浮点数,其值必须小于或等于 <code>EXT-X-TARGETDURATION</code> 指定的值。</p> 
 <h5><code>EXT-X-BYTERANGE</code></h5> 
 <p>该标签表示接下来的媒体片段资源只是其 URI 指定的媒体片段资源的局部范围(即截取 URI 媒体资源部分内容作为下一个切片)。该标签只对其后一个 URI 起作用。其格式为:</p> 
 <pre><code>#EXT-X-BYTERANGE:<length>[@<offset>]
</code></pre> 
 <p>其中, <code>length</code>是一个十进制整型,表示截取片段大小(单位:字节)。可选参数<code>offset</code>也是一个十进制整型,指示截取起始位置(以字节表示,在 URI 指定的资源开头移动该字节位置后进行截取)。如果<code>offset</code>未指定,则截取起始位置从上一个该标签截取完成的下一个字节(即上一个length+offset+1)开始截取。</p> 
 <p>如果没有指定该标签,则表明的切分范围为整个 URI 资源片段。</p> 
 <blockquote> 
  <p>使用 EXT-X-BYTERANGE 标签要求兼容版本号 EXT-X-VERSION 大于等于 4。</p> 
 </blockquote> 
 <h5><code>EXT-X-DISCONTINUITY</code></h5> 
 <p>表明标签之前媒体片段与下一个媒体片段之间存在中断。<br> 当以下任一情况变化时,必须使用该标签:</p> 
 <ol> 
  <li>文件格式(file format)</li> 
  <li>数字(number),类型(type),媒体标识符(identifiers of tracks)</li> 
  <li>时间戳序列(timestamp sequence)</li> 
 </ol> 
 <p>当以下任一情况变化时,建议使用该标签:</p> 
 <ol> 
  <li>编码参数(encoding parameters)</li> 
  <li>编码序列(encoding sequence)</li> 
 </ol> 
 <p>EXT-X-DISCONTINUITY 最常用的场景是在媒体流中插入广告。插入广告的例子:</p> 
 <pre><code>#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
ad0.ts
#EXTINF:8.0,
ad1.ts
#EXT-X-DISCONTINUITY
#EXTINF:10.0,
movieA.ts
#EXTINF:10.0,
movieB.ts
...
#EXT-X-ENDLIST
</code></pre> 
 <h5><code>EXT-X-KEY</code></h5> 
 <p>该标签用于为加密的媒体片段指定解密方法。<br> 该标签对所有 媒体片段 和 由标签 EXT-X-MAP 声明的围绕其间的所有 媒体初始化块(Meida Initialization Section) 都起作用,直到遇到下一个 EXT-X-KEY(若 m3u8 文件只有一个 EXT-X-KEY 标签,则其作用于所有媒体片段)。多个 EXT-X-KEY 标签如果最终生成的是同样的秘钥,则他们都可作用于同一个媒体片段。</p> 
 <pre><code>#EXT-X-KEY:<attribute-list>
</code></pre> 
 <h5><code>EXT-X-MAP</code></h5> 
 <p>用于指明获取媒体初始化块(Meida Initialization Section)的方法。该标签对其后所有媒体片段生效,直至遇到另一个 EXT-X-MAP 标签。拥有改标签的 M3U8 文件内的所有媒体片段必须加上这个初始化片段才能组成一个完整的媒体文件。<br> 其格式为:</p> 
 <pre><code>#EXT-X-MAP:<attribute-list>
</code></pre> 
 <p>其属性列表取值范围如下:</p> 
 <ul> 
  <li><p>URI:由引号包裹的字符串,指定了包含媒体初始化块的资源的路径。该属性为必选参数。</p></li> 
  <li><p>BYTERANGE:由引号包裹的字符串,指定了媒体初始化块在 URI 指定的资源的位置(片段)。<br> 该属性指定的范围应当只包含媒体初始化块。<br> 该属性为可选参数,如果未指定,则表示 URI 指定的资源就是全部的媒体初始化块。</p></li> 
 </ul> 
 <h5><code>EXT-X-PROGRAM-DATE-TIME</code></h5> 
 <p>该标签使用一个绝对日期/时间表明第一个媒体片段的取样时间。<br> 其格式为:</p> 
 <pre><code>#EXT-X-PROGRAM-DATE-TIME:<date-time-msec>
</code></pre> 
 <p>其中,date-time-msec是一个 ISO/IEC 8601:2004 规定的日期格式,形如:YYYY-MM-DDThh:mm:ss.SSSZ。<br> 例如:</p> 
 <pre><code> #EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00
</code></pre> 
 <h4>主播放列表标签 (Master Playlist Tags)</h4> 
 <p>主播放列表(Master Playlist)定义了备份流,多语言翻译流和其他全局参数。主播放列表标签只能出现在主播放列表(Master Playlist )中而不能出现在媒体播放列表(Media Playlist)中。</p> 
 <h5><code>EXT-X-MEDIA</code></h5> 
 <p>用于指定相同内容的媒体文件的不同语言翻译的媒体文件列表资源。<br> 比如,通过三个 <strong>EXT-X-MEIDA</strong> 标签,可以提供包含英文,法语和西班牙语版本的相同内容的音频资源,或者通过两个 <strong>EXT-X-MEDIA</strong> 提供两个不同拍摄角度的视频资源。</p> 
 <h5><code>EXT-X-STREAM-INF</code></h5> 
 <p>该属性指定了一个备份源,并提供了该备份源的相关信息。</p> 
 <h5><code>EXT-X-I-FRAME-STREAM-INF</code></h5> 
 <p>该标签表明媒体播放列表文件包含多种媒体资源的 I帧。</p> 
 <h5><code>EXT-X-SESSION-KEY</code></h5> 
 <p>该标签允许主播放列表(Master Playlist)指定媒体播放列表(Meida Playlist)的加密密钥。这使得客户端可以预先加载这些密钥,而无需从媒体播放列表中获取。其属性列表与 EXT-X-KEY 相同,除了 METHOD 属性的值必须不为NONE。</p> 
 <h4>媒体播放列表或主播放列表都使用的标签(Media or Master Playlist Tags)</h4> 
 <p>以下标签可同时设置于主播放列表(Master Playlist)和媒体播放列表(Media Playlist)中。但是对于在主播放列表中设置了的标签,不应当再次设置媒体播放列表中。同时出现在两者播放列表的相同标签必须具备相同的值。这些标签在播放列表中不能出现多次(只能使用一次)。</p> 
 <h5><code>EXT-X-INDEPENDENT-SEGMENTS</code></h5> 
 <p>该标签对列表内所有媒体片段均有效,用于表明对于一个媒体片段中的所有媒体样本均可独立进行解码,而无须依赖其他媒体片段信息。</p> 
 <pre><code>#EXT-X-INDEPENDENT-SEGMENTS
</code></pre> 
 <p>如果该标签出现在主播放列表中,则其对所有媒体播放列表的所有媒体片段都生效。</p> 
 <h5><code>EXT-X-START</code></h5> 
 <p>该标签为可选标签,用于表示播放列表播放起始位置。默认情况下,客户端应该使用该标签指定的位置进行播放。</p> 
 <pre><code>#EXT-X-START:<attribute-list>
</code></pre> 
 <p>其参数属性列表的取值范围如下:</p> 
 <ul> 
  <li><p><strong>TIME-OFFSET</strong>:该属性值为一个带符号十进制浮点数(单位:秒)。<br> 一个正数表示以播放列表起始位置开始的时间偏移量。<br> 一个负数表示播放列表上一个媒体片段最后位置往前的时间偏移量。<br> 该属性的绝对值应当不超过播放列表的时长。如果超过,则表示到达文件结尾(数值为正数),或者达到文件起始(数值为负数)。<br> 如果播放列表不包含 <strong>EXT-X-ENDLIST</strong> 标签,那么 <strong>TIME-OFFSET</strong> 属性值不应当在播放文件末尾三个切片时长之内。</p></li> 
  <li><p><strong>PRECISE</strong>:该值为一个可枚举字符串。<br> 有效的取值为<code>YES</code> 或 <code>NO</code>。<br> 如果值为<code>YES</code>,客户端应当播放包含 <strong>TIME-OFFSET</strong> 的媒体片段,但不要渲染该块内优先于 <strong>TIME-OFFSET</strong> 的样本块。<br> 如果值为<code>NO</code>,客户端应当尝试渲染在媒体片段内的所有样本块。<br> 该属性为可选参数,未指定则认为<code>NO</code>。</p></li> 
 </ul> 
 <h1>HLS直播延迟高的原因</h1> 
 <p>HLS直播延迟主要由以下几个原因导致的:</p> 
 <ol> 
  <li>客户端一般存在安全缓冲的时长。HLS协议不建议客户端选择开始时间到最后一个分片结束时间间隔小于最后一个分片时长加两倍的 EXT-X-TARGETDURATION 时长的分片作为首个分片进行播放。也就是说,一般而言,客户端应该从 M3U8 文件中倒数第三个或倒数第四个分片开始播放。</li> 
 </ol> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 700px; max-height: 500px;"> 
   <div class="image-view">  
   </div> 
  </div> 
  <div class="image-caption">
    image.png 
  </div> 
 </div> 
 <ol start="2"> 
  <li><p>服务器更新 M3U8 文件的间隔。理论上HLS服务器需要大于等于一个EXT-X-TARGETDURATION的时长去更新 M3U8文件。</p></li> 
  <li><p>CDN缓存机制。若当前源站 M3U8 已经更新到了第四个片段,但是CDN边缘节点还缓存着上一个版本的 M3U8文件(只包含3个片段)。此时就需要等文件的TTL过期,边缘节点才会去获取最新版本的 M3U8 文件。而这个缓存TTL也不能取消,如果每个端上的请求到达CDN边缘节点时都去找源站要最新版本,源站就可能会被流量冲垮。</p></li> 
  <li><p>客户端下载分片以及解码的时长。</p></li> 
  <li><p>网络延迟。</p></li> 
 </ol> 
 <h1>优化延迟的方法</h1> 
 <p>我们可以从延迟原因中的第 <code>1</code> 和第 <code>2</code> 点入手,降低我们直播的延迟。</p> 
 <ol> 
  <li>适当减少客户端的安全缓冲时长。在保证网络环境足够优越的场景下(如内网直播),可以适当降低客户端安全缓冲的时长。如hls.js可以通过修改<code>liveSyncDurationCount</code>(安全缓冲的分片数量,默认为3)和<code>liveSyncDuration</code>(安全缓冲的时长,单位为秒)来调整安全缓冲的时长。</li> 
  <li>尽量使用GOP(Group Of Picture)的时长来设置分片的时长,降低服务器更新 M3U8 文件的间隔。</li> 
 </ol> 
</article>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1672379502086414336"></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 协议入门指南以及延迟优化策略)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1835513803861749760.htm"
                           title="机器学习与深度学习间关系与区别" target="_blank">机器学习与深度学习间关系与区别</a>
                        <span class="text-muted">ℒℴѵℯ心·动ꦿ໊ོ꫞</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/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/python/1.htm">python</a>
                        <div>一、机器学习概述定义机器学习(MachineLearning,ML)是一种通过数据驱动的方法,利用统计学和计算算法来训练模型,使计算机能够从数据中学习并自动进行预测或决策。机器学习通过分析大量数据样本,识别其中的模式和规律,从而对新的数据进行判断。其核心在于通过训练过程,让模型不断优化和提升其预测准确性。主要类型1.监督学习(SupervisedLearning)监督学习是指在训练数据集中包含输入</div>
                    </li>
                    <li><a href="/article/1835511911769272320.htm"
                           title="C语言如何定义宏函数?" target="_blank">C语言如何定义宏函数?</a>
                        <span class="text-muted">小九格物</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a>
                        <div>在C语言中,宏函数是通过预处理器定义的,它在编译之前替换代码中的宏调用。宏函数可以模拟函数的行为,但它们不是真正的函数,因为它们在编译时不会进行类型检查,也不会分配存储空间。宏函数的定义通常使用#define指令,后面跟着宏的名称和参数列表,以及宏展开后的代码。宏函数的定义方式:1.基本宏函数:这是最简单的宏函数形式,它直接定义一个表达式。#defineSQUARE(x)((x)*(x))2.带参</div>
                    </li>
                    <li><a href="/article/1835511912192897024.htm"
                           title="微服务下功能权限与数据权限的设计与实现" target="_blank">微服务下功能权限与数据权限的设计与实现</a>
                        <span class="text-muted">nbsaas-boot</span>
<a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>在微服务架构下,系统的功能权限和数据权限控制显得尤为重要。随着系统规模的扩大和微服务数量的增加,如何保证不同用户和服务之间的访问权限准确、细粒度地控制,成为设计安全策略的关键。本文将讨论如何在微服务体系中设计和实现功能权限与数据权限控制。1.功能权限与数据权限的定义功能权限:指用户或系统角色对特定功能的访问权限。通常是某个用户角色能否执行某个操作,比如查看订单、创建订单、修改用户资料等。数据权限:</div>
                    </li>
                    <li><a href="/article/1835508758042734592.htm"
                           title="我校举行新老教师师徒结对仪式暨名师专业工作室工作交流活动" target="_blank">我校举行新老教师师徒结对仪式暨名师专业工作室工作交流活动</a>
                        <span class="text-muted">李蕾1229</span>

                        <div>为促进我校教师专业发展,发挥骨干教师的引领带头作用,11月6日下午,我校举行新老教师师徒结对仪式暨名师专业工作室工作交流活动。图片发自App会议由教师发展处李蕾主任主持,首先,由范校长宣读新老教师结对名单及双方承担职责。随后,两位新调入教师陈玉萍、莫正杰分别和他们的师傅鲍元美、刘召彬老师签订了师徒结对协议书。图片发自App图片发自App师徒拥抱、握手。有了师傅就有了目标有了方向,相信两位新教师在师</div>
                    </li>
                    <li><a href="/article/1835508131489214464.htm"
                           title="高级编程--XML+socket练习题" target="_blank">高级编程--XML+socket练习题</a>
                        <span class="text-muted">masa010</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>1.北京华北2114.8万人上海华东2,500万人广州华南1292.68万人成都华西1417万人(1)使用dom4j将信息存入xml中(2)读取信息,并打印控制台(3)添加一个city节点与子节点(4)使用socketTCP协议编写服务端与客户端,客户端输入城市ID,服务器响应相应城市信息(5)使用socketTCP协议编写服务端与客户端,客户端要求用户输入city对象,服务端接收并使用dom4j</div>
                    </li>
                    <li><a href="/article/1835507248395284480.htm"
                           title="【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数" target="_blank">【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数</a>
                        <span class="text-muted">广龙宇</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%80%E8%B5%B7%E5%AD%A6Rust/1.htm">一起学Rust</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Rust%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">Rust设计模式</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、使用借用类型作为参数二、格式化拼接字符串三、使用构造函数总结前言Rust不是传统的面向对象编程语言,它的所有特性,使其独一无二。因此,学习特定于Rust的设计模式是必要的。本系列文章为作者学习《Rust设计模式》的学习笔记以及自己的见解。因此,本系列文章的结构也与此书的结构相同(后续可能会调成结构),基本上分为三个部分</div>
                    </li>
                    <li><a href="/article/1835506869838376960.htm"
                           title="Python数据分析与可视化实战指南" target="_blank">Python数据分析与可视化实战指南</a>
                        <span class="text-muted">William数据分析</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE/1.htm">数据</a>
                        <div>在数据驱动的时代,Python因其简洁的语法、强大的库生态系统以及活跃的社区,成为了数据分析与可视化的首选语言。本文将通过一个详细的案例,带领大家学习如何使用Python进行数据分析,并通过可视化来直观呈现分析结果。一、环境准备1.1安装必要库在开始数据分析和可视化之前,我们需要安装一些常用的库。主要包括pandas、numpy、matplotlib和seaborn等。这些库分别用于数据处理、数学</div>
                    </li>
                    <li><a href="/article/1835506084224266240.htm"
                           title="网易严选官方旗舰店,优质商品,卓越服务" target="_blank">网易严选官方旗舰店,优质商品,卓越服务</a>
                        <span class="text-muted">高省_飞智666600</span>

                        <div>网易严选官方旗舰店是网易旗下的一家电商平台,以提供优质商品和卓越服务而闻名。作为一名SEO优化师,我将为您详细介绍网易严选官方旗舰店,并重点强调其特点和优势。大家好!我是高省APP最大团队&联合创始人飞智导师。相较于其他返利app,高省APP的佣金更高,模式更好,最重要的是,终端用户不会流失!高省APP佣金更高,模式更好,终端用户不流失。【高省】是一个自用省钱佣金高,分享推广赚钱多的平台,百度有几</div>
                    </li>
                    <li><a href="/article/1835505226933694464.htm"
                           title="Pyecharts数据可视化大屏:打造沉浸式数据分析体验" target="_blank">Pyecharts数据可视化大屏:打造沉浸式数据分析体验</a>
                        <span class="text-muted">我的运维人生</span>
<a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8F%AF%E8%A7%86%E5%8C%96/1.htm">信息可视化</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><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4%E5%BC%80%E5%8F%91/1.htm">运维开发</a><a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E5%85%B1%E4%BA%AB/1.htm">技术共享</a>
                        <div>Pyecharts数据可视化大屏:打造沉浸式数据分析体验在当今这个数据驱动的时代,如何将海量数据以直观、生动的方式展现出来,成为了数据分析师和企业决策者关注的焦点。Pyecharts,作为一款基于Python的开源数据可视化库,凭借其丰富的图表类型、灵活的配置选项以及高度的定制化能力,成为了构建数据可视化大屏的理想选择。本文将深入探讨如何利用Pyecharts打造数据可视化大屏,并通过实际代码案例</div>
                    </li>
                    <li><a href="/article/1835504819209596928.htm"
                           title="怎么起诉借钱不还的人?怎样起诉欠款不还的人?" target="_blank">怎么起诉借钱不还的人?怎样起诉欠款不还的人?</a>
                        <span class="text-muted">影子爱学习</span>

                        <div>怎么起诉借钱不还的人?怎样起诉欠款不还的人?如果遇到难以解决的法律问题,我们可以匹配专业律师。例如:婚姻家庭(离婚纠纷)、刑事辩护、合同纠纷、债权债务、房产(继承)纠纷、交通事故、劳动争议、人身损害、公司相关法律事务(法律顾问)等咨询推荐手机/微信:15633770876【全国案件皆可】借钱不还起诉对方需要哪些资料起诉欠钱不还的,一般需要的材料包括以下这些:借据、收据、欠条、付款凭证等证据,以及向</div>
                    </li>
                    <li><a href="/article/1835502578050363392.htm"
                           title="PHP环境搭建详细教程" target="_blank">PHP环境搭建详细教程</a>
                        <span class="text-muted">好看资源平台</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a>
                        <div>PHP是一个流行的服务器端脚本语言,广泛用于Web开发。为了使PHP能够在本地或服务器上运行,我们需要搭建一个合适的PHP环境。本教程将结合最新资料,介绍在不同操作系统上搭建PHP开发环境的多种方法,包括Windows、macOS和Linux系统的安装步骤,以及本地和Docker环境的配置。1.PHP环境搭建概述PHP环境的搭建主要分为以下几类:集成开发环境:例如XAMPP、WAMP、MAMP,这</div>
                    </li>
                    <li><a href="/article/1835502451877310464.htm"
                           title="基于社交网络算法优化的二维最大熵图像分割" target="_blank">基于社交网络算法优化的二维最大熵图像分割</a>
                        <span class="text-muted">智能算法研学社(Jack旭)</span>
<a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E4%BC%98%E5%8C%96%E7%AE%97%E6%B3%95%E5%BA%94%E7%94%A8/1.htm">智能优化算法应用</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%83%8F%E5%88%86%E5%89%B2/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/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>智能优化算法应用:基于社交网络优化的二维最大熵图像阈值分割-附代码文章目录智能优化算法应用:基于社交网络优化的二维最大熵图像阈值分割-附代码1.前言2.二维最大熵阈值分割原理3.基于社交网络优化的多阈值分割4.算法结果:5.参考文献:6.Matlab代码摘要:本文介绍基于最大熵的图像分割,并且应用社交网络算法进行阈值寻优。1.前言阅读此文章前,请阅读《图像分割:直方图区域划分及信息统计介绍》htt</div>
                    </li>
                    <li><a href="/article/1835501774031646720.htm"
                           title="18-115 一切思考不能有效转化为行动,都TM是扯淡!" target="_blank">18-115 一切思考不能有效转化为行动,都TM是扯淡!</a>
                        <span class="text-muted">成长时间线</span>

                        <div>7月25号写了一篇关于为什么会断更如此严重的反思,然而,之后日更仅仅维持了一周,又出现了这次更严重的现象。从8月2号到昨天8月6号,5天!又是5天没有更文!虽然这次断更时间和上次一样,那为什么说这次更严重?因为上次之后就分析了问题的原因,以及应该如何解决,按理说应该会好转,然而,没过几天严重断更的现象再次出现,想想,经过反思,问题依然没有解决与改变,这让我有些担忧。到底是哪里出了问题,难道我就真的</div>
                    </li>
                    <li><a href="/article/1835500751997202432.htm"
                           title="直返最高等级与直返APP:无需邀请码的返利新体验" target="_blank">直返最高等级与直返APP:无需邀请码的返利新体验</a>
                        <span class="text-muted">古楼</span>

                        <div>随着互联网的普及和电商的兴起,直返模式逐渐成为一种流行的商业模式。在这种模式下,消费者通过购买产品或服务,获得一定的返利,并可以分享给更多的人。其中,直返最高等级和直返APP是直返模式中的重要概念和工具。本文将详细介绍直返最高等级的概念、直返APP的使用以及与邀请码的关系。【高省】APP(高佣金领导者)是一个自用省钱佣金高,分享推广赚钱多的平台,百度有几百万篇报道,运行三年,稳定可靠。高省APP,</div>
                    </li>
                    <li><a href="/article/1835497792265613312.htm"
                           title="【加密社】Solidity 中的事件机制及其应用" target="_blank">【加密社】Solidity 中的事件机制及其应用</a>
                        <span class="text-muted">加密社</span>
<a class="tag" taget="_blank" href="/search/%E9%97%B2%E4%BE%83/1.htm">闲侃</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6/1.htm">智能合约</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a>
                        <div>加密社引言在Solidity合约开发过程中,事件(Events)是一种非常重要的机制。它们不仅能够让开发者记录智能合约的重要状态变更,还能够让外部系统(如前端应用)监听这些状态的变化。本文将详细介绍Solidity中的事件机制以及如何利用不同的手段来触发、监听和获取这些事件。事件存储的地方当我们在Solidity合约中使用emit关键字触发事件时,该事件会被记录在区块链的交易收据中。具体而言,事件</div>
                    </li>
                    <li><a href="/article/1835494762388484096.htm"
                           title="【目标检测数据集】卡车数据集1073张VOC+YOLO格式" target="_blank">【目标检测数据集】卡车数据集1073张VOC+YOLO格式</a>
                        <span class="text-muted">熬夜写代码的平头哥∰</span>
<a class="tag" taget="_blank" href="/search/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/1.htm">目标检测</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>数据集格式:PascalVOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):1073标注数量(xml文件个数):1073标注数量(txt文件个数):1073标注类别数:1标注类别名称:["truck"]每个类别标注的框数:truck框数=1120总框数:1120使用标注工具:labelImg标注</div>
                    </li>
                    <li><a href="/article/1835493269233037312.htm"
                           title="走向以教育叙事为载体的教育叙事研究" target="_blank">走向以教育叙事为载体的教育叙事研究</a>
                        <span class="text-muted">666小飞鱼</span>

                        <div>今天我读了吴松超老师的《给教师的68条建写作建议》中的第23条《如何通过教育叙事走向研究》,吴老师在文中与我们分享了一个德育案例,这是一个反面的案例,意在告知我们在处理问题时,不能就考虑的点太窄,思考要全面。走向教育叙事研究,教师要有敏锐的“感知力”,这个感知力来自于背后专业知识的支撑,思维能力以及广阔的视野和见识等。所以对于同一件事处理方法不同,这个就是教师背后“敏锐力”的不同造成的,也就是说是</div>
                    </li>
                    <li><a href="/article/1835492742713667584.htm"
                           title="钢筋长度超限检测检数据集VOC+YOLO格式215张1类别" target="_blank">钢筋长度超限检测检数据集VOC+YOLO格式215张1类别</a>
                        <span class="text-muted">futureflsl</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E9%9B%86/1.htm">数据集</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</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/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a>
                        <div>数据集格式:PascalVOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):215标注数量(xml文件个数):215标注数量(txt文件个数):215标注类别数:1标注类别名称:["iron"]每个类别标注的框数:iron框数=215总框数:215使用标注工具:labelImg标注规则:对类别进</div>
                    </li>
                    <li><a href="/article/1835491353451130880.htm"
                           title="【华为OD技术面试真题 - 技术面】- python八股文真题题库(4)" target="_blank">【华为OD技术面试真题 - 技术面】- python八股文真题题库(4)</a>
                        <span class="text-muted">算法大师</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>华为OD面试真题精选专栏:华为OD面试真题精选目录:2024华为OD面试手撕代码真题目录以及八股文真题目录文章目录华为OD面试真题精选**1.Python中的`with`**用途和功能自动资源管理示例:文件操作上下文管理协议示例代码工作流程解析优点2.\_\_new\_\_和**\_\_init\_\_**区别__new____init__区别总结3.**切片(Slicing)操作**基本切片语法</div>
                    </li>
                    <li><a href="/article/1835491354004779008.htm"
                           title="【华为OD技术面试真题 - 技术面】-测试八股文真题题库(1)" target="_blank">【华为OD技术面试真题 - 技术面】-测试八股文真题题库(1)</a>
                        <span class="text-muted">算法大师</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>华为OD面试真题精选专栏:华为OD面试真题精选目录:2024华为OD面试手撕代码真题目录以及八股文真题目录文章目录华为OD面试真题精选1.黑盒测试和白盒测试的区别2.假设我们公司现在开发一个类似于微信的软件1.0版本,现在要你测试这个功能:打开聊天窗口,输入文本,限制字数在200字以内。问你怎么提取测试点。功能测试性能测试安全性测试可用性测试跨平台兼容性测试网络环境测试3.接口测试的工具你了解哪些</div>
                    </li>
                    <li><a href="/article/1835489438243844096.htm"
                           title="Low Power概念介绍-Voltage Area" target="_blank">Low Power概念介绍-Voltage Area</a>
                        <span class="text-muted">飞奔的大虎</span>

                        <div>随着智能手机,以及物联网的普及,芯片功耗的问题最近几年得到了越来越多的重视。为了实现集成电路的低功耗设计目标,我们需要在系统设计阶段就采用低功耗设计的方案。而且,随着设计流程的逐步推进,到了芯片后端设计阶段,降低芯片功耗的方法已经很少了,节省的功耗百分比也不断下降。芯片的功耗主要由静态功耗(staticleakagepower)和动态功耗(dynamicpower)构成。静态功耗主要是指电路处于等</div>
                    </li>
                    <li><a href="/article/1835489208152715264.htm"
                           title="Rust基础知识" target="_blank">Rust基础知识</a>
                        <span class="text-muted">GRKF15</span>
<a class="tag" taget="_blank" href="/search/rust/1.htm">rust</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/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>1.Rust语言简介1.1基础语法变量声明:let关键字用于声明变量,可以指定或不指定类型,如leta=10;和letmutc=30i32;。函数定义:使用fn关键字定义函数,并指定参数类型及返回类型,如fnadd(i:i32,j:i32)->i32{i+j}。控制流:包括if、else等,控制语句后需要使用;来结束语句。1.2数据类型整数类型:i8、i16、i32、i64、i128,以及无符号的</div>
                    </li>
                    <li><a href="/article/1835488702881689600.htm"
                           title="Faiss:高效相似性搜索与聚类的利器" target="_blank">Faiss:高效相似性搜索与聚类的利器</a>
                        <span class="text-muted">网络·魚</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/faiss/1.htm">faiss</a>
                        <div>Faiss是一个针对大规模向量集合的相似性搜索库,由FacebookAIResearch开发。它提供了一系列高效的算法和数据结构,用于加速向量之间的相似性搜索,特别是在大规模数据集上。本文将介绍Faiss的原理、核心功能以及如何在实际项目中使用它。Faiss原理:近似最近邻搜索:Faiss的核心功能之一是近似最近邻搜索,它能够高效地在大规模数据集中找到与给定查询向量最相似的向量。这种搜索是近似的,</div>
                    </li>
                    <li><a href="/article/1835484420023349248.htm"
                           title="18、架构-可观测性之聚合度量" target="_blank">18、架构-可观测性之聚合度量</a>
                        <span class="text-muted">大树~~</span>
<a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>聚合度量聚合度量是指对系统运行时产生的各种指标数据进行收集、聚合和分析,以了解系统的健康状况和性能表现。聚合度量是可观测性的关键组成部分,通过对度量数据的分析,可以及时发现系统中的异常和瓶颈。以下是对聚合度量各个方面的详细解析,并结合具体的数据案例和技术支撑。指标收集收集系统运行时产生的各种指标数据是聚合度量的基础。常见的指标包括CPU使用率、内存使用率、请求处理时间、请求数、错误率等。以下是指标</div>
                    </li>
                    <li><a href="/article/1835483915071090688.htm"
                           title="【华为OD技术面试真题 - 技术面】- python八股文真题题库(1)" target="_blank">【华为OD技术面试真题 - 技术面】- python八股文真题题库(1)</a>
                        <span class="text-muted">算法大师</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>华为OD面试真题精选专栏:华为OD面试真题精选目录:2024华为OD面试手撕代码真题目录以及八股文真题目录文章目录华为OD面试真题精选1.数据预处理流程数据预处理的主要步骤工具和库2.介绍线性回归、逻辑回归模型线性回归(LinearRegression)模型形式:关键点:逻辑回归(LogisticRegression)模型形式:关键点:参数估计与评估:3.python浅拷贝及深拷贝浅拷贝(Shal</div>
                    </li>
                    <li><a href="/article/1835481396408315904.htm"
                           title="如何选择最适合你的项目研发管理软件?TAPD卓越版全面解析" target="_blank">如何选择最适合你的项目研发管理软件?TAPD卓越版全面解析</a>
                        <span class="text-muted">北京云巴巴信息技术有限公司</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%A7%E5%93%81%E7%BB%8F%E7%90%86/1.htm">产品经理</a><a class="tag" taget="_blank" href="/search/%E9%9C%80%E6%B1%82%E5%88%86%E6%9E%90/1.htm">需求分析</a>
                        <div>在当今快速发展的科技时代,项目研发管理软件已成为企业不可或缺的重要工具。面对市场上琳琅满目的产品,如何选择一款适合自己团队的项目研发管理软件呢?本文将围绕项目研发管理软件的选择标准,重点介绍TAPD卓越版的特点、优势以及使用体验,让你更好地理解和选择适合自己的项目研发管理软件。项目研发管理软件的选择标准在选择项目研发管理软件时,我们需要考虑以下几个方面的因素:功能全面性:软件是否覆盖了从需求管理、</div>
                    </li>
                    <li><a href="/article/1835481316326469632.htm"
                           title="舜公郑金锋书辛丑自剪扇面书法作品(四O六)" target="_blank">舜公郑金锋书辛丑自剪扇面书法作品(四O六)</a>
                        <span class="text-muted">舜公郑金锋</span>

                        <div>辛丑小阳春,新自剪扇面400品,大多为各色撒金、撒银、描金、描银、水印、彩绘、荧光等亚粉、色宣纸,以及域外包装填充纸等;王一品长锋羊毫秃笔;一得阁云头艳墨、宿墨、水等。书体有甲骨文,金文(商周金文、春秋战国金文、中山王厝器金文、汉金文……),楚简帛书,侯马盟书,温县盟书,小篆,果蝙书等,隶书(秦简、汉简帛书、汉碑……),草书(章草、小草、大草……),行书(行楷、行草),楷书(魏碑及北朝墓志、隋朝墓</div>
                    </li>
                    <li><a href="/article/1835479137217769472.htm"
                           title="4招写出高价值文章" target="_blank">4招写出高价值文章</a>
                        <span class="text-muted">zhiliner</span>

                        <div>文章写得泛泛是因为思考得不够深,思考得越深文章会越有价值。拿到一个主题一定要去深入挖掘事件背后的东西,比如人物困境以及趋势性的东西。写作过程中有几个深度思考的方法一、解剖,让旧素材焕发新意作为一个写作者,我们能够做的最大贡献,就是给出自己看世界的角度。解剖其实就是把这个话题相关的信息都列出来,详细的列出来,看清楚它的内部。我们看到一个老话题或者一段旧素材的时候,不要只看这个素材或者话题本身,一定要</div>
                    </li>
                    <li><a href="/article/1835478880375369728.htm"
                           title="一比一复刻手表哪里可以买到?推荐三个可靠渠道" target="_blank">一比一复刻手表哪里可以买到?推荐三个可靠渠道</a>
                        <span class="text-muted">腕表世界</span>

                        <div>在我国,提及一比一复刻手表,人们总是充满好奇与争议。这种高度仿真的复刻手表,凭借其精湛的工艺、时尚的设计,以及与正品相差无几的质感,深受一部分消费者的喜爱。但与此同时,其背后的侵权争议也一直不断。那么,究竟哪里可以买到这些令人心动的一比一复刻手表呢?腕表咨询微信:10428850一、何为一比一复刻手表?一比一复刻手表,指的是严格按照正版手表的设计、尺寸和工艺制作的仿制品。这些手表在材质、外观、功能</div>
                    </li>
                    <li><a href="/article/1835476984034062336.htm"
                           title="【六】阿伟开始搭建Kafka学习环境" target="_blank">【六】阿伟开始搭建Kafka学习环境</a>
                        <span class="text-muted">能源恒观</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                        <div>阿伟开始搭建Kafka学习环境概述上一篇文章阿伟学习了Kafka的核心概念,并且把市面上流行的消息中间件特性进行了梳理和对比,方便大家在学习过程中进行对比学习,最后梳理了一些Kafka使用中经常遇到的Kafka难题以及解决思路,经过上一篇的学习我相信大家对Kafka有了初步的认识,本篇将继续学习Kafka。一、安装和配置学习一项技术首先要搭建一套服务,而Kafka的运行主要需要部署jdk、zook</div>
                    </li>
                                <li><a href="/article/90.htm"
                                       title="java观察者模式" target="_blank">java观察者模式</a>
                                    <span class="text-muted">3213213333332132</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%B8%B8%E6%88%8F/1.htm">游戏</a><a class="tag" taget="_blank" href="/search/%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F/1.htm">观察者模式</a>
                                    <div>观察者模式——顾名思义,就是一个对象观察另一个对象,当被观察的对象发生变化时,观察者也会跟着变化。 
 
在日常中,我们配java环境变量时,设置一个JAVAHOME变量,这就是被观察者,使用了JAVAHOME变量的对象都是观察者,一旦JAVAHOME的路径改动,其他的也会跟着改动。 
 
这样的例子很多,我想用小时候玩的老鹰捉小鸡游戏来简单的描绘观察者模式。 
 
老鹰会变成观察者,母鸡和小鸡是</div>
                                </li>
                                <li><a href="/article/217.htm"
                                       title="TFS RESTful API 模拟上传测试" target="_blank">TFS RESTful API 模拟上传测试</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>       TFS RESTful API 模拟上传测试。 
   
细节参看这里:https://github.com/alibaba/nginx-tfs/blob/master/TFS_RESTful_API.markdown 
模拟POST上传一个图片: 
curl --data-binary @/opt/tfs.png http</div>
                                </li>
                                <li><a href="/article/344.htm"
                                       title="PHP常用设计模式单例, 工厂, 观察者, 责任链, 装饰, 策略,适配,桥接模式" target="_blank">PHP常用设计模式单例, 工厂, 观察者, 责任链, 装饰, 策略,适配,桥接模式</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<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/PHP/1.htm">PHP</a>
                                    <div>// 多态, 在JAVA中是这样用的, 其实在PHP当中可以自然消除, 因为参数是动态的, 你传什么过来都可以, 不限制类型, 直接调用类的方法
abstract class Tiger {
    public abstract function climb();
}

class XTiger extends Tiger {
    public function  climb()</div>
                                </li>
                                <li><a href="/article/471.htm"
                                       title="hibernate" target="_blank">hibernate</a>
                                    <span class="text-muted">171815164</span>
<a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a>
                                    <div>main,save 
 
Configuration conf =new Configuration().configure();
SessionFactory sf=conf.buildSessionFactory();
Session sess=sf.openSession();
Transaction tx=sess.beginTransaction();

News a=new </div>
                                </li>
                                <li><a href="/article/598.htm"
                                       title="Ant实例分析" target="_blank">Ant实例分析</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/ant/1.htm">ant</a>
                                    <div>        下面是一个Ant构建文件的实例,通过这个实例我们可以很清楚的理顺构建一个项目的顺序及依赖关系,从而编写出更加合理的构建文件。 
  
        下面是build.xml的代码: 
<?xml version="1</div>
                                </li>
                                <li><a href="/article/725.htm"
                                       title="[简单]工作记录_接口返回405原因" target="_blank">[简单]工作记录_接口返回405原因</a>
                                    <span class="text-muted">53873039oycg</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a>
                                    <div>         最近调接口时候一直报错,错误信息是: 
      
responseCode:405
responseMsg:Method Not Allowed 
       接口请求方式Post. </div>
                                </li>
                                <li><a href="/article/852.htm"
                                       title="关于java.lang.ClassNotFoundException 和 java.lang.NoClassDefFoundError 的区别" target="_blank">关于java.lang.ClassNotFoundException 和 java.lang.NoClassDefFoundError 的区别</a>
                                    <span class="text-muted">程序员是怎么炼成的</span>

                                    <div>  
 真正完成类的加载工作是通过调用 defineClass来实现的; 
 而启动类的加载过程是通过调用 loadClass来实现的; 
 就是类加载器分为加载和定义 
   
 protected Class<?> findClass(String name) throws ClassNotFoundExcept</div>
                                </li>
                                <li><a href="/article/979.htm"
                                       title="JDBC学习笔记-JDBC详细的操作流程" target="_blank">JDBC学习笔记-JDBC详细的操作流程</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/jdbc/1.htm">jdbc</a>
                                    <div>所有的JDBC应用程序都具有下面的基本流程:  1、加载数据库驱动并建立到数据库的连接。  2、执行SQL语句。  3、处理结果。  4、从数据库断开连接释放资源。 
下面我们就来仔细看一看每一个步骤: 
其实按照上面所说每个阶段都可得单独拿出来写成一个独立的类方法文件。共别的应用来调用。 
1、加载数据库驱动并建立到数据库的连接: 
     Html代码    
 
 St</div>
                                </li>
                                <li><a href="/article/1106.htm"
                                       title="rome创建rss" target="_blank">rome创建rss</a>
                                    <span class="text-muted">antonyup_2006</span>
<a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/cms/1.htm">cms</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a><a class="tag" taget="_blank" href="/search/Opera/1.htm">Opera</a>
                                    <div>引用   
1.RSS标准 
 
RSS标准比较混乱,主要有以下3个系列 
 
 RSS 0.9x / 2.0 : RSS技术诞生于1999年的网景公司(Netscape),其发布了一个0.9版本的规范。2001年,RSS技术标准的发展工作被Userland Software公司的戴夫 温那(Dave Winer)所接手。陆续发布了0.9x的系列版本。当W3C小组发布RSS 1.0后,Dave W</div>
                                </li>
                                <li><a href="/article/1233.htm"
                                       title="html表格和表单基础" target="_blank">html表格和表单基础</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E8%A1%A8%E6%A0%BC/1.htm">表格</a><a class="tag" taget="_blank" href="/search/%E8%A1%A8%E5%8D%95/1.htm">表单</a><a class="tag" taget="_blank" href="/search/meta/1.htm">meta</a><a class="tag" taget="_blank" href="/search/%E9%94%9A%E7%82%B9/1.htm">锚点</a>
                                    <div>第一次用html来写东西,感觉压力山大,每次看见别人发的都是比较牛逼的 再看看自己什么都还不会, 
  
html是一种标记语言,其实很简单都是固定的格式 
  
_----------------------------------------表格和表单 
表格是html的重要组成部分,表格用在body里面的 
主要用法如下; 
<table>

     &</div>
                                </li>
                                <li><a href="/article/1360.htm"
                                       title="ibatis如何传入完整的sql语句" target="_blank">ibatis如何传入完整的sql语句</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/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a>
                                    <div>        ibatis如何传入完整的sql语句?进一步说,String str ="select * from test_table",我想把str传入ibatis中执行,是传递整条sql语句。 
        解决办法: 
<</div>
                                </li>
                                <li><a href="/article/1487.htm"
                                       title="精通Oracle10编程SQL(14)开发动态SQL" target="_blank">精通Oracle10编程SQL(14)开发动态SQL</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a>
                                    <div>/*
 *开发动态SQL
 */
--使用EXECUTE IMMEDIATE处理DDL操作
CREATE OR REPLACE PROCEDURE drop_table(table_name varchar2)
is
   sql_statement varchar2(100);
begin
   sql_statement:='DROP TABLE '||table_name;
</div>
                                </li>
                                <li><a href="/article/1614.htm"
                                       title="【Linux命令】Linux工作中常用命令" target="_blank">【Linux命令】Linux工作中常用命令</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/linux%E5%91%BD%E4%BB%A4/1.htm">linux命令</a>
                                    <div>不断的总结工作中常用的Linux命令 
  
1.查看端口被哪个进程占用 
  
通过这个命令可以得到占用8085端口的进程号,然后通过ps -ef|grep 进程号得到进程的详细信息 
  
netstat -anp | grep 8085 
  
察看进程ID对应的进程占用的端口号 
  
netstat -anp | grep 进程ID 
&</div>
                                </li>
                                <li><a href="/article/1741.htm"
                                       title="优秀网站和文档收集" target="_blank">优秀网站和文档收集</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%AB%99/1.htm">网站</a>
                                    <div>集成 Flex, Spring, Hibernate 构建应用程序 
  
性能测试工具-JMeter 
  
Hmtl5-IOCN网站 
  
Oracle精简版教程网站 
  
鸟哥的linux私房菜 
  
Jetty中文文档 
  
50个jquery必备代码片段 
  
swfobject.js检测flash版本号工具</div>
                                </li>
                                <li><a href="/article/1868.htm"
                                       title="angular.extend" target="_blank">angular.extend</a>
                                    <span class="text-muted">boyitech</span>
<a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/angular.extend/1.htm">angular.extend</a><a class="tag" taget="_blank" href="/search/AngularJS+API/1.htm">AngularJS API</a>
                                    <div>angular.extend   复制src对象中的属性去dst对象中. 支持多个src对象. 如果你不想改变一个对象,你可以把dst设为空对象{}: var object = angular.extend({}, object1, object2). 注意: angular.extend不支持递归复制.    使用方法:   angular.extend(dst, src);    参数:   </div>
                                </li>
                                <li><a href="/article/1995.htm"
                                       title="java-谷歌面试题-设计方便提取中数的数据结构" target="_blank">java-谷歌面试题-设计方便提取中数的数据结构</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>网上找了一下这道题的解答,但都是提供思路,没有提供具体实现。其中使用大小堆这个思路看似简单,但实现起来要考虑很多。 
以下分别用排序数组和大小堆来实现。 
使用大小堆: 
 

import java.util.Arrays;

public class MedianInHeap {
	/**
	 * 题目:设计方便提取中数的数据结构
	 * 设计一个数据结构,其中包含两个函数,1.插</div>
                                </li>
                                <li><a href="/article/2122.htm"
                                       title="ajaxFileUpload 针对 ie jquery 1.7+不能使用问题修复版本" target="_blank">ajaxFileUpload 针对 ie jquery 1.7+不能使用问题修复版本</a>
                                    <span class="text-muted">Chen.H</span>
<a class="tag" taget="_blank" href="/search/ajaxFileUpload/1.htm">ajaxFileUpload</a><a class="tag" taget="_blank" href="/search/ie6/1.htm">ie6</a><a class="tag" taget="_blank" href="/search/ie7/1.htm">ie7</a><a class="tag" taget="_blank" href="/search/ie8/1.htm">ie8</a><a class="tag" taget="_blank" href="/search/ie9/1.htm">ie9</a>
                                    <div>jQuery.extend({
	handleError: function( s, xhr, status, e ) 		{
		// If a local callback was specified, fire it
				if ( s.error ) {
					s.error.call( s.context || s, xhr, status, e );
				}

</div>
                                </li>
                                <li><a href="/article/2249.htm"
                                       title="[机器人制造原则]机器人的电池和存储器必须可以替换" target="_blank">[机器人制造原则]机器人的电池和存储器必须可以替换</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%88%B6%E9%80%A0/1.htm">制造</a>
                                    <div> 
 
       机器人的身体随时随地可能被外来力量所破坏,但是如果机器人的存储器和电池可以更换,那么这个机器人的思维和记忆力就可以保存下来,即使身体受到伤害,在把存储器取下来安装到一个新的身体上之后,原有的性格和能力都可以继续维持..... 
 
       另外,如果一</div>
                                </li>
                                <li><a href="/article/2376.htm"
                                       title="Oracle Multitable INSERT 的用法" target="_blank">Oracle Multitable INSERT 的用法</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>转载Oracle笔记-Multitable INSERT 的用法 
 
http://blog.chinaunix.net/uid-8504518-id-3310531.html 
 
一、Insert基础用法 
 
语法: 
 
    Insert Into 表名 (字段1,字段2,字段3...) 
 
    Values (值1,</div>
                                </li>
                                <li><a href="/article/2503.htm"
                                       title="专访黑客历史学家George Dyson" target="_blank">专访黑客历史学家George Dyson</a>
                                    <span class="text-muted">datamachine</span>
<a class="tag" taget="_blank" href="/search/on/1.htm">on</a>
                                    <div>20世纪最具威力的两项发明——核弹和计算机出自同一时代、同一群年青人。可是,与大名鼎鼎的曼哈顿计划(第二次世界大战中美国原子弹研究计划)相 比,计算机的起源显得默默无闻。出身计算机世家的历史学家George Dyson在其新书《图灵大教堂》(Turing’s Cathedral)中讲述了阿兰·图灵、约翰·冯·诺依曼等一帮子天才小子创造计算机及预见计算机未来</div>
                                </li>
                                <li><a href="/article/2630.htm"
                                       title="小学6年级英语单词背诵第一课" target="_blank">小学6年级英语单词背诵第一课</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a>
                                    <div>always 总是 
rice 水稻,米饭 
before 在...之前 
live 生活,居住 
  
usual 通常的 
early 早的 
begin 开始 
month 月份 
  
year 年 
last 最后的 
east 东方的 
high 高的 
  
far 远的 
window 窗户 
world 世界 
than 比...更 
  </div>
                                </li>
                                <li><a href="/article/2757.htm"
                                       title="在线IT教育和在线IT高端教育" target="_blank">在线IT教育和在线IT高端教育</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E6%95%99%E8%82%B2/1.htm">教育</a>
                                    <div>codecademy 
http://www.codecademy.com   codeschool 
https://www.codeschool.com   teamtreehouse 
http://teamtreehouse.com   lynda 
http://www.lynda.com/   Coursera 
https://www.coursera.</div>
                                </li>
                                <li><a href="/article/2884.htm"
                                       title="Struts2 xml校验框架所定义的校验文件" target="_blank">Struts2 xml校验框架所定义的校验文件</a>
                                    <span class="text-muted">蕃薯耀</span>
<a class="tag" taget="_blank" href="/search/Struts2+xml%E6%A0%A1%E9%AA%8C/1.htm">Struts2 xml校验</a><a class="tag" taget="_blank" href="/search/Struts2+xml%E6%A0%A1%E9%AA%8C%E6%A1%86%E6%9E%B6/1.htm">Struts2 xml校验框架</a><a class="tag" taget="_blank" href="/search/Struts2%E6%A0%A1%E9%AA%8C/1.htm">Struts2校验</a>
                                    <div>  
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
蕃薯耀 2015年7月11日 15:54:59 星期六 
http://fa</div>
                                </li>
                                <li><a href="/article/3011.htm"
                                       title="mac下安装rar和unrar命令" target="_blank">mac下安装rar和unrar命令</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/mac/1.htm">mac</a>
                                    <div>1.下载:http://www.rarlab.com/download.htm  选择 
RAR 5.21 for Mac OS X   2.解压下载后的文件   tar -zxvf rarosx-5.2.1.tar   3.cd rar   sudo install -c -o $USER unrar /bin #输入当前用户登录密码   sudo install -c -o $USER rar</div>
                                </li>
                                <li><a href="/article/3138.htm"
                                       title="三种将list转换为map的方法" target="_blank">三种将list转换为map的方法</a>
                                    <span class="text-muted">jackyrong</span>
<a class="tag" taget="_blank" href="/search/list/1.htm">list</a>
                                    <div>  在本文中,介绍三种将list转换为map的方法: 
 
1) 传统方法 
 
假设有某个类如下 
   

class Movie {
    
    private Integer rank;
    private String description;
    
    public Movie(Integer rank, String des</div>
                                </li>
                                <li><a href="/article/3265.htm"
                                       title="年轻程序员需要学习的5大经验" target="_blank">年轻程序员需要学习的5大经验</a>
                                    <span class="text-muted">lampcy</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a>
                                    <div>在过去的7年半时间里,我带过的软件实习生超过一打,也看到过数以百计的学生和毕业生的档案。我发现很多事情他们都需要学习。或许你会说,我说的不就是某种特定的技术、算法、数学,或者其他特定形式的知识吗?没错,这的确是需要学习的,但却并不是最重要的事情。他们需要学习的最重要的东西是“自我规范”。这些规范就是:尽可能地写出最简洁的代码;如果代码后期会因为改动而变得凌乱不堪就得重构;尽量删除没用的代码,并添加</div>
                                </li>
                                <li><a href="/article/3392.htm"
                                       title="评“女孩遭野蛮引产致终身不育 60万赔偿款1分未得”医腐深入骨髓" target="_blank">评“女孩遭野蛮引产致终身不育 60万赔偿款1分未得”医腐深入骨髓</a>
                                    <span class="text-muted">nannan408</span>

                                    <div>先来看南方网的一则报道: 
 

再正常不过的结婚、生子,对于29岁的郑畅来说,却是一个永远也无法实现的梦想。从2010年到2015年,从24岁到29岁,一张张新旧不一的诊断书记录了她病情的同时,也清晰地记下了她人生的悲哀。

  粗暴手术让人发寒

  2010年7月,在酒店做服务员的郑畅发现自己怀孕了,可男朋友却联系不上。在没有和家人商量的情况下,她决定堕胎。

  12月5日,</div>
                                </li>
                                <li><a href="/article/3519.htm"
                                       title="使用jQuery为input输入框绑定回车键事件 VS 为a标签绑定click事件" target="_blank">使用jQuery为input输入框绑定回车键事件 VS 为a标签绑定click事件</a>
                                    <span class="text-muted">Everyday都不同</span>
<a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/input/1.htm">input</a><a class="tag" taget="_blank" href="/search/%E5%9B%9E%E8%BD%A6%E9%94%AE%E7%BB%91%E5%AE%9A/1.htm">回车键绑定</a><a class="tag" taget="_blank" href="/search/click/1.htm">click</a><a class="tag" taget="_blank" href="/search/enter/1.htm">enter</a>
                                    <div>假设如题所示的事件为同一个,必须先把该js函数抽离出来,该函数定义了监听的处理: 
  
function search() {
	//监听函数略......	
} 
  
为input框绑定回车事件,当用户在文本框中输入搜索关键字时,按回车键,即可触发search(): 
  
//回车绑定
$(".search").keydown(fun</div>
                                </li>
                                <li><a href="/article/3646.htm"
                                       title="EXT学习记录" target="_blank">EXT学习记录</a>
                                    <span class="text-muted">tntxia</span>
<a class="tag" taget="_blank" href="/search/ext/1.htm">ext</a>
                                    <div>  
1. 准备 
  
(1) 官网:http://www.sencha.com/ 
  
里面有源代码和API文档下载。 
  
EXT的域名已经从www.extjs.com改成了www.sencha.com ,但extjs这个域名会自动转到sencha上。 
  
(2)帮助文档: 
  
想要查看EXT的官方文档的话,可以去这里h</div>
                                </li>
                                <li><a href="/article/3773.htm"
                                       title="mybatis3的mapper文件报Referenced file contains errors" target="_blank">mybatis3的mapper文件报Referenced file contains errors</a>
                                    <span class="text-muted">xingguangsixian</span>
<a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a>
                                    <div>最近使用mybatis.3.1.0时无意中碰到一个问题: 
The errors below were detected when validating the file "mybatis-3-mapper.dtd" via the file "account-mapper.xml".  In most cases these errors can be d</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>