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/1903777281562701824.htm" title="Node.js 包管理配置文件详解:package.json、npmrc、package-lock.json 全面解析" target="_blank">Node.js 包管理配置文件详解:package.json、npmrc、package-lock.json 全面解析</a> <span class="text-muted">还是鼠鼠</span> <a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</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><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a> <div>目录Node.js包管理配置文件详解1.package.json:Node.js项目的核心配置文件示例:完整的package.json配置关键字段解析2.package-lock.json:锁定依赖版本示例:部分package-lock.json作用如果package-lock.json出现问题3..npmrc:npm的自定义配置文件示例:修改npm源应用.npmrc配置4..nvmrc:Node</div> </li> <li><a href="/article/1903752042799755264.htm" title="在manjaro中开启多VLAN,配置永久静态IP,使用systemd-networkd配置" target="_blank">在manjaro中开启多VLAN,配置永久静态IP,使用systemd-networkd配置</a> <span class="text-muted">SunJavaApplet</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/manjaro/1.htm">manjaro</a><a class="tag" taget="_blank" href="/search/vlan/1.htm">vlan</a> <div>网络交换机给接入口配置的Trunk口,可以接入多个VLAN,安装好系统后不能上网。这里使用systemd-networkd进行配置,也可以利用iproute2或netctl配置。打开终端输入ipaddr查看网络状况1:lo:mtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000link/loopback00:00:00:00:00:00brd00:</div> </li> <li><a href="/article/1903702719542128640.htm" title="MMO基础游戏服务器架构(三):多线程消息队列" target="_blank">MMO基础游戏服务器架构(三):多线程消息队列</a> <span class="text-muted">晴空~蓝兮</span> <a class="tag" taget="_blank" href="/search/MMO%E5%8F%8C%E7%AB%AF%E6%B8%B8%E6%88%8F%E6%9E%B6%E6%9E%84/1.htm">MMO双端游戏架构</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a> <div>更多代码细节,球球各位观众老爷给鄙人的开源项目点个Star,持续更新中~[项目开源地址]3.单例消息分发类:MessageRouter消息包MessageBlock:使用值类型Struct降低GCpublicstructMessageBlock{publicBaseConnectionsender;publicIMessagemessage;}BaseManager:泛型类型安全的单例对象类,继承</div> </li> <li><a href="/article/1903692638075285504.htm" title="Go语言常用框架及工具介绍" target="_blank">Go语言常用框架及工具介绍</a> <span class="text-muted">半桶水专家</span> <a class="tag" taget="_blank" href="/search/golang%E5%85%A5%E9%97%A8/1.htm">golang入门</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>在Go语言开发中,框架和工具的选择能够显著提升开发效率和项目可维护性。以下是Go生态中常用的框架分类及详细介绍:一、Web框架Gin特点:轻量级、高性能,基于httprouter实现快速路由。优势:适合API开发,中间件支持丰富(如日志、CORS、JWT等),社区活跃。适用场景:高并发API服务、微服务、中小型Web应用。示例:r:=gin.Default()r.GET("/ping",func(</div> </li> <li><a href="/article/1903686459974545408.htm" title="Vs code搭建uniapp-vue项目" target="_blank">Vs code搭建uniapp-vue项目</a> <span class="text-muted">.try-</span> <a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a> <div>安装vue环境npminstall-g@vue/clinode版本建议18或者18以上vuecreate-pdcloudio/uni-preset-vue项目名称----正式版vuecreate-pdcloudio/uni-preset-vue#alpha项目名称----alpha版Vue3/Vite版npxdegitdcloudio/uni-preset-vue#vite项目名称---js-正式</div> </li> <li><a href="/article/1903679149852127232.htm" title="「JavaScript深入」Socket.IO:基于 WebSocket 的实时通信库" target="_blank">「JavaScript深入」Socket.IO:基于 WebSocket 的实时通信库</a> <span class="text-muted">八了个戒</span> <a class="tag" taget="_blank" href="/search/JavaScript%E7%B3%BB%E5%88%97/1.htm">JavaScript系列</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E5%AE%9D%E5%85%B8/1.htm">面试宝典</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%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/websocket/1.htm">websocket</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>Socket.IOSocket.IO的核心特性Socket.IO的架构解析Socket.IO的工作流程Socket.IO示例:使用Node.js搭建实时聊天服务器1.安装Socket.IO2.服务器端代码(Node.js)3.客户端代码(HTML+JavaScript)4.房间功能高级功能实现1.命名空间2.中间件3.二进制传输性能优化策略1.负载均衡2.资源管理3.监控与调试安全与可靠性1.安全</div> </li> <li><a href="/article/1903656714654248960.htm" title="力扣 160 - Intersection of Two Linked Lists. (相交链表) Python双指针" target="_blank">力扣 160 - Intersection of Two Linked Lists. (相交链表) Python双指针</a> <span class="text-muted">小杨快没头发了</span> <a class="tag" taget="_blank" href="/search/Leetcode/1.htm">Leetcode</a><a class="tag" taget="_blank" href="/search/%E5%88%B7%E9%A2%98/1.htm">刷题</a> <div>力扣160-IntersectionofTwoLinkedLists.(相交链表)Python双指针原题地址:https://leetcode.com/problems/intersection-of-two-linked-lists/Giventheheadsoftwosinglylinked-listsheadAandheadB,returnthenodeatwhichthetwolistsi</div> </li> <li><a href="/article/1903655831832948736.htm" title="LeetCode 160 Intersection of Two Linked Lists(链表)" target="_blank">LeetCode 160 Intersection of Two Linked Lists(链表)</a> <span class="text-muted">nudt_oys</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/LeetCode/1.htm">LeetCode</a> <div>Writeaprogramtofindthenodeatwhichtheintersectionoftwosinglylinkedlistsbegins.Forexample,thefollowingtwolinkedlists:A:a1→a2↘c1→c2→c3↗B:b1→b2→b3begintointersectatnodec1.Notes:Ifthetwolinkedlistshavenoin</div> </li> <li><a href="/article/1903651414702354432.htm" title="[LeetCode]--160. Intersection of Two Linked Lists" target="_blank">[LeetCode]--160. Intersection of Two Linked Lists</a> <span class="text-muted">杜鲁门</span> <a class="tag" taget="_blank" href="/search/LeetCode/1.htm">LeetCode</a><a class="tag" taget="_blank" href="/search/LeetCode%E7%AE%97%E6%B3%95%E5%88%86%E6%9E%90/1.htm">LeetCode算法分析</a><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%E7%9B%B8%E5%90%8C%E5%B0%BE%E9%83%A8%E7%AE%97%E6%B3%95/1.htm">链表相同尾部算法</a><a class="tag" taget="_blank" href="/search/%E9%93%BE%E8%A1%A8%E9%81%8D%E5%8E%86%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/%E9%81%8D%E5%8E%86/1.htm">遍历</a> <div>Writeaprogramtofindthenodeatwhichtheintersectionoftwosinglylinkedlistsbegins.Forexample,thefollowingtwolinkedlists:A:a1→a2↘c1→c2→c3↗B:b1→b2→b3begintointersectatnodec1.Notes:Ifthetwolinkedlistshavenoin</div> </li> <li><a href="/article/1903633388137410560.htm" title="如何用 Python 实现树结构" target="_blank">如何用 Python 实现树结构</a> <span class="text-muted">不辉放弃</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、树结构基础认知1.1树的四大特征层级关系:父子节点的从属关系唯一根节点:访问起点无循环:从根到叶的路径不形成环N叉分支:每个节点可有多个子节点1.2核心组件解析classTreeNode:def__init__(self,data):self.data=data#节点存储的数据self.children=[]#子节点容器(多叉树特性)defadd_child(self,node):self.c</div> </li> <li><a href="/article/1903630365247991808.htm" title="【网络】数据流(Data Workflow)Routes(路由)、Controllers(控制器)、Models(模型) 和 Middleware(中间件)" target="_blank">【网络】数据流(Data Workflow)Routes(路由)、Controllers(控制器)、Models(模型) 和 Middleware(中间件)</a> <span class="text-muted">一袋米扛几楼98</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%B7%A5%E7%A8%8B%2F%E5%AE%89%E5%85%A8/1.htm">网络工程/安全</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a> <div>在图片中,数据流(DataWorkflow)描述了应用程序中数据的流动过程,涉及Routes(路由)、Controllers(控制器)、Models(模型)和Middleware(中间件)。作为初学者,理解这些组件及其联系是掌握Web应用程序开发的关键。以下是对每个技术点的详细解释,以及它们如何相互关联的分析。1.Routes(路由)定义:路由定义了应用程序的URL端点(Endpoints)以及服</div> </li> <li><a href="/article/1903609302187307008.htm" title="C# 调用 VITS,推理模型 将文字转wav音频调试 -数字人分支" target="_blank">C# 调用 VITS,推理模型 将文字转wav音频调试 -数字人分支</a> <span class="text-muted">未来之窗软件服务</span> <a class="tag" taget="_blank" href="/search/c%23/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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E5%AD%97%E4%BA%BA/1.htm">数字人</a> <div>Microsoft.ML.OnnxRuntime.OnnxRuntimeException:[ErrorCode:InvalidArgument]Inputname:'input_name'isnotinthemetadata在Microsoft.ML.OnnxRuntime.InferenceSession.LookupInputMetadata(StringnodeName)位置D:\a\_w</div> </li> <li><a href="/article/1903542290224312320.htm" title="PTA:另类堆栈" target="_blank">PTA:另类堆栈</a> <span class="text-muted">悦悦子a啊</span> <a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80PTA%E4%B9%A0%E9%A2%98/1.htm">C语言PTA习题</a><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%2B%2B/1.htm">c++</a> <div>在栈的顺序存储实现中,另有一种方法是将Top定义为栈顶的上一个位置。请编写程序实现这种定义下堆栈的入栈、出栈操作。如何判断堆栈为空或者满?函数接口定义:boolPush(StackS,ElementTypeX);ElementTypePop(StackS);其中Stack结构定义如下:typedefintPosition;typedefstructSNode*PtrToSNode;structSN</div> </li> <li><a href="/article/1903537489176489984.htm" title="怎样才能把网页数据保存到网络上?" target="_blank">怎样才能把网页数据保存到网络上?</a> <span class="text-muted">2301_79698214</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a> <div>要将网页数据存放到网络中,一般可以通过以下几种常见的方式:1.使用后端服务器自建服务器:你可以搭建自己的服务器,例如使用Node.js的Express框架或者Python的Flask、Django框架。以下是一个使用Flask框架存储数据到服务器的简单示例:pythonApplyfromflaskimportFlask,requestapp=Flask(__name__)@app.route('/</div> </li> <li><a href="/article/1903536101478428672.htm" title="下面的html存在什么错误?怎样修改?" target="_blank">下面的html存在什么错误?怎样修改?</a> <span class="text-muted">2301_79698214</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>tr{height:60px;}td,th{width:150px;text-align:center;}functionaddNode(){vartab=document.getElementById("tab");vartr=document.createElement("tr");vartd=document.createElement("td");td.innerHTML="";vartd</div> </li> <li><a href="/article/1903534338486628352.htm" title="flink作业访问zk出现acl报错问题分析" target="_blank">flink作业访问zk出现acl报错问题分析</a> <span class="text-muted">spring208208</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE%E7%BB%84%E4%BB%B6%E7%BA%BF%E4%B8%8A%E9%97%AE%E9%A2%98%E5%88%86%E6%9E%90/1.htm">大数据组件线上问题分析</a><a class="tag" taget="_blank" href="/search/flink/1.htm">flink</a><a class="tag" taget="_blank" href="/search/zookeeper/1.htm">zookeeper</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>#问题现象向yarn集群提交flink作业的时候会出现zkacl的异常经确认:1.zk相关acl密码没有更改过2.重新部署客户端配置后提交任务同样报错3.修改flink的zk目录,重启后可以正常运行任务(在zk重新生了新的znode节点)#问题分析1.首先确认是否是权限的问题,即程序中zk用户没有权限操作zk上的flink节点目录确认集群上zookeeper的flink的acl权限,确认为flin</div> </li> <li><a href="/article/1903503196186275840.htm" title="k8s学习笔记(3)--- kubernetes核心技术概念" target="_blank">k8s学习笔记(3)--- kubernetes核心技术概念</a> <span class="text-muted">梦谜</span> <a class="tag" taget="_blank" href="/search/k8s%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/1.htm">k8s基础知识</a><a class="tag" taget="_blank" href="/search/k8%E5%9F%BA%E6%9C%AC%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5/1.htm">k8基本核心概念</a> <div>kubernetes核心技术概念1.容器(Container)2.API对象3.集群(Cluster)4.Master5.Node6.Pod7.复制控制器(ReplicationController,RC)8.副本集(ReplicaSet,RS)9.部署(Deployment)10.服务(Service)11.任务(Job)12.定时任务(CronJob)13.后台支撑服务集(DaemonSet)</div> </li> <li><a href="/article/1903497900005060608.htm" title="蓝桥大使【算法赛】----贪心算法" target="_blank">蓝桥大使【算法赛】----贪心算法</a> <span class="text-muted">wyshh119</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/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/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95/1.htm">贪心算法</a> <div>这里比较的难点在于sort排序的根据是什么,为什么是两人的报酬差,我的理解是当两人报酬差越大,那么总报酬的损失就越大,其实是缺少具体的证明的,但是通过就说明确实是这样。也就不深究证明了。#include#includeusingnamespacestd;longlongans=0;constintN=100005;structnode{//结构体inta;intb;};nodea[N];intma</div> </li> <li><a href="/article/1903496762845360128.htm" title="【概念】Node.js,Express.js MongoDB Mongoose Express-Validator Async Handler" target="_blank">【概念】Node.js,Express.js MongoDB Mongoose Express-Validator Async Handler</a> <span class="text-muted">一袋米扛几楼98</span> <a class="tag" taget="_blank" href="/search/%E5%90%84%E7%B1%BB%E6%A6%82%E5%BF%B5/1.htm">各类概念</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/express/1.htm">express</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>1.Node.js定义:Node.js是一个基于ChromeV8引擎的JavaScript运行时环境,允许你在服务器端运行JavaScript代码。作用:它使得开发者可以使用JavaScript编写服务器端代码,从而实现前后端使用同一种语言。比喻:Node.js就像是“工厂的电力系统”,它为整个工厂(应用程序)提供动力(运行环境)。没有电力系统,工厂的机器(代码)就无法运转。特点:非阻塞I/O:N</div> </li> <li><a href="/article/1903493861053886464.htm" title="理解 Node.js 中的 process`对象与常用操作" target="_blank">理解 Node.js 中的 process`对象与常用操作</a> <span class="text-muted">red润</span> <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><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>理解Node.js中的process对象与常用操作在Node.js中,process是一个全局对象,提供了与当前Node.js进程相关的信息和操作。无论是获取进程信息、处理信号、访问环境变量,还是控制进程行为,process都是不可或缺的工具。看到process不犯怵了1.获取进程信息process提供了许多属性和方法来获取当前进程的信息。process.pid:获取当前进程的PID(进程ID)。</div> </li> <li><a href="/article/1903493732137758720.htm" title="npm详解:掌握 Node.js 包管理的艺术" target="_blank">npm详解:掌握 Node.js 包管理的艺术</a> <span class="text-muted">Lv_Jin_Gang</span> <a class="tag" taget="_blank" href="/search/npm/1.htm">npm</a> <div>在现代软件开发领域,包管理和依赖处理是任何项目不可或缺的一部分。对于基于Node.js的应用程序而言,NPM(NodePackageManager)不仅是安装和管理第三方库的标准工具,也是发布、共享和重用代码片段的核心平台。本文将深入探讨NPM的各个方面,从基础概念到高级用法,旨在为你提供一个全面而深入的理解。一、NPM简介与安装1.1NPM的诞生与重要性NPM伴随着Node.js的诞生而出现,它</div> </li> <li><a href="/article/1903491587896307712.htm" title="如何用Function Calling解锁OpenAI的「真实世界」交互能力?(附Node.js 实战)" target="_blank">如何用Function Calling解锁OpenAI的「真实世界」交互能力?(附Node.js 实战)</a> <span class="text-muted">hongkid</span> <a class="tag" taget="_blank" href="/search/AI%E7%BC%96%E7%A8%8B/1.htm">AI编程</a> <div>一、FunctionCalling:大模型的「手脚延伸器」1.1核心定义FunctionCalling是OpenAI在2023年6月13日推出的革命性功能(对应模型版本gpt-3.5-turbo-0613和gpt-4-0613),允许开发者通过自然语言指令触发预定义函数,实现大模型与现实世界系统的交互。如同给语言模型安装「手脚」,使其不仅能思考,还能执行具体操作。openai官方说明:https:</div> </li> <li><a href="/article/1903489192416047104.htm" title="Node.js系列(2)--性能优化指南" target="_blank">Node.js系列(2)--性能优化指南</a> <span class="text-muted">一进制ᅟᅠ        ‌‍‎‏ </span> <a class="tag" taget="_blank" href="/search/Node.js/1.htm">Node.js</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a> <div>Node.js性能优化指南⚡引言Node.js应用的性能优化是确保应用高效运行的关键。本文将深入探讨Node.js性能优化的各个方面,包括内存管理、CPU优化、I/O优化等,帮助开发者构建高性能的Node.js应用。性能优化概述Node.js性能优化主要包括以下方面:内存优化:内存泄漏检测、垃圾回收优化CPU优化:代码执行效率、异步处理、工作线程I/O优化:文件操作、网络请求、数据库访问缓存优化:</div> </li> <li><a href="/article/1903486041726185472.htm" title="Node.js 包与 npm 详解:使用 npm 的重要注意事项与最佳实践" target="_blank">Node.js 包与 npm 详解:使用 npm 的重要注意事项与最佳实践</a> <span class="text-muted">还是鼠鼠</span> <a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>目录Node.js包与npm:使用npm的其它注意点详解1.package.json与package-lock.json的作用什么是package.json?什么是package-lock.json?示例:package-lock.json片段2.语义化版本(SemVer)与依赖版本管理3.全局安装vs.本地安装本地安装(默认)全局安装4.npm缓存管理与优化清理npm缓存5.依赖冲突与node_</div> </li> <li><a href="/article/1903480498143948800.htm" title="mac npm run dev报错 error:0308010C:digital envelope routines::unsupported" target="_blank">mac npm run dev报错 error:0308010C:digital envelope routines::unsupported</a> <span class="text-muted">大波V5</span> <a class="tag" taget="_blank" href="/search/macos/1.htm">macos</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> <div>并且提示Unsupportedengine{npmWARNEBADENGINEpackage:'@achrinza/node-ipc@9.2.2',npmWARNEBADENGINErequired:{node:'8||10||12||14||16||17'},npmWARNEBADENGINEcurrent:{node:'v18.18.0',npm:'9.8.1'}npmWARNEBADENGI</div> </li> <li><a href="/article/1903456806299037696.htm" title="k8s集群版本升级" target="_blank">k8s集群版本升级</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/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a> <div>Kubernetes集群版本升级是为了获得最新的功能、增强的安全性和性能改进。然而,升级过程需要谨慎进行,特别是在生产环境中。通常,Kubernetes集群的版本升级应遵循逐步升级的策略,不建议直接跳过多个版本。Kubernetes版本升级的常见流程:升级顺序:先升级控制平面节点(MasterNodes),然后升级工作节点(WorkerNodes)。遵循版本兼容性:Kubernetes支持小版本的</div> </li> <li><a href="/article/1903449874121158656.htm" title="分析K8S中Node状态为`NotReady`问题" target="_blank">分析K8S中Node状态为`NotReady`问题</a> <span class="text-muted">网络飞鸥</span> <a class="tag" taget="_blank" href="/search/Kubernetes/1.htm">Kubernetes</a><a class="tag" taget="_blank" href="/search/kubernetes/1.htm">kubernetes</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a> <div>在Kubernetes(k8s)集群中,Node状态为NotReady通常意味着节点上存在某些问题,下面为你分析正常情况下节点应运行的容器以及解决NotReady状态的方法。正常情况下Node节点应运行的容器1.kubeletkubelet是节点上的核心组件,它负责与控制平面通信,管理节点上的容器生命周期。它通常作为系统服务运行,而不是以容器形式存在,但也有使用容器化部署的情况。2.kube-pr</div> </li> <li><a href="/article/1903408273487360000.htm" title="基于ThinkPHP6用户登录逻辑,结合FastAPI框架实现用户登录系统的全流程解析" target="_blank">基于ThinkPHP6用户登录逻辑,结合FastAPI框架实现用户登录系统的全流程解析</a> <span class="text-muted">Wiktok</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/fastapi/1.htm">fastapi</a> <div>基于ThinkPHP6用户登录逻辑,结合FastAPI框架实现用户登录系统的全流程解析,涵盖路由配置、数据验证、JWT令牌生成与鉴权、中间件依赖等核心环节:1.路由配置与请求处理路由定义:使用APIRouter组织用户认证相关接口(注册、登录),并通过app.include_router()集成到主应用。例如:#routers/auth.pyfromfastapiimportAPIRouterro</div> </li> <li><a href="/article/1903395278484992000.htm" title="个人学习编程(3-21) leetcode刷题" target="_blank">个人学习编程(3-21) leetcode刷题</a> <span class="text-muted">Rsecret2</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%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/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>链接列表的中间值:测试用例1:创建链表[1,2,3,4,5],调用middleNode,预期返回值是3。测试用例2:创建链表[1,2,3,4,5,6],调用middleNode,预期返回值是3。判断长度,然后length/2structListNode*middleNode(structListNode*head){intlength=0;for(structListNode*curr=head;</div> </li> <li><a href="/article/1903363506820935680.htm" title="TreeNode底层实现原理" target="_blank">TreeNode底层实现原理</a> <span class="text-muted">zhglhy</span> <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/java/1.htm">java</a> <div>TreeNode是树结构的基本单元,通常用于表示树形数据结构中的节点。其底层实现原理涉及以下几个方面:1.TreeNode的基本结构在Java中,TreeNode通常是一个类,包含以下核心属性:数据域:存储节点的数据。子节点引用:指向子节点的引用(对于二叉树,通常是左子节点和右子节点)。父节点引用:指向父节点的引用(可选,取决于具体实现)。以下是一个典型的二叉树节点的实现:classTreeNod</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>