解析HLS视频格式

HLS简介

M3U8,用 UTF-8 编码。"M3U" 和 "M3U8" 文件都是苹果公司使用的 HTTP Live Streaming(HLS) 协议格式的基础; 是 Unicode 版本的 M3U

M3U8文件是M3U文件的一种,只不过它的编码格式是UTF-8。M3U使用Latin-1字符集编码。M3U的全称是Moving Picture Experts Group Audio Layer 3 Uniform Resource Locator,即mp3 URL。M3U是纯文本文件;

所以UTF-8编码的M3U文件也简称为 M3U8;

HLS 是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。

HLS 的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的 extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。

HLS 只请求基本的 HTTP 报文,与实时传输协议(RTP)不同,HLS 可以穿过任何允许 HTTP 数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。这是HLS应用在直播上的一大优势。

如果在直播中使用HLS技术,那么执行流程如下:图片来源于苹果官网;


解析HLS视频格式_第1张图片

我们播放一个HLS,首先要对HLS流对应的M3U8文件进行解析,解析M3U8文件,首先要搞清楚M3U8的封装格式;

HLS格式解析

HLS流可以用于直播,也可以用于点播;

M3U8 文件实质是一个播放列表(playlist),其可能是一个媒体播放列表(Media Playlist),或者是一个主列表(Master Playlist)。

1.HLS类型

当 M3U8 文件作为媒体播放列表(Media Playlist)时,其内部信息记录的是一系列媒体片段资源,顺序播放该片段资源,即可完整展示多媒体资源。其格式如下所示:

#EXTM3U
#EXT-X-TARGETDURATION:10

#EXTINF:9.009,
http://media.example.com/first.ts
#EXTINF:9.009,
http://media.example.com/second.ts
#EXTINF:3.003,
http://media.example.com/third.ts
#EXT-X-ENDLIST

当 M3U8 作为主播放列表(Master Playlist)时,其内部提供的是同一份媒体资源的多份流列表资源。其格式如下所示:

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/lo_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/hi_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/high/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://example.com/audio/index.m3u8
#EXT-X-ENDLIST

2.HLS基本字段


#EXTM3U                    M3U8文件头,必须放在第一行;
#EXT-X-MEDIA-SEQUENCE      第一个TS分片的序列号,一般情况下是0,但是在直播场景下,这个序列号标识直播段的起始位置; #EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION      每个分片TS的最大的时长;   #EXT-X-TARGETDURATION:10     每个分片的最大时长是 10s
#EXT-X-ALLOW-CACHE         是否允许cache;          #EXT-X-ALLOW-CACHE:YES      #EXT-X-ALLOW-CACHE:NO    默认情况下是YES
#EXT-X-ENDLIST             M3U8文件结束符;
#EXTINF                    extra info,分片TS的信息,如时长,带宽等;一般情况下是    #EXTINF:,[] 后面可以跟着其他的信息,逗号之前是当前分片的ts时长,分片时长 移动要小于 #EXT-X-TARGETDURATION 定义的值;
#EXT-X-VERSION             M3U8版本号
#EXT-X-DISCONTINUITY       该标签表明其前一个切片与下一个切片之间存在中断。下面会详解
#EXT-X-PLAYLIST-TYPE       表明流媒体类型;
#EXT-X-KEY                 是否加密解析,    #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"    加密方式是AES-128,秘钥需要请求   https://priv.example.com/key.php?r=52  ,请求回来存储在本地;
</code></pre> 
 <h4>3.如何判断HLS是否是直播</h4> 
 <blockquote> 
  <ul> 
   <li>1.判断是否存在 #EXT-X-ENDLIST</li> 
  </ul> 
 </blockquote> 
 <p>对于一个M3U8文件,如果结尾不存在 #EXT-X-ENDLIST,那么一定是 直播,不是点播;</p> 
 <blockquote> 
  <ul> 
   <li>2.判断 #EXT-X-PLAYLIST-TYPE 类型</li> 
  </ul> 
 </blockquote> 
 <p>'#EXT-X-PLAYLIST-TYPE' 有两种类型,</p> 
 <p>VOD 即 Video on Demand,表示该视频流为点播源,因此服务器不能更改该 M3U8 文件;</p> 
 <p>EVENT 表示该视频流为直播源,因此服务器不能更改或删除该文件任意部分内容(但是可以在文件末尾添加新内容)(注:VOD 文件通常带有 EXT-X-ENDLIST 标签,因为其为点播源,不会改变;而 EVEVT 文件初始化时一般不会有 EXT-X-ENDLIST 标签,暗示有新的文件会添加到播放列表末尾,因此也需要客户端定时获取该 M3U8 文件,以获取新的媒体片段资源,直到访问到 EXT-X-ENDLIST 标签才停止)。</p> 
 <h4>4.HLS提供多码率</h4> 
 <p>上面的Master Playlist 就是会提供 多份码率的列表资源,如下:</p> 
 <pre><code>
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=150000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=240000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/lo_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=440000,RESOLUTION=416x234,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/hi_mid/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=640000,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
http://example.com/high/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=64000,CODECS="mp4a.40.5"
http://example.com/audio/index.m3u8
#EXT-X-ENDLIST
</code></pre> 
 <p>'#EXT-X-STREAM-INF' 字段后面有:<br> BANDWIDTH 指定码率<br> RESOLUTION 分辨率<br> PROGRAM-ID 唯一ID<br> CODECS 指定流的编码类型</p> 
 <p>码率、码流是同一个概念,是数据传输时单位时间传送的数据量,一般用单位kbps表示。</p> 
 <p>视频码率就是指视频文件在单位时间内使用的数据量。简单理解就是要播放一秒的视频需要多少数据,从这个角度就不难理解通常码率越高视频质量也越好,相应的文件体积也会越大。码率、视频质量、文件体积是正相关的。但当码率超过一定数值后,对图像的质量影响就不大了。几乎所有的编码算法都在追求用最低的码率达到最少的失真(最好的清晰度);</p> 
 <h4>5.HLS中插入广告</h4> 
 <p>M3U8文件中插入广告,要想灵活的控制广告,则广告可以插入任何视频中,那么无法保证广告的编码格式和码率等信息和原视频的编码格式等信息保持一致,就必须告知播放器,在插入广告的地方,ts片段发生的信息变更,需要播放器适配处理。</p> 
 <p>'#EXT-X-DISCONTINUITY' 该标签表明其前一个切片与下一个切片之间存在中断。说明有不连续的视频出现,这个视频绝大多数情况下就是广告;<br> '#EXT-X-DISCONTINUITY' 这个字段就是来做这个事情的;<br> 当出现以下情况时,必须使用该标签:</p> 
 <blockquote> 
  <ul> 
   <li>file format</li> 
   <li>encoding parameters</li> 
  </ul> 
 </blockquote> 
 <p>下面展示一个插入广告的例子:</p> 
 <pre><code>#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
