突袭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/1902535442436255744.htm"
                           title="2023年中职网络安全——SQL注入测试(PL)解析" target="_blank">2023年中职网络安全——SQL注入测试(PL)解析</a>
                        <span class="text-muted">旺仔Sec</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E8%81%8C%E4%B8%9A%E6%8A%80%E8%83%BD%E5%A4%A7%E8%B5%9B%E4%BB%BB%E5%8A%A1%E8%A7%A3%E6%9E%90/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/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E8%B7%AF%E5%AE%89%E5%85%A8/1.htm">网路安全</a>
                        <div>SQL注入测试(PL)任务环境说明:服务器场景:Server2312服务器场景操作系统:未知(关闭链接)已知靶机存在网站系统,使用Nmap工具扫描靶机端口,并将网站服务的端口号作为Flag(形式:Flag字符串)值提交。访问网站/admin/pinglun.asp页面,此页面存在SQL注入漏洞,使用排序语句进行列数猜测,将语句作为Flag(形式:URL无空格)值提交。页面没有返回任何有用信息,尝试</div>
                    </li>
                    <li><a href="/article/1902514263755386880.htm"
                           title="UI自动化测试与性能测试" target="_blank">UI自动化测试与性能测试</a>
                        <span class="text-muted">scratchpads</span>
