小X通m3u8视频流AES加密分析

最近有空研究了下小X通的视频协议,下面记录下研究过程

首先我们要了解下m3u8是什么

m3u8基础

首先我们需要了解什么时HLS,所谓HLS(HTTP Live Streaming)是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。而m3u8是HLS协议的一部分,但是在直播,视频网站等用处很广泛。

HLS协议规定,视频的封装格式是TS(Transport Stream),除了TS视频文件本身,还定义了用来控制播放的M3U8文件(文本文件)。HLS协议的工作原理是把整个视频流分割成一个个小的TS格式视频文件来传输,在开始一个流媒体会话时,客户端会先下载一个包含TS文件URL地址的M3U8文件(相当于一个播放列表),给客户端用于下载TS文件。这样可以让用户更方便的选择视频节点播放,给用户更好的体验,其次提供了加密方式,可以更好的保护视频不被窃取。

下面是m3u8的一个基本字段

#EXTM3U:M3U8文件头,必须放在第一行。
EXT-X-MEDIA-SEQUENCE :第一个TS分片的序列号,一般情况下是0,但是在直播场景下,这个序列号标识直播段的起始位置; #EXT-X-MEDIA-SEQUENCE:0。
#EXT-X-TARGETDURATION:每个分片TS的最大的时长; #EXT-X-TARGETDURATION:10 ,表示每个分片的最大时长是10秒。
#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://example.com/video.key?token=xxx" 加密算法是AES-128,密钥通过请求 https://example.com/video.key?token=xxx 来获取,密钥请求回来以后存储在本地,并用于解密后续下载的TS视频文件。</code></pre> 
   <h3 style="">请求流程</h3> 
   <ol start="1"> 
    <li style="margin-left:1.4em;list-style-type:decimal;text-indent:0;"><p>客户端发起对m3u8的请求,服务器在校验完成后会下载m3u8文件到本地。</p></li> 
   </ol> 
   <ol start="2"> 
    <li style="margin-left:1.4em;list-style-type:decimal;text-indent:0;"><p>客户端解析m3u8文件,在#EXT-X-KEY中找到密钥key地址,并访问拿到加密的密钥key。</p></li> 
   </ol> 
   <ol start="3"> 
    <li style="margin-left:1.4em;list-style-type:decimal;text-indent:0;"><p>客户端解析m3u8文件拿到分割文件的大小和对应ts文件地址,并访问拿到视频流。</p></li> 
   </ol> 
   <ol start="4"> 
    <li style="margin-left:1.4em;list-style-type:decimal;text-indent:0;"><p>客户端使用拿到的key地址和#EXT-X-KEY中对应的加密算法对视频流进行解密,播放视频。</p></li> 
   </ol> 
   <p style="text-indent:1.4em;">所以我们看到这里真正重要的就几个部分,首先一定要找到m3u8文件的链接地址,然后从中找到#EXTINF和#EXT-X-KEY两个字段</p> 
   <ul> 
    <li style="margin-left:2.8em;list-style-type:circle;text-indent:0;"><p>#EXTIN字段中我们可以拿到ts协议流的分段大小信息,和视频流下载链接信息,并且可以通过start和end参数得到视频的最终大小</p></li> 
   </ul> 
   <ul> 
    <li style="margin-left:2.8em;list-style-type:circle;text-indent:0;"><p>#EXT-X-KEY字段中我们可以拿到ts视频是否加密,如果加密可以拿到对应的加密方式和加密key地址。</p></li> 
   </ul> 
   <ul> 
    <li style="margin-left:2.8em;list-style-type:circle;text-indent:0;"><p>最后用得到的key和VI对ts文件使用openssl解密即可。</p></li> 
   </ul> 
   <h2 style="">实战分析</h2> 
   <p style="text-indent:1.4em;">了解了HLS的加密过程下面我们对小X通进行一个分析,首先我们通过抓包拿到了这个m3u8的链接地址,前面做了很多校验,但是不属于这个视频加解密分析范畴,这里不做分析。拿到以后我们可以对字段进行分析。如下图:</p> 
   <div class="kdocs-line-container" style="display:flex;"> 
    <div class="kdocs-img" style="flex-direction:column;max-width:100%;display:flex;width:1253px;justify-content:center;align-items:center;height:auto;"> 
     <div class="kdocs-img" style="padding-top:42.537907%;height:0;"> <a href="http://img.e-com-net.com/image/info8/a909161ea5124a3f9abac09f4de63247.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/a909161ea5124a3f9abac09f4de63247.jpg" style="margin-left:;display:block;width:1253px;margin-top:-42.537907%;height:auto;;border:1px solid black;" width="650" height="276" alt="小X通m3u8视频流AES加密分析_第1张图片"></a> 
     </div> 
    </div> 
   </div> 
   <p style="">下面对m3u8进行分析,我们可以得到如下信息:</p> 
   <ul> 
    <li style="margin-left:1.4em;list-style-type:disc;text-indent:0;"><p>#EXTIN中我们可以发现文件的分割大小,然后到最后可以看到文件的最终大小为141809727</p></li> 
   </ul> 
   <pre class="kdocs-plaintext"><code class="language-plaintext">v.f421220_0.ts?start=0&end=603679&type=mpegts
