webpack 核心原理
webpack 核心原理
1. 怎样才能运行 import / export
运行 http-server project_1/
它会把所有的文件都请求一遍
2). 平稳的兼容策略:把关键字转译为普通代码,并把所有文件打包成一个文件 缺点:需要写复杂的代码来完成这件事情
2. 把关键字转移成普通代码
将 import / export 转成函数
使用 @babel/core ,在上一节的 deps_4.ts 里添加下面几行代码
import * as babel from '@babel/core';
const code = readFileSync(filepath).toString()
+ const { code: es5Code } = babel.transform(code, {
+ presets: ['@babel/preset-env']
+ })
// 初始化 depRelation[key]
+ depRelation[key] = { deps: [], code: es5Code }
运行 node -r ts-node/register bundler_1.ts
a.js 的变化 1). import 关键字 -> 变成了 require() 2). export 关键字 -> 变成 exports['default']
伏笔 这里的 code 是字符串
a.js 变成 ES5 之后的代码详解
疑惑1
Object.defineProperty(exports, "__esModule", {value: true});
这是在做啥?
解惑 给当前模块添加 __esModule: true
属性,方便跟 CommonJS 模块区分开 那为什么不直接用 exports.__esModule = true
; 两种区别不大,上面写法功能更强,exports.__esModule
兼容性更好
疑惑2
exports["default"] = void 0;
这是在做啥? 解惑 void 0 等价于 undefined
,老 JSer 的常见过时技巧 这句话是为了强制清空 exports['default'] 的值
细节1
import b from './b.js' 变成了 var _b = _interopRequireDefault(require("./b.js"))
b.value 变成了 _b['default'].value
解释: _interopRequireDefault(module)
_ 下划线前缀是为了避免与其他变量重名 该函数的意图是给模块添加 'default'
为什么要加 default? CommonJS 模块没有默认导出,加上方便兼容
内部实现:return m && m.__esModule ? m : { "default": m } 其他 _interop 开头的函数大多都是为了兼容旧代码
细节2
export default a 变成了 var _default = a; exports["default"] = _default;
简化一下就是 exports["default"] = a
const x = 'x'; export {x} 会变成 var x = 'x'; exports.x = x
解释 这个 _default 中间变量有什么意义我也没看出来,也许后面有用 其他部分都挺好理解的
import 关键字会变成 require 函数� export 关键字会变成 exports 对象
本质:ESModule 语法变成了 CommonJS 规则
3. 把所有的文件打包成一个
打包成一个什么样的文件? 包含了所有模块,然后能执行所有模块 比如:
var depRelation = [
{key: 'index.js', deps: ['a.js', 'b.js'], code: function... },
{key: 'a.js', deps: ['b.js'], code: function... },
{key: 'b.js', deps: ['a.js'], code: function... }
] // 为什么把 depRelation 从对象改为数组?
// 因为数组的第一项就是入口,而对象没有第一项的概念
execute(depRelation[0].key) // 执行入口文件
function execute(key){
var item = depRelation.find(i => i.key === key)
item.code(???) // 执行 item 的代码,因此 code 最好是个函数,方便执行
// 但是目前还不知道要传什么参数给 code
// 代码待完善
}
现在有三个问题还没解决 1). depRelation 是对象,需要变成一个数组 2). code 是字符串,需要变成一个函数 3). execute 函数待完善
3.1 把 depRelation 改为一个数组
复制 bundle_1.ts 修改如下代码
type DepRelation = { key: string, deps: string[], code: string }[];
// 初始化一个空的 depRelation,用于收集依赖
const depRelation: DepRelation = [];
const item = { deps: [], code: es5Code }
traverse(ast, {
enter: path => {
if (path.node.type === 'ImportDeclaration') {
item.deps.push(depProjectPath)
}
}
})
3.2 把 code 由字符串改为函数
上面代码 code2 加上${code2}后就是一个函数了 require, module, exports 这三个参数是 CommonJS 2 规范规定的
3.3 完善 execute 函数(主体思路)
const modules = {} // modules 用于缓存所有模块�function execute(key) {
if (modules[key]) { return modules[key] }
var item = depRelation.find(i => i.key === key)
var require = (path) => {
return execute(pathToKey(path)) // 把相对路径变成 key 比如./b.js => b.js
}
modules[key] = { __esModule: true } // modules['a.js'] 给 a.js 准备一个空对象方便它去挂载
var module = { exports: modules[key] }
item.code(require, module, module.exports) // 执行 a.js 的代码执行后就会挂载到 module.exports 上面
return module.exports
}
3.4 最终文件主要内容
var depRelation = [
{key: 'index.js', deps: ['a.js', 'b.js'], code: function... },
{key: 'a.js', deps: ['b.js'], code: function... },
{key: 'b.js', deps: ['a.js'], code: function... }
]
var modules = {} // modules 用于缓存所有模块
execute(depRelation[0].key)
function execute(key){
var require = ...
var module = ...
item.code(require, module, module.exports)
...
}
// 详见 dist.js
dist.js 代码 https://github.com/wanglifa/webapck-demo-2/blob/main/dist.js
虽然我们已经知道了最终文件的主要内容,但是怎么才能得到这个最终文件那? 答:拼凑出字符串,然后写入文件
var dist = "";
dist += content;
writeFileSync('dist.js', dist)
3.5 自动创建最终文件
bundler_3.ts(基于 bundler_2.ts 复制修改的)
+ import { writeFileSync } from 'fs'
+ writeFileSync('dist_2.js', generateCode())
+ function generateCode() {
let code = ''
code += 'var depRelation = [' + depRelation.map(item => {
const { key, deps, code } = item
return `{
key: ${JSON.stringify(key)},
deps: ${JSON.stringify(deps)},
code: function(require, module, exports){
${code}
}
}`
}).join(',') + '];\n'
code += 'var modules = {};\n'
code += `execute(depRelation[0].key)\n`
code += `
function execute(key) {
if (modules[key]) { return modules[key] }
var item = depRelation.find(i => i.key === key)
if (!item) { throw new Error(\`\${item} is not found\`) }
var pathToKey = (path) => {
var dirname = key.substring(0, key.lastIndexOf('/') + 1)
var projectPath = (dirname + path).replace(\/\\.\\\/\/g, '').replace(\/\\\/\\\/\/, '/')
return projectPath
}
var require = (path) => {
return execute(pathToKey(path))
}
modules[key] = { __esModule: true }
var module = { exports: modules[key] }
item.code(require, module, module.exports)
return modules[key]
}
`
return code
+ }
运行 node -r ts-node/register bundler_3.ts 得到新文件 dist_2.js,与 dist.js 相差无几
3.6 目前还存在的问题
问题列表 1). 生成的代码中有多个重复的 _interopXXX 函数 2). 只能引入和运行 JS 文件 3). 只能理解 import,无法理解 require 4). 不支持插件 5). 不支持配置入口文件和 dist 文件名
你可能感兴趣的:(webpack 核心原理)
百万架构师第二十二课:源码分析:Spring 源码分析:Spring经典面试答疑|JavaGuide
后端
Spring面试解答上半节:面试中需要注意的细节动脑子,面试是一种交流面试的时候,要用心去感受当时面试场景了解自己,自己的长处、自己的短处(巧妙地扬长避短)了解1.公司的业务场景2.你是去面试什么岗位的?Java高级工程师实际工作经验是1年(如实填写)1、请描述SpringIOC的工作原理答:定位加载注册BeanFactoryBeanDefintion...1-3年1+ApplicationCon
Python语言的计算机基础
疯狂小小小码农
包罗万象 golang 开发语言 后端
Python语言的计算机基础绪论在当今信息技术飞速发展的时代,编程已经成为了一种必备技能。Python凭借其简洁、易读和强大的功能,逐渐成为初学者学习编程的首选语言。本文将以Python语言为基础,探讨计算机科学的基本概念,并帮助读者更好地理解计算机的工作原理以及如何利用Python进行编程。一、Python简介Python是一种高级编程语言,由荷兰人GuidovanRossum于1991年首次发
Laplace方法
懒洋洋爱睡觉
线性代数 概率论 机器学习
Laplace方法(拉普拉斯方法)前言:Laplace方法,又称Laplace定理,整体思想就是抓极值部分和局部化原理。适用于∫abfn(x)g(x)dx\int_a^bf^n(x)g(x)dx∫abfn(x)g(x)dx型积分的渐近估计,要记得可以通过变形和换元法转化为标准模型。定义:Laplace方法是对实函数的形如Laplace方法是对实函数的形如Laplace方法是对实函数的形如F(λ)=
使用工具深度优化Docker镜像
ivwdcwso
运维 docker 容器 云原生
1.引言Docker镜像优化是容器化应用开发中的关键环节。一个优化良好的镜像不仅可以减少存储和传输成本,还能提升应用的启动速度和安全性。然而,优化镜像的同时,必须确保镜像的功能不受影响。本文将从专业研究员的角度,详细介绍如何使用工具深度优化Docker镜像,并确保优化后的镜像能够正常运行。2.Docker镜像优化的核心目标减小镜像体积:减少存储和传输成本。提升构建效率:通过缓存和并行构建减少构建时
VC++计算精解【6】
sakura_sea
VC++2022计算精解 c++ 开发语言
文章目录二分法(BisectionMethod)数学原理c++参考文献二分法(BisectionMethod)数学原理如果一个函数f(x)f(x)f(x)在闭区间[a,b][a,b][a,b]上连续,且满足f(a)⋅f(b)#includeusingnamespacestd;//函数定义doublef(doublex){return3*pow(x,3)-7*pow(x,2)+11;}//二分法函数
Chromium 132 编译指南 Mac篇(一)- 环境准备
守城小轩
浏览器开发 chrome devtools 浏览器开发 指纹浏览器 chrome
1.引言在当今浏览器领域,开源项目Chromium的地位举足轻重。作为GoogleChrome浏览器的技术核心,Chromium不仅驱动着这款全球流行的浏览器,还为众多衍生浏览器项目奠定了坚实的基础。对于热衷于浏览器技术研究,或有志于开发自有浏览器的开发者来说,掌握Chromium的编译技术是迈向成功的第一步。本指南将聚焦于macOS平台,为开发者提供一份详尽的Chromium132编译入门教程。
华为 Ascend 平台 YOLOv5 目标检测推理教程
Lunar*
目标检测 华为 YOLO 目标检测
1.背景介绍随着人工智能技术的快速发展,目标检测在智能安防、自动驾驶、工业检测等领域中扮演了重要角色。YOLOv5是一种高效的目标检测模型,凭借其速度和精度的平衡广受欢迎。华为Ascend推理框架(ACL)是AscendCANN软件栈的核心组件,专为AscendAI加速硬件(如Atlas300I)设计,可实现高性能的深度学习推理。在本文中,我们将介绍如何基于华为AscendACL推理框架对YOLO
MySQL事物原理
bxnms.
mysql 数据库
事务在MySQL服务中,系统的主线程负责监听连接,而多个连接线程负责处理连接。这时候多个SQL语句操作数据库,就会出现事务多并发,交叉处理。比如银行存钱后再取钱,如果存钱的中途撤销操作,但取钱操作已经完成等等。事务是一个工作单元,它由一系列操作组成,这些操作要么全部成功,要么全部失败,不会结束在中间某个点。在MySQL中,客户端想要开启事务就要向MySQL发送开启事务请求,再发送一系列SQL语句,
代码结构与模块化设计:Python 项目架构与高效开发技巧
全栈探索者chen
python python 架构 开发语言 模块化 性能优化 程序人生 案例分析
代码结构与模块化设计:Python项目架构与高效开发技巧目录为什么模块化设计是高效开发的基础Python项目的理想目录结构模块与包:概念与使用详解模块化设计的核心原则常见设计模式与模块化案例分析:从零搭建模块化Python项目高级技巧:动态模块加载与插件化设计模块化开发中的常见问题与解决方案总结与实践建议1.为什么模块化设计是高效开发的基础模块化设计是一种将复杂的软件系统分解为多个小模块的开发方式
客户案例:致远OA与携程商旅集成方案
慧集通-让软件连接更简单!
慧集通(DataLinkX) 致远OA 客户案例集 API 低代码 需求分析 产品经理 系统集成 携程商旅 致远OA
一、前言本项目原型客户公司创建于1992年,主要生产并销售包括糖果系列、巧克力系列、烘焙系列、卤制品系列4大类,200多款产品。公司具有行业领先的生产能力,拥有各类生产线100+条,年产能超过10万吨。同时,经过30年的发展,公司积累了完善的销售网络,核心经销商已经超过1200个,超16万个销售终端可以覆盖全国所有城市。在现有优势的基础上,优秀的团队以及雄厚的资金实力将助力公司早日实现“与世界共享
无人机技术架构剖析!
云卓SKYDROID
无人机 云卓科技 科普 人工智能 无人机架构
一、飞机平台系统飞机平台系统是无人机飞行的主体平台,主要提供飞行能力和装载功能。它由机体结构、动力装置、电气设备等组成。机体结构:无人机的机身是其核心结构,承载着其他各个组件并提供稳定性。常见的机身材料包括碳纤维、铝合金、塑料等轻量化材质,以保证无人机在飞行中的轻便性和耐用性。机身设计通常需要考虑空气动力学特性,以减少空气阻力,提高续航时间和飞行稳定性。动力装置:无人机的动力系统决定了其飞行能力,
2019-Android-高级面试题总结-从java语言到AIDL使用与原理
2401_89790831
android java 开发语言
4.通过线程池线程池的工作原理:线程池可以减少创建和销毁线程的次数,从而减少系统资源的消耗,当一个任务提交到线程池时a.首先判断核心线程池中的线程是否已经满了,如果没满,则创建一个核心线程执行任务,否则进入下一步b.判断工作队列是否已满,没有满则加入工作队列,否则执行下一步c.判断线程数是否达到了最大值,如果不是,则创建非核心线程执行任务,否则执行饱和策略,默认抛出异常###说下handler原理
自动驾驶中的混合决策架构
AI天才研究院
ChatGPT AI大模型企业级应用开发实战 大数据AI人工智能 大厂Offer收割机 面试题 简历 程序员读书 硅基计算 碳基计算 认知计算 生物计算 深度学习 神经网络 大数据 AIGC AGI LLM Java Python 架构设计 Agent 程序员实现财富自由
自动驾驶中的混合决策架构关键词:自动驾驶、混合决策架构、决策模型、算法、数学模型、项目实战摘要:本文将深入探讨自动驾驶中的混合决策架构,从基础理论到实际应用,全面解析这一领域的核心概念、算法原理及其在自动驾驶中的具体应用。通过详细的项目实战案例,本文旨在为读者提供全面的技术指导和深刻的思考。第一部分:自动驾驶基础理论第1章:自动驾驶概述自动驾驶技术的发展背景源于人类对便捷、安全和高效的交通出行的需
Intel系统编程指南第八章——8.8 多核架构
zenny_chen
操作系统及嵌入式开发 编程 cache 多线程 存储 工具 扩展
本小节描述了支持双核和四核技术的Intel64和IA-32处理器的架构。本讨论可应用于Intel奔腾处理器至尊版、奔腾D处理器、Intel酷睿Duo、双核Intel至强处理器、Intel酷睿2Quad处理器,以及四核Intel至强处理器。通常而言,每个处理器核心具有专用的架构资源,与底层的不带硬件多线程性能微架构的一单个处理器实现相同。一个双核处理器中的每个逻辑处理器(不管是否支持Intel超线程
华为CANN架构与Ascend C算子开发
z1931195
华为
CANN架构CANN(ComputeArchitectureforNeuralNetworks)是华为专为应对人工智能场景而推出的一种新型异构计算架构。在当前快速发展的AI技术背景下,CANN致力于提供一种高效且灵活的解决方案,以支持多种AI框架的应用。其设计不仅仅关注于上层应用的兼容性,同时也服务于底层AI处理器的优化和编程需求,发挥了承上启下的关键作用,成为华为昇腾AI处理器计算效率提升的核心
CAS操作的底层原理(总线锁定机制和缓存锁定机制 )
xweiran
java CAS 处理器 总线锁定 缓存锁定
目录处理器级别的实现总线锁定机制缓存锁定机制MSEI表示缓存行的四种状态MESI协议状态转换CAS操作是不保证可见性的CAS基本概念ABA问题的处理性能考虑先总结一下,CAS(CompareAndSwap)是一种原子操作,它比较当前内存值与期望值,如果相等则更新为新值,CAS是一种硬件级的原子操作,通过总线锁或缓存锁实现原子性,在使用缓存锁的时候缓存一致性协议保证数据一致性。而Java通过nati
keepalived 、HAProxy
www.农民工
智能路由器 网络
KeepAlived高可用集群配置高可用的web集群监控本机80端口,实现主备切换实现原理实施配置高可用、负载均衡的web集群配置高可用、负载均衡HAProxy配置haproxy负载均衡调度器比较LVS(LinuxVirtualServer)NginxHAProxyday02KeepAlived高可用集群配置高可用的web集群监控本机80端口,实现主备切换实现原理实施配置高可用、负载均衡的web集
产品解读 | 构建数智融合时代下的一站式大数据平台
随着智能化技术的飞速发展,尤其是以生成式AI为代表的技术快速应用,推动了数据与智能的深化融合,给数据基础设施带来了新的变革和挑战。如何简化日益复杂的系统架构,提高数据处理效率,降低开发运维成本,促进数据开放共享和创新应用,成为企业关注的核心问题。一站式大数据平台,旨在通过一个平台即可满足各类业务需求,成为数智融合时代下数据基础设施的发展趋势,并从四个维度向四个“一体化”方向演进:数据架构-湖仓集一
出海软件草根逆袭打法是什么?
程序员
上次写文章还是上次,相信相信的力量。今天睡不着就来碎碎念。那今晚的主题《出海软件草根逆袭打法是什么?》草根:就是我这种。你不了解我,那可以理解为普通独立开发者等打法:就是策略,技巧。打法可以指导如何选做哪个产品创意、如何设计和推广等关于主题先下个结论,出海软件草根逆袭打法,三个核心点大型软件企业“不愿意做的生意”软件创意方向“1000名外选手也赚钱”二流战略&一流执行搞推广大型软件企业“不愿意做的
理解 Base64 编码原理及其 JavaScript 实现
red润
前端 javascript 开发语言 前端
理解Base64编码原理及其JavaScript实现下一篇博客在JavaScript中处理中文字符串的Base64编码与解码注意:这里没有处理中文base64编码情况什么是Base64编码?Base64编码是一种将二进制数据转换为可打印字符的编码方式。它将每三个字节(24位)的二进制数据转换为四个字符,每个字符由64个字符集合中的一个表示。这使得数据可以通过文本协议传输(如电子邮件、HTTP请求等
二十三种设计模式-代理模式
angen2018
java 代理模式 设计模式
一、定义与核心思想代理模式是一种结构型设计模式,其核心思想是提供一个代理对象,用以控制对实际对象的访问。通过代理对象,可以在不改变实际对象的情况下,添加各种功能,如权限控制、懒加载、缓存、远程调用等。二、组成要素代理模式主要由以下几个要素组成:抽象主题(Subject)这是一个接口或抽象类,定义了代理对象和实际对象共同的接口,使得代理对象可以在客户端中替代实际对象使用。例如,定义一个Subject
【设计模式-结构型】享元模式
博一波
设计模式 享元模式
一、什么是享元模式享元模式确实是一种结构型设计模式,其名称“享元”虽然听起来有些抽象,但其实包含了该模式的核心概念。我们可以将“享元”这个名字拆开来理解,以便更好地把握其含义和用途。享元模式的命名解释“享”:共享:享元模式的核心在于共享已存在的对象,而不是每次都创建新的对象。通过这种方式,多个客户端可以共享同一个对象实例,而不是每个客户端都拥有自己的独立实例。这种共享机制显著减少了内存的使用,提高
算法面试准备 - 手撕系列第一期 - Softmax
小菜鸟博士
算法面试准备 - 手撕系列 算法 人工智能 面试
算法面试准备-手撕系列第一期-Softmax目录算法面试准备-手撕系列第一期-SoftmaxSoftmax原理图Softmax实现代码-复杂版和简单版本(推荐简单版本)参考Softmax原理图Softmax原理图Softmax实现代码-复杂版和简单版本(推荐简单版本)方法一:循环计算importtorchdefsoftmax(X):#X为Tensor向量,大小为(batch_size,len)#方
JUC 三大辅助类: CountDownLatch CyclicBarrier Semaphore
難釋懷
java
在并发编程中,线程间的协调是一个常见的挑战。Java并发包java.util.concurrent提供了多种工具来帮助开发者解决这一问题。其中,CountDownLatch、CyclicBarrier和Semaphore是三个非常有用的同步辅助类,它们各自具有独特的功能和适用场景。本文将详细介绍这三个类的工作原理,并通过实际案例演示如何在项目中应用它们。CountDownLatch概述定义与用途C
【学术会议论文投稿】Spring Boot实战:零基础打造你的Web应用新纪元
m0_54804970
spring boot 前端 后端
第七届人文教育与社会科学国际学术会议(ICHESS2024)_艾思科蓝_学术一站式服务平台更多学术会议请看:https://ais.cn/u/nuyAF3目录一、SpringBoot简介1.1SpringBoot的诞生背景1.2SpringBoot的核心特性二、搭建开发环境2.1安装Java环境2.2安装IDE2.3安装Maven或Gradle三、创建SpringBoot项目3.1使用Spring
企业级应用的历史、现状与未来:技术转移与问题优化
自由鬼
行业发展 IT应用探讨 微服务 企业级应用 软件开发
企业级应用是组织生产环境的核心,旨在保障关键需求如安全、稳定、扩展性和业务连续性。在技术发展的过程中,企业级应用的架构和实现方式经历了显著的变化。本文将探讨企业级应用的历史、现状及未来,并分析技术演进中问题转移与优化的现象。一、企业级应用的历史:传统架构的复杂性在传统架构中,企业级应用的设计主要依赖于强大的中间件和数据库。例如,IBMWAS(WebSphereApplicationServer)常
windows.location.href 无法使用post请求的解决办法
BlueSea丶
模拟表单提交的办法核心代码:document.write("");document.write("");document.write("");document.form1.submit();代码:varid=$("#id").val();$.post("login_user/",{'id':id,'password':password},function(ret){if(ret.result=='
Golang笔记——切片与数组
Good Note
Golang笔记 golang 开发语言 后端 go 秋招 校招 开发
大家好,这里是GoodNote,关注公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Golang的切片与数组,包括他们的联系,区别,底层实现和使用注意事项等。文章目录数组与切片的异同相同之处区别切片(Slice)源码解析Go源码中`len()`和`cap()`定义长度与容量示例`append()`函数Go切片扩容机制基本原理扩容策略(依据Go版本)扩容源码解析常见误区建议切片作为函
Godot引擎开发:物理引擎高级用法_物理引擎的最佳实践与案例分析
chenlz2007
游戏开发2 godot 游戏引擎 java android 材质
物理引擎的最佳实践与案例分析在上一节中,我们探讨了Godot引擎中物理引擎的基本原理和使用方法。了解了如何创建物理体、应用力和冲量、检测碰撞等基本操作。在这一节中,我们将进一步深入探讨物理引擎的高级用法,通过最佳实践和案例分析,帮助你在动作游戏中更高效地利用物理引擎,实现更加复杂和真实的物理效果。1.物理引擎性能优化在动作游戏中,物理引擎的性能优化是至关重要的。如果物理模拟不流畅,会导致游戏体验大
IoT安全软件:Forescout二次开发_Forescout部署与运维
chenlz2007
物联网 物联网 运维 网络 php 安全 java
Forescout部署与运维1.Forescout架构概述Forescout是一个高度灵活且可扩展的IoT安全平台,旨在帮助组织保护其网络免受各种威胁。Forescout的架构由多个组件组成,包括核心服务器、传感器、代理和客户端。这些组件协同工作,实现对网络中IoT设备的全面监控和管理。1.1核心服务器核心服务器是Forescout平台的中心枢纽,负责管理和协调所有其他组件。它提供了一个集中式的管
springmvc 下 freemarker页面枚举的遍历输出
杨白白
enum freemarker
spring mvc freemarker 中遍历枚举
1枚举类型有一个本地方法叫values(),这个方法可以直接返回枚举数组。所以可以利用这个遍历。
enum
public enum BooleanEnum {
TRUE(Boolean.TRUE, "是"), FALSE(Boolean.FALSE, "否");
实习简要总结
byalias
工作
来白虹不知不觉中已经一个多月了,因为项目还在需求分析及项目架构阶段,自己在这段
时间都是在学习相关技术知识,现在对这段时间的工作及学习情况做一个总结:
(1)工作技能方面
大体分为两个阶段,Java Web 基础阶段和Java EE阶段
1)Java Web阶段
在这个阶段,自己主要着重学习了 JSP, Servlet, JDBC, MySQL,这些知识的核心点都过
了一遍,也
Quartz——DateIntervalTrigger触发器
eksliang
quartz
转载请出自出处:http://eksliang.iteye.com/blog/2208559 一.概述
simpleTrigger 内部实现机制是通过计算间隔时间来计算下次的执行时间,这就导致他有不适合调度的定时任务。例如我们想每天的 1:00AM 执行任务,如果使用 SimpleTrigger,间隔时间就是一天。注意这里就会有一个问题,即当有 misfired 的任务并且恢复执行时,该执行时间
Unix快捷键
18289753290
unix Unix;快捷键;
复制,删除,粘贴:
dd:删除光标所在的行 &nbs
获取Android设备屏幕的相关参数
酷的飞上天空
android
包含屏幕的分辨率 以及 屏幕宽度的最大dp 高度最大dp
TextView text = (TextView)findViewById(R.id.text);
DisplayMetrics dm = new DisplayMetrics();
text.append("getResources().ge
要做物联网?先保护好你的数据
蓝儿唯美
数据
根据Beecham Research的说法,那些在行业中希望利用物联网的关键领域需要提供更好的安全性。
在Beecham的物联网安全威胁图谱上,展示了那些可能产生内外部攻击并且需要通过快速发展的物联网行业加以解决的关键领域。
Beecham Research的技术主管Jon Howes说:“之所以我们目前还没有看到与物联网相关的严重安全事件,是因为目前还没有在大型客户和企业应用中进行部署,也就
Java取模(求余)运算
随便小屋
java
整数之间的取模求余运算很好求,但几乎没有遇到过对负数进行取模求余,直接看下面代码:
/**
*
* @author Logic
*
*/
public class Test {
public static void main(String[] args) {
// TODO A
SQL注入介绍
aijuans
sql注入
二、SQL注入范例
这里我们根据用户登录页面
<form action="" > 用户名:<input type="text" name="username"><br/> 密 码:<input type="password" name="passwor
优雅代码风格
aoyouzi
代码
总结了几点关于优雅代码风格的描述:
代码简单:不隐藏设计者的意图,抽象干净利落,控制语句直截了当。
接口清晰:类型接口表现力直白,字面表达含义,API 相互呼应以增强可测试性。
依赖项少:依赖关系越少越好,依赖少证明内聚程度高,低耦合利于自动测试,便于重构。
没有重复:重复代码意味着某些概念或想法没有在代码中良好的体现,及时重构消除重复。
战术分层:代码分层清晰,隔离明确,
布尔数组
百合不是茶
java 布尔数组
androi中提到了布尔数组;
布尔数组默认的是false, 并且只会打印false或者是true
布尔数组的例子; 根据字符数组创建布尔数组
char[] c = {'p','u','b','l','i','c'};
//根据字符数组的长度创建布尔数组的个数
boolean[] b = new bool
web.xml之welcome-file-list、error-page
bijian1013
java web.xml servlet error-page
welcome-file-list
1.定义:
<welcome-file-list>
<welcome-file>login.jsp</welcome>
</welcome-file-list>
2.作用:用来指定WEB应用首页名称。
error-page1.定义:
<error-page&g
richfaces 4 fileUpload组件删除上传的文件
sunjing
clear Richfaces 4 fileupload
页面代码
<h:form id="fileForm"> <rich:
技术文章备忘
bit1129
技术文章
Zookeeper
http://wenku.baidu.com/view/bab171ffaef8941ea76e05b8.html
http://wenku.baidu.com/link?url=8thAIwFTnPh2KL2b0p1V7XSgmF9ZEFgw4V_MkIpA9j8BX2rDQMPgK5l3wcs9oBTxeekOnm5P3BK8c6K2DWynq9nfUCkRlTt9uV
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1解决方案
白糖_
Hibernate
文章摘自:http://blog.csdn.net/yangwawa19870921/article/details/7553181
在编写HQL时,可能会出现这种代码:
select a.name,b.age from TableA a left join TableB b on a.id=b.id
如果这是HQL,那么这段代码就是错误的,因为HQL不支持
sqlserver按照字段内容进行排序
bozch
按照内容排序
在做项目的时候,遇到了这样的一个需求:
从数据库中取出的数据集,首先要将某个数据或者多个数据按照地段内容放到前面显示,例如:从学生表中取出姓李的放到数据集的前面;
select * fro
编程珠玑-第一章-位图排序
bylijinnan
java 编程珠玑
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Random;
public class BitMapSearch {
Java关于==和equals
chenbowen00
java
关于==和equals概念其实很简单,一个是比较内存地址是否相同,一个比较的是值内容是否相同。虽然理解上不难,但是有时存在一些理解误区,如下情况:
1、
String a = "aaa";
a=="aaa";
==> true
2、
new String("aaa")==new String("aaa
[IT与资本]软件行业需对外界投资热情保持警惕
comsci
it
我还是那个看法,软件行业需要增强内生动力,尽量依靠自有资金和营业收入来进行经营,避免在资本市场上经受各种不同类型的风险,为企业自主研发核心技术和产品提供稳定,温和的外部环境...
如果我们在自己尚未掌握核心技术之前,企图依靠上市来筹集资金,然后使劲往某个领域砸钱,然
oracle 数据块结构
daizj
oracle 块 数据块 块结构 行目录
oracle 数据块是数据库存储的最小单位,一般为操作系统块的N倍。其结构为:
块头--〉空行--〉数据,其实际为纵行结构。
块的标准大小由初始化参数DB_BLOCK_SIZE指定。具有标准大小的块称为标准块(Standard Block)。块的大小和标准块的大小不同的块叫非标准块(Nonstandard Block)。同一数据库中,Oracle9i及以上版本支持同一数据库中同时使用标
github上一些觉得对自己工作有用的项目收集
dengkane
github
github上一些觉得对自己工作有用的项目收集
技能类
markdown语法中文说明
回到顶部
全文检索
elasticsearch
bigdesk elasticsearch管理插件
回到顶部
nosql
mapdb 支持亿级别map, list, 支持事务. 可考虑做为缓存使用
C
初二上学期难记单词二
dcj3sjt126com
english word
dangerous 危险的
panda 熊猫
lion 狮子
elephant 象
monkey 猴子
tiger 老虎
deer 鹿
snake 蛇
rabbit 兔子
duck 鸭
horse 马
forest 森林
fall 跌倒;落下
climb 爬;攀登
finish 完成;结束
cinema 电影院;电影
seafood 海鲜;海产食品
bank 银行
8、mysql外键(FOREIGN KEY)的简单使用
dcj3sjt126com
mysql
一、基本概念
1、MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引。
2、外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接。
3、如
java循环标签 Foreach
shuizhaosi888
标签 java循环 foreach
1. 简单的for循环
public static void main(String[] args) {
for (int i = 1, y = i + 10; i < 5 && y < 12; i++, y = i * 2) {
System.err.println("i=" + i + " y="
Spring Security(05)——异常信息本地化
234390216
exception Spring Security 异常信息 本地化
异常信息本地化
Spring Security支持将展现给终端用户看的异常信息本地化,这些信息包括认证失败、访问被拒绝等。而对于展现给开发者看的异常信息和日志信息(如配置错误)则是不能够进行本地化的,它们是以英文硬编码在Spring Security的代码中的。在Spring-Security-core-x
DUBBO架构服务端告警Failed to send message Response
javamingtingzhao
架构 DUBBO
废话不多说,警告日志如下,不知道有哪位遇到过,此异常在服务端抛出(服务器启动第一次运行会有这个警告),后续运行没问题,找了好久真心不知道哪里错了。
WARN 2015-07-18 22:31:15,272 com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(84)
JS中Date对象中几个用法
leeqq
JavaScript Date 最后一天
近来工作中遇到这样的两个需求
1. 给个Date对象,找出该时间所在月的第一天和最后一天
2. 给个Date对象,找出该时间所在周的第一天和最后一天
需求1中的找月第一天很简单,我记得api中有setDate方法可以使用
使用setDate方法前,先看看getDate
var date = new Date();
console.log(date);
// Sat J
MFC中使用ado技术操作数据库
你不认识的休道人
sql mfc
1.在stdafx.h中导入ado动态链接库
#import"C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","end")2.在CTestApp文件的InitInstance()函数中domodal之前写::CoIniti
Android Studio加速
rensanning
android studio
Android Studio慢、吃内存!启动时后会立即通过Gradle来sync & build工程。
(1)设置Android Studio
a) 禁用插件
File -> Settings... Plugins 去掉一些没有用的插件。
比如:Git Integration、GitHub、Google Cloud Testing、Google Cloud
各数据库的批量Update操作
tomcat_oracle
java oracle sql mysql sqlite
MyBatis的update元素的用法与insert元素基本相同,因此本篇不打算重复了。本篇仅记录批量update操作的
sql语句,懂得SQL语句,那么MyBatis部分的操作就简单了。 注意:下列批量更新语句都是作为一个事务整体执行,要不全部成功,要不全部回滚。
MSSQL的SQL语句
WITH R AS(
SELECT 'John' as name, 18 as
html禁止清除input文本输入缓存
xp9802
input
多数浏览器默认会缓存input的值,只有使用ctl+F5强制刷新的才可以清除缓存记录。如果不想让浏览器缓存input的值,有2种方法:
方法一: 在不想使用缓存的input中添加 autocomplete="off"; eg: <input type="text" autocomplete="off" name