webpack 之 从 0 创建一个 webpack5 的项目

目录

目标

初始化 webpack 项目

配置核心功能

将 ES6+ 转 ES5

处理样式

处理图片等静态资源

创建 html 文件

开发服务器

清除打包文件

多环境打包


目标

  • 新建一个 webpack 5 项目,包括开发环境和生产环境

初始化 webpack 项目


 第一步:初始化  package.json 

npm init -y

 第二步:安装  webpack 

npm install webpack webpack-cli -D

注意

  1. -D 等价于 —— save-dev;  开发环境时所需依赖
  2. -S 等价于 —— save;  生产环境时所需依赖

第三步:初始化文件和目录

  • 创建  src  目录, src  目录下新增打包的入口文件 paths.js   index.js name.js 

 index.js 

import name from './name.js'
console.log(name)

 name.js 

const name = 'shanjian'
export default name
  • 创建  path.js  用于存放一些常用文件夹路径
/**
 * @description 常用文件夹路径
 * @author 山间
 */

const path = require('path')
const srcPath = path.join(__dirname, './', 'src')
const distPath = path.join(__dirname, './', 'dist')

module.exports = {
  srcPath,
  distPath
}
  •  创建  webpack.common.js  用于编写公用的  webpack  配置(在根目录创建)(这里要加一下添加 npm install webpack-merge _D 的命令)
// webpack.common.js
// 可将开发环境和生产环境下的公用配置抽离到该文件中,可避免重复

const path = require('path')
const { srcPath, distPath } = require('./paths')

module.exports = {
  entry: path.join(srcPath, 'index'),
  module: {
    rules: []
  }
}
  •  创建  webpack.dev.js  用于编写开发环境下的  webpack  配置(在根目录创建) 
// webpack.dev.js

const path = require('path')
const webpackCommonConf = require('./webpack.common')
const { merge } = require('webpack-merge')

module.exports = merge(webpackCommonConf, {
  mode: 'development'
})
  •  创建  webpack.prod.js  用于编写生产环境下的  webpack  配置(在根目录创建)
// webpack.prod.js

const path = require('path')
const { srcPath, distPath } = require('./paths')
const webpackCommonConf = require('./webpack.common')
const { merge } = require('webpack-merge')

module.exports = merge(webpackCommonConf,  {
  mode: 'production',
  output: {
    path: distPath,
    filename: 'main.[contenthash:8].js', // 打包时加上 hash 戳,注意:webpack 5 是 contenthash
 }
})
  • 修改  webpack.config.js  中的  script  字段,添加打包命令
{
    // ...
    "scripts": {
        ...
        "build": "webpack --config webpack.prod.js"
    },
    // ...
}

此时,在项目的根目录下输入 npm run build 命令,就可以对项目进行打包了。打包成功后,会在项目根目录下创建一个  dist  文件夹,里面的  main.contenthash.js  就是我们打包后的文件。

配置核心功能


将 ES6+ 转 ES5

由于有些浏览器无法解析 ES6+ 等高级语法,故需要将其转化为浏览器能够解析的低级语法(如:IE浏览器)

第一步:安装依赖 - @babel/core babel-loader @babel/preset-env

npm install @babel/core babel-loader @babel/preset-env -D

第二步:修改  webpack.common.js  配置

module.exports = {
    // ...
    module: {
        rules: [
            {
                test: /\.js$/,
                use: ['babel-loader'],
                include: srcPath,
                exclude: /node_modules/
            }
        ]
    }
}

 第三步:在根目录添加  .babelrc  文件并配置预置项

// .babelrc

{
    "presets": ["@babel/preset-env"],
    "plugins": []
}

注意:也可直接在  webpack.common.js  中配置预置项

// webpack.common.js

module.exports = {
    // ...
    module: {
        rules: [
            // ES6+ 语法处理
            {
                test: /\.js$/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            }
        ]
    }
}

处理样式

由于  webpack  默认只能打包处理 commonJS 规范的 js 文件,处理其他类型的文件都需要相对应的处理器进行处理,所以针对 css/less/sass 类型的样式文件,需要引入对应的处理器来处理。

第一步:安装依赖 - style-loader css-loader less less-loader

npm install style-loader css-loader less less-loader -D

第二步:修改  webpack.common.js  配置

// webpack.common.js

module.exports = {
    // ...
    module: {
        rules: [
            // ...
            {    
                test: /\.css$/,
                use: ['style-loader', 'css-loader'] // 注意 loader 的顺序是从后往前
            },
            {
                test: /\.less$/,
                use: ['style-loader', 'css-loader', 'less-loader']
            }
        ]
    }
}

处理图片等静态资源

同上,除 js 文件的其他文件使用  webpack  打包,也需要特定的处理器处理,如图片、视频等静态资源

第一步:安装依赖 - url-loader file-loader

npm install url-loader file-loader -D

第二步:注意,这里生产环境和开发环境可以分开配置,为什么这么做?先看配置,后面会解释。

开发环境:

// webpack.dev.js

module.exports = {
    // ...
    module: {
        rules: [
            // ...
            // 直接产出图片 url
            {    
                test: /\.(png|jpg|jpeg|gif)$/,
                use: 'file-loader'
            },
            // 直接产出视频、音频 url
            {
                test: /\.(mp4|ogg|mp3|wav)$/,
                use: 'file-loader'
            }
        ]
    }
}

生产环境: 

// webpack.prod.js

module.exports = merge(webpackCommonConf,  {
  // ...
  module: {
    rules: [
      // ...
      // 图片 -- 考虑 base64 编码的情况
      {
        test: /\.(jpg|jpeg|png|gif)$/,
        use: {
          loader: 'url-loader',
          options: {
            // 小于 5kb 的图片用 base64 格式产出
            limit: 5 * 1024,
            // 否则,依然沿用 file-loader 的形式,产出 url 格式
            fallback: {
              loader: 'file-loader'
            },
            // 打包到 /static/video 目录下
            outputPath: '/static/img/'
          }
        }
      },
      // 视频,跟上面的图片也是一样的道理
      {
        test: /\.(mp4|ogg|mp3|wav)$/,
        use: {
          loader: 'url-loader',
          options: {
            // 小于 5kb 的视频 用 base64 格式产出
            limit: 5 * 1024,
            // 否则,依然沿用 file-loader 的形式,产出 url 格式
            fallback: {
              loader: 'file-loader'
            },
            // 打包到 /static/video 目录下
            outputPath: '/static/video/'
          }
        }
      }
    ]
  }
})

       为什么?是因为在开发环境下,在本地环境下,不需要把项目打包压缩的特别小,直接引入图片这样打包速度快,利于开发;而在生产环境下,项目越小加载越快,用户体验越好。所以这块针对静态资源的配置可以分别对生产和开发环境进行配置, webpack.common.js  文件里就可以不对静态资源进行处理了。

