神秘的40毫秒延迟与 TCP_NODELAY

最近的业余时间几乎全部献给 breeze 这个多年前挖 下的大坑—— 一个异步 HTTP Server。努力没有白费,项目已经逐渐成型了, 基本的框架已经有了,一个静态 文件模块也已经实现了。

写 HTTP Server,不可免俗地一定要用 ab 跑一下性能,结果一跑不打紧,出现了一个困扰了我好几天的问题:神秘的 40ms 延迟。

Table of Contents

  • 1 现象
  • 2 背后的原因
  • 3 为什么只有 Write-Write-Read 时才会出问题
  • 4 解决方案
    • 4.1 优化协议
    • 4.2 开启 TCP_NODELAY

1 现象

现象是这样的,首先看我用 ab 不加 -k 选项的结果:

[~/dev/personal/breeze]$ /usr/sbin/ab  -c 1 -n 10 http://127.0.0.1:8000/styles/shThemeRDark.css
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient).....done


Server Software:        breeze/0.1.0
Server Hostname:        127.0.0.1
Server Port:            8000

Document Path:          /styles/shThemeRDark.css
Document Length:        127 bytes

Concurrency Level:      1
Time taken for tests:   0.001 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Total transferred:      2700 bytes
HTML transferred:       1270 bytes
Requests per second:    9578.54 [#/sec] (mean)
Time per request:       0.104 [ms] (mean)
Time per request:       0.104 [ms] (mean, across all concurrent requests)
Transfer rate:          2525.59 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:     0    0   0.0      0       0
Waiting:        0    0   0.0      0       0
Total:          0    0   0.1      0       0

Percentage of the requests served within a certain time (ms)
  50%      0
  66%      0
  75%      0
  80%      0
  90%      0
  95%      0
  98%      0
  99%      0
 100%      0 (longest request)

很好,不超过 1ms 的响应时间。但一旦我加上了 -k 选项启用 HTTP Keep-Alive,结果就变成了这样:

[~/dev/personal/breeze]$ /usr/sbin/ab -k  -c 1 -n 10 http://127.0.0.1:8000/styles/shThemeRDark.css
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient).....done

Server Software:        breeze/0.1.0
Server Hostname:        127.0.0.1
Server Port:            8000

Document Path:          /styles/shThemeRDark.css
Document Length:        127 bytes

