ES6 async-await函数

含义

async 函数是什么?一句话,它就是 Generator 函数的语法糖。

async函数对 Generator 函数的改进,体现在以下四点:

1. 内置执行器

Generator 函数的执行必须靠执行器,所以才有了co模块,而async函数自带执行器。也就是说,async函数的执行,与普通函数一模一样,只要一行。

asyncReadFile();

上面的代码调用了asyncReadFile函数,然后它就会自动执行,输出最后结果。这完全不像 Generator 函数,需要调用next方法,或者用co模块,才能真正执行,得到最后结果。

2. 更好的语义

async和await,比起星号和yield,语义更清楚了。async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。

3. 更广的适用性

co模块约定,yield命令后面只能是Thunk函数或Promise对象,而async函数的await命令后面,可以是Promise对象和原始类型的值(数值、字符串和布尔值,但这时等同于同步操作)。

4. 返回值是 Promise

async函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了。你可以用then方法指定下一步的操作。

进一步说,async函数完全可以看作多个异步操作,包装成的一个 Promise 对象,而await命令就是内部then命令的语法糖。

基本用法

async函数返回一个 Promise对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。
下面是一个例子,指定多少毫秒后输出一个值:

function timeout(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

async function asyncPrint(value, ms) {
  await timeout(ms);
  console.log(value);
}

asyncPrint('hello world', 50);

上面代码指定50毫秒以后,输出hello world。

async 函数有多种使用形式:

// 函数声明
async function foo() {}

// 函数表达式
const foo = async function () {};

// 对象的方法
let obj = { async foo() {} };
obj.foo().then(...)

// Class 的方法
class Storage {
  constructor() {
    this.cachePromise = caches.open('avatars');
  }

  async getAvatar(name) {
    const cache = await this.cachePromise;
    return cache.match(`/avatars/${name}.jpg`);
  }
}

const storage = new Storage();
storage.getAvatar('jake').then(…);

// 箭头函数
const foo = async () => {};

语法

返回 Promise 对象

async函数返回一个 Promise 对象。

async函数内部return语句返回的值,会成为then方法回调函数的参数。

async function f() {
  return 'hello world';
}

f().then(v => console.log(v))
// "hello world"

async函数内部抛出错误,会导致返回的Promise对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到。

async function f() {
  throw new Error('出错了');
}

f().then(
  v => console.log(v),
  e => console.log(e)
)
// Error: 出错了

Promise 对象的状态变化

async函数返回的 Promise 对象,必须等到内部所有await命令后面的 Promise 对象执行完,才会发生状态改变,除非遇到return语句或者抛出错误。也就是说,只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数。

下面是一个例子:

async function getTitle(url) {
  let response = await fetch(url);
  let html = await response.text();
  return html.match(/([\s\S]+)<\/title>/i)[1];
}
getTitle('https://tc39.github.io/ecma262/').then(console.log)
// "ECMAScript 2017 Language Specification"</code></pre> 
 <p>上面代码中,函数getTitle内部有三个操作:抓取网页、取出文本、匹配页面标题。只有这三个操作全部完成,才会执行then方法里面的console.log。</p> 
 <h3>await 命令</h3> 
 <p>正常情况下,await命令后面是一个 Promise 对象。如果不是,会被转成一个立即resolve的 Promise 对象。</p> 
 <pre><code>async function f() {
  return await 123;
}

f().then(v => console.log(v))
// 123</code></pre> 
 <p>上面代码中,await命令的参数是数值123,它被转成 Promise 对象,并立即resolve。</p> 
 <p>await命令后面的 Promise 对象如果变为reject状态,则reject的参数会被catch方法的回调函数接收到。</p> 
 <pre><code>async function f() {
  await Promise.reject('出错了');
}

f()
.then(v => console.log(v))
.catch(e => console.log(e))
// 出错了</code></pre> 
 <p>注意,上面代码中,await语句前面没有return,但是reject方法的参数依然传入了catch方法的回调函数。这里如果在await前面加上return,效果是一样的。</p> 
 <p>只要一个await语句后面的 Promise 变为reject,那么整个async函数都会中断执行。</p> 
 <pre><code>async function f() {
  await Promise.reject('出错了');
  await Promise.resolve('hello world'); // 不会执行
}</code></pre> 
 <p>上面代码中,第二个await语句是不会执行的,因为第一个await语句状态变成了reject。</p> 
 <h3>错误处理</h3> 
 <p>有时,我们希望即使前一个异步操作失败,也不要中断后面的异步操作。这时可以将第一个await放在try...catch结构里面,这样不管这个异步操作是否成功,第二个await都会执行。</p> 
 <pre><code>async function f() {
  try {
    await Promise.reject('出错了');
  } catch(e) {
  }
  return await Promise.resolve('hello world');
}

f()
.then(v => console.log(v))
// hello world</code></pre> 
 <p>另一种方法是await后面的 Promise 对象再跟一个catch方法,处理前面可能出现的错误。</p> 
 <pre><code>async function f() {
  await Promise.reject('出错了')
    .catch(e => console.log(e));
  return await Promise.resolve('hello world');
}

f()
.then(v => console.log(v))
// 出错了
// hello world</code></pre> 
 <h3>并发执行异步操作</h3> 
 <p>多个await命令后面的异步操作,如果不存在继发关系,最好让它们同时触发。</p> 
 <pre><code>// 写法一
let [foo, bar] = await Promise.all([getFoo(), getBar()]);

// 写法二
let fooPromise = getFoo();
let barPromise = getBar();
let foo = await fooPromise;
let bar = await barPromise;</code></pre> 
 <p>上面两种写法,getFoo和getBar都是同时触发,这样就会缩短程序的执行时间。</p> 
 <p>如果确实希望多个请求并发执行,可以使用Promise.all方法。当三个请求都会resolved时,下面两种写法效果相同。</p> 
 <pre><code>async function dbFuc(db) {
  let docs = [{}, {}, {}];
  let promises = docs.map((doc) => db.post(doc));

  let results = await Promise.all(promises);
  console.log(results);
}

// 或者使用下面的写法

async function dbFuc(db) {
  let docs = [{}, {}, {}];
  let promises = docs.map((doc) => db.post(doc));

  let results = [];
  for (let promise of promises) {
    results.push(await promise);
  }
  console.log(results);
}</code></pre> 
 <h2>async 函数的实现原理</h2> 
 <p><strong>async 函数的实现原理,就是将Generator函数和自动执行器,包装在一个函数里</strong>。</p> 
 <pre><code>async function fn(args) {
  // ...
}

// 等同于

function fn(args) {
  return spawn(function* () {
    // ...
  });
}</code></pre> 
 <p>所有的async函数都可以写成上面的第二种形式,其中的spawn函数就是自动执行器。</p> 
 <p>下面给出spawn函数的实现:</p> 
 <pre><code>function spawn(genF) {
  return new Promise(function(resolve, reject) {
    const gen = genF();
    function step(nextF) {
      let next; 
      try {
        next = nextF();
      } catch(e) {
        return reject(e);
      }
      if(next.done) {
        return resolve(next.value);
      }
      Promise.resolve(next.value).then(function(v) {
        step(function() { return gen.next(v); });
      }, function(e) {
        step(function() { return gen.throw(e); });
      });
    }
    step(function() { return gen.next(undefined); });
  });
}</code></pre> 
 <h2>按顺序完成异步操作</h2> 
 <p>实际开发中,经常遇到一组异步操作,需要按照顺序完成。比如,依次远程读取一组 URL,然后按照读取的顺序输出结果。</p> 
 <p>Promise 的写法如下:</p> 
 <pre><code>function logInOrder(urls) {
  // 远程读取所有URL
  const textPromises = urls.map(url => {
    return fetch(url).then(response => response.text());
  });

  // 按次序输出
  textPromises.reduce((chain, textPromise) => {
    return chain.then(() => textPromise)
      .then(text => console.log(text));
  }, Promise.resolve());
}</code></pre> 
 <p>上面代码使用fetch方法,同时远程读取一组 URL。每个fetch操作都返回一个 Promise 对象,放入textPromises数组。然后,reduce方法依次处理每个 Promise 对象,然后使用then,将所有 Promise 对象连起来,因此就可以依次输出结果。</p> 
 <p>这种写法不太直观,可读性比较差。下面是 async 函数实现。</p> 
 <pre><code>async function logInOrder(urls) {
  for (const url of urls) {
    const response = await fetch(url);
    console.log(await response.text());
  }
}</code></pre> 
 <p>上面代码确实大大简化,问题是所有远程操作都是继发。只有前一个URL返回结果,才会去读取下一个URL,这样做效率很差,非常浪费时间。我们需要的是并发发出远程请求。</p> 
 <pre><code>async function logInOrder(urls) {
  // 并发读取远程URL
  const textPromises = urls.map(async url => {
    const response = await fetch(url);
    return response.text();
  });

  // 按次序输出
  for (const textPromise of textPromises) {
    console.log(await textPromise);
  }
}</code></pre> 
 <p>上面代码中,虽然map方法的参数是async函数,但它是并发执行的,因为只有async函数内部是继发执行,外部不受影响。后面的for..of循环内部使用了await,因此实现了按顺序输出。</p> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1177070744765542400"></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">你可能感兴趣的:(es6,async-await)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1771665449549889536.htm"
                           title="hr跟我说从第二个问题就可以停止面试了" target="_blank">hr跟我说从第二个问题就可以停止面试了</a>
                        <span class="text-muted">lozhyf</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a>
                        <div>#24届软开秋招面试经验大赏#但是他还是跟我聊了一个多小时很有耐心,哎,而且当场根据我不会或者答得不好的问题教我es6新特性解释下事件循环看事件循环的代码解释一下输出顺序写js循环算法总结多巩固js基础这个是js游戏岗,我是25届的作者:阿北Char</div>
                    </li>
                    <li><a href="/article/1771576955049672704.htm"
                           title="web学习笔记(四十二)" target="_blank">web学习笔记(四十二)</a>
                        <span class="text-muted">shan33__</span>
<a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/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/%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><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目录1.ECMAScript新特性-async和await1.1async函数1.2await函数1.3补充:2.ES6模块化2.1模块化的优点2.2ES6模块化语法2.3ES6模块暴露2.4ES6模块导入1.ECMAScript新特性-async和await1.1async函数async函数可以单数使用,但一般我们会将async函数和await函数结合使用,可以让异步代码像同步代码一样运行,也可</div>
                    </li>
                    <li><a href="/article/1770408572249767936.htm"
                           title="问了一下 GPT--当前基于 React + TypeScript 的生态中 一名前端工程师需要具备哪些能力?" target="_blank">问了一下 GPT--当前基于 React + TypeScript 的生态中 一名前端工程师需要具备哪些能力?</a>
                        <span class="text-muted">zoe_ya</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/gpt/1.htm">gpt</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a>
                        <div>在当前基于React+TypeScript的生态中,你需要掌握一系列的技能和知识,以构建现代化、高效能且可维护的前端应用程序。以下是一些关键领域的知识和技能点:基础知识HTML/CSS/JavaScript:理解语义化的HTML、CSS布局和定位技术以及现代JavaScript(ES6+)的特性。TypeScript:掌握TypeScript的基本语法、类型系统以及如何在React项目中使用Typ</div>
                    </li>
                    <li><a href="/article/1769135097593790464.htm"
                           title="【javaScript/ES6】获取对象数组中其中一个属性值的集合(forEach、Array.from)" target="_blank">【javaScript/ES6】获取对象数组中其中一个属性值的集合(forEach、Array.from)</a>
                        <span class="text-muted">花间半盘棋</span>
<a class="tag" taget="_blank" href="/search/javaScript/1.htm">javaScript</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/es6/1.htm">es6</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>引入:有一个对象数组,但只需要其中的某一个属性值。举个栗子,有一个对象数组,其中不止有一个对象:letarr=[{name:'Luenay',age:10},{name:'Kitty',age:20}]但是我只需要包含name的集合;方法1:使用forEach;letresArr=[]arr.forEach(item=>{resArr.push(item.name)})方法2:使用Array.fr</div>
                    </li>
                    <li><a href="/article/1768476242803228672.htm"
                           title="JS 之export、export default和module.exports" target="_blank">JS 之export、export default和module.exports</a>
                        <span class="text-muted">刘_小_二</span>

                        <div>export和exportdefault是ES6中导出模块中变量的语法exports和module.exports是Nodejs中导出模块中变量的语法(基于CommonJs语法规范)【export】--命名导出在创建JavaScript模块时,export语句用于从模块中导出实时绑定的函数、对象或原始值,以便其他程序可以通过import语句使用它们。被导出的绑定值依然可以在本地进行修改。在使用im</div>
                    </li>
                    <li><a href="/article/1767605302171074560.htm"
                           title="ES6基础知识点" target="_blank">ES6基础知识点</a>
                        <span class="text-muted">咖啡,巫师与猫</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">前端开发基础知识学习笔记</a><a class="tag" taget="_blank" href="/search/es6/1.htm">es6</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>ES6入门笔记ES6中的变量和常量ES6新增了两个关键词用来声明变量和常量声明变量使用let关键词声明常量使用const关键词let:let:用于声明变量,代替var关键词特点︰有块级作用域;不存在变量提升﹔暂时性死区块级作用域在es6中才有,一对大括号就是一个块级作用域在大括号中使用let声明的变量出了大括号就无效了在循环、分支结构中使用let声明的变量也就会无效变量提升:console.log</div>
                    </li>
                    <li><a href="/article/1767091147047526400.htm"
                           title="【 React 】super()和super(props)有什么区别" target="_blank">【 React 】super()和super(props)有什么区别</a>
                        <span class="text-muted">前端小超人rui</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">面试题</a><a class="tag" taget="_blank" href="/search/React/1.htm">React</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</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>相关文章react中的supersuper(props)1.ES6类在ES6中,通过extends关键字实现类的继承,方式如下:classsup{constructor(name){this.name=name;}printName(){console.log(this.name)}}classsubextendssup{constructor(name,age){super(name)//sup</div>
                    </li>
                    <li><a href="/article/1766973451593146368.htm"
                           title="Webpack和Vite的区别?" target="_blank">Webpack和Vite的区别?</a>
                        <span class="text-muted">夏兮颜☆</span>
<a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</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>Webpack和Vite都是现代前端开发中常用的打包工具,它们的主要区别如下:构建速度:Vite的构建速度比Webpack快得多,因为Vite在开发环境下使用了浏览器原生的ESM(ES6模块)模块加载,可以在浏览器中直接运行代码,而不需要像Webpack那样先进行打包和编译。在Vite中,每个模块都可以独立地进行编译和缓存,这意味着它只需要重新编译修改过地模块,而不是整个应用程序。这使得Vite开</div>
                    </li>
                    <li><a href="/article/1766690316754182144.htm"
                           title="js 总结一 07-09" target="_blank">js 总结一 07-09</a>
                        <span class="text-muted">小老虎丶冷心</span>

                        <div>ES6一、js入门、js引入、变量、值类型、运算符js引入代码如下内部//执行代码外部js变量代码如下:varname="哦";name是变量名变量名前不能加特殊符号和数字值类型代码如下:原始值Number、String、Boolean、undefined、null数字:unmbervara=1;varb=0.2;字符串:stringvara=“asdjio”;varb='12';只要带双引号或单</div>
                    </li>
                    <li><a href="/article/1766414440481251328.htm"
                           title="ES6之Proxy代理" target="_blank">ES6之Proxy代理</a>
                        <span class="text-muted">27亿光年中的小小尘埃</span>

                        <div>什么是Proxy代理ES6让开发者能进一步接近JS引擎的能力,这些能力原先只存在于内置对象上。语言通过代理(proxy)暴露了在对象上的内部工作,代理是一种封装,能够拦截并改变JS引擎的底层操作。人话是:把代理看做是设计模式代理模式中的一种,有一个代理对象来代理本体,而ES6的Proxy牛逼的一点是可以把本体没法改变的内部属性改了代理与反射是什么?通过调用newProxy(),你可以创建一个代理用</div>
                    </li>
                    <li><a href="/article/1764827176617730048.htm"
                           title="Vue.js--基础" target="_blank">Vue.js--基础</a>
                        <span class="text-muted">Lemon_Kang</span>

                        <div>Vue1、基本概念渐进式框架 渐进式意味着你可以将Vue作为你应用的一部分嵌入其中,带来更丰富的交互体验特点解耦视图和数据可复用的组件前端路由技术状态管理虚拟DOM2、安装Vue.js 1.直接CDN引入 2.下载后项目中引入js文件 3.使用npm安装3、初体验{{message}}{{item}}{{count}}+-//数据和视图分离引入vue的js文件//let(ES6定义变量)/cons</div>
                    </li>
                    <li><a href="/article/1764482791619256320.htm"
                           title="Web 游戏 「梦幻西游」地图 Demo ,纯 Canvas 画" target="_blank">Web 游戏 「梦幻西游」地图 Demo ,纯 Canvas 画</a>
                        <span class="text-muted">梁同桌</span>

                        <div>前言本程序仅仅学习,顺便回忆小学玩的游戏。项目初心为了验证一些对Canvas想法。项目大量运用ES6,无";"写法。cover.gif目录文件介绍职责分类缺点文件imgjxk(剑侠客图片)background(地图图片)jsbaserunloop.js(循环)viewjxk.js(剑侠客)map_one.js(地图)game.jsindex.jsindex.html职责分类js/base/runl</div>
                    </li>
                    <li><a href="/article/1763572933072084992.htm"
                           title="ECMAScript modules规范示例详解" target="_blank">ECMAScript modules规范示例详解</a>
                        <span class="text-muted">猿泰山</span>
<a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>ECMAScript模块(ESM)规范示例详解在现代前端开发中,模块已经成为了组织代码的基础。自从ES6(也被称为ES2015)引入了原生的模块系统,ECMAScript模块(ESM)已经成为了JavaScript中模块化的标准方式。本文将详细解释ESM规范,并通过示例来展示其用法。一、什么是ECMAScript模块(ESM)?在ESM之前,JavaScript社区使用了多种不同的模块系统,如Co</div>
                    </li>
                    <li><a href="/article/1762264850844704768.htm"
                           title="ES6 - Day4 - 正则表达式" target="_blank">ES6 - Day4 - 正则表达式</a>
                        <span class="text-muted">今天会下雨吗</span>
<a class="tag" taget="_blank" href="/search/es6/1.htm">es6</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E7%AC%A6%E4%B8%B2/1.htm">字符串</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>目标能够说出正则表达式的作用能够写出简单的正则表达式能够使用正则表达式对表单进行验证能够使用正则表达式替换内容1正则表达式概述1.1什么是正则表达式正则表达式(RegularExpression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。正则表通常被用来检索、替换那些符合某个模式(规则)的文本,例如验证表单:用户名表单只能输入英文字母、数字或者下划线,昵称输入</div>
                    </li>
                    <li><a href="/article/1761005272731537408.htm"
                           title="js中的变量声明(var、let、const的区别和解析)" target="_blank">js中的变量声明(var、let、const的区别和解析)</a>
                        <span class="text-muted">前端三脚猫</span>
<a class="tag" taget="_blank" href="/search/javaScript%E5%9F%BA%E7%A1%80/1.htm">javaScript基础</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/es6/1.htm">es6</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a>
                        <div>Js中的变量声明在es6之前声明变量使用var关键字,无论声明位置在何处,都会把声明提升到当前作用域的顶部。如:functionmyVar(flag){console.log(value);//undefinedif(flag){varvalue='22';console.log(value);//22}else{console.log(value);//当flag为false时也可以访问变量值为</div>
                    </li>
                    <li><a href="/article/1760967259213320192.htm"
                           title="【es6】Map 和 Object 对象的区别" target="_blank">【es6】Map 和 Object 对象的区别</a>
                        <span class="text-muted">我有一棵树</span>
<a class="tag" taget="_blank" href="/search/es6/1.htm">es6</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a>
                        <div>对象ObjectObject是一个特殊的对象,它本身是一个顶级对象,同时还是一个构造函数,还可以使用字面量的方式声明一个对象本质上是键值对的集合,但是健只能是字符串或Symbol使用.[]去获取object的属性,不存在则返回undefined,而且可以获取到原型上的属性不是可迭代对象,只能用for...in迭代,且遍历顺序是不确定的,或者是使用Object.keys\Object.values\</div>
                    </li>
                    <li><a href="/article/1760698020556492800.htm"
                           title="用原生js实现数组扁平化" target="_blank">用原生js实现数组扁平化</a>
                        <span class="text-muted">拙慕JULY</span>
<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%8E%9F%E7%94%9Fjs/1.htm">原生js</a>
                        <div>数组扁平化:[1,3,[5,2],[2,3,[4,5]]]------->[1,3,5,2,2,3,4,5]/实现一:递归/functionflatArray(arr){varresult=[];for(vari=0;i+item);//returnarr.join(',').split(',').map(item=>+item);}/实现三:使用ES6新增的扩展运算符//*console.log</div>
                    </li>
                    <li><a href="/article/1759917569646620672.htm"
                           title="卷积神经网络吴恩达coursera" target="_blank">卷积神经网络吴恩达coursera</a>
                        <span class="text-muted">stoAir</span>
<a class="tag" taget="_blank" href="/search/%E5%90%B4%E6%81%A9%E8%BE%BE%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">吴恩达深度学习笔记</a><a class="tag" taget="_blank" href="/search/cnn/1.htm">cnn</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/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a>
                        <div>ConvolutionalNNFoundationsofCNNmatrixsconvolutionEdgedetectionVertical/horizontialconv-forward(tf.nn.cov2d)matrix(6×6)∗filter(3×3)=matrix(4×4)matrix(6\times6)*filter(3\times3)=matrix(4\times4)matrix(6</div>
                    </li>
                    <li><a href="/article/1759909404578246656.htm"
                           title="深入理解ES6之var,let,const区别" target="_blank">深入理解ES6之var,let,const区别</a>
                        <span class="text-muted">IDO0</span>

                        <div>第一:块级范围内var变量提升(不存在以下的问题)let块级作用域,指定块的外部无法访问const常量声明块级作用域,不会发生变量提升,声明后不可以改变因此需要初始化.(对于一个对象而言不可改变是指引用不可变,内容可以改变相当于java的final关键字)1:禁止重复声明2:暂时性死区3:不在块级作用域范围内使用按照undefined处理console.log(typeofvalue)//因为发生</div>
                    </li>
                    <li><a href="/article/1759885893214236672.htm"
                           title="React初次接触" target="_blank">React初次接触</a>
                        <span class="text-muted">岁月静好_dfb4</span>

                        <div>constructor()不是必须的,但,如果有constructor(),ES6语法强制使用super();react初始化class后,会自动将props设置在this中,所以没有constructor(),任何地方都可以使用this.props;如果有constructor(),除了constructor()中,同样任何地方都可以使用this.props;当你需要在contructor()中</div>
                    </li>
                    <li><a href="/article/1759884677692354560.htm"
                           title="webpack使用说明" target="_blank">webpack使用说明</a>
                        <span class="text-muted">九九nine9</span>
<a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>webpackwebpack基本介绍webpack是一个现代JavaScript应用程序的静态模块打包器(modulebundler)现代javascript应用程序的静态模块打包器(modulebundler)●静态:文件资源●模块:node环境,引入文件,遵守模块化语法除了合并代码,还可以翻译和压缩代码●less/sass->css●ES6/7/8->ES5●html/css/js->压缩合并</div>
                    </li>
                    <li><a href="/article/1759866330670002176.htm"
                           title="【退役之重学前端】JavaScript 类、构造器、原型的关系" target="_blank">【退役之重学前端】JavaScript 类、构造器、原型的关系</a>
                        <span class="text-muted">williamdsy</span>
<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%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%B1%BB/1.htm">类</a><a class="tag" taget="_blank" href="/search/%E6%9E%84%E9%80%A0%E5%99%A8/1.htm">构造器</a><a class="tag" taget="_blank" href="/search/%E5%8E%9F%E5%9E%8B/1.htm">原型</a>
                        <div>ES6中类的概念,我之前花了较长的时间学习Java,所以对类感觉很亲切。我并不满足仅仅会使用,让我们一起深究一下JavaScript中的类吧。构造一个类,并实例化一个对象classAnimal{constructor(name){this.name=name;}getName(){returnthis.name;}}letanimal=newAnimal()首先看一下Animal的类型typeof</div>
                    </li>
                    <li><a href="/article/1759865044633481216.htm"
                           title="【退役之重学前端】使用vite+vue3+vue-router,重构react+react-router前后端分离的商城后台管理系统" target="_blank">【退役之重学前端】使用vite+vue3+vue-router,重构react+react-router前后端分离的商城后台管理系统</a>
                        <span class="text-muted">williamdsy</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E9%87%8D%E6%9E%84/1.htm">重构</a>
                        <div>前言:对前端各个技术板块,HTML、CSS、JavaScript、ES6、vue家族,整体上能“摸其大概”。笔者计划重构一个基于react的商城后台管理系统。——2024年2月16日技术选型#语言和框架vue3sassbootstrapES7#架构前后端分离分层架构模块化开发#前端构建工具npmvite#代码管理工具git</div>
                    </li>
                    <li><a href="/article/1759827930957049856.htm"
                           title="【Java前端技术栈】模块化编程" target="_blank">【Java前端技术栈】模块化编程</a>
                        <span class="text-muted">yinhai1114</span>
<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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、基本介绍1.基本介绍1传统非模块化开发有如下的缺点:(1)命名冲突(2)文件依赖2Javascript代码越来越庞大,Javascript引入模块化编程,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块3Javascript使用"模块"(module)的概念来实现模块化编程,解决非模块化编程问题4模块化也是ES6的新特性2.模块化编程原理示意图3.模块化编程分类1.Common</div>
                    </li>
                    <li><a href="/article/1759827803127246848.htm"
                           title="前端技术栈简介 和 ES6新特性" target="_blank">前端技术栈简介 和 ES6新特性</a>
                        <span class="text-muted">魔舞清华-方</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>前后端技术栈类比ES6简介ES6新特性let新特性作用域//var声明的变量往往会越域//let声明的变量有严格的局部作用域{vara=1;letb=2;}console.log(a);//1console.log(b);//bisnotdefinedlet变量名只能声明一次//let变量名只能声明一次,var可以多次声明varm=1;varm=2;//2letn=3;//3letn=4;//Id</div>
                    </li>
                    <li><a href="/article/1759827419059023872.htm"
                           title="【Java前端技术栈】Promise" target="_blank">【Java前端技术栈】Promise</a>
                        <span class="text-muted">yinhai1114</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>一、Promise基本介绍1.传统的Ajax异步调用在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观,就是常说的CallbackHell2.为了解决上述的问题,Promise对象应运而生,在EMCAScript2015当中已经成为标准3.Promise是异步编程的一种解决方案。4.从语法上说,Promise是一个对象,从它可以获取异步操作的消息5.Promise也是ES6的新特性,因</div>
                    </li>
                    <li><a href="/article/1759807230825295872.htm"
                           title="编程笔记 html5&css&js 084 JavaScript 变量的作用域" target="_blank">编程笔记 html5&css&js 084 JavaScript 变量的作用域</a>
                        <span class="text-muted">明月看潮生</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/css3/1.htm">css3</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%B0%91%E5%B9%B4%E5%B7%A5%E7%A8%8B%E5%B8%88/1.htm">少年工程师</a><a class="tag" taget="_blank" href="/search/%E9%9D%92%E5%B0%91%E5%B9%B4%E7%BC%96%E7%A8%8B/1.htm">青少年编程</a>
                        <div>编程笔记html5&css&js084JavaScript变量的作用域一、全局作用域二、局部作用域(函数作用域)三、块级作用域(ES6引入)小结变量作用域是程序设计中一个重要的概念,它定义了变量在何处可以被访问和使用。在JavaScript中,主要有两种类型的作用域:全局作用域和局部作用域(包括函数作用域和块级作用域)。一、全局作用域全局作用域中的变量在整个脚本或应用程序中都是可见的,可以在任何地</div>
                    </li>
                    <li><a href="/article/1759777184710488064.htm"
                           title="ES6箭头函数" target="_blank">ES6箭头函数</a>
                        <span class="text-muted">塔木德_lil_47</span>

                        <div>多个参数写法constfn=(a1,a2)=>{returna1+a2;}如果函数内部只有一行代码可以这样写默认返回a1+a2;constfn=(a1,a2)=>a1+a2;一个参数写法constfn=a1=>{//a1可以不加()returna1;}没有参数写法constfn=()=>{console.log("helloword")}constobj={fn:(a1,a2)=>{console</div>
                    </li>
                    <li><a href="/article/1759756190524469248.htm"
                           title="promise初识及使用" target="_blank">promise初识及使用</a>
                        <span class="text-muted">公子白521</span>

                        <div>Promise是异步编程的一种解决方案,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。promise的语法细节ES6规定,Promise对象是一个构造函数,用来生成Promise实例*1.Promise接收的是一个函数(回调函数)*2.回调函数由两个参数,这个参数(reslove,reject)分别都是函数*3.newPromise生成的是一个Promise实例</div>
                    </li>
                    <li><a href="/article/1759751822727278592.htm"
                           title="ES6 async 同步异步操作" target="_blank">ES6 async 同步异步操作</a>
                        <span class="text-muted">龚达耶</span>

                        <div>正如我之前的那篇关于Promise的介绍,async可以让你的异步操作变得更加简单。异步操作consttimeOut=function(num){returnnewPromise(function(resolve,reject){//进行异步操作setTimeout(()=>{resolve(num)},3000)});};constasyncF=asyncfunction(){constf1=a</div>
                    </li>
                                <li><a href="/article/66.htm"
                                       title="项目中 枚举与注解的结合使用" target="_blank">项目中 枚举与注解的结合使用</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/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/annotation/1.htm">annotation</a>
                                    <div>前言:版本兼容,一直是迭代开发头疼的事,最近新版本加上了支持新题型,如果新创建一份问卷包含了新题型,那旧版本客户端就不支持,如果新创建的问卷不包含新题型,那么新旧客户端都支持。这里面我们通过给问卷类型枚举增加自定义注解的方式完成。顺便巩固下枚举与注解。 
 
一、枚举 
1.在创建枚举类的时候,该类已继承java.lang.Enum类,所以自定义枚举类无法继承别的类,但可以实现接口。 
 
   </div>
                                </li>
                                <li><a href="/article/193.htm"
                                       title="【Scala十七】Scala核心十一:下划线_的用法" target="_blank">【Scala十七】Scala核心十一:下划线_的用法</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a>
                                    <div>下划线_在Scala中广泛应用,_的基本含义是作为占位符使用。_在使用时是出问题非常多的地方,本文将不断完善_的使用场景以及所表达的含义 
  1. 在高阶函数中使用 
scala> val list = List(-3,8,7,9)
list: List[Int] = List(-3, 8, 7, 9)

scala> list.filter(_ > 7)
r</div>
                                </li>
                                <li><a href="/article/320.htm"
                                       title="web缓存基础:术语、http报头和缓存策略" target="_blank">web缓存基础:术语、http报头和缓存策略</a>
                                    <span class="text-muted">dalan_123</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a>
                                    <div>对于很多人来说,去访问某一个站点,若是该站点能够提供智能化的内容缓存来提高用户体验,那么最终该站点的访问者将络绎不绝。缓存或者对之前的请求临时存储,是http协议实现中最核心的内容分发策略之一。分发路径中的组件均可以缓存内容来加速后续的请求,这是受控于对该内容所声明的缓存策略。接下来将讨web内容缓存策略的基本概念,具体包括如如何选择缓存策略以保证互联网范围内的缓存能够正确处理的您的内容,并谈论下</div>
                                </li>
                                <li><a href="/article/447.htm"
                                       title="crontab 问题" target="_blank">crontab 问题</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/crontab/1.htm">crontab</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a>
                                    <div>  
一:  0481-079   Reached   a   symbol   that   is   not   expected.   
   
背景:  
*/5   *   *   *   *  /usr/IBMIHS/rsync.sh  </div>
                                </li>
                                <li><a href="/article/574.htm"
                                       title="让tomcat支持2级域名共享session" target="_blank">让tomcat支持2级域名共享session</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/session/1.htm">session</a>
                                    <div>tomcat默认情况下是不支持2级域名共享session的,所有有些情况下登陆后从主域名跳转到子域名会发生链接session不相同的情况,但是只需修改几处配置就可以了。 
打开tomcat下conf下context.xml文件 
找到Context标签,修改为如下内容 
如果你的域名是www.test.com 
<Context sessionCookiePath="/path&q</div>
                                </li>
                                <li><a href="/article/701.htm"
                                       title="web报表工具FineReport常用函数的用法总结(数学和三角函数)" target="_blank">web报表工具FineReport常用函数的用法总结(数学和三角函数)</a>
                                    <span class="text-muted">老A不折腾</span>
<a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a>
                                    <div>  
ABS 
ABS(number):返回指定数字的绝对值。绝对值是指没有正负符号的数值。 
Number:需要求出绝对值的任意实数。 
示例: 
ABS(-1.5)等于1.5。 
ABS(0)等于0。 
ABS(2.5)等于2.5。 
  
ACOS 
ACOS(number):返回指定数值的反余弦值。反余弦值为一个角度,返回角度以弧度形式表示。 
Number:需要返回角</div>
                                </li>
                                <li><a href="/article/828.htm"
                                       title="linux 启动java进程 sh文件" target="_blank">linux 启动java进程 sh文件</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/shell/1.htm">shell</a><a class="tag" taget="_blank" href="/search/jar/1.htm">jar</a>
                                    <div>#!/bin/bash
#初始化服务器的进程PId变量
user_pid=0;
robot_pid=0;
loadlort_pid=0;
gateway_pid=0;

#########
#检查相关服务器是否启动成功
#说明:
#使用JDK自带的JPS命令及grep命令组合,准确查找pid
#jps 加 l 参数,表示显示java的完整包路径
#使用awk,分割出pid </div>
                                </li>
                                <li><a href="/article/955.htm"
                                       title="我的spring学习笔记5-如何使用ApplicationContext替换BeanFactory" target="_blank">我的spring学习笔记5-如何使用ApplicationContext替换BeanFactory</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/Spring+3+%E7%B3%BB%E5%88%97/1.htm">Spring 3 系列</a>
                                    <div>如何使用ApplicationContext替换BeanFactory? 
 
package onlyfun.caterpillar.device;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import</div>
                                </li>
                                <li><a href="/article/1082.htm"
                                       title="Linux 内存使用方法详细解析" target="_blank">Linux 内存使用方法详细解析</a>
                                    <span class="text-muted">annan211</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98/1.htm">内存</a><a class="tag" taget="_blank" href="/search/Linux%E5%86%85%E5%AD%98%E8%A7%A3%E6%9E%90/1.htm">Linux内存解析</a>
                                    <div>来源 http://blog.jobbole.com/45748/ 
 
 

我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。

一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。

Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用</div>
                                </li>
                                <li><a href="/article/1209.htm"
                                       title="数据库的单表查询常用命令及使用方法(-)" target="_blank">数据库的单表查询常用命令及使用方法(-)</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0/1.htm">函数</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E8%A1%A8%E6%9F%A5%E8%AF%A2/1.htm">单表查询</a>
                                    <div>  
  
创建数据库; 
      
--建表
create table bloguser(username varchar2(20),userage number(10),usersex char(2));

 
      创建bloguser表,里面有三个字段 
  
  
&nbs</div>
                                </li>
                                <li><a href="/article/1336.htm"
                                       title="多线程基础知识" target="_blank">多线程基础知识</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/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a>
                                    <div>一.进程和线程 
进程就是一个在内存中独立运行的程序,有自己的地址空间。如正在运行的写字板程序就是一个进程。 
“多任务”:指操作系统能同时运行多个进程(程序)。如WINDOWS系统可以同时运行写字板程序、画图程序、WORD、Eclipse等。 
线程:是进程内部单一的一个顺序控制流。 
线程和进程 
a.       每个进程都有独立的</div>
                                </li>
                                <li><a href="/article/1463.htm"
                                       title="fastjson简单使用实例" target="_blank">fastjson简单使用实例</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/fastjson/1.htm">fastjson</a>
                                    <div>一.简介 
        阿里巴巴fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库;包括“序列化”和“反序列化”两部分,它具备如下特征:     </div>
                                </li>
                                <li><a href="/article/1590.htm"
                                       title="【RPC框架Burlap】Spring集成Burlap" target="_blank">【RPC框架Burlap】Spring集成Burlap</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>Burlap和Hessian同属于codehaus的RPC调用框架,但是Burlap已经几年不更新,所以Spring在4.0里已经将Burlap的支持置为Deprecated,所以在选择RPC框架时,不应该考虑Burlap了。 
这篇文章还是记录下Burlap的用法吧,主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成 
 </div>
                                </li>
                                <li><a href="/article/1717.htm"
                                       title="【Mahout一】基于Mahout 命令参数含义" target="_blank">【Mahout一】基于Mahout 命令参数含义</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/Mahout/1.htm">Mahout</a>
                                    <div>1. mahout seqdirectory 
  
    $ mahout seqdirectory 
        --input (-i) input               Path to job input directory(原始文本文件).
        --output (-o) output             The directory pathna</div>
                                </li>
                                <li><a href="/article/1844.htm"
                                       title="linux使用flock文件锁解决脚本重复执行问题" target="_blank">linux使用flock文件锁解决脚本重复执行问题</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/linux+lock%E3%80%80%E9%87%8D%E5%A4%8D%E6%89%A7%E8%A1%8C/1.htm">linux lock 重复执行</a>
                                    <div>linux的crontab命令,可以定时执行操作,最小周期是每分钟执行一次。关于crontab实现每秒执行可参考我之前的文章《linux crontab 实现每秒执行》现在有个问题,如果设定了任务每分钟执行一次,但有可能一分钟内任务并没有执行完成,这时系统会再执行任务。导致两个相同的任务在执行。 
例如:       
<?         
// 
test
.php      </div>
                                </li>
                                <li><a href="/article/1971.htm"
                                       title="java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字" target="_blank">java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class OcuppyMoreThanHalf {

	/**
	 * Q74 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
	 * two solutions:
	 * 1.O(n)
	 * see <beauty of coding>--每次删除两个不同的数字,不改变数组的特性
	 * 2.O(nlogn)
	 * 排序。中间</div>
                                </li>
                                <li><a href="/article/2098.htm"
                                       title="linux 系统相关命令" target="_blank">linux 系统相关命令</a>
                                    <span class="text-muted">candiio</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                                    <div>系统参数 
cat /proc/cpuinfo  cpu相关参数 
cat /proc/meminfo 内存相关参数 
cat /proc/loadavg 负载情况 
性能参数 
1)top 
M:按内存使用排序 
P:按CPU占用排序 
1:显示各CPU的使用情况 
k:kill进程 
o:更多排序规则 
回车:刷新数据 
2)ulimit 
ulimit -a:显示本用户的系统限制参</div>
                                </li>
                                <li><a href="/article/2225.htm"
                                       title="[经营与资产]保持独立性和稳定性对于软件开发的重要意义" target="_blank">[经营与资产]保持独立性和稳定性对于软件开发的重要意义</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91/1.htm">软件开发</a>
                                    <div> 
 
     一个软件的架构从诞生到成熟,中间要经过很多次的修正和改造 
 
      如果在这个过程中,外界的其它行业的资本不断的介入这种软件架构的升级过程中 
    
      那么软件开发者原有的设计思想和开发路线</div>
                                </li>
                                <li><a href="/article/2352.htm"
                                       title="在CentOS5.5上编译OpenJDK6" target="_blank">在CentOS5.5上编译OpenJDK6</a>
                                    <span class="text-muted">Cwind</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/OpenJDK/1.htm">OpenJDK</a>
                                    <div>几番周折终于在自己的CentOS5.5上编译成功了OpenJDK6,将编译过程和遇到的问题作一简要记录,备查。  
0. OpenJDK介绍 
OpenJDK是Sun(现Oracle)公司发布的基于GPL许可的Java平台的实现。其优点: 
1、它的核心代码与同时期Sun(-> Oracle)的产品版基本上是一样的,血统纯正,不用担心性能问题,也基本上没什么兼容性问题;(代码上最主要的差异是</div>
                                </li>
                                <li><a href="/article/2479.htm"
                                       title="java乱码问题" target="_blank">java乱码问题</a>
                                    <span class="text-muted">dashuaifu</span>
<a class="tag" taget="_blank" href="/search/java%E4%B9%B1%E7%A0%81%E9%97%AE%E9%A2%98/1.htm">java乱码问题</a><a class="tag" taget="_blank" href="/search/js%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81/1.htm">js中文乱码</a>
                                    <div>swfupload上传文件参数值为中文传递到后台接收中文乱码               在js中用setPostParams({"tag" : encodeURI( document.getElementByIdx_x("filetag").value,"utf-8")}); 
然后在servlet中String t</div>
                                </li>
                                <li><a href="/article/2606.htm"
                                       title="cygwin很多命令显示command not found的解决办法" target="_blank">cygwin很多命令显示command not found的解决办法</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/cygwin/1.htm">cygwin</a>
                                    <div>cygwin很多命令显示command not found的解决办法 
  
修改cygwin.BAT文件如下 
@echo off 
D: 
set CYGWIN=tty notitle glob 
set PATH=%PATH%;d:\cygwin\bin;d:\cygwin\sbin;d:\cygwin\usr\bin;d:\cygwin\usr\sbin;d:\cygwin\us</div>
                                </li>
                                <li><a href="/article/2733.htm"
                                       title="[介绍]从 Yii 1.1 升级" target="_blank">[介绍]从 Yii 1.1 升级</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/yii2/1.htm">yii2</a>
                                    <div>2.0 版框架是完全重写的,在 1.1 和 2.0 两个版本之间存在相当多差异。因此从 1.1 版升级并不像小版本间的跨越那么简单,通过本指南你将会了解两个版本间主要的不同之处。 
如果你之前没有用过 Yii 1.1,可以跳过本章,直接从"入门篇"开始读起。 
请注意,Yii 2.0 引入了很多本章并没有涉及到的新功能。强烈建议你通读整部权威指南来了解所有新特性。这样有可能会发</div>
                                </li>
                                <li><a href="/article/2860.htm"
                                       title="Linux SSH免登录配置总结" target="_blank">Linux SSH免登录配置总结</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/ssh-keygen/1.htm">ssh-keygen</a><a class="tag" taget="_blank" href="/search/Linux+SSH%E5%85%8D%E7%99%BB%E5%BD%95%E8%AE%A4%E8%AF%81/1.htm">Linux SSH免登录认证</a><a class="tag" taget="_blank" href="/search/Linux+SSH%E4%BA%92%E4%BF%A1/1.htm">Linux SSH互信</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/2187265 一、原理 
     我们使用ssh-keygen在ServerA上生成私钥跟公钥,将生成的公钥拷贝到远程机器ServerB上后,就可以使用ssh命令无需密码登录到另外一台机器ServerB上。 
     生成公钥与私钥有两种加密方式,第一种是</div>
                                </li>
                                <li><a href="/article/2987.htm"
                                       title="手势滑动销毁Activity" target="_blank">手势滑动销毁Activity</a>
                                    <span class="text-muted">gundumw100</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>老是效仿ios,做android的真悲催! 
有需求:需要手势滑动销毁一个Activity 
怎么办尼?自己写? 
不用~,网上先问一下百度。 
结果: 
http://blog.csdn.net/xiaanming/article/details/20934541 
 
 
首先将你需要的Activity继承SwipeBackActivity,它会在你的布局根目录新增一层SwipeBackLay</div>
                                </li>
                                <li><a href="/article/3114.htm"
                                       title="JavaScript变换表格边框颜色" target="_blank">JavaScript变换表格边框颜色</a>
                                    <span class="text-muted">ini</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a>
                                    <div>效果查看:http://hovertree.com/texiao/js/2.htm代码如下,保存到HTML文件也可以查看效果: 
<html>
<head>
<meta charset="utf-8">
<title>表格边框变换颜色代码-何问起</title>
</head>
<body&</div>
                                </li>
                                <li><a href="/article/3241.htm"
                                       title="Kafka Rest : Confluent" target="_blank">Kafka Rest : Confluent</a>
                                    <span class="text-muted">kane_xie</span>
<a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/REST/1.htm">REST</a><a class="tag" taget="_blank" href="/search/confluent/1.htm">confluent</a>
                                    <div>最近拿到一个kafka rest的需求,但kafka暂时还没有提供rest api(应该是有在开发中,毕竟rest这么火),上网搜了一下,找到一个Confluent Platform,本文简单介绍一下安装。 
这里插一句,给大家推荐一个九尾搜索,原名叫谷粉SOSO,不想fanqiang谷歌的可以用这个。以前在外企用谷歌用习惯了,出来之后用度娘搜技术问题,那匹配度简直感人。 
 
 环境声明:Ubu</div>
                                </li>
                                <li><a href="/article/3368.htm"
                                       title="Calender不是单例" target="_blank">Calender不是单例</a>
                                    <span class="text-muted">men4661273</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/Calender/1.htm">Calender</a>
                                    <div>         在我们使用Calender的时候,使用过Calendar.getInstance()来获取一个日期类的对象,这种方式跟单例的获取方式一样,那么它到底是不是单例呢,如果是单例的话,一个对象修改内容之后,另外一个线程中的数据不久乱套了吗?从试验以及源码中可以得出,Calendar不是单例。 
测试: 
  Calendar c1 = </div>
                                </li>
                                <li><a href="/article/3495.htm"
                                       title="线程内存和主内存之间联系" target="_blank">线程内存和主内存之间联系</a>
                                    <span class="text-muted">qifeifei</span>
<a class="tag" taget="_blank" href="/search/java+thread/1.htm">java thread</a>
                                    <div>1, java多线程共享主内存中变量的时候,一共会经过几个阶段,    
  lock:将主内存中的变量锁定,为一个线程所独占。 
  unclock:将lock加的锁定解除,此时其它的线程可以有机会访问此变量。 
  read:将主内存中的变量值读到工作内存当中。 
  load:将read读取的值保存到工作内存中的变量副本中。 
  </div>
                                </li>
                                <li><a href="/article/3622.htm"
                                       title="schedule和scheduleAtFixedRate" target="_blank">schedule和scheduleAtFixedRate</a>
                                    <span class="text-muted">tangqi609567707</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/timer/1.htm">timer</a><a class="tag" taget="_blank" href="/search/schedule/1.htm">schedule</a>
                                    <div>原文地址:http://blog.csdn.net/weidan1121/article/details/527307 
import java.util.Timer;import java.util.TimerTask;import java.util.Date; 
/** * @author vincent */public class TimerTest { 
 </div>
                                </li>
                                <li><a href="/article/3749.htm"
                                       title="erlang 部署" target="_blank">erlang 部署</a>
                                    <span class="text-muted">wudixiaotie</span>
<a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a>
                                    <div>1.如果在启动节点的时候报这个错 : 
{"init terminating in do_boot",{'cannot load',elf_format,get_files}} 
则需要在reltool.config中加入 
{app, hipe, [{incl_cond, exclude}]}, 
  
  
2.当generate时,遇到: 
ERROR</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>