突袭HTML5之WebGL 3D概述

WebGL开启了网页3D渲染的新时代,它允许在canvas中直接渲染3D的内容,而不借助任何插件。WebGL同canvas 2D的API一样,都是通过脚本操纵对象,所以步骤也是基本相似:准备工作上下文,准备数据,在canvas中绘制对象并渲染。与2D不同的就是3D涉及的知识更多了,例如世界、光线、纹理、相机、矩阵等专业知识。WebGL有一个很好的中文教程,就是下面使用参考中的第一个链接,所以这里不再班门弄斧,后面的内容只是简单的总结一下学习的内容。

浏览器的支持

由于微软有自己的图形发展计划,一直不支持WebGL,所以IE目前除了安装插件外,是无法运行WebGL的。其他的主流浏览器如Chrome、FireFox、Safari、Opera等,都装上最新的版本就可以了。除了浏览器要装最新的外,还要保证显卡的驱动也是最新的。
装上这些以后,可以打开浏览器,输入下面的网址验证一下浏览器对WebGL的支持情况:http://webglreport.sourceforge.net/。

在正常安装以上浏览器之后还是不能运行WebGL,那你可以强制开启WebGL支持试一试。开启方法如下:

Chrome浏览器

我们需要为Chrome加入一些启动参数,以下具体操作步骤以Windows操作系统为例:找到Chrome浏览器的快捷方式,右键点击快捷方式,选择属性;在目标框内,chrome.exe后面的引号后面,加入以下内容:

--enable-webgl --ignore-gpu-blacklist --allow-file-access-from-files

点击确定后关闭Chrome,然后用此快捷方式启动Chrome浏览器。

几个参数的含义如下:

--enable-webgl的意思是开启WebGL支持;

--ignore-gpu-blacklist的意思是忽略GPU黑名单,也就是说有一些显卡GPU因为过于陈旧等原因,不建议运行WebGL,这个参数可以让浏览器忽略这个黑名单,强制运行WebGL;

--allow-file-access-from-files的意思是允许从本地载入资源,如果你不是WebGL的开发者,不需要开发调试WebGL,只是想要看一下WebGL的Demo,那你可以不添加这个参数。

Firefox浏览器

Firefox的用户请在浏览器的地址栏输入“about:config”,回车,然后在过滤器(filter)中搜索“webgl”,将webgl.force-enabled设置为true;将webgl.disabled设置为false;在过滤器(filter)中搜索“security.fileuri.strict_origin_policy”,将security.fileuri.strict_origin_policy设置为false;然后关闭目前开启的所有Firefox窗口,重新启动Firefox。

前两个设置是强制开启WebGL支持,最后一个security.fileuri.strict_origin_policy的设置是允许从本地载入资源,如果你不是WebGL的开发者,不需要开发调试WebGL,只是想要看一下WebGL的Demo,那你可以不设置此项。

Safari浏览器

在菜单中找到“属性”→“高级”,选中“显示开发菜单”,然后到“开发”菜单,选中“开启WebGL”。

开发步骤

下面的代码只是简单总结一下相关的概念,它来源于参考中的中文教程,涉及较多的3D方面的知识。感兴趣的同学直接可以跳到实用参考中的中文教程中学习,比我这里讲解的要详细和准确的多。凑热闹的同学简单看看就可以了,不用深究每一行代码的含义。

准备工作

这个不用说了,就是在页面上添加一个canvas元素作为渲染的容器。例如:

 

  
    Your browser doesn't appear to support the HTML5 canvas element.
  

下面就是正式开始写脚本的时候了,首先看一下程序入口以及整体结构:

 
function start() {
    var canvas = document.getElementById("glcanvas");  
    initGL(canvas);        
    initShaders();        
    initBuffers(); 
       
    gl.clearColor(0.0, 0.0, 0.0, 1.0);        
    gl.enable(gl.DEPTH_TEST); 
       
    drawScene();    
} 

这里的几个方法代表了典型的WebGL的绘制步骤:

步骤一:初始化WebGL工作环境 - initGL

这个方法的代码如下:

 
var gl;    
function initGL(canvas) {  
  gl=null;      
  try {
    // Try to grab the standard context. If it fails, fallback to experimental.
    gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
  }
  catch(e) {}

  // If we don't have a GL context, give up now
  if (!gl) {
    alert("Unable to initialize WebGL. Your browser may not support it.");
  }
} 

这个方法很简单,就是获取WebGL的绘制环境,需要把参数"webgl"传给canvas.getContext方法就行了,但是由于目前WebGL的标准没有最终定型,所以实验阶段用的参数都是"experimental-webgl"。当然你直接去调用canvas.getContext("experimental-webgl")也是可以的,等标准定下以后,你再修改一个代码。

步骤二:初始化着色器Shaders - initShaders

着色器Shader概念比较简单,说白了就是显卡运算指令。构造3D场景需要进行大量的颜色、位置等等信息的计算,如果这些计算由软件执行的话,速度会很慢。所以把这些运算让显卡去计算,速度就很快;如何去执行这些计算,就是由着色器指定的。着色器代码是用一种叫做GLSL的着色器语言编写的,这个我们不去讲述这个语言了。

着色器可以在html中定义,在代码中使用。当然了你在程序中用一个字符串去定义着色器也是一样的。

下面先看定义的部分:

 

这里有两个着色器:面着色器和顶点着色器。

关于这两个着色器,这里有必要说明一下,计算机中的3D模型基本都是由点结合三角面片去描述的,顶点着色器就是去处理这些点的数据,而面着色器就是通过插值的方式,去处理三角面片上点的数据。

上面定义的顶点着色器就定义了顶点的位置和颜色计算方式;而面着色器定义了插值点的颜色计算方式。实际的应用场景中,还会涉及到在着色器中处理光线等效果。

定义了着色器,在程序中就可以查找到它们并可以去使用:

 
    var shaderProgram;

    function initShaders() {
        var fragmentShader = getShader(gl, "shader-fs");
        var vertexShader = getShader(gl, "shader-vs");

        shaderProgram = gl.createProgram();
        gl.attachShader(shaderProgram, vertexShader);
        gl.attachShader(shaderProgram, fragmentShader);
        gl.linkProgram(shaderProgram);

        if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) {
            alert("Could not initialise shaders");
        }

        gl.useProgram(shaderProgram);

        shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition");
        gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute);

        shaderProgram.vertexColorAttribute = gl.getAttribLocation(shaderProgram, "aVertexColor");
        gl.enableVertexAttribArray(shaderProgram.vertexColorAttribute);

        shaderProgram.pMatrixUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
        shaderProgram.mvMatrixUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix");
    }

着色器是有了,但是怎么让显卡去执行,Program就是这种桥梁,它是WebGL原生的二进制码,它的作用基本上就是让显卡运行着色器代码去渲染指定的模型数据。
这里还用到一个辅助方法getShader,这个方法就是遍历html文档,查找着色器的定义,拿到定义后创建着色器,这里就不细说了:

 
function getShader(gl, id) {
    var shaderScript, theSource, currentChild, shader;
    
    shaderScript = document.getElementById(id);    
    if (!shaderScript) {
        return null;
    }
    
    theSource = "";
    currentChild = shaderScript.firstChild;    
    while(currentChild) {
        if (currentChild.nodeType == currentChild.TEXT_NODE) {
            theSource += currentChild.textContent;
        }
        
        currentChild = currentChild.nextSibling;
    }
    if (shaderScript.type == "x-shader/x-fragment") {
      shader = gl.createShader(gl.FRAGMENT_SHADER);
    } else if (shaderScript.type == "x-shader/x-vertex") {
      shader = gl.createShader(gl.VERTEX_SHADER);
    } else {
     // Unknown shader type
     return null;
    }
   gl.shaderSource(shader, theSource);
    
   // Compile the shader program
   gl.compileShader(shader);  
    
   // See if it compiled successfully
   if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {  
      alert("An error occurred compiling the shaders: " + gl.getShaderInfoLog(shader));  
      return null;  
   }
    
   return shader;
} 