Concurrency Level:      1
Time taken for tests:   0.360 seconds
Complete requests:      10
Failed requests:        0
Write errors:           0
Keep-Alive requests:    10
Total transferred:      2750 bytes
HTML transferred:       1270 bytes
Requests per second:    27.75 [#/sec] (mean)
Time per request:       36.041 [ms] (mean)
Time per request:       36.041 [ms] (mean, across all concurrent requests)
Transfer rate:          7.45 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:     1   36  12.4     40      40
Waiting:        0    0   0.2      0       1
Total:          1   36  12.4     40      40

Percentage of the requests served within a certain time (ms)
  50%     40
  66%     40
  75%     40
  80%     40
  90%     40
  95%     40
  98%     40
  99%     40
 100%     40 (longest request)

40ms 啊!这可是访问本机上的 Server 啊,才 1 个连接啊!太奇怪了吧!祭出 神器 strace,看看到底是什么情况:

15:37:47.493170 epoll_wait(3, {}, 1024, 0) = 0
15:37:47.493210 readv(5, [{"GET /styles/shThemeRDark.css HTT"..., 10111}, {"GET /styles/shThemeRDark.css HTT"..., 129}], 2) = 129
15:37:47.493244 epoll_wait(3, {}, 1024, 0) = 0
15:37:47.493279 write(5, "HTTP/1.0 200 OK\r\nContent-Type: t"..., 148) = 148
15:37:47.493320 write(5, "Hello world</"..., 127) = 127
15:37:47.493347 epoll_wait(3, {}, 1024, 0) = 0
15:37:47.493370 readv(5, 0x7fff196a6740, 2) = -1 EAGAIN (Resource temporarily unavailable)
15:37:47.493394 epoll_ctl(3, EPOLL_CTL_MOD, 5, {...}) = 0
15:37:47.493417 epoll_wait(3, {?} 0x7fff196a67a0, 1024, 100) = 1
15:37:47.532898 readv(5, [{"GET /styles/shThemeRDark.css HTT"..., 9982}, {"GET /styles/shThemeRDark.css HTT"..., 258}], 2) = 129
15:37:47.533029 epoll_ctl(3, EPOLL_CTL_MOD, 5, {...}) = 0
15:37:47.533116 write(5, "HTTP/1.0 200 OK\r\nContent-Type: t"..., 148) = 148
15:37:47.533194 write(5, "<html><head><title>Hello world</"..., 127) = 127
</pre> 
     <p> 发现是读下一个请求之前的那个 <code style="border:1px solid rgb(204,204,204);font-family:Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace;font-size:.9em;">epoll_wait</code> 花了 40ms 才返回。这意味着要 么是 client 等了 40ms 才给我发请求,要么是我上面 <code style="border:1px solid rgb(204,204,204);font-family:Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace;font-size:.9em;">write</code> 写入的数据过 了 40ms 才到达 client。前者的可能性几乎没有,ab 作为一个压力测试工具, 是不可能这样做的,那么问题只有可能是之前写入的 response 过了 40ms 才到 达 client。</p> 
    </div> 
   </div> 
   <div id="outline-container-2" class="outline-3"> 
    <h3 id="sec-2" style="font-size:1.3em;"><span class="section-number-3">2</span> 背后的原因</h3> 
    <div id="text-2" class="outline-text-3"> 
     <p> 为什么延迟不高不低正好 40ms 呢?果断 Google 一下找到了答案。原来这是 TCP 协议中的 Nagle‘s Algorithm 和 TCP Delayed Acknoledgement 共同起作 用所造成的结果。</p> 
     <p> Nagle’s Algorithm 是为了提高带宽利用率设计的算法,其做法是合并小的TCP 包为一个,避免了过多的小报文的 TCP 头所浪费的带宽。如果开启了这个算法 (默认),则协议栈会累积数据直到以下两个条件之一满足的时候才真正发送出 去:</p> 
     <ol> 
      <li>积累的数据量到达最大的 TCP Segment Size</li> 
      <li>收到了一个 Ack</li> 
     </ol> 
     <p> TCP Delayed Acknoledgement 也是为了类似的目的被设计出来的,它的作用就 是延迟 Ack 包的发送,使得协议栈有机会合并多个 Ack,提高网络性能。</p> 
     <p> 如果一个 TCP 连接的一端启用了 Nagle‘s Algorithm,而另一端启用了 TCP Delayed Ack,而发送的数据包又比较小,则可能会出现这样的情况:发送端在等 待接收端对上一个packet 的 Ack 才发送当前的 packet,而接收端则正好延迟了 此 Ack 的发送,那么这个正要被发送的 packet 就会同样被延迟。当然 Delayed Ack 是有个超时机制的,而默认的超时正好就是 40ms。</p> 
     <p> 现代的 TCP/IP 协议栈实现,默认几乎都启用了这两个功能,你可能会想,按我 上面的说法,当协议报文很小的时候,岂不每次都会触发这个延迟问题?事实不 是那样的。仅当协议的交互是发送端连续发送两个 packet,然后立刻 read 的 时候才会出现问题。</p> 
    </div> 
   </div> 
   <div id="outline-container-3" class="outline-3"> 
    <h3 id="sec-3" style="font-size:1.3em;"><span class="section-number-3">3</span> 为什么只有 Write-Write-Read 时才会出问题</h3> 
    <div id="text-3" class="outline-text-3"> 
     <p> 维基百科上的有一段伪代码来介绍 Nagle’s Algorithm:</p> 
     <pre class="example" style="border:1px solid rgb(204,204,204);font-family:Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace;line-height:1.5;">if there is new data to send
  if the window size >= MSS and available data is >= MSS
    send complete MSS segment now
  else
    if there is unconfirmed data still in the pipe
      enqueue data in the buffer until an acknowledge is received
    else
      send data immediately
    end if
  end if
end if
</pre> 
     <p> 可以看到,当待发送的数据比 MSS 小的时候(外层的 else 分支),还要再判断 时候还有未确认的数据。只有当管道里还有未确认数据的时候才会进入缓冲区, 等待 Ack。</p> 
     <p> 所以发送端发送的第一个 write 是不会被缓冲起来,而是立刻发送的(进入内层 的else 分支),这时接收端收到对应的数据,但它还期待更多数据才进行处理, 所以不会往回发送数据,因此也没机会把 Ack 给带回去,根据Delayed Ack 机制, 这个 Ack 会被 Hold 住。这时发送端发送第二个包,而队列里还有未确认的数据 包,所以进入了内层 if 的 then 分支,这个 packet 会被缓冲起来。此时,发 送端在等待接收端的 Ack;接收端则在 Delay 这个 Ack,所以都在等待,直到接 收端 Deplayed Ack 超时(40ms),此 Ack 被发送回去,发送端缓冲的这个 packet 才会被真正送到接收端,从而继续下去。</p> 
     <p> 再看我上面的 strace 记录也能发现端倪,因为设计的一些不足,我没能做到把 短小的 HTTP Body 连同 HTTP Headers 一起发送出去,而是分开成两次调用实 现的,之后进入 <code style="border:1px solid rgb(204,204,204);font-family:Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace;font-size:.9em;">epoll_wait</code> 等待下一个 Request 被发送过来(相当于阻塞模 型里直接 read)。正好是 write-write-read 的模式。</p> 
     <p> 那么 write-read-write-read 会不会出问题呢?维基百科上的解释是不会:</p> 
     <blockquote style="border-left-width:5px;border-left-style:solid;border-left-color:rgb(204,204,204);"> 
      <p> “The user-level solution is to avoid write-write-read sequences on sockets. write-read-write-read is fine. write-write-write is fine. But write-write-read is a killer. So, if you can, buffer up your little writes to TCP and send them all at once. Using the standard UNIX I/O package and flushing write before each read usually works.”</p> 
     </blockquote> 
     <p> 我的理解是这样的:因为第一个 write 不会被缓冲,会立刻到达接收端,如果是 write-read-write-read 模式,此时接收端应该已经得到所有需要的数据以进行 下一步处理。接收端此时处理完后发送结果,同时也就可以把上一个packet 的 Ack 可以和数据一起发送回去,不需要 delay,从而不会导致任何问题。</p> 
     <p> 我做了一个简单的试验,注释掉了 HTTP Body 的发送,仅仅发送 Headers, Content-Length 指定为 0。这样就不会有第二个 write,变成了 write-read-write-read 模式。此时再用 ab 测试,果然没有 40ms 的延迟了。</p> 
     <p> 说完了问题,该说解决方案了。</p> 
    </div> 
   </div> 
   <div id="outline-container-4" class="outline-3"> 
    <h3 id="sec-4" style="font-size:1.3em;"><span class="section-number-3">4</span> 解决方案</h3> 
    <div id="outline-container-4-1" class="outline-4"> 
     <h4 id="sec-4-1"><span class="section-number-4">4.1</span> 优化协议</h4> 
     <div id="text-4-1" class="outline-text-4"> 
      <p> 连续 write 小数据包,然后 read 其实是一个不好的网络编程模式,这样的连 续 write 其实应该在应用层合并成一次 write。</p> 
      <p> 可惜的是,我的程序貌似不太好做这样的优化,需要打破一些设计,等我有时间 了再好好调整,至于现在嘛,就很屌丝地用下一个解决方法了。</p> 
     </div> 
    </div> 
    <div id="outline-container-4-2" class="outline-4"> 
     <h4 id="sec-4-2"><span class="section-number-4">4.2</span> 开启 <code style="border:1px solid rgb(204,204,204);font-family:Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace;font-size:.9em;">TCP_NODELAY</code></h4> 
     <div id="text-4-2" class="outline-text-4"> 
      <p> 简单地说,这个选项的作用就是禁用 Nagle’s Algorithm,禁止后当然就不会有 它引起的一系列问题了。在 UNIX C 里使用 <code style="border:1px solid rgb(204,204,204);font-family:Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace;font-size:.9em;">setsockopt</code> 可以做到:</p> 
      <pre class="example" style="border:1px solid rgb(204,204,204);font-family:Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace;line-height:1.5;">static void _set_tcp_nodelay(int fd) {
    int enable = 1;
    setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (void*)&enable, sizeof(enable));
}
</pre> 
      <p> 在 Java 里就更简单了,Socket 对象上有一个 <code style="border:1px solid rgb(204,204,204);font-family:Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace;font-size:.9em;">setTcpNoDelay</code> 的方法,直接设 置成 <code style="border:1px solid rgb(204,204,204);font-family:Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace;font-size:.9em;">true</code> 即可。</p> 
      <p> 据我所知,Nginx 默认是开启了这个选项的,这也给了我一点安慰:既然 Nginx 都这么干了,我就先不忙为了这个问题打破设计了,也默认开启 <code style="border:1px solid rgb(204,204,204);font-family:Menlo, Monaco, 'Andale Mono', 'lucida console', 'Courier New', monospace;font-size:.9em;">TCP_NODELAY</code> 吧……</p> 
      <p> <br></p> 
      <p> 转自:http://jerrypeng.me/2013/08/mythical-40ms-delay-and-tcp-nodelay/</p> 
     </div> 
    </div> 
   </div> 
  </div> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1274697210621083648"></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">你可能感兴趣的:(神秘的40毫秒延迟与 TCP_NODELAY)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1898209824705933312.htm"
                           title="request.getHeader(“X-Forwarded-For“)& request.getRemoteAddr()" target="_blank">request.getHeader(“X-Forwarded-For“)& request.getRemoteAddr()</a>
                        <span class="text-muted">flying jiang</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>在Web开发中,request.getHeader("X-Forwarded-For")和request.getRemoteAddr()是用于获取客户端IP地址的两种不同方法,但它们有不同的应用场景和限制。request.getHeader("X-Forwarded-For"):作用:获取HTTP请求头中的X-Forwarded-For字段的值。适用场景:当请求经过一个或多个代理服务器(如负载均衡</div>
                    </li>
                    <li><a href="/article/1898209569075687424.htm"
                           title="swagger基本使用及常用注解" target="_blank">swagger基本使用及常用注解</a>
                        <span class="text-muted">耀辰</span>
<a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/api/1.htm">api</a><a class="tag" taget="_blank" href="/search/swagger2/1.htm">swagger2</a>
                        <div>一、介绍Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。作用:1.接口的文档在线自动生成。2.功能测试。每当我在学习一门知识的都会习惯性的去看他的介绍,了解出现的起源、使用的目的。或许有人就会问了,知道是什么但是还是不</div>
                    </li>
                    <li><a href="/article/1898209569616752640.htm"
                           title="遇到NotOfficeXmlFileException" target="_blank">遇到NotOfficeXmlFileException</a>
                        <span class="text-muted">flying jiang</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%82%E5%B8%B8/1.htm">异常</a><a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a>
                        <div>org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException:Novalidentriesorcontentsfound,thisisnotavalidOOXML(OfficeOpenXML)file这个异常通常发生在你尝试使用ApachePOI库来读取或处理一个不是有效的OfficeOpenXML文件(如.xlsx或.docx文件)时</div>
                    </li>
                    <li><a href="/article/1898209570040377344.htm"
                           title="MySQL 将多行数据转换为一行数据" target="_blank">MySQL 将多行数据转换为一行数据</a>
                        <span class="text-muted">flying jiang</span>
<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/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>摘要:在MySQL中,如果你想要将某个属性的多个结果连接成一行显示(即,将多行数据转换为一行数据,通常是通过某种分隔符连接),你可以使用GROUP_CONCAT()函数。这个函数允许你将来自多个记录的列值连接成一个字符串结果。正文:在MySQL中,如果你想要将某个属性的多个结果连接成一行显示(即,将多行数据转换为一行数据,通常是通过某种分隔符连接),你可以使用GROUP_CONCAT()函数。这个</div>
                    </li>
                    <li><a href="/article/1898209442965549056.htm"
                           title="淘宝代购系统搭建攻略" target="_blank">淘宝代购系统搭建攻略</a>
                        <span class="text-muted">数据捕手19970108018</span>
<a class="tag" taget="_blank" href="/search/%E8%B7%A8%E5%A2%83%E7%8B%AC%E7%AB%8B%E7%AB%99%E7%9F%A5%E8%AF%86%E5%9C%B0%E5%9B%BE/1.htm">跨境独立站知识地图</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、引言在全球化电商浪潮的席卷下,消费者对商品的追求愈发多元,不再局限于本地市场所能提供的选择。淘宝,作为国内电商的领军平台,汇聚了来自世界各地琳琅满目的商品,成为众多消费者心仪的购物宝库。然而,地域隔阂、语言障碍以及复杂的平台规则,使得部分消费者难以直接在淘宝上顺利选购商品。淘宝代购业务顺势崛起,宛如一座沟通消费者与淘宝海量商品的桥梁,精准满足了特定消费群体的购物需求。对于创业者和技术开发者而言</div>
                    </li>
                    <li><a href="/article/1898209190225178624.htm"
                           title="抖音采集工具Gui版:高效无水印下载抖音视频的神器" target="_blank">抖音采集工具Gui版:高效无水印下载抖音视频的神器</a>
                        <span class="text-muted">东风西巷</span>
<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/%E8%BD%AF%E4%BB%B6%E9%9C%80%E6%B1%82/1.htm">软件需求</a>
                        <div>抖音采集工具Gui版是一款由52pojie论坛的@biqiang大神自制的功能强大的采集工具。它专为抖音视频下载设计,能够帮助用户轻松获取抖音平台上的各种视频资源,支持批量下载,极大地提升了下载效率。全面的资源采集支持采集抖音作品、Webp动态封面、短剧、喜欢、话题、音乐等多种内容。无论是热门视频还是小众作品,都能轻松下载。批量下载与高效管理用户可以批量下载指定作者的所有作品、单个视频、某话题下的</div>
                    </li>
                    <li><a href="/article/1898209190715912192.htm"
                           title="3.6手写数字识别项目" target="_blank">3.6手写数字识别项目</a>
                        <span class="text-muted">不要不开心了</span>
<a class="tag" taget="_blank" href="/search/pytorch/1.htm">pytorch</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/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/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a>
                        <div>今天的内容为手写数字识别项目1.数据准备:-使用`torchvision.datasets`加载MNIST数据集。-通过`transforms.Compose`对数据进行预处理,包括转换为张量和归一化。-使用`DataLoader`创建训练和测试数据集的生成器。2.可视化源数据:-使用`matplotlib`库可视化测试集中的部分图像,并显示其对应的真实标签。3.构建模型:-定义一个包含两个隐藏层</div>
                    </li>
                    <li><a href="/article/1898209187360468992.htm"
                           title="如何用Python爬取Google新闻" target="_blank">如何用Python爬取Google新闻</a>
                        <span class="text-muted">2501_90631432</span>
<a class="tag" taget="_blank" href="/search/%E8%B0%B7%E6%AD%8C/1.htm">谷歌</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</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%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>什么是Google新闻?Google新闻是Google推出的一项新闻聚合服务。它收集、整理和展示来自全球主要新闻网站的最新新闻报道。用户可以按关键词、主题、地区、发布来源等进行筛选,Google新闻算法会根据用户的兴趣和浏览习惯推荐个性化的新闻内容。Google新闻数据主要来自权威新闻机构、博客、政府公告等,因此它是获取全球实时信息的重要来源。你可以从Google新闻中获取哪些数据?新闻标题(ti</div>
                    </li>
                    <li><a href="/article/1898208935089860608.htm"
                           title="必备神器!熠点点・图片批量修改" target="_blank">必备神器!熠点点・图片批量修改</a>
                        <span class="text-muted">KJ-拾荒者</span>
<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/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/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/%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86/1.htm">图像处理</a>
                        <div>你是否也遇到过这样的场景?作为自媒体编辑,每天需要处理上百张配图,反复调整尺寸、修改格式、添加水印,机械化的操作挤占了创作时间;作为电商运营,商品主图的统一优化总要在不同软件间来回切换,稍不留神就会漏改某张图片;甚至普通用户整理旅行照片时,批量旋转、重命名等基础操作都要耗费半小时……这些琐碎却高频的图片处理需求,往往让人陷入「重复劳动」的泥潭。而「熠点点・图片批量修改」正是为解决这类痛点而生。化繁</div>
                    </li>
                    <li><a href="/article/1898208808476405760.htm"
                           title="云计算的特征" target="_blank">云计算的特征</a>
                        <span class="text-muted">帅维维</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>云计算通过将硬件资源以软件的方式整合为一个整体,然后再以软件的方式动态分配给应用,大大地提高了资源的使用率,并且还能够弹性扩容,极大地优化了工作效率。通过建设高规格的云数据中心,引入自动化调度技术,让数据存储更加集中,数据资产也就能够更加有效利用,也更加节能减排和易于维护。从各个维度都起到了降本增效的作用。五个主要特征:按需自助服务:消费者可以按需部署处理能力,如服务器时间和网络存储,而不需要与每</div>
                    </li>
                    <li><a href="/article/1898208804550537216.htm"
                           title="深度学习中N维数组的介绍" target="_blank">深度学习中N维数组的介绍</a>
                        <span class="text-muted">帅维维</span>
<a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>N维数组是机器学习和神经网络的主要数据结构。下面是N维数组的实例:0维数组(标量):通常表示一个类别。1维数组(向量):通常表示一个特征向量。二维数组(矩阵):通常表示一个样本--特征矩阵。三维矩阵:通常表示RGB图片(宽*高*通道)。四维矩阵:通常表示一个RGB图片批量(批量大小*宽*高*通道)。五维矩阵:通常表示一个视频批量(批量大小*时间*宽*高*通道)。</div>
                    </li>
                    <li><a href="/article/1898208552116350976.htm"
                           title="python 面向对象(类和对象)(详细版)" target="_blank">python 面向对象(类和对象)(详细版)</a>
                        <span class="text-muted">帅维维</span>
<a class="tag" taget="_blank" href="/search/python%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/1.htm">python面向对象</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>学习任务1.理解面向过程编程和面向对象编程思想2.明确类和对象的关系,会独立设计和使用类3.会使用类创建对象,并添加属性4.掌握类的属性和方法5.掌握构造方法和析构方法的使用重点1.self的使用2.构造方法和析构方法3.类属性和实例属性4.方法的重载引入面向过程:先分析解决问题的步骤,使用函数把这些步骤以此实现,使用的时候需要逐个调用函数。面向对象:把解决问题的事物分为多个对象,对象具备解决问题</div>
                    </li>
                    <li><a href="/article/1898208425679056896.htm"
                           title="想知道的都有!大模型的定义、基本架构、训练、经典代表、应用和挑战全解析" target="_blank">想知道的都有!大模型的定义、基本架构、训练、经典代表、应用和挑战全解析</a>
                        <span class="text-muted">和老莫一起学AI</span>
<a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/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/ai/1.htm">ai</a><a class="tag" taget="_blank" href="/search/%E8%BD%AC%E8%A1%8C/1.htm">转行</a>
                        <div>导读都2024年了,学习AI相关的人或多或少的听说过“大模型”。目前,大模型技术以其庞大的参数规模和卓越的性能,成为了推动行业进步的新引擎。本文将带您深入探索大模型的神秘世界,从其定义、基本原理、训练三步骤,到Prompt技术的巧妙应用,以及大模型在各行业的广泛应用和面临的挑战。无论您是AI领域的专业人士,还是对技术充满好奇的普通读者,本文都将为您提供一个全面、深入的大模型知识图谱。1、大模型的定</div>
                    </li>
                    <li><a href="/article/1898207544006995968.htm"
                           title="C语言基础知识五" target="_blank">C语言基础知识五</a>
                        <span class="text-muted">七饭</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>初级指针指针是什么?在计算机科学之中,指针是编程语言之中的一个对象,利用地址,它的值直接指向存在电脑存储器之中的另一个地方的值,由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,因此将地址信息形象化的称为指针,意思是通过它能找到以它为地址的内存单元在32位机器之中,通电之后会产生电信号,电信号有正电和负电,转化为数字信号后就是32位0和1组成的数字序列,在这之中产生的编号就是内存单元的</div>
                    </li>
                    <li><a href="/article/1898206912336424960.htm"
                           title="显式 GC 的使用:留与去,如何选择?" target="_blank">显式 GC 的使用:留与去,如何选择?</a>
                        <span class="text-muted">张彦峰ZYF</span>
<a class="tag" taget="_blank" href="/search/JVM%E7%9B%B8%E5%85%B3%E7%9F%A5%E8%AF%86%E6%80%BB%E7%BB%93/1.htm">JVM相关知识总结</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a>
                        <div>目录一、什么是显式GC?(一)垃圾回收的基本原理(二)显式GC方法和行为1.System.gc()方法2.显式GC的行为(三)显式GC的使用场景与风险1.JVM如何处理显式GC2.显式GC的风险二、显式GC对性能的影响(一)全GC与STW1.FullGC是如何发生的?2.STW(Stop-the-World)现象3.FullGC的性能开销(二)对DirectByteBuffer的影响1.Direc</div>
                    </li>
                    <li><a href="/article/1898206658895605760.htm"
                           title="利用阿里云Atlas地区选择器与Plotly.js实现数据可视化与交互" target="_blank">利用阿里云Atlas地区选择器与Plotly.js实现数据可视化与交互</a>
                        <span class="text-muted">源代码杀手</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8/1.htm">开发工具使用</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E4%BA%91/1.htm">阿里云</a><a class="tag" taget="_blank" href="/search/plotly/1.htm">plotly</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>在数据科学与可视化领域,交互式图表和地图应用越来越成为数据分析和展示的重要手段。本文将介绍如何结合阿里云Atlas地区选择器与Plotly.js,创建动态交互式的数据可视化应用。一、阿里云Atlas地区选择器简介阿里云Atlas是阿里云的一款数据可视化产品,提供了强大的地图与地区选择功能。你可以使用阿里云Atlas地区选择器轻松选择需要展示的数据所在地区。阿里云Atlas的地区选择器提供了一个简洁</div>
                    </li>
                    <li><a href="/article/1898206028965670912.htm"
                           title="【Python运维】实现高效的自动化备份与恢复:Python脚本从入门到实践" target="_blank">【Python运维】实现高效的自动化备份与恢复:Python脚本从入门到实践</a>
                        <span class="text-muted">蒙娜丽宁</span>
<a class="tag" taget="_blank" href="/search/Python%E6%9D%82%E8%B0%88/1.htm">Python杂谈</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E5%8C%96/1.htm">自动化</a>
                        <div>《PythonOpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界在信息化时代,数据备份和恢复的有效性对企业和个人来说至关重要。本文将带领读者深入了解如何使用Python编写自动化备份与恢复脚本,确保重要数据的安全。本篇文章涵盖了文件系统的备份、MySQL数据库的备份与恢复、定期任务的自动化调度等内容。我们将通过大量的</div>
                    </li>
                    <li><a href="/article/1898205902633234432.htm"
                           title="c++ 类成员指针及其与`std::bind`交互使用的简单说明" target="_blank">c++ 类成员指针及其与`std::bind`交互使用的简单说明</a>
                        <span class="text-muted">JANGHIGH</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/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++类成员指针及其与`std::bind`交互使用的简单说明**一、类成员指针****1.指向成员变量的指针****2.指向成员函数的指针****二、类成员指针与`std::bind`的交互****1.绑定成员函数****2.绑定成员变量****3.绑定重载成员函数****4.绑定智能指针管理的对象****三、注意事项****四、完整示例****五、总结**关于C++类成员指针及其与std::b</div>
                    </li>
                    <li><a href="/article/1898205398293344256.htm"
                           title="服务器带宽堵塞会对网站访问产生哪些影响?" target="_blank">服务器带宽堵塞会对网站访问产生哪些影响?</a>
                        <span class="text-muted">Jtti</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>服务器带宽堵塞会对网站访问产生一系列负面影响,具体包括以下几个方面:1.网站加载速度变慢页面打开时间延长:服务器带宽被占满后,网站的数据传输变慢,导致网页加载时间增加,特别是涉及图片、视频、CSS、JS文件等较大资源时更加明显。TTFB(首字节时间)增加:服务器响应延迟变大,用户在访问网站时需要更长时间才能收到服务器的第一个数据包。表现:用户打开网页时,浏览器可能会长时间停留在“正在加载...”状</div>
                    </li>
                    <li><a href="/article/1898204391031238656.htm"
                           title="5人3小时复刻Manus?开源OpenManus项目全解剖,我的DeepSeek股票报告这样诞生" target="_blank">5人3小时复刻Manus?开源OpenManus项目全解剖,我的DeepSeek股票报告这样诞生</a>
                        <span class="text-muted">大F的智能小课</span>
<a class="tag" taget="_blank" href="/search/DeepSeek%E6%8A%80%E6%9C%AF%E8%A7%A3%E6%9E%90%E5%92%8C%E5%AE%9E%E6%88%98/1.htm">DeepSeek技术解析和实战</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E7%90%86%E8%AE%BA%E5%92%8C%E5%AE%9E%E6%88%98/1.htm">大模型理论和实战</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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>大家好,我是大F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。更多文章可关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能!OpenManus是什么1.项目背景OpenManus是由MetaGPT核心团队仅用3小时复刻而成的开源项目,其在GitHub上线首日便获得了10k+的星标(不过下午查看时仅4k)。该项目的核心价值主要体现在以下三个方面</div>
                    </li>
                    <li><a href="/article/1898201747424342016.htm"
                           title="解决 N: Missing Signed-By in the sources.list(5) entry for ‘http://mirrors.cloud.aliyuncs.com/ubuntu‘" target="_blank">解决 N: Missing Signed-By in the sources.list(5) entry for ‘http://mirrors.cloud.aliyuncs.com/ubuntu‘</a>
                        <span class="text-muted">星夜钢琴手</span>
<a class="tag" taget="_blank" href="/search/Ubuntu/1.htm">Ubuntu</a><a class="tag" taget="_blank" href="/search/apt-get/1.htm">apt-get</a><a class="tag" taget="_blank" href="/search/apt/1.htm">apt</a><a class="tag" taget="_blank" href="/search/apt-get/1.htm">apt-get</a><a class="tag" taget="_blank" href="/search/update/1.htm">update</a>
                        <div>如题,本文旨在解决N:MissingSigned-Byinthesources.list(5)entryfor'http://mirrors.cloud.aliyuncs.com/ubuntu'的报错问题。该报错出现于某次Ubuntu24.04.1LTS更新后,报错信息如图所示。参阅https://blog.csdn.net/qq_36433118/article/details/14332928</div>
                    </li>
                    <li><a href="/article/1898201620999630848.htm"
                           title="智能交通违章处理系统:AI赋能下的智慧交通解决方案" target="_blank">智能交通违章处理系统:AI赋能下的智慧交通解决方案</a>
                        <span class="text-muted">Echo_Wish</span>
<a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>友友们好!我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。在这个专栏中,你将会找到:●深入解析:每一篇文章都将深入剖析Python的高级概念和应用,包括但不限于数据分析、机器学习、Web开发</div>
                    </li>
                    <li><a href="/article/1898201495011127296.htm"
                           title="组件封装避坑指南:少写1000行重复代码的秘诀!" target="_blank">组件封装避坑指南:少写1000行重复代码的秘诀!</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%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/reactjs/1.htm">reactjs</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/excel/1.htm">excel</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a>
                        <div>一、前端组件的分类前端组件可以按照功能、用途、通用性等不同维度进行分类,主要包括以下几类:1.按功能分类展示型组件(UI组件)只负责UI视图渲染,不涉及业务逻辑例如:按钮(Button)、输入框(Input)、表单(Form)、卡片(Card)等业务逻辑组件具有特定业务逻辑,通常和接口交互例如:用户列表(UserList)、订单管理(OrderTable)等功能组件(工具类组件)提供功能性封装,通</div>
                    </li>
                    <li><a href="/article/1898201241817772032.htm"
                           title="智能化知识管理:AI助力Java后端开发优化与创新!! 探讨未来AI开发趋势!!" target="_blank">智能化知识管理:AI助力Java后端开发优化与创新!! 探讨未来AI开发趋势!!</a>
                        <span class="text-muted">小南AI学院</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a>
                        <div>JAVA后端开发者利用AI优化知识管理的方法1.业务资料智能管理自动资料收集与分类利用AI爬虫自动收集项目相关文档和行业资料智能分类系统根据内容自动归类到适当知识领域提取关键业务术语并构建业务词汇表,统一团队认知上下文关联构建AI分析文档间关系,构建知识关联网络自动标记业务规则和关键决策点将非结构化会议记录转化为结构化业务知识2.需求智能管理多源需求提取从会议记录、邮件、产品文档中自动提取需求点识</div>
                    </li>
                    <li><a href="/article/1898201239234080768.htm"
                           title="Web3 的隐私保护机制:如何保障个人数据安全" target="_blank">Web3 的隐私保护机制:如何保障个人数据安全</a>
                        <span class="text-muted">清 晨</span>
<a class="tag" taget="_blank" href="/search/%E5%8F%8D%E4%BE%A6%E6%B5%8B%E6%8C%87%E7%BA%B9%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">反侦测指纹浏览器</a><a class="tag" taget="_blank" href="/search/%E7%A4%BE%E4%BA%A4%E5%AA%92%E4%BD%93/1.htm">社交媒体</a><a class="tag" taget="_blank" href="/search/web3/1.htm">web3</a><a class="tag" taget="_blank" href="/search/%E6%8C%87%E7%BA%B9%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">指纹浏览器</a><a class="tag" taget="_blank" href="/search/%E4%BA%92%E8%81%94%E7%BD%91/1.htm">互联网</a><a class="tag" taget="_blank" href="/search/%E8%B4%A6%E5%8F%B7%E5%AE%89%E5%85%A8/1.htm">账号安全</a>
                        <div>Web3的隐私保护机制:如何保障个人数据安全在这个信息爆炸的时代,我们正从Web2时代迈向Web3时代。Web3,也被称为去中心化的互联网,其核心理念是赋予用户更多的控制权和所有权,尤其是在个人数据方面。然而,随着数据隐私问题日益突出,如何在Web3中保护个人隐私成为了一个重要议题。本文将探讨Web3中的隐私保护机制,以及它们如何帮助保障个人数据安全。去中心化存储:数据安全的基石Web3的一个关键</div>
                    </li>
                    <li><a href="/article/1898201148154769408.htm"
                           title="VMware Fusion 13.6.3 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式" target="_blank">VMware Fusion 13.6.3 OEM BIOS 2.7 - 在 macOS 中运行 Windows 虚拟机的最佳方式</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/vmware/1.htm">vmware</a>
                        <div>VMwareFusion13.6.3OEMBIOS2.7-在macOS中运行Windows虚拟机的最佳方式VMwareFusion13原版App中集成OEMBIOS请访问原文链接:https://sysin.org/blog/vmware-fusion-13-oem/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org2025-03-04,13.6.3发布,同步更新。使用VMware</div>
                    </li>
                    <li><a href="/article/1898201011399487488.htm"
                           title="实现多har间跳转鸿蒙示例代码" target="_blank">实现多har间跳转鸿蒙示例代码</a>
                        <span class="text-muted"></span>

                        <div>本文原创发布在华为开发者社区。介绍本示例通过设计单独的路由模块和动态加载方法,解决一个Navigation组件下多har/hsp间路由跳转依赖耦合问题。实现多har间跳转源码链接效果预览使用说明进入应用,点击按钮可浏览不同页面之间跳转的效果。实现思路将路由功能抽取成单独的模块并以har包形式存在,命名为RouterModule。RouterModule内部对路由进行管理,对外暴露RouterMod</div>
                    </li>
                    <li><a href="/article/1898201014612324352.htm"
                           title="CentOS 6.X 配置防御 ddos 攻击 轻量级(已亲测)" target="_blank">CentOS 6.X 配置防御 ddos 攻击 轻量级(已亲测)</a>
                        <span class="text-muted"></span>

                        <div>我们可以使用netstat命令查看当前系统连接的状态,是否有受到DDOS攻击#netstat-ntu|awk'{print$5}'|cut-d:-f1|sort|uniq-c|sort-n前面是IP地址的请求数9183.32.67.17910121.35.228.194开始配置防御,版本:DDoS-Deflateversion0.6第一步:安装命令:#wgethttp://www.inetbase</div>
                    </li>
                    <li><a href="/article/1898200735053574144.htm"
                           title="Python基础教程 学习笔记 第九章 魔法方法,特性,迭代器" target="_blank">Python基础教程 学习笔记 第九章 魔法方法,特性,迭代器</a>
                        <span class="text-muted">只想开始</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>文章目录一,构造函数:\_\_init\_\_二,重写普通方法和特殊的构造函数拓展三,元素访问注意五,函数property5.1property特性5.2静态方法和类方法5.3\_\_getattr__、\_\_setattr__等方法注意六,迭代器iter6.1迭代器协议七,生成器7.1简单生成器7.2递归式生成器注意7.3通用生成器7.4生成器的方法拓展:7.5模拟生成器一,构造函数:__in</div>
                    </li>
                    <li><a href="/article/1898200722764263424.htm"
                           title="Intel 9代CPU i7 9700k+技嘉B360+华硕2070+NVME重装WIN7系统+跑分" target="_blank">Intel 9代CPU i7 9700k+技嘉B360+华硕2070+NVME重装WIN7系统+跑分</a>
                        <span class="text-muted">小鱼儿yr</span>
<a class="tag" taget="_blank" href="/search/%E9%87%8D%E8%A3%85%E7%B3%BB%E7%BB%9F/1.htm">重装系统</a><a class="tag" taget="_blank" href="/search/Intel/1.htm">Intel</a><a class="tag" taget="_blank" href="/search/9%E4%BB%A3CPU/1.htm">9代CPU</a><a class="tag" taget="_blank" href="/search/i7/1.htm">i7</a><a class="tag" taget="_blank" href="/search/9700/1.htm">9700</a><a class="tag" taget="_blank" href="/search/B360/1.htm">B360</a><a class="tag" taget="_blank" href="/search/%E9%87%8D%E8%A3%85WIN7%E7%B3%BB%E7%BB%9F/1.htm">重装WIN7系统</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E9%B1%BC%E5%84%BFyr%E7%B3%BB%E7%BB%9F/1.htm">小鱼儿yr系统</a>
                        <div>彻底告别B360+Intel9代CPU无法装WIN7的时代!B360主板+8代9代CPU想装WIN7的朋友,你们的福音来了!大家都知道现在市面上的H310,B360,Z390等等主板搭配的intel8代和9代CPU基本上都无法装WIN7系统,主要是因为官方没有提供USB驱动,导致鼠标键盘等USB接口设备无法使用,那么此篇实战教程将带你全程欣赏一下H310,B360,Z390等等主板装WIN7系统的</div>
                    </li>
                                <li><a href="/article/57.htm"
                                       title="多线程编程之join()方法" target="_blank">多线程编程之join()方法</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/JOIN/1.htm">JOIN</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a>
                                    <div>现实生活中,有些工作是需要团队中成员依次完成的,这就涉及到了一个顺序问题。现在有T1、T2、T3三个工人,如何保证T2在T1执行完后执行,T3在T2执行完后执行?问题分析:首先问题中有三个实体,T1、T2、T3, 因为是多线程编程,所以都要设计成线程类。关键是怎么保证线程能依次执行完呢?   
Java实现过程如下: 
public class T1 implements Runnabl</div>
                                </li>
                                <li><a href="/article/184.htm"
                                       title="java中switch的使用" target="_blank">java中switch的使用</a>
                                    <span class="text-muted">bingyingao</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/break/1.htm">break</a><a class="tag" taget="_blank" href="/search/continue/1.htm">continue</a>
                                    <div>java中的switch仅支持case条件仅支持int、enum两种类型。 
用enum的时候,不能直接写下列形式。 
 
 
switch (timeType) {
            case ProdtransTimeTypeEnum.DAILY:

                break;

            default:
                br</div>
                                </li>
                                <li><a href="/article/311.htm"
                                       title="hive having count 不能去重" target="_blank">hive having count 不能去重</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/%E5%8E%BB%E9%87%8D/1.htm">去重</a><a class="tag" taget="_blank" href="/search/having+count/1.htm">having count</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E6%95%B0/1.htm">计数</a>
                                    <div>hive在使用having count()是,不支持去重计数 
  
hive (default)> select imei from t_test_phonenum where ds=20150701 group by imei having count(distinct phone_num)>1 limit 10;  
FAILED: SemanticExcep</div>
                                </li>
                                <li><a href="/article/438.htm"
                                       title="WebSphere对JSP的缓存" target="_blank">WebSphere对JSP的缓存</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/WAS+JSP+%E7%BC%93%E5%AD%98/1.htm">WAS JSP 缓存</a>
                                    <div>      对于线网上的工程,更新JSP到WebSphere后,有时会出现修改的jsp没有起作用,特别是改变了某jsp的样式后,在页面中没看到效果,这主要就是由于websphere中缓存的缘故,这就要清除WebSphere中jsp缓存。要清除WebSphere中JSP的缓存,就要找到WAS安装后的根目录。 
       现服务</div>
                                </li>
                                <li><a href="/article/565.htm"
                                       title="设计模式总结" target="_blank">设计模式总结</a>
                                    <span class="text-muted">朱辉辉33</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>1.工厂模式 
  1.1 工厂方法模式 (由一个工厂类管理构造方法) 
     1.1.1普通工厂模式(一个工厂类中只有一个方法) 
     1.1.2多工厂模式(一个工厂类中有多个方法) 
     1.1.3静态工厂模式(将工厂类中的方法变成静态方法) 
&n</div>
                                </li>
                                <li><a href="/article/692.htm"
                                       title="实例:供应商管理报表需求调研报告" target="_blank">实例:供应商管理报表需求调研报告</a>
                                    <span class="text-muted">老A不折腾</span>
<a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/%E6%8A%A5%E8%A1%A8%E7%B3%BB%E7%BB%9F/1.htm">报表系统</a><a class="tag" taget="_blank" href="/search/%E6%8A%A5%E8%A1%A8%E8%BD%AF%E4%BB%B6/1.htm">报表软件</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8C%96%E9%80%89%E5%9E%8B/1.htm">信息化选型</a>
                                    <div>引言 
随着企业集团的生产规模扩张,为支撑全球供应链管理,对于供应商的管理和采购过程的监控已经不局限于简单的交付以及价格的管理,目前采购及供应商管理各个环节的操作分别在不同的系统下进行,而各个数据源都独立存在,无法提供统一的数据支持;因此,为了实现对于数据分析以提供采购决策,建立报表体系成为必须。 业务目标 
1、通过报表为采购决策提供数据分析与支撑 
2、对供应商进行综合评估以及管理,合理管理和</div>
                                </li>
                                <li><a href="/article/819.htm"
                                       title="mysql" target="_blank">mysql</a>
                                    <span class="text-muted">林鹤霄</span>

                                    <div>转载源:http://blog.sina.com.cn/s/blog_4f925fc30100rx5l.html 
mysql -uroot -p 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 
  
[root@centos var]# service mysql</div>
                                </li>
                                <li><a href="/article/946.htm"
                                       title="Linux下多线程堆栈查看工具(pstree、ps、pstack)" target="_blank">Linux下多线程堆栈查看工具(pstree、ps、pstack)</a>
                                    <span class="text-muted">aigo</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>原文:http://blog.csdn.net/yfkiss/article/details/6729364 
  
1. pstree 
pstree以树结构显示进程$ pstree -p work | grep adsshd(22669)---bash(22670)---ad_preprocess(4551)-+-{ad_preprocess}(4552)  &n</div>
                                </li>
                                <li><a href="/article/1073.htm"
                                       title="html input与textarea 值改变事件" target="_blank">html input与textarea 值改变事件</a>
                                    <span class="text-muted">alxw4616</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div>// 文本输入框(input) 文本域(textarea)值改变事件 
// onpropertychange(IE) oninput(w3c) 
$('input,textarea').on('propertychange input', function(event) { 
     console.log($(this).val()) 
}); 
  </div>
                                </li>
                                <li><a href="/article/1200.htm"
                                       title="String类的基本用法" target="_blank">String类的基本用法</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/String/1.htm">String</a>
                                    <div>  
字符串的用法; 
    // 根据字节数组创建字符串 
byte[] by = { 'a', 'b', 'c', 'd' };
String newByteString = new String(by); 
  
  
    1,length()  获取字符串的长度 
  
  &nbs</div>
                                </li>
                                <li><a href="/article/1327.htm"
                                       title="JDK1.5 Semaphore实例" target="_blank">JDK1.5 Semaphore实例</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a><a class="tag" taget="_blank" href="/search/Semaphore/1.htm">Semaphore</a>
                                    <div>Semaphore类 
       一个计数信号量。从概念上讲,信号量维护了一个许可集合。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。 
S</div>
                                </li>
                                <li><a href="/article/1454.htm"
                                       title="使用GZip来压缩传输量" target="_blank">使用GZip来压缩传输量</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/GZip/1.htm">GZip</a>
                                    <div>        启动GZip压缩要用到一个开源的Filter:PJL Compressing Filter。这个Filter自1.5.0开始该工程开始构建于JDK5.0,因此在JDK1.4环境下只能使用1.4.6。 
        PJL Compressi</div>
                                </li>
                                <li><a href="/article/1581.htm"
                                       title="【Java范型三】Java范型详解之范型类型通配符" target="_blank">【Java范型三】Java范型详解之范型类型通配符</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>  
  
定义如下一个简单的范型类, 
  
package com.tom.lang.generics;

public class Generics<T> {
    private T value;
    public Generics(T  value) {
        this.value = value;
    }
} </div>
                                </li>
                                <li><a href="/article/1708.htm"
                                       title="【Hadoop十二】HDFS常用命令" target="_blank">【Hadoop十二】HDFS常用命令</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a>
                                    <div>1. 修改日志文件查看器 
  
hdfs oev -i edits_0000000000000000081-0000000000000000089 -o edits.xml
cat edits.xml 
  
修改日志文件转储为xml格式的edits.xml文件,其中每条RECORD就是一个操作事务日志 
  2. fsimage查看HDFS中的块信息等 
&nb</div>
                                </li>
                                <li><a href="/article/1835.htm"
                                       title="怎样区别nginx中rewrite时break和last" target="_blank">怎样区别nginx中rewrite时break和last</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>在使用nginx配置rewrite中经常会遇到有的地方用last并不能工作,换成break就可以,其中的原理是对于根目录的理解有所区别,按我的测试结果大致是这样的。  
 
 location /    
 {     
     proxy_pass http://test; </div>
                                </li>
                                <li><a href="/article/1962.htm"
                                       title="java-21.中兴面试题 输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 , 使其和等于 m" target="_blank">java-21.中兴面试题 输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 , 使其和等于 m</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class CombinationToSum {

	/*
第21 题
2010 年中兴面试题
编程求解:
输入两个整数 n 和 m ,从数列 1 , 2 , 3.......n 中随意取几个数 ,
使其和等</div>
                                </li>
                                <li><a href="/article/2089.htm"
                                       title="eclipse svn 帐号密码修改问题" target="_blank">eclipse svn 帐号密码修改问题</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/SVN/1.htm">SVN</a><a class="tag" taget="_blank" href="/search/svn%E5%B8%90%E5%8F%B7%E5%AF%86%E7%A0%81%E4%BF%AE%E6%94%B9/1.htm">svn帐号密码修改</a>
                                    <div>问题描述: 
     Eclipse的SVN插件Subclipse做得很好,在svn操作方面提供了很强大丰富的功能。但到目前为止,该插件对svn用户的概念极为淡薄,不但不能方便地切换用户,而且一旦用户的帐号、密码保存之后,就无法再变更了。 
解决思路: 
     删除subclipse记录的帐号、密码信息,重新输入</div>
                                </li>
                                <li><a href="/article/2216.htm"
                                       title="[电子商务]传统商务活动与互联网的结合" target="_blank">[电子商务]传统商务活动与互联网的结合</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%AD%90%E5%95%86%E5%8A%A1/1.htm">电子商务</a>
                                    <div> 
 
      某一个传统名牌产品,过去销售的地点就在某些特定的地区和阶层,现在进入互联网之后,用户的数量群突然扩大了无数倍,但是,这种产品潜在的劣势也被放大了无数倍,这种销售利润与经营风险同步放大的效应,在最近几年将会频繁出现。。。。 
 
       如何避免销售量和利润率增加的</div>
                                </li>
                                <li><a href="/article/2343.htm"
                                       title="java 解析 properties-使用 Properties-可以指定配置文件路径" target="_blank">java 解析 properties-使用 Properties-可以指定配置文件路径</a>
                                    <span class="text-muted">cuityang</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/properties/1.htm">properties</a>
                                    <div>#mq 
xdr.mq.url=tcp://192.168.100.15:61618; 
 
import java.io.IOException; 
import java.util.Properties; 
 
 
public class Test { 
 
 String conf = "log4j.properties"; 
 private static final</div>
                                </li>
                                <li><a href="/article/2470.htm"
                                       title="Java核心问题集锦" target="_blank">Java核心问题集锦</a>
                                    <span class="text-muted">darrenzhu</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80/1.htm">基础</a><a class="tag" taget="_blank" href="/search/%E6%A0%B8%E5%BF%83/1.htm">核心</a><a class="tag" taget="_blank" href="/search/%E9%9A%BE%E7%82%B9/1.htm">难点</a>
                                    <div>注意,这里的参考文章基本来自Effective Java和jdk源码 
 
 
1)ConcurrentModificationException 
当你用for each遍历一个list时,如果你在循环主体代码中修改list中的元素,将会得到这个Exception,解决的办法是: 
1)用listIterator, 它支持在遍历的过程中修改元素, 
2)不用listIterator, new一个</div>
                                </li>
                                <li><a href="/article/2724.htm"
                                       title="1分钟学会Markdown语法" target="_blank">1分钟学会Markdown语法</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/markdown/1.htm">markdown</a>
                                    <div>markdown 简明语法 基本符号 
 
 *,-,+ 3个符号效果都一样,这3个符号被称为 Markdown符号  
 空白行表示另起一个段落 
 `是表示inline代码,tab是用来标记 代码段,分别对应html的code,pre标签 
 换行 
 
 单一段落( <p>) 用一个空白行 
 连续两个空格 会变成一个 <br> 
 连续3个符号,然后是空行</div>
                                </li>
                                <li><a href="/article/2851.htm"
                                       title="Gson使用二(GsonBuilder)" target="_blank">Gson使用二(GsonBuilder)</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/gson/1.htm">gson</a><a class="tag" taget="_blank" href="/search/GsonBuilder/1.htm">GsonBuilder</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/2175473 一.概述 
    GsonBuilder用来定制java跟json之间的转换格式 
  二.基本使用 
实体测试类: 
温馨提示:默认情况下@Expose注解是不起作用的,除非你用GsonBuilder创建Gson的时候调用了GsonBuilder.excludeField</div>
                                </li>
                                <li><a href="/article/2978.htm"
                                       title="报ClassNotFoundException: Didn't find class "...Activity" on path: DexPathList" target="_blank">报ClassNotFoundException: Didn't find class "...Activity" on path: DexPathList</a>
                                    <span class="text-muted">gundumw100</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>有一个工程,本来运行是正常的,我想把它移植到另一台PC上,结果报: 
 
 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.mobovip.bgr/com.mobovip.bgr.MainActivity}: java.lang.ClassNotFoundException: Didn't f</div>
                                </li>
                                <li><a href="/article/3105.htm"
                                       title="JavaWeb之JSP指令" target="_blank">JavaWeb之JSP指令</a>
                                    <span class="text-muted">ihuning</span>
<a class="tag" taget="_blank" href="/search/javaweb/1.htm">javaweb</a>
                                    <div>  
要点 
  
JSP指令简介  
page指令  
include指令  
  
JSP指令简介  
  
JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。 
JSP指令的基本语法格式: 
<%@ 指令 属性名="</div>
                                </li>
                                <li><a href="/article/3232.htm"
                                       title="mac上编译FFmpeg跑ios" target="_blank">mac上编译FFmpeg跑ios</a>
                                    <span class="text-muted">啸笑天</span>
<a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a>
                                    <div>1、下载文件:https://github.com/libav/gas-preprocessor, 复制gas-preprocessor.pl到/usr/local/bin/下, 修改文件权限:chmod 777 /usr/local/bin/gas-preprocessor.pl 
2、安装yasm-1.2.0 
curl http://www.tortall.net/projects/yasm</div>
                                </li>
                                <li><a href="/article/3359.htm"
                                       title="sql mysql oracle中字符串连接" target="_blank">sql mysql oracle中字符串连接</a>
                                    <span class="text-muted">macroli</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/SQL+Server/1.htm">SQL Server</a>
                                    <div>有的时候,我们有需要将由不同栏位获得的资料串连在一起。每一种资料库都有提供方法来达到这个目的: 
 
 MySQL: CONCAT() 
 Oracle: CONCAT(), || 
 SQL Server: + 
 
CONCAT() 的语法如下: 
Mysql 中 CONCAT(字串1, 字串2, 字串3, ...): 将字串1、字串2、字串3,等字串连在一起。 
请注意,Oracle的CON</div>
                                </li>
                                <li><a href="/article/3486.htm"
                                       title="Git fatal: unab SSL certificate problem: unable to get local issuer ce rtificate" target="_blank">Git fatal: unab SSL certificate problem: unable to get local issuer ce rtificate</a>
                                    <span class="text-muted">qiaolevip</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/%E7%BA%B5%E8%A7%82%E5%8D%83%E8%B1%A1/1.htm">纵观千象</a>
                                    <div>// 报错如下: 
$ git pull origin master 
fatal: unable to access 'https://git.xxx.com/': SSL certificate problem: unable to get local issuer ce 
rtificate 
  
// 原因: 
由于git最新版默认使用ssl安全验证,但是我们是使用的git未设</div>
                                </li>
                                <li><a href="/article/3613.htm"
                                       title="windows命令行设置wifi" target="_blank">windows命令行设置wifi</a>
                                    <span class="text-muted">surfingll</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/wifi/1.htm">wifi</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0%E6%9C%ACwifi/1.htm">笔记本wifi</a>
                                    <div>还没有讨厌无线wifi的无尽广告么,还在耐心等待它慢慢启动么 
教你命令行设置 笔记本电脑wifi: 
 
1、开启wifi命令 
 

netsh wlan set hostednetwork mode=allow ssid=surf8 key=bb123456
netsh wlan start hostednetwork
pause
 
 其中pause是等待输入,可以去掉 
 
2、</div>
                                </li>
                                <li><a href="/article/3740.htm"
                                       title="Linux(Ubuntu)下安装sysv-rc-conf" target="_blank">Linux(Ubuntu)下安装sysv-rc-conf</a>
                                    <span class="text-muted">wmlJava</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/sysv-rc-conf/1.htm">sysv-rc-conf</a>
                                    <div>安装:sudo apt-get install sysv-rc-conf 使用:sudo sysv-rc-conf 
操作界面十分简洁,你可以用鼠标点击,也可以用键盘方向键定位,用空格键选择,用Ctrl+N翻下一页,用Ctrl+P翻上一页,用Q退出。 
  
  
背景知识 
sysv-rc-conf是一个强大的服务管理程序,群众的意见是sysv-rc-conf比chkconf</div>
                                </li>
                                <li><a href="/article/3867.htm"
                                       title="svn切换环境,重发布应用多了javaee标签前缀" target="_blank">svn切换环境,重发布应用多了javaee标签前缀</a>
                                    <span class="text-muted">zengshaotao</span>
<a class="tag" taget="_blank" href="/search/javaee/1.htm">javaee</a>
                                    <div>更换了开发环境,从杭州,改变到了上海。svn的地址肯定要切换的,切换之前需要将原svn自带的.svn文件信息删除,可手动删除,也可通过废弃原来的svn位置提示删除.svn时删除。 
  
然后就是按照最新的svn地址和规范建立相关的目录信息,再将原来的纯代码信息上传到新的环境。然后再重新检出,这样每次修改后就可以看到哪些文件被修改过,这对于增量发布的规范特别有用。 
  
检出</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>