movieA.ts
#EXTINF:10.0,
movieB.ts
 ...
#EXT-X-ENDLIST
</code></pre> 
 <p>想在开头插入广告:</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> 
 <p>当然你可以在任意位置插入广告。</p> 
 <p>HLS协议草案:HLS协议中还有很多字段,但是有些字段其实就是协议,在实际应用中并不大;大家可以参考看看;</p> 
 <p>https://tools.ietf.org/html/rfc8216</p> 
 <h3>启示</h3> 
 <h4>1.视频切换清晰度功能</h4> 
 <p>目前线上有很多的M3U8文件都提供多码率(多种清晰度)的选择,我们可以改进我们的功能,为用户提供多种视频清晰度的选择;</p> 
 <h4>2.视频广告</h4> 
 <p>目前M3U8视频占我们线上视频的比例是近60%,量非常大,我们可以在M3U8视频中任意位置插入一些广告,为探索商业化开辟新的路。</p> 
 <p><strong>感谢关注公众号JeffMony,持续给你带来音视频方面的知识。</strong></p> 
 <div class="image-package"> 
  <div class="image-container" style="max-width: 258px; max-height: 258px;"> 
   <div class="image-view"> 
    <a href="http://img.e-com-net.com/image/info10/2a591101e715474eb3f16077b33681b9.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info10/2a591101e715474eb3f16077b33681b9.jpg" width="258" height="258" alt="解析HLS视频格式_第2张图片" style="border:1px solid black;"></a> 
   </div> 
  </div> 
  <div class="image-caption"></div> 
 </div> 
 <p></p> 
</article>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1246136552942325760"></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/1892466429802901504.htm"
                           title="深入解析JVM性能问题定位与优化" target="_blank">深入解析JVM性能问题定位与优化</a>
                        <span class="text-muted">测试不打烊</span>
<a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/1.htm">性能测试</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a>
                        <div>JVM性能问题定位与优化详解:架构、内存、Linux命令与监控工具的全面解析引言Java虚拟机(JVM)是运行Java应用程序的核心组件,它管理内存、执行字节码,并提供垃圾回收机制等功能。然而,随着应用规模的增长,JVM的性能问题时常会成为系统瓶颈。为了有效定位和优化JVM性能问题,我们需要从JVM架构、内存管理、Linux系统命令,以及监控工具入手,对JVM的各类指标进行详尽的分析和优化。本文将</div>
                    </li>
                    <li><a href="/article/1892459106929799168.htm"
                           title="十大经典排序算法的C++实现与解析" target="_blank">十大经典排序算法的C++实现与解析</a>
                        <span class="text-muted">金外飞176</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>经典排序算法的C++实现与解析在计算机科学中,排序算法是数据处理和算法设计的基础。无论是处理大规模数据还是优化小规模数据的性能,排序算法都扮演着重要角色。本文将介绍10种经典排序算法,并提供它们的C++实现代码。这些算法包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、基数排序和桶排序。1.冒泡排序(BubbleSort)原理冒泡排序是最简单的排序算法之一。它通过重</div>
                    </li>
                    <li><a href="/article/1892458727408201728.htm"
                           title="马斯克的Grok-3:技术突破与行业冲击的深度解析" target="_blank">马斯克的Grok-3:技术突破与行业冲击的深度解析</a>
                        <span class="text-muted">♢.*</span>
<a class="tag" taget="_blank" href="/search/%E9%A9%AC%E6%96%AF%E5%85%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/%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大模型</a><a class="tag" taget="_blank" href="/search/xAI/1.htm">xAI</a><a class="tag" taget="_blank" href="/search/Grok/1.htm">Grok</a><a class="tag" taget="_blank" href="/search/3/1.htm">3</a>
                        <div>一、技术架构与核心突破超大规模算力集群Grok-3基于xAI自研的Colossus超级计算机训练完成,搭载20万块英伟达H100GPU,累计消耗2亿GPU小时,算力投入是前代Grok-2的10倍48。这一规模远超行业平均水平,例如中国团队DeepSeek-V3的算力消耗仅为Grok-3的1/2634。技术挑战:团队在122天内完成首期10万块GPU部署,克服了散热、电力供应等工程难题1。思维链推理</div>
                    </li>
                    <li><a href="/article/1892444469572202496.htm"
                           title="【Python 学习 / 7】模块与文件操作" target="_blank">【Python 学习 / 7】模块与文件操作</a>
                        <span class="text-muted">卜及中</span>
<a class="tag" taget="_blank" href="/search/Python%E5%9F%BA%E7%A1%80/1.htm">Python基础</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</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%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>文章目录前言一、导入模块1.导入整个模块2.导入模块中的特定函数3.给模块或函数起别名二、常用模块1.`math`模块2.`random`模块3.`os`模块4.`sys`模块三、文件处理1.打开文件2.读取文件3.写入文件4.关闭文件5.使用`with`语句管理文件四、日期时间1.`datetime`模块获取当前日期和时间创建日期和时间对象格式化日期和时间解析字符串为日期对象2.`time`模块</div>
                    </li>
                    <li><a href="/article/1892441186765959168.htm"
                           title="23种设计模式-享元(Flyweight)设计模式" target="_blank">23种设计模式-享元(Flyweight)设计模式</a>
                        <span class="text-muted">萨达大</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E8%80%83%E4%B8%AD%E7%BA%A7-%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E5%B8%88/1.htm">软考中级-软件设计师</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/%E4%BA%AB%E5%85%83%E6%A8%A1%E5%BC%8F/1.htm">享元模式</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E8%80%83/1.htm">软考</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E5%B8%88/1.htm">软件设计师</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/%E8%A1%8C%E4%B8%BA%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">行为型设计模式</a><a class="tag" taget="_blank" href="/search/JAVA/1.htm">JAVA</a>
                        <div>文章目录一.什么是享元设计模式?二.享元模式的特点三.享元模式的结构四.享元模式的优缺点五.享元模式的C++实现六.享元模式的JAVA实现七.代码解析八.总结类图:享元设计模式类图一.什么是享元设计模式? 享元(Flyweight)设计模式是一种结构型设计模式,通过共享对象来减少内存占用和对象创建开销。它通过将对象的可共享部分与不可共享部分分离,减少重复对象的数量,从而节省内存。 享元模式的核心思</div>
                    </li>
                    <li><a href="/article/1892439576190971904.htm"
                           title="域名被微信拦截与QQ拦截的对比分析" target="_blank">域名被微信拦截与QQ拦截的对比分析</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E6%8B%A6%E6%88%AA%E5%99%A8%E5%BE%AE%E4%BF%A1qq%E5%9F%9F%E5%90%8D/1.htm">拦截器微信qq域名</a>
                        <div>微信与QQ作为腾讯旗下的两大社交平台,均会对存在风险的域名进行拦截,但两者在机制、表现及处理方式上存在显著差异。以下是两者的相同点与不同点,结合具体拦截表现进行解析:一、相同点触发原因相似域名历史问题:若域名曾因违规内容被举报或封禁,再次使用时可能被微信和QQ同时拦截。备案要求:未备案的域名或未加入腾讯白名单的域名,均可能被拦截。诱导分享与流量过大:频繁诱导用户分享(如“转发得红包”)或短时间内传</div>
                    </li>
                    <li><a href="/article/1892433236244623360.htm"
                           title="全面解析 Enterprise Architect(EA)活动图的工具集:从元素到关系的详尽指南" target="_blank">全面解析 Enterprise Architect(EA)活动图的工具集:从元素到关系的详尽指南</a>
                        <span class="text-muted">泡沫o0</span>