<a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99/1.htm">鸿蒙</a><a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a>
                        <div>在HarmonyOSNEXT应用的开发过程中,除了单元测试和集成测试外,UI自动化测试和性能测试也是不可或缺的环节。UI自动化测试用于确保应用的用户界面能够正确响应用户操作并提供预期的交互体验,而性能测试则评估应用在不同负载条件下的表现,确保其具备良好的响应速度和稳定性。本文将重点讨论如何在鸿蒙操作系统中进行UI自动化测试和性能测试,帮助开发人员提升应用质量。一、UI自动化测试UI自动化测试(UI</div>
                    </li>
                    <li><a href="/article/1902498992852365312.htm"
                           title="JVM八股文系列一:JVM基础知识" target="_blank">JVM八股文系列一:JVM基础知识</a>
                        <span class="text-muted">suikasa</span>
<a class="tag" taget="_blank" href="/search/JVM%E5%85%AB%E8%82%A1%E6%96%87/1.htm">JVM八股文</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a>
                        <div>一.JVM基础知识1.JVM从编译到执行1.1Java程序的执行过程一个Java程序,首先经过javac编译成.class文件,然后JVM将其加载到方法区,执行引擎将会执行这些字节码。执行时,会翻译成操作系统相关的函数。JVM作为.class文件的翻译存在,输入字节码,调用操作系统函数。过程如下:Java文件->编译器>字节码->JVM->机器码。JVM也就是Java虚拟机。它能识别.class后</div>
                    </li>
                    <li><a href="/article/1902498614823940096.htm"
                           title="基于Python拉取tiktok直播视频流,并将视频流切割成一定时长的视频片段" target="_blank">基于Python拉取tiktok直播视频流,并将视频流切割成一定时长的视频片段</a>
                        <span class="text-muted">sh_moranliunian</span>
<a class="tag" taget="_blank" href="/search/%E8%9C%98%E8%9B%9B%E4%BE%A0/1.htm">蜘蛛侠</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/1.htm">网络爬虫</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a>
                        <div>通过访问tiktok的直播间网页,从网页的script标签内部提取出关于该直播间的相关信息的JSON串,最终从JSON里提取出直播视频流的hls地址和直播间的其他信息。importsysimportrequestsimportjsonimporttimeimportsubprocessfromurllib.parseimporturlunparsefrombs4importBeautifulSou</div>
                    </li>
                    <li><a href="/article/1902496087143411712.htm"
                           title="《基于图神经网络的安卓应用检测系统设计与实现》开题报告" target="_blank">《基于图神经网络的安卓应用检测系统设计与实现》开题报告</a>
                        <span class="text-muted">大数据蟒行探索者</span>
<a class="tag" taget="_blank" href="/search/%E6%AF%95%E4%B8%9A%E8%AE%BA%E6%96%87%2F%E7%A0%94%E7%A9%B6%E6%8A%A5%E5%91%8A/1.htm">毕业论文/研究报告</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/android/1.htm">android</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/%E5%A4%A7%E6%95%B0%E6%8D%AE/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/python/1.htm">python</a>
                        <div>个人主页:@大数据蟒行探索者目录一、课题的研究目的和意义1.研究目的2.研究意义二、国内(外)研究现状及分析1.国内研究现状2.国外研究现状3.研究分析三、课题主要研究内容及可行性分析1.研究内容2.可行性分析四、研究方案和技术途径1.研究方案2.技术途径五、外部条件及解决办法1.开发环境2.解决办法六、主要参考文献一、课题的研究目的和意义1.研究目的随着智能手机的普及,安卓操作系统成为全球最为广</div>
                    </li>
                    <li><a href="/article/1902490531959730176.htm"
                           title="webpack初识(js逆向)" target="_blank">webpack初识(js逆向)</a>
                        <span class="text-muted">shix .</span>
<a class="tag" taget="_blank" href="/search/js%E9%80%86%E5%90%91%E7%9F%A5%E8%AF%86%E7%82%B9/1.htm">js逆向知识点</a><a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>webpack调试很多时候再看webpack的代码块的时候都一头雾水,不知道这个函数的具体逻辑在哪里,因为打包之后一些函数块是通过数字或者字符串进行调用的就像这样这里每个括号包括着的字符串都相当于一个函数,但是他们的逻辑在其他地方第二种情况:window["webpackJsonp"]大概长这样(=window["webpackJsonp"]||[]).push(["login"])作用就是把打包</div>
                    </li>
                    <li><a href="/article/1902460906852380672.htm"
                           title="USB摄像头数据获取——libuvc" target="_blank">USB摄像头数据获取——libuvc</a>
                        <span class="text-muted">jbjhzstsl</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>优点:跨平台支持:libuvc是一个跨平台的库,可以在不同的操作系统上使用,包括Linux、Windows和macOS等。简单易用:libuvc提供了一套简单易用的API,使得使用摄像头设备变得更加简便,尤其适合快速开发原型和简单应用。封装性好:libuvc封装了许多底层细节,如视频格式转换、缓冲区管理等,简化了开发过程。缺点:功能有限:相对于V4L2,libuvc提供的功能相对有限,可能无法满足</div>
                    </li>
                    <li><a href="/article/1902455239240380416.htm"
                           title="mysql5.6主从_MySQL5.6主从复制最佳实践" target="_blank">mysql5.6主从_MySQL5.6主从复制最佳实践</a>
                        <span class="text-muted">来B</span>
<a class="tag" taget="_blank" href="/search/mysql5.6%E4%B8%BB%E4%BB%8E/1.htm">mysql5.6主从</a>
                        <div>MySQL5.6主从复制的配置环境操作系统:CentOS-6.6-x86_64MySQL版本:mysql-5.6.26.tar.gz主节点IP:192.168.31.57主机名:edu-mysql-01从节点IP:192.168.31.59主机名:edu-mysql-02MySQL主从复制官方文档MySQL主从复制(也称A/B复制)的原理Master将数据改变记录到二进制日志(binarylog)</div>
                    </li>
                    <li><a href="/article/1902454860956102656.htm"
                           title="MySQL5.6主从复制最佳实践" target="_blank">MySQL5.6主从复制最佳实践</a>
                        <span class="text-muted">weixin_34252090</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/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">操作系统</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>2019独角兽企业重金招聘Python工程师标准>>>MySQL5.6主从复制最佳实践MySQL5.6主从复制的配置环境操作系统:CentOS-6.6-x86_64MySQL版本:mysql-5.6.26.tar.gz主节点IP:192.168.31.57主机名:edu-mysql-01从节点IP:192.168.31.59主机名:edu-mysql-02MySQL主从复制官方文档http://d</div>
                    </li>
                    <li><a href="/article/1902421046355619840.htm"
                           title="清晰易懂的Python安装与配置教程" target="_blank">清晰易懂的Python安装与配置教程</a>
                        <span class="text-muted">Tee xm</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>初学者也能看懂的Python安装与配置教程本教程将手把手教你安装Python,并配置国内镜像源和自定义依赖包缓存位置,即使你是零基础小白,也能轻松完成!一、准备工作操作系统:Windows10/11、macOS或Linux。下载工具:浏览器(推荐Chrome或Edge)。存储空间:至少预留500MB可用空间。二、安装Python1.下载Python访问Python官网下载页面:https://ww</div>
                    </li>
                    <li><a href="/article/1902398849809444864.htm"
                           title="清晰易懂的Java8安装教程" target="_blank">清晰易懂的Java8安装教程</a>
                        <span class="text-muted">Tee xm</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>小白也能看懂的Java8安装教程(JDK和JRE分目录安装)本教程将手把手教你如何在Windows系统上安装Java8(JDK1.8),并将JDK和JRE安装到不同的目录中,同时提供国内Java8下载源和方法。即使你是编程小白,也能轻松学会!一、准备工作操作系统:Windows10或更高版本。下载工具:一个浏览器(如Chrome、Edge)。存储空间:确保你的电脑有至少500MB的可用空间。二、下</div>
                    </li>
                    <li><a href="/article/1902394940302880768.htm"
                           title="Java 处理 json 格式数据解析为 csv 格式" target="_blank">Java 处理 json 格式数据解析为 csv 格式</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><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/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</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%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a>
                        <div>Java处理json格式数据解析为csv格式如果不使用JSON工具库,你可以手动解析JSON格式字符串并将其转换为CSV格式字符串。以下是一个简单示例,展示如何实现这一功能。示例代码下面的示例代码手动处理JSON字符串,将其转换为CSV格式字符串:/***接收JSON字符串,去掉开头和结尾的方括号,按对象划分。*通过extractKeys方法提取字段名,添加到CSV的第一行。*逐项解析JSON对象</div>
                    </li>
                    <li><a href="/article/1902393426729562112.htm"
                           title="代替Windows系统的最佳系统开发:开源、国产与跨平台的选择指南" target="_blank">代替Windows系统的最佳系统开发:开源、国产与跨平台的选择指南</a>
                        <span class="text-muted">夏末之花</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a>
                        <div>近年来,随着技术自主化和隐私安全需求的提升,越来越多的用户开始寻求Windows系统的替代方案。本文结合国内外热门操作系统及开发工具,分析其核心优势与适用场景,助你找到最适合的开发与日常使用平台。一、开源之王:Linux发行版1.Ubuntu与LinuxMint作为最受欢迎的Linux发行版,Ubuntu和LinuxMint以用户友好性著称,尤其适合从Windows迁移的用户。其内置的软件包管理器</div>
                    </li>
                    <li><a href="/article/1902383716580257792.htm"
                           title="信创系统安全优化与持续改进策略有哪些?" target="_blank">信创系统安全优化与持续改进策略有哪些?</a>
                        <span class="text-muted">weixin_37579147</span>
<a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E5%AE%89%E5%85%A8/1.htm">系统安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a>
                        <div>信创系统(信息技术应用创新系统)的安全优化与持续改进是保障国产化技术生态安全可靠运行的关键。以下从技术、管理、组织等多个维度提出系统性策略,并结合实际场景展开说明:一、技术层面的安全优化策略1.核心组件安全加固国产化组件漏洞管理:建立针对国产操作系统(如统信UOS、麒麟)、数据库(达梦、OceanBase)的漏洞扫描与修复机制,联合厂商建立漏洞情报共享平台。硬件层可信计算:采用基于国产芯片(如鲲鹏</div>
                    </li>
                    <li><a href="/article/1902381565296570368.htm"
                           title="【前端】面试八股文——输入URL到页面展示的过程" target="_blank">【前端】面试八股文——输入URL到页面展示的过程</a>
                        <span class="text-muted">帅比九日</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E5%85%AB%E8%82%A1%E6%96%87/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/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>【前端】面试八股文——输入URL到页面展示的过程1.DNS解析当用户在浏览器中输入URL并按下回车时,首先需要将域名转换为IP地址,这个过程称为DNS(域名系统)解析。具体步骤如下:浏览器缓存:浏览器首先检查自身缓存中是否有该域名的IP地址。操作系统缓存:如果浏览器缓存中没有找到,浏览器会向操作系统请求DNS信息。路由器缓存:如果操作系统缓存也没有找到,操作系统会向本地网络中的路由器请求DNS信息</div>
                    </li>
                    <li><a href="/article/1902380053258366976.htm"
                           title="信息收集综合" target="_blank">信息收集综合</a>
                        <span class="text-muted">只不过是胆小鬼罢了</span>
<a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86/1.htm">信息收集</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a>
                        <div>1《应用服务器资产分析与角色定性详解》在网络安全领域,对应用服务器的资产分析与角色定性是至关重要的工作。通过对服务器的操作系统、IP资产、端口资产等方面进行详细分析,可以更好地了解服务器的特性与用途,从而为网络安全防护提供有力支持。本文将从多个维度深入探讨应用服务器的资产分析与角色定性方法。一、操作系统分析1.Web大小写敏感性在分析应用服务器的操作系统时,Web大小写敏感性是一个重要的参考因素。</div>
                    </li>
                    <li><a href="/article/1902362272978759680.htm"
                           title="AIGC时代品牌突围战:10招玩转DeepSeek内容推荐(深度扩展版)" target="_blank">AIGC时代品牌突围战:10招玩转DeepSeek内容推荐(深度扩展版)</a>
                        <span class="text-muted">白雪讲堂</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><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a>
                        <div>一、认知革命:从SEO到GEO的生死迭代案例对比:传统SEO困境:某家电品牌2023年投入200万SEO优化,关键词排名TOP3但流量下降42%(SEMrush数据)GEO突破案例:某母婴品牌通过结构化数据改造,AI推荐量从日均300次飙升至1.2万次(来源:DeepSeek官方案例库)实战要点:内容形态改造:将产品参数表升级为JSON-LD格式(某手机品牌实现参数类问题100%引用)流量分配逻辑</div>
                    </li>
                    <li><a href="/article/1902354711311347712.htm"
                           title="计算机端口的作用" target="_blank">计算机端口的作用</a>
                        <span class="text-muted">U_p_</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%E7%9F%A5%E8%AF%86/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/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>计算机端口的作用在计算机网络中,端口(Port)的作用是用于区分不同的网络服务和应用进程,使得计算机能够在同一个IP地址上同时运行多个网络服务。1.端口的基本概念端口是软件层面的概念,用于标识同一设备上的不同网络服务。端口号是0~65535之间的整数,由操作系统管理。端口号通常与IP地址结合使用,形成IP:端口(如192.168.1.1:80)来标识特定的网络服务。2.端口的分类端口号范围:0-6</div>
                    </li>
                    <li><a href="/article/1902336816468520960.htm"
                           title="数据库 + Spring Boot + Vue 全栈交互逻辑详解" target="_blank">数据库 + Spring Boot + Vue 全栈交互逻辑详解</a>
                        <span class="text-muted">代码CC</span>
<a class="tag" taget="_blank" href="/search/Java%E9%A1%B9%E7%9B%AE-%E5%BC%80%E5%8F%91/1.htm">Java项目-开发</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/vue.js/1.htm">vue.js</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><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录整体架构概述技术栈说明数据库设计规范SpringBoot后端架构Vue前端架构完整交互流程关键技术实现细节安全与性能优化异常处理机制整体架构概述graphTDA[Vue前端]-->|HTTP请求|B(SpringBoot后端)B-->|JDBC/ORM|C[(数据库)]C-->|返回数据|BB-->|JSON响应|AA-->|状态管理|D[VuexStore]B-->|缓存|E[Redis]B</div>
                    </li>
                    <li><a href="/article/1902333538506698752.htm"
                           title="深入探索 dubbo-rpc-jsonrpc:跨语言服务调用的高效桥梁" target="_blank">深入探索 dubbo-rpc-jsonrpc:跨语言服务调用的高效桥梁</a>
                        <span class="text-muted">郁铎舒</span>

                        <div>深入探索dubbo-rpc-jsonrpc:跨语言服务调用的高效桥梁dubbo-rpc-jsonrpcApacheDubbo-rpc-jsonrpc是一个用于ApacheDubbo的JSON-RPC协议实现项目。它提供了一个用于ApacheDubbo的JSON-RPC协议实现库和工具。适合用于在应用程序中处理分布式服务。项目地址:https://gitcode.com/gh_mirrors/dub</div>
                    </li>
                    <li><a href="/article/1902332778385567744.htm"
                           title="C#搭建Json RPC2.0 Server/Client" target="_blank">C#搭建Json RPC2.0 Server/Client</a>
                        <span class="text-muted">Flora*.*</span>
<a class="tag" taget="_blank" href="/search/rpc/1.htm">rpc</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a>
                        <div>写在前面这篇文章写了改,改了写,中间耽搁好长时间,最终还是决定坚持写下来,因为我自己在学习这部分开发时也花了很长时间去理解,所以这篇文章也相当于是对我这部分开发和学习的一个总结,希望它能给你带来帮助。因为本人能力有限,所以文中有些写的不明白或者有错误的地方还请大佬批评指正,我也会不断在项目中进行总结,更新这篇文章,让其更加通俗易懂!背景介绍在MES项目开发中,我们不希望经常改动主程序,但因为不同客</div>
                    </li>
                    <li><a href="/article/1902330384071323648.htm"
                           title="基于 Python 将 PDF 转 Markdown 并拆解为 JSON,支持自定义标题处理" target="_blank">基于 Python 将 PDF 转 Markdown 并拆解为 JSON,支持自定义标题处理</a>
                        <span class="text-muted">drebander</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a>
                        <div>在日常工作中,我们经常需要将PDF文件转换为可编辑、可结构化的数据格式,比如Markdown和JSON。但实际操作中,自动化工具往往会出现标题识别不准确的问题,尤其是PDF转换过程中,缺乏明确的标题标识。这篇文章将教你如何使用Python将PDF转换为Markdown,并通过自定义规则精准识别标题,最终将内容按标题结构拆解为JSON,方便后续快速检索与使用。1.实现目标将PDF文件转换为Markd</div>
                    </li>
                    <li><a href="/article/1902324833312632832.htm"
                           title="openai 标准化协议 Structured Outputs 具体示例教程" target="_blank">openai 标准化协议 Structured Outputs 具体示例教程</a>
                        <span class="text-muted">weixin_40941102</span>
<a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a>
                        <div>StructuredOutputs具体示例教程场景:个人财务管理助手假设我们要构建一个AI助手,帮助用户记录和管理个人财务支出。用户可以输入自然语言描述(如“昨天我花了50元买了午餐”),助手将提取关键信息并以结构化JSON格式返回,包括日期、金额、类别和备注。示例1:使用StructuredOutputs提取财务记录步骤1:定义JSONSchema我们需要一个清晰的Schema来描述财务记录:{</div>
                    </li>
                    <li><a href="/article/1902323443718746112.htm"
                           title="芯片:CPU和GPU有什么区别?" target="_blank">芯片:CPU和GPU有什么区别?</a>
                        <span class="text-muted">InnoLink_1024</span>
<a class="tag" taget="_blank" href="/search/AGI/1.htm">AGI</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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a><a class="tag" taget="_blank" href="/search/agi/1.htm">agi</a><a class="tag" taget="_blank" href="/search/gpu%E7%AE%97%E5%8A%9B/1.htm">gpu算力</a>
                        <div>CPU(中央处理器)和GPU(图形处理单元)是计算机系统中两种非常重要的处理器,它们各自有不同的设计理念、架构特点以及应用领域。下面是它们之间的一些主要差异:1.设计目的与应用领域CPU:设计目的是为了处理广泛的计算任务,包括操作系统管理、应用程序运行和基本的输入输出处理等。它处理的是复杂的、通用的计算任务,通常包括控制逻辑、内存管理等。GPU:设计目的是为了处理图形和并行计算任务。最初是为图形渲</div>
                    </li>
                    <li><a href="/article/1902316000418787328.htm"
                           title="【H2O2 | 软件开发】前端深拷贝的实现" target="_blank">【H2O2 | 软件开发】前端深拷贝的实现</a>
                        <span class="text-muted">过期的H2O2</span>
<a class="tag" taget="_blank" href="/search/%E3%80%90H2O2%E3%80%91%E5%85%A8%E6%A0%88%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">【H2O2】全栈面试题</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>目录前言开篇语准备工作正文概述JSON方法递归其他结束语前言开篇语本系列为短篇,每次讲述少量知识点,无需一次性灌输太多的新知识点。该主题文章主要是围绕前端、全栈开发相关面试常见问题撰写的,希望对诸位有所帮助。如果您需要为面试八股文做准备,笔者建议重点关注加粗强调部分,它们是概念中的关键词。准备工作软件:【参考版本】VisualStudioCode系统版本:Win10/11正文概述概括地来说,前端实</div>
                    </li>
                    <li><a href="/article/1902300112642699264.htm"
                           title="嵌入式软件开发常用的3种架构" target="_blank">嵌入式软件开发常用的3种架构</a>
                        <span class="text-muted">an520_</span>
<a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85/1.htm">智能家居</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91/1.htm">嵌入式开发</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/arm/1.htm">arm</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%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a>
                        <div>摘要:对于单片机程序来说,大家都不陌生,但是真正使用架构,考虑架构的恐怕并不多,随着程序开发的不断增多,架构是非常必要的。应用程序的架构大致有三种:1、简单的前后台顺序执行程序,这类写法是大多数人使用的方法,不需用思考程序的具体架构,直接通过执行顺序编写应用程序即可。2、时间片轮询法,此方法是介于顺序执行与操作系统之间的一种方法。3、操作系统,此法应该是应用程序编写的最高境界。一、程序框架设计1、</div>
                    </li>
                    <li><a href="/article/1902285992681861120.htm"
                           title="VSCode PDF Viewer 项目教程" target="_blank">VSCode PDF Viewer 项目教程</a>
                        <span class="text-muted">卓炯娓</span>

                        <div>VSCodePDFViewer项目教程vscode-pdfviewerShowPDFpreviewinVSCode.项目地址:https://gitcode.com/gh_mirrors/vs/vscode-pdfviewer1.项目目录结构及介绍vscode-pdfviewer/├──.vscode/│├──extensions.json│└──launch.json├──lib/│├──web</div>
                    </li>
                    <li><a href="/article/1902282204222910464.htm"
                           title="Socket(套接字)是什么,有什么作用?" target="_blank">Socket(套接字)是什么,有什么作用?</a>
                        <span class="text-muted">给我个面子中不</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>Socket(套接字)是计算机网络编程中的一个重要概念,它是应用程序和网络协议之间的接口,用于实现不同主机或不同进程之间的通信。通过Socket,程序能够在网络中发送和接收数据,实现网络应用的功能。Socket的基本概念Socket是一种抽象的概念,提供了一种编程接口(API),使得应用程序可以通过它与网络通信。它通常在操作系统的网络协议栈和应用程序之间提供一个桥梁。具体来说,Socket是由操作</div>
                    </li>
                    <li><a href="/article/1902265055957807104.htm"
                           title="深入解析Java跨平台原理" target="_blank">深入解析Java跨平台原理</a>
                        <span class="text-muted">KBkongbaiKB</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、操作系统屏障的本质挑战源代码编译方式直接编译为机器码Windows的可执行文件.exeLinux的可执行文件.elfmacOS的可执行文件.machJava独特的中间格式字节码文件.classJVM虚拟机1.1传统语言的平台困局语言类型编译方式执行依赖跨平台能力C/C++直接生成机器码特定操作系统❌不可直接移植Python解释型执行Python解释器✅但性能较低Java字节码中间件JVM虚拟机</div>
                    </li>
                    <li><a href="/article/1902217901033713664.htm"
                           title="蓝桥杯新手算法练习题单|冲击国一(三)" target="_blank">蓝桥杯新手算法练习题单|冲击国一(三)</a>
                        <span class="text-muted">小咖拉眯</span>
<a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AF/1.htm">蓝桥杯</a><a class="tag" taget="_blank" href="/search/%E8%93%9D%E6%A1%A5%E6%9D%AF/1.htm">蓝桥杯</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/dfs/1.htm">dfs</a><a class="tag" taget="_blank" href="/search/bfs/1.htm">bfs</a>
                        <div>此题单为算法基础精选题单,包含蓝桥杯常考考点以及各种经典算法,可以帮助你打牢基础,查漏补缺。本题单目标是冲击蓝桥杯省一国一,团体程序天梯赛个人国三、XCPC区域赛铜/银奖前言本次题单重点关注模拟类问题,DFS问题,BFS问题目录模拟类题型一、最大子矩阵二、世纪末的星期三、图像相似度四、操作系统DFS题型五、老子的全排列呢六、皇后问题七、池塘BFS题型八、迷宫九、八数码问题十、字符变换一、最大子矩阵</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>