async

async是什么?
说白了就是Generator的语法糖
*换成async,把yield换成await罢了

//Generator写法
const gen = function* () {
  const f1 = yield readFile('/etc/fstab');
  const f2 = yield readFile('/etc/shells');
  console.log(f1.toString());
  console.log(f2.toString());
};

//async写法
const asyncReadFile = async function () {
  const f1 = await readFile('/etc/fstab');
  const f2 = await readFile('/etc/shells');
  console.log(f1.toString());
  console.log(f2.toString());
};

但他还是有可取之处的

  • 内置执行器
    async函数的执行像普通函数一样,只需要一个括号即可asyncReadFile()不像Generator,需要迭代器,调用next方法才可以执行

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

  • 更广的适用性。
    co模块约定,yield命令后面只能是 Thunk 函数或 Promise 对象,而async函数的await命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时会自动转成立即 resolvedPromise 对象)。

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

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

基本用法

async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。

下面是一个例子。

async function getStockPriceByName(name) {
  const symbol = await getStockSymbol(name);
  const stockPrice = await getStockPrice(symbol);
  return stockPrice;
}

getStockPriceByName('goog').then(function (result) {
  console.log(result);
});

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方法回调函数接收到。

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> 
   <h5>await命令</h5> 
   <p>正常情况下,await命令后面是一个 Promise 对象,返回该对象的结果。如果不是 Promise 对象,就直接返回对应的值。</p> 
   <pre><code>async function f() {
  // 等同于
  // return 123;
  return await 123;
}

f().then(v => console.log(v))
// 123
</code></pre> 
   <p>上面代码中,await命令的参数是数值123,这时等同于return 123。</p> 
   <p>另一种情况是,await命令后面是一个thenable对象(即定义then方法的对象),那么await会将其等同于 Promise 对象。</p> 
   <pre><code>class Sleep {
  constructor(timeout) {
    this.timeout = timeout;
  }
  then(resolve, reject) {
    const startTime = Date.now();
    setTimeout(
      () => resolve(Date.now() - startTime),
      this.timeout
    );
  }
}

(async () => {
  const sleepTime = await new Sleep(1000);
  console.log(sleepTime);
})();
// 1000
</code></pre> 
   <p>上面代码中,await命令后面是一个Sleep对象的实例。这个实例不是 Promise 对象,但是因为定义了then方法,await会将其视为Promise处理。</p> 
   <p>这个例子还演示了如何实现休眠效果。JavaScript 一直没有休眠的语法,但是借助<code>await</code>命令就可以让程序停顿指定的时间。</p> 
   <pre><code>function sleep(interval) {
  return new Promise(resolve => {
    setTimeout(resolve, interval);
  })
}

// 用法
async function one2FiveInAsync() {
  for(let i = 1; i <= 5; i++) {
    console.log(i);
    await sleep(1000);
  }
}

one2FiveInAsync();
</code></pre> 
   <p>其中for循环也会延缓执行<br> await命令后面的 Promise 对象如果变为reject状态,则reject的参数会被catch方法的回调函数接收到。</p> 
   <p>任何一个await语句后面的 Promise 对象变为reject状态,那么整个async函数都会中断执行。</p> 
   <pre><code>async function f() {
  await Promise.reject('出错了');
  await Promise.resolve('hello world'); // 不会执行
}
</code></pre> 
   <p>有时,我们希望即使前一个异步操作失败,也不要中断后面的异步操作。这时可以将第一个<code>await</code>放在<code>try...catch</code>结构里面,这样不管这个异步操作是否成功,第二个<code>await</code>都会执行。<br> 另一种方法是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> 
   <h5>注意点</h5> 
   <ul> 
    <li>await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在try...catch代码块中。</li> 
   </ul> 
   <pre><code>async function myFunction() {
  try {
    await somethingThatReturnsAPromise();
  } catch (err) {
    console.log(err);
  }
}

// 另一种写法

async function myFunction() {
  await somethingThatReturnsAPromise()
  .catch(function (err) {
    console.log(err);
  });
}
</code></pre> 
   <ul> 
    <li>多个await命令后面的异步操作,如果不存在继发关系,最好让它们同时触发。</li> 
   </ul> 
   <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> 
   <ul> 
    <li>await命令只能用在async函数之中,如果用在普通函数,就会报错。<br> 有时把普通函数改写成async函数也会报错。比如forEach</li> 
   </ul> 
   <pre><code>function dbFuc(db) { //这里不需要 async
  let docs = [{}, {}, {}];

  // 可能得到错误结果
  docs.forEach(async function (doc) {
    await db.post(doc);
  });
}
</code></pre> 
   <p>上面代码可能不会正常工作,原因是这时三个db.post操作将是并发执行,也就是同时执行,而不是继发执行。正确的写法是采用for循环。</p> 
   <pre><code>async function dbFuc(db) {
  let docs = [{}, {}, {}];

  for (let doc of docs) {
    await db.post(doc);
  }
}
</code></pre> 
   <ul> 
    <li>async 函数可以保留运行堆栈。</li> 
   </ul> 
   <pre><code>const a = () => {
  b().then(() => c());
};
</code></pre> 
   <p>上面代码中,函数a内部运行了一个异步任务b()。当b()运行的时候,函数a()不会中断,而是继续执行。等到b()运行结束,可能a()早就运行结束了,b()所在的上下文环境已经消失了。如果b()或c()报错,错误堆栈将不包括a()。</p> 
   <p>现在将这个例子改成async函数。</p> 
   <pre><code>const a = async () => {
  await b();
  c();
};
</code></pre> 
   <h5>async函数的实现原理</h5> 
   <p>将 Generator 函数和自动执行器,包装在一个函数里。<br> 手写await?</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> 
   <h5>异步加载模块</h5> 
   <pre><code>// awaiting.js
const dynamic = import(someMission);
const data = fetch(url);
export const output = someProcess((await dynamic).default, await data);
</code></pre> 
   <p>上面代码中,两个异步操作在输出的时候,都加上了await命令。只有等到异步操作完成,这个模块才会输出值。</p> 
   <p>加载这个模块的写法如下。</p> 
   <pre><code>// usage.js
