Node实践总结3——routes

routes

一个传统的网站往往会有许多路径(/,/login,/user),不同的路径对应不同的页面,有不同的处理逻辑,涉及表单的页面往往还会同时存在getpost两种形式的请求,其往往也承担了核心的业务。


routes结构

GET

先摘一段我工程的代码举个例子:

router.get('/', async function (ctx, next) {
  await ctx.render('index', {
    title: 'OA',
    user: ctx.session.user
  });
});
router.get('/reg', async function (ctx, next) {
  await ctx.render('reg', {
    title: 'OA-注册'
  });
});
router.get('/login', async function (ctx, next) {
  await ctx.render('login', {
    title: 'OA-登录'
  });
});
router.get('/logout', async function (ctx, next) {
  ctx.session.user = null;
  return ctx.redirect('/');
});
router.get('/user_app', async function (ctx, next) {
  await ctx.render('user_app', {
    title: 'OA-应用角色管理'
  });
});
router.get('/user_db', async function (ctx, next) {
  await ctx.render('user_db', {
    title: 'OA-数据库角色管理'
  });
});
router.get('/waf_log', async function (ctx, next) {
  var wafLogs = await WafLogs.fetchAll();//从数据库中查询所有的日志信息
  var logs = {};
  for(var i = 0;i < wafLogs.length;i++){
    logs[i] = wafLogs.models[i].attributes;
  }

  await ctx.render('waf_log', {
    title: 'OA-waf日志',
    logs: logs
  });
});

这一部分基本都是简单的get页面的请求,koa使用ctx.render(模板名,{模板需要的变量})做页面渲染,第一个参数指定要使用哪一个模板文件作为返回的页面,第二个参数用于传入变量给jade模板使用。

GET请求时,通常需要服务器返回一个静态页面,所以逻辑都还算比较简单,只需要指定好页面模板和相应的变量即可。

上述例子中,有一个GET /waf_log的route比较特别,这一个get请求需要服务器先查询存放日志的数据库,将日志信息保存成json格式,再由render函数传给模板进行渲染,下面将这一部分前后端的关键代码放在一起对比的看一下。

//后端
router.get('/waf_log', async function (ctx, next) {
  var wafLogs = await WafLogs.fetchAll();//从数据库中查询所有的日志信息
  var logs = {};
  for(var i = 0;i < wafLogs.length;i++){
    logs[i] = wafLogs.models[i].attributes;
  }

  await ctx.render('waf_log', {
    title: 'OA-waf日志',
    logs: logs
  });
});
//前端
doctype html
html
  head
    meta(charset='utf-8')
    title= title
    link(rel='stylesheet' href='http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css')
    link(rel='stylesheet' href='/stylesheets/mycss.css')
    script(src='http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js')
    script(src='http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js')