步骤三:创建/加载模型数据 - initBuffers

这些小例子中,模型数据基本都是直接生成的,实际的程序中,这些数据应该都是从模型加载得到的:

 
    var triangleVertexPositionBuffer;
    var triangleVertexColorBuffer;

    function initBuffers() {
        triangleVertexPositionBuffer = gl.createBuffer();
        gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);
        var vertices = [
             0.0,  1.0,  0.0,
            -1.0, -1.0,  0.0,
             1.0, -1.0,  0.0
        ];
        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
        triangleVertexPositionBuffer.itemSize = 3;
        triangleVertexPositionBuffer.numItems = 3;

        triangleVertexColorBuffer = gl.createBuffer();
        gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer);
        var colors = [
            1.0, 0.0, 0.0, 1.0,
            0.0, 1.0, 0.0, 1.0,
            0.0, 0.0, 1.0, 1.0
        ];
        gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(colors), gl.STATIC_DRAW);
        triangleVertexColorBuffer.itemSize = 4;
        triangleVertexColorBuffer.numItems = 3;
    } 

上面这段代码创建了三角形的顶点和顶点的颜色数据并放在缓冲区中。

步骤四:渲染 - drawScene

准备好了数据以后,交给WebGL去渲染就好了,这里调用的是gl.drawArrays方法。看代码:

 
    function drawScene() {
        gl.viewport(0, 0, gl.viewportWidth, gl.viewportHeight);
        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

        pMatrix = okMat4Proj(45.0, gl.viewportWidth / gl.viewportHeight, 0.1, 100.0);
        mvMatrix = okMat4Trans(-1.5, 0.0, -7.0);

        gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexPositionBuffer);
        gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, triangleVertexPositionBuffer.itemSize,
  gl.FLOAT, false, 0, 0);

        gl.bindBuffer(gl.ARRAY_BUFFER, triangleVertexColorBuffer);
        gl.vertexAttribPointer(shaderProgram.vertexColorAttribute, triangleVertexColorBuffer.itemSize, 
gl.FLOAT, false, 0, 0);

        setMatrixUniforms();
        gl.drawArrays(gl.TRIANGLES, 0, triangleVertexPositionBuffer.numItems);
    } 

这个函数首先设置了3D世界的背景为黑色,然后设置投影矩阵,设置待绘制对象的位置,然后根据缓冲中的顶点和颜色数据,绘制对象。这里还有一些生成投影矩阵和模型视图矩形的辅助方法(使用了Oak3D图形库中的矩阵辅助方法)与主题关系不大,这里就不详细解释了。

基本上流程就是这么多了,更复杂的纹理,光线等都是在这些基础上加入一些WegGL的特性实现的,这个请参看后面的中文教程,里面有详细的例子。

怎么样?使用原生的WebGL开发是一种什么感受?不仅需要有深厚的3D知识,还需要知道各种实现细节。WebGL这样做是为了灵活的适应各种应用场景,但是对于大多数像我这样非专业人士来说,很多细节是不需要知道的。这样就催生了各种辅助开发的类库,例如这节用到的Oak3D库(为了演示WebGL开发,例子中只用到了矩阵辅助方法)。下一节会介绍一个用的比较多的Three.js图形库。

前面我们看到了使用原生的WebGL API开发是多么的累,正因为如此,大量的WebGL框架被开发出来。使用这些框架,你可以快速创建需要的3D场景。这些框架不同程度的封装了创建3D场景的各种要素,例如场景,相机、模型、光照、材质等等;使用这些封装起来的对象,就可以很简单的创建需要的3D场景,这样你就只需要把更多精力放在逻辑方面就可以了。

目前并没有哪一个具有能压倒其他框架的优势,选择什么样的框,还是看个人喜好吧,不过选择框架的时候,个人觉得还是多看看框架最后的更新时间,选择稳定更新的框架能让你始终能使用上最新的特性,使你的程序稳定性更好。

下面的例子就使用了Three.js框架进行开发。

Three.js是一个比较全面的开源框架,它良好的封装的3D场景的各种要素。你可以用它来很容易的去创建摄像机,模型,光照,材质等等。你还可以选择不同的渲染器,Three.js提供了多种渲染方式,你可以选择使用canvas来渲染,也可以使用WebGL或者SVG来进行渲染。

此外,Three.js可以加载很多格式的3D文件,你的模型文件可以来自Blender,Maya,Chinema4D,3DMax等等。而且内置了比较基础的东西:(球体)Spheres, (飞机)Planes, (立方体) Cubes, (圆柱体)Cylinders。Three.js创建这些物体会非常的容易。

好了,不废话了,直接看代码:

 


 
  threeJSDemo title>
  <meta charset="utf-8">
  <style>
   body
   {
    margin:0px;
    background-color:#B0B0B0;
    overload:hidden;
   }
  </style>
 </head>
 <body>
  <script src="Three.js">script>
  <script>
   var camera,scene,renderer;
   var mesh;
   init();
   animate();
   
   function init(){
    scene = new THREE.Scene();
    camera = new THREE.PerspectiveCamera(70,window.innerWidth / window.innerHeight,1,1000);
    camera.position.z = 400;
    scene.add(camera);   
    geometry = new THREE.CubeGeometry(200,200,200);
    material = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true } );
    mesh = new THREE.Mesh(geometry,material);
    scene.add(mesh);
    renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth,window.innerHeight);
    document.body.appendChild(renderer.domElement);
   }  

   function animate() {
    requestAnimationFrame( animate );
    mesh.rotation.x += 0.05;
    mesh.rotation.y += 0.05;
    renderer.render( scene, camera );
   }
   </script>   
 </body>
