以太坊区块链使用WEB3开发自己第一个DAPP

摘要:在学习了最基础的一些以太坊知识以及开发框架搭建完成之后,可以尝试开发自己的第一个DApp,此处使用Truffle开发框架,Remix编译环境,Genache测试客户端,具体操作如下

 

在学习了最基础的一些以太坊知识以及开发框架搭建完成之后,可以尝试开发自己的第一个DAPP,此处使用松露开发框架,混音编译环境,Genache测试客户端,具体操作如下。

    此处参照MetaCoin创建自己的模拟转账Dapp名称为RuoliCoin

 

1,创建工作目录

            创建RuoliCoin目录,在此目录下打开命令行执行Truffle初始化命令,如下:

松露unbox webpack

            即可创建基础松露框架。

 

2,创建密实智能合约文件

            在RuoliCoin / contracts目录下删除原有的ConvertLib.sol,MetaCoin.sol两个文件,新建RuoliCoin.sol文件,使用Web版本的Remix打开此文件,进行智能合约的编写操作,最后编写好的智能合约内容如下:

pragma solidity ^ 0.4.23;

合同RuoliCoin {
	mapping(address => uint)balances; 事件转移(地址索引_from,地址索引_to,uint256 _value); constructor()public {
		余额[msg.sender] = 10000;
	函数sendCoin(地址接收者,uint金额)公共返回(bool足够){if(balances [msg.sender] 

 

3,部署至测试环境

        修改truffle.js文件,指定本地RCP Server地址(启动Ganache后主界面有显示),内容如下:

module.exports = {
    网络:{  
        发展:{  
            主持人:'localhost',  
            港口:'7545',  
            network_id:'*'//匹配任何网络ID  
        }  
    } 
};

         迁移目录下1_initial_migration.js,2_deploy_contracts.js两个文件非常重要切勿删除,在此目录下将2_deploy_contracts.js进行修改内容如下:

var RuoliCoin = artifacts.require(“./ RuoliCoin.sol”); module.exports = function(deployer){
  deployer.deploy(RuoliCoin);
  
};

       

在RuoliCoin目录下使用命令行编译并部署智能合约文件,如下:

PS C:\ Workspace \ Ruoli-Code \ Truffle \ RuoliCoin> truffle compile
PS C:\ Workspace \ Ruoli-Code \ Truffle \ RuoliCoin>松露部署
使用网络'发展'。

正在运行迁移:1_initial_migration.js
  部署迁移...
  ... 0x73e55a0f780c6780039abc3feb8b5e1243744135096e441668e8ab55579e51db
  迁移:0xb81237dd01159a36a5ac3c760d227bbafe3341e成功迁移到网络...
  ... 0xc5be542ec02f5513ec21e441c54bd31f0c86221da26ed518a2da25c190faa24b保存文物......
正在运行迁移:2_deploy_contracts.js
  部署RuoliCoin ......
  ... 0xd4c85531d5d83c61f79485c43e6e4146d51b909c8b73bf5d88b60aa990cf1d08
  RuoliCoin:0x6ba286f3115994baf1fed1159e81f77c9e1cd4fa成功迁移到网络...
  ... 0xc8d5533c11181c87e6b60d4863cdebb450a2404134aea03a573ce6886905a00b保存文物......
PS C:\ Workspace \ Ruoli-Code \ Truffle \ RuoliCoin>

此时查看Ganache界面中第一个账户的ETH余额已减少,说明部署成功。

 

4,编写页面文件

在app目录下删除所有文件,新建index.html,javascripts / app.js两个文件,文件内容如下:

index.html如下:

<!DOCTYPE html>  
   RuoliCoin  -  Truffle Demo </ title>
  <link rel =“stylesheet”href =“https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css”>
  <script src =“https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js”> </ script>
  <script src =“https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js”> </ script>
  <script src =“./ app.js”> </ script> </ head> <body>
  <div class =“container”style =“margin-top:80px;”>
    
    <div class =“form-group”>
      <input type =“text”class =“form-control”id =“transfer-addr”placeholder =“转入账户”>
    </ DIV>
    <div class =“form-group”>
      <input type =“text”class =“form-control”id =“transfer-money”placeholder =“注入金额”>
    </ DIV>
    <div class =“alert”role =“alert”style =“display:none;” ID = “消息框”> </ DIV>
    <button type =“submit”id =“transfer-confirm-btn”class =“btn btn-success”>转账</ button>
    <button type =“button”id =“transfer-clear-btn”class =“btn btn-default”>重置</ button>
    <HR />
    <div class =“form-group”>
      <input type =“text”class =“form-control”id =“balance-addr”placeholder =“查询余额账户”>
    </ DIV>
    <button type =“submit”id =“balance-select”class =“btn btn-success”>余额查询</ button>
  </ DIV> </ BODY> <SCRIPT>
  $(文件)。就绪(函数(){
      $('#transfer-confirm-btn')。on('click',function(){var transferAddr = $('#transfer-addr')。val(); var transferMoney = $('#transfer-money' ).val(); if(transferAddr ==''){
              showTips( '警报-危险', '转入账户不能为空');
          } else {//调用App的说()方法
              window.App.transfer(transferAddr,transferMoney,function(err,result){if(err){
                     showTips( '警报的危险',ERR);
                  } else {
                      showTips( '警报的危险',结果);
                  }
              });
          }
      });
      $('#balance-select')。on('click',function(){var balanceAddr = $('#balance-addr')。val(); if(balanceAddr ==''){
              showTips( '警报-危险', '查询余额账不能为空');
          } else {//调用App的说()方法
              window.App.getBalance(balanceAddr,function(err,result){if(err){
                     showTips( '警报的危险',ERR);
                  } else {
                      showTips( '警报-危险', '账户余额:' +导致);
                  }
              });
          }
      });
      $('#cancel')。on('click',function(){
          $( '#用户名')VAL( '')。
          $( '#消息盒子')隐藏();
          $( '#消息盒子')HTML( '')。
      });
  }); function showTips(classType,tipsText){
      $( '#消息框')addClass(classType所)的.html(tipsText + '');
      $( '#消息盒子')淡入(800)。
  } </ SCRIPT> </ HTML></code></pre> 
  <p style="margin-left:0px;"><span style="color:#1c1f21;">Java脚本/ app.js内容如下:</span></p> 
  <pre style="margin-left:0px;"><code class="language-html hljs">//导入CSS //导入“../stylesheets/app.css";//导入web3和truffle-contract库导入{默认为Web3}来自'web3';从'truffle-contract'导入{默认为合同} //导入Hello合约的ABI文件导入RuoliCoin_artifacts来自'../../build/contracts/RuoliCoin.json'//获取Hello合约对象var RuoliCoinContract = contract(RuoliCoin_artifacts); var ruoliCoinInstance = null; var accounts; var account ; window.App = {
  init:function(){//设置web3连接
    RuoliCoinContract.setProvider(web3.currentProvider); //获取初始帐户余额,以便显示。
    web3.eth.getAccounts(function(err,accs){if(err!= null){
        alert(“获取帐户时出错。”); 返回;
      } if(accs.length == 0){
        alert(“无法获取任何帐户!确保您的以太坊客户端配置正确。”); 返回;
      }

      accounts = accs;
      account = accounts [0];
    });  


    //实例为你好合约部署实例
    RuoliCoinContract.deployed()。然后(函数(实例){
      ruoliCoinInstance =实例; var event = ruoliCoinInstance.Transfer();
        event.watch(功能(错误,结果){
          警报(误差); 的console.log(结果);
        });
    })。catch(function(e){console.log(e,null);
    });
  },//封装合约中的say()方法调用过程,供javascript调用
  transfer:function(transferAddr,amount,callback){//调用Hello合约中的say()方法,并传入参数name
      ruoliCoinInstance.sendCoin(transferAddr,amount,{from:account})。then(function(result){//将返回结果传入回调函数
        callback(null,result);
      });
  },
  getBalance:function(balanceAddr,callback){//调用Hello合约中的say()方法,并传入参数name
      ruoliCoinInstance.getBalance.call(balanceAddr,{from:account})。then(function(result){//将返回结果传入回调函数
        callback(null,result);
      });
  }
window.addEventListener('load',function(){//设置web3连接http://127.0.0.1:7545为Ganache提供的节点链接
  window.web3 = new Web3(new Web3.providers.HttpProvider(“http://127.0.0.1:7545”));
  App.init();
  
});</code></pre> 
  <p style="margin-left:0px;"><span style="color:#1c1f21;">运行界面如下:</span></p> 
  <p style="margin-left:0px;"><span style="color:#1c1f21;">        <a href="http://img.e-com-net.com/image/info8/ba9f4aa7a0a94060b6b90a0a71eef217.jpg" target="_blank"><img alt="以太坊区块链使用WEB3开发自己第一个DAPP_第1张图片" class="has" src="http://img.e-com-net.com/image/info8/ba9f4aa7a0a94060b6b90a0a71eef217.jpg" width="500" height="286" style="border:1px solid black;"></a></span></p> 
  <p style="margin-left:0px;"> </p> 
  <h1 style="margin-left:0px;"><span style="color:#1c1f21;">5,运行与测试</span></h1> 
  <p style="margin-left:0px;"><span style="color:#1c1f21;">        在RuoliCoin根目录执行启动命令npm run dev,如下:</span></p> 
  <pre style="margin-left:0px;"><code class="language-html hljs">PS C:\ Workspace \ Ruoli-Code \ Truffle \ Metacoin> npm run dev

> truffle-init-webpack@0.0.2 dev C:\ Workspace \ Ruoli-Code \ Truffle \ Metacoin
> webpack-dev-server

项目运行在http:// localhost:8081 / webpack输出从/ Hash提供:8b5b7df27e0385bf011dVersion:webpack 2.7.0Time:3239ms
     资产大小块大块名称
    app.js 1.68 MB 0 [emit] [big] main
index.html 925字节[发出]
chunk {0} app.js(main)1.66 MB [条目] [渲染]
   [71] ./app/javascripts/app.js 3.64 kB {0} [built]
   [72](webpack)-dev-server / client?http:// localhost:8081 7.93 kB {0} [built]
   [73] ./build/contracts/MetaCoin.json 47.8 kB {0} [built]
  [111] ./~/loglevel/lib/loglevel.js 7.86 kB {0} [built]
  [117] ./~/querystring-es3/index.js 127字节{0} [已建]
  [119] ./~/strip-ansi/index.js 161字节{0} [已建]
  [122] ./app/stylesheets/app.css 905字节{0} [已建]
  [163] ./~/truffle-contract/index.js 2.64 kB {0} [built]
  [197] ./~/url/url.js 23.3 kB {0} [built]
  [199] ./~/web3/index.js 193字节{0} [已建]
  [233](webpack)-dev-server / client / overlay.js 3.67 kB {0} [built]
  [234](webpack)-dev-server / client / socket.js 1.08 kB {0} [built]
  [235](webpack)/ hot nonrecursive ^ \。\ / log $ 160 bytes {0} [built]
  [236](webpack)/hot/emitter.js 77字节{0} [已建]
  [237] multi(webpack)-dev-server / client?http:// localhost:8081 ./app/javascripts/app.js 40 bytes {0} [built]
     + 223隐藏的moduleswebpack:编译成功。</code></pre> 
  <p style="margin-left:0px;"><span style="color:#1c1f21;">访问上面提示的链接地址:http:// localhost:8081 /</span></p> 
  <p style="margin-left:0px;"><span style="color:#1c1f21;">即可访问到页面,输入转入地址和金额即可进行代币转账操作,输入查询余额地址即可进行查询余额操作。</span></p> 
  <p style="margin-left:0px;"> </p> 
  <p><br><span style="color:#1c1f21;">作者:</span><br><span style="color:#1c1f21;">链接:https://www.imooc.com/article/31140</span><br><span style="color:#1c1f21;">来源:慕课网</span></p> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1281171638984916992"></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">你可能感兴趣的:(以太坊区块链使用WEB3开发自己第一个DAPP)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1943870619896573952.htm"
                           title="php加密的是什么,看看下面这个php代码是使用什么加密的?" target="_blank">php加密的是什么,看看下面这个php代码是使用什么加密的?</a>
                        <span class="text-muted">xiao龟</span>
<a class="tag" taget="_blank" href="/search/php%E5%8A%A0%E5%AF%86%E7%9A%84%E6%98%AF%E4%BB%80%E4%B9%88/1.htm">php加密的是什么</a>
                        <div>加密的代码如下:!/usr/bin/php-qeNrtWWlTG1cW/SvY5Yqg4krevoSQuIUEiE0LYAwuijKbEGA2YbMk+TUOjEnyc976b+Y2pKZqpNcgz3gm46r5BpL69Ln3nnvved3PrrFyRhOJEAoySvT66ceoMFbS02BNEFE8XRsLRAmkHI7eKMxMHC7tnKOz+Ytuezt7SUrPS6TcOa0c6</div>
                    </li>
                    <li><a href="/article/1943870493677383680.htm"
                           title="php rad加密公钥过长,看看下面这个php代码是使用什么加密的?" target="_blank">php rad加密公钥过长,看看下面这个php代码是使用什么加密的?</a>
                        <span class="text-muted">范特嘻嘻</span>
<a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/rad%E5%8A%A0%E5%AF%86%E5%85%AC%E9%92%A5%E8%BF%87%E9%95%BF/1.htm">rad加密公钥过长</a>
                        <div>加密的代码如下:!/usr/bin/php-qeNrtWWlTG1cW/SvY5Yqg4krevoSQuIUEiE0LYAwuijKbEGA2YbMk+TUOjEnyc976b+Y2pKZqpNcgz3gm46r5BpL69Ln3nnvved3PrrFyRhOJEAoySvT66ceoMFbS02BNEFE8XRsLRAmkHI7eKMxMHC7tnKOz+Ytuezt7SUrPS6TcOa0c6</div>
                    </li>
                    <li><a href="/article/1943869989857587200.htm"
                           title="TCP和UDP协议区别+应用场景+优缺点+常用协议" target="_blank">TCP和UDP协议区别+应用场景+优缺点+常用协议</a>
                        <span class="text-muted">马拉萨的春天</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%80%E5%A4%A9%E4%B8%80%E8%AF%BB/1.htm">一天一读</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%82%B9/1.htm">基础知识点</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/udp/1.htm">udp</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>文章目录1.TCP协议特点应用场景优点缺点运行于TCP协议之上的协议2.UDP协议特点应用场景优点缺点运行于UDP协议之上的协议TCP(TransmissionControlProtocol)和UDP(UserDatagramProtocol)是两种常用的传输层协议,它们在网络通信中扮演不同的角色,各有优缺点。1.TCP协议特点提供面向连接的、可靠的数据传输服务。使用三次握手建立连接,四次挥手断开</div>
                    </li>
                    <li><a href="/article/1943869610461818880.htm"
                           title="使用内联汇编实现CAS操作(含详细讲解)" target="_blank">使用内联汇编实现CAS操作(含详细讲解)</a>
                        <span class="text-muted">(Charon)</span>
<a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96/1.htm">汇编</a>
                        <div>在多线程环境下,如何安全地更新共享变量,一直是一个重要的话题。今天,我们通过一段使用内联汇编实现的CAS(CompareAndSwap)代码,深入学习它的原理和用法。完整示例代码如下:#include//标准输入输出头文件#include//pthread多线程编程相关头文件#include//usleep函数需要的头文件#defineTHREAD_COUNT10//定义线程数量为10volati</div>
                    </li>
                    <li><a href="/article/1943869610877054976.htm"
                           title="C语言手写一个简易 DNS 客户端" target="_blank">C语言手写一个简易 DNS 客户端</a>
                        <span class="text-muted">(Charon)</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/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>本文聚焦讲解如何通过C语言构造并发送一个最小化的DNS请求,特别以dns_client_commit()函数为主线,带你一步步理解DNS请求的构造过程。为什么要学习DNS报文构造?我们平时在浏览器里输入一个网址(比如www.baidu.com),浏览器其实背后会通过操作系统的DNS模块发送一个查询请求,将域名解析为IP地址。而如果我们手动用C语言自己构造DNS请求,我们可以更深刻地理解底层网络通信</div>
                    </li>
                    <li><a href="/article/1943869611325845504.htm"
                           title="C语言手写简易 DNS 客户端(接收部分)" target="_blank">C语言手写简易 DNS 客户端(接收部分)</a>
                        <span class="text-muted">(Charon)</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>本文通过纯C语言手动构造DNS请求报文,使用UDP协议发送到公共DNS服务器,并接收响应,完整演示DNS请求流程。主流程:dns_client_commit()这是整个流程的核心函数,下面我们按顺序拆解每一步的逻辑,尤其突出发送sendto与接收recvfrom的设计思路和实现。第一步:创建UDP套接字intsockfd=socket(AF_INET,SOCK_DGRAM,0);if(sockfd</div>
                    </li>
                    <li><a href="/article/1943868476791779328.htm"
                           title="服务器或网络卡的原因和状况" target="_blank">服务器或网络卡的原因和状况</a>
                        <span class="text-muted">qq2453939845</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/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>卡的情况下,请先检查您服务器的使用情况。1、CPU使用率是否大于50%。2、内存使用率是否过高。3、网络使用率是否过高。如您购买的是10mbps,那么您服务器的网卡如果为100mbps的连接速率,当网络使用率为10%左右的情况下,则表示您的服务器带宽跑满了,以此类推,如果是千兆网卡(连接速率1000mbps)的,则显示1%即为10mbps。如果出现上述情况,则表明您的服务器或网络无法承载您目前的服</div>
                    </li>
                    <li><a href="/article/1943868477316067328.htm"
                           title="解决Linux绑定失败地址已使用(端口被占用)的问题" target="_blank">解决Linux绑定失败地址已使用(端口被占用)的问题</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/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>文章目录解决`bindfailed:Addressalreadyinuse`问题一、问题原因1.**端口已经被其他程序占用**2.**端口处于`TIME_WAIT`状态**3.**未正确关闭套接字**二、如何排查和解决问题1.**确认端口是否被占用**2.**查找并杀掉占用端口的进程**3.**等待端口释放(`TIME_WAIT`状态)**4.**强制重用端口**(仅限开发环境)5.**使用其他端</div>
                    </li>
                    <li><a href="/article/1943868350459342848.htm"
                           title="基于STM32金属探测器设计" target="_blank">基于STM32金属探测器设计</a>
                        <span class="text-muted"></span>

                        <div>摘要随着便携式金属探测器在安防,考古及工业检测等领域需求的增加,现有探测器的体积大,能耗高,操作复杂的缺点亟需解决。本文针对便携式金属探测器的设计进行探索,在硬件上使用了STM32F103C8T6单片机模块,WL02涡流传感器模块,ADS1115模数转换模块,蜂鸣器模块等设计出本系统的电路,在软件上设计出主程序,信号采集及报警子程序等,对系统进行基础功能,灵敏度,抗干扰和耐久性测试,测试结果表明探</div>
                    </li>
                    <li><a href="/article/1943868348626432000.htm"
                           title="8个Java TCP/UDP框架:优缺点及应用场景全解析!" target="_blank">8个Java TCP/UDP框架:优缺点及应用场景全解析!</a>
                        <span class="text-muted">技术男老张</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/1.htm">编程语言</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/JAVA/1.htm">JAVA</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/1.htm">编程语言</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/udp/1.htm">udp</a><a class="tag" taget="_blank" href="/search/ssl/1.htm">ssl</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/websocket/1.htm">websocket</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a>
                        <div>JavaTCP框架在现代网络编程中扮演着至关重要的角色,尤其是在需要高效、稳定且可扩展的网络通信解决方案时。本文将深入探讨一些主流的JavaTCP/UDP框架,分析它们的优缺点以及适用场景,旨在为开发者提供一份详尽的指南。一、NettyNetty是一个异步事件驱动的网络应用框架,用于快速开发高性能、高可靠性的网络IO程序。Netty的设计目标是简化网络编程的复杂性,同时提高网络应用的性能和可扩展性</div>
                    </li>
                    <li><a href="/article/1943867214222389248.htm"
                           title="K8s 1.24在node节点上手动部署etcd" target="_blank">K8s 1.24在node节点上手动部署etcd</a>
                        <span class="text-muted">喝醉酒的小白</span>
<a class="tag" taget="_blank" href="/search/K8s/1.htm">K8s</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/etcd/1.htm">etcd</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a>
                        <div>目录标题第一次操作一、生成证书并拷贝到新增节点~~~~方案1~~缺少了SAN(SubjectAlternativeNames)~~方案2关键改进:使用说明:二、在已有节点(181)上添加etcd集群成员三、在180上部署静态Pod四、更新旧节点(181)的静态Pod配置-可选五、验证集群状态第一次操作下面给出在节点 172.30.30.180(下简称“180”)上新增etcd成员的完整操作步骤。假</div>
                    </li>
                    <li><a href="/article/1943863558789984256.htm"
                           title="如何在Windows系统下使用Dockerfile构建Docker镜像:完整指南" target="_blank">如何在Windows系统下使用Dockerfile构建Docker镜像:完整指南</a>
                        <span class="text-muted">996蹲坑</span>
<a class="tag" taget="_blank" href="/search/windows/1.htm">windows</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>
                        <div>前言Docker作为当前最流行的容器化技术,已经成为开发、测试和运维的必备工具。本文将详细介绍在Windows系统下使用Dockerfile构建Docker镜像的完整流程,包括两种镜像构建方式的对比、Dockerfile核心指令详解、实战案例演示以及Windows系统下的特殊注意事项。一、Docker镜像构建的两种方式1.容器转为镜像(不推荐)这种方式适合临时保存容器状态,但不适合生产环境使用:#</div>
                    </li>
                    <li><a href="/article/1943863052441022464.htm"
                           title="UDP服务器的优缺点都包含哪些?" target="_blank">UDP服务器的优缺点都包含哪些?</a>
                        <span class="text-muted">wanhengidc</span>
<a class="tag" taget="_blank" href="/search/udp/1.htm">udp</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/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a>
                        <div>UDP协议不需要像TCP协议那样进行复杂的连接建立与拆除过程,在进行传输数据信息的过程中,应用层将数据交给UDP层,UDP层直接加上首部就发往网络层,极大地减少了处理时间和资源消耗。例如在一些简单的网络监控程序中,只是定期发送一些状态信息,对数据准确性的要求不高时,企业可以选择使用UDP服务器,能够实现快速传输数据的功能。由于UDP服务器不需要连接建立过程和重传机制的束缚,UDP数据能够快速地从发</div>
                    </li>
                    <li><a href="/article/1943862673330466816.htm"
                           title="如何查看自己本地的公网IP地址?内网环境网络如何开通服务器公网ip提供互联网访问?" target="_blank">如何查看自己本地的公网IP地址?内网环境网络如何开通服务器公网ip提供互联网访问?</a>
                        <span class="text-muted">搬码临时工</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>查看公网IP和开启公网地址提供互联网服务是作为网络管理员的必修课。代替路由映射的端口映射应用使用最广泛的就是nat123。内网发布网站或其他应用到外网访问,且本地无公网IP,或80和443端口被屏蔽,对于这些环境,就需要利用端口映射应用网络辅助来实现。一、如何查看自己本地的公网IP?登录你的路由器,看拨号状态那的WAN口的IP地址;如果你是光纤猫拨号,就需要登录光纤猫,看拨号状态那WAN口的IP地</div>
                    </li>
                    <li><a href="/article/1943861790211371008.htm"
                           title="Android系统高通平台修改调整虚拟机堆内存大小" target="_blank">Android系统高通平台修改调整虚拟机堆内存大小</a>
                        <span class="text-muted">zzq1996</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                        <div>Android系统高通平台如何修改调整虚拟机堆内存大小按如下方式修改开发云-一站式云服务平台diff--gita/device/qcom/msm89/system.propb/device/qcom/msm89/system.propindex---a/device/qcom/msm8974/system.prop+++b/device/qcom/msm8974/system.prop@@@@de</div>
                    </li>
                    <li><a href="/article/1943861034146131968.htm"
                           title="windows exe爬虫:exe抓包" target="_blank">windows exe爬虫:exe抓包</a>
                        <span class="text-muted">程序猿阿三</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98/1.htm">爬虫项目实战</a><a class="tag" taget="_blank" href="/search/exe%E6%8A%93%E5%8C%85/1.htm">exe抓包</a>
                        <div>不论任何爬虫,抓包是获取数据最直接和最方便的方式,这章节我们一起看一下windowsexe是如何拦截数据的。用mitmproxy/Charles/Fiddler或Wireshark拦截它的HTTP/HTTPS/TCP流量。如果是HTTPS,安装并信任代理的根证书。由于exe大部分可能走的是自定义应用层协议。在不知情所拦截应用使用的流量时,所以建议用Wireshark。本文利用python代码,实现</div>
                    </li>
                    <li><a href="/article/1943860905842372608.htm"
                           title="【AI大模型】LLM模型架构深度解析:BERT vs. GPT vs. T5" target="_blank">【AI大模型】LLM模型架构深度解析:BERT vs. GPT vs. T5</a>
                        <span class="text-muted">我爱一条柴ya</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0AI%E8%AE%B0%E5%BD%95/1.htm">学习AI记录</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</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%E7%BC%96%E7%A8%8B/1.htm">AI编程</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>引言Transformer架构的诞生(Vaswanietal.,2017)彻底改变了自然语言处理(NLP)。在其基础上,BERT、GPT和T5分别代表了三种不同的模型范式,主导了预训练语言模型的演进。理解它们的差异是LLM开发和学习的基石。一、核心架构对比特性BERT(BidirectionalEncoder)GPT(GenerativePre-trainedTransformer)T5(Text</div>
                    </li>
                    <li><a href="/article/1943860652200226816.htm"
                           title="mit6.s081lab" target="_blank">mit6.s081lab</a>
                        <span class="text-muted"></span>

                        <div>临近毕业季,回想自己本科四年学到了哪些东西,想到自己专业课都是为了卷绩点、应付考试,去背书、被概念,并没有十分深刻的理解和动手实践。现在想重新温习一下这部分知识,同时也加深一下对这部分内容的动手实践。那么就从大名鼎鼎的os课6.s081开始吧~~~lab1:Unixutilitieslab2:Systemcalls</div>
                    </li>
                    <li><a href="/article/1943860021527900160.htm"
                           title="Android 图像处理 - Bitmap 图像处理观察记录(基本图像复制、带目录创建的图像复制、字节流处理的图像复制、并发图像复制、单线程池顺序图像复制)" target="_blank">Android 图像处理 - Bitmap 图像处理观察记录(基本图像复制、带目录创建的图像复制、字节流处理的图像复制、并发图像复制、单线程池顺序图像复制)</a>
                        <span class="text-muted"></span>

                        <div>Bitmap图像处理观察记录1、基本图像复制从应用内部存储目录读取test.png使用BitmapFactory解码为Bitmap对象将Bitmap重新压缩保存为newTest.png操作成功,compress返回trueFilefile=newFile(getFilesDir(),"test.png");StringabsolutePath=file.getAbsolutePath();Bitm</div>
                    </li>
                    <li><a href="/article/1943856620320649216.htm"
                           title="《手机摄影从实战到精通》——多个技能多条路,手机拍摄技巧,着实过分实用了" target="_blank">《手机摄影从实战到精通》——多个技能多条路,手机拍摄技巧,着实过分实用了</a>
                        <span class="text-muted">Ann2015</span>
<a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E6%89%8B%E6%9C%BA/1.htm">智能手机</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/1.htm">程序人生</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a><a class="tag" taget="_blank" href="/search/%E9%A3%8E%E6%99%AF/1.htm">风景</a>
                        <div>用小小的一部手机,就能拍大片?是的,手机摄影已不容小觑。近年来,一些手机厂商邀请知名导演使用手机拍大片,以彰显手机性能的强大,这也重新定义了我们对手机摄影的认知。相较于传统摄影设备,智能手机自带的“计算摄影”性能也降低了拍摄门槛,它可以将原本需要手动调节的各项参数指标进行自动调整和优化,使我们能轻松获得最佳拍摄效果。这也大大降低了拍摄的难度和门槛,让我们将重点放在内容创作上。手机与视频平台也密不可</div>
                    </li>
                    <li><a href="/article/1943855613205344256.htm"
                           title="Spring 如何干预 Bean 的生命周期?" target="_blank">Spring 如何干预 Bean 的生命周期?</a>
                        <span class="text-muted">冰糖心书房</span>
<a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/IOC/1.htm">IOC</a><a class="tag" taget="_blank" href="/search/Ioc/1.htm">Ioc</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Bean/1.htm">Bean</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/1.htm">生命周期</a>
                        <div>Spring提供了多种机制让我们能够在Bean生命周期的不同节点“插入”自己的逻辑,这些机制可以分为两大类:针对单个Bean的干预和针对所有/多个Bean的全局干预。一、针对单个Bean的干预(最常用)这些方法让你为一个特定的Bean类定义其初始化和销毁逻辑。1.使用JSR-250注解(推荐方式)这是现在最优雅、也是Spring官方推荐的方式。它使用Java的标准注解,与Spring框架解耦。@P</div>
                    </li>
                    <li><a href="/article/1943855486789021696.htm"
                           title="Mysql字段没有索引,通过where x = 3 for update是使用什么级别的锁" target="_blank">Mysql字段没有索引,通过where x = 3 for update是使用什么级别的锁</a>
                        <span class="text-muted"></span>

                        <div>没有索引时,FORUPDATE会锁住整个表现在,你正在一本一本地翻看所有书,寻找“维修中”的书,并且你对管理员说:“在我清点和修改完之前,别人不能动这些书,也不能往这个范围里加新书!”问题1:如何锁住你找到的“维修中”的书?你每找到一本“维修中”的书,就给它贴上一个“正在处理,请勿触碰”的标签(行级排他锁)。问题2:如何防止别人“往这个范围里加新书”?这是最关键的。因为你没有“状态”的目录卡片(没</div>
                    </li>
                    <li><a href="/article/1943855107762352128.htm"
                           title="Likeshop单商户高级版对接拉卡拉支付收银台接入全流程详解" target="_blank">Likeshop单商户高级版对接拉卡拉支付收银台接入全流程详解</a>
                        <span class="text-muted">肥仔全栈开发</span>
<a class="tag" taget="_blank" href="/search/%E6%8B%89%E5%8D%A1%E6%8B%89%E6%94%AF%E4%BB%98/1.htm">拉卡拉支付</a><a class="tag" taget="_blank" href="/search/%E6%8B%89%E5%8D%A1%E6%8B%89%E6%94%AF%E4%BB%98/1.htm">拉卡拉支付</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a>
                        <div>一、前期准备(1-3个工作日)商户认证在拉卡拉官网注册企业商户账号,提交营业执照、法人身份证等材料,完成实名认证并获取商户号(MCHID)和API密钥。在拉卡拉开发者后台下载API文档(含接口参数说明)和SDK工具包(支持Java/PHP等语言)。配置参数在Likeshop后台设置拉卡拉支付参数:商户号、API密钥、异步通知地址(如https://yourdomain.com/notify)。将拉</div>
                    </li>
                    <li><a href="/article/1943854728903454720.htm"
                           title="对接拉卡拉聚合收银台支付指南" target="_blank">对接拉卡拉聚合收银台支付指南</a>
                        <span class="text-muted">一叶飘零_sweeeet</span>
<a class="tag" taget="_blank" href="/search/%E6%9E%9C%E9%85%B1%E7%B4%AB/1.htm">果酱紫</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%94%AF%E4%BB%98/1.htm">支付</a><a class="tag" taget="_blank" href="/search/%E6%94%AF%E4%BB%98%E5%AE%9D%E6%94%AF%E4%BB%98/1.htm">支付宝支付</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98/1.htm">微信支付</a><a class="tag" taget="_blank" href="/search/%E6%8B%89%E5%8D%A1%E6%8B%89%E6%94%AF%E4%BB%98/1.htm">拉卡拉支付</a>
                        <div>今天我将详细介绍如何对接拉卡拉聚合收银台支付,并指出其中应注意的点。我希望这篇文章能够帮助那些正在寻找如何实现这个功能的开发者。一、拉卡拉聚合收银台支付简介拉卡拉聚合收银台支付是一种整合了多种支付方式的支付服务,包括但不限于微信支付、支付宝支付、银联支付等。它为商户提供了一个统一的支付入口,使得商户无需分别接入各种支付方式,从而大大简化了支付过程。二、对接拉卡拉聚合收银台支付的步骤1.注册并配置拉</div>
                    </li>
                    <li><a href="/article/1943854476238581760.htm"
                           title="【亲测免费】 Mamba:快速跨平台的包管理器" target="_blank">【亲测免费】 Mamba:快速跨平台的包管理器</a>
                        <span class="text-muted">林梦雅</span>

                        <div>Mamba:快速跨平台的包管理器项目基础介绍和主要编程语言Mamba是一个用C++重新实现的Conda包管理器。它旨在提供比传统Conda更快的包管理和依赖解析速度。Mamba的核心部分使用C++编写,以确保高效性和性能。同时,Mamba也使用了Python和其他一些辅助语言来实现其功能。项目核心功能Mamba的核心功能包括:快速依赖解析:利用libsolv库进行高效的依赖解析,这是RedHat、</div>
                    </li>
                    <li><a href="/article/1943854098256293888.htm"
                           title="【Modern C++ Part8】Prefer-nullptr-to-0-and-NULL" target="_blank">【Modern C++ Part8】Prefer-nullptr-to-0-and-NULL</a>
                        <span class="text-muted">莫彩</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/Modern/1.htm">Modern</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a>
                        <div>优先使用nullptr而不是0或者NULL0字面上是一个int类型,而不是指针,这是显而易见的。C++扫描到一个0,但是发现在上下文中仅有一个指针用到了它,编译器将勉强将0解释为空指针,但是这仅仅是一个应变之策。C++最初始的原则是0是int而非指针。经验上讲,同样的情况对NULL也是存在的。对NULL而言,仍有一些细节上的不确定性,因为赋予NULL一个除了int(即long)以外的整数类型是被允</div>
                    </li>
                    <li><a href="/article/1943854097081888768.htm"
                           title="【Modern C++ Part7】_创建对象时使用()和{}的区别" target="_blank">【Modern C++ Part7】_创建对象时使用()和{}的区别</a>
                        <span class="text-muted">莫彩</span>
<a class="tag" taget="_blank" href="/search/Modern/1.htm">Modern</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>在C++11中,你可以有多种语法选择用以对象的初始化,这样的语法显得混乱不堪并让人无所适从,(),=,{}均可以用来进行初始化:intx(0);//使用()进行初始化inty=0;//使用=进行初始化intz{0};//使用{}进行初始化在很多情况下,可以同时使用=和{}intz={0};//使用{}和=进行初始化对于这一条,我通常的会忽略“等于-{}”这种语法,因为C通常认为它只有{}。认为这种</div>
                    </li>
                    <li><a href="/article/1943852963118247936.htm"
                           title="Android开发中RxJava的使用与原理" target="_blank">Android开发中RxJava的使用与原理</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/rxjava/1.htm">rxjava</a>
                        <div>RxJava是ReactiveExtensions在JVM上的实现,专为处理异步事件流和基于观察者模式的编程而设计。在Android开发中,它极大地简化了异步操作(如网络请求、数据库访问、UI事件处理)的管理、组合和线程调度,有效解决了回调地狱问题。一、RxJava核心概念Observable(可观察者):数据源或事件源。它负责发出数据项(onNext)或事件(成功完成onComplete/发生错</div>
                    </li>
                    <li><a href="/article/1943851829490151424.htm"
                           title="iOS应用性能优化指南" target="_blank">iOS应用性能优化指南</a>
                        <span class="text-muted"></span>

                        <div>在移动应用开发领域,iOS应用性能优化一直是开发者关注的焦点。优化应用性能不仅能够提升用户体验,还能增强应用的竞争力。本文将从多个方面详细阐述iOS应用性能优化指南,帮助开发者打造更高效、更流畅的应用。优化内存管理内存泄漏的预防与检测内存泄漏是导致应用性能下降的常见问题。开发者应遵循ARC(自动引用计数)原则,合理管理对象的引用关系。同时,可以使用Xcode的Instruments工具检测内存泄漏</div>
                    </li>
                    <li><a href="/article/1943851449469431808.htm"
                           title="MySQL数据库访问(C/C++)" target="_blank">MySQL数据库访问(C/C++)</a>
                        <span class="text-muted">敲上瘾</span>
<a class="tag" taget="_blank" href="/search/MySQL%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">MySQL数据库</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/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E5%BC%80%E5%8F%91/1.htm">数据库开发</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9E%B6%E6%9E%84/1.htm">数据库架构</a>
                        <div>访问数据库的方式:命令行:使用命令行输入SQL指令直接访问。需记忆命令和SQL语法,对新手不友好。正因如此推荐新手使用该方式访问,能倒逼学习者对SQL语法的记忆,并对MySQL更深入理解。图形化界面访问:使用图形化界面工具,如:DBeaver、DataGrip、Navicat、HeidiSQL(MySQL)、MySQLWorkbench。特点:有语法提示,可以直接对数据手动增删改。编程接口:在编写</div>
                    </li>
                                <li><a href="/article/126.htm"
                                       title="插入表主键冲突做更新" target="_blank">插入表主键冲突做更新</a>
                                    <span class="text-muted">a-john</span>

                                    <div>有以下场景: 
用户下了一个订单,订单内的内容较多,且来自多表,首次下单的时候,内容可能会不全(部分内容不是必须,出现有些表根本就没有没有该订单的值)。在以后更改订单时,有些内容会更改,有些内容会新增。 
问题: 
如果在sql语句中执行update操作,在没有数据的表中会出错。如果在逻辑代码中先做查询,查询结果有做更新,没有做插入,这样会将代码复杂化。 
解决: 
mysql中提供了一个sql语</div>
                                </li>
                                <li><a href="/article/253.htm"
                                       title="Android xml资源文件中@、@android:type、@*、?、@+含义和区别" target="_blank">Android xml资源文件中@、@android:type、@*、?、@+含义和区别</a>
                                    <span class="text-muted">Cb123456</span>
<a class="tag" taget="_blank" href="/search/%40%2B/1.htm">@+</a><a class="tag" taget="_blank" href="/search/%40/1.htm">@</a><a class="tag" taget="_blank" href="/search/%3F/1.htm">?</a><a class="tag" taget="_blank" href="/search/%40*/1.htm">@*</a>
                                    <div>一.@代表引用资源 
1.引用自定义资源。格式:@[package:]type/name 
android:text="@string/hello" 
  
2.引用系统资源。格式:@android:type/name 
    android:textColor="@android:color/opaque_red"</div>
                                </li>
                                <li><a href="/article/380.htm"
                                       title="数据结构的基本介绍" target="_blank">数据结构的基本介绍</a>
                                    <span class="text-muted">天子之骄</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E6%95%A3%E5%88%97%E8%A1%A8/1.htm">散列表</a><a class="tag" taget="_blank" href="/search/%E6%A0%91%E3%80%81%E5%9B%BE/1.htm">树、图</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%80%A7%E7%BB%93%E6%9E%84/1.htm">线性结构</a><a class="tag" taget="_blank" href="/search/%E4%BB%B7%E6%A0%BC%E6%A0%87%E7%AD%BE/1.htm">价格标签</a>
                                    <div>数据结构的基本介绍 
数据结构就是数据的组织形式,用一种提前设计好的框架去存取数据,以便更方便,高效的对数据进行增删查改。正确选择合适的数据结构,对软件程序的高效执行的影响作用不亚于算法的设计。此外,在计算机系统中数据结构的作用也是非同小可。例如常常在编程语言中听到的栈,堆等,就是经典的数据结构。 
  
经典的数据结构大致如下: 
  
一:线性数据结构 
(1):列表 
a</div>
                                </li>
                                <li><a href="/article/507.htm"
                                       title="通过二维码开放平台的API快速生成二维码" target="_blank">通过二维码开放平台的API快速生成二维码</a>
                                    <span class="text-muted">一炮送你回车库</span>
<a class="tag" taget="_blank" href="/search/api/1.htm">api</a>
                                    <div> 现在很多网站都有通过扫二维码用手机连接的功能,联图网(http://www.liantu.com/pingtai/)的二维码开放平台开放了一个生成二维码图片的Api,挺方便使用的。闲着无聊,写了个前台快速生成二维码的方法。 
       html代码如下:(二维码将生成在这div下)    
?       1      
 &nbs</div>
                                </li>
                                <li><a href="/article/634.htm"
                                       title="ImageIO读取一张图片改变大小" target="_blank">ImageIO读取一张图片改变大小</a>
                                    <span class="text-muted">3213213333332132</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/IO/1.htm">IO</a><a class="tag" taget="_blank" href="/search/image/1.htm">image</a><a class="tag" taget="_blank" href="/search/BufferedImage/1.htm">BufferedImage</a>
                                    <div>
package com.demo;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

/**
 * @Description 读取一张图片改变大小
 * @author FuJianyon</div>
                                </li>
                                <li><a href="/article/761.htm"
                                       title="myeclipse集成svn(一针见血)" target="_blank">myeclipse集成svn(一针见血)</a>
                                    <span class="text-muted">7454103</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/SVN/1.htm">SVN</a><a class="tag" taget="_blank" href="/search/MyEclipse/1.htm">MyEclipse</a>
                                    <div>                                 &n</div>
                                </li>
                                <li><a href="/article/888.htm"
                                       title="装箱与拆箱----autoboxing和unboxing" target="_blank">装箱与拆箱----autoboxing和unboxing</a>
                                    <span class="text-muted">darkranger</span>
<a class="tag" taget="_blank" href="/search/J2SE/1.htm">J2SE</a>
                                    <div>4.2 自动装箱和拆箱 
 
基本数据(Primitive)类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。虽然为您打包基本数据类型提供了方便,但提供方便的同时表示隐藏了细节,建议在能够区分基本数据类型与对象的差别时再使用。 
 
4.2.1 autoboxing和unboxing 
 
在Java中,所有要处理的东西几乎都是对象(Object)</div>
                                </li>
                                <li><a href="/article/1015.htm"
                                       title="ajax传统的方式制作ajax" target="_blank">ajax传统的方式制作ajax</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a>
                                    <div>//这是前台的代码 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+</div>
                                </li>
                                <li><a href="/article/1142.htm"
                                       title="只用jre的eclipse是怎么编译java源文件的?" target="_blank">只用jre的eclipse是怎么编译java源文件的?</a>
                                    <span class="text-muted">avords</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a>
                                    <div>eclipse只需要jre就可以运行开发java程序了,也能自动 编译java源代码,但是jre不是java的运行环境么,难道jre中也带有编译工具? 还是eclipse自己实现的?谁能给解释一下呢问题补充:假设系统中没有安装jdk or jre,只在eclipse的目录中有一个jre,那么eclipse会采用该jre,问题是eclipse照样可以编译java源文件,为什么呢? 
&nb</div>
                                </li>
                                <li><a href="/article/1269.htm"
                                       title="前端模块化" target="_blank">前端模块化</a>
                                    <span class="text-muted">bee1314</span>
<a class="tag" taget="_blank" href="/search/%E6%A8%A1%E5%9D%97%E5%8C%96/1.htm">模块化</a>
                                    <div>背景:   前端JavaScript模块化,其实已经不是什么新鲜事了。但是很多的项目还没有真正的使用起来,还处于刀耕火种的野蛮生长阶段。       JavaScript一直缺乏有效的包管理机制,造成了大量的全局变量,大量的方法冲突。我们多么渴望有天能像Java(import),Python (import),Ruby(require)那样写代码。在没有包管理机制的年代,我们是怎么避免所</div>
                                </li>
                                <li><a href="/article/1396.htm"
                                       title="处理百万级以上的数据处理" target="_blank">处理百万级以上的数据处理</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/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%9F%A5%E8%AF%A2/1.htm">查询</a>
                                    <div>一.处理百万级以上的数据提高查询速度的方法:        1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 
        2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 o</div>
                                </li>
                                <li><a href="/article/1523.htm"
                                       title="mac 卸载 java 1.7 或更高版本" target="_blank">mac 卸载 java 1.7 或更高版本</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/OS/1.htm">OS</a>
                                    <div>卸载 java 1.7 或更高 
sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin 
成功执行此命令后,还可以执行 java 与 javac 命令 
 
sudo rm -rf /Library/PreferencePanes/JavaControlPanel.prefPane 
成功执行此命令后,还可以执行 java </div>
                                </li>
                                <li><a href="/article/1650.htm"
                                       title="【Spark六十一】Spark Streaming结合Flume、Kafka进行日志分析" target="_blank">【Spark六十一】Spark Streaming结合Flume、Kafka进行日志分析</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Stream/1.htm">Stream</a>
                                    <div>第一步,Flume和Kakfa对接,Flume抓取日志,写到Kafka中 
第二部,Spark Streaming读取Kafka中的数据,进行实时分析 
  
本文首先使用Kakfa自带的消息处理(脚本)来获取消息,走通Flume和Kafka的对接 1. Flume配置 
1. 下载Flume和Kafka集成的插件,下载地址:https://github.com/beyondj2ee/f</div>
                                </li>
                                <li><a href="/article/1777.htm"
                                       title="Erlang vs TNSDL" target="_blank">Erlang vs TNSDL</a>
                                    <span class="text-muted">bookjovi</span>
<a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a>
                                    <div>  
    TNSDL是Nokia内部用于开发电信交换软件的私有语言,是在SDL语言的基础上加以修改而成,TNSDL需翻译成C语言得以编译执行,TNSDL语言中实现了异步并行的特点,当然要完整实现异步并行还需要运行时动态库的支持,异步并行类似于Erlang的process(轻量级进程),TNSDL中则称之为hand,Erlang是基于vm(beam)开发,</div>
                                </li>
                                <li><a href="/article/1904.htm"
                                       title="非常希望有一个预防疲劳的java软件, 预防过劳死和眼睛疲劳,大家一起努力搞一个" target="_blank">非常希望有一个预防疲劳的java软件, 预防过劳死和眼睛疲劳,大家一起努力搞一个</a>
                                    <span class="text-muted">ljy325</span>
<a class="tag" taget="_blank" href="/search/%E4%BC%81%E4%B8%9A%E5%BA%94%E7%94%A8/1.htm">企业应用</a>
                                    <div> 非常希望有一个预防疲劳的java软件,我看新闻和网站,国防科技大学的科学家累死了,太疲劳,老是加班,不休息,经常吃药,吃药根本就没用,根本原因是疲劳过度。我以前做java,那会公司垃圾,老想赶快学习到东西跳槽离开,搞得超负荷,不明理。深圳做软件开发经常累死人,总有不明理的人,有个软件提醒限制很好,可以挽救很多人的生命。 
 
相关新闻: 
(1)IT行业成五大疾病重灾区:过劳死平均37.9岁 
</div>
                                </li>
                                <li><a href="/article/2031.htm"
                                       title="读《研磨设计模式》-代码笔记-原型模式" target="_blank">读《研磨设计模式》-代码笔记-原型模式</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ 
 
 



/**
 * Effective Java 建议使用copy constructor or copy factory来代替clone()方法:
 * 1.public Product copy(Product p){}
 * 2.publi</div>
                                </li>
                                <li><a href="/article/2158.htm"
                                       title="配置管理---svn工具之权限配置" target="_blank">配置管理---svn工具之权限配置</a>
                                    <span class="text-muted">chenyu19891124</span>
<a class="tag" taget="_blank" href="/search/SVN/1.htm">SVN</a>
                                    <div>今天花了大半天的功夫,终于弄懂svn权限配置。下面是今天收获的战绩。 
安装完svn后就是在svn中建立版本库,比如我本地的是版本库路径是C:\Repositories\pepos。pepos是我的版本库。在pepos的目录结构 
pepos 
   component 
   webapps 
在conf里面的auth里赋予的权限配置为 
[groups]</div>
                                </li>
                                <li><a href="/article/2285.htm"
                                       title="浅谈程序员的数学修养" target="_blank">浅谈程序员的数学修养</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/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/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E6%8B%9B%E8%81%98/1.htm">招聘</a>
                                    <div>         
                        浅谈程序员的数学修养 </div>
                                </li>
                                <li><a href="/article/2412.htm"
                                       title="批量执行 bulk collect与forall用法" target="_blank">批量执行 bulk collect与forall用法</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/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/bulk+collect/1.htm">bulk collect</a><a class="tag" taget="_blank" href="/search/forall/1.htm">forall</a>
                                    <div>BULK COLLECT 子句会批量检索结果,即一次性将结果集绑定到一个集合变量中,并从SQL引擎发送到PL/SQL引擎。通常可以在SELECT INTO、 
FETCH INTO以及RETURNING INTO子句中使用BULK COLLECT。本文将逐一描述BULK COLLECT在这几种情形下的用法。 
    有关FORALL语句的用法请参考:批量SQL之 F</div>
                                </li>
                                <li><a href="/article/2539.htm"
                                       title="Linux下使用rsync最快速删除海量文件的方法" target="_blank">Linux下使用rsync最快速删除海量文件的方法</a>
                                    <span class="text-muted">dongwei_6688</span>
<a class="tag" taget="_blank" href="/search/OS/1.htm">OS</a>
                                    <div>1、先安装rsync:yum install rsync 
2、建立一个空的文件夹:mkdir /tmp/test 
3、用rsync删除目标目录:rsync --delete-before -a -H -v --progress --stats /tmp/test/ log/这样我们要删除的log目录就会被清空了,删除的速度会非常快。rsync实际上用的是替换原理,处理数十万个文件也是秒删。 
</div>
                                </li>
                                <li><a href="/article/2666.htm"
                                       title="Yii CModel中rules验证规格" target="_blank">Yii CModel中rules验证规格</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/rules/1.htm">rules</a><a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a><a class="tag" taget="_blank" href="/search/validate/1.htm">validate</a>
                                    <div>Yii cValidator主要用法分析:  
 yii验证rulesit 分类: Yii yii的rules验证 cValidator主要属性 attributes ,builtInValidators,enableClientValidation,message,on,safe,skipOnError 
 </div>
                                </li>
                                <li><a href="/article/2793.htm"
                                       title="基于vagrant的redis主从实验" target="_blank">基于vagrant的redis主从实验</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/vagrant/1.htm">vagrant</a>
                                    <div>平台: Mac 
工具: Vagrant 
系统: Centos6.5 
实验目的: Redis主从 
  
实现思路 
制作一个基于sentos6.5, 已经安装好reids的box, 添加一个脚本配置从机, 然后作为后面主机从机的基础box 
  
制作sentos6.5+redis的box 
  
mkdir vagrant_redis 
cd vagrant_</div>
                                </li>
                                <li><a href="/article/2920.htm"
                                       title="Memcached(二)、Centos安装Memcached服务器" target="_blank">Memcached(二)、Centos安装Memcached服务器</a>
                                    <span class="text-muted">frank1234</span>
<a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/memcached/1.htm">memcached</a>
                                    <div>一、安装gcc 
rpm和yum安装memcached服务器连接没有找到,所以我使用的是make的方式安装,由于make依赖于gcc,所以要先安装gcc 
 
开始安装,命令如下,[color=red][b]顺序一定不能出错[/b][/color]:

建议可以先切换到root用户,不然可能会遇到权限问题:su root 输入密码......


rpm -ivh kernel-head</div>
                                </li>
                                <li><a href="/article/3047.htm"
                                       title="Remove Duplicates from Sorted List" target="_blank">Remove Duplicates from Sorted List</a>
                                    <span class="text-muted">hcx2013</span>
<a class="tag" taget="_blank" href="/search/remove/1.htm">remove</a>
                                    <div>Given a sorted linked list, delete all duplicates such that each element appear only once. 
For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return&</div>
                                </li>
                                <li><a href="/article/3174.htm"
                                       title="Spring4新特性——JSR310日期时间API的支持" target="_blank">Spring4新特性——JSR310日期时间API的支持</a>
                                    <span class="text-muted">jinnianshilongnian</span>
<a class="tag" taget="_blank" href="/search/spring4/1.htm">spring4</a>
                                    <div>Spring4新特性——泛型限定式依赖注入 
Spring4新特性——核心容器的其他改进 
Spring4新特性——Web开发的增强 
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC  
Spring4新特性——Groovy Bean定义DSL 
Spring4新特性——更好的Java泛型操作API  
Spring4新</div>
                                </li>
                                <li><a href="/article/3301.htm"
                                       title="浅谈enum与单例设计模式" target="_blank">浅谈enum与单例设计模式</a>
                                    <span class="text-muted">247687009</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a>
                                    <div>在JDK1.5之前的单例实现方式有两种(懒汉式和饿汉式并无设计上的区别故看做一种),两者同是私有构
造器,导出静态成员变量,以便调用者访问。

第一种 
package singleton;

public class Singleton {
        //导出全局成员
        public final static Singleton INSTANCE = new S</div>
                                </li>
                                <li><a href="/article/3428.htm"
                                       title="使用switch条件语句需要注意的几点" target="_blank">使用switch条件语句需要注意的几点</a>
                                    <span class="text-muted">openwrt</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/break/1.htm">break</a><a class="tag" taget="_blank" href="/search/switch/1.htm">switch</a>
                                    <div>1. 当满足条件的case中没有break,程序将依次执行其后的每种条件(包括default)直到遇到break跳出 
 
int main()
{
    int n = 1;
    switch(n) {
    case 1:
        printf("--1--\n");
    default:
        printf("defa</div>
                                </li>
                                <li><a href="/article/3555.htm"
                                       title="配置Spring Mybatis JUnit测试环境的应用上下文" target="_blank">配置Spring Mybatis JUnit测试环境的应用上下文</a>
                                    <span class="text-muted">schnell18</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/JUnit/1.htm">JUnit</a>
                                    <div>Spring-test模块中的应用上下文和web及spring boot的有很大差异。主要试下来差异有: 
 
 单元测试的app context不支持从外部properties文件注入属性 
 @Value注解不能解析带通配符的路径字符串 
 
解决第一个问题可以配置一个PropertyPlaceholderConfigurer的bean。 
第二个问题的具体实例是: 
   </div>
                                </li>
                                <li><a href="/article/3682.htm"
                                       title="Java 定时任务总结一" target="_blank">Java 定时任务总结一</a>
                                    <span class="text-muted">tuoni</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/timer/1.htm">timer</a><a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a><a class="tag" taget="_blank" href="/search/timertask/1.htm">timertask</a>
                                    <div> Java定时任务总结  一.从技术上分类大概分为以下三种方式:  1.Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务;   说明:    java.util.Timer定时器,实际上是个线程,定时执行TimerTask类 &</div>
                                </li>
                                <li><a href="/article/3809.htm"
                                       title="一种防止用户生成内容站点出现商业广告以及非法有害等垃圾信息的方法" target="_blank">一种防止用户生成内容站点出现商业广告以及非法有害等垃圾信息的方法</a>
                                    <span class="text-muted">yangshangchuan</span>
<a class="tag" taget="_blank" href="/search/rank/1.htm">rank</a><a class="tag" taget="_blank" href="/search/%E7%9B%B8%E4%BC%BC%E5%BA%A6%E8%AE%A1%E7%AE%97/1.htm">相似度计算</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E6%9C%AC%E7%9B%B8%E4%BC%BC%E5%BA%A6/1.htm">文本相似度</a><a class="tag" taget="_blank" href="/search/%E8%AF%8D%E8%A2%8B%E6%A8%A1%E5%9E%8B/1.htm">词袋模型</a><a class="tag" taget="_blank" href="/search/%E4%BD%99%E5%BC%A6%E7%9B%B8%E4%BC%BC%E5%BA%A6/1.htm">余弦相似度</a>
                                    <div>本文描述了一种在ITEYE博客频道上面出现的新型的商业广告形式及其应对方法,对于其他的用户生成内容站点类型也具有同样的适用性。 
  
最近在ITEYE博客频道上面出现了一种新型的商业广告形式,方法如下: 
    1、注册多个账号(一般10个以上)。 
    2、从多个账号中选择一个账号,发表1-2篇博文</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>