<a class="tag" taget="_blank" href="/search/C%2FC%2B%2B/1.htm">C/C++</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B8%96%E7%95%8C%3A/1.htm">编程世界:</a><a class="tag" taget="_blank" href="/search/%E6%8E%A2%E7%B4%A2C%2FC%2B%2B%E7%9A%84%E5%A5%A5%E5%A6%99/1.htm">探索C/C++的奥妙</a><a class="tag" taget="_blank" href="/search/c%2B%2B20/1.htm">c++20</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/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/uml/1.htm">uml</a><a class="tag" taget="_blank" href="/search/arm/1.htm">arm</a>
                        <div>目录标题第一章:引言——理解活动图的重要性1.1什么是活动图?1.1.1活动图的组成元素1.1.2活动图的应用场景1.2为什么选择EA作为建模工具?1.2.1EA的强大功能1.2.2EA与其他建模工具的对比第二章:活动图中的核心元素2.1活动类元素2.1.1Activity(活动)示例:2.1.2Action(动作)示例:2.1.3Partition(泳道)示例:2.1.4Send(发送)与Rec</div>
                    </li>
                    <li><a href="/article/1892427427007754240.htm"
                           title="PSINS工具箱函数介绍——ggnss(ggpsvars+gbdvars+gglovars)" target="_blank">PSINS工具箱函数介绍——ggnss(ggpsvars+gbdvars+gglovars)</a>
                        <span class="text-muted">MATLAB卡尔曼</span>
<a class="tag" taget="_blank" href="/search/PSINS%E5%87%BD%E6%95%B0/1.htm">PSINS函数</a><a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a><a class="tag" taget="_blank" href="/search/PSINS/1.htm">PSINS</a>
                        <div>文章目录关于工具箱工具箱概述学习路径指南GNSS参数初始化函数`ggnss`函数功能参数体系结构典型应用场景系统参数初始化操作指南执行流程运行结果解析函数源码深度解析代码架构扩展开发建议关于工具箱kfinit是kf的参数初始化函数,用于初始化滤波参数本文所述的代码需要基于PSINS工具箱,工具箱的讲解:PSINS初学指导:https://blog.csdn.net/callmeup/article</div>
                    </li>
                    <li><a href="/article/1892412673446965248.htm"
                           title="pythonxml模块高级用法_Python minidom模块用法示例【DOM写入和解析XML】" target="_blank">pythonxml模块高级用法_Python minidom模块用法示例【DOM写入和解析XML】</a>
                        <span class="text-muted">Lucy-露西娅</span>
<a class="tag" taget="_blank" href="/search/pythonxml%E6%A8%A1%E5%9D%97%E9%AB%98%E7%BA%A7%E7%94%A8%E6%B3%95/1.htm">pythonxml模块高级用法</a>
                        <div>本文实例讲述了Pythonminidom模块用法。分享给大家供大家参考,具体如下:一、DOM写XML文件#-*-coding:utf-8-*-#!python3#导入minidomfromxml.domimportminidom#1.创建DOM树对象dom=minidom.Document()#2.创建根节点。每次都要用DOM对象来创建任何节点。root_node=dom.createElemen</div>
                    </li>
                    <li><a href="/article/1892409395581612032.htm"
                           title="深入解析 Flutter Riverpod:从原理到实战" target="_blank">深入解析 Flutter Riverpod:从原理到实战</a>
                        <span class="text-muted">陈皮话梅糖@</span>
<a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a><a class="tag" taget="_blank" href="/search/Riverpod/1.htm">Riverpod</a>
                        <div>深入解析FlutterRiverpod:从原理到实战Riverpod是Flutter社区中一个强大且灵活的状态管理工具,被称为Provider的升级版。它解决了Provider的一些局限性,比如类型安全、全局状态管理的灵活性、不依赖BuildContext等。Riverpod的设计理念是简洁、灵活和高性能,适合从小型到大型项目的状态管理需求。本篇博客将详细分析Riverpod的核心原理、常见用法,</div>
                    </li>
                    <li><a href="/article/1892408765760729088.htm"
                           title="XML的介绍及使用DOM,DOM4J解析xml文件" target="_blank">XML的介绍及使用DOM,DOM4J解析xml文件</a>
                        <span class="text-muted">late summer182</span>
<a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>1XML简介XML(可扩展标记语言,ExtensibleMarkupLanguage)是一种用于定义文档结构和数据存储的标记语言。它主要用于在不同的系统之间传输和存储数据。作用:数据交互配置应用程序和网站Ajax基石特点XML与操作系统、编程语言的开发平台无关实现不同系统之间的数据交换2XML文档结构王珊.NET高级编程包含C#框架和网络编程等李明明XML基础编程包含XML基础概念和基本作用2.1</div>
                    </li>
                    <li><a href="/article/1892408764976394240.htm"
                           title="Redis 全方位解析:从入门到实战" target="_blank">Redis 全方位解析:从入门到实战</a>
                        <span class="text-muted">kiss strong</span>
<a class="tag" taget="_blank" href="/search/redis/1.htm">redis</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/%E7%BC%93%E5%AD%98/1.htm">缓存</a>
                        <div>引言在当今互联网快速发展的时代,高并发、低延迟的应用场景越来越普遍。Redis,作为一款高性能的开源数据库,以其卓越的性能和灵活的功能,成为了许多开发者的首选工具。无论是在缓存、消息队列,还是在实时数据分析等领域,Redis都展现出了强大的能力。本文将从Redis的基本介绍、官网、安装、特性,到具体的存储类型、Java代码实例、SpringBoot整合,以及Redis的主要作用和应用场景,进行全面</div>
                    </li>
                    <li><a href="/article/1892406744987004928.htm"
                           title="《Java高级-Xml:利用DOM4j解析XML》" target="_blank">《Java高级-Xml:利用DOM4j解析XML》</a>
                        <span class="text-muted">大大大钢琴</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Java%EF%BC%9A%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93/1.htm">Java:经验总结</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>利用DOM4j解析XMLdom4j是一个简单的开源库,用于处理XML、XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。dom4j是目前在xml解析方面是最优秀的(Hibernate、Sun的JAXM也都使用dom4j来解析XML),它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XMLSchema支持以及用于大文档或流化文档</div>
                    </li>
                    <li><a href="/article/1892399811307565056.htm"
                           title="无人机挂载5G通信基站网络恢复技术详解" target="_blank">无人机挂载5G通信基站网络恢复技术详解</a>
                        <span class="text-muted">无人机技术圈</span>