</html> </pre> </td> 
         </tr> 
        </tbody> 
       </table><p class="artcon">这个是全部的代码,相对于前面使用WebGL的API的代码,这个简直就是太简单了。</p> <p class="artcon">代码很直观,就那么几步:</p> <p class="artcon">1. 创建场景scene。</p> <p class="artcon">2. 创建摄像机camera。</p> <p class="artcon">3. 创建/加载模型geometry。</p> <p class="artcon">4. 加载材质material。</p> <p class="artcon">5. 渲染模型对象mesh(是由geometry和material组成)。</p> <p class="artcon">6. 启用动画。</p> <p class="artcon">这是每个框架都提供的功能,使用不同的框架除了函数的名称可能不同以外,这些步骤基本都是一样的。下面的参考中列出了很多的框架学习文档,大家可以选几种学习一下。</p> <p class="artcon">针对模型数据,我还想说一点,因为JSON短小精悍,所以比较适合网络传输。未来它可能成为最适合WebGL的模型数据格式,所以很多的框架都开始支持JSON格式的模型数据。</p> </td> 
     </tr> 
    </tbody> 
   </table> 
   <table border="0" align="center"> 
    <tbody> 
     <tr> 
      <td width="34%" height="30"> </td> 
      <td height="30"> </td> 
      <td width="34%" height="30"> </td> 
     </tr> 
     <tr> 
      <td class="lettit" width="34%" height="30">相关文章</td> 
      <td class="lettit" height="30">相关文档</td> 
      <td class="lettit" width="34%" height="30">相关课程</td> 
     </tr> 
     <tr> 
      <td width="34%" height="25"> 
       <hr width="80%"></td> 
      <td width="34%" height="25"> 
       <hr width="80%"></td> 
      <td width="34%" height="25"> 
       <hr width="80%"></td> 
     </tr> 
     <tr> 
      <td width="34%" height="127"> 
       <table> 
        <tbody> 
         <tr> 
          <td width="386" height="25">深度解析:清理烂代码</td> 
         </tr> 
         <tr> 
          <td height="25">如何编写出拥抱变化的代码</td> 
         </tr> 
         <tr> 
          <td height="25">重构-使代码更简洁优美</td> 
         </tr> 
         <tr> 
          <td height="25">团队项目开发"编码规范"系列文章</td> 
         </tr> 
        </tbody> 
       </table></td> 
      <td height="127"> 
       <table> 
        <tbody> 
         <tr> 
          <td width="386" height="25">重构-改善既有代码的设计</td> 
         </tr> 
         <tr> 
          <td height="25">软件重构v2</td> 
         </tr> 
         <tr> 
          <td height="25">代码整洁之道</td> 
         </tr> 
         <tr> 
          <td height="25">高质量编程规范</td> 
         </tr> 
        </tbody> 
       </table></td> 
      <td width="34%" height="127"> </td> 
     </tr> 
    </tbody> 
   </table> 
  </div> 
  <p>转载于:https://www.cnblogs.com/justTheOne-bin/p/3664344.html</p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1714039075553488896"></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">你可能感兴趣的:(json,操作系统)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1903754829096873984.htm"
                           title="conda篇----在已有conda环境的基础上升级python包" target="_blank">conda篇----在已有conda环境的基础上升级python包</a>
                        <span class="text-muted">心惠天意</span>