v.f421220_0.ts?start=141595968&end=141809727&type=mpegts</code></pre> 
   <ul> 
    <li style="margin-left:1.4em;list-style-type:disc;text-indent:0;"><p>#EXT-X-KEY中我们可以发现文件的加密方式为AES-128的加密方式,对应得到下载key链接,并知道加密IV为0.</p></li> 
   </ul> 
   <p style="text-indent:1.4em;">首先访问key地址,发现报错,提示缺少uid。</p> 
   <div class="kdocs-line-container" style="display:flex;"> 
    <div class="kdocs-img" style="flex-direction:column;max-width:100%;display:flex;width:788px;justify-content:center;align-items:center;height:auto;"> 
     <div class="kdocs-img" style="padding-top:12.817259%;height:0;"> <a href="http://img.e-com-net.com/image/info8/61e060b5f6b54c458c5deae17050983f.png" target="_blank"><img src="http://img.e-com-net.com/image/info8/61e060b5f6b54c458c5deae17050983f.png" style="margin-left:;display:block;width:788px;margin-top:-12.817259%;height:auto;;border:1px solid black;" width="788" height="101" alt="小X通m3u8视频流AES加密分析_第2张图片"></a> 
     </div> 
    </div> 
   </div> 
   <p style="text-indent:1.4em;">可以看到这里需要校验对应的uid,js代码中也可以看到,那通过自有验证抓取uid。</p> 
   <div class="kdocs-line-container" style="display:flex;"> 
    <div class="kdocs-img" style="flex-direction:column;max-width:100%;display:flex;width:1318px;justify-content:center;align-items:center;height:auto;"> 
     <div class="kdocs-img" style="padding-top:27.996965%;height:0;"> <a href="http://img.e-com-net.com/image/info8/4263c5def9154d4cbbab622ae2c03827.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/4263c5def9154d4cbbab622ae2c03827.jpg" style="margin-left:;display:block;width:1318px;margin-top:-27.996965%;height:auto;;border:1px solid black;" width="650" height="182" alt="小X通m3u8视频流AES加密分析_第3张图片"></a> 
     </div> 
    </div> 
   </div> 
   <p style="text-indent:1.4em;">通过得到的uid信息得到对应的key文件</p> 
   <div class="kdocs-line-container" style="display:flex;"> 
    <div class="kdocs-img" style="flex-direction:column;max-width:100%;display:flex;width:1231px;justify-content:center;align-items:center;height:auto;"> 
     <div class="kdocs-img" style="padding-top:46.872463%;height:0;"> <a href="http://img.e-com-net.com/image/info8/0af540f2f4c945fa8660fb1638d5522a.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/0af540f2f4c945fa8660fb1638d5522a.jpg" style="margin-left:;display:block;width:1231px;margin-top:-46.872463%;height:auto;;border:1px solid black;" width="650" height="305" alt="小X通m3u8视频流AES加密分析_第4张图片"></a> 
     </div> 
    </div> 
   </div> 
   <p style=""></p> 
   <p style="">然后拼接拿到整个是视频流</p> 
   <pre class="kdocs-plaintext"><code class="language-plaintext">https://encrypt-k-vod.xet.tech/*****/****/drm/v.f421220_0.ts?start=0&end=141809727&type=mpegts&sign=*****&t=***&us=***</code></pre> 
   <p style="">使用openssl解密</p> 
   <pre class="kdocs-plaintext"><code class="language-plaintext">openssl aes-128-cbc -d -in 001.ts -out 001_dec.ts  -iv 00000000000000000000000000000000 -K ********************************</code></pre> 
   <div class="kdocs-line-container" style="display:flex;"> 
    <div class="kdocs-img" style="flex-direction:column;max-width:100%;display:flex;width:1209px;justify-content:center;align-items:center;height:auto;"> 
     <div class="kdocs-img" style="padding-top:12.158809%;height:0;"> <a href="http://img.e-com-net.com/image/info8/73cafc41ebb149ec96618dc1caf71a71.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/73cafc41ebb149ec96618dc1caf71a71.jpg" style="margin-left:;display:block;width:1209px;margin-top:-12.158809%;height:auto;" width="650" height="79"></a> 
     </div> 
    </div> 
   </div> 
   <p style="">但是发现报错,解密失败。哈哈我猜也不会这么简单</p> 
   <h3 style="">报错分析</h3> 
   <p style="">既然报错了,那由可能是这个几个地方存在问题</p> 
   <ol start="1"> 
    <li style="margin-left:2.8em;list-style-type:lower-alpha;text-indent:0;"><p>选择的加密工具openssl工具解密出错</p></li> 
   </ol> 
   <ol start="2"> 
    <li style="margin-left:2.8em;list-style-type:lower-alpha;text-indent:0;"><p>加密所用的key或IV出错</p></li> 
   </ol> 
   <ol start="3"> 
    <li style="margin-left:2.8em;list-style-type:lower-alpha;text-indent:0;"><p>视频原始文件出错</p></li> 
   </ol> 
   <p style="">具体分析尝试三个点可以发现</p> 
   <ol start="1"> 
    <li style="margin-left:2.8em;list-style-type:lower-alpha;text-indent:0;"><p>我尝试了自己使用AES加密文件后使用openssl解密,发现没有问题,证明不是openssl的问题</p></li> 
   </ol> 
   <ol start="2"> 
    <li style="margin-left:2.8em;list-style-type:lower-alpha;text-indent:0;"><p>视频文件在页面可以播放,证明不是视频的问题</p></li> 
   </ol> 
   <p style="">那么问题就出在key或iv上了,继续分析。如果我是写系统的人,为了加密视频通常会选择如下方式:</p> 
   <ol start="1"> 
    <li style="margin-left:2.8em;list-style-type:lower-alpha;text-indent:0;"><p>对key的二次加密,再来解密视频</p></li> 
   </ol> 
   <ol start="2"> 
    <li style="margin-left:2.8em;list-style-type:lower-alpha;text-indent:0;"><p>实现一个自己的加密解密算法,来解密视频</p></li> 
   </ol> 
   <p style="text-indent:1.4em;">逻辑推导一下可以看到对key的二次加密最简单快速,且最终可以调用公共的解密库执行,如果自己实现难度高而且bug多,估计多数不会选择。</p> 
   <p style="text-indent:1.4em;">那么我们从二次解密出发,首先再js中找关键字encrypted关键字,找到如下关键点:</p> 
   <div class="kdocs-line-container" style="display:flex;"> 
    <div class="kdocs-img" style="flex-direction:column;max-width:100%;display:flex;width:1100px;justify-content:center;align-items:center;height:auto;"> 
     <div class="kdocs-img" style="padding-top:31.818182%;height:0;"> <a href="http://img.e-com-net.com/image/info8/10d603e9639e4045a431e449022a86ff.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/10d603e9639e4045a431e449022a86ff.jpg" style="margin-left:;display:block;width:1100px;margin-top:-31.818182%;height:auto;;border:1px solid black;" width="650" height="207" alt="小X通m3u8视频流AES加密分析_第5张图片"></a> 
     </div> 
    </div> 
   </div> 
   <p style="text-indent:1.4em;">替换js并打印log尽然发现数组数据正好16位,可能是key文件</p> 
   <div class="kdocs-line-container" style="display:flex;"> 
    <div class="kdocs-img" style="flex-direction:column;max-width:100%;display:flex;width:939px;justify-content:center;align-items:center;height:auto;"> 
     <div class="kdocs-img" style="padding-top:51.4377%;height:0;"> <a href="http://img.e-com-net.com/image/info8/b7f146a87a6d4d388cd8c8d962bb4c88.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/b7f146a87a6d4d388cd8c8d962bb4c88.jpg" style="margin-left:;display:block;width:939px;margin-top:-51.4377%;height:auto;;border:1px solid black;" width="650" height="334" alt="小X通m3u8视频流AES加密分析_第6张图片"></a> 
     </div> 
    </div> 
   </div> 
   <p style=""></p> 
   <p style="">但是抓到的是十进制数据,转换为十六进制</p> 
   <pre class="kdocs-plaintext"><code class="language-plaintext">printf '%x\n' 84 43 *******</code></pre> 
   <p style="">然后用得到的十六进制key进行解密操作</p> 
   <pre class="kdocs-plaintext"><code class="language-plaintext">openssl aes-128-cbc -d -in uu.ts -out uu_out.ts -K ********************* -iv 00000000000000000000000000000000</code></pre> 
   <p style="">发现并无报错,证明解密成功</p> 
   <div class="kdocs-line-container" style="display:flex;"> 
    <div class="kdocs-img" style="flex-direction:column;max-width:100%;display:flex;width:1191px;justify-content:center;align-items:center;height:auto;"> 
     <div class="kdocs-img" style="padding-top:7.97649%;height:0;"> <a href="http://img.e-com-net.com/image/info8/31584b68d5aa472a828e7a5d5d3e2776.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/31584b68d5aa472a828e7a5d5d3e2776.jpg" style="margin-left:;display:block;width:1191px;margin-top:-7.97649%;height:auto;" width="650" height="52"></a> 
     </div> 
    </div> 
   </div> 
   <p style="">播放也没有问题,视频解密流程搞定。</p> 
   <div class="kdocs-line-container" style="display:flex;"> 
    <div class="kdocs-img" style="flex-direction:column;max-width:100%;display:flex;width:504px;justify-content:center;align-items:center;height:auto;"> 
     <div class="kdocs-img" style="padding-top:73.412704%;height:0;"> <a href="http://img.e-com-net.com/image/info8/9a2dec3d34a34fb7a1eba21dcbe7c580.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/9a2dec3d34a34fb7a1eba21dcbe7c580.jpg" style="margin-left:;display:block;width:504px;margin-top:-73.412704%;height:auto;;border:1px solid black;" width="650" height="478" alt="小X通m3u8视频流AES加密分析_第7张图片"></a> 
     </div> 
    </div> 
   </div> 
   <p style="">为了避免不必要的麻烦,对key等关键部分做了处理,本文只做研究分析,不想带来不必要的麻烦。</p> 
   <h2 style="">小结</h2> 
   <p style="">最后来个小结,对整个流程分析下来还是很顺畅,难点也不多,真正难的算是对js的分析,js已经做了混淆,很多代码中找到对应的解密地址还是很麻烦,花了不少时间。</p> 
   <p style="">最后对视频加防下载的一些思考</p> 
   <ol start="1"> 
    <li style="margin-left:1.4em;list-style-type:decimal;text-indent:0;"><p>目前大部分视频网站都采用的是HLS来进行视频流的获取和播放,因为首先对应的资源很丰富,各个云平台厂商均有对应的接口,方便开发者快速的搭建,但是对应的加密方式还是由很多问题</p></li> 
   </ol> 
   <ol start="2"> 
    <li style="margin-left:1.4em;list-style-type:decimal;text-indent:0;"><p>首先是加密方式,有些小厂商也不会对视频进行加密处理,直接可以进行下载播放,这种破解很简单就不提了。</p></li> 
   </ol> 
   <ol start="3"> 
    <li style="margin-left:1.4em;list-style-type:decimal;text-indent:0;"><p>有些选择了对m3u8文件进行加密,但是个人感觉这个和对key二次加密是一样的,均可以在js中找到对应的解密方法和最终的key或m3u8文件,这个只是时间问题,毕竟js文件在客户端,服务器不可控。</p></li> 
   </ol> 
   <ol start="4"> 
    <li style="margin-left:1.4em;list-style-type:decimal;text-indent:0;"><p>即便解密对应的key很费时间,但是如果采用对浏览器hook可以解决所有的加密方法,毕竟最终还是要在网页进行播放,只要抓取最终的数据流并dump就可以拿到最终解密完成的视频。</p></li> 
   </ol> 
   <ol start="5"> 
    <li style="margin-left:1.4em;list-style-type:decimal;text-indent:0;"><p>个人感觉加水印等防止小白录屏是可以,但是对懂一点技术的其实整个破解只是时间和熟练问题,我测试有些监控是自己通过c实现了一个加密解密算法,对视频进行加密保存,解密读取流程,虽然很安全,但是对.dll进行逆向还是可以找到对应的key和加密算法,只是时间问题。</p></li> 
   </ol> 
   <ol start="6"> 
    <li style="margin-left:1.4em;list-style-type:decimal;text-indent:0;"><p>说了这么多感觉什么都不安全,都可以被破解,事实也确实是这样,但是我们可以经常更新加密算法和加密key,来增加破解者的时间成本,也是可行的,让攻击者自己放弃,哈哈差不多就这样。</p></li> 
   </ol> 
  </div> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1707464335284056064"></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">你可能感兴趣的:(前端,html5)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1892516757122379776.htm"
                           title="spring boot基于知识图谱的阿克苏市旅游管理系统python-计算机毕业设计" target="_blank">spring boot基于知识图谱的阿克苏市旅游管理系统python-计算机毕业设计</a>
                        <span class="text-muted">QQ1963288475</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1/1.htm">知识图谱</a><a class="tag" taget="_blank" href="/search/%E6%97%85%E6%B8%B8/1.htm">旅游</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/flask/1.htm">flask</a>
                        <div>目录功能和技术介绍具体实现截图开发核心技术:开发环境开发步骤编译运行核心代码部分展示系统设计详细视频演示可行性论证软件测试源码获取功能和技术介绍该系统基于浏览器的方式进行访问,采用springboot集成快速开发框架,前端使用vue方式,基于es5的语法,开发工具IntelliJIDEAx64,因为该开发工具,内嵌了Tomcat服务运行机制,可不用单独下载Tomcatserver服务器。由于考虑到</div>
                    </li>
                    <li><a href="/article/1892510471286747136.htm"
                           title="【OpenTiny调研征集】共创技术未来,分享您的声音!" target="_blank">【OpenTiny调研征集】共创技术未来,分享您的声音!</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AFvue.js%E5%BC%80%E6%BA%90/1.htm">前端vue.js开源</a>
                        <div>欢迎参与2025年OpenTiny开源社区用户调研征集调研背景随着OpenTiny开源项目的不断发展,我们一直致力于为开发者提供高质量的Web前端开发解决方案。为了更好地满足用户需求,提升项目的实用性和易用性,我们决定发起一项用户调研活动,诚挚邀请您参与。调研目的了解用户需求:收集您在使用OpenTiny开源项目过程中的需求、问题和建议,以便我们更好地改进和优化。提升用户体验:通过您的反馈,我们将</div>
                    </li>
                    <li><a href="/article/1892506293600579584.htm"
                           title="cesium(vue)一些面试问题(包含Three.js)" target="_blank">cesium(vue)一些面试问题(包含Three.js)</a>
                        <span class="text-muted">GIS瞧葩菜</span>