<a class="tag" taget="_blank" href="/search/%E6%97%A0%E4%BA%BA%E6%9C%BA%E6%8A%80%E6%9C%AF/1.htm">无人机技术</a><a class="tag" taget="_blank" href="/search/%E6%97%A0%E4%BA%BA%E6%9C%BA/1.htm">无人机</a>
                        <div>无人机挂载5G通信基站网络恢复技术是一种创新的应急通信解决方案,特别适用于自然灾害等突发情况下快速恢复通信服务。以下是对该技术的详细解析:一、技术背景与意义在自然灾害如地震、洪水等发生后,通信基础设施往往受到严重破坏,导致灾区与外界的通信中断。无人机挂载5G通信基站技术能够迅速搭建临时通信网络,为灾区提供应急通信服务,保障抢险救灾工作的顺利开展。二、技术原理与组成1.技术原理:无人机作为空中平台,</div>
                    </li>
                    <li><a href="/article/1892392628524216320.htm"
                           title="【Linux系统】线程安全与可重入性:深入探讨两者的关系" target="_blank">【Linux系统】线程安全与可重入性:深入探讨两者的关系</a>
                        <span class="text-muted">时差freebright</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Linux%E7%BA%BF%E7%A8%8B/1.htm">Linux线程</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>在多线程编程中,线程安全和可重入性是两个非常重要的概念。虽然它们有一定的关联,但并不完全等同。本文将详细解析这两个概念的定义、区别以及它们之间的关系,并通过具体的例子帮助读者更好地理解。0.核心的两句话可重入函数是线程安全函数的⼀种线程安全不一定是可重入的,而可重入函数则⼀定是线程安全的。1.线程安全(ThreadSafety)线程安全是指一个函数或一段代码在多线程环境下被调用时,能够正确地处理多</div>
                    </li>
                    <li><a href="/article/1892381274820112384.htm"
                           title="AI编剧系统深度解析:从算法架构到影视工业化应用实战" target="_blank">AI编剧系统深度解析:从算法架构到影视工业化应用实战</a>
                        <span class="text-muted">Coderabo</span>
<a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/R1%E6%A8%A1%E5%9E%8B%E4%BC%81%E4%B8%9A%E7%BA%A7%E5%BA%94%E7%94%A8/1.htm">R1模型企业级应用</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/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>媒体娱乐行业革命:AI编剧创意辅助系统架构解析与实战应用一、行业背景与技术架构在流媒体内容需求激增的当下,传统编剧模式面临产能瓶颈。AI编剧创意辅助系统通过自然语言处理(NLP)、生成对抗网络(GAN)和知识图谱技术,构建了包含剧本生成、情节优化、角色塑造等模块的智能创作平台。核心架构分为:知识图谱层:整合影视剧本数据库(IMSDb)、维基百科等结构化数据NLP处理层:基于Transformer的</div>
                    </li>
                    <li><a href="/article/1892378626968580096.htm"
                           title="C# 语法 vs. C++ 语法:全面对比与核心区别解析" target="_blank">C# 语法 vs. C++ 语法:全面对比与核心区别解析</a>
                        <span class="text-muted">不会编程的程序猿ᅟ</span>
<a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>引言C#和C++是两种广泛使用的编程语言,分别由微软和BjarneStroustrup开发。尽管它们都属于C语言家族,但在语法、特性和应用场景上存在显著差异。本文将从多个角度详细对比C#和C++的语法区别,帮助你更好地理解这两种语言的特点。一、语言设计目标1.C#设计目标:C#是一种现代化的、面向对象的编程语言,旨在简化开发过程,提高开发效率。主要应用:Windows应用、Web开发、游戏开发(U</div>
                    </li>
                    <li><a href="/article/1892368915095416832.htm"
                           title="JVM调优 从Full GC报警到性能提升90%的调优实录" target="_blank">JVM调优 从Full GC报警到性能提升90%的调优实录</a>
                        <span class="text-muted">C_V_Better</span>
<a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/java%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">java性能优化</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>背景事故现场:某社交APP晚高峰突发服务卡顿,用户消息延迟飙升监控大屏:GC时间从50ms/次→5秒/次堆内存锯齿状波动(配Prometheus图表)“FullGC每分钟触发3次,但堆内存却越回收越少?”一、GC日志分析——JVM的“心电图”解读1.日志结构全解析[GC(AllocationFailure)[PSYoungGen:614400K->24064K(614400K)]614400K-></div>
                    </li>
                    <li><a href="/article/1892366015967326208.htm"
                           title="使用Python获取在线股票交易网站的实时交易数据" target="_blank">使用Python获取在线股票交易网站的实时交易数据</a>
                        <span class="text-muted">嵌入式开发项目</span>
<a class="tag" taget="_blank" href="/search/2025%E5%B9%B4%E7%88%AC%E8%99%AB%E7%B2%BE%E9%80%9A%E4%B8%93%E6%A0%8F/1.htm">2025年爬虫精通专栏</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>目录步骤1:选择股票交易网站步骤2:使用requests库发送HTTP请求步骤3:解析HTML内容步骤4:提取实时交易数据步骤5:存储和使用数据在金融市场中,实时交易数据对于投资者来说具有重要的价值。实时的股票价格、交易量和其他市场指标可以帮助投资者做出更准确的决策,同时也是进行金融分析和建模的重要数据源。在本篇博客中,我们将学习如何使用Python获取在线股票交易网站的实时交易数据。在开始之前,</div>
                    </li>
                    <li><a href="/article/1892363994723840000.htm"
                           title="《运维工程师如何利用DeepSeek实现智能运维:分级实战指南》" target="_blank">《运维工程师如何利用DeepSeek实现智能运维:分级实战指南》</a>
                        <span class="text-muted">进击的雷神</span>
