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/1948068291037687808.htm"
                           title="基于注入的一种状态管理的思路" target="_blank">基于注入的一种状态管理的思路</a>
                        <span class="text-muted">自然框架</span>

                        <div>开始尝试做自己的状态管理。上文说了,我们可以定义一个reactive结构的userOnline,然后注入到根组件里面,那么相关的处理函数要怎么办呢?我么可以写一个单独的js文件,然后用import的方式引入进来,然后我们就可以做统一的处理了。js文件如下:import{provide,inject,reactive,readonly}from'vue'importsysUserInfofrom'.</div>
                    </li>
                    <li><a href="/article/1948066769260310528.htm"
                           title="5minites Echarts" target="_blank">5minites Echarts</a>
                        <span class="text-muted">大地缸</span>

                        <div>title:"5minitesEcharts"date:2021-01-27T20:33:42+08:00draft:truetags:['echarts']author:"dadigang"author_cn:"大地缸"personal:"http://www.real007.cn"关于作者http://www.real007.cn/about获取ECharts你可以通过以下几种方式获取Apac</div>
                    </li>
                    <li><a href="/article/1948066533364264960.htm"
                           title="如何在 Stimulsoft JavaScript 报表组件中,设置设计器与查看器主题风格" target="_blank">如何在 Stimulsoft JavaScript 报表组件中,设置设计器与查看器主题风格</a>
                        <span class="text-muted">CodeCraft Studio</span>
<a class="tag" taget="_blank" href="/search/%E6%8E%A7%E4%BB%B6/1.htm">控件</a><a class="tag" taget="_blank" href="/search/%E6%8A%A5%E8%A1%A8%E5%9B%BE%E8%A1%A8%E5%BC%80%E5%8F%91/1.htm">报表图表开发</a><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><a class="tag" taget="_blank" href="/search/Stimulsoft/1.htm">Stimulsoft</a><a class="tag" taget="_blank" href="/search/Dashboard/1.htm">Dashboard</a><a class="tag" taget="_blank" href="/search/Report/1.htm">Report</a><a class="tag" taget="_blank" href="/search/%E6%8A%A5%E8%A1%A8%E4%BB%AA%E8%A1%A8%E7%9B%98%E5%B7%A5%E5%85%B7/1.htm">报表仪表盘工具</a>
                        <div>在现代软件开发中,图形用户界面(GUI)不仅仅是功能的承载体,更是用户体验的关键组成部分。一个美观、统一且具备高度可定制性的界面,能够显著提升系统的专业感和使用效率。Stimulsoft作为功能强大的报表和仪表板解决方案提供商,其JavaScript版本(StimulsoftReports.JS与StimulsoftDashboards.JS)为开发者提供了丰富的内置主题支持,助力快速构建符合品牌</div>
                    </li>
                    <li><a href="/article/1948063252671950848.htm"
                           title="可编程的文字处理引擎TX Text Control .NET Server for Windows Forms" target="_blank">可编程的文字处理引擎TX Text Control .NET Server for Windows Forms</a>
                        <span class="text-muted">burningblog</span>

                        <div>TXTextControl.NETServerforWindowsForms控件是一个完全可编程的,用于ASP.NET服务器环境与MicrosoftInternetExplorer的文字处理引擎。它的设计理念就是在服务器端集中文字处理过程。具体功能:直接在浏览器中以所见即所得方式编辑文档TXTextControl.NETServer为您提供了一个浏览器控件,通过它可以在微软IE中以进行所见即所得模</div>
                    </li>
                    <li><a href="/article/1948058242978476032.htm"
                           title="os.path.join坑的记录" target="_blank">os.path.join坑的记录</a>
                        <span class="text-muted">半步江南</span>

                        <div>importrequestsimportosfromos.pathimportjointar=r"\219\1.html"root=os.getcwd()print(root)file_path=join(str(root),str(tar))print(file_path)输出为D:\workdir\py-dir\crapt_web_siteD:\219\1.html与需要的D:\workdir</div>
                    </li>
                    <li><a href="/article/1948048253111037952.htm"
                           title="php、go、python后端接口签名实现" target="_blank">php、go、python后端接口签名实现</a>
                        <span class="text-muted">奇华智能</span>