<a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/cesium/1.htm">cesium</a>
                        <div>1.在不同的应用场景和技术栈中,模型加载方法和格式有所不同,下面主要从Web前端三维场景(使用Three.js和cesium)使用Three.js加载模型常见模型格式及加载方法GLTF/GLB格式格式特点:GLTF(GraphicsLibraryTransmissionFormat)是一种开放的、基于JSON的三维模型传输格式,GLB是其二进制版本。它们具有文件小、加载快、支持动画、材质和骨骼等优</div>
                    </li>
                    <li><a href="/article/1892474879861649408.htm"
                           title="探索 TypeScript Redux:构建大规模JavaScript应用的终极指南" target="_blank">探索 TypeScript Redux:构建大规模JavaScript应用的终极指南</a>
                        <span class="text-muted">柳旖岭</span>

                        <div>探索TypeScriptRedux:构建大规模JavaScript应用的终极指南去发现同类优质开源项目:https://gitcode.com/在当今快速发展的前端开发领域中,组合正确工具集来应对复杂性和扩展性挑战至关重要。今天,我们将深入了解一个令人兴奋的开源项目——TypeScriptRedux,它结合了TypeScript、JSPM、typings、React和Redux的强大功能,为开发者</div>
                    </li>
                    <li><a href="/article/1892471976795107328.htm"
                           title="前端导出word文件—包含canvas(echarts图表)" target="_blank">前端导出word文件—包含canvas(echarts图表)</a>
                        <span class="text-muted">Liuer_Qin</span>
<a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/canvas/1.htm">canvas</a><a class="tag" taget="_blank" href="/search/echarts/1.htm">echarts</a><a class="tag" taget="_blank" href="/search/echarts/1.htm">echarts</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>一、使用的插件html-docx-js二、整体思路因为canvas是运行在内存中的,所以不能简单的通过dom获取canvas图片,需要手动的先将canvas转为image。三、实现先克隆要下载的DOM的副本。因为canvas是运行在内存中的,所以也不能通过cloneNode方法克隆下来(克隆下来是空的)。我们这里将原DOM中的canvas转成图片,然后插入到副本的对应位置,这样操作不会影响原DOM</div>
                    </li>
                    <li><a href="/article/1892433617058066432.htm"
                           title="使用Odoo Shell卸载模块" target="_blank">使用Odoo Shell卸载模块</a>
                        <span class="text-muted">odoo中国</span>
<a class="tag" taget="_blank" href="/search/odoo/1.htm">odoo</a><a class="tag" taget="_blank" href="/search/odoo/1.htm">odoo</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90%E8%BD%AF%E4%BB%B6/1.htm">开源软件</a><a class="tag" taget="_blank" href="/search/erp/1.htm">erp</a>
                        <div>使用OdooShell卸载模块我们在Odoo使用过程中,因为模块安装错误或者前端错误等导致odoo无法通过界面登录,这时候你可以使用OdooShell来卸载模块。OdooShell是一个交互式Pythonshell,允许你直接与Odoo数据库和模型进行交互。以下是使用OdooShell卸载模块的详细步骤:步骤1:启动OdooShell要启动OdooShell,你需要在终端中运行以下命令。确保你已经</div>
                    </li>
                    <li><a href="/article/1892426166254497792.htm"
                           title="基于 Spring Boot 的社区居民健康管理系统部署说明书" target="_blank">基于 Spring Boot 的社区居民健康管理系统部署说明书</a>
                        <span class="text-muted">小星袁</span>