<a class="tag" taget="_blank" href="/search/%E6%AD%A6%E6%9E%97%E7%BB%9D%E5%AD%A6%EF%BC%9A%E6%8A%80%E6%9C%AF%E6%9D%82%E8%B0%88%E5%89%91%E5%BD%B1%E6%B5%81%E8%BD%AC/1.htm">武林绝学:技术杂谈剑影流转</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>目录智能运维革命:DeepSeek带来的范式转变DeepSeek核心运维能力全景解析分级实战场景与解决方案3.1初级工程师:自动化运维入门3.2中级工程师:复杂系统诊断与优化3.3高级工程师:架构级智能运维典型项目案例深度剖析4.1金融系统全链路监控体系构建4.2电商大促资源弹性调度实战4.3混合云环境下的安全加固分级能力提升路径效能提升数据验证挑战与演进方向构建智能运维体系行动指南1.智能运维革</div>
                    </li>
                    <li><a href="/article/1892361093737672704.htm"
                           title="深入解析:Tableau在数据可视化中的高级应用" target="_blank">深入解析:Tableau在数据可视化中的高级应用</a>
                        <span class="text-muted">Echo_Wish</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%9E%E6%88%98%E9%AB%98%E9%98%B6%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">实战高阶大数据</a><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>
                        <div>深入解析:Tableau在数据可视化中的高级应用引言在大数据时代,数据可视化已成为数据分析中不可或缺的一部分。作为一款广受欢迎的数据可视化工具,Tableau以其强大的功能和灵活性,赢得了众多数据分析师的青睐。然而,许多人在使用Tableau时,仅停留在基本操作层面,未能充分发挥其潜力。本文将深入探讨Tableau的高级应用,展示其在复杂数据分析中的强大能力,并以具体实例说明其实际应用效果。数据预</div>
                    </li>
                    <li><a href="/article/1892359832325910528.htm"
                           title="ECharts 柱状图X轴或Y轴空值无数据不占位不渲染不展示" target="_blank">ECharts 柱状图X轴或Y轴空值无数据不占位不渲染不展示</a>
                        <span class="text-muted">大橙子-</span>
<a class="tag" taget="_blank" href="/search/echarts/1.htm">echarts</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>效果查看:将option复制到echarts解析垂直方向://垂直方向代码示例option={legend:{//这里data省略echarts会自动匹配,也可自行配置},xAxis:[//关键点:多个X轴进行匹配{type:'category',position:'bottom',data:['2021','']//空字符串则不会展示},{type:'category',position:'bo</div>
                    </li>
                    <li><a href="/article/1892358446083272704.htm"
                           title="以太网协议介绍" target="_blank">以太网协议介绍</a>
                        <span class="text-muted">归宿688</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91/1.htm">软件开发</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6/1.htm">自动驾驶</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a>
                        <div>目录一.以太网主要协议关系介绍二.协议介绍及帧结构2.1媒体访问控制子层协议MAC2.2地址解析协议ARP2.2.1ARP帧结构2.2.2ARP协议工作原理2.3网际互连协议IP2.3.1IP协议帧2.3.2IP数据报分片重组2.4互联网控制消息协议ICMP2.5用户数据报协议UDP2.6传输控制协议TCP一.以太网主要协议关系介绍  网络结构可以分为五层,自底向上依次为:物理层、数据链路层、网络</div>
                    </li>
                    <li><a href="/article/1892356428530774016.htm"
                           title="Java集合之ArrayList(含源码解析 超详细)" target="_blank">Java集合之ArrayList(含源码解析 超详细)</a>
                        <span class="text-muted">&星辰入梦来&</span>
<a class="tag" taget="_blank" href="/search/Java%E9%9B%86%E5%90%88/1.htm">Java集合</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%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>1.ArrayList简介ArrayList的底层是数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加ArrayList实例的容量。这可以减少递增式再分配的数量。ArrayList继承于AbstructList,实现了List,RandomAccess,Cloneable,Java.io.Serializa</div>
                    </li>
                    <li><a href="/article/1892355294596493312.htm"
                           title="设计模式-模板方法实现" target="_blank">设计模式-模板方法实现</a>
                        <span class="text-muted">阿绵</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/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>文章目录模式结构模式特点示例代码输出结果关键点解析模式的优缺点使用场景总结模板方法模式(TemplateMethodPattern)是一种行为型设计模式,它定义了一个操作中的算法骨架,而将某些步骤的实现延迟到子类中。通过这种方式,模板方法模式可以让子类在不改变算法结构的情况下,重新定义算法中的某些步骤模式结构模板方法模式的结构包括以下几个关键部分:抽象类(AbstractClass):定义算法的骨</div>
                    </li>
                    <li><a href="/article/1892354539160399872.htm"
                           title="【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑧】" target="_blank">【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑧】</a>
                        <span class="text-muted">车端域控测试工程师</span>
<a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B/1.htm">测试用例</a><a class="tag" taget="_blank" href="/search/%E6%B1%BD%E8%BD%A6/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/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/CANoe/1.htm">CANoe</a><a class="tag" taget="_blank" href="/search/CAPL/1.htm">CAPL</a>
                        <div>ISO14229-1:2023UDS诊断【ECU复位0x11服务】_TestCase08作者:车端域控测试工程师更新日期:2025年02月17日关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO14229-1:2023TC11-008测试用例用例ID测试场景验证要点参考条款预期结果TC11-008多复位请求冲突处理连续发送3次复位请求§8.4.1仅首次请求生效,后续返回NRC=0x78以</div>
                    </li>
                    <li><a href="/article/1892348234601394176.htm"
                           title="【Python】email:发送纯文本邮件" target="_blank">【Python】email:发送纯文本邮件</a>
                        <span class="text-muted">T0uken</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/github/1.htm">github</a>
                        <div>在这篇教程中,我们将一步步解析如何使用Python发送电子邮件。我们将用到Python中的smtplib和email库,它们为我们提供了与邮件服务器互动的功能。我们将逐步解释代码的每个部分,帮助你理解如何通过Python发送邮件。导入必要的库首先,我们需要导入一些Python库来处理邮件的发送过程。importsmtplibfromemail.mime.multipartimportMIMEMul</div>
                    </li>
                    <li><a href="/article/1892341301819535360.htm"
                           title="Day46(补)【AI思考】-栈帧和全局变量关系的全面解析" target="_blank">Day46(补)【AI思考】-栈帧和全局变量关系的全面解析</a>
                        <span class="text-muted">一个一定要撑住的学习者</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/AI%E6%B7%B1%E5%BA%A6%E6%80%9D%E8%80%83%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95/1.htm">AI深度思考学习方法</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</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>文章目录栈帧和全局变量关系的全面解析**栈帧的全面解析****1.栈帧的定义****2.栈帧的核心组成****3.栈帧与各变量的关系****(1)形参变量****(2)返回地址****(3)局部变量****(4)全局变量****4.栈帧的工作原理****(1)函数调用过程****(2)函数返回过程****5.栈帧的直观示意图****6.栈帧与堆、全局区的区别****7.为什么除数为零属于事务故障?</div>
                    </li>
                    <li><a href="/article/1892316219466379264.htm"
                           title="使用Python爬虫实时监控行业新闻案例" target="_blank">使用Python爬虫实时监控行业新闻案例</a>
                        <span class="text-muted">海拥✘</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录背景环境准备请求网页数据解析网页数据定时任务综合代码使用代理IP提升稳定性运行截图与完整代码总结在互联网时代,新闻的实时性和时效性变得尤为重要。很多行业、技术、商业等领域的新闻都可以为公司或者个人发展提供有价值的信息。如果你有一项需求是要实时监控某个行业的新闻,自动化抓取并定期输出这些新闻,Python爬虫可以帮你轻松实现这一目标。本文将通过一个案例,带你一步一步实现一个简单的Python爬虫</div>
                    </li>
                    <li><a href="/article/1892314959031889920.htm"
                           title="vue播放m3u8视频" target="_blank">vue播放m3u8视频</a>
                        <span class="text-muted">zmyalh</span>