创建 html 文件

如何让打包的 js 文件自动地插入到 html 模板中呢?

第一步:安装依赖 - html-webpack-plugin

npm install html-webpack-plugin -D

第二步:修改  webpack.common.js  配置

// ...
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  // ...
  module: {
    // ...
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: path.join(srcPath, 'index.html'),
      filename: 'index.html',
      title: 'Web App'
    })
  ]
}

注意:配置动态网页标题时,需将模板中的 标签里的内容改成<%= htmlWebpackPlugin.option.title %></p> <h3 id="%E5%BC%80%E5%8F%91%E6%9C%8D%E5%8A%A1%E5%99%A8">开发服务器</h3> <p>每次打包后都需要手动的点击生成的 <span style="color:#ed7976;"><span style="background-color:#fbd4d0;"> index.html </span></span> 看效果,其实可以直接配置 <span style="color:#ed7976;"><span style="background-color:#fbd4d0;"> webpack </span></span> ,将打包后的文件自动在浏览器打开。这个配置因为是在开发环境下使用,所以可以直接配置在  <span style="color:#ed7976;"><span style="background-color:#fbd4d0;"> webpack.dev.js </span></span> 文件中</p> <p>第一步:安装依赖 - webpack-dev-server</p> <pre><code>npm install webpack-dev-server -D</code></pre> <p>第二步:修改 <span style="color:#ed7976;"><span style="background-color:#fbd4d0;"> webpack.dev.js </span></span> 配置</p> <pre><code class="language-javascript">// webpack.dev.js module.exports = { // ... // 配置 dev-server, 就会帮我们开启自动刷新这个功能 // 自动刷新与热更新的不同:自动刷新保存修改后,整个页 // 面会自动刷新来加载最新的改动,状态会丢失,而热更新 // 是新代码生效,网页不刷新,状态不丢失,有优有劣,酌 // 情使用。 devServer: { port: 3000, // 默认开启本地服务的端口号 progress: true, // 显示打包的进度条 open: true, // 自动打开浏览器 contentBase: distPath, // 根目录 compress: true, // 启动 gzip 压缩 // 设置代理 —— 如果有需要的话 proxy: { // 将本地的 /api/xxx 代理到 localhost:3000/api/xxx '/api': 'http://localhost:3000', // 将本地的 /api2/xxx 代理到 localhost:3000/xxx '/api2': { target: 'http://localhost:3000', '^api/': '' } } } }</code></pre> <h3 id="%E6%B8%85%E9%99%A4%E6%89%93%E5%8C%85%E6%96%87%E4%BB%B6">清除打包文件</h3> <p>每次打包如果文件改动的话,都会生成新的打包文件,那之前的文件也就没必要存在了,尤其是在打包文件加了 <span style="color:#ed7976;"><span style="background-color:#fbd4d0;"> hash </span></span> 的情况下,所以我们可以使用此插件帮助我们每次打包前先清除以前的打包文件,即先清空我们的 <span style="color:#ed7976;"><span style="background-color:#fbd4d0;"> dist </span></span> 目录。配置在生产环境下,即 <span style="color:#ed7976;"><span style="background-color:#fbd4d0;"> webpack.prod.js </span></span></p> <p>第一步:安装依赖 - clean-webpack-plugin</p> <pre><code>npm install clean-webpack-plugin -D</code></pre> <p>第二步:修改 <span style="color:#ed7976;"><span style="background-color:#fbd4d0;"> webpack.prod.js </span></span> 配置</p> <pre><code class="language-javascript">// webpack.prod.js // ... const { CleanWebpackPlugin } = require('clean-webpack-plugin') module.exports = { // ... plugins: [ new ClearWebpackPlugin() // 会默认清空 output.path 文件夹,即 distPath 文件夹 ] }</code></pre> <h3 id="%E5%A4%9A%E7%8E%AF%E5%A2%83%E6%89%93%E5%8C%85">多环境打包</h3> <p>因为我们将配置文件抽离成了三个文件,有抽离出来的两个环境下都需要的公共的配置  <span style="color:#ed7976;"><span style="background-color:#fbd4d0;"> webpack.common.js </span></span>,也有针对开发环境的特殊配置 webpack.dev.js,还有生产环境下的特殊配置 <span style="color:#ed7976;"><span style="background-color:#fbd4d0;"> webpack.prod.js </span></span>,那我们可以执行不同的命令来达到在生产环境还是开发环境下打包的效果。</p> <p>第一步:配置 <span style="color:#ed7976;"><span style="background-color:#fbd4d0;"> package.json </span></span></p> <pre><code class="language-javascript">// ... "scripts": { // ... "dev": "webpack serve --config webpack.dev.js", "build": "webpack --config webpack.prod.js" }, // ...</code></pre> <p> 第二步:命令行执行对应环境的命令</p> <p>开发环境运行</p> <pre><code>npm run dev</code></pre> <p><a href="http://img.e-com-net.com/image/info8/77fb03dd0ab64ebbb2a5eba271b64c49.jpg" target="_blank"><img alt="webpack 之 从 0 创建一个 webpack5 的项目_第1张图片" height="308" src="http://img.e-com-net.com/image/info8/77fb03dd0ab64ebbb2a5eba271b64c49.jpg" width="650" style="border:1px solid black;"></a></p> <p>生产环境打包运行</p> <pre><code>npm run build</code></pre> <p><a href="http://img.e-com-net.com/image/info8/72be7049516e43519c420acab25d3c06.jpg" target="_blank"><img alt="webpack 之 从 0 创建一个 webpack5 的项目_第2张图片" height="119" src="http://img.e-com-net.com/image/info8/72be7049516e43519c420acab25d3c06.jpg" width="650" style="border:1px solid black;"></a></p> <p> 看到上图,我们创建一个webpack5项目从开发到编译到打包的过程就结束了,也就是我们的普通项目从0到可以开始开发的过程,之后会继续对 webpack 配置的优化进行一个整理和记录,主要有生产环境和开发环境两种不同环境下的优化:</p> <p>生产环境优化产出代码,使打包出来的产品体积更小,加载依赖更少,加载更快,其中包括 1.如何配置生产环境下的静态资源(本文已经提到了,请翻至【<strong>处理图片等静态资源】</strong>这一小节),2. 生产环境如何抽离、压缩 css 文件,3. 如何根据功能和配置来拆分模块 splitChunks;等等其他优化手段。</p> <p><a href="http://img.e-com-net.com/image/info8/5dc68aee94db42829a9c1908fb876c16.jpg" target="_blank"><img alt="webpack 之 从 0 创建一个 webpack5 的项目_第3张图片" height="353" src="http://img.e-com-net.com/image/info8/5dc68aee94db42829a9c1908fb876c16.jpg" width="650" style="border:1px solid black;"></a></p> <p></p> <p>开发环境优化构建速度,可以使本地开发打包编译速度更快,提高开发效率,优化手段主要有:</p> <p><a href="http://img.e-com-net.com/image/info8/6fb8a15e056d47cc90969764048501c7.jpg" target="_blank"><img alt="webpack 之 从 0 创建一个 webpack5 的项目_第4张图片" height="454" src="http://img.e-com-net.com/image/info8/6fb8a15e056d47cc90969764048501c7.jpg" width="650" style="border:1px solid black;"></a></p> <p>期待自己能整理出这个系列吧。</p> <p></p> <p>本文参考:</p> <p>从零使用 Webpack5 搭建一个完整的 Vue3 的开发环境 - 掘金<br>从0创建一个webpack 5项目 - 掘金</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1578031525407047680"></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">你可能感兴趣的:(工具,webpack,前端,javascript)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1892630388057108480.htm" title="PyInstaller参数大揭秘:一文读懂打包神器的核心密码" target="_blank">PyInstaller参数大揭秘:一文读懂打包神器的核心密码</a> <span class="text-muted">Abossss</span> <a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>一、引言在Python开发的广阔领域中,我们常常会面临这样一个问题:如何将自己精心编写的Python脚本,分享给那些没有Python环境的小伙伴,或者部署到生产环境中呢?这时候,PyInstaller库就如同一位救星,闪亮登场。PyInstaller是一个功能强大的跨平台打包工具,它可以将Python脚本及其所有依赖项,打包成一个独立的可执行文件。这意味着,无论目标系统是否安装了Python环境,</div> </li> <li><a href="/article/1892629883989848064.htm" title="【网络安全】WebPack源码(前端源码)泄露 + jsmap文件还原" target="_blank">【网络安全】WebPack源码(前端源码)泄露 + jsmap文件还原</a> <span class="text-muted">秋说</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a> <div>前言webpack是一个JavaScript应用程序的静态资源打包器。它构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bundle。大部分Vue等项目应用会使用webpack进行打包,使用webpack打包应用程序会在网站js同目录下生成js.map文件。漏洞风险通过泄露的前端源代码可以查找各种信息,如隐蔽接口、API、加密算法、管理员邮箱、内部功能等等,或</div> </li> <li><a href="/article/1892628498082754560.htm" title="html网络安全工具源码 网络安全前端" target="_blank">html网络安全工具源码 网络安全前端</a> <span class="text-muted">网络安全queen</span> <a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a> <div>点击文末小卡片,免费获取网络安全全套资料,资料在手,涨薪更快前端常见的网络安全包括:xss(跨站脚本攻击)、csrf(跨站请求伪造)、sql注入攻击等。1)跨站脚本攻击(xss)原理:攻击者往web页面中注入恶意script代码(或者在url的查询参数中注入script代码),当用户浏览访问时,嵌入的script代码就会执行,造成危害。反射型xss:用户点击攻击连接,服务器解析后响应,在返回的内容</div> </li> <li><a href="/article/1892624460926742528.htm" title="Swift之深入解析KeyPaths的工作原理 | CSDN创作打卡" target="_blank">Swift之深入解析KeyPaths的工作原理 | CSDN创作打卡</a> <span class="text-muted">weixin_41165271</span> <a class="tag" taget="_blank" href="/search/swift/1.htm">swift</a><a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、前言自从Swift刚开始就被设计为是编译时安全和静态类型后,它就缺少了那种经常在运行时语言中的动态特性,比如Objective-C,Ruby和JavaScript。举个例子,在Objective-C中,我们可以很轻易的动态去获取一个对象的任意属性和方法,甚至可以在运行时交换它们的实现。虽然缺乏动态性正是Swift如此强大的一个重要原因,它帮助我们编写更加可以预测的代码以及更大的保证了代码编写的</div> </li> <li><a href="/article/1892623450070118400.htm" title="Java并发编程入门,看这一篇就够了" target="_blank">Java并发编程入门,看这一篇就够了</a> <span class="text-muted">weixin_30555753</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>Java并发编程一直是Java程序员必须懂但又是很难懂的技术内容。这里不仅仅是指使用简单的多线程编程,或者使用juc的某个类。当然这些都是并发编程的基本知识,除了使用这些工具以外,Java并发编程中涉及到的技术原理十分丰富。于是乎,就诞生了想写点东西记录下,以提升理解和对并发编程的认知。为什么需要用到并发?凡事总有好坏两面,之间的trade-off是什么,也就是说并发编程具有哪些挑战?以及在进行并</div> </li> <li><a href="/article/1892621811837890560.htm" title="【SpringBoot教程】SpringBoot 统一异常处理(附核心工具类-ErrorInfoBuilder)" target="_blank">【SpringBoot教程】SpringBoot 统一异常处理(附核心工具类-ErrorInfoBuilder)</a> <span class="text-muted">撸代码的羊驼</span> <a class="tag" taget="_blank" href="/search/springboot/1.htm">springboot</a><a class="tag" taget="_blank" href="/search/springboot/1.htm">springboot</a> <div>作者简介:大家好,我是撸代码的羊驼,前阿里巴巴架构师,现某互联网公司CTO联系v:sulny_ann(17362204968),加我进群,大家一起学习,一起进步,一起对抗互联网寒冬#序言此前,我们主要通过在控制层(Controller)中手动捕捉异常(TryCatch)和处理错误,在SpringBoot统一异常处理的做法主要有两种:一是基于注解ExceptionHandler,二是基于接口Erro</div> </li> <li><a href="/article/1892621431838142464.htm" title="代码报错:‘msgfmt‘ 不是内部或外部命令,也不是可运行的程序或批处理文件" target="_blank">代码报错:‘msgfmt‘ 不是内部或外部命令,也不是可运行的程序或批处理文件</a> <span class="text-muted">司南锤</span> <a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E6%8A%A5%E9%94%99/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>出现'msgfmt'不是内部或外部命令的错误,通常是因为系统缺少GNUgettext工具(msgfmt是其组件之一)。以下是解决方法:1.安装gettext工具msgfmt是gettext工具的一部分,需先安装它:Windows系统:方法1:直接下载二进制文件访问gettextforWindows下载预编译的gettext工具包。解压文件到某个目录(如C:\gettext)。将C:\gettext</div> </li> <li><a href="/article/1892621179643031552.htm" title="软件著作权申请流程详解:从准备到登记的完整指南" target="_blank">软件著作权申请流程详解:从准备到登记的完整指南</a> <span class="text-muted">不会编程的程序猿ᅟ</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B/1.htm">软件工程</a> <div>引言软件著作权(简称“软著”)是保护软件开发者合法权益的重要法律工具。通过软著登记,开发者可以获得法律认可的权利证明,防止他人未经许可复制、修改或分发其软件。本文将详细介绍软著申请的完整流程,帮助你从准备材料到成功登记,顺利获得软件著作权保护。一、软件著作权的基本概念1.什么是软件著作权?软件著作权是指开发者对其开发的软件作品享有的专有权利,包括复制权、发行权、修改权等。2.软著保护的范围源代码:</div> </li> <li><a href="/article/1892619793341673472.htm" title="【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus" target="_blank">【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus</a> <span class="text-muted">m0_74824661</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/1.htm">学习路线</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4/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/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>文章目录一、什么是MybatisPlus特性二、SpringBoot3.0集成MybatisPlus三、MybatisPlus查询示例1、普通查询2、分页查询参考一、什么是MybatisPlusMyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑</div> </li> <li><a href="/article/1892616265311252480.htm" title="FLUX本地Lora训练" target="_blank">FLUX本地Lora训练</a> <span class="text-muted">王念博客</span> <div>前言目前Flux出现了3个训练工具SimpleTunerhttps://github.com/bghira/SimpleTuner,X-LABS的https://github.com/XLabs-AI/x-fluxai-toolkithttps://github.com/ostris/ai-toolkit待支持:https://github.com/kohya-ss/sd-scripts/目前前两</div> </li> <li><a href="/article/1892613996595441664.htm" title="为AI聊天工具添加一个知识系统 之113 详细设计之54 Chance:偶然和适配 之2" target="_blank">为AI聊天工具添加一个知识系统 之113 详细设计之54 Chance:偶然和适配 之2</a> <span class="text-muted">一水鉴天</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%99%BA%E8%83%BD/1.htm">软件智能</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E5%88%B6%E9%80%A0/1.htm">智能制造</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E8%AF%AD%E8%A8%80/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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>本文要点要点祖传代码中的”槽“(占位符变量)和它在实操中的三种槽(占据槽,请求槽和填充槽,实时数据库(source)中数据(流入ETL的一个正序流程行列并发靶向整形绑定变量)是如何通过“命名所依的AI行为”、“分类所缘的因果结构”和“求实所据的机器特征”(元数据仓库OLAP的三个行式并行服务进程锚定配形-限定变量)来精确锚定ETL任务绑定中的这个绑定到底是,谁和谁的什么绑定(资源存储库随着ETL的</div> </li> <li><a href="/article/1892612356228313088.htm" title="CTF解题技能之MISC基础(持续更新)" target="_blank">CTF解题技能之MISC基础(持续更新)</a> <span class="text-muted">l2xcty</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a> <div>CTF解题技能之MISC基础文章目录CTF解题技能之MISC基础前言一、文件类型识别二、文件分离1.binwalk分离2.foremost分离3.dd4.fcrackzip5.010editor总结前言本篇主要介绍杂项基础题目的知识点以及所需的工具以及案例。通过百度网盘分享的文件:第二次小组活动链接:https://pan.baidu.com/s/1p02AwZDKCPyGeBbh1YhmDg?p</div> </li> <li><a href="/article/1892611725891530752.htm" title="vue3-06vue2(Object.defineProperty)与vue3(基于ES6的Proxy)的响应式原理对比" target="_blank">vue3-06vue2(Object.defineProperty)与vue3(基于ES6的Proxy)的响应式原理对比</a> <span class="text-muted">岂不闻</span> <a class="tag" taget="_blank" href="/search/vue3/1.htm">vue3</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%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>1.vue2响应原理1.1对于对象与数组对象类型:通过object.defineProperty()对属性的读取、修改进行拦截(数据劫持)数组类型:通过重写更新数组的一系列方法来实现拦截。(对数组的变更方法进行了包裹)Vue2的响应式是基于Object.defineProperty实现的1.2基本原理Object.defineProperty把一个普通的JavaScript对象传入Vue实例作为d</div> </li> <li><a href="/article/1892605045170565120.htm" title="DeepSpeed Chat大模型训练【训练类ChatGPT 的大模型】" target="_blank">DeepSpeed Chat大模型训练【训练类ChatGPT 的大模型】</a> <span class="text-muted">u013250861</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/LLM%2F%E8%AE%AD%E7%BB%83/1.htm">LLM/训练</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a> <div>第1章:DeepSpeed-Chat模型训练实战本章内容介绍如何使用微软最新发布的DeepSpeedChat来训练类ChatGPT的大模型。通过本章内容,你将了解:DS-Chat是什么?如何准备运行环境ChatGPT训练的基本知识DS-Chat的使用方法【观看视频解说】1DeepSpeed-Chat是什么?【观看视频解说】DeepSpeed-Chat是微软最新公布的一套工具,用于训练类ChatGP</div> </li> <li><a href="/article/1892603907176198144.htm" title="aop解决 防重复提交" target="_blank">aop解决 防重复提交</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/spring/1.htm">spring</a> <div>背景描述虽然前端控制了按钮不能连续点击,但是在网络信号弱的情况下,仍然会出现第一次点击,请求A网络信号弱,这个时候前端按钮仍然可以点击,然后用户点击第二次。结果两次请求全部成功,数据库生成了两条除了ID以外一模一样的数据。(业务上不允许这种数据出现)解决方式采用AOP,对于不能重复提交的接口在后端加上控制。第一步自定义注解/***@Authorztc*@Description防止重复提交自定义注解</div> </li> <li><a href="/article/1892603025252478976.htm" title="在 Vue 2 中使用 Three.js 导入本地 3D 模型" target="_blank">在 Vue 2 中使用 Three.js 导入本地 3D 模型</a> <span class="text-muted">cherryzm88</span> <a class="tag" taget="_blank" href="/search/web/1.htm">web</a><a class="tag" taget="_blank" href="/search/vue2/1.htm">vue2</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/3d/1.htm">3d</a> <div>引言Three.js是一个流行的JavaScript库,它能够帮助开发者轻松地在Web页面上创建3D内容。而Vue.js作为前端框架,可以与Three.js结合,构建交互式3DWeb应用。本篇博客将介绍如何在Vue2中使用Three.js加载本地3D模型。1.初始化Vue2项目如果你的项目还没有Vue2环境,可以使用VueCLI初始化:```shvuecreatemy-threejs-appcdm</div> </li> <li><a href="/article/1892599613123260416.htm" title="Kafka消息服务之Java工具类" target="_blank">Kafka消息服务之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/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/1.htm">消息队列</a><a class="tag" taget="_blank" href="/search/mq/1.htm">mq</a> <div>注:此内容是本人在另一个技术平台发布的历史文章,转载发布到CSDN;ApacheKafka是一个开源分布式事件流平台,也是当前系统开发中流行的高性能消息队列服务,数千家公司使用它来实现高性能数据管道、流分析、数据集成和关键任务应用程序。Kafka可以很好地替代更传统的消息代理。消息代理的使用原因多种多样(将处理与数据生产者分离开来、缓冲未处理的消息等)。与大多数消息系统相比,Kafka具有更好的吞</div> </li> <li><a href="/article/1892598731648331776.htm" title="网络分析工具-tcpdump" target="_blank">网络分析工具-tcpdump</a> <span class="text-muted">锅锅来了</span> <a class="tag" taget="_blank" href="/search/Linux%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%8E%9F%E7%90%86%E5%92%8C%E5%AE%9E%E6%88%98/1.htm">Linux性能优化原理和实战</a><a class="tag" taget="_blank" href="/search/tcpdump/1.htm">tcpdump</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/%E7%96%91%E9%9A%BE%E6%9D%82%E7%97%87/1.htm">疑难杂症</a> <div>文章目录前言一、tcpdump基础官网链接命令选项详解常规过滤规则tcpdump输出一、tcpdump实践HTTP协议ICMP状态抓包前言当遇到网络疑难问题的时候,抓包是最基本的技能,通过抓包才能看到网络底层的问题一、tcpdump基础tcpdump是一个常用的网络分析工具。它基于libpcap,利用内核中的AF_PACKET套接字,抓取网络接口中传输的网络包。我们对网卡进行抓包的时候,会使得网卡</div> </li> <li><a href="/article/1892591804616863744.htm" title="常用网络工具分析(ping,tcpdump等)" target="_blank">常用网络工具分析(ping,tcpdump等)</a> <span class="text-muted">一户董</span> <a class="tag" taget="_blank" href="/search/%E6%9D%82/1.htm">杂</a><a class="tag" taget="_blank" href="/search/tcpdump/1.htm">tcpdump</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>写在前面本文看下常用网络工具。1:ping1.1:用途用于检验网络的连通性。1.2:实战在Linux环境中执行:pingwww.sina.com.cn:[root@localhost~]#pingwww.sina.com.cnPINGspool.grid.sinaedge.com(111.62.129.51)56(84)bytesofdata.64bytesfrom111.62.129.51(11</div> </li> <li><a href="/article/1892591678297010176.htm" title="【如何学习商城源码】" target="_blank">【如何学习商城源码】</a> <span class="text-muted">启山智软 商城 源码</span> <a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>学习商城源码是一个系统而深入的过程,需要掌握多种方法和技巧。以下是一些建议,帮助你有效地学习商城源码:一、搭建学习环境准备开发工具编程语言相关:根据商城源码使用的编程语言,安装相应的集成开发环境(IDE)。例如,若源码是Java语言编写的,可安装IntelliJIDEA或Eclipse;若是Python语言,可选择PyCharm等。这些IDE能帮助你高效地编辑、调试代码,提供语法高亮、自动补全等功</div> </li> <li><a href="/article/1892591552073625600.htm" title="从零创建一个 Django 项目" target="_blank">从零创建一个 Django 项目</a> <span class="text-muted">m0_74824823</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/1.htm">学习路线</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4/1.htm">阿里巴巴</a><a class="tag" taget="_blank" href="/search/django/1.htm">django</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>1.准备环境在开始之前,确保你的开发环境满足以下要求:安装了Python(推荐3.8或更高版本)。安装pip包管理工具。如果要使用MySQL或PostgreSQL,确保对应的数据库已安装。创建虚拟环境在项目目录中创建并激活虚拟环境,保证项目依赖隔离:#创建虚拟环境python-mvenvenv#激活虚拟环境#WindowsenvScriptsactivate#Linux/Macsourceenv/</div> </li> <li><a href="/article/1892584115232894976.htm" title="自动化测试的学习路线" target="_blank">自动化测试的学习路线</a> <span class="text-muted">Ws_</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>自动化测试是提高软件开发效率和质量的关键手段。学习自动化测试通常涉及多个方面的技能,从基础的编程语言知识到测试工具的使用,再到实际的测试脚本编写和执行。以下是一个学习自动化测试的路线图,帮助你有条不紊地掌握相关技能:1.基础知识在开始自动化测试之前,首先要具备一定的编程和软件测试基础:编程语言:Python、Java、JavaScript或者Ruby(根据你选择的自动化测试工具决定)软件测试基础:</div> </li> <li><a href="/article/1892582349875507200.htm" title="通义灵码AI程序员" target="_blank">通义灵码AI程序员</a> <span class="text-muted">天天向上杰</span> <a class="tag" taget="_blank" href="/search/AI%E7%BC%96%E7%A8%8B/1.htm">AI编程</a><a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>通义灵码是阿里云与通义实验室联合打造的智能编码辅助工具,基于通义大模型技术,为开发者提供多种编程辅助功能。它支持多种编程语言,包括Java、Python、Go、TypeScript、JavaScript、C/C++、PHP、C#、Ruby等200多种编码语言。通义灵码AI程序员:今年1月,通义灵码AI程序员全面上线,同时支持VSCode、JetBrainsIDEs,是国内首个真正落地的AI程序员。</div> </li> <li><a href="/article/1892581971289239552.htm" title="rem、em、vw区别" target="_blank">rem、em、vw区别</a> <span class="text-muted">IT木昜</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E7%99%BD%E8%AF%9D%E5%89%8D%E7%AB%AF%E9%9D%A2%E8%AF%95%E9%A2%98/1.htm">大白话前端面试题</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div>在前端开发里,rem、em、vw都是用来设置元素大小的单位,下面就用大白话讲讲它们的区别。参考标准不一样rem:就像大家都用同一把“大尺子”来量东西,这把“大尺子”就是网页里根元素(也就是标签)的字体大小。不管元素在网页里的哪个位置,只要用rem做单位,它的大小就按照这把“大尺子”来算。比如根元素字体大小是16px,那么1rem就是16px,2rem就是32px。em:每个元素自己有一把“小尺子”</div> </li> <li><a href="/article/1892581591247548416.htm" title="Anaconda与python和pycharm的安装及其关系" target="_blank">Anaconda与python和pycharm的安装及其关系</a> <span class="text-muted">Daylight..</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">学习笔记</a><a class="tag" taget="_blank" href="/search/pycharm/1.htm">pycharm</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a> <div>Anaconda与python和pycharm的安装及其关系一、Anaconda与python和pycharm的关系:1.Anaconda包含python,并且里面含有许多常用的库。(安装了Anaconda就不需要安装python了)2.pycharm是一种IDE(集成开发环境),在其中可以编写Python程序。(工具和语言的关系)。二、如何安装?Anaconda的安装Anaconda官网下载地址</div> </li> <li><a href="/article/1892580705813196800.htm" title="【无标题】" target="_blank">【无标题】</a> <span class="text-muted">是懒羊羊吖~</span> <a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>一.WED前端应用软件:c/s架构b/s架构web前端:html5css3javascripthtml5:超文本标记语言----超链接,文字,标签标签语法规范:结束-----双标签标签体------可以嵌套inputimg---------单标签属性:定制元素的行为,属性是不通用的,每一个标签存在自身的属性,当属性名等于属性值时,只需要写属性名,不需要写属性值。二.HTML1.样式//文档声明:告</div> </li> <li><a href="/article/1892574559043907584.htm" title="postgresql实时同步到mysql" target="_blank">postgresql实时同步到mysql</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>应客户要求,需要同步数据到他们自己的数据库用于简单的数据分析,但这部分数据在postgresql,客户又不想再建pg,想直接同步到他们现有的mysql库,实时性倒是不要求。考虑到1、异构数据库同步2、只同步指定客户的行数据有之前同步到es的经验,同样使用了腾讯oceanus,其它工具没搞定客户库中创建表CREATETABLEtb_1(idbigintprimarykey,didbigint,gid</div> </li> <li><a href="/article/1892574428068376576.htm" title="HarmonyOS Next AI开发环境搭建与工具使用" target="_blank">HarmonyOS Next AI开发环境搭建与工具使用</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a> <div>本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)中AI开发环境搭建与工具使用相关技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、HarmonyOSNextAI开发环境概述(一)硬件与软件环境需求介绍硬件环境处理器:对于HarmonyOSNext</div> </li> <li><a href="/article/1892574047934410752.htm" title="Linux系统替换字符串常用命令" target="_blank">Linux系统替换字符串常用命令</a> <span class="text-muted"></span> <div>在Linux系统中,替换字符串的操作是一项非常常见且实用的任务,尤其在处理大量文本文件时。sed和grep是两个非常强大的工具,广泛用于这种类型的文本处理操作。接下来我们将深入探讨如何使用这两个工具来实现字符串的替换操作,并详细分析每个步骤。1.使用sed替换字符串sed(StreamEditor)是一个流编辑器,广泛应用于文本处理。它可以进行查找、替换、删除和插入操作。sed的基本语法用于字符串</div> </li> <li><a href="/article/1892573919525793792.htm" title="如何制定高效的项目执行计划表?掌握这些关键步骤!" target="_blank">如何制定高效的项目执行计划表?掌握这些关键步骤!</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/1.htm">项目管理</a> <div>项目执行计划表是项目管理中不可或缺的重要工具,它为项目团队提供了清晰的路线图和执行指南。一个高效的项目执行计划表不仅能够明确项目目标、任务分工和时间节点,还能够有效协调资源,提高团队协作效率,确保项目按时、高质量地完成。本文将深入探讨如何制定一份高效的项目执行计划表,帮助您掌握关键步骤,提升项目管理水平。明确项目目标和范围制定项目执行计划表的第一步是明确项目目标和范围。这个阶段需要与相关stake</div> </li> <li><a href="/article/41.htm" title="html页面js获取参数值" target="_blank">html页面js获取参数值</a> <span class="text-muted">0624chenhong</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a> <div>1.js获取参数值js function GetQueryString(name) {      var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");      var r = windo</div> </li> <li><a href="/article/168.htm" title="MongoDB 在多线程高并发下的问题" target="_blank">MongoDB 在多线程高并发下的问题</a> <span class="text-muted">BigCat2013</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/DB/1.htm">DB</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E5%B9%B6%E5%8F%91/1.htm">高并发</a><a class="tag" taget="_blank" href="/search/%E9%87%8D%E5%A4%8D%E6%95%B0%E6%8D%AE/1.htm">重复数据</a> <div>最近项目用到 MongoDB , 主要是一些读取数据及改状态位的操作. 因为是结合了最近流行的 Storm进行大数据的分析处理,并将分析结果插入Vertica数据库,所以在多线程高并发的情境下, 会发现 Vertica 数据库中有部分重复的数据. 这到底是什么原因导致的呢?笔者开始也是一筹莫 展,重复去看 MongoDB 的 API , 终于有了新发现 : com.mongodb.DB 这个类有</div> </li> <li><a href="/article/295.htm" title="c++ 用类模版实现链表(c++语言程序设计第四版示例代码)" target="_blank">c++ 用类模版实现链表(c++语言程序设计第四版示例代码)</a> <span class="text-muted">CrazyMizzz</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a> <div>#include<iostream> #include<cassert> using namespace std; template<class T> class Node { private: Node<T> * next; public: T data; </div> </li> <li><a href="/article/422.htm" title="最近情况" target="_blank">最近情况</a> <span class="text-muted">麦田的设计者</span> <a class="tag" taget="_blank" href="/search/%E6%84%9F%E6%85%A8/1.htm">感慨</a><a class="tag" taget="_blank" href="/search/%E8%80%83%E8%AF%95/1.htm">考试</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a> <div>   在五月黄梅天的岁月里,一年两次的软考又要开始了。到目前为止,我已经考了多达三次的软考,最后的结果就是通过了初级考试(程序员)。人啊,就是不满足,考了初级就希望考中级,于是,这学期我就报考了中级,明天就要考试。感觉机会不大,期待奇迹发生吧。这个学期忙于练车,写项目,反正最后是一团糟。后天还要考试科目二。这个星期真的是很艰难的一周,希望能快点度过。   </div> </li> <li><a href="/article/549.htm" title="linux系统中用pkill踢出在线登录用户" target="_blank">linux系统中用pkill踢出在线登录用户</a> <span class="text-muted">被触发</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>由于linux服务器允许多用户登录,公司很多人知道密码,工作造成一定的障碍所以需要有时踢出指定的用户 1/#who   查出当前有那些终端登录(用 w 命令更详细) # who root     pts/0        2010-10-28 09:36 (192</div> </li> <li><a href="/article/676.htm" title="仿QQ聊天第二版" target="_blank">仿QQ聊天第二版</a> <span class="text-muted">肆无忌惮_</span> <a class="tag" taget="_blank" href="/search/qq/1.htm">qq</a> <div>在第一版之上的改进内容:  第一版链接: http://479001499.iteye.com/admin/blogs/2100893   用map存起来号码对应的聊天窗口对象,解决私聊的时候所有消息发到一个窗口的问题. 增加ViewInfo类,这个是信息预览的窗口,如果是自己的信息,则可以进行编辑.   信息修改后上传至服务器再告诉所有用户,自己的窗口</div> </li> <li><a href="/article/803.htm" title="java读取配置文件" target="_blank">java读取配置文件</a> <span class="text-muted">知了ing</span> <div>1,java读取.properties配置文件 InputStream in; try { in = test.class.getClassLoader().getResourceAsStream("config/ipnetOracle.properties");//配置文件的路径 Properties p = new Properties()</div> </li> <li><a href="/article/930.htm" title="__attribute__ 你知多少?" target="_blank">__attribute__ 你知多少?</a> <span class="text-muted">矮蛋蛋</span> <a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/gcc/1.htm">gcc</a> <div>原文地址: http://www.cnblogs.com/astwish/p/3460618.html GNU C 的一大特色就是__attribute__ 机制。__attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute )。 __attribute__ 书写特征是:</div> </li> <li><a href="/article/1057.htm" title="jsoup使用笔记" target="_blank">jsoup使用笔记</a> <span class="text-muted">alleni123</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/JSoup/1.htm">JSoup</a> <div><dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.7.3</version> </dependency> 2014/08/28 今天遇到这种形式, </div> </li> <li><a href="/article/1184.htm" title="JAVA中的集合 Collectio 和Map的简单使用及方法" target="_blank">JAVA中的集合 Collectio 和Map的简单使用及方法</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/list/1.htm">list</a><a class="tag" taget="_blank" href="/search/map/1.htm">map</a><a class="tag" taget="_blank" href="/search/set/1.htm">set</a> <div>         List ,set ,map的使用方法和区别 java容器类类库的用途是保存对象,并将其分为两个概念:     Collection集合:一个独立的序列,这些序列都服从一条或多条规则;List必须按顺序保存元素  ,set不能重复元素;Queue按照排队规则来确定对象产生的顺序(通常与他们被插入的</div> </li> <li><a href="/article/1311.htm" title="杀LINUX的JOB进程" target="_blank">杀LINUX的JOB进程</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a> <div>今天发现数据库一个JOB一直在执行,都执行了好几个小时还在执行,所以想办法给删除掉   系统环境:    ORACLE 10G    Linux操作系统   操作步骤如下: 第一步.查询出来那个job在运行,找个对应的SID字段 select * from dba_jobs_running--找到job对应的sid &n</div> </li> <li><a href="/article/1438.htm" title="Spring AOP详解" target="_blank">Spring AOP详解</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/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/AOP/1.htm">AOP</a> <div>        最近项目中遇到了以下几点需求,仔细思考之后,觉得采用AOP来解决。一方面是为了以更加灵活的方式来解决问题,另一方面是借此机会深入学习Spring AOP相关的内容。例如,以下需求不用AOP肯定也能解决,至于是否牵强附会,仁者见仁智者见智。 1.对部分函数的调用进行日志记录,用于观察特定问题在运行过程中的函数调用</div> </li> <li><a href="/article/1565.htm" title="[Gson六]Gson类型适配器(TypeAdapter)" target="_blank">[Gson六]Gson类型适配器(TypeAdapter)</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Adapter/1.htm">Adapter</a> <div>TypeAdapter的使用动机  Gson在序列化和反序列化时,默认情况下,是按照POJO类的字段属性名和JSON串键进行一一映射匹配,然后把JSON串的键对应的值转换成POJO相同字段对应的值,反之亦然,在这个过程中有一个JSON串Key对应的Value和对象之间如何转换(序列化/反序列化)的问题。   以Date为例,在序列化和反序列化时,Gson默认使用java.</div> </li> <li><a href="/article/1692.htm" title="【spark八十七】给定Driver Program, 如何判断哪些代码在Driver运行,哪些代码在Worker上执行" target="_blank">【spark八十七】给定Driver Program, 如何判断哪些代码在Driver运行,哪些代码在Worker上执行</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/driver/1.htm">driver</a> <div>Driver Program是用户编写的提交给Spark集群执行的application,它包含两部分 作为驱动: Driver与Master、Worker协作完成application进程的启动、DAG划分、计算任务封装、计算任务分发到各个计算节点(Worker)、计算资源的分配等。 计算逻辑本身,当计算任务在Worker执行时,执行计算逻辑完成application的计算任务 </div> </li> <li><a href="/article/1819.htm" title="nginx 经验总结" target="_blank">nginx 经验总结</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/nginx+%E6%80%BB%E7%BB%93/1.htm">nginx 总结</a> <div>   深感nginx的强大,只学了皮毛,把学下的记录。    获取Header 信息,一般是以$http_XX(XX是小写)            获取body,通过接口,再展开,根据K取V    获取uri,以$arg_XX      &n</div> </li> <li><a href="/article/1946.htm" title="轩辕互动-1.求三个整数中第二大的数2.整型数组的平衡点" target="_blank">轩辕互动-1.求三个整数中第二大的数2.整型数组的平衡点</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E7%BB%84/1.htm">数组</a> <div> import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ExoWeb { public static void main(String[] args) { ExoWeb ew=new ExoWeb(); System.out.pri</div> </li> <li><a href="/article/2073.htm" title="Netty源码学习-Java-NIO-Reactor" target="_blank">Netty源码学习-Java-NIO-Reactor</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/netty/1.htm">netty</a> <div>Netty里面采用了NIO-based Reactor Pattern 了解这个模式对学习Netty非常有帮助 参考以下两篇文章: http://jeewanthad.blogspot.com/2013/02/reactor-pattern-explained-part-1.html http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf </div> </li> <li><a href="/article/2200.htm" title="AOP通俗理解" target="_blank">AOP通俗理解</a> <span class="text-muted">cngolon</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/AOP/1.htm">AOP</a> <div>1.我所知道的aop     初看aop,上来就是一大堆术语,而且还有个拉风的名字,面向切面编程,都说是OOP的一种有益补充等等。一下子让你不知所措,心想着:怪不得很多人都和 我说aop多难多难。当我看进去以后,我才发现:它就是一些java基础上的朴实无华的应用,包括ioc,包括许许多多这样的名词,都是万变不离其宗而 已。 2.为什么用aop&nb</div> </li> <li><a href="/article/2327.htm" title="cursor variable 实例" target="_blank">cursor variable 实例</a> <span class="text-muted">ctrain</span> <a class="tag" taget="_blank" href="/search/variable/1.htm">variable</a> <div> create or replace procedure proc_test01 as type emp_row is record( empno emp.empno%type, ename emp.ename%type, job emp.job%type, mgr emp.mgr%type, hiberdate emp.hiredate%type, sal emp.sal%t</div> </li> <li><a href="/article/2454.htm" title="shell报bash: service: command not found解决方法" target="_blank">shell报bash: service: command not found解决方法</a> <span class="text-muted">daizj</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/service/1.htm">service</a><a class="tag" taget="_blank" href="/search/jps/1.htm">jps</a> <div>今天在执行一个脚本时,本来是想在脚本中启动hdfs和hive等程序,可以在执行到service hive-server start等启动服务的命令时会报错,最终解决方法记录一下:   脚本报错如下: ./olap_quick_intall.sh: line 57: service: command not found ./olap_quick_intall.sh: line 59</div> </li> <li><a href="/article/2581.htm" title="40个迹象表明你还是PHP菜鸟" target="_blank">40个迹象表明你还是PHP菜鸟</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</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/oop/1.htm">oop</a> <div>你是PHP菜鸟,如果你:1. 不会利用如phpDoc 这样的工具来恰当地注释你的代码2. 对优秀的集成开发环境如Zend Studio 或Eclipse PDT 视而不见3. 从未用过任何形式的版本控制系统,如Subclipse4. 不采用某种编码与命名标准 ,以及通用约定,不能在项目开发周期里贯彻落实5. 不使用统一开发方式6. 不转换(或)也不验证某些输入或SQL查询串(译注:参考PHP相关函</div> </li> <li><a href="/article/2708.htm" title="Android逐帧动画的实现" target="_blank">Android逐帧动画的实现</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>一、代码实现: private ImageView iv; private AnimationDrawable ad; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout</div> </li> <li><a href="/article/2835.htm" title="java远程调用linux的命令或者脚本" target="_blank">java远程调用linux的命令或者脚本</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ganymed-ssh2/1.htm">ganymed-ssh2</a> <div>转载请出自出处: http://eksliang.iteye.com/blog/2105862        Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar)   使用步骤如下: 1.导包 官网下载: http://www.ganymed.ethz.ch/ssh2/ ma</div> </li> <li><a href="/article/2962.htm" title="adb端口被占用问题" target="_blank">adb端口被占用问题</a> <span class="text-muted">gqdy365</span> <a class="tag" taget="_blank" href="/search/adb/1.htm">adb</a> <div>最近重新安装的电脑,配置了新环境,老是出现: adb server is out of date. killing... ADB server didn't ACK * failed to start daemon * 百度了一下,说是端口被占用,我开个eclipse,然后打开cmd,就提示这个,很烦人。 一个比较彻底的解决办法就是修改</div> </li> <li><a href="/article/3089.htm" title="ASP.NET使用FileUpload上传文件" target="_blank">ASP.NET使用FileUpload上传文件</a> <span class="text-muted">hvt</span> <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><a class="tag" taget="_blank" href="/search/hovertree/1.htm">hovertree</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a><a class="tag" taget="_blank" href="/search/webform/1.htm">webform</a> <div>前台代码: <asp:FileUpload ID="fuKeleyi" runat="server" /> <asp:Button ID="BtnUp" runat="server" onclick="BtnUp_Click" Text="上 传" /></div> </li> <li><a href="/article/3216.htm" title="代码之谜(四)- 浮点数(从惊讶到思考)" target="_blank">代码之谜(四)- 浮点数(从惊讶到思考)</a> <span class="text-muted">justjavac</span> <a class="tag" taget="_blank" href="/search/%E6%B5%AE%E7%82%B9%E6%95%B0/1.htm">浮点数</a><a class="tag" taget="_blank" href="/search/%E7%B2%BE%E5%BA%A6/1.htm">精度</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%A0%81%E4%B9%8B%E8%B0%9C/1.htm">代码之谜</a><a class="tag" taget="_blank" href="/search/IEEE/1.htm">IEEE</a> <div>在『代码之谜』系列的前几篇文章中,很多次出现了浮点数。 浮点数在很多编程语言中被称为简单数据类型,其实,浮点数比起那些复杂数据类型(比如字符串)来说, 一点都不简单。 单单是说明 IEEE浮点数 就可以写一本书了,我将用几篇博文来简单的说说我所理解的浮点数,算是抛砖引玉吧。 一次面试 记得多年前我招聘 Java 程序员时的一次关于浮点数、二分法、编码的面试, 多年以后,他已经称为了一名很出色的</div> </li> <li><a href="/article/3343.htm" title="数据结构随记_1" target="_blank">数据结构随记_1</a> <span class="text-muted">lx.asymmetric</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>第一章   1.数据结构包括数据的 逻辑结构、数据的物理/存储结构和数据的逻辑关系这三个方面的内容。 2.数据的存储结构可用四种基本的存储方法表示,它们分别是 顺序存储、链式存储 、索引存储 和 散列存储。 3.数据运算最常用的有五种,分别是  查找/检索、排序、插入、删除、修改。 4.算法主要有以下五个特性:  输入、输出、可行性、确定性和有穷性。 5.算法分析的</div> </li> <li><a href="/article/3470.htm" title="linux的会话和进程组" target="_blank">linux的会话和进程组</a> <span class="text-muted">网络接口</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>会话: 一个或多个进程组。起于用户登录,终止于用户退出。此期间所有进程都属于这个会话期。会话首进程:调用setsid创建会话的进程1.规定组长进程不能调用setsid,因为调用setsid后,调用进程会成为新的进程组的组长进程.如何保证? 先调用fork,然后终止父进程,此时由于子进程的进程组ID为父进程的进程组ID,而子进程的ID是重新分配的,所以保证子进程不会是进程组长,从而子进程可以调用se</div> </li> <li><a href="/article/3597.htm" title="二维数组 元素的连续求解" target="_blank">二维数组 元素的连续求解</a> <span class="text-muted">1140566087</span> <a class="tag" taget="_blank" href="/search/%E4%BA%8C%E7%BB%B4%E6%95%B0%E7%BB%84/1.htm">二维数组</a><a class="tag" taget="_blank" href="/search/ACM/1.htm">ACM</a> <div>import java.util.HashMap; public class Title { public static void main(String[] args){ f(); } // 二位数组的应用 //12、二维数组中,哪一行或哪一列的连续存放的0的个数最多,是几个0。注意,是“连续”。 public static void f(){ </div> </li> <li><a href="/article/3724.htm" title="也谈什么时候Java比C++快" target="_blank">也谈什么时候Java比C++快</a> <span class="text-muted">windshome</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a> <div>  刚打开iteye就看到这个标题“Java什么时候比C++快”,觉得很好笑。   你要比,就比同等水平的基础上的相比,笨蛋写得C代码和C++代码,去和高手写的Java代码比效率,有什么意义呢?   我是写密码算法的,深刻知道算法C和C++实现和Java实现之间的效率差,甚至也比对过C代码和汇编代码的效率差,计算机是个死的东西,再怎么优化,Java也就是和C</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>