<a class="tag" taget="_blank" href="/search/%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1%E5%8E%9F%E6%96%87/1.htm">毕业设计原文</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>目录1系统概述2准备资料3系统安装与部署3.1数据库部署3.1.1MySQL的部署3.1.2Navicat的部署3.2服务器部署3.3客户端部署4系统配置与优化5其他基于SpringBoot的社区居民健康管理系统部署说明书1系统概述本系统主要运用了SpringBoot框架,前端页面的设计主要依托Vue框架来构建,实现丰富且交互性强的用户界面,后台管理功能则采用SpringBoot框架与MySQL数</div>
                    </li>
                    <li><a href="/article/1892412800781840384.htm"
                           title="html 5中css的含义,HTML 5+CSS+JavaScript网页设计与制作" target="_blank">html 5中css的含义,HTML 5+CSS+JavaScript网页设计与制作</a>
                        <span class="text-muted">律保阁-Michael</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/5%E4%B8%ADcss%E7%9A%84%E5%90%AB%E4%B9%89/1.htm">5中css的含义</a>
                        <div>HTML5+CSS+JavaScript网页设计与制作编辑锁定讨论上传视频《HTML5+CSS+JavaScript网页设计与制作》是2019年4月清华大学出版社出版的图书,作者是彭进香、张茂红、王玉娟、叶娟、孙秀娟、万幸、刘英。书名HTML5+CSS+JavaScript网页设计与制作作者彭进香张茂红王玉娟叶娟作者孙秀娟展开作者孙秀娟万幸刘英收起出版社清华大学出版社出版时间2019年4月定价48</div>
                    </li>
                    <li><a href="/article/1892407882675187712.htm"
                           title="前端性能优化——如何提高页面加载速度?" target="_blank">前端性能优化——如何提高页面加载速度?</a>
                        <span class="text-muted">忘川...</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a>
                        <div>1.将样式表放在头部首先说明一下,将样式表放在头部对于实际页面加载的时间并不能造成太大影响,但是这会减少页面首屏出现的时间,使页面内容逐步呈现,改善用户体验,防止“白屏”。我们总是希望页面能够尽快显示内容,为用户提供可视化的回馈,这对网速慢的用户来说是很重要的。将样式表放在文档底部会阻止浏览器中的内容逐步出现。为了避免当样式变化时重绘页面元素,浏览器会阻塞内容逐步呈现,造成“白屏”。这源自浏览器的</div>
                    </li>
                    <li><a href="/article/1892407376435277824.htm"
                           title="前端开发入门指南:HTML、CSS和JavaScript基础知识" target="_blank">前端开发入门指南:HTML、CSS和JavaScript基础知识</a>
                        <span class="text-muted">方向感超强的</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>引言:大家好,我是一名简单的前端开发爱好者,对于网页设计和用户体验的追求让我深深着迷。在本篇文章中,我将带领大家探索前端开发的基础知识,涵盖HTML、CSS和JavaScript。如果你对这个领域感兴趣,或者想要了解如何开始学习前端开发,那么这篇文章将为你提供一个良好的起点。1.前端开发概述在我们深入了解前端开发的细节之前,让我们先了解一下前端开发的定义和作用。简而言之,前端开发涉及构建用户直接与</div>
                    </li>
                    <li><a href="/article/1892404729082867712.htm"
                           title="前端504错误分析" target="_blank">前端504错误分析</a>
                        <span class="text-muted">ox0080</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%8C%97%E6%BC%82%2B%E6%BB%B4%E6%BB%B4%E5%87%BA%E8%A1%8C/1.htm">北漂+滴滴出行</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/VIP/1.htm">VIP</a><a class="tag" taget="_blank" href="/search/%E6%BF%80%E5%8A%B1/1.htm">激励</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>前端出现504错误(网关超时)通常是由于代理服务器未能及时从上游服务获取响应。以下是详细分析步骤和解决方案:1.确认错误来源504含义:代理服务器(如Nginx、Apache)在等待后端服务响应时超时。常见架构:前端→代理服务器→后端服务,问题通常出在代理与后端之间。2.排查步骤(1)检查后端服务状态确认服务是否运行:通过日志或监控工具(如systemctlstatus,KubernetesPod</div>
                    </li>
                    <li><a href="/article/1892398803407925248.htm"
                           title="部署前端项目2" target="_blank">部署前端项目2</a>
                        <span class="text-muted">augenstern416</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>前端项目的部署是将开发完成的前端代码发布到服务器或云平台,使其能够通过互联网访问。以下是前端项目部署的常见步骤和工具:1.准备工作在部署之前,确保项目已经完成以下步骤:代码优化:压缩JavaScript、CSS和图片文件,减少文件体积。环境配置:区分开发环境和生产环境(如API地址、环境变量等)。测试:确保项目在本地测试通过,没有明显Bug。2.部署流程1.构建项目大多数前端项目(如React、V</div>
                    </li>
                    <li><a href="/article/1892398677004185600.htm"
                           title="对象的操作" target="_blank">对象的操作</a>
                        <span class="text-muted">augenstern416</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a>
                        <div>在前端开发中,JavaScript提供了许多内置对象和方法,用于处理数据、操作DOM、处理事件等。以下是一些常用对象及其方法和扩展技巧:1.Object对象Object是JavaScript中最基础的对象,几乎所有对象都继承自Object。常用方法Object.keys(obj):返回对象的所有可枚举属性的键名数组。constobj={a:1,b:2};console.log(Object.key</div>
                    </li>
                    <li><a href="/article/1892390738520502272.htm"
                           title="前端基础入门:HTML、CSS 和 JavaScript" target="_blank">前端基础入门:HTML、CSS 和 JavaScript</a>
                        <span class="text-muted">阿绵</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a>
                        <div>在现代网页开发中,前端技术扮演着至关重要的角色。无论是个人网站、企业官网,还是复杂的Web应用程序,前端开发的基础技术HTML、CSS和JavaScript都是每个开发者必须掌握的核心技能。本文将详细介绍这三者的基本概念及其应用一、HTML——网页的骨架HTML(HyperTextMarkupLanguage)是构建网页的基础语言。它是网页的结构和内容的标记语言,决定了网页上的文本、图像、表单等元</div>
                    </li>
                    <li><a href="/article/1892360084474884096.htm"
                           title="前端超长列表,虚拟滚动实现" target="_blank">前端超长列表,虚拟滚动实现</a>
                        <span class="text-muted">大橙子-</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>虚拟滚动.container{width:300px;height:500px;overflow:hidden;border:1pxsolid#ccc;margin-top:50px;}.scroll-box{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;position:relative;}.scroll-height-main</div>
                    </li>
                    <li><a href="/article/1892346975152566272.htm"
                           title="前端框架虚拟DOM的产生" target="_blank">前端框架虚拟DOM的产生</a>
                        <span class="text-muted">大橙子-</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</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>直接说结论:为了找出与命令式(原生实现步骤)所执行代码的最小差异化,从而优化代码性能。命令式:可以理解为面向过程编程,需要写好每个实现步骤constdiv=document.querySelector('#app')//获取divdiv.innerText='helloworld'//设置文本内容如果需要修改文字内容为“你好”div.innerText='你好'//设置文本内容声明式:可以理解为面</div>
                    </li>
                    <li><a href="/article/1892336006464598016.htm"
                           title="27岁大龄转码秋招惨败,朋友劝我转Java来得及吗?还是继续走前端或机器学习?" target="_blank">27岁大龄转码秋招惨败,朋友劝我转Java来得及吗?还是继续走前端或机器学习?</a>
                        <span class="text-muted">程序员yt</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>今天给大家分享的是一位粉丝的提问,27岁大龄转码秋招惨败,朋友劝我转Java来得及吗?还是继续走前端或机器学习?接下来把粉丝的具体提问和我的回复分享给大家,希望也能给一些类似情况的小伙伴一些启发和帮助。同学提问:211建筑本科,22年毕业后gap一年转码去了英国读的QS100的it的水硕(24年12月份毕业),转码后对就业形势认知不足,时间全花在课业上,八股文和算法准备的不充足,秋招算是惨败。读研</div>
                    </li>
                    <li><a href="/article/1892301695560511488.htm"
                           title="芯麦GC1808立体声ADC芯片解析:高性价比与全集成音频采集方案" target="_blank">芯麦GC1808立体声ADC芯片解析:高性价比与全集成音频采集方案</a>
                        <span class="text-muted">青牛科技-Allen</span>
<a class="tag" taget="_blank" href="/search/GLOBALCHIP/1.htm">GLOBALCHIP</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a><a class="tag" taget="_blank" href="/search/%E6%94%B6%E5%BD%95%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><a class="tag" taget="_blank" href="/search/%E5%AE%B6%E7%94%A8%E7%94%B5%E5%99%A8/1.htm">家用电器</a>
                        <div>引言在直播设备、智能语音终端等新兴应用的推动下,高性能音频采集系统的需求持续增长。芯麦半导体推出的GC1808立体声音频模数转换器,凭借其全集成信号链设计和灵活的接口配置,为开发者提供了高性价比的音频前端解决方案。本文将从核心架构、关键技术特性及典型应用场景三个方面,深入解析这款芯片的设计亮点。一、GC1808核心特性概览全集成信号链内置64倍过采样率Δ-Σ调制器集成数字梳状滤波器(CombFil</div>
                    </li>
                    <li><a href="/article/1892296529092341760.htm"
                           title="前端面试题(HTML篇)" target="_blank">前端面试题(HTML篇)</a>
                        <span class="text-muted">每天一点点~</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>1.网络中使用最多的图片格式有哪些?JPEG,GIF,PNG最流行的是JPEG格式,可以把文件压缩到最小在PS以JPEG格式存储时,提供11级压缩等级2.Doctype作用?严格模式与混杂模式如何区分?它们有何意义?声明文档类型声明位于位于HTML文档中的第一行,处于标签之前DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。标准模式(严格模式)浏览器按照W3C的标准解析执行代码标准模式(严</div>
                    </li>
                    <li><a href="/article/1892296149751099392.htm"
                           title="python websocket 心跳_websocket心跳及重连机制" target="_blank">python websocket 心跳_websocket心跳及重连机制</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/websocket/1.htm">websocket</a><a class="tag" taget="_blank" href="/search/%E5%BF%83%E8%B7%B3/1.htm">心跳</a>
                        <div>websocket心跳及重连机制websocket是前后端交互的长连接,前后端也都可能因为一些情况导致连接失效并且相互之间没有反馈提醒。因此为了保证连接的可持续性和稳定性,websocket心跳重连就应运而生。在使用原生websocket的时候,如果设备网络断开,不会立刻触发websocket的任何事件,前端也就无法得知当前连接是否已经断开。这个时候如果调用websocket.send方法,浏览器</div>
                    </li>
                    <li><a href="/article/1892267275638075392.htm"
                           title="electron学习笔记" target="_blank">electron学习笔记</a>
                        <span class="text-muted">weixin_46452138</span>
<a class="tag" taget="_blank" href="/search/electron/1.htm">electron</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>electron个人学习笔记一、electron简单了解Electron是一个跨平台的、基于Web前端技术的桌面GUI应用程序开发框架。可以使用HTML、CSS来绘制界面和控制布局,使用JavaScript来控制用户行为和业务逻辑,使用Node.js来通信、处理音频视频等,几乎所有的Web前端技术和框架(jQuery、Vue、React、Angular等)都可以应用到桌面GUI开发中。二、开发前基</div>
                    </li>
                    <li><a href="/article/1892256681367236608.htm"
                           title="虚拟DOM和真实DOM的区别" target="_blank">虚拟DOM和真实DOM的区别</a>
                        <span class="text-muted">水煮庄周鱼鱼</span>
<a class="tag" taget="_blank" href="/search/%E6%A6%82%E5%BF%B5/1.htm">概念</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>虚拟DOM(VirtualDOM)、DOM(RealDOM)是前端开发中常用的两种概念。什么是真实DOM?真实DOM是浏览器中实际存在的DOM结构,它由浏览器解析HTML生成,并且直接与浏览器交互。当页面中的数据发生变化时,真实DOM会重新计算布局和渲染,这个过程比较耗费性能。什么是虚拟DOM?虚拟DOM是一种在内存中以JavaScript对象的形式表示的轻量级的DOM结构。它是对真实DOM的一种</div>
                    </li>
                    <li><a href="/article/1892243161523220480.htm"
                           title="Java开发实习面试笔试题(含答案)" target="_blank">Java开发实习面试笔试题(含答案)</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/%E9%9D%A2%E8%AF%95/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><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a>
                        <div>在广州一家中大公司面试(BOSS标注是1000-9999人,薪资2-3k),招聘上写着Java开发,基本没有标注前端要求,但是到场知道是前后端分离人不分离。开始先让你做笔试(12道问答+4道SQL题),接着面试也是八股文之类的,没有问项目,没有做算法,现分享笔试和面试题目给大家做参考。(基础的没复习忘了不会,只会几道感觉已经寄了,最重要的是前端基本不会)一、笔试内容1.Java有哪些数据类型,什么</div>
                    </li>
                    <li><a href="/article/1892225886195871744.htm"
                           title="鸿蒙5.0实战案例:关于图像撕裂、掉帧等异常现象的原理以及优化方案" target="_blank">鸿蒙5.0实战案例:关于图像撕裂、掉帧等异常现象的原理以及优化方案</a>
                        <span class="text-muted">敢嗣先锋</span>
<a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99%E5%BC%80%E5%8F%91/1.htm">鸿蒙开发</a><a class="tag" taget="_blank" href="/search/HarmonyOS/1.htm">HarmonyOS</a><a class="tag" taget="_blank" href="/search/%E7%A7%BB%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">移动开发</a><a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a><a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99%E5%BC%80%E5%8F%91/1.htm">鸿蒙开发</a><a class="tag" taget="_blank" href="/search/openharmony/1.htm">openharmony</a><a class="tag" taget="_blank" href="/search/%E7%A7%BB%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">移动开发</a><a class="tag" taget="_blank" href="/search/ArkUI/1.htm">ArkUI</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a>
                        <div>往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录)✏️鸿蒙(HarmonyOS)北向开发知识点记录~✏️鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~✏️鸿蒙应用开发与鸿蒙系统开发哪个更有前景?✏️嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~✏️对于大前端开发来说,转鸿蒙开发究竟是福还是祸?✏️鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?✏️记录一场鸿蒙开发岗位面</div>
                    </li>
                    <li><a href="/article/1892219834280767488.htm"
                           title="【如何实现 JavaScript 的防抖和节流?】" target="_blank">【如何实现 JavaScript 的防抖和节流?】</a>
                        <span class="text-muted">程序员远仔</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95%E9%AB%98%E9%A2%91%E9%97%AE%E9%A2%98%E5%AE%9D%E5%85%B8/1.htm">前端面试高频问题宝典</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>如何实现JavaScript的防抖和节流?前言防抖(Debounce)和节流(Throttle)是JavaScript中优化高频事件处理的两种常用技术。它们可以有效减少事件处理函数的调用次数,提升性能并改善用户体验。本文将详细介绍防抖和节流的实现原理及其应用场景。关键词JavaScript、防抖、节流、高频事件、性能优化、事件处理、前端开发、前端面试、前端基础、前端进阶、前端工程化、前端开发最佳实</div>
                    </li>
                    <li><a href="/article/1892214793360699392.htm"
                           title="Web开发中的可专利性分析:透过一个案例学习" target="_blank">Web开发中的可专利性分析:透过一个案例学习</a>
                        <span class="text-muted">CodePatentMaster</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>Web开发工程师在创新过程中经常面临是否能申请专利并获得专利权的问题。本文通过一个详细的Web开发领域案例来阐释可专利性的分析过程。案例分析假设您是一名Web开发工程师,您开发了一种名为“动态响应式前端框架”(DynamicResponsiveFrontendFramework,DRFF)的新型前端框架。与传统前端框架相比,DRFF通过引入一种基于AI的组件化设计方法和实时数据流处理机制,显著提高</div>
                    </li>
                    <li><a href="/article/1892209750993596416.htm"
                           title="前端实现防抖功能的详细解读" target="_blank">前端实现防抖功能的详细解读</a>
                        <span class="text-muted">黑码小帅</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E7%9F%A5%E8%AF%86%E6%80%BB%E7%BB%93/1.htm">前端知识总结</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/easyui/1.htm">easyui</a><a class="tag" taget="_blank" href="/search/bootstrap/1.htm">bootstrap</a>
                        <div>在前端开发中,防抖(Debounce)是一种优化技术,用于限制某个函数在短时间内被频繁调用的次数。它的核心思想是:在一定时间内,无论触发多少次事件,只执行最后一次操作。防抖通常用于处理用户输入、窗口调整、滚动事件等高频触发的场景,以减少不必要的计算或请求,提升性能。1.防抖的应用场景常见场景搜索框输入:当用户在搜索框中输入内容时,每次按键都会触发搜索请求。如果不做防抖处理,可能会导致大量不必要的请</div>
                    </li>
                    <li><a href="/article/1892206853664862208.htm"
                           title="前端 window.print() 打印图片" target="_blank">前端 window.print() 打印图片</a>
                        <span class="text-muted">BillKu</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>在使用document.write时,确保内容加载完成后再执行其他操作(如print),可以通过以下方法实现:1.使用window.onload事件window.onload事件会在页面所有资源(包括图片、脚本等)加载完成后触发。javascript复制window.onload=function(){document.write("页面已加载完成");window.print();//确保内容加</div>
                    </li>
                    <li><a href="/article/1892163473534676992.htm"
                           title="Svelte 5 框架加速实时应用开发, 或引领未来前端编译式框架大爆发?" target="_blank">Svelte 5 框架加速实时应用开发, 或引领未来前端编译式框架大爆发?</a>
                        <span class="text-muted">寒鸦xxx</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%89%8D%E6%B2%BF%E6%8A%80%E6%9C%AF/1.htm">前端前沿技术</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%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a>
                        <div>自从去年Svelte团队发布了Svelte5稳定版,同样也是该项目历史上最重要的版本,目前start已经上升到了80K+,也有越来越多的企业和项目投入了该生态.下面我们来看看它与众不同的几大点一、为何Svelte5能加速实时应用?响应式系统的革命细粒度更新:通过$state和$derived实现精准依赖追踪,仅更新受影响的UI部分(而非虚拟DOM全量比对)。性能对比:在实时数据流场景(如股票行情)</div>
                    </li>
                    <li><a href="/article/1892159186607861760.htm"
                           title="TypeScript 中的 type 和 interface:你真的了解它们的不同吗?" target="_blank">TypeScript 中的 type 和 interface:你真的了解它们的不同吗?</a>
                        <span class="text-muted">液态不合群</span>
<a class="tag" taget="_blank" href="/search/typescript/1.htm">typescript</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>如果你有写过Vue3的项目,那么对TypeScript肯定不会陌生。不管是公司新项目技术选型还是个人学习开发新的前端项目,Vue3+TypeScript已经成为首选技术方案之一在TypeScript这个强大的静态类型系统中,type和interface是两个重要的关键字,用于定义和描述数据类型。然而,这两者之间的区别是什么,在实际开发过程中我们要怎么用呢?废话不说,直接进入正题,就让我们一起深入探</div>
                    </li>
                                <li><a href="/article/115.htm"
                                       title="C/C++Win32编程基础详解视频下载" target="_blank">C/C++Win32编程基础详解视频下载</a>
                                    <span class="text-muted">择善Zach</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/Win32/1.htm">Win32</a>
                                    <div>课题视频:C/C++Win32编程基础详解 
视频知识:win32窗口的创建 
                  windows事件机制 
主讲:择善Uncle老师 
学习交流群:386620625 
验证码:625 
 
--</div>
                                </li>
                                <li><a href="/article/242.htm"
                                       title="Guava Cache使用笔记" target="_blank">Guava Cache使用笔记</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/guava/1.htm">guava</a><a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a>
                                    <div>1.Guava Cache的get/getIfPresent方法当参数为null时会抛空指针异常 
 
我刚开始使用时还以为Guava Cache跟HashMap一样,get(null)返回null。 
实际上Guava整体设计思想就是拒绝null的,很多地方都会执行com.google.common.base.Preconditions.checkNotNull的检查。 
 
 
2.Guava</div>
                                </li>
                                <li><a href="/article/369.htm"
                                       title="解决ora-01652无法通过128(在temp表空间中)" target="_blank">解决ora-01652无法通过128(在temp表空间中)</a>
                                    <span class="text-muted">0624chenhong</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>解决ora-01652无法通过128(在temp表空间中)扩展temp段的过程 
 
一个sql语句后,大约花了10分钟,好不容易有一个结果,但是报了一个ora-01652错误,查阅了oracle的错误代码说明:意思是指temp表空间无法自动扩展temp段。这种问题一般有两种原因:一是临时表空间空间太小,二是不能自动扩展。 
分析过程: 
   既然是temp表空间有问题,那当</div>
                                </li>
                                <li><a href="/article/496.htm"
                                       title="Struct在jsp标签" target="_blank">Struct在jsp标签</a>
                                    <span class="text-muted">不懂事的小屁孩</span>
<a class="tag" taget="_blank" href="/search/struct/1.htm">struct</a>
                                    <div>非UI标签介绍: 
控制类标签: 
1:程序流程控制标签   if   elseif    else 
<s:if test="isUsed"> 
 <span class="label label-success">True</span> 
</</div>
                                </li>
                                <li><a href="/article/623.htm"
                                       title="按对象属性排序" target="_blank">按对象属性排序</a>
                                    <span class="text-muted">换个号韩国红果果</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E5%AF%B9%E8%B1%A1%E6%8E%92%E5%BA%8F/1.htm">对象排序</a>
                                    <div>利用JavaScript进行对象排序,根据用户的年龄排序展示 
 
<script>
var bob={
name;bob,
age:30
}
var peter={
name;peter,
age:30
}
var amy={
name;amy,
age:24
}
var mike={
name;mike,
age:29
}
var john={
</div>
                                </li>
                                <li><a href="/article/750.htm"
                                       title="大数据分析让个性化的客户体验不再遥远" target="_blank">大数据分析让个性化的客户体验不再遥远</a>
                                    <span class="text-muted">蓝儿唯美</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a>
                                    <div>顾客通过多种渠道制造大量数据,企业则热衷于利用这些信息来实现更为个性化的体验。 
分析公司Gartner表示,高级分析会成为客户服务的关键,但是大数据分析的采用目前仅局限于不到一成的企业。 挑战在于企业还在努力适应结构化数据,疲于根据自身的客户关系管理(CRM)系统部署有效的分析框架,以及集成不同的内外部信息源。 
然而,面对顾客通过数字技术参与而产生的快速变化的信息,企业需要及时作出反应。要想实</div>
                                </li>
                                <li><a href="/article/877.htm"
                                       title="java笔记4" target="_blank">java笔记4</a>
                                    <span class="text-muted">a-john</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>操作符 
1,使用java操作符 
      操作符接受一个或多个参数,并生成一个新值。参数的形式与普通的方法调用不用,但是效果是相同的。加号和一元的正号(+)、减号和一元的负号(-)、乘号(*)、除号(/)以及赋值号(=)的用法与其他编程语言类似。 
      操作符作用于操作数,生成一个新值。另外,有些操作符可能会改变操作数自身的</div>
                                </li>
                                <li><a href="/article/1004.htm"
                                       title="从裸机编程到嵌入式Linux编程思想的转变------分而治之:驱动和应用程序" target="_blank">从裸机编程到嵌入式Linux编程思想的转变------分而治之:驱动和应用程序</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%AD%A6%E4%B9%A0/1.htm">嵌入式学习</a>
                                    <div>    笔者学习嵌入式Linux也有一段时间了,很奇怪的是很多书讲驱动编程方面的知识,也有很多书将ARM9方面的知识,但是从以前51形式的(对寄存器直接操作,初始化芯片的功能模块)编程方法,和思维模式,变换为基于Linux操作系统编程,讲这个思想转变的书几乎没有,让初学者走了很多弯路,撞了很多难墙。 
    笔者因此写上自己的学习心得,希望能给和我一样转变</div>
                                </li>
                                <li><a href="/article/1131.htm"
                                       title="在springmvc中解决FastJson循环引用的问题" target="_blank">在springmvc中解决FastJson循环引用的问题</a>
                                    <span class="text-muted">asialee</span>
<a class="tag" taget="_blank" href="/search/%E5%BE%AA%E7%8E%AF%E5%BC%95%E7%94%A8/1.htm">循环引用</a><a class="tag" taget="_blank" href="/search/fastjson/1.htm">fastjson</a>
                                    <div>          我们先来看一个例子: 
          
package com.elong.bms;

import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import co</div>
                                </li>
                                <li><a href="/article/1258.htm"
                                       title="ArrayAdapter和SimpleAdapter技术总结" target="_blank">ArrayAdapter和SimpleAdapter技术总结</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/SimpleAdapter/1.htm">SimpleAdapter</a><a class="tag" taget="_blank" href="/search/ArrayAdapter/1.htm">ArrayAdapter</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E7%BA%A7%E7%BB%84%E4%BB%B6%E5%9F%BA%E7%A1%80/1.htm">高级组件基础</a>
                                    <div>ArrayAdapter比较简单,但它只能用于显示文字。而SimpleAdapter则有很强的扩展性,可以自定义出各种效果 
  
ArrayAdapter;的数据可以是数组或者是队列 
  
     // 获得下拉框对象 
AutoCompleteTextView textview = (AutoCompleteTextView) this
</div>
                                </li>
                                <li><a href="/article/1385.htm"
                                       title="九封信" target="_blank">九封信</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E7%94%9F/1.htm">人生</a><a class="tag" taget="_blank" href="/search/%E5%8A%B1%E5%BF%97/1.htm">励志</a>
                                    <div>        有时候,莫名的心情不好,不想和任何人说话,只想一个人静静的发呆。有时候,想一个人躲起来脆弱,不愿别人看到自己的伤口。有时候,走过熟悉的街角,看到熟悉的背影,突然想起一个人的脸。有时候,发现自己一夜之间就长大了。         2014,写给人</div>
                                </li>
                                <li><a href="/article/1512.htm"
                                       title="Linux下安装MySQL Web 管理工具phpMyAdmin" target="_blank">Linux下安装MySQL Web 管理工具phpMyAdmin</a>
                                    <span class="text-muted">sunjing</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/Install/1.htm">Install</a><a class="tag" taget="_blank" href="/search/phpMyAdmin/1.htm">phpMyAdmin</a>
                                    <div>PHP http://php.net/ 
phpMyAdmin http://www.phpmyadmin.net 
Error compiling PHP on CentOS x64 
  
一、安装Apache 
请参阅http://billben.iteye.com/admin/blogs/1985244 
  
二、安装依赖包 
sudo yum install gd </div>
                                </li>
                                <li><a href="/article/1639.htm"
                                       title="分布式系统理论" target="_blank">分布式系统理论</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                                    <div>FLP 
One famous theory in distributed computing, known as FLP after the authors Fischer, Lynch, and Patterson, proved that in a distributed system with asynchronous communication and process crashes, </div>
                                </li>
                                <li><a href="/article/1766.htm"
                                       title="ssh2整合(spring+struts2+hibernate)-附源码" target="_blank">ssh2整合(spring+struts2+hibernate)-附源码</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/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/1.htm">项目管理</a>
                                    <div>最近抽空又整理了一套ssh2框架,主要使用的技术如下: 
spring做容器,管理了三层(dao,service,actioin)的对象 
struts2实现与页面交互(MVC),自己做了一个异常拦截器,能拦截Action层抛出的异常 
hibernate与数据库交互 
BoneCp数据库连接池,据说比其它数据库连接池快20倍,仅仅是据说 
MySql数据库 
  
项目用eclipse</div>
                                </li>
                                <li><a href="/article/1893.htm"
                                       title="treetable bug记录" target="_blank">treetable bug记录</a>
                                    <span class="text-muted">braveCS</span>
<a class="tag" taget="_blank" href="/search/table/1.htm">table</a>
                                    <div>// 插入子节点删除再插入时不能正常显示。修改:
//不知改后有没有错,先做个备忘
 Tree.prototype.removeNode = function(node) {
      // Recursively remove all descendants of +node+
      this.unloadBranch(node);

      // Remove</div>
                                </li>
                                <li><a href="/article/2020.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/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a>
                                    <div>

import java.util.Arrays;

public class NumberToWord {

	/**
	 * 编程之美 电话号码对应英语单词
	 * 题目:
     *  手机上的拨号盘,每个数字都对应一些字母,比如2对应ABC,3对应DEF.........,8对应TUV,9对应WXYZ,
     *  要求对一段数字,输出其代表的所有可能的字母组合</div>
                                </li>
                                <li><a href="/article/2147.htm"
                                       title="jquery ajax读书笔记" target="_blank">jquery ajax读书笔记</a>
                                    <span class="text-muted">chengxuyuancsdn</span>
<a class="tag" taget="_blank" href="/search/jQuery+ajax/1.htm">jQuery ajax</a>
                                    <div>1、jsp页面 
 
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()</div>
                                </li>
                                <li><a href="/article/2274.htm"
                                       title="JWFD工作流拓扑结构解析伪码描述算法" target="_blank">JWFD工作流拓扑结构解析伪码描述算法</a>
                                    <span class="text-muted">comsci</span>
<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/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E6%B4%BB%E5%8A%A8/1.htm">活动</a><a class="tag" taget="_blank" href="/search/J%23/1.htm">J#</a>
                                    <div>  对工作流拓扑结构解析感兴趣的朋友可以下载附件,或者下载JWFD的全部代码进行分析 
 
 
  /*  流程图拓扑结构解析伪码描述算法 
 
        public java.util.ArrayList DFS(String graphid, String stepid, int j) </div>
                                </li>
                                <li><a href="/article/2401.htm"
                                       title="oracle I/O 从属进程" target="_blank">oracle I/O 从属进程</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>I/O 从属进程 
 
  I/O从属进程用于为不支持异步I/O的系统或设备模拟异步I/O.例如,磁带设备(相当慢)就不支持异步I/O.通过使用I/O 从属进程,可以让磁带机模仿通常只为磁盘驱动器提供的功能。就好像支持真正的异步I/O 一样,写设备的进程(调用者)会收集大量数据,并交由写入器写出。数据成功地写出时,写入器(此时写入器是I/O 从属进程,而不是操作系统)会通知原来的调用者,调用者则会</div>
                                </li>
                                <li><a href="/article/2528.htm"
                                       title="高级排序:希尔排序" target="_blank">高级排序:希尔排序</a>
                                    <span class="text-muted">dieslrae</span>
<a class="tag" taget="_blank" href="/search/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F/1.htm">希尔排序</a>
                                    <div>
    public void shellSort(int[] array){
        int limit = 1;
        int temp;
        int index;
        
        while(limit <= array.length/3){
            limit = limit * 3 + 1;
    </div>
                                </li>
                                <li><a href="/article/2655.htm"
                                       title="初二下学期难记忆单词" target="_blank">初二下学期难记忆单词</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a>
                                    <div>kitchen 厨房 
cupboard 厨柜 
salt 盐 
sugar 糖 
oil 油 
fork 叉;餐叉 
spoon 匙;调羹 
chopsticks 筷子 
cabbage 卷心菜;洋白菜 
soup 汤 
Italian 意大利的 
  
Indian 印度的 
workplace  工作场所 
even 甚至;更 
Italy 意大利 
laugh 笑 
m</div>
                                </li>
                                <li><a href="/article/2782.htm"
                                       title="Go语言使用MySQL数据库进行增删改查" target="_blank">Go语言使用MySQL数据库进行增删改查</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>目前Internet上流行的网站构架方式是LAMP,其中的M即MySQL, 作为数据库,MySQL以免费、开源、使用方便为优势成为了很多Web开发的后端数据库存储引擎。MySQL驱动Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口,常用的有如下几种: 
 
  http://code.google.c...o-mysql-dri</div>
                                </li>
                                <li><a href="/article/2909.htm"
                                       title="git命令" target="_blank">git命令</a>
                                    <span class="text-muted">shuizhaosi888</span>
<a class="tag" taget="_blank" href="/search/git/1.htm">git</a>
                                    <div>---------------设置全局用户名:
git config --global user.name "HanShuliang" //设置用户名 
git config --global user.email "13241153187@163.com" //设置邮箱

---------------查看环境配置
git config --li</div>
                                </li>
                                <li><a href="/article/3036.htm"
                                       title="qemu-kvm 网络 nat模式 (四)" target="_blank">qemu-kvm 网络 nat模式 (四)</a>
                                    <span class="text-muted">haoningabc</span>
<a class="tag" taget="_blank" href="/search/kvm/1.htm">kvm</a><a class="tag" taget="_blank" href="/search/qemu/1.htm">qemu</a>
                                    <div>qemu-ifup-NAT 
 

#!/bin/bash
BRIDGE=virbr0
NETWORK=192.168.122.0
GATEWAY=192.168.122.1
NETMASK=255.255.255.0
DHCPRANGE=192.168.122.2,192.168.122.254
TFTPROOT=
BOOTP=
function check_bridge()
</div>
                                </li>
                                <li><a href="/article/3163.htm"
                                       title="不要让未来的你,讨厌现在的自己" target="_blank">不要让未来的你,讨厌现在的自己</a>
                                    <span class="text-muted">jingjing0907</span>
<a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB+%E5%A5%8B%E6%96%97+%E5%B7%A5%E4%BD%9C+%E6%A2%A6%E6%83%B3/1.htm">生活 奋斗 工作 梦想</a>
                                    <div> 故事one 
 23岁,他大学毕业,放弃了父母安排的稳定工作,独闯京城,在家小公司混个小职位,工作还算顺手,月薪三千,混了混,混走了一年的光阴。    24岁,有了女朋友,从二环12人的集体宿舍搬到香山民居,一间平房,二人世界,爱爱爱。偶然约三朋四友,打扑克搓麻将,日子快乐似神仙;    25岁,出了几次差,调了两次岗,薪水涨了不过百,生猛狂飙的物价让现实血淋淋,无力为心爱银儿购件大牌</div>
                                </li>
                                <li><a href="/article/3290.htm"
                                       title="枚举类型详解" target="_blank">枚举类型详解</a>
                                    <span class="text-muted">一路欢笑一路走</span>
<a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/%E6%9E%9A%E4%B8%BE%E8%AF%A6%E8%A7%A3/1.htm">枚举详解</a><a class="tag" taget="_blank" href="/search/enumset/1.htm">enumset</a><a class="tag" taget="_blank" href="/search/enumMap/1.htm">enumMap</a>
                                    <div>枚举类型详解 
一.Enum详解 
     1.1枚举类型的介绍 
  
JDK1.5加入了一个全新的类型的”类”—枚举类型,为此JDK1.5引入了一个新的关键字enum,我们可以这样定义一个枚举类型。 
  
   Demo:一个最简单的枚举类 
  
public enum ColorType {
   RED</div>
                                </li>
                                <li><a href="/article/3417.htm"
                                       title="第11章 动画效果(上)" target="_blank">第11章 动画效果(上)</a>
                                    <span class="text-muted">onestopweb</span>
<a class="tag" taget="_blank" href="/search/%E5%8A%A8%E7%94%BB/1.htm">动画</a>
                                    <div>index.html 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/</div>
                                </li>
                                <li><a href="/article/3544.htm"
                                       title="Eclipse中jsp、js文件编辑时,卡死现象解决汇总" target="_blank">Eclipse中jsp、js文件编辑时,卡死现象解决汇总</a>
                                    <span class="text-muted">ljf_home</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/jsp%E5%8D%A1%E6%AD%BB/1.htm">jsp卡死</a><a class="tag" taget="_blank" href="/search/js%E5%8D%A1%E6%AD%BB/1.htm">js卡死</a>
                                    <div>使用Eclipse编辑jsp、js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,具体那个方法起到作用,不太好讲。将所有用过的方法罗列如下: 
  
1、取消验证 
windows–>perferences–>validation 
把 除了manual 下面的全部点掉,build下只留 classpath dependency Valida</div>
                                </li>
                                <li><a href="/article/3671.htm"
                                       title="MySQL编程中的6个重要的实用技巧" target="_blank">MySQL编程中的6个重要的实用技巧</a>
                                    <span class="text-muted">tomcat_oracle</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>每一行命令都是用分号(;)作为结束 
对于MySQL,第一件你必须牢记的是它的每一行命令都是用分号(;)作为结束的,但当一行MySQL被插入在PHP代码中时,最好把后面的分号省略掉,例如: 
mysql_query("INSERT INTO tablename(first_name,last_name)VALUES('$first_name',$last_name')"); 
</div>
                                </li>
                                <li><a href="/article/3798.htm"
                                       title="zoj 3820 Building Fire Stations(二分+bfs)" target="_blank">zoj 3820 Building Fire Stations(二分+bfs)</a>
                                    <span class="text-muted">阿尔萨斯</span>
<a class="tag" taget="_blank" href="/search/Build/1.htm">Build</a>
                                    <div> 题目链接:zoj 3820 Building Fire Stations 
 题目大意:给定一棵树,选取两个建立加油站,问说所有点距离加油站距离的最大值的最小值是多少,并且任意输出一种建立加油站的方式。 
 解题思路:二分距离判断,判断函数的复杂度是o(n),这样的复杂度应该是o(nlogn),即使常数系数偏大,但是居然跑了4.5s,也是醉了。 判断函数里面做了3次bfs,但是每次bfs节点最多</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>