<a class="tag" taget="_blank" href="/search/%E5%90%8E%E5%8F%B0%E5%BC%80%E5%8F%91/1.htm">后台开发</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E7%AD%BE%E5%90%8D/1.htm">签名</a><a class="tag" taget="_blank" href="/search/%E6%8E%A5%E5%8F%A3%E5%AE%89%E5%85%A8/1.htm">接口安全</a>
                        <div>1.php实现/**生成签名,$args为请求参数,$key为私钥*/functionmakeSignature($args,$key){if(isset($args['sign'])){$oldSign=$args['sign'];unset($args['sign']);}else{$oldSign='';}ksort($args);$requestString='';foreach($arg</div>
                    </li>
                    <li><a href="/article/1948043837842714624.htm"
                           title="YFCMF-TP6 改后台模块路径方法" target="_blank">YFCMF-TP6 改后台模块路径方法</a>
                        <span class="text-muted">huluang</span>
<a class="tag" taget="_blank" href="/search/php/1.htm">php</a>
                        <div>1、创建表单,表民phpthinkcrud-tbeian_dignji-u12、app路径controllerlang/zh-cnmodelvalidateview以及public/assets/js/backend/找到beian_dignji每个路径下创建需要增加的文件夹名称,如beian,并将以上目录的文件或文件夹剪切到当前文件及下3、编辑表fa_auth_rule规则名称主要为105,上级</div>
                    </li>
                    <li><a href="/article/1948035770312880128.htm"
                           title="Flutter -- Provider在实际项目中的使用" target="_blank">Flutter -- Provider在实际项目中的使用</a>
                        <span class="text-muted">MrLinWX</span>
<a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a><a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a><a class="tag" taget="_blank" href="/search/dart/1.htm">dart</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a>
                        <div>Provider是一个状态管理的类,可以根据实际运用中对某个Widget进行刷新,这个功能的运用比setstate好得多,setstate是对整个树进行刷新,也就是app所在当前页的刷新,而Provider却可以对页面中的一小部分进行刷新,可以大大节省app的消耗。下面简单介绍下我们实际项目中对Provider的运用。1、自定义一个ChangeNotifier类classModifyTextNot</div>
                    </li>
                    <li><a href="/article/1948035642797649920.htm"
                           title="Flutter基础(前端教程①⑨-margin-padding)" target="_blank">Flutter基础(前端教程①⑨-margin-padding)</a>
                        <span class="text-muted">aaiier</span>
<a class="tag" taget="_blank" href="/search/Flutter/1.htm">Flutter</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>比喻:把框的盒子把Container想象成一个带边框的盒子:margin是盒子外面的空白(盒子与周围其他东西的距离)。padding是盒子里面的空白(盒子边框与内部内容的距离)。代码示例(带边框更直观):Container(//盒子外部的空白(与其他组件的距离)margin:EdgeInsets.all(20),//盒子内部的空白(边框与文本的距离)padding:EdgeInsets.all(1</div>
                    </li>
                    <li><a href="/article/1948035011206770688.htm"
                           title="Invalid `Podfile` file: undefined method `exists?‘ for File:Class解决方案" target="_blank">Invalid `Podfile` file: undefined method `exists?‘ for File:Class解决方案</a>
                        <span class="text-muted"></span>

                        <div>mac系统重装之后运行之前的Flutter项目,报下面的错误:当时的Mac系统为12.5.1Flutter的版本号为3.0.5ruby的版本号为3.2.0[!]Invalid`Podfile`file:undefinedmethod`exists?'forFile:Classreturn[]unlessFile.exists?file_path^^^^^^^^Didyoumean?exist?.#</div>
                    </li>
                    <li><a href="/article/1948033964404961280.htm"
                           title="2022-05-05" target="_blank">2022-05-05</a>
                        <span class="text-muted">Ocean佘</span>

                        <div>▍今日一句Insummer,thesongsingsitself.—TheBotticellianTrees,Poet,WilliamCarlosWilliams夏声似管弦。——《波提切利的树》威廉·卡洛斯·威廉斯,诗人▍今日一学·拓展若夫乘天地之正,而御六气之辩,以游无穷者,彼且恶乎待哉?故曰:至人无己,神人无功,圣人无名。——《逍遥游》庄子三籁:天籁;地籁;人籁非彼无我,非我无所取。以道观之,</div>
                    </li>
                    <li><a href="/article/1948023668294610944.htm"
                           title="krpano 渲染全景视频" target="_blank">krpano 渲染全景视频</a>
                        <span class="text-muted">是菜菜的小前端啊</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>使用krpano渲染全景视频,可渲染不同分辨率的视频。使用的krpano版本为1.19index.htmlERROR:Javascriptnotactivatedembedpano({xml:"video.xml",target:"pano",passQueryParameters:"startscene,startlookat"});video.xmlif(device.panovideosup</div>
                    </li>
                    <li><a href="/article/1948022393616265216.htm"
                           title="svn转git实践分享" target="_blank">svn转git实践分享</a>
                        <span class="text-muted">shyingsheng</span>

                        <div>很多公司都会碰到SCM工具转变的问题,时下git是最热门的SCM工具。下面简单总结我在实施项目由svn转git的实际操作。这里我们托管git的服务器用的是gitlab。git提供一条非常有用的命令叫做gitsvn,它基本上就可以满足你完成svn转git的核心工作。git的最新版本都已经自带有git-svn功能可以直接用。1.首先在gitlab上创建一个project,权限管理和项目设定这里不展开了</div>
                    </li>
                    <li><a href="/article/1948022154389942272.htm"
                           title="oracle查询数据结构滤涉及的sql语句" target="_blank">oracle查询数据结构滤涉及的sql语句</a>
                        <span class="text-muted">胡斌附体</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a>
                        <div>背景:去客户数据库查询表数据。了解表结构以及表字段及索引等信息oracle数据库SELECTt.OWNERAS"用户名",t.TABLE_NAMEAS"表名",c.COMMENTSAS"表说明"FROMALL_TABLEStLEFTJOINALL_TAB_COMMENTScONt.OWNER=c.OWNERANDt.TABLE_NAME=c.TABLE_NAMEANDc.TABLE_TYPE='T</div>
                    </li>
                    <li><a href="/article/1948021649915834368.htm"
                           title="技术演进中的开发沉思-42 MFC系列:Components 与 ActiveX Controls" target="_blank">技术演进中的开发沉思-42 MFC系列:Components 与 ActiveX Controls</a>
                        <span class="text-muted">chilavert318</span>
<a class="tag" taget="_blank" href="/search/%E7%86%AC%E4%B9%8B%E6%BB%B4%E6%B0%B4%E7%A9%BF%E7%9F%B3/1.htm">熬之滴水穿石</a><a class="tag" taget="_blank" href="/search/mfc/1.htm">mfc</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a>
                        <div>点击程序启动时,是不是看过有加载的画面。在VC开发时,可使用VC++的ComponentGallery,找到Splashscreen组件,当时觉得组件就是给程序员的暖手宝。一、ComponentGalleryComponentGallery在VC++里的位置很特别——它藏在“Project”菜单的二级目录里,就像老衣柜最上层那个带锁的抽屉,不常用但一打开全是宝贝。当年我们团队有个不成文的规矩:新项</div>
                    </li>
                    <li><a href="/article/1948018499033034752.htm"
                           title="python+playwright 学习-91 cookies的获取保存删除相关操作" target="_blank">python+playwright 学习-91 cookies的获取保存删除相关操作</a>
                        <span class="text-muted">上海-悠悠</span>
<a class="tag" taget="_blank" href="/search/playwright/1.htm">playwright</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>前言playwright可以获取浏览器缓存的cookie信息,可以将这些cookies信息保存到本地,还可以加载本地cookies。获取cookies相关操作在登录前和登录后分别打印cookies信息,对比查看是否获取成功。fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:browser=p.chromium.</div>
                    </li>
                    <li><a href="/article/1948018372813844480.htm"
                           title="Python——登录后获取cookie访问页面" target="_blank">Python——登录后获取cookie访问页面</a>
                        <span class="text-muted">尖叫的太阳</span>

                        <div>importrequestsurl="https://kyfw.12306.cn/otn/view/index.html"#网址首页https://kyfw.12306.cn/otn/view/index.html的cookieheaders={'User-Agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)','Cookie':'JSESSIONID=3330D</div>
                    </li>
                    <li><a href="/article/1948016610178560000.htm"
                           title="python request 获取cookies value值的方法" target="_blank">python request 获取cookies value值的方法</a>
                        <span class="text-muted">dianqianwei8752</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/c%2Fc%2B%2B/1.htm">c/c++</a>
                        <div>importrequestsres=requests.get(url)cookies=requests.utils.dict_from_cookiejar(res.cookies)print(cookies[key])转载于:https://www.cnblogs.com/VseYoung/p/python_cookies.html</div>
                    </li>
                    <li><a href="/article/1948012325986430976.htm"
                           title="Python一次性批量下载网页内所有链接" target="_blank">Python一次性批量下载网页内所有链接</a>
                        <span class="text-muted">Zhy_Tech</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/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>需要下载一个数据集,该数据集每一张图对应网页内一条链接,如下图所示。一开始尝试使用迅雷,但是迅雷一次性只能下载30条链接。采用Python成功实现一次性批量下载。importosimportrequestsfrombs4importBeautifulSoup#目标网页的URLurl="https://"#请将此处替换为实际的网页URL#指定下载文件的文件夹路径#使用原始字符串download_fo</div>
                    </li>
                    <li><a href="/article/1948010940255498240.htm"
                           title="BSCAN 在糖尿病患者数据聚类分析中的应用" target="_blank">BSCAN 在糖尿病患者数据聚类分析中的应用</a>
                        <span class="text-muted">wh_xia_jun</span>
<a class="tag" taget="_blank" href="/search/AI%2B%E5%8C%BB%E7%96%97/1.htm">AI+医疗</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA/1.htm">支持向量机</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>完整代码:importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.clusterimportDBSCANfromsklearn.preprocessingimportStandardScalerfromsklearn.datasetsimportmake_blobs#设置随机种子,确保结果可复现np.random.seed(42)#1.生成模拟</div>
                    </li>
                    <li><a href="/article/1948005141982539776.htm"
                           title="7、开启C与Unity 3D的编程之旅" target="_blank">7、开启C与Unity 3D的编程之旅</a>
                        <span class="text-muted">珊珊333333</span>
<a class="tag" taget="_blank" href="/search/Unity/1.htm">Unity</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/Unity/1.htm">Unity</a><a class="tag" taget="_blank" href="/search/3D/1.htm">3D</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E5%9F%BA%E7%A1%80/1.htm">编程基础</a>
                        <div>开启C#与Unity3D的编程之旅1.前期准备在进行每一个教程之前,都有一个名为Scene的场景文件。在整个学习过程中,教程通常从下载项目中的Scene文件开始。打开场景的方法有两种:-直接在项目面板的Assets目录下双击场景图标。-选择File→OpenScene来打开项目中的任何场景。2.学习回顾与要点创建并将新的C#文件分配给对象并不复杂,在Unity3D编辑器中有多种方法可以实现。添加代</div>
                    </li>
                    <li><a href="/article/1947999598358360064.htm"
                           title="解决Error: Not Found:Page[5][-1,81] at view.umd.min.js" target="_blank">解决Error: Not Found:Page[5][-1,81] at view.umd.min.js</a>
                        <span class="text-muted">二七狂人</span>
<a class="tag" taget="_blank" href="/search/uniapp/1.htm">uniapp</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><a class="tag" taget="_blank" href="/search/uniapp/1.htm">uniapp</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a>
                        <div>场景说明:uniapp使用组件,在APP环境出现,在H5环境正常。单页面上多处使用该组件,使用同名参数设置数据,应用切换效果时,触发请求不同接口,返回数据格式不同。使用v-if时出现,使用v-show时正常。原因分析:尚不明确。解决方案1:将组件注册多个不同名称来使用,对应不同的返回数据。importvTabsfrom"@/components/v-tabs.vue"importvTabs1fro</div>
                    </li>
                    <li><a href="/article/1947998768192352256.htm"
                           title="http协议" target="_blank">http协议</a>
                        <span class="text-muted">默笙666</span>

                        <div>浏览器向服务器发送的请求格式GET/HTTP/1.1请求目标协议版本(请求的时候至少要这个)第一个/表示根目录Host:127.0.0.1:8080服务器的IP地址和端口Connection:keep-alive长链接Upgrade-Insecure-Requests:1浏览器告诉服务器,自己可以处理https协议User-Agent:Mozilla/5.0(WindowsNT6.1;Win64;</div>
                    </li>
                    <li><a href="/article/1947988382898515968.htm"
                           title="【Conda】conda config 查看当前源&恢复默认源&更换其他源" target="_blank">【Conda】conda config 查看当前源&恢复默认源&更换其他源</a>
                        <span class="text-muted">F_D_Z</span>
<a class="tag" taget="_blank" href="/search/conda/1.htm">conda</a><a class="tag" taget="_blank" href="/search/conda/1.htm">conda</a><a class="tag" taget="_blank" href="/search/config/1.htm">config</a>
                        <div>目录查看当前源恢复默认源更换其他源查看当前源showsource命令查看当前源情况condaconfig--show-sources恢复默认源通过remove命令恢复默认源condaconfig--remove-keychannels再次使用showsource命令查看当前源情况更换其他源清华源https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/</div>
                    </li>
                    <li><a href="/article/1947984853899210752.htm"
                           title="Shader编写指南(六十一):使用 Visual Studio 调试 Unity 着色器(Windows 平台)" target="_blank">Shader编写指南(六十一):使用 Visual Studio 调试 Unity 着色器(Windows 平台)</a>
                        <span class="text-muted">小李也疯狂</span>
<a class="tag" taget="_blank" href="/search/visual/1.htm">visual</a><a class="tag" taget="_blank" href="/search/studio/1.htm">studio</a><a class="tag" taget="_blank" href="/search/unity/1.htm">unity</a><a class="tag" taget="_blank" href="/search/%E7%9D%80%E8%89%B2%E5%99%A8/1.htm">着色器</a><a class="tag" taget="_blank" href="/search/shader/1.htm">shader</a>
                        <div>在Windows平台上,可通过VisualStudio结合DirectX11/12对Unity着色器进行调试。以下是详细步骤及注意事项:一、准备工作:启用调试符号在需要调试的着色器中添加编译指令,确保生成包含调试符号的代码:hlsl#pragmaenable_d3d11_debug_symbols//启用DirectX11调试符号//或针对DirectX12(需配合PIX调试)注意:该指令会导致性</div>
                    </li>
                    <li><a href="/article/1947983216220631040.htm"
                           title="斯威夫特山地车_斯威夫特字典" target="_blank">斯威夫特山地车_斯威夫特字典</a>
                        <span class="text-muted">cunchi4221</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a>
                        <div>斯威夫特山地车SwiftDictionaryisoneoftheimportantcollectiontypes.Let’sgetstartedbylaunchingtheplaygroundinXCode.Swift字典是重要的收藏类型之一。让我们从XCode启动游乐场开始。斯威夫特字典(SwiftDictionary)SwiftDictionaryisacollectionofkey-valu</div>
                    </li>
                    <li><a href="/article/1947983089376489472.htm"
                           title="PyQt4 -- 设置系统托盘显示" target="_blank">PyQt4 -- 设置系统托盘显示</a>
                        <span class="text-muted">agoodob</span>
<a class="tag" taget="_blank" href="/search/PyQt4/1.htm">PyQt4</a><a class="tag" taget="_blank" href="/search/import/1.htm">import</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E6%A1%A3/1.htm">文档</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a>
                        <div>文章转载请著名出处。这篇文章教大家写PyQt4程序的时候如何设置程序在系统托盘区域显示图标系统托盘指的是这块区域:(笔者用的是window7)直接上源码:fromPyQt4importQtGuiimportsysapp=QtGui.QApplication(sys.argv)w=QtGui.QWidget()w.resize(250,150)w.move(300,300)w.setWindowTi</div>
                    </li>
                    <li><a href="/article/1947982711343869952.htm"
                           title="【论文蒸馏】Recent Advances in Speech Language Models: A Survey" target="_blank">【论文蒸馏】Recent Advances in Speech Language Models: A Survey</a>
                        <span class="text-muted">Greener_Pat</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%BA%E6%96%87%E8%92%B8%E9%A6%8F/1.htm">论文蒸馏</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><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/AudioLM/1.htm">AudioLM</a>
                        <div>AbstractLLM蓬勃发展,但从交互的自然性上看语音大模型(SpeechLM)有巨大的发展空间。直接的方法是ASR(语音转文字)+LLM+TTS(文字转语音),但是这样有其固有的限制,而端到端的SpeechLM表现更好,本文及其方法论做了一个概览的综述1.Introduction大语言模型提供了强大的AI基础支架,在其它领域有着广泛应用。但交互上不自然,所以需要声学大模型。一种直接的实现方式是</div>
                    </li>
                    <li><a href="/article/1947982583337906176.htm"
                           title="Mysql编译" target="_blank">Mysql编译</a>
                        <span class="text-muted">Neng_Miao</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/adb/1.htm">adb</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>Mysql编译1、编译环境硬件环境:香橙派5aarch64架构软件环境:Ubuntu22.04.3LTS编译版本:mysql-5.7.43.tar.gz编译目录:/data/make_test/mysql_for_make/mysql-5.7.43#根据需要调整,本次测试使用2、编译操作(1)、获取源码包wgethttps://dev.mysql.com/get/Downloads/MySQL-5</div>
                    </li>
                    <li><a href="/article/1947973260637433856.htm"
                           title="【日志】力扣11.盛水最多的容器" target="_blank">【日志】力扣11.盛水最多的容器</a>
                        <span class="text-muted">SL.Pacifica</span>
<a class="tag" taget="_blank" href="/search/%E6%97%A5%E5%BF%97/1.htm">日志</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>2024.11.15【力扣刷题】11.盛水最多的容器-力扣(LeetCode)intmaxArea(int*height,intheightSize){intmax=0;intV=0;intleft=0;intright=heightSize-1;while(leftheight[right]){V=height[right]*(right-left);if(V>max){max=V;}right</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>