<a class="tag" taget="_blank" href="/search/conda/1.htm">conda</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a>
                        <div>conda篇----在已有conda环境的基础上升级python包原先的python版本第一步:condaupdate--all(py11)[xxx@aivrs01xxx]$condaupdate--allCollectingpackagemetadata(current_repodata.json):doneSolvingenvironment:done==>WARNING:Anewervers</div>
                    </li>
                    <li><a href="/article/1903753308946886656.htm"
                           title="echart绘制海南地图时增加南海诸岛显示(现成geojson数据)" target="_blank">echart绘制海南地图时增加南海诸岛显示(现成geojson数据)</a>
                        <span class="text-muted">火火PM打怪中</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C%E4%B8%AD%E7%9A%84%E9%97%AE%E9%A2%98/1.htm">工作中的问题</a>
                        <div>使用场景:产品经理要求展示海南地图时,需要显示南海诸岛;问题:南海诸岛在中国地图上的显示,是echart在mapName=‘china’时,默认fix进去。但是海南省不会默认fix进去解决方案:将南海诸岛的geojson数据想办法弄到,将其直接放在海南省地图数据里面(将三沙市删除)处理结果:{"type":"FeatureCollection","features":[{"id":"460100"</div>
                    </li>
                    <li><a href="/article/1903728589107425280.htm"
                           title="Python 3.6.8 64位独立安装程序" target="_blank">Python 3.6.8 64位独立安装程序</a>
                        <span class="text-muted">霍娴果Myrtle</span>

                        <div>Python3.6.864位独立安装程序【下载地址】Python3.6.864位独立安装程序Python3.6.864位独立安装程序欢迎使用Python3.6.64位版安装包!本资源专门针对需要在64位操作系统上进行Python环境搭建的用户项目地址:https://gitcode.com/open-source-toolkit/98d19欢迎使用Python3.6.64位版安装包!本资源专门针对</div>
                    </li>
                    <li><a href="/article/1903724681467326464.htm"
                           title="Python 3.6.8 安装包下载" target="_blank">Python 3.6.8 安装包下载</a>
                        <span class="text-muted">何盼思Kit</span>

                        <div>Python3.6.8安装包下载【下载地址】Python3.6.8安装包下载Python3.6.8安装包下载本仓库提供适用于Windows操作系统的Python3.6.8安装包,支持x86和x64架构项目地址:https://gitcode.com/open-source-toolkit/d9647本仓库提供适用于Windows操作系统的Python3.6.8安装包,支持x86和x64架构。Pyt</div>
                    </li>
                    <li><a href="/article/1903721273368834048.htm"
                           title="5.进程基本概念" target="_blank">5.进程基本概念</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/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>5.进程基本概念**1.进程的基本概念****2.进程与程序的区别****3.进程的状态****4.进程调度****5.进程相关命令****6.进程创建与管理****7.进程的应用场景****8.练习与作业****9.进程的地址空间****10.进程的分类****11.进程的并发与并行****12.总结**1.进程的基本概念进程:进程是程序执行的过程,操作系统会为其分配内存资源和CPU调度。PCB</div>
                    </li>
                    <li><a href="/article/1903719760621793280.htm"
                           title="springBoot 和springCloud 版本对应关系" target="_blank">springBoot 和springCloud 版本对应关系</a>
                        <span class="text-muted">m0_74824894</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/1.htm">学习路线</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4/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/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/cloud/1.htm">cloud</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>请求下面链接:拿到的json数据,格式化https://start.spring.io/actuator/info[这里是图片001]https://start.spring.io/actuator/info云原生脚手架CloudNativeAppInitializer(aliyun.com)[这里是图片002]https://start.aliyun.com/idea阿里云脚手架插件:Aliba</div>
                    </li>
                    <li><a href="/article/1903707762102169600.htm"
                           title="SSE进阶详解" target="_blank">SSE进阶详解</a>
                        <span class="text-muted">GISer_Jinger</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/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>嗯,用户的问题涉及到SSE在处理富媒体文件、早期聊天应用选择SSE的原因,以及如何控制流式渲染频率。我需要根据提供的搜索结果来解答这些问题。首先,关于SSE传输富媒体文件的问题。根据搜索结果,SSE是基于文本的,比如网页2提到数据格式是文本或JSON。但用户问的是如何处理图片、视频等二进制数据。可能需要用Base64编码,这在网页5和6中提到了二进制数据的处理,但SSE本身不支持,所以需要转换。另</div>
                    </li>
                    <li><a href="/article/1903691625796792320.htm"
                           title="*如何在 Mac 上安装 macOS Sequoia 开发测试版*" target="_blank">*如何在 Mac 上安装 macOS Sequoia 开发测试版*</a>
                        <span class="text-muted">Topstip</span>
<a class="tag" taget="_blank" href="/search/macos/1.htm">macos</a>
                        <div>在WWDC主题演讲中,Apple概述了今年秋季会推出的macOSSequoia版本的新功能。它的亮点包括iPhone镜像、专门的密码应用,以及适用于M1及更高型号的AppleIntelligence功能。Apple现在发布了macOSSequoia的第一个开发者测试版。虽然操作系统更新要到今年秋季才会公开发布,但现在测试版让用户可以立即安装并运行预发布版本。(甚至不需要是Apple开发者)本文就教</div>
                    </li>
                    <li><a href="/article/1903678771907588096.htm"
                           title="linux+docker安装常见中间件+shell学习笔记" target="_blank">linux+docker安装常见中间件+shell学习笔记</a>
                        <span class="text-muted">芦屋花绘</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a>
                        <div>初始设置下载虚拟机软件:选择适合的虚拟机软件(如VirtualBox或VMware)。下载操作系统ISO映像文件:选择并下载你想安装的Linux发行版(例如Ubuntu、CentOS等)的ISO文件。ISO映像文件:是包含了完整光盘内容的文件,包含引导记录、文件系统、数据文件和目录结构。导入ISO文件到虚拟机,并进行相关配置,如分配内存、硬盘空间等。了解基本linuxLinux常见目录及其用途Li</div>
                    </li>
                    <li><a href="/article/1903676879714447360.htm"
                           title="文件系统(File System — FS)" target="_blank">文件系统(File System — FS)</a>
                        <span class="text-muted">夏L.</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>概念文件系统是Linux内部用来管理磁盘上文件的一套系统,主要体现在文件的存取、查找功能(本身是一套软件,对磁盘上存放的文件进行管理)。内核(Kernel)内核是操作系统内部最核心的软件。查看内核版本uname-r内核作用对CPU进行调度管理对内存进行分配管理对进程进行管理对文件系统进行管理对其他硬件进行管理内核中XFS文件系统存放地址/usr/lib/modules/3.10.0-1160.el</div>
                    </li>
                    <li><a href="/article/1903668310558437376.htm"
                           title="【Hive】-- hive 3.1.3 伪分布式部署(单节点)" target="_blank">【Hive】-- hive 3.1.3 伪分布式部署(单节点)</a>
                        <span class="text-muted">oo寻梦in记</span>
<a class="tag" taget="_blank" href="/search/Apache/1.htm">Apache</a><a class="tag" taget="_blank" href="/search/Paimon/1.htm">Paimon</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1%E9%83%A8%E7%BD%B2/1.htm">大数据服务部署</a><a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a>
                        <div>1、环境准备1.1、版本选择apachehive3.1.3apachehadoop3.1.0oraclejdk1.8mysql8.0.15操作系统:Macos10.151.2、软件下载https://archive.apache.org/dist/hive/https://archive.apache.org/dist/hadoop/1.3、解压tar-zxvfapache-hive-4.0.0-</div>
                    </li>
                    <li><a href="/article/1903665788850597888.htm"
                           title="AI大模型训练教程" target="_blank">AI大模型训练教程</a>
                        <span class="text-muted">Small踢倒coffee_氕氘氚</span>
<a class="tag" taget="_blank" href="/search/python%E8%87%AA%E5%AD%A6/1.htm">python自学</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/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>1.引言随着人工智能技术的快速发展,大模型(如GPT-3、BERT等)在自然语言处理、计算机视觉等领域取得了显著的成果。训练一个大模型需要大量的计算资源、数据和专业知识。本教程将带你了解如何从零开始训练一个AI大模型。2.准备工作2.1硬件要求GPU:推荐使用NVIDIA的高性能GPU,如A100、V100等。内存:至少64GBRAM。存储:SSD存储,至少1TB。#2.2软件环境操作系统:Lin</div>
                    </li>
                    <li><a href="/article/1903654823987834880.htm"
                           title="golang jwt挖坑" target="_blank">golang jwt挖坑</a>
                        <span class="text-muted">qiang527052</span>
<a class="tag" taget="_blank" href="/search/golang%E4%B8%AA%E4%BA%BA%E7%AC%94%E8%AE%B0/1.htm">golang个人笔记</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/jwt/1.htm">jwt</a>
                        <div>golangjwt使用golangjwt使用中遇到的一个坑,特此记录。具体描述:因为公司需要,现有架构jwt生成token的代码是java实现的,然后现在在golang中需要对此token进行解析。java用到的jar包:io.jsonwebtoken.jjwt0.9.0golang用到的库:github.com/dgrijalva/jwt-gojava生成token测试代码如下:publicst</div>
                    </li>
                    <li><a href="/article/1903638681202257920.htm"
                           title="360 最新Android面试题及参考答案" target="_blank">360 最新Android面试题及参考答案</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/%E5%AE%89%E5%8D%93%E9%9D%A2%E7%BB%8F/1.htm">安卓面经</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%8D%93%E9%9D%A2%E8%AF%95/1.htm">安卓面试</a><a class="tag" taget="_blank" href="/search/dex%E7%BB%93%E6%9E%84/1.htm">dex结构</a><a class="tag" taget="_blank" href="/search/hook%E6%8A%80%E6%9C%AF/1.htm">hook技术</a><a class="tag" taget="_blank" href="/search/Binder/1.htm">Binder</a><a class="tag" taget="_blank" href="/search/aosp/1.htm">aosp</a>
                        <div>一个activity只能有一个进程么【对进程的理解】在Android中,一个Activity并不只能有一个进程。进程是操作系统进行资源分配和调度的一个独立单位。从原理上来说,Android系统允许开发者通过在AndroidManifest.xml文件中的标签设置android:process属性,来指定Activity运行在不同的进程中。例如,如果有一个对性能要求很高的多媒体播放Activity,</div>
                    </li>
                    <li><a href="/article/1903624685996797952.htm"
                           title="笔记本Win7系统无线网名称显示乱码解决方案" target="_blank">笔记本Win7系统无线网名称显示乱码解决方案</a>
                        <span class="text-muted">mmoo_python</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a>
                        <div>笔记本Win7系统无线网名称显示乱码解决方案在使用Windows7操作系统的笔记本电脑时,用户可能会遇到无线网络名称显示乱码的问题。这一问题不仅影响了用户识别无线网络的便利性,还可能阻碍正常的网络连接。本文将详细介绍解决这一问题的方法,帮助用户恢复无线网名称的正常显示。具体解决方法1.打开控制面板首先,我们需要进入Windows7的控制面板。可以通过点击开始菜单,然后在搜索框中输入“控制面板”来快</div>
                    </li>
                    <li><a href="/article/1903624685417984000.htm"
                           title="Win11显示不出WiFi列表?全面解决方案来了" target="_blank">Win11显示不出WiFi列表?全面解决方案来了</a>
                        <span class="text-muted">mmoo_python</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a>
                        <div>Win11显示不出WiFi列表?全面解决方案来了在使用Windows11操作系统时,连接WiFi网络无疑是日常工作中最基本也是最关键的需求之一。然而,不少用户却遇到了一个棘手的问题:WiFi列表无法显示,导致无法找到并连接可用的WiFi网络。这一问题不仅影响了用户的正常使用体验,还可能对工作和学习造成不小的困扰。本文将深入分析这一问题的可能原因,并提供多种有效的解决方法,帮助你轻松应对Win11显</div>
                    </li>
                    <li><a href="/article/1903599083893878784.htm"
                           title="Windows Docker Desktop 无法启动报错 Docker Desktop is shutting down 的可能解决办法" target="_blank">Windows Docker Desktop 无法启动报错 Docker Desktop is shutting down 的可能解决办法</a>
                        <span class="text-muted">Bruce-li__</span>
<a class="tag" taget="_blank" href="/search/Docker/1.htm">Docker</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>直接把整个AppData\Roaming\Docker目录删了,然后立刻就好了……这里还有一些其他的解决方案,Docker社区论坛也供参考:检查一下daemon.json配置文件是否有问题https://forums.docker.com/t/solved-docker-failed-to-start-docker-desktop-for-windows/106976</div>
                    </li>
                    <li><a href="/article/1903593658070921216.htm"
                           title="深入理解 JSON.stringify:优雅输出 JSON 数据" target="_blank">深入理解 JSON.stringify:优雅输出 JSON 数据</a>
                        <span class="text-muted">天天进步2015</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91/1.htm">前端开发</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a>
                        <div>在JavaScript开发中,JSON数据的处理是一项基础且关键的技能。JSON.stringify()方法作为将JavaScript对象转换为JSON字符串的标准工具,其功能远不止于简单的数据转换。本文将深入探讨JSON.stringify()的使用技巧、参数配置以及常见陷阱,帮助开发者更优雅地处理JSON数据输出。基础用法JSON.stringify()的基本语法如下:JSON.stringi</div>
                    </li>
                    <li><a href="/article/1903584956148412416.htm"
                           title="麒麟服务器操作系统Redis部署手册" target="_blank">麒麟服务器操作系统Redis部署手册</a>
                        <span class="text-muted">太极淘</span>
<a class="tag" taget="_blank" href="/search/%E9%BA%92%E9%BA%9F%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/1.htm">麒麟操作系统管理工具</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>软件简介Redis****介绍REmoteDIctionaryServer(Redis)是一个由SalvatoreSanfilippo写的key-value存储系统,是跨平台的非关系型数据库。Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的API。Redis通常被称为数据结构服务器,因为</div>
                    </li>
                    <li><a href="/article/1903584829790810112.htm"
                           title="麒麟服务器操作系统PostgreSQL环境部署手册" target="_blank">麒麟服务器操作系统PostgreSQL环境部署手册</a>
                        <span class="text-muted">太极淘</span>
<a class="tag" taget="_blank" href="/search/%E9%BA%92%E9%BA%9F%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7/1.htm">麒麟操作系统管理工具</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>软件简介PostgreSQL是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。ORDBMS(对象关系数据库系统)是面向对象技术与传统的关系数据库相结合的产物,查询处理是ORDBMS的重要组成部分,它的性能优劣将直接影响到DBMS的性能。软件环境操作系统环境操作系统版本操作系统架构银河麒麟服务器操作系统V10SP系列X86-64银河麒麟服务器操作系统V10SP系列ARM</div>
                    </li>
                    <li><a href="/article/1903583435612549120.htm"
                           title="在华为鲲鹏服务器银河麒麟V10操作系统中安装docker及docker-pose" target="_blank">在华为鲲鹏服务器银河麒麟V10操作系统中安装docker及docker-pose</a>
                        <span class="text-muted">qinfeng1991</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/eureka/1.htm">eureka</a>
                        <div>背景最近客户寄来几台为鲲鹏服务器,需要在上面安装docker及docker-compose以便运行我们的程序,跟常规的X86架构下安装docker和docker-compose稍微有些区别,特此记录。操作步骤0.系统版本查看[root@localhostcrcs-compile]#cat/etc/kylin-releaseKylinLinuxAdvancedServerreleaseV10(Lan</div>
                    </li>
                    <li><a href="/article/1903578001535201280.htm"
                           title="Linux信号处理详解:从基本概念到高级应用" target="_blank">Linux信号处理详解:从基本概念到高级应用</a>
                        <span class="text-muted">chian-ocean</span>
<a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E5%8F%B7%E5%A4%84%E7%90%86/1.htm">信号处理</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>个人主页:chian-ocean文章专栏-Linux前言:在Linux系统中,信号(Signal)是操作系统用来通知进程发生某些事件的一种机制。信号是一种软件中断机制,可以被进程用来响应特定的事件,如终止进程、暂停进程、重新加载配置等。信号机制是Unix及其衍生系统的核心功能之一什么是信号生活中的信号也可以理解为一种通过特定方式传递信息、指令或警告的方式。在日常生活中,信号无处不在,帮助我们理解周</div>
                    </li>
                    <li><a href="/article/1903576742497415168.htm"
                           title="Excel-to-JSON 2.1.0: Your Privacy-First Excel Add-in for JSON Conversion" target="_blank">Excel-to-JSON 2.1.0: Your Privacy-First Excel Add-in for JSON Conversion</a>
                        <span class="text-muted">wtsolutions</span>
<a class="tag" taget="_blank" href="/search/excel%E4%B8%8Ejson%E4%BA%92%E7%9B%B8%E8%BD%AC%E6%8D%A2/1.htm">excel与json互相转换</a><a class="tag" taget="_blank" href="/search/excel/1.htm">excel</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a>
                        <div>IntroductionExcel-to-JSONisapowerfulMicrosoftExceladd-inthatseamlesslyconvertsExceldataintoJSONformat.Version2.1.0bringsenhancedfeatureswhilemaintainingourcommitmenttodataprivacyandcross-platformacces</div>
                    </li>
                    <li><a href="/article/1903566393941487616.htm"
                           title="DM-密码含有特殊字符的登录方法" target="_blank">DM-密码含有特殊字符的登录方法</a>
                        <span class="text-muted">合作愉快:)</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>1.操作系统1.1WINDOWS系统(1)disql的关键字符,disql的要求对连接串的特殊字符需要使用双引号括起来”aaaa/aaaa”,操作系统的要求需要再在最外加双引号和转义”””aaaa/aaaa”””。例如:用户名为user01,密码为aaaa/aaaa,那么连接串要写成:disqluser01/”””aaaa/aaaa”””。(2)空格,需要使用双引号括起来作为一个整体(这是操作系统</div>
                    </li>
                    <li><a href="/article/1903565134912090112.htm"
                           title="Qt上位机编程命名规范-执行版" target="_blank">Qt上位机编程命名规范-执行版</a>
                        <span class="text-muted">有追求的菜鸟</span>
<a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>主要规范原则参考Qt上位机编程命名规范。1.文件/文件夹大小写分析考虑跨平台性,全小写是一种约定俗成的风格,在许多大型开源项目中(如Linux内核、Python标准库)被广泛使用。1.1.配合文件扩展名通常文件名小写配合小写扩展名(如.h,.cpp,.json),使整体风格统一:main.cppconfig.jsonutils.h1.2.文件夹和pri文件命名通常小写、下划线分开:control_</div>
                    </li>
                    <li><a href="/article/1903562103092998144.htm"
                           title="达梦数据库学习笔记" target="_blank">达梦数据库学习笔记</a>
                        <span class="text-muted">lwq979991632</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>达梦数据库学习资料一、操作系统安装1、配置信息CPU:4核心内存:4G网络:NAT2.安装包选择选择带GUI的服务器,勾选Java平台、KDE二、安装前准备1.数据库远程访问:关闭防火墙systemctlstopfirewalld(禁用)systemctldisablefirewalld(停止,关闭开机自启动)systemctlstatusfirewalld(查看状态)2.安装gcc包rpm-qa</div>
                    </li>
                    <li><a href="/article/1903550491518889984.htm"
                           title="springboot 项目如何提高并发量" target="_blank">springboot 项目如何提高并发量</a>
                        <span class="text-muted">LCY133</span>
<a class="tag" taget="_blank" href="/search/spring%E5%90%8E%E7%AB%AF/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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>提升基于SpringBoot的Web项目并发量需要从应用优化、数据库调优、缓存策略、异步处理、水平扩展等多方面综合改进。以下是具体方案和实践建议:一、应用层优化1.代码性能优化•避免阻塞操作:减少同步锁、长事务、大文件处理等耗时操作。•优化SQL查询:避免N+1查询,使用索引,减少全表扫描。•复用对象:避免频繁创建大对象(如JSON解析工具),使用线程安全对象池。2.线程池配置•调整Web服务器线</div>
                    </li>
                    <li><a href="/article/1903545067725975552.htm"
                           title="如何使用JSON输出解析器解析语言模型的输出" target="_blank">如何使用JSON输出解析器解析语言模型的输出</a>
                        <span class="text-muted">vaidfl</span>
<a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/easyui/1.htm">easyui</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>在现代AI应用中,让语言模型返回结构化的数据是一个重要的能力,特别是在需要进一步处理或集成的时候。本文将深入探讨如何利用JsonOutputParser来解析语言模型的JSON输出。技术背景介绍随着语言模型的普及,许多应用场景需要从自然语言处理任务中获取结构化的输出。针对这一需求,输出解析器应运而生,它能够帮助我们定义JSON模式,通过提示语言模型生成符合该模式的输出,并将其解析为JSON格式。核</div>
                    </li>
                    <li><a href="/article/1903543046184693760.htm"
                           title="docker学习整理" target="_blank">docker学习整理</a>
                        <span class="text-muted">24k小善</span>
<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/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a>
                        <div>一、Docker核心原理:像租房装修一样理解容器1.1容器vs虚拟机:合租vs买别墅虚拟机就像买别墅:每个别墅(虚拟机)自带独立地基(操作系统)、水电系统(系统资源),启动慢(分钟级)、资源占用大(GB级)[1][10]容器就像合租:大家共享小区基础设施(宿主机内核),但每个房间(容器)有自己的家具摆放(应用和依赖)。轻量(MB级)、秒级启动,还能随时搬走(迁移)[9]1.2镜像分层:乐高积木式打</div>
                    </li>
                    <li><a href="/article/1903539641546502144.htm"
                           title="常用的API设计都有哪些风格" target="_blank">常用的API设计都有哪些风格</a>
                        <span class="text-muted">PhilipJ0303</span>
<a class="tag" taget="_blank" href="/search/Java%E9%9D%A2%E8%AF%95/1.htm">Java面试</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/API%E8%AE%BE%E8%AE%A1/1.htm">API设计</a><a class="tag" taget="_blank" href="/search/%E6%8E%A5%E5%8F%A3%E8%AE%BE%E8%AE%A1/1.htm">接口设计</a>
                        <div>API设计是软件开发中非常重要的一部分,良好的API设计可以提高系统的可维护性、扩展性和易用性。常见的API设计风格主要有以下几种:1.RESTfulAPI特点:基于HTTP协议,使用标准的HTTP方法(GET、POST、PUT、DELETE等)来操作资源。资源通过URL定位,URL通常表示资源的层级关系。无状态,每次请求都包含足够的信息来完成请求。返回格式通常是JSON或XML。优点:简单易用,</div>
                    </li>
                                <li><a href="/article/110.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>Mark Roberge是HubSpot的首席财务官,在招聘销售职位时使用了大量数据分析。但是科技并没有挤走直觉。 
大家都知道数理学家实际上已经渗透到了各行各业。这些热衷数据的人们通过处理数据理解商业流程的各个方面,以重组弱点,增强优势。 
Mark Roberge是美国HubSpot公司的首席财务官,HubSpot公司在构架集客营销现象方面出过一份力——因此他也是一位数理学家。他使用数据分析 </div>
                                </li>
                                <li><a href="/article/237.htm"
                                       title="Haproxy+Keepalived高可用双机单活" target="_blank">Haproxy+Keepalived高可用双机单活</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a><a class="tag" taget="_blank" href="/search/keepalived/1.htm">keepalived</a><a class="tag" taget="_blank" href="/search/haproxy/1.htm">haproxy</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E5%8F%AF%E7%94%A8/1.htm">高可用</a>
                                    <div>我们的应用MyApp不支持集群,但要求双机单活(两台机器:master和slave): 
1.正常情况下,只有master启动MyApp并提供服务 
2.当master发生故障时,slave自动启动本机的MyApp,同时虚拟IP漂移至slave,保持对外提供服务的IP和端口不变 
 
F5据说也能满足上面的需求,但F5的通常用法都是双机双活,单活的话还没研究过 
 
 
服务器资源 
 
10.7</div>
                                </li>
                                <li><a href="/article/364.htm"
                                       title="eclipse编辑器中文乱码问题解决" target="_blank">eclipse编辑器中文乱码问题解决</a>
                                    <span class="text-muted">0624chenhong</span>
<a class="tag" taget="_blank" href="/search/eclipse%E4%B9%B1%E7%A0%81/1.htm">eclipse乱码</a>
                                    <div>使用Eclipse编辑文件经常出现中文乱码或者文件中有中文不能保存的问题,Eclipse提供了灵活的设置文件编码格式的选项,我们可以通过设置编码 格式解决乱码问题。在Eclipse可以从几个层面设置编码格式:Workspace、Project、Content Type、File 
本文以Eclipse 3.3(英文)为例加以说明: 
1. 设置Workspace的编码格式: 
Windows-&g</div>
                                </li>
                                <li><a href="/article/491.htm"
                                       title="基础篇--resources资源" target="_blank">基础篇--resources资源</a>
                                    <span class="text-muted">不懂事的小屁孩</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>最近一直在做java开发,偶尔敲点android代码,突然发现有些基础给忘记了,今天用半天时间温顾一下resources的资源。 
 
String.xml    字符串资源   涉及国际化问题  

http://www.2cto.com/kf/201302/190394.html   
 
string-array</div>
                                </li>
                                <li><a href="/article/618.htm"
                                       title="接上篇补上window平台自动上传证书文件的批处理问卷" target="_blank">接上篇补上window平台自动上传证书文件的批处理问卷</a>
                                    <span class="text-muted">酷的飞上天空</span>
<a class="tag" taget="_blank" href="/search/window/1.htm">window</a>
                                    <div>  
@echo off
: host=服务器证书域名或ip,需要和部署时服务器的域名或ip一致  ou=公司名称, o=公司名称
set host=localhost      
set ou=localhost        
set o=localhost         
set password=123456
set validity=3650

set salias=s</div>
                                </li>
                                <li><a href="/article/745.htm"
                                       title="企业物联网大潮涌动:如何做好准备?" target="_blank">企业物联网大潮涌动:如何做好准备?</a>
                                    <span class="text-muted">蓝儿唯美</span>
<a class="tag" taget="_blank" href="/search/%E4%BC%81%E4%B8%9A/1.htm">企业</a>
                                    <div>物联网的可能性也许是无限的。要找出架构师可以做好准备的领域然后利用日益连接的世界。 
尽管物联网(IoT)还很新,企业架构师现在也应该为一个连接更加紧密的未来做好计划,而不是跟上闸门被打开后的集成挑战。“问题不在于物联网正在进入哪些领域,而是哪些地方物联网没有在企业推进,” Gartner研究总监Mike Walker说。 
Gartner预测到2020年物联网设备安装量将达260亿,这些设备在全</div>
                                </li>
                                <li><a href="/article/872.htm"
                                       title="spring学习——数据库(mybatis持久化框架配置)" target="_blank">spring学习——数据库(mybatis持久化框架配置)</a>
                                    <span class="text-muted">a-john</span>
<a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a>
                                    <div>Spring提供了一组数据访问框架,集成了多种数据访问技术。无论是JDBC,iBATIS(mybatis)还是Hibernate,Spring都能够帮助消除持久化代码中单调枯燥的数据访问逻辑。可以依赖Spring来处理底层的数据访问。 
mybatis是一种Spring持久化框架,要使用mybatis,就要做好相应的配置: 
1,配置数据源。有很多数据源可以选择,如:DBCP,JDBC,aliba</div>
                                </li>
                                <li><a href="/article/999.htm"
                                       title="Java静态代理、动态代理实例" target="_blank">Java静态代理、动态代理实例</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/Java%E9%9D%99%E6%80%81%E4%BB%A3%E7%90%86/1.htm">Java静态代理</a>
                                    <div>  
采用Java代理模式,代理类通过调用委托类对象的方法,来提供特定的服务。委托类需要实现一个业务接口,代理类返回委托类的实例接口对象。 
按照代理类的创建时期,可以分为:静态代理和动态代理。 
所谓静态代理: 指程序员创建好代理类,编译时直接生成代理类的字节码文件。 
所谓动态代理: 在程序运行时,通过反射机制动态生成代理类。 
  
一、静态代理类实例: 
1、Serivce.ja</div>
                                </li>
                                <li><a href="/article/1126.htm"
                                       title="Struts1与Struts2的12点区别" target="_blank">Struts1与Struts2的12点区别</a>
                                    <span class="text-muted">asia007</span>
<a class="tag" taget="_blank" href="/search/Struts1%E4%B8%8EStruts2/1.htm">Struts1与Struts2</a>
                                    <div>1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类;Struts 1的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts 2提供一个ActionSupport基类去实现常用的接口。即使Action接口不是必须实现的,只有一个包含execute方法的P</div>
                                </li>
                                <li><a href="/article/1253.htm"
                                       title="初学者要多看看帮助文档 不要用js来写Jquery的代码" target="_blank">初学者要多看看帮助文档 不要用js来写Jquery的代码</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a>
                                    <div>解析json数据的时候需要将解析的数据写到文本框中,  出现了用js来写Jquery代码的问题; 
  
1, JQuery的赋值  有问题 
   代码如下: data.username 表示的是:  网易 
  
         $("#use</div>
                                </li>
                                <li><a href="/article/1380.htm"
                                       title="经理怎么和员工搞好关系和信任" target="_blank">经理怎么和员工搞好关系和信任</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E5%9B%A2%E9%98%9F/1.htm">团队</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/1.htm">项目管理</a><a class="tag" taget="_blank" href="/search/%E7%AE%A1%E7%90%86/1.htm">管理</a>
                                    <div>        产品经理应该有坚实的专业基础,这里的基础包括产品方向和产品策略的把握,包括设计,也包括对技术的理解和见识,对运营和市场的敏感,以及良好的沟通和协作能力。换言之,既然是产品经理,整个产品的方方面面都应该能摸得出门道。这也不懂那也不懂,如何让人信服?如何让自己懂?就是不断学习,不仅仅从书本中,更从平时和各种角色的沟通</div>
                                </li>
                                <li><a href="/article/1507.htm"
                                       title="如何为rich:tree不同类型节点设置右键菜单" target="_blank">如何为rich:tree不同类型节点设置右键菜单</a>
                                    <span class="text-muted">sunjing</span>
<a class="tag" taget="_blank" href="/search/contextMenu/1.htm">contextMenu</a><a class="tag" taget="_blank" href="/search/tree/1.htm">tree</a><a class="tag" taget="_blank" href="/search/Richfaces/1.htm">Richfaces</a>
                                    <div>组合使用target和targetSelector就可以啦,如下: <rich:tree id="ruleTree" value="#{treeAction.ruleTree}" var="node" nodeType="#{node.type}"
    selectionChangeListener=&qu</div>
                                </li>
                                <li><a href="/article/1634.htm"
                                       title="【Redis二】Redis2.8.17搭建主从复制环境" target="_blank">【Redis二】Redis2.8.17搭建主从复制环境</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a>
                                    <div>开始使用Redis2.8.17 
Redis第一篇在Redis2.4.5上搭建主从复制环境,对它的主从复制的工作机制,真正的惊呆了。不知道Redis2.8.17的主从复制机制是怎样的,Redis到了2.4.5这个版本,主从复制还做成那样,Impossible is nothing! 本篇把主从复制环境再搭一遍看看效果,这次在Unbuntu上用官方支持的版本。   Ubuntu上安装Red</div>
                                </li>
                                <li><a href="/article/1761.htm"
                                       title="JSONObject转换JSON--将Date转换为指定格式" target="_blank">JSONObject转换JSON--将Date转换为指定格式</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/JSONObject/1.htm">JSONObject</a>
                                    <div>项目中,经常会用JSONObject插件将JavaBean或List<JavaBean>转换为JSON格式的字符串,而JavaBean的属性有时候会有java.util.Date这个类型的时间对象,这时JSONObject默认会将Date属性转换成这样的格式: 
  
{"nanos":0,"time":-27076233600000,</div>
                                </li>
                                <li><a href="/article/1888.htm"
                                       title="JavaScript语言精粹读书笔记" target="_blank">JavaScript语言精粹读书笔记</a>
                                    <span class="text-muted">braveCS</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div>【经典用法】: 
  
//①定义新方法

Function .prototype.method=function(name, func){

              this.prototype[name]=func;

              return this;

}

 

//②给Object增加一个create方法,这个方法创建一个使用原对</div>
                                </li>
                                <li><a href="/article/2015.htm"
                                       title="编程之美-找符合条件的整数 用字符串来表示大整数避免溢出" target="_blank">编程之美-找符合条件的整数 用字符串来表示大整数避免溢出</a>
                                    <span class="text-muted">bylijinnan</span>
<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.LinkedList;

public class FindInteger {

	/**
	 *  编程之美 找符合条件的整数 用字符串来表示大整数避免溢出
	 *  题目:任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0
	 *  
	 *  假设当前正在搜索由0,1组成的K位十进制数</div>
                                </li>
                                <li><a href="/article/2142.htm"
                                       title="读书笔记" target="_blank">读书笔记</a>
                                    <span class="text-muted">chengxuyuancsdn</span>
<a class="tag" taget="_blank" href="/search/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/1.htm">读书笔记</a>
                                    <div>1、Struts访问资源 
2、把静态参数传递给一个动作 
3、<result>type属性 
4、s:iterator、s:if c:forEach 
5、StringBuilder和StringBuffer 
6、spring配置拦截器 
 
1、访问资源 
(1)通过ServletActionContext对象和实现ServletContextAware,ServletReque</div>
                                </li>
                                <li><a href="/article/2269.htm"
                                       title="[通讯与电力]光网城市建设的一些问题" target="_blank">[通讯与电力]光网城市建设的一些问题</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E9%97%AE%E9%A2%98/1.htm">问题</a>
                                    <div> 
      信号防护的问题,前面已经说过了,这里要说光网交换机与市电保障的关系 
 
      我们过去用的ADSL线路,因为是电话线,在小区和街道电力中断的情况下,只要在家里用笔记本电脑+蓄电池,连接ADSL,同样可以上网........ 
 
    </div>
                                </li>
                                <li><a href="/article/2396.htm"
                                       title="oracle 空间RESUMABLE" target="_blank">oracle 空间RESUMABLE</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E7%A9%BA%E9%97%B4%E4%B8%8D%E8%B6%B3/1.htm">空间不足</a><a class="tag" taget="_blank" href="/search/RESUMABLE/1.htm">RESUMABLE</a><a class="tag" taget="_blank" href="/search/%E9%94%99%E8%AF%AF%E6%8C%82%E8%B5%B7/1.htm">错误挂起</a>
                                    <div>空间RESUMABLE操作  转 
 
 
 
Oracle从9i开始引入这个功能,当出现空间不足等相关的错误时,Oracle可以不是马上返回错误信息,并回滚当前的操作,而是将操作挂起,直到挂起时间超过RESUMABLE TIMEOUT,或者空间不足的错误被解决。 
 
这一篇简单介绍空间RESUMABLE的例子。 
 
 
 
第一次碰到这个特性是在一次安装9i数据库的过程中,在利用D</div>
                                </li>
                                <li><a href="/article/2523.htm"
                                       title="重构第一次写的线程池" target="_blank">重构第一次写的线程池</a>
                                    <span class="text-muted">dieslrae</span>
<a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B%E6%B1%A0+python/1.htm">线程池 python</a>
                                    <div>最近没有什么学习欲望,修改之前的线程池的计划一直搁置,这几天比较闲,还是做了一次重构,由之前的2个类拆分为现在的4个类. 
 
1、首先是工作线程类:TaskThread,此类为一个工作线程,用于完成一个工作任务,提供等待(wait),继续(proceed),绑定任务(bindTask)等方法 
 

#!/usr/bin/env python
# -*- coding:utf8 -*-

</div>
                                </li>
                                <li><a href="/article/2650.htm"
                                       title="C语言学习六指针" target="_blank">C语言学习六指针</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a>
                                    <div>初识指针,简单示例程序: 
/*
	指针就是地址,地址就是指针
	地址就是内存单元的编号
	指针变量是存放地址的变量
	指针和指针变量是两个不同的概念
	但是要注意: 通常我们叙述时会把指针变量简称为指针,实际它们含义并不一样
*/
# include <stdio.h>

int main(void)
{
	int * p;	// p是变量的名字, int * </div>
                                </li>
                                <li><a href="/article/2777.htm"
                                       title="yii2 beforeSave afterSave beforeDelete" target="_blank">yii2 beforeSave afterSave beforeDelete</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/delete/1.htm">delete</a>
                                    <div>public function afterSave($insert, $changedAttributes)
{
    parent::afterSave($insert, $changedAttributes);
    if($insert) {
        //这里是新增数据
    } else {
        //这里是更新数据
    }  
} 
 </div>
                                </li>
                                <li><a href="/article/2904.htm"
                                       title="timertask" target="_blank">timertask</a>
                                    <span class="text-muted">shuizhaosi888</span>
<a class="tag" taget="_blank" href="/search/timertask/1.htm">timertask</a>
                                    <div>java.util.Timer timer = new java.util.Timer(true); 
// true 说明这个timer以daemon方式运行(优先级低, 
// 程序结束timer也自动结束),注意,javax.swing 
// 包中也有一个Timer类,如果import中用到swing包, 
// 要注意名字的冲突。 

TimerTask task = new</div>
                                </li>
                                <li><a href="/article/3031.htm"
                                       title="Spring Security(13)——session管理" target="_blank">Spring Security(13)——session管理</a>
                                    <span class="text-muted">234390216</span>
<a class="tag" taget="_blank" href="/search/session/1.htm">session</a><a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/%E6%94%BB%E5%87%BB%E4%BF%9D%E6%8A%A4/1.htm">攻击保护</a><a class="tag" taget="_blank" href="/search/%E8%B6%85%E6%97%B6/1.htm">超时</a>
                                    <div>session管理 
目录 
  
1.1     检测session超时 
1.2     concurrency-control 
1.3     session 固定攻击保护 
  
      </div>
                                </li>
                                <li><a href="/article/3158.htm"
                                       title="公司项目NODEJS实践0.3[ mongo / session ...]" target="_blank">公司项目NODEJS实践0.3[ mongo / session ...]</a>
                                    <span class="text-muted">逐行分析JS源代码</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/session/1.htm">session</a><a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a>
                                    <div>    
http://www.upopen.cn 
  
一、前言 
        书接上回,我们搭建了WEB服务端路由、模板等功能,完成了register 通过ajax与后端的通信,今天主要完成数据与mongodb的存取,实现注册 / 登录 /</div>
                                </li>
                                <li><a href="/article/3285.htm"
                                       title="pojo.vo.po.domain区别" target="_blank">pojo.vo.po.domain区别</a>
                                    <span class="text-muted">LiaoJuncai</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/VO/1.htm">VO</a><a class="tag" taget="_blank" href="/search/POJO/1.htm">POJO</a><a class="tag" taget="_blank" href="/search/javabean/1.htm">javabean</a><a class="tag" taget="_blank" href="/search/domain/1.htm">domain</a>
                                    <div>  POJO = "Plain Old Java Object",是MartinFowler等发明的一个术语,用来表示普通的Java对象,不是JavaBean, EntityBean 或者 SessionBean。POJO不但当任何特殊的角色,也不实现任何特殊的Java框架的接口如,EJB, JDBC等等。 
   
  即POJO是一个简单的普通的Java对象,它包含业务逻辑</div>
                                </li>
                                <li><a href="/article/3412.htm"
                                       title="Windows Error Code" target="_blank">Windows Error Code</a>
                                    <span class="text-muted">OhMyCC</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a>
                                    <div>0 操作成功完成. 
1 功能错误. 
2 系统找不到指定的文件. 
3 系统找不到指定的路径. 
4 系统无法打开文件. 
5 拒绝访问. 
6 句柄无效. 
7 存储控制块被损坏. 
8 存储空间不足, 无法处理此命令. 
9 存储控制块地址无效. 
10 环境错误. 
11 试图加载格式错误的程序. 
12 访问码无效. 
13 数据无效. 
14 存储器不足, 无法完成此操作. 
15 系</div>
                                </li>
                                <li><a href="/article/3539.htm"
                                       title="在storm集群环境下发布Topology" target="_blank">在storm集群环境下发布Topology</a>
                                    <span class="text-muted">roadrunners</span>
<a class="tag" taget="_blank" href="/search/%E9%9B%86%E7%BE%A4/1.htm">集群</a><a class="tag" taget="_blank" href="/search/storm/1.htm">storm</a><a class="tag" taget="_blank" href="/search/topology/1.htm">topology</a><a class="tag" taget="_blank" href="/search/spout/1.htm">spout</a><a class="tag" taget="_blank" href="/search/bolt/1.htm">bolt</a>
                                    <div>storm的topology设计和开发就略过了。本章主要来说说如何在storm的集群环境中,通过storm的管理命令来发布和管理集群中的topology。 
  
1、打包 
打包插件是使用maven提供的maven-shade-plugin,详细见maven-shade-plugin。 
<plugin>
	<groupId>org.apache.maven.</div>
                                </li>
                                <li><a href="/article/3666.htm"
                                       title="为什么不允许代码里出现“魔数”" target="_blank">为什么不允许代码里出现“魔数”</a>
                                    <span class="text-muted">tomcat_oracle</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>  在一个新项目中,我最先做的事情之一,就是建立使用诸如Checkstyle和Findbugs之类工具的准则。目的是制定一些代码规范,以及避免通过静态代码分析就能够检测到的bug。     迟早会有人给出案例说这样太离谱了。其中的一个案例是Checkstyle的魔数检查。它会对任何没有定义常量就使用的数字字面量给出警告,除了-1、0、1和2。     很多开发者在这个检查方面都有问题,这可以从结果</div>
                                </li>
                                <li><a href="/article/3793.htm"
                                       title="zoj 3511 Cake Robbery(线段树)" target="_blank">zoj 3511 Cake Robbery(线段树)</a>
                                    <span class="text-muted">阿尔萨斯</span>
<a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%AE%B5%E6%A0%91/1.htm">线段树</a>
                                    <div> 题目链接:zoj 3511 Cake Robbery 
 题目大意:就是有一个N边形的蛋糕,切M刀,从中挑选一块边数最多的,保证没有两条边重叠。 
 解题思路:有多少个顶点即为有多少条边,所以直接按照切刀切掉点的个数排序,然后用线段树维护剩下的还有哪些点。 
#include <cstdio>
#include <cstring>
#include <vector&</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>