import { output } from "./awaiting.js";
function outputPlusValue(value) { return output + value }

console.log(outputPlusValue(100));
setTimeout(() => console.log(outputPlusValue(100), 1000);
</code></pre> 
  </div> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1280841606836011008"></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">你可能感兴趣的:(async)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1949860983329583104.htm"
                           title="从手写 Promise 到 Event Loop:前端异步面试题全解读" target="_blank">从手写 Promise 到 Event Loop:前端异步面试题全解读</a>
                        <span class="text-muted"></span>

                        <div>你真的搞懂了JS的异步吗?面试官一个“nextTick和微任务的区别”,别说新手,连三年经验的工程师也常答不上来。开场:异步机制,就是面试里的“送命题”你是不是也有过这样的经历:“你能手写一个Promise吗?”“你知道async/await背后是怎么工作的?”“setTimeout(fn,0)一定最先执行吗?”听起来是基础题,但很多人答得云里雾里。异步是JS的灵魂,但也因为它涉及事件循环、任务队</div>
                    </li>
                    <li><a href="/article/1949849626160984064.htm"
                           title="深度解析 I/O:BIO、NIO、AIO 大揭秘" target="_blank">深度解析 I/O:BIO、NIO、AIO 大揭秘</a>
                        <span class="text-muted"></span>

                        <div>目录一、概念1.1I/O工作本质1.2BIO&NIO&AIO二、BIO&NIO&AIO工作模式2.1BIO(BlockingIO阻塞式I/O)2.2NIO(Non-blockingIO或NewIO非阻塞式I/O)2.3AIO(AsynchronousIO,也叫NIO.2异步I/O)三、应用模式3.1AIO(异步+回调)3.1.1为什么AIO"天生场景窄"(尤其Java)?3.2BIO(阻塞)3.2</div>
                    </li>
                    <li><a href="/article/1949825555629142016.htm"
                           title="策略模式(Strategy Pattern)+ 模板方法模式(Template Method Pattern)的组合使用" target="_blank">策略模式(Strategy Pattern)+ 模板方法模式(Template Method Pattern)的组合使用</a>
                        <span class="text-muted"></span>

                        <div>usingMicrosoft.Extensions.DependencyInjection;namespaceConsoleApp9{internalclassProgram{staticasyncTaskMain(string[]args){Console.WriteLine("Hello,World!");//创建并配置依赖注入容器var_serviceProvider=newServiceC</div>
                    </li>
                    <li><a href="/article/1949618407762620416.htm"
                           title="Swift 5, TypeScript, and Python Async/Await 机制对比分析" target="_blank">Swift 5, TypeScript, and Python Async/Await 机制对比分析</a>
                        <span class="text-muted">步子哥</span>
<a class="tag" taget="_blank" href="/search/swift/1.htm">swift</a><a class="tag" taget="_blank" href="/search/typescript/1.htm">typescript</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>Swift5、TypeScript和Python的async/await机制都旨在简化异步编程,但它们在实现细节、并发模型和性能特征上有所不同。Swift5的async/await构建于结构化并发之上,强调通过Task进行非阻塞的任务挂起和高效的线程利用。TypeScript(JavaScript)的async/await是基于Promise和事件循环的语法糖,适用于单线程非阻塞I/O环境。Pyt</div>
                    </li>
                    <li><a href="/article/1949593813479649280.htm"
                           title="携带参数的表单文件上传 axios, SpringBoot" target="_blank">携带参数的表单文件上传 axios, SpringBoot</a>
                        <span class="text-muted">coder__c</span>
<a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A0%81%E6%8A%80%E5%B7%A7/1.htm">编码技巧</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E6%AE%B5/1.htm">代码段</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>页面上的表单如上图,点击确定按钮需要把参数统一传给后端.前端代码:表单的提交方法constsubmit=async()=>{constformData=newFormData();formData.append("bookName",bookForm.value.bookName);formData.append("author",bookForm.value.author);formData.a</div>
                    </li>
                    <li><a href="/article/1949452097242066944.htm"
                           title="前端node.js入门" target="_blank">前端node.js入门</a>
                        <span class="text-muted">小周不想卷</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AFnode.js%E5%85%A5%E9%97%A8/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/node.js/1.htm">node.js</a>
                        <div>(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)目录Node.js入门概览什么是Node.js?为什么选择Node.js?基础安装与环境配置安装Node.js第一个Node.js应用创建一个简单的HTTP服务器核心模块与API文件系统(fs)模块路径(path)模块异步编程回调函数PromisesAsync/AwaitNode.js框架与中间件Expres</div>
                    </li>
                    <li><a href="/article/1949451845038567424.htm"
                           title="51单片机——串口通信" target="_blank">51单片机——串口通信</a>
                        <span class="text-muted"></span>

                        <div>1、串口简介串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。51单片机内部自带UART(UniversalAsynchronousReceiverTransmitter,通用异步收发器),可实现单片机的串口通信。2</div>
                    </li>
                    <li><a href="/article/1949446801073434624.htm"
                           title="Node.js 手册:详细介绍及使用指南" target="_blank">Node.js 手册:详细介绍及使用指南</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/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>Node.js手册:详细介绍及使用指南1.Node.js的本质与设计演进Node.js是一个基于ChromeV8JavaScript引擎构建的异步事件驱动型JavaScript运行时(AsynchronousEvent-DrivenJavaScriptRuntime),其核心是利用非阻塞I/O和事件驱动模型解决高并发场景的性能瓶颈。历史背景:Web服务器的"并发之殇"线程模型的代价:2000年代主</div>
                    </li>
                    <li><a href="/article/1949392721726730240.htm"
                           title="JavaScript 文件在页面渲染中的加载机制详解" target="_blank">JavaScript 文件在页面渲染中的加载机制详解</a>
                        <span class="text-muted">neon1204</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95/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/ecmascript/1.htm">ecmascript</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>JavaScript文件在页面渲染中的加载机制详解1.基本加载流程当浏览器解析HTML遇到标签时,会按照以下顺序处理:否deferasyncHTML解析遇到script标签是否defer/async?停止HTML解析下载JS文件执行JS代码恢复HTML解析异步下载,延迟执行异步下载,立即执行2.不同script加载模式的对比加载方式HTML解析是否阻塞JS执行时机执行顺序保证普通script阻塞下</div>
                    </li>
                    <li><a href="/article/1949360187580149760.htm"
                           title="MySQL 8.0 OCP 1Z0-908 题目解析(8)" target="_blank">MySQL 8.0 OCP 1Z0-908 题目解析(8)</a>
                        <span class="text-muted"></span>

                        <div>题目029Choosetwo.Whichtwoaretrueaboutbinarylogsusedinasynchronousreplication?□A)Theycontaineventsthatdescribeallqueriesrunonthemaster.□B)Theycontaineventsthatdescribedatabasechangesonthemaster.□C)Theyar</div>
                    </li>
                    <li><a href="/article/1949354134566137856.htm"
                           title="JavaScript异步编程艺术:深入浅出回调函数与异步挑战【含代码示例】" target="_blank">JavaScript异步编程艺术:深入浅出回调函数与异步挑战【含代码示例】</a>
                        <span class="text-muted">DTcode7</span>
<a class="tag" taget="_blank" href="/search/HTML%E7%BD%91%E7%AB%99%E5%BC%80%E5%8F%91/1.htm">HTML网站开发</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8%E4%B8%89%E5%A4%A7%E6%A0%B8%E5%BF%83%E4%B9%8BJS/1.htm">前端基础入门三大核心之JS</a><a class="tag" taget="_blank" href="/search/HTML5/1.htm">HTML5</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E4%B8%89%E5%A4%A7%E6%A0%B8%E5%BF%83/1.htm">前端三大核心</a><a class="tag" taget="_blank" href="/search/JS/1.htm">JS</a>
                        <div>JavaScript异步编程艺术:深入浅出回调函数与异步挑战【含代码示例】异步编程基础:为何我们需要它?回调函数:异步的起点深入回调:多层嵌套的挑战解决方案:Promise与async/await案例一:Promise的优雅案例二:async/await的丝滑体验异步的最佳实践与性能优化遇到问题怎么办?问题排查思路结语:异步的未来与讨论在JavaScript的奇妙世界里,异步编程是每位前端开发者绕</div>
                    </li>
                    <li><a href="/article/1949303945088266240.htm"
                           title="JS异步编程:从回调地狱到Async/Await的华丽转身" target="_blank">JS异步编程:从回调地狱到Async/Await的华丽转身</a>
                        <span class="text-muted">PineappleCode</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/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a>
                        <div>深入浅出JS异步编程:从回调地狱到Async/Await的华丽转身嗨,各位掘友们!欢迎来到我的掘金小课堂。今天我们要聊一个让无数前端开发者又爱又恨,但又不得不面对的话题——JavaScript异步编程。别看它名字听起来有点“高大上”,其实理解起来就像谈恋爱一样,充满了等待、承诺和惊喜(也可能是惊吓)!想象一下,你点了一份外卖,你不会傻傻地站在厨房门口,看着厨师一步步切菜、炒菜、打包,直到外卖送到你</div>
                    </li>
                    <li><a href="/article/1949251496080109568.htm"
                           title="【HTML】<script>元素中的 defer 和 async 属性详解" target="_blank">【HTML】<script>元素中的 defer 和 async 属性详解</a>
                        <span class="text-muted"></span>

                        <div>文章目录元素中的defer和async属性详解基本概念传统脚本加载defer属性async属性对比表格使用场景建议注意事项示例在HTML5中,元素有两个控制脚本加载和执行行为的属性:defer和async。这两个属性可以帮助开发者优化页面加载性能,特别是在处理外部脚本时。基本概念传统脚本加载没有使用任何属性的元素会阻塞HTML解析:浏览器遇到这个脚本时会暂停HTML解析下载并执行脚本执行完成后才继</div>
                    </li>
                    <li><a href="/article/1949216181260972032.htm"
                           title="async/await 函数" target="_blank">async/await 函数</a>
                        <span class="text-muted">Maybyy</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>1.async函数的原理async函数在本质上是基于Promise实现的,所以先要理解promise和JavaScript异步操作JavaScript异步操作:JavaScript是单线程的,它通过事件循环(EventLoop)来处理异步操作。通常,异步操作不会阻塞主线程,而是通过将回调函数放入事件队列来等待执行。这种机制使得JavaScript能够同时处理多个任务,而不会阻塞UI或其他操作。Pr</div>
                    </li>
                    <li><a href="/article/1949053138665271296.htm"
                           title="AJAX与ASP.NET Web方法的实践与原理" target="_blank">AJAX与ASP.NET Web方法的实践与原理</a>
                        <span class="text-muted">t0_54coder</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%E6%89%8B%E5%86%8C/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/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a><a class="tag" taget="_blank" href="/search/%E4%B8%AA%E4%BA%BA%E5%BC%80%E5%8F%91/1.htm">个人开发</a>
                        <div>在现代Web开发中,AJAX(AsynchronousJavaScriptandXML)是提升用户体验的关键技术之一,尤其在需要与服务器交互而不刷新整个页面的情况下。今天,我们将探讨如何在ASP.NET中使用AJAX结合Web方法(WebMethod)来实现这一目的,并深入分析其中的原理。实例背景假设我们有一个简单的温度转换器,需要将华氏温度转换为摄氏温度,我们希望这个转换过程是即时的,不需要用户</div>
                    </li>
                    <li><a href="/article/1949044429654388736.htm"
                           title="AJAX 与 ASP 的深入探讨" target="_blank">AJAX 与 ASP 的深入探讨</a>
                        <span class="text-muted">froginwe11</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>AJAX与ASP的深入探讨引言随着互联网技术的飞速发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。在众多技术中,AJAX(AsynchronousJavaScriptandXML)和ASP(ActiveServerPages)是两种非常流行的技术。本文将深入探讨AJAX和ASP的基本原理、应用场景以及它们之间的相互关系。AJAX基础什么是AJAX?AJAX是一种基于JavaScr</div>
                    </li>
                    <li><a href="/article/1949036487886565376.htm"
                           title="JavaScript异步编程——async(返回Promsie)&await(后续任务包装成微任务,入微任务顺序与是否为显示Promise有关)底层原理" target="_blank">JavaScript异步编程——async(返回Promsie)&await(后续任务包装成微任务,入微任务顺序与是否为显示Promise有关)底层原理</a>
                        <span class="text-muted"></span>

                        <div>async/await是JavaScript中处理异步操作的语法糖,其底层基于Promise和生成器(Generator),通过暂停和恢复函数执行的机制实现异步代码的同步化书写。以下是其核心原理的详细解析:⚙️一、本质与实现基础async函数的特性async函数隐式返回Promise:若函数返回非Promise值(如return42),自动包装为Promise.resolve(42)。若抛出异常(</div>
                    </li>
                    <li><a href="/article/1949010144050343936.htm"
                           title="JavaScript 异步编程:从回调地狱到 Promise 再到 Async/Await" target="_blank">JavaScript 异步编程:从回调地狱到 Promise 再到 Async/Await</a>
                        <span class="text-muted">大力出奇迹985</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ecmascript/1.htm">ecmascript</a>
                        <div>本文围绕JavaScript异步编程展开,详细阐述了其从回调函数陷入“回调地狱”,到Promise规范出现解决嵌套问题,再到Async/Await语法进一步简化异步代码的发展历程。介绍了各阶段异步编程的实现方式、特点、存在的问题及解决办法,展现了JavaScript在异步处理方面的不断优化,帮助读者清晰了解这一技术演进脉络,掌握不同阶段的异步编程技巧。一、JavaScript异步编程的必要性在Ja</div>
                    </li>
                    <li><a href="/article/1948898702034792448.htm"
                           title="【鸿蒙HarmonyOS Next App实战开发】开发一款精准图片取色器" target="_blank">【鸿蒙HarmonyOS Next App实战开发】开发一款精准图片取色器</a>
                        <span class="text-muted">阿康2024</span>
<a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/1.htm">鸿蒙应用开发</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>背景与功能在设计开发过程中,从图片中提取精确颜色值是一个常见需求。本文介绍如何在HarmonyOS中开发一款功能完整的图片取色器,支持:从相册选择任意图片移动十字准星精确定位像素点实时显示十六进制色值和RGB值一键复制颜色信息响应式布局适配不同设备核心技术实现1.图片选择与处理通过PhotoViewPicker选择系统图片,使用ImageKit创建PixelMap获取像素数据:asyncselec</div>
                    </li>
                    <li><a href="/article/1948794313995513856.htm"
                           title="el-select移动端唤不出软键盘" target="_blank">el-select移动端唤不出软键盘</a>
                        <span class="text-muted">汪叽家的兔子羡</span>
<a class="tag" taget="_blank" href="/search/elementui/1.htm">elementui</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</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>一、场景:移动端使用elementUI,select组件点击未唤起软键盘二、原因:el-select组件在移动端会默认加上readonly属性在ElementPlus中已经优化了该问题三、解决办法:获取对应select组件,手动移除readonly属性,代码如下:clear(async){this.$nextTick(()=>{if(!async){//ios手机有延迟问题setTimeout((</div>
                    </li>
                    <li><a href="/article/1948744015377657856.htm"
                           title="为什么我的 @Async 不生效?很多人都栽在这个坑里" target="_blank">为什么我的 @Async 不生效?很多人都栽在这个坑里</a>
                        <span class="text-muted">java干货</span>
<a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>在构建现代Web应用时,提升响应速度和用户体验至关重要。一个常见的场景是:用户完成注册后,系统需要发送一封欢迎邮件。如果我们将这个耗时的邮件发送操作与主注册流程同步执行,用户就必须在原地等待邮件发送完成才能看到“注册成功”的提示,这显然是不可接受的。SpringBoot提供的@Async注解正是解决此类问题的利器。它能轻松地将一个方法标记为异步执行,使其在后台线程中运行,而主流程则可以立即返回。然</div>
                    </li>
                    <li><a href="/article/1948556306075938816.htm"
                           title="vue3 antd modal对话框里的前端html导出成pdf并下载" target="_blank">vue3 antd modal对话框里的前端html导出成pdf并下载</a>
                        <span class="text-muted">清岚_lxn</span>
<a class="tag" taget="_blank" href="/search/vue3/1.htm">vue3</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a><a class="tag" taget="_blank" href="/search/vue3/1.htm">vue3</a><a class="tag" taget="_blank" href="/search/html2canvas/1.htm">html2canvas</a><a class="tag" taget="_blank" href="/search/jspdf/1.htm">jspdf</a>
                        <div>1.安装html2canvas和jspdf:npminstallhtml2canvasjspdf2.新建exportToPDF.tsimporthtml2canvasfrom'html2canvas';importjsPDFfrom'jspdf';constexportToPDF=async(element,filename='export.pdf')=>{constpdf=newjsPDF('p</div>
                    </li>
                    <li><a href="/article/1948222859193151488.htm"
                           title="python3写一个异步流式 http 接口服务调用大模型(async, stream, sanic)---6.2" target="_blank">python3写一个异步流式 http 接口服务调用大模型(async, stream, sanic)---6.2</a>
                        <span class="text-muted"></span>

                        <div>python3写一个异步流式http接口服务调用大模型(async,stream,sanic)python3写一个异步流式http接口服务调用大模型(async,stream,sanic)python3写一个异步流式http接口服务调用大模型(async,stream,sanic),异步适合处理I/O密集型操作(文件/网络请求),特别地,调用大模型等待时间特别长。记录一下!一、Sanic介绍San</div>
                    </li>
                    <li><a href="/article/1948187052705116160.htm"
                           title="【源码解析】SpringBoot使用DeferredResult实现长轮询的原理分析" target="_blank">【源码解析】SpringBoot使用DeferredResult实现长轮询的原理分析</a>
                        <span class="text-muted"></span>

                        <div>使用背景在Nacos配置更新和Apollo的配置更新,我们可以看到长轮询(长连接)的身影。长连接的实现可以节约系统资源,长连接可以在连接建立后持续通信,避免频繁地建立和断开连接,减少系统开销。使用长连接可以保证连接的实时性,及时推送服务实例的上下线情况和配置信息,保证客户端能够及时地感知到变化。Nacos主要是通过AsyncContext来实现长连接的。而Apollo是通过DeferredResu</div>
                    </li>
                    <li><a href="/article/1948159947363643392.htm"
                           title="Node.js:常用工具、GET/POST请求的写法、工具模块" target="_blank">Node.js:常用工具、GET/POST请求的写法、工具模块</a>
                        <span class="text-muted">Littlewith</span>
<a class="tag" taget="_blank" href="/search/Node.js%E6%8A%80%E6%9C%AF/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/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><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/%E9%9D%A2%E8%AF%95/1.htm">面试</a>
                        <div>Node.js常用工具util是一个Node.js的核心模块,用于弥补Javascript过于精简的不足constutil=require("util");util.callbackify将async异步函数(或者一个返回值为Promise的函数)转换成遵循异常优先的回调风格的函数,例如将(err,value)=>…回调作为最后一个参数。在回调函数中,第一个参数为拒绝的原因(如果Promise解决</div>
                    </li>
                    <li><a href="/article/1947994812347117568.htm"
                           title="一文快速了解.NET项目文件(.csproj) ,基础而重要的文件【代码之美系列】" target="_blank">一文快速了解.NET项目文件(.csproj) ,基础而重要的文件【代码之美系列】</a>
                        <span class="text-muted">Microi风闲</span>
<a class="tag" taget="_blank" href="/search/%E3%80%90%E5%BC%80%E6%BA%90%E3%80%91NET/1.htm">【开源】NET</a><a class="tag" taget="_blank" href="/search/Core/1.htm">Core</a><a class="tag" taget="_blank" href="/search/%E8%B7%A8%E5%B9%B3%E5%8F%B0/1.htm">跨平台</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a>
                        <div>代码之美系列目录一、C#命名规则规范二、C#代码约定规范三、C#参数类型约束四、浅析B/S应用程序体系结构原则五、浅析C#Async和Await六、浅析ASP.NETCoreSignalR双工通信七、浅析ASP.NETCore和MongoDB创建WebAPI八、浅析ASP.NETWebUI框架RazorPages/MVC/WebAPI/Blazor九、如何使用MiniProfilerWebAPI分</div>
                    </li>
                    <li><a href="/article/1947983215675371520.htm"
                           title="python3异步爬虫:asyncio + aiohttp + aiofiles(python经典编程案例)" target="_blank">python3异步爬虫:asyncio + aiohttp + aiofiles(python经典编程案例)</a>
                        <span class="text-muted">数据知道</span>
<a class="tag" taget="_blank" href="/search/python3%E6%A1%88%E4%BE%8B%E5%92%8C%E6%80%BB%E7%BB%93/1.htm">python3案例和总结</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>更多内容请见:python3案例和总结-专栏介绍和目录文章目录1.安装依赖库2.异步爬虫的基本流程3.实现异步爬虫3.1代码实现3.2代码说明4.运行效果5.扩展功能5.1设置请求头5.2处理异常5.3限制并发数5.4爬取图片6.总结使用Python的异步编程技术(asyncio+aiohttp+aiofiles)可以实现高效的异步爬虫。以下是详细的使用指南和代码示例。1.安装依赖库首先安装所需的</div>
                    </li>
                    <li><a href="/article/1947838871320457216.htm"
                           title="5.Kotlin协程" target="_blank">5.Kotlin协程</a>
                        <span class="text-muted">热爱Android的人</span>
<a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a>
                        <div>文章目录1.协程的基本用法1.1先添加依赖库1.2开启一个协程GlobalScope.launch函数delay()函数Thread.sleep()函数runBlocking函数1.3创建多个协程launch函数suspend关键字coroutineScope函数2.更多的作用域构建器async函数withContext()函数线程参数3.使用协程简化回调的写法suspendCoroutine函数</div>
                    </li>
                    <li><a href="/article/1947827780305612800.htm"
                           title="Ajax与axios" target="_blank">Ajax与axios</a>
                        <span class="text-muted">wwwwdn</span>
<a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/okhttp/1.htm">okhttp</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>本文是学习了网上的Ajax的课程总结,并加上了一些自己的总结。AjaxAjax(AsynchronousJavascriptAndXML),即是异步的JavaScript和XML,Ajax其实就是浏览器与服务器之间的一种异步通信方式。XMLHttpRequest(XHR)XMLHttpRequest(XHR)对象用于与服务器交互。通过XMLHttpRequest可以在不刷新页面的情况下请求特定UR</div>
                    </li>
                    <li><a href="/article/1947726193386123264.htm"
                           title="ffmpeg音视频开发实战6,flutter开源项目商业化" target="_blank">ffmpeg音视频开发实战6,flutter开源项目商业化</a>
                        <span class="text-muted">2401_84408734</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/flutter/1.htm">flutter</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a>
                        <div>正文Java集合:使用场景、源码阅读GC机制虚拟机对象内存分配要学好Android,必须要有扎实的Java基础(当然,现在还有Kotlin)。这里只列出了四点,但Java的体系非常庞大,重难点当然不只这些,列出来的是在实际项目和面试中常用或常见的。Android常用/重要类ActivityHandlerHandlerThreadAsyncTaskBinderAndroid这几个类在编程时是比较高频</div>
                    </li>
                                <li><a href="/article/76.htm"
                                       title="遍历dom 并且存储(将每一层的DOM元素存在数组中)" target="_blank">遍历dom 并且存储(将每一层的DOM元素存在数组中)</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/html/1.htm">html</a>
                                    <div>数组从0开始!! 
 


var a=[],i=0;
for(var j=0;j<30;j++){
		a[j]=[];//数组里套数组,且第i层存储在第a[i]中
	}

function walkDOM(n){
	
			do{
			if(n.nodeType!==3)//筛选去除#text类型

			a[i].push(n);
			
			//con</div>
                                </li>
                                <li><a href="/article/203.htm"
                                       title="Android+Jquery Mobile学习系列(9)-总结和代码分享" target="_blank">Android+Jquery Mobile学习系列(9)-总结和代码分享</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/JQuery+Mobile/1.htm">JQuery Mobile</a>
                                    <div>目录导航 
  
经过一个多月的边学习边练手,学会了Android基于Web开发的毛皮,其实开发过程中用Android原生API不是很多,更多的是HTML/Javascript/Css。 
  
个人觉得基于WebView的Jquery Mobile开发有以下优点: 
1、对于刚从Java Web转型过来的同学非常适合,只要懂得HTML开发就可以上手做事。 
2、jquerym</div>
                                </li>
                                <li><a href="/article/330.htm"
                                       title="impala参考资料" target="_blank">impala参考资料</a>
                                    <span class="text-muted">dayutianfei</span>
<a class="tag" taget="_blank" href="/search/impala/1.htm">impala</a>
                                    <div>记录一些有用的Impala资料 
  
1. 入门资料 
>>官网翻译: 
    http://my.oschina.net/weiqingbin/blog?catalog=423691 
  
2. 实用进阶 
>>代码&架构分析: 
    Impala/Hive现状分析与前景展望:http</div>
                                </li>
                                <li><a href="/article/457.htm"
                                       title="JAVA 静态变量与非静态变量初始化顺序之新解" target="_blank">JAVA 静态变量与非静态变量初始化顺序之新解</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/%E9%9D%99%E6%80%81/1.htm">静态</a><a class="tag" taget="_blank" href="/search/%E9%9D%9E%E9%9D%99%E6%80%81/1.htm">非静态</a><a class="tag" taget="_blank" href="/search/%E9%A1%BA%E5%BA%8F/1.htm">顺序</a>
                                    <div>今天和同事争论一问题,关于静态变量与非静态变量的初始化顺序,谁先谁后,最终想整理出来!测试代码: 
import java.util.Map;

public class T {

	public static T t = new T();
	private Map map = new HashMap();
	public T(){
		System.out.println(&quo</div>
                                </li>
                                <li><a href="/article/584.htm"
                                       title="跳出iframe返回外层页面" target="_blank">跳出iframe返回外层页面</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/iframe/1.htm">iframe</a>
                                    <div>在web开发过程中难免要用到iframe,但当连接超时或跳转到公共页面时就会出现超时页面显示在iframe中,这时我们就需要跳出这个iframe到达一个公共页面去。 
首先跳转到一个中间页,这个页面用于判断是否在iframe中,在页面加载的过程中调用如下代码: 
<script type="text/javascript">
//<!--
function</div>
                                </li>
                                <li><a href="/article/711.htm"
                                       title="JAVA多线程监听JMS、MQ队列" target="_blank">JAVA多线程监听JMS、MQ队列</a>
                                    <span class="text-muted">510888780</span>
<a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a>
                                    <div>背景:消息队列中有非常多的消息需要处理,并且监听器onMessage()方法中的业务逻辑也相对比较复杂,为了加快队列消息的读取、处理速度。可以通过加快读取速度和加快处理速度来考虑。因此从这两个方面都使用多线程来处理。对于消息处理的业务处理逻辑用线程池来做。对于加快消息监听读取速度可以使用1.使用多个监听器监听一个队列;2.使用一个监听器开启多线程监听。 
对于上面提到的方法2使用一个监听器开启多线</div>
                                </li>
                                <li><a href="/article/838.htm"
                                       title="第一个SpringMvc例子" target="_blank">第一个SpringMvc例子</a>
                                    <span class="text-muted">布衣凌宇</span>
<a class="tag" taget="_blank" href="/search/spring+mvc/1.htm">spring mvc</a>
                                    <div>第一步:导入需要的包; 
第二步:配置web.xml文件 
 
<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" 
 xmlns="http://java.sun.com/xml/ns/javaee" 
 xmlns:xsi=</div>
                                </li>
                                <li><a href="/article/965.htm"
                                       title="我的spring学习笔记15-容器扩展点之PropertyOverrideConfigurer" target="_blank">我的spring学习笔记15-容器扩展点之PropertyOverrideConfigurer</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/Spring3/1.htm">Spring3</a>
                                    <div>PropertyOverrideConfigurer类似于PropertyPlaceholderConfigurer,但是与后者相比,前者对于bean属性可以有缺省值或者根本没有值。也就是说如果properties文件中没有某个bean属性的内容,那么将使用上下文(配置的xml文件)中相应定义的值。如果properties文件中有bean属性的内容,那么就用properties文件中的值来代替上下</div>
                                </li>
                                <li><a href="/article/1092.htm"
                                       title="通过XSD验证XML" target="_blank">通过XSD验证XML</a>
                                    <span class="text-muted">antlove</span>
<a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/schema/1.htm">schema</a><a class="tag" taget="_blank" href="/search/xsd/1.htm">xsd</a><a class="tag" taget="_blank" href="/search/validation/1.htm">validation</a><a class="tag" taget="_blank" href="/search/SchemaFactory/1.htm">SchemaFactory</a>
                                    <div>1. XmlValidation.java 
package xml.validation;

import java.io.InputStream;

import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schem</div>
                                </li>
                                <li><a href="/article/1219.htm"
                                       title="文本流与字符集" target="_blank">文本流与字符集</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/PrintWrite%28%29%E7%9A%84%E4%BD%BF%E7%94%A8/1.htm">PrintWrite()的使用</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E7%AC%A6%E9%9B%86%E5%90%8D%E5%AD%97+%E5%88%AB%E5%90%8D%E8%8E%B7%E5%8F%96/1.htm">字符集名字 别名获取</a>
                                    <div>文本数据的输入输出; 
          输入;数据流,缓冲流 
  
      输出;介绍向文本打印格式化的输出PrintWrite(); 
  
package 文本流;

import java.io.FileNotFound</div>
                                </li>
                                <li><a href="/article/1346.htm"
                                       title="ibatis模糊查询sqlmap-mapping-**.xml配置" target="_blank">ibatis模糊查询sqlmap-mapping-**.xml配置</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a>
                                    <div>        正常我们写ibatis的sqlmap-mapping-*.xml文件时,传入的参数都用##标识,如下所示: 
<resultMap id="personInfo" class="com.bijian.study.dto.PersonDTO">
	<res</div>
                                </li>
                                <li><a href="/article/1473.htm"
                                       title="java jvm常用命令工具——jdb命令(The Java Debugger)" target="_blank">java jvm常用命令工具——jdb命令(The Java Debugger)</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/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/jdb/1.htm">jdb</a>
                                    <div>        用来对core文件和正在运行的Java进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio里面所带的dbx非常相似,但 jdb是专门用来针对Java应用程序的。 
        现在应该说日常的开发中很少用到JDB了,因为现在的IDE已经帮我们封装好了,如使用ECLI</div>
                                </li>
                                <li><a href="/article/1600.htm"
                                       title="【Spring框架二】Spring常用注解之Component、Repository、Service和Controller注解" target="_blank">【Spring框架二】Spring常用注解之Component、Repository、Service和Controller注解</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/controller/1.htm">controller</a>
                                    <div>在Spring常用注解第一步部分【Spring框架一】Spring常用注解之Autowired和Resource注解(http://bit1129.iteye.com/blog/2114084)中介绍了Autowired和Resource两个注解的功能,它们用于将依赖根据名称或者类型进行自动的注入,这简化了在XML中,依赖注入部分的XML的编写,但是UserDao和UserService两个bea</div>
                                </li>
                                <li><a href="/article/1727.htm"
                                       title="cxf wsdl2java生成代码super出错,构造函数不匹配" target="_blank">cxf wsdl2java生成代码super出错,构造函数不匹配</a>
                                    <span class="text-muted">bitray</span>
<a class="tag" taget="_blank" href="/search/super/1.htm">super</a>
                                    <div>    由于过去对于soap协议的cxf接触的不是很多,所以遇到了也是迷糊了一会.后来经过查找资料才得以解决. 初始原因一般是由于jaxws2.2规范和jdk6及以上不兼容导致的.所以要强制降为jaxws2.1进行编译生成.我们需要少量的修改: 
 
我们原来的代码 
wsdl2java com.test.xxx -client http://..... 
修改后的代</div>
                                </li>
                                <li><a href="/article/1854.htm"
                                       title="动态页面正文部分中文乱码排障一例" target="_blank">动态页面正文部分中文乱码排障一例</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>公司网站一部分动态页面,早先使用apache+resin的架构运行,考虑到高并发访问下的响应性能问题,在前不久逐步开始用nginx替换掉了apache。 不过随后发现了一个问题,随意进入某一有分页的网页,第一页是正常的(因为静态化过了);点“下一页”,出来的页面两边正常,中间部分的标题、关键字等也正常,唯独每个标题下的正文无法正常显示。 因为有做过系统调整,所以第一反应就是新上</div>
                                </li>
                                <li><a href="/article/1981.htm"
                                       title="java-54- 调整数组顺序使奇数位于偶数前面" target="_blank">java-54- 调整数组顺序使奇数位于偶数前面</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>
import java.util.Arrays;
import java.util.Random;

import ljn.help.Helper;


public class OddBeforeEven {

	/**
	 * Q 54 调整数组顺序使奇数位于偶数前面
	 * 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半</div>
                                </li>
                                <li><a href="/article/2108.htm"
                                       title="从100PV到1亿级PV网站架构演变" target="_blank">从100PV到1亿级PV网站架构演变</a>
                                    <span class="text-muted">cfyme</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%AB%99%E6%9E%B6%E6%9E%84/1.htm">网站架构</a>
                                    <div>一个网站就像一个人,存在一个从小到大的过程。养一个网站和养一个人一样,不同时期需要不同的方法,不同的方法下有共同的原则。本文结合我自已14年网站人的经历记录一些架构演变中的体会。 1:积累是必不可少的 
架构师不是一天练成的。 
1999年,我作了一个个人主页,在学校内的虚拟空间,参加了一次主页大赛,几个DREAMWEAVER的页面,几个TABLE作布局,一个DB连接,几行PHP的代码嵌入在HTM</div>
                                </li>
                                <li><a href="/article/2235.htm"
                                       title="[宇宙时代]宇宙时代的GIS是什么?" target="_blank">[宇宙时代]宇宙时代的GIS是什么?</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/Gis/1.htm">Gis</a>
                                    <div> 
 
       我们都知道一个事实,在行星内部的时候,因为地理信息的坐标都是相对固定的,所以我们获取一组GIS数据之后,就可以存储到硬盘中,长久使用。。。但是,请注意,这种经验在宇宙时代是不能够被继续使用的 
 
 
         宇宙是一个高维时空</div>
                                </li>
                                <li><a href="/article/2362.htm"
                                       title="详解create database命令" target="_blank">详解create database命令</a>
                                    <span class="text-muted">czmmiao</span>
<a class="tag" taget="_blank" href="/search/database/1.htm">database</a>
                                    <div>完整命令 
CREATE DATABASE mynewdb   USER SYS IDENTIFIED BY sys_password   USER SYSTEM IDENTIFIED BY system_password   LOGFILE GROUP 1 ('/u01/logs/my/redo01a.log','/u02/logs/m</div>
                                </li>
                                <li><a href="/article/2489.htm"
                                       title="几句不中听却不得不认可的话" target="_blank">几句不中听却不得不认可的话</a>
                                    <span class="text-muted">datageek</span>

                                    <div>1、人丑就该多读书。 
2、你不快乐是因为:你可以像猪一样懒,却无法像只猪一样懒得心安理得。 
3、如果你太在意别人的看法,那么你的生活将变成一件裤衩,别人放什么屁,你都得接着。 
4、你的问题主要在于:读书不多而买书太多,读书太少又特爱思考,还他妈话痨。 
5、与禽兽搏斗的三种结局:(1)、赢了,比禽兽还禽兽。(2)、输了,禽兽不如。(3)、平了,跟禽兽没两样。结论:选择正确的对手很重要。 
6</div>
                                </li>
                                <li><a href="/article/2616.htm"
                                       title="1 14:00 PHP中的“syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM”错误" target="_blank">1 14:00 PHP中的“syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM”错误</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a>
                                    <div>原文地址:http://www.kafka0102.com/2010/08/281.html 
  
因为需要,今天晚些在本机使用PHP做些测试,PHP脚本依赖了一堆我也不清楚做什么用的库。结果一跑起来,就报出类似下面的错误:“Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in /home/kafka/test/</div>
                                </li>
                                <li><a href="/article/2743.htm"
                                       title="xcode6 Auto layout and size classes" target="_blank">xcode6 Auto layout and size classes</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a>
                                    <div>官方GUI 
  
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/Introduction/Introduction.html 
  
iOS中使用自动布局(一) 
  
http://www.cocoachina.com/ind</div>
                                </li>
                                <li><a href="/article/2870.htm"
                                       title="通过PreparedStatement批量执行sql语句【sql语句相同,值不同】" target="_blank">通过PreparedStatement批量执行sql语句【sql语句相同,值不同】</a>
                                    <span class="text-muted">梦见x光</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E5%8A%A1/1.htm">事务</a><a class="tag" taget="_blank" href="/search/%E6%89%B9%E9%87%8F%E6%89%A7%E8%A1%8C/1.htm">批量执行</a>
                                    <div>比如说:我有一个List需要添加到数据库中,那么我该如何通过PreparedStatement来操作呢? 
public void addCustomerByCommit(Connection conn , List<Customer> customerList) 
{ 
   String sql = "inseret into customer(id </div>
                                </li>
                                <li><a href="/article/2997.htm"
                                       title="程序员必知必会----linux常用命令之十【系统相关】" target="_blank">程序员必知必会----linux常用命令之十【系统相关】</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/Linux%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/1.htm">Linux常用命令</a>
                                    <div>一.linux快捷键 
Ctrl+C : 终止当前命令 
Ctrl+S : 暂停屏幕输出 
Ctrl+Q : 恢复屏幕输出 
Ctrl+U : 删除当前行光标前的所有字符 
Ctrl+Z : 挂起当前正在执行的进程 
Ctrl+L : 清除终端屏幕,相当于clear 
  
二.终端命令 
clear : 清除终端屏幕 
reset : 重置视窗,当屏幕编码混乱时使用 
time com</div>
                                </li>
                                <li><a href="/article/3124.htm"
                                       title="NGINX" target="_blank">NGINX</a>
                                    <span class="text-muted">IXHONG</span>
<a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a>
                                    <div>pcre 编译安装 nginx 
conf/vhost/test.conf 
  
upstream admin { 
server 127.0.0.1:8080; 
} 
  
server { 
                listen       80; 
&</div>
                                </li>
                                <li><a href="/article/3251.htm"
                                       title="设计模式--工厂模式" target="_blank">设计模式--工厂模式</a>
                                    <span class="text-muted">kerryg</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>工厂方式模式分为三种: 
  1、普通工厂模式:建立一个工厂类,对实现了同一个接口的一些类进行实例的创建。 
 
  2、多个工厂方法的模式:就是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式就是提供多个工厂方法,分别创建对象。 
 
  3、静态工厂方法模式:就是将上面的多个工厂方法模式里的方法置为静态,</div>
                                </li>
                                <li><a href="/article/3378.htm"
                                       title="Spring InitializingBean/init-method和DisposableBean/destroy-method" target="_blank">Spring InitializingBean/init-method和DisposableBean/destroy-method</a>
                                    <span class="text-muted">mx_xiehd</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a>
                                    <div>1.initializingBean/init-method 
实现org.springframework.beans.factory.InitializingBean接口允许一个bean在它的所有必须属性被BeanFactory设置后,来执行初始化的工作,InitialzingBean仅仅指定了一个方法。 
通常InitializingBean接口的使用是能够被避免的,(不鼓励使用,因为没有必要</div>
                                </li>
                                <li><a href="/article/3505.htm"
                                       title="解决Centos下vim粘贴内容格式混乱问题" target="_blank">解决Centos下vim粘贴内容格式混乱问题</a>
                                    <span class="text-muted">qindongliang1922</span>
<a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a>
                                    <div> 
 
有时候,我们在向vim打开的一个xml,或者任意文件中,拷贝粘贴的代码时,格式莫名其毛的就混乱了,然后自己一个个再重新,把格式排列好,非常耗时,而且很不爽,那么有没有办法避免呢?  答案是肯定的,设置下缩进格式就可以了,非常简单:  在用户的根目录下 直接vi  ~/.vimrc文件 然后将set pastetoggle=<F9> 写入这个文件中,保存退出,重新登录,</div>
                                </li>
                                <li><a href="/article/3632.htm"
                                       title="netty大并发请求问题" target="_blank">netty大并发请求问题</a>
                                    <span class="text-muted">tianzhihehe</span>
<a class="tag" taget="_blank" href="/search/netty/1.htm">netty</a>
                                    <div>多线程并发使用同一个channel 
java.nio.BufferOverflowException: null 
at java.nio.HeapByteBuffer.put(HeapByteBuffer.java:183) ~[na:1.7.0_60-ea] 
at java.nio.ByteBuffer.put(ByteBuffer.java:832) ~[na:1.7.0_60-ea] </div>
                                </li>
                                <li><a href="/article/3759.htm"
                                       title="Hadoop NameNode单点问题解决方案之一 AvatarNode" target="_blank">Hadoop NameNode单点问题解决方案之一 AvatarNode</a>
                                    <span class="text-muted">wyz2009107220</span>
<a class="tag" taget="_blank" href="/search/NameNode/1.htm">NameNode</a>
                                    <div>我们遇到的情况 
Hadoop NameNode存在单点问题。这个问题会影响分布式平台24*7运行。先说说我们的情况吧。 
我们的团队负责管理一个1200节点的集群(总大小12PB),目前是运行版本为Hadoop 0.20,transaction logs写入一个共享的NFS filer(注:NetApp NFS Filer)。 
经常遇到需要中断服务的问题是给hadoop打补丁。 DataNod</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>