<a class="tag" taget="_blank" href="/search/html%E8%A7%86%E9%A2%91video/1.htm">html视频video</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>这里封装成组件先安装插件npmivue-video-player-S//版本"^5.0.2"npmivideojs-flash-S//播放rtmpnpmivideojs-contrib-hls-S//播放m3u8父页面://传入视频地址videoUrl页面引入importvideosfrom"../../../components/videos/videos.vue";components:{vi</div>
                    </li>
                                <li><a href="/article/21.htm"
                                       title="矩阵求逆(JAVA)利用伴随矩阵" target="_blank">矩阵求逆(JAVA)利用伴随矩阵</a>
                                    <span class="text-muted">qiuwanchi</span>
<a class="tag" taget="_blank" href="/search/%E5%88%A9%E7%94%A8%E4%BC%B4%E9%9A%8F%E7%9F%A9%E9%98%B5%E6%B1%82%E9%80%86%E7%9F%A9%E9%98%B5/1.htm">利用伴随矩阵求逆矩阵</a>
                                    <div>package gaodai.matrix;

import gaodai.determinant.DeterminantCalculation;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 矩阵求逆(利用伴随矩阵)
 * @author 邱万迟
 </div>
                                </li>
                                <li><a href="/article/148.htm"
                                       title="单例(Singleton)模式" target="_blank">单例(Singleton)模式</a>
                                    <span class="text-muted">aoyouzi</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E5%BC%8F/1.htm">模式</a><a class="tag" taget="_blank" href="/search/Singleton/1.htm">Singleton</a>
                                    <div>3.1           概述 如果要保证系统里一个类最多只能存在一个实例时,我们就需要单例模式。这种情况在我们应用中经常碰到,例如缓存池,数据库连接池,线程池,一些应用服务实例等。在多线程环境中,为了保证实例的唯一性其实并不简单,这章将和读者一起探讨如何实现单例模式。 3.2</div>
                                </li>
                                <li><a href="/article/275.htm"
                                       title="[开源与自主研发]就算可以轻易获得外部技术支持,自己也必须研发" target="_blank">[开源与自主研发]就算可以轻易获得外部技术支持,自己也必须研发</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a>
                                    <div> 
 
      现在国内有大量的信息技术产品,都是通过盗版,免费下载,开源,附送等方式从国外的开发者那里获得的。。。。。。 
 
       虽然这种情况带来了国内信息产业的短暂繁荣,也促进了电子商务和互联网产业的快速发展,但是实际上,我们应该清醒的看到,这些产业的核心力量是被国外的</div>
                                </li>
                                <li><a href="/article/402.htm"
                                       title="页面有两个frame,怎样点击一个的链接改变另一个的内容" target="_blank">页面有两个frame,怎样点击一个的链接改变另一个的内容</a>
                                    <span class="text-muted">Array_06</span>
<a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/XHTML/1.htm">XHTML</a>
                                    <div><a src="地址"  targets="这里写你要操作的Frame的名字" />搜索 
然后你点击连接以后你的新页面就会显示在你设置的Frame名字的框那里 
 
targerts="",就是你要填写目标的显示页面位置 
===================== 
例如: 
 
 <frame src=&</div>
                                </li>
                                <li><a href="/article/529.htm"
                                       title="Struts2实现单个/多个文件上传和下载" target="_blank">Struts2实现单个/多个文件上传和下载</a>
                                    <span class="text-muted">oloz</span>
<a class="tag" taget="_blank" href="/search/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0/1.htm">文件上传</a><a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a>
                                    <div>struts2单文件上传: 
    步骤01:jsp页面 
 
<!--在进行文件上传时,表单提交方式一定要是post的方式,因为文件上传时二进制文件可能会很大,还有就是enctype属性,这个属性一定要写成multipart/form-data,不然就会以二进制文本上传到服务器端--> 
  <form action="fileUplo</div>
                                </li>
                                <li><a href="/article/656.htm"
                                       title="推荐10个在线logo设计网站" target="_blank">推荐10个在线logo设计网站</a>
                                    <span class="text-muted">362217990</span>
<a class="tag" taget="_blank" href="/search/logo/1.htm">logo</a>
                                    <div>在线设计Logo网站。 
1、http://flickr.nosv.org(这个太简单) 
2、http://www.logomaker.com/?source=1.5770.1 
3、http://www.simwebsol.com/ImageTool 
4、http://www.logogenerator.com/logo.php?nal=1&tpl_catlist[]=2 
5、ht</div>
                                </li>
                                <li><a href="/article/783.htm"
                                       title="jsp上传文件" target="_blank">jsp上传文件</a>
                                    <span class="text-muted">香水浓</span>
<a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/fileupload/1.htm">fileupload</a>
                                    <div>1. jsp上传 
 
Notice: 
1. form表单 method 属性必须设置为 POST 方法 ,不能使用 GET 方法 
2. form表单 enctype 属性需要设置为 multipart/form-data 
3. form表单 action 属性需要设置为提交到后台处理文件上传的jsp文件地址或者servlet地址。例如 uploadFile.jsp 程序文件用来处理上传的文</div>
                                </li>
                                <li><a href="/article/910.htm"
                                       title="我的架构经验系列文章 - 前端架构" target="_blank">我的架构经验系列文章 - 前端架构</a>
                                    <span class="text-muted">agevs</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/jQuer/1.htm">jQuer</a>
                                    <div>框架层面:近几年前端发展很快,前端之所以叫前端因为前端是已经可以独立成为一种职业了,js也不再是十年前的玩具了,以前富客户端RIA的应用可能会用flash/flex或是silverlight,现在可以使用js来完成大部分的功能,因此js作为一门前端的支撑语言也不仅仅是进行的简单的编码,越来越多框架性的东西出现了。越来越多的开发模式转变为后端只是吐json的数据源,而前端做所有UI的事情。MVCMV</div>
                                </li>
                                <li><a href="/article/1037.htm"
                                       title="android ksoap2 中把XML(DataSet) 当做参数传递" target="_blank">android ksoap2 中把XML(DataSet) 当做参数传递</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>我的android app中需要发送webservice ,于是我使用了 ksop2 进行发送,在测试过程中不是很顺利,不能正常工作.我的web service 请求格式如下     
     