body
    div.container
      div.row
        ul.list-inline
          li.col-lg-3.nonpadding
            p.content-title WAF日志
          li.col-lg-6.nonpadding
          li.float-right.col-lg-3.nonpadding
            div.input-group
              input#searchBox.form-control(type='text',placeholder='输入关键字,支持模糊查询',required)
              span.input-group-btn
                input.btn.btn-warning.btn-search(type='submit',value='搜索') 
      div#table.row
        table.table
          thead
            tr
              th 序号(id)
              th 时间(time)
              th 用户名(username)
              th 访问的功能(function
              th 访问的URL(url)
              th 参数(param)
              th 操作结果(result)
          tbody
            each log in logs
              tr
              each val in log
                td #{val} 

可以看到后端传给模板两个参数{title: 'OA-waf日志',logs: logs}
模板中title= title,说明前端页面中</code>标签内容是一个变量,值是传入的title参数的值, <br> 模板中<code>tbody</code>下是两个each循环,用于将传入的logs解析出来,动态的生成表格。</p> <p><code>async</code>和<code>await</code>是ES7标准中用于处理异步操作的关键字,<code>async</code>声明的函数A中可以使用<code>await</code>调用别的函数B,并等到函数B返回之后继续执行A剩余的部分。</p> <p><code>ctx</code>是koa2中包装<code>req</code>和<code>res</code>的对象。</p> <p><code>next</code>用于链式操作,指代当前函数的下一个函数,常常通过<code>await next()</code>调用。</p> <hr> <h2 id="post">POST</h2> <p>下面这一部分的routes相对复杂一些:</p> <pre class="prettyprint"><code class=" hljs cs">router.post(<span class="hljs-string">'/reg'</span>, <span class="hljs-keyword">async</span> function (ctx, next) { <span class="hljs-keyword">if</span>(ctx.request.body[<span class="hljs-string">'username'</span>].length > <span class="hljs-number">25</span>) { <span class="hljs-comment">//判断用户名是否过长,数据库设置username字段为varchar(25)</span> <span class="hljs-keyword">await</span> ctx.render(<span class="hljs-string">'reg'</span>, { title: <span class="hljs-string">'OA-注册'</span>, error: <span class="hljs-string">'用户名不得超过25个字符'</span> }); } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(ctx.request.body[<span class="hljs-string">'password2'</span>] !== ctx.request.body[<span class="hljs-string">'password'</span>]) { <span class="hljs-comment">//判断两次密码是否一致</span> console.log(<span class="hljs-string">'两次密码不一致'</span>); <span class="hljs-keyword">await</span> ctx.render(<span class="hljs-string">'reg'</span>, { title: <span class="hljs-string">'OA-注册'</span>, error: <span class="hljs-string">'两次密码不一致'</span> }); } <span class="hljs-keyword">else</span> { <span class="hljs-comment">//判断用户名是否存在</span> <span class="hljs-keyword">var</span> count = <span class="hljs-keyword">await</span> Users.<span class="hljs-keyword">where</span>(<span class="hljs-string">'username'</span>, ctx.request.body[<span class="hljs-string">'username'</span>]).count(<span class="hljs-string">'username'</span>); <span class="hljs-keyword">if</span>(count != <span class="hljs-number">0</span>) { console.log(<span class="hljs-string">'用户名已存在!'</span>); <span class="hljs-keyword">await</span> ctx.render(<span class="hljs-string">'reg'</span>, { title: <span class="hljs-string">'OA-注册'</span>, error: <span class="hljs-string">'用户名已存在'</span> }); } <span class="hljs-keyword">else</span> { <span class="hljs-keyword">var</span> hmac = crypto.createHmac(<span class="hljs-string">'sha256'</span>, <span class="hljs-string">'liuyueyi'</span>); <span class="hljs-keyword">var</span> password = hmac.update(ctx.request.body[<span class="hljs-string">'password'</span>]).digest(<span class="hljs-string">'hex'</span>); console.log(password); console.log(password.length); <span class="hljs-keyword">var</span> newUser = <span class="hljs-keyword">new</span> Users({ username: ctx.request.body[<span class="hljs-string">'username'</span>], password: password }); <span class="hljs-keyword">await</span> newUser.save(); console.log(<span class="hljs-string">'注册成功,可以直接登录!'</span>); ctx.session.user = newUser; <span class="hljs-keyword">await</span> ctx.render(<span class="hljs-string">'reg'</span>, { title: <span class="hljs-string">'OA-注册'</span>, success: <span class="hljs-string">'注册成功,可以直接登录'</span> }); <span class="hljs-keyword">return</span> ctx.redirect(<span class="hljs-string">'/login'</span>); } } }); router.post(<span class="hljs-string">'/login'</span>, <span class="hljs-keyword">async</span> function (ctx, next) { <span class="hljs-comment">//需要判断的逻辑:用户名不存在或者密码错误</span> <span class="hljs-keyword">var</span> count = <span class="hljs-keyword">await</span> Users.<span class="hljs-keyword">where</span>(<span class="hljs-string">'username'</span>, ctx.request.body[<span class="hljs-string">'username'</span>]).count(<span class="hljs-string">'username'</span>); <span class="hljs-keyword">if</span>(count == <span class="hljs-number">0</span>) { console.log(<span class="hljs-string">'用户名不存在!'</span>); <span class="hljs-keyword">await</span> ctx.render(<span class="hljs-string">'login'</span>, { title: <span class="hljs-string">'OA-登录'</span>, error: <span class="hljs-string">'用户名不存在'</span> }); } <span class="hljs-keyword">else</span> { <span class="hljs-keyword">var</span> hmac = crypto.createHmac(<span class="hljs-string">'sha256'</span>, <span class="hljs-string">'liuyueyi'</span>); <span class="hljs-keyword">var</span> password = hmac.update(ctx.request.body[<span class="hljs-string">'password'</span>]).digest(<span class="hljs-string">'hex'</span>); <span class="hljs-keyword">var</span> user = <span class="hljs-keyword">await</span> Users.<span class="hljs-keyword">where</span>(<span class="hljs-string">'username'</span>, ctx.request.body[<span class="hljs-string">'username'</span>]).fetch(); <span class="hljs-keyword">if</span> (user.attributes.password == password) { console.log(<span class="hljs-string">'登陆成功!'</span>+ user.attributes.username); ctx.session.user = user.attributes.username; <span class="hljs-keyword">return</span> ctx.response.redirect(<span class="hljs-string">'/'</span>); } <span class="hljs-keyword">else</span> { console.log(<span class="hljs-string">'密码错误!'</span>); <span class="hljs-keyword">await</span> ctx.render(<span class="hljs-string">'login'</span>, { title: <span class="hljs-string">'OA-登录'</span>, error: <span class="hljs-string">'密码错误'</span> }); } } });</code></pre> <p>这一部分是处理前端post回来的表单数据的逻辑代码。</p> <hr> <h2 id="render和redirect">render和redirect</h2> <p>上面的代码中,页面切换使用到了两种方法</p> <ul> <li>render</li> <li>redirect</li> </ul> <p>二者是有区别的。</p> <p>render用于页面渲染,是将指定的模板通过引擎转换成html之后直接画在当前页面之上,如果render指定的模板和当前页不同,地址栏上可以清晰的看见路径没有变化。 <br> redirect则是用于页面跳转,服务器端的后台可以看到跳转的时候响应码是302,并且地址栏的路径也会变化。</p> <hr> <h2 id="ajax">AJAX</h2> <p>这一部分我之后单独写。</p> <hr> <p>routes代码可以直接写在app.js当中,但是当业务越来越复杂,页面越来越多的时候,app.js会变得很长,从而不易维护,所以正确的做法是将其移到routes路径下,做成一个模块,使用的时候导入到app.js中。</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1306287336685867008"></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">你可能感兴趣的:(Node.js,node,route)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1891212308835790848.htm" title="在nodejs中使用RabbitMQ(六)sharding消息分片" target="_blank">在nodejs中使用RabbitMQ(六)sharding消息分片</a> <span class="text-muted">konglong127</span> <a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a><a class="tag" taget="_blank" href="/search/rabbitmq/1.htm">rabbitmq</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>RabbitMQ的分片插件(rabbitmq_sharding)允许将消息分布到多个队列中,这在消息量很大或处理速度要求高的情况下非常有用。分片功能通过将消息拆分到多个队列中来平衡负载,从而提升消息处理的吞吐量和可靠性。它能够在多个队列之间分配负载,避免单个队列过载。(注:不能单独消费分片消息。消息分片不利于消息顺序区分)启用消息分片插件。rabbitmq-pluginsenablerabbitm</div> </li> <li><a href="/article/1891199074070228992.htm" title="Hadoop常用端口号" target="_blank">Hadoop常用端口号</a> <span class="text-muted">海洋 之心</span> <a class="tag" taget="_blank" href="/search/Hadoop%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3/1.htm">Hadoop问题解决</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/hbase/1.htm">hbase</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>Hadoop是一个由多个组件构成的分布式系统,每个组件都会使用一些特定的端口号来进行通信和交互。以下是Hadoop2.x常用的端口号列表:HDFS端口号:NameNode:50070SecondaryNameNode:50090DataNode:50010DataNode(数据传输):50020YARN端口号:ResourceManager:8088NodeManager:8042MapReduc</div> </li> <li><a href="/article/1891166795822329856.htm" title="npm : 无法加载文件 npm.ps1" target="_blank">npm : 无法加载文件 npm.ps1</a> <span class="text-muted">魔兽-SS</span> <a class="tag" taget="_blank" href="/search/node/1.htm">node</a><a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>npm:无法加载文件D:\ProgramFiles(x86)\nodejs\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅https:/go.microsoft.com/fwlink/?LinkID=135170中的about_Execution_Policies。所在位置行:1字符:1npmCategoryInfo:SecurityError:([],PSSecurityExc</div> </li> <li><a href="/article/1891139692934524928.htm" title="vue点击左边导航,右边出现页面步骤" target="_blank">vue点击左边导航,右边出现页面步骤</a> <span class="text-muted">胡桃不是夹子</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>vue点击左边导航,右边出现页面步骤一定要import不然会出错index.jsCourse作为Homeview子路由Homeview加入点击跳转父Homeview中有RouterView(路由出口,跳转至相应路径)和RouterLink(点击跳转)跳转的页面都为Homeview子只有为el-menu-item标签时,index才会和default-active配对生效高亮:default-act</div> </li> <li><a href="/article/1891135402752929792.htm" title="AWS Fargate 部署流程图及说明" target="_blank">AWS Fargate 部署流程图及说明</a> <span class="text-muted">ivwdcwso</span> <a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/aws/1.htm">aws</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E7%A8%8B%E5%9B%BE/1.htm">流程图</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/ECS/1.htm">ECS</a><a class="tag" taget="_blank" href="/search/Fargate/1.htm">Fargate</a><a class="tag" taget="_blank" href="/search/%E6%97%A0%E6%9C%8D%E5%8A%A1/1.htm">无服务</a> <div>背景在云原生应用开发和部署过程中,容器化部署已成为主流选择。AWSFargate作为一种无服务器计算引擎,让开发团队能够专注于应用程序开发,而无需管理底层基础设施。然而,要实现Fargate服务的自动化部署,需要协调多个AWS服务和组件,包括ECR、ALB、Route53等。为了使部署流程更加清晰和规范,本文提供了一个完整的部署流程图及详细说明。完整部署流程图</div> </li> <li><a href="/article/1891109169407258624.htm" title="【封印宝石——线段树】" target="_blank">【封印宝石——线段树】</a> <span class="text-muted">Kent_J_Truman</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/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>题目分析封印宝石题解https://www.acwing.com/solution/content/261922/代码#includeusingnamespacestd;usingpll=pair;#definexfirst#defineysecondconstintN=1e5+10;structnode{intl,r;intv1,v2;inti1,i2;}tr[4*N];intn,k,a[N],</div> </li> <li><a href="/article/1891101604044664832.htm" title="Vue 2 路由指南:从基础到高级" target="_blank">Vue 2 路由指南:从基础到高级</a> <span class="text-muted">鸡吃丸子</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</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%E6%A1%86%E6%9E%B6/1.htm">前端框架</a> <div>注意:对于代码看不清的部分,用鼠标选中就能看到了,背景颜色和字体颜色过于接近,我也不知道怎么调,只能这样子先看着了一、VueRouter是什么?VueRouter是Vue.js官方的路由管理器,它允许你在单页面应用中通过不同的URL显示不同的组件。VueRouter与Vue.js核心深度集成,提供了声明式的路由定义、嵌套路由、动态路由、导航守卫等功能,帮助开发者构建复杂的单页面应用。二、安装与配置</div> </li> <li><a href="/article/1891000740781027328.htm" title="计算机网络" target="_blank">计算机网络</a> <span class="text-muted">Buleall</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>因特网:全球范围的计算机网络网络边缘:端系统(endsystem)=主机(host因其容纳应用程序):接入因特网的计算机及其他设备(移动设备:手机,平板/服务器/PC/手表,汽车等等)主机分为:客户(client)和服务器(server)客户:PC/手机/平板服务器->大部分属于大型数据中心(datacenter)接入网:将端系统连接至边缘路由器(edgerouter)的网络边缘路由器:端系统到其</div> </li> <li><a href="/article/1890985237278683136.htm" title="区块链Arbitrum主网节点搭建" target="_blank">区块链Arbitrum主网节点搭建</a> <span class="text-muted">MQLYES</span> <a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%9D%97%E9%93%BE/1.htm">区块链</a> <div>文章目录0.前言1.区块数据镜像下载2.执行docker命令问题0.前言本文是按照官方参考资料基于docker的方式成功搭建arbitrum主网节点。官方文档地址https://docs.arbitrum.io/run-arbitrum-node/run-full-node1.区块数据镜像下载因为区块镜像数据比较大,强烈建议先把镜像下载下来,采用本地初始化的方式同步历史数据。新建文件夹用于存储区块</div> </li> <li><a href="/article/1890979437760016384.htm" title="Elasticsearch-API命令行相关操作手册" target="_blank">Elasticsearch-API命令行相关操作手册</a> <span class="text-muted">少儿频道</span> <a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>系列文章目录第一章es集群搭建文章目录系列文章目录前言esApi操作总结前言通过第一章学习es集群搭建流程及es基本概念后,在本章内容中,我们主要对es的基本命令行操作进行一次基本学习,来源于工作中的整理。esApi操作1.查看没有配置密码的es集群节点curl-XGEThttp://ip:9200/_cat/nodes?v2.查看配置了密码的es集群节点(关于es集群配置认证密码将在下章讲)cu</div> </li> <li><a href="/article/1890965807396089856.htm" title="Vue学习笔记3" target="_blank">Vue学习笔记3</a> <span class="text-muted">Jyywww121</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</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%AC%94%E8%AE%B0/1.htm">笔记</a> <div>Vue学习笔记一、单页应用程序&路由介绍1、介绍单页应用程序:所有的功能都在一个页面上实现优点:按需更新性能高,开发效率高,用户体验好缺点:学习成本高,首屏加载慢,不利于SEO应用场景:系统类网站、内部网站、文档类网站、移动端站点路由介绍生活中的路由:设备和ip的映射关系Vue中的路由:路径和组件的映射关系2、路由的基本应用VueRouter的介绍:作用:修改地址栏路径时,切换显示匹配的组件路由的</div> </li> <li><a href="/article/1890961019417718784.htm" title="openwrt 桥模式下ebtables转发所有流量到三层,导致DHCP无法获取IP解决方案" target="_blank">openwrt 桥模式下ebtables转发所有流量到三层,导致DHCP无法获取IP解决方案</a> <span class="text-muted">wellnw</span> <a class="tag" taget="_blank" href="/search/Openwrt/1.htm">Openwrt</a> <div>需求需要统计桥模式下的终端设备流量解决方案使用ebtables将二层流量转到三层然后处理,使用以下指令实现ebtables-tbroute-ABROUTING-pipv4-jredirect出现问题桥模式下接入的设备无法获取到IP地址问题分析由于插入的路由规则将所有流量转发到三层,导致DHCP数据无法正常交互解决方案ebtables-tbroute-IBROUTING-pipv4--ip-prot</div> </li> <li><a href="/article/1890933016667156480.htm" title="今日写题04work" target="_blank">今日写题04work</a> <span class="text-muted">kukubuzai</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</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/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a> <div>题目:移除链表元素两种实现思路思路一使用双指针,prev,cur快慢指针解决。当cur不等于val,两个指针跳过。当等于val时,要考虑两种情况,一种是pos删,一种是头删除。pos删除就是正常情况,但头删是一种特殊情况,比如第一个数据就是等于val。所以,我们在这里分类处理。structListNode*removeElements(structListNode*head,intval){str</div> </li> <li><a href="/article/1890921033691623424.htm" title="鸿蒙next自动打包脚本" target="_blank">鸿蒙next自动打包脚本</a> <span class="text-muted">anthonyzhu</span> <a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a> <div>简要描述鸿蒙提供相应的打包流水线的官方文档鸿蒙next流水线官方描述提供的是单独的命令行工具包的打包流程IDE打包如果在打包机上安装了IDE,那就没有必要安装命令行工具包,只需要设置几个环境参数exportPATH=$PATH:/usr/local/bin/node;exportNODE_HOME=/Applications/DevEco-Studio.app/Contents/tools/nod</div> </li> <li><a href="/article/1890897207645761536.htm" title="HBase的合并操作" target="_blank">HBase的合并操作</a> <span class="text-muted">b1gx</span> <a class="tag" taget="_blank" href="/search/HBase/1.htm">HBase</a> <div>compact的作用flush操作会将memstore的数据落地为一个个StoreFile(HFile),那么随着时间的增长在HDFS上面就会有很多的HFile文件,这样对读操作会产生比较大的影响(读操作会对HFile进行归并查询),并且对DataNode的压力也会比较大。为了降低对读操作的影响,可以对这些HFile进行compact操作,但是compact操作会产生大量的IO,所以可以看出com</div> </li> <li><a href="/article/1890891782003159040.htm" title="利用子问题思路解决二叉树相关Oj题" target="_blank">利用子问题思路解决二叉树相关Oj题</a> <span class="text-muted">Excuse_lighttime</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</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/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>目录检查两棵树是否相同:题目链接判断另⼀棵树的子树是否存在:题目链接翻转二叉树:题目链接判断⼀棵二叉树是否是平衡二叉树:题目链接判断对称二叉树:题目链接二叉树的层序遍历二叉树的分层遍历:题目链接判断一棵树是否为完全二叉树:检查两棵树是否相同:题目链接代码实现:publicbooleanisSameTree(TreeNodep,TreeNodeq){if(p==null&&q!=null||q==n</div> </li> <li><a href="/article/1890879303453831168.htm" title="Unity的开发框架" target="_blank">Unity的开发框架</a> <span class="text-muted">yuhahahhh</span> <a class="tag" taget="_blank" href="/search/unity/1.htm">unity</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F%E5%BC%95%E6%93%8E/1.htm">游戏引擎</a> <div>一.分析工程结构框架GameObject与ComponentGameObject:游戏对象相当于组件的容器Component:组件附于游戏对象不同的特性二.工程文件夹的管理结构新建一个Unity工程,目录结构:1.Assert文件2.Library文件3.ProjectSettings文件4.运行时还会多出Temp目录5.如果用Monodevelop或VS打开还会生成很多工程文件工程文件夹功能:文</div> </li> <li><a href="/article/1890877412351209472.htm" title="两种得到二叉树深度的递归方法" target="_blank">两种得到二叉树深度的递归方法</a> <span class="text-muted">chenhehe11</span> <a class="tag" taget="_blank" href="/search/%E8%B7%9F%E7%9D%80%E7%81%B5%E8%8C%B6%E5%B1%B1%E5%AD%A6%E7%AE%97%E6%B3%95/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/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>两种得到二叉树深度的递归方法104.二叉树的最大深度题目分析代码1代码2104.二叉树的最大深度给定一个二叉树root,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。示例1:输入:root=[3,9,20,null,null,15,7]输出:3示例2:输入:root=[1,null,2]输出:2提示:树中节点的数量在[0,104]区间内。-100<=Node.va</div> </li> <li><a href="/article/1890866571493044224.htm" title="【Node-Red】Function节点教学" target="_blank">【Node-Red】Function节点教学</a> <span class="text-muted">零炻大礼包</span> <a class="tag" taget="_blank" href="/search/Node-Red/1.htm">Node-Red</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>本篇来讲在Node-Red中编写函数时用到的一个至关重要的节点:function。function节点允许消息运行JavaScript代码。其中部分内容来自官方文档翻译:function节点用户指南。Function节点教学1.变量定义2.返回值1)返回单条数据进阶1进阶22)返回多条数据3.其他变量定义1)数组定义buffer2.Array4.运算符1)算数运算符2)赋值运算符3)字符与运算符4</div> </li> <li><a href="/article/1890864931012669440.htm" title="如何用源码快速搭建属于你的外卖系统?" target="_blank">如何用源码快速搭建属于你的外卖系统?</a> <span class="text-muted">万岳科技系统开发</span> <a class="tag" taget="_blank" href="/search/%E5%A4%96%E5%8D%96%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91/1.htm">外卖系统开发</a><a class="tag" taget="_blank" href="/search/%E5%A4%96%E5%8D%96%E7%B3%BB%E7%BB%9F/1.htm">外卖系统</a><a class="tag" taget="_blank" href="/search/%E5%A4%96%E5%8D%96%E7%B3%BB%E7%BB%9F%E6%BA%90%E7%A0%81/1.htm">外卖系统源码</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a><a class="tag" taget="_blank" href="/search/uniapp/1.htm">uniapp</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>开发一个外卖系统可能听起来很复杂,但如果你有一套完整的源码,那么搭建过程就会变得简单许多。本文将为你详细讲解如何使用现成的源码快速搭建一个外卖系统,并通过具体的代码示例来帮助你理解和实施这个过程。一、准备工作在开始搭建之前,你需要做好以下准备工作:开发环境搭建:下载并安装开发工具,例如VisualStudioCode、MySQL、Node.js或其他符合源码要求的工具。获取源码:在知名的开源平台(</div> </li> <li><a href="/article/1890844627133591552.htm" title="IoTDB 集群重启某节点失败" target="_blank">IoTDB 集群重启某节点失败</a> <span class="text-muted">铁头乔</span> <a class="tag" taget="_blank" href="/search/iotdb/1.htm">iotdb</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%E6%BA%90/1.htm">开源</a><a class="tag" taget="_blank" href="/search/%E6%97%B6%E5%BA%8F%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">时序数据库</a> <div>问题现象IoTDB1.3.3.6版本部署的3C3D集群,在重启某个节点服务时失败,报错信息为节点冲突,日志部分截图如下:问题原因当前IoTDB会根据data/confignode/system路径下的confignode-system.properties文件及data/datanode/system路径下的system.properties文件去判断是否为重启加入集群。如果该文件被误删除,则可能</div> </li> <li><a href="/article/1890830761364353024.htm" title="华为OD机试2025年E卷-完美走位[100分]( Java | Python3 | C++ | C语言 | JsNode | Go )实现100%通过率" target="_blank">华为OD机试2025年E卷-完美走位[100分]( Java | Python3 | C++ | C语言 | JsNode | Go )实现100%通过率</a> <span class="text-muted">梅花C</span> <a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAOD%E9%A2%98%E5%BA%93/1.htm">华为OD题库</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>题目描述在第一人称射击游戏中,玩家通过键盘的A、S、D、W四个按键控制游戏人物分别向左、向后、向右、向前进行移动,从而完成走位。假设玩家每按动一次键盘,游戏任务会向某个方向移动一步,如果玩家在操作一定次数的键盘并且各个方向的步数相同时,此时游戏任务必定会回到原点,则称此次走位为完美走位。现给定玩家的走位(例如:ASDA),请通过更换其中一段连续走位的方式使得原走位能够变成一个完美走位。其中待更换的</div> </li> <li><a href="/article/1890813616559550464.htm" title="Electron视图进程和主进程通讯" target="_blank">Electron视图进程和主进程通讯</a> <span class="text-muted">陆康永</span> <a class="tag" taget="_blank" href="/search/electron/1.htm">electron</a><a class="tag" taget="_blank" href="/search/electron/1.htm">electron</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>快速创建基于vue的electron项目:@quick-start/create-electron-npm视图线程也就index.html是无法直接访问这个api的(如果没有开启视图层访问nodejs的功能,现在几乎没法直接开启,开启了一堆警告提示)所以需要通过reload.js方式给index.html视图层注入对应的方法,挂在window对象下面视图层给后端发起消息如果希望通过then的方式获</div> </li> <li><a href="/article/1890807819272253440.htm" title="中间件基础运维笔记" target="_blank">中间件基础运维笔记</a> <span class="text-muted">renle0216</span> <a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>中间件环境配置1.jdk安装配置卸载openjdk#查询系统安装的jdkrpm-qa|grepjdk#卸载openjdkrpm-e--nodeps文件名或yum-yremove文件名安装jdk1.8#上传解压jdk安装包tar-zxvfjdk-8u341-linux-x64.tar.gz#配置Java环境变量vi/etc/profile#文件尾行追加以下内容exportJAVA_HOME=/opt</div> </li> <li><a href="/article/1890793438861914112.htm" title="二叉树的遍历和增删改查-2" target="_blank">二叉树的遍历和增删改查-2</a> <span class="text-muted">柏木乃一</span> <a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80%E5%AD%A6%E4%B9%A0/1.htm">c语言学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/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/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><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/1.htm">程序人生</a> <div>二叉树结点的个数对于二叉树的结点个数我们采用的递归的方式去实现,主要的思路就是遇到null就返回0,如果不是空结点,我们就返回1.再完成左右子树的递归之后,它的总数会作为结果返回。所以这个函数的声明是这样的、intbinarytreesizebata(BinraryTreeNode*root)再这里我们以前序遍历做演示具体代码如下,具体遍历规则如同前序遍历一样intbinarytreesizeba</div> </li> <li><a href="/article/1890792305711968256.htm" title="2024年最新入门基于Node的Web框架——Koa(2),2024年最新前端开发面试题及答案" target="_blank">2024年最新入门基于Node的Web框架——Koa(2),2024年最新前端开发面试题及答案</a> <span class="text-muted">2301_82243626</span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/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/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>最后文章到这里就结束了,如果觉得对你有帮助可以点个赞哦开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】},“querystring”:“search=koa&keyword=context”}responseresponse对象是用于设置一些响应信息给客户端,这些和http请求的响应字段是一样的。比如说可以设置状态码、响应格式等相关信息。app.use(async(c</div> </li> <li><a href="/article/1890787261994299392.htm" title="代码随想录--160 相交链表" target="_blank">代码随想录--160 相交链表</a> <span class="text-muted">Estrella-q</span> <a class="tag" taget="_blank" href="/search/LeetCode/1.htm">LeetCode</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8/1.htm">链表</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>160相交链表解法1/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*getIntersectionNode(structListNode*headA,structListNode*headB){//初始化两个指针ptrA和ptrB,分别指向链表A和</div> </li> <li><a href="/article/1890786252517601280.htm" title="nodejs第五天 npm yarn pnpm 包管理器" target="_blank">nodejs第五天 npm yarn pnpm 包管理器</a> <span class="text-muted">大盗夕落</span> <a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/npm/1.htm">npm</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>文章目录npmpackage.json安装包全局安装配置镜像yarn安装使用镜像配置pnpm使用镜像npmnode中的包管理器叫做npm(nodepackagemanage),我们可以将自己开发的包上传到npm中共别人使用,也可以直接从npm中下载别人开发好的包npm由以下三个部分组成:npm网站https://www.npmjs.com/npmCLI(CommandLineInterface即命</div> </li> <li><a href="/article/1890785747389181952.htm" title="Windows系统部署Node.js结合内网穿透实现远程访问本地服务" target="_blank">Windows系统部署Node.js结合内网穿透实现远程访问本地服务</a> <span class="text-muted">码农阿豪@新空间</span> <a class="tag" taget="_blank" href="/search/%E5%A5%BD%E2%80%9C%E7%89%A9%E2%80%9D%E5%88%86%E4%BA%AB/1.htm">好“物”分享</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>文章目录前言1.安装Node.js环境2.创建Node.js应用3.公网访问Node.js服务3.1注册cpolar账号3.2下载cpolar客户端3.3创建隧道映射本地端口4.固定公网远程地址前言本文主要介绍如何在Windows系统本地安装Node.js环境并创建应用,并结合cpolar内网穿透工具发布公网实现远程访问本地服务详细流程。Node.js是建立在谷歌Chrome的JavaScript</div> </li> <li><a href="/article/1890775957623599104.htm" title="cocos creator从零开发五子棋(06)-棋盘落子" target="_blank">cocos creator从零开发五子棋(06)-棋盘落子</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/cocos/1.htm">cocos</a> <div>编辑scripts/Game.ts,添加GRID_INIT常量配置第一个落子的棋子。constCHESS_WHITE='white'constGRID_INIT=[7,7]添加如下成员属性。@property(cc.Node)privaterootNode:cc.Node=null//已下棋的格子privatechessMap:Map=newMap()//该谁下棋了(black|white)pri</div> </li> <li><a href="/article/109.htm" title="统一思想认识" target="_blank">统一思想认识</a> <span class="text-muted">永夜-极光</span> <a class="tag" taget="_blank" href="/search/%E6%80%9D%E6%83%B3/1.htm">思想</a> <div>1.统一思想认识的基础,才能有的放矢  原因:    总有一种描述事物的方式最贴近本质,最容易让人理解.    如何让教育更轻松,在于找到最适合学生的方式.          难点在于,如何模拟对方的思维基础选择合适的方式.   &</div> </li> <li><a href="/article/236.htm" title="Joda Time使用笔记" target="_blank">Joda Time使用笔记</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/joda+time/1.htm">joda time</a> <div>Joda Time的介绍可以参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-jodatime.html 工作中也常常用到Joda Time,为了避免每次使用都查API,记录一下常用的用法:     /** * DateTime变化(增减) */ @Tes</div> </li> <li><a href="/article/363.htm" title="FileUtils API" target="_blank">FileUtils API</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/FileUtils/1.htm">FileUtils</a><a class="tag" taget="_blank" href="/search/FileUtils+API/1.htm">FileUtils API</a> <div>转载请出自出处:http://eksliang.iteye.com/blog/2217374 一、概述 这是一个Java操作文件的常用库,是Apache对java的IO包的封装,这里面有两个非常核心的类FilenameUtils跟FileUtils,其中FilenameUtils是对文件名操作的封装;FileUtils是文件封装,开发中对文件的操作,几乎都可以在这个框架里面找到。 非常的好用。 </div> </li> <li><a href="/article/490.htm" title="各种新兴技术" target="_blank">各种新兴技术</a> <span class="text-muted">不懂事的小屁孩</span> <a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF/1.htm">技术</a> <div>1:gradle Gradle 是以 Groovy 语言为基础,面向Java应用为主。基于DSL(领域特定语言)语法的自动化构建工具。 现在构建系统常用到maven工具,现在有更容易上手的gradle, 搭建java环境: http://www.ibm.com/developerworks/cn/opensource/os-cn-gradle/ 搭建android环境: http://m</div> </li> <li><a href="/article/617.htm" title="tomcat6的https双向认证" target="_blank">tomcat6的https双向认证</a> <span class="text-muted">酷的飞上天空</span> <a class="tag" taget="_blank" href="/search/tomcat6/1.htm">tomcat6</a> <div>1.生成服务器端证书 keytool -genkey -keyalg RSA -dname "cn=localhost,ou=sango,o=none,l=china,st=beijing,c=cn" -alias server -keypass password -keystore server.jks -storepass password -validity 36</div> </li> <li><a href="/article/744.htm" title="托管虚拟桌面市场势不可挡" target="_blank">托管虚拟桌面市场势不可挡</a> <span class="text-muted">蓝儿唯美</span> <div>用户还需要冗余的数据中心,dinCloud的高级副总裁兼首席营销官Ali Din指出。该公司转售一个MSP可以让用户登录并管理和提供服务的用于DaaS的云自动化控制台,提供服务或者MSP也可以自己来控制。 在某些情况下,MSP会在dinCloud的云服务上进行服务分层,如监控和补丁管理。 MSP的利润空间将根据其参与的程度而有所不同,Din说。 “我们有一些合作伙伴负责将我们推荐给客户作为个</div> </li> <li><a href="/article/871.htm" title="spring学习——xml文件的配置" target="_blank">spring学习——xml文件的配置</a> <span class="text-muted">a-john</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>在Spring的学习中,对于其xml文件的配置是必不可少的。在Spring的多种装配Bean的方式中,采用XML配置也是最常见的。以下是一个简单的XML配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.or</div> </li> <li><a href="/article/998.htm" title="HDU 4342 History repeat itself 模拟" target="_blank">HDU 4342 History repeat itself 模拟</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/%E6%A8%A1%E6%8B%9F/1.htm">模拟</a> <div>来源:http://acm.hdu.edu.cn/showproblem.php?pid=4342 题意:首先让求第几个非平方数,然后求从1到该数之间的每个sqrt(i)的下取整的和。 思路:一个简单的模拟题目,但是由于数据范围大,需要用__int64。我们可以首先把平方数筛选出来,假如让求第n个非平方数的话,看n前面有多少个平方数,假设有x个,则第n个非平方数就是n+x。注意两种特殊情况,即</div> </li> <li><a href="/article/1125.htm" title="java中最常用jar包的用途" target="_blank">java中最常用jar包的用途</a> <span class="text-muted">asia007</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>java中最常用jar包的用途 jar包用途axis.jarSOAP引擎包commons-discovery-0.2.jar用来发现、查找和实现可插入式接口,提供一些一般类实例化、单件的生命周期管理的常用方法.jaxrpc.jarAxis运行所需要的组件包saaj.jar创建到端点的点到点连接的方法、创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法.  w</div> </li> <li><a href="/article/1252.htm" title="ajax获取Struts框架中的json编码异常和Struts中的主控制器异常的解决办法" target="_blank">ajax获取Struts框架中的json编码异常和Struts中的主控制器异常的解决办法</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/json%E7%BC%96%E7%A0%81%E8%BF%94%E5%9B%9E%E5%BC%82%E5%B8%B8/1.htm">json编码返回异常</a> <div>一:ajax获取自定义Struts框架中的json编码  出现以下 问题:       1,强制flush输出  json编码打印在首页 2, 不强制flush js会解析json 打印出来的是错误的jsp页面   却没有跳转到错误页面 3,  ajax中的dataType的json 改为text 会</div> </li> <li><a href="/article/1379.htm" title="JUnit使用的设计模式" target="_blank">JUnit使用的设计模式</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/JUnit/1.htm">JUnit</a> <div>JUnit源代码涉及使用了大量设计模式 1、模板方法模式(Template Method)         定义一个操作中的算法骨架,而将一些步骤延伸到子类中去,使得子类可以不改变一个算法的结构,即可重新定义该算法的某些特定步骤。这里需要复用的是算法的结构,也就是步骤,而步骤的实现可以在子类中完成。   </div> </li> <li><a href="/article/1506.htm" title="Linux常用命令(摘录)" target="_blank">Linux常用命令(摘录)</a> <span class="text-muted">sunjing</span> <a class="tag" taget="_blank" href="/search/crond/1.htm">crond</a><a class="tag" taget="_blank" href="/search/chkconfig/1.htm">chkconfig</a> <div>chkconfig --list   查看linux所有服务 chkconfig --add servicename 添加linux服务 netstat -apn | grep 8080  查看端口占用 env 查看所有环境变量 echo $JAVA_HOME 查看JAVA_HOME环境变量   安装编译器 yum install -y gcc</div> </li> <li><a href="/article/1633.htm" title="【Hadoop一】Hadoop伪集群环境搭建" target="_blank">【Hadoop一】Hadoop伪集群环境搭建</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div> 结合网上多份文档,不断反复的修正hadoop启动和运行过程中出现的问题,终于把Hadoop2.5.2伪分布式安装起来,跑通了wordcount例子。Hadoop的安装复杂性的体现之一是,Hadoop的安装文档非常多,但是能一个文档走下来的少之又少,尤其是Hadoop不同版本的配置差异非常的大。Hadoop2.5.2于前两天发布,但是它的配置跟2.5.0,2.5.1没有分别。 &nb</div> </li> <li><a href="/article/1760.htm" title="Anychart图表系列五之事件监听" target="_blank">Anychart图表系列五之事件监听</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/chart/1.htm">chart</a> <div>创建图表事件监听非常简单:首先是通过addEventListener('监听类型',js监听方法)添加事件监听,然后在js监听方法中定义具体监听逻辑。 以钻取操作为例,当用户点击图表某一个point的时候弹出point的name和value,代码如下: <script> //创建AnyChart var chart = new AnyChart(); //添加钻取操作&quo</div> </li> <li><a href="/article/1887.htm" title="Web前端相关段子" target="_blank">Web前端相关段子</a> <span class="text-muted">braveCS</span> <a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF/1.htm">web前端</a> <div>Web标准:结构、样式和行为分离   使用语义化标签 0)标签的语义:使用有良好语义的标签,能够很好地实现自我解释,方便搜索引擎理解网页结构,抓取重要内容。去样式后也会根据浏览器的默认样式很好的组织网页内容,具有很好的可读性,从而实现对特殊终端的兼容。 1)div和span是没有语义的:只是分别用作块级元素和行内元素的区域分隔符。当页面内标签无法满足设计需求时,才会适当添加div</div> </li> <li><a href="/article/2014.htm" title="编程之美-24点游戏" target="_blank">编程之美-24点游戏</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.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Random; import java.util.Set; public class PointGame { /**编程之美 </div> </li> <li><a href="/article/2141.htm" title="主页面子页面传值总结" target="_blank">主页面子页面传值总结</a> <span class="text-muted">chengxuyuancsdn</span> <a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a> <div>1、showModalDialog returnValue是javascript中html的window对象的属性,目的是返回窗口值,当用window.showModalDialog函数打开一个IE的模式窗口时,用于返回窗口的值 主界面 var sonValue=window.showModalDialog("son.jsp"); 子界面 window.retu</div> </li> <li><a href="/article/2268.htm" title="[网络与经济]互联网+的含义" target="_blank">[网络与经济]互联网+的含义</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E4%BA%92%E8%81%94%E7%BD%91%2B/1.htm">互联网+</a> <div>       互联网+后面是一个人的名字 = 网络控制系统       互联网+你的名字 =  网络个人数据库       每日提示:如果人觉得不舒服,千万不要外出到处走动,就呆在床上,玩玩手游,更不能够去开车,现在交通状况不</div> </li> <li><a href="/article/2395.htm" title="oracle 创建视图 with check option" target="_blank">oracle 创建视图 with check option</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/%E8%A7%86%E5%9B%BE/1.htm">视图</a><a class="tag" taget="_blank" href="/search/view/1.htm">view</a><a class="tag" taget="_blank" href="/search/oralce/1.htm">oralce</a> <div>我们来看下面的例子: create or replace view testview as select empno,ename from emp where ename like ‘M%’ with check option; 这里我们创建了一个视图,并使用了with check option来限制了视图。 然后我们来看一下视图包含的结果: select * from testv</div> </li> <li><a href="/article/2522.htm" title="ToastPlugin插件在cordova3.3下使用" target="_blank">ToastPlugin插件在cordova3.3下使用</a> <span class="text-muted">dibov</span> <a class="tag" taget="_blank" href="/search/Cordova/1.htm">Cordova</a> <div>    自己开发的Todos应用,想实现“ 再按一次返回键退出程序 ”的功能,采用网上的ToastPlugins插件,发现代码或文章基本都是老版本,运行问题比较多。折腾了好久才弄好。下面吧基于cordova3.3下的ToastPlugins相关代码共享。       ToastPlugin.java package&nbs</div> </li> <li><a href="/article/2649.htm" title="C语言22个系统函数" target="_blank">C语言22个系统函数</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/function/1.htm">function</a> <div>C语言系统函数一、数学函数下列函数存放在math.h头文件中Double floor(double num) 求出不大于num的最大数。Double fmod(x, y) 求整数x/y的余数。Double frexp(num, exp); double num; int *exp; 将num分为数字部分(尾数)x和 以2位的指数部分n,即num=x*2n,指数n存放在exp指向的变量中,返回x。D</div> </li> <li><a href="/article/2776.htm" title="开发一个类的流程" target="_blank">开发一个类的流程</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91/1.htm">开发</a> <div>本人近日根据自己的开发经验总结了一个类的开发流程。这个流程适用于单独开发的构件,并不适用于对一个项目中的系统对象开发。开发出的类可以存入私人类库,供以后复用。   以下是开发流程: 1. 明确类的功能,抽象出类的大概结构 2. 初步设想类的接口 3. 类名设计(驼峰式命名) 4. 属性设置(权限设置) 判断某些变量是否有必要作为成员属</div> </li> <li><a href="/article/2903.htm" title="java 并发" target="_blank">java 并发</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/java+%E5%B9%B6%E5%8F%91/1.htm">java 并发</a> <div>能够写出高伸缩性的并发是一门艺术   在JAVA SE5中新增了3个包 java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks 在java的内存模型中,类的实例字段、静态字段和构成数组的对象元素都会被多个线程所共享,局部变量与方法参数都是线程私有的,不会被共享。 </div> </li> <li><a href="/article/3030.htm" title="Spring Security(11)——匿名认证" target="_blank">Spring Security(11)——匿名认证</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/ROLE_ANNOYMOUS/1.htm">ROLE_ANNOYMOUS</a><a class="tag" taget="_blank" href="/search/%E5%8C%BF%E5%90%8D/1.htm">匿名</a> <div>匿名认证 目录 1.1     配置 1.2     AuthenticationTrustResolver          对于匿名访问的用户,Spring Security支持为其建立一个匿名的AnonymousAuthenticat</div> </li> <li><a href="/article/3157.htm" title="NODEJS项目实践0.2[ express,ajax通信...]" target="_blank">NODEJS项目实践0.2[ express,ajax通信...]</a> <span class="text-muted">逐行分析JS源代码</span> <a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a><a class="tag" taget="_blank" href="/search/express/1.htm">express</a> <div>  一、前言         通过上节学习,我们已经        ubuntu系统搭建了一个可以访问的nodejs系统,并做了nginx转发。本节原要做web端服务 及 mongodb的存取,但写着写着,web端就</div> </li> <li><a href="/article/3284.htm" title="在Struts2 的Action中怎样获取表单提交上来的多个checkbox的值" target="_blank">在Struts2 的Action中怎样获取表单提交上来的多个checkbox的值</a> <span class="text-muted">lhbthanks</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a><a class="tag" taget="_blank" href="/search/checkbox/1.htm">checkbox</a> <div>第一种方法:获取结果String类型 在 Action 中获得的是一个 String 型数据,每一个被选中的 checkbox 的 value 被拼接在一起,每个值之间以逗号隔开(,)。 所以在 Action 中定义一个跟 checkbox 的 name 同名的属性来接收这些被选中的 checkbox 的 value 即可。 以下是实现的代码: 前台 HTML 代码: </div> </li> <li><a href="/article/3411.htm" title="003.Kafka基本概念" target="_blank">003.Kafka基本概念</a> <span class="text-muted">nweiren</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a> <div>Kafka基本概念:Topic、Partition、Message、Producer、Broker、Consumer。 Topic:             消息源(Message)的分类。 Partition:             Topic物理上的分组,一</div> </li> <li><a href="/article/3538.htm" title="Linux环境下安装JDK" target="_blank">Linux环境下安装JDK</a> <span class="text-muted">roadrunners</span> <a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>1、准备工作 创建JDK的安装目录: mkdir -p /usr/java/   下载JDK,找到适合自己系统的JDK版本进行下载: http://www.oracle.com/technetwork/java/javase/downloads/index.html   把JDK安装包下载到/usr/java/目录,然后进行解压: tar -zxvf jre-7</div> </li> <li><a href="/article/3665.htm" title="Linux忘记root密码的解决思路" target="_blank">Linux忘记root密码的解决思路</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>1:使用同版本的linux启动系统,chroot到忘记密码的根分区passwd改密码   2:grub启动菜单中加入init=/bin/bash进入系统,不过这时挂载的是只读分区。根据系统的分区情况进一步判断.   3: grub启动菜单中加入 single以单用户进入系统.   4:用以上方法mount到根分区把/etc/passwd中的root密码去除   例如:   ro</div> </li> <li><a href="/article/3792.htm" title="跨浏览器 HTML5 postMessage 方法以及 message 事件模拟实现" target="_blank">跨浏览器 HTML5 postMessage 方法以及 message 事件模拟实现</a> <span class="text-muted">xueyou</span> <a class="tag" taget="_blank" href="/search/jsonp/1.htm">jsonp</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a> <div>postMessage 是 HTML5 新方法,它可以实现跨域窗口之间通讯。到目前为止,只有 IE8+, Firefox 3, Opera 9, Chrome 3和 Safari 4 支持,而本篇文章主要讲述 postMessage 方法与 message 事件跨浏览器实现。postMessage 方法 JSONP 技术不一样,前者是前端擅长跨域文档数据即时通讯,后者擅长针对跨域服务端数据通讯,p</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>