[html]  
view plain 
copy       
 
 <Envelope xmlns="http://schemas.</div>
                                </li>
                                <li><a href="/article/1164.htm"
                                       title="使用Spring进行统一日志管理 + 统一异常管理" target="_blank">使用Spring进行统一日志管理 + 统一异常管理</a>
                                    <span class="text-muted">baalwolf</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>统一日志和异常管理配置好后,SSH项目中,代码以往散落的log.info() 和 try..catch..finally 再也不见踪影! 
统一日志异常实现类:    
[java]  
view plain 
copy       
 
 package com.pilelot.web.util;   
    
 impor</div>
                                </li>
                                <li><a href="/article/1291.htm"
                                       title="Android SDK 国内镜像" target="_blank">Android SDK 国内镜像</a>
                                    <span class="text-muted">BigBird2012</span>
<a class="tag" taget="_blank" href="/search/android+sdk/1.htm">android sdk</a>
                                    <div>一、镜像地址: 
1、东软信息学院的 Android SDK 镜像,比配置代理下载快多了。 
配置地址, http://mirrors.neusoft.edu.cn/configurations.we#android 
2、北京化工大学的: 
IPV4:ubuntu.buct.edu.cn  
IPV4:ubuntu.buct.cn 
IPV6:ubuntu.buct6.edu.cn 
</div>
                                </li>
                                <li><a href="/article/1418.htm"
                                       title="HTML无害化和Sanitize模块" target="_blank">HTML无害化和Sanitize模块</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/Linky/1.htm">Linky</a><a class="tag" taget="_blank" href="/search/Sanitize/1.htm">Sanitize</a>
                                    <div>一.ng-bind-html、ng-bind-html-unsafe 
        AngularJS非常注重安全方面的问题,它会尽一切可能把大多数攻击手段最小化。其中一个攻击手段是向你的web页面里注入不安全的HTML,然后利用它触发跨站攻击或者注入攻击。 
        考虑这样一个例子,假设我们有一个变量存</div>
                                </li>
                                <li><a href="/article/1545.htm"
                                       title="[Maven学习笔记二]Maven命令" target="_blank">[Maven学习笔记二]Maven命令</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a>
                                    <div>mvn compile 
compile编译命令将src/main/java和src/main/resources中的代码和配置文件编译到target/classes中,不会对src/test/java中的测试类进行编译 
MVN编译使用 
maven-resources-plugin:2.6:resources 
maven-compiler-plugin:2.5.1:compile 
&nbs</div>
                                </li>
                                <li><a href="/article/1672.htm"
                                       title="【Java命令二】jhat" target="_blank">【Java命令二】jhat</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Java%E5%91%BD%E4%BB%A4/1.htm">Java命令</a>
                                    <div>jhat用于分析使用jmap dump的文件,,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言。 jhat默认开启监听端口7000的HTTP服务,jhat是Java Heap Analysis Tool的缩写 
1. 用法: 
[hadoop@hadoop bin]$ jhat -help

Usage:  jhat [-stack <bool&g</div>
                                </li>
                                <li><a href="/article/1799.htm"
                                       title="JBoss 5.1.0 GA:Error installing to Instantiated: name=AttachmentStore state=Desc" target="_blank">JBoss 5.1.0 GA:Error installing to Instantiated: name=AttachmentStore state=Desc</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>进到类似目录 server/default/conf/bootstrap,打开文件 profile.xml找到: Xml代码<bean  
  
name="AttachmentStore"  
class="org.jboss.system.server.profileservice.repository.AbstractAtta</div>
                                </li>
                                <li><a href="/article/1926.htm"
                                       title="写给初学者的6条网页设计安全配色指南" target="_blank">写给初学者的6条网页设计安全配色指南</a>
                                    <span class="text-muted">brotherlamp</span>
<a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/ui%E8%87%AA%E5%AD%A6/1.htm">ui自学</a><a class="tag" taget="_blank" href="/search/ui%E8%A7%86%E9%A2%91/1.htm">ui视频</a><a class="tag" taget="_blank" href="/search/ui%E6%95%99%E7%A8%8B/1.htm">ui教程</a><a class="tag" taget="_blank" href="/search/ui%E8%B5%84%E6%96%99/1.htm">ui资料</a>
                                    <div>网页设计中最基本的原则之一是,不管你花多长时间创造一个华丽的设计,其最终的角色都是这场秀中真正的明星——内容的衬托 
    我仍然清楚地记得我最早的一次美术课,那时我还是一个小小的、对凡事都充满渴望的孩子,我摆放出一大堆漂亮的彩色颜料。我仍然记得当我第一次看到原色与另一种颜色混合变成第二种颜色时的那种兴奋,并且我想,既然两种颜色能创造出一种全新的美丽色彩,那所有颜色</div>
                                </li>
                                <li><a href="/article/2053.htm"
                                       title="有一个数组,每次从中间随机取一个,然后放回去,当所有的元素都被取过,返回总共的取的次数。写一个函数实现。复杂度是什么。" target="_blank">有一个数组,每次从中间随机取一个,然后放回去,当所有的元素都被取过,返回总共的取的次数。写一个函数实现。复杂度是什么。</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/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a>
                                    <div>

import java.util.Random;
import java.util.Set;
import java.util.TreeSet;

/**
 * http://weibo.com/1915548291/z7HtOF4sx
 * #面试题#有一个数组,每次从中间随机取一个,然后放回去,当所有的元素都被取过,返回总共的取的次数。
 * 写一个函数实现。复杂度是什么</div>
                                </li>
                                <li><a href="/article/2180.htm"
                                       title="struts2获得request、session、application方式" target="_blank">struts2获得request、session、application方式</a>
                                    <span class="text-muted">chiangfai</span>
<a class="tag" taget="_blank" href="/search/application/1.htm">application</a>
                                    <div>1、与Servlet API解耦的访问方式。 
a.Struts2对HttpServletRequest、HttpSession、ServletContext进行了封装,构造了三个Map对象来替代这三种对象要获取这三个Map对象,使用ActionContext类。 
-----> 
  
package pro.action;
import java.util.Map;
imp</div>
                                </li>
                                <li><a href="/article/2307.htm"
                                       title="改变python的默认语言设置" target="_blank">改变python的默认语言设置</a>
                                    <span class="text-muted">chenchao051</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                                    <div> import sys
 sys.getdefaultencoding() 
 可以测试出默认语言,要改变的话,需要在python lib的site-packages文件夹下新建: 
sitecustomize.py, 这个文件比较特殊,会在python启动时来加载,所以就可以在里面写上: 
import sys
sys.setdefaultencoding('utf-8') 
&n</div>
                                </li>
                                <li><a href="/article/2434.htm"
                                       title="mysql导入数据load data infile用法" target="_blank">mysql导入数据load data infile用法</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E5%AF%BC%E5%85%A5%E6%95%B0%E6%8D%AE/1.htm">导入数据</a>
                                    <div>我们常常导入数据!mysql有一个高效导入方法,那就是load data infile 下面来看案例说明 
 
基本语法: 
load data  [low_priority] [local] infile 'file_name txt' [replace | ignore] 
into table tbl_name 
[fields 
[terminated by't'] 
[OPTI</div>
                                </li>
                                <li><a href="/article/2561.htm"
                                       title="phpexcel导入excel表到数据库简单入门示例" target="_blank">phpexcel导入excel表到数据库简单入门示例</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/Excel/1.htm">Excel</a>
                                    <div>  
跟导出相对应的,同一个数据表,也是将phpexcel类放在class目录下,将Excel表格中的内容读取出来放到数据库中 
<?php 
error_reporting(E_ALL); 
set_time_limit(0); 
?> 
<html> 
<head> 
<meta http-equiv="Content-Type" </div>
                                </li>
                                <li><a href="/article/2688.htm"
                                       title="22岁到72岁的男人对女人的要求" target="_blank">22岁到72岁的男人对女人的要求</a>
                                    <span class="text-muted">dcj3sjt126com</span>

                                    <div>22岁男人对女人的要求是:一,美丽,二,性感,三,有份具品味的职业,四,极有耐性,善解人意,五,该聪明的时候聪明,六,作小鸟依人状时尽量自然,七,怎样穿都好看,八,懂得适当地撒娇,九,虽作惊喜反应,但看起来自然,十,上了床就是个无条件荡妇。 32岁的男人对女人的要求,略作修定,是:一,入得厨房,进得睡房,二,不必服侍皇太后,三,不介意浪漫蜡烛配盒饭,四,听多过说,五,不再傻笑,六,懂得独</div>
                                </li>
                                <li><a href="/article/2815.htm"
                                       title="Spring和HIbernate对DDM设计的支持" target="_blank">Spring和HIbernate对DDM设计的支持</a>
                                    <span class="text-muted">e200702084</span>
<a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</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/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/%E9%A2%86%E5%9F%9F%E6%A8%A1%E5%9E%8B/1.htm">领域模型</a>
                                    <div>A:数据访问对象 
 
    DAO和资源库在领域驱动设计中都很重要。DAO是关系型数据库和应用之间的契约。它封装了Web应用中的数据库CRUD操作细节。另一方面,资源库是一个独立的抽象,它与DAO进行交互,并提供到领域模型的“业务接口”。 
   资源库使用领域的通用语言,处理所有必要的DAO,并使用领域理解的语言提供对领域模型的数据访问服务。</div>
                                </li>
                                <li><a href="/article/2942.htm"
                                       title="NoSql 数据库的特性比较" target="_blank">NoSql 数据库的特性比较</a>
                                    <span class="text-muted">geeksun</span>
<a class="tag" taget="_blank" href="/search/NoSQL/1.htm">NoSQL</a>
                                    <div>Redis 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。目前由VMware主持开发工作。 
  
1. 数据模型 
作为Key-value型数据库,Redis也提供了键(Key)和值(Value)的映射关系。除了常规的数值或字符串,Redis的键值还可以是以下形式之一: 
Lists (列表) 
Sets</div>
                                </li>
                                <li><a href="/article/3069.htm"
                                       title="使用 Nginx Upload Module 实现上传文件功能" target="_blank">使用 Nginx Upload Module 实现上传文件功能</a>
                                    <span class="text-muted">hongtoushizi</span>
<a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a>
                                    <div>转载自: http://www.tuicool.com/wx/aUrAzm 
  
普通网站在实现文件上传功能的时候,一般是使用Python,Java等后端程序实现,比较麻烦。Nginx有一个Upload模块,可以非常简单的实现文件上传功能。此模块的原理是先把用户上传的文件保存到临时文件,然后在交由后台页面处理,并且把文件的原名,上传后的名称,文件类型,文件大小set到页面。下</div>
                                </li>
                                <li><a href="/article/3196.htm"
                                       title="spring-boot-web-ui及thymeleaf基本使用" target="_blank">spring-boot-web-ui及thymeleaf基本使用</a>
                                    <span class="text-muted">jishiweili</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/thymeleaf/1.htm">thymeleaf</a>
                                    <div>视图控制层代码demo如下: 
  
@Controller
@RequestMapping("/")
public class MessageController {
	private final MessageRepository messageRepository;

	@Autowired
	public MessageController(Mes</div>
                                </li>
                                <li><a href="/article/3323.htm"
                                       title="数据源架构模式之活动记录" target="_blank">数据源架构模式之活动记录</a>
                                    <span class="text-muted">home198979</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E6%B4%BB%E5%8A%A8%E8%AE%B0%E5%BD%95/1.htm">活动记录</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%98%A0%E5%B0%84/1.htm">数据映射</a>
                                    <div>hello!架构 
一、概念 
活动记录(Active Record):一个对象,它包装数据库表或视图中某一行,封装数据库访问,并在这些数据上增加了领域逻辑。 
对象既有数据又有行为。活动记录使用直截了当的方法,把数据访问逻辑置于领域对象中。 
  
二、实现简单活动记录 
活动记录在php许多框架中都有应用,如cakephp。 
<?php
/**
 * 行数据入口类
 *</div>
                                </li>
                                <li><a href="/article/3450.htm"
                                       title="Linux Shell脚本之自动修改IP" target="_blank">Linux Shell脚本之自动修改IP</a>
                                    <span class="text-muted">pda158</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/Debian/1.htm">Debian</a><a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC/1.htm">脚本</a>
                                    <div>作为一名 
Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名、ip信息、网关等配置。修改成特定的主机名在维护和管理方面也比较方便。如下脚本用途为:修改ip和主机名等相关信息,可以根据实际需求修改,举一反三!   
#!/bin/sh
#auto Change ip netmask ga</div>
                                </li>
                                <li><a href="/article/3577.htm"
                                       title="开发环境搭建" target="_blank">开发环境搭建</a>
                                    <span class="text-muted">独浮云</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a>
                                    <div>       最近在开发过程中,经常出现MyEclipse内存溢出等错误,需要重启的情况,好麻烦。对于一般的JAVA+TOMCAT项目开发,其实没有必要使用重量级的MyEclipse,使用eclipse就足够了。尤其是开发机器硬件配置一般的人。 
  
      &n</div>
                                </li>
                                <li><a href="/article/3704.htm"
                                       title="操作日期和时间的工具类" target="_blank">操作日期和时间的工具类</a>
                                    <span class="text-muted">vipbooks</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E5%85%B7%E7%B1%BB/1.htm">工具类</a>
                                    <div>   大家好啊,好久没有来这里发文章了,今天来逛逛,分享一篇刚写不久的操作日期和时间的工具类,希望对大家有所帮助。 
 
 

/*
 * @(#)DataFormatUtils.java 2010-10-10
 * 
 * Copyright 2010 BianJing,All rights reserved.
 */
package test;

impor</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>