eggjs框架源码解读
文章目录
- 前言
- Egg进程模型
- Egg应用程序结构
- egg运行启动的内幕
- 加载插件
- 扩展内置对象
- 加载中间件
- 加载service
- 加载路由
- 加载配置
- 设置应用信息
- 执行业务逻辑
- 文件加载机制
- 结语
前言
eggjs 是阿里在 Nodejs 技术上的一大杰作,也是对开源世界的一大贡献。里面包含了很多技术结晶,值得我们学习。
Egg进程模型
- 多进程机制
- 应用结构规范
- 文件加载机制
- 多进程机制
大家都知道,nodejs 本身是单线程的,单线程意味着一个错误抛出未捕获就会导致整个应用挂掉。且单线程只能跑在一个核上,无法有效利用机器资源,对机器是一种浪费。
在 egg 中,为了解决上述问题,引入了 Master - Agent - Worker 机制,有多少个 CPU 启多少个 Worker ,榨干了机器的资源;对于每一个 Worker,挂了之后 Mater 进程会重启一个,保证了应用的健壮行。
他们的关系是:Mater 启动 Agent, Agent 启动后会告诉 Mater ,Master 收到消息后会启动 Worker ,Worker 启动完毕告诉 Master ,这个时候 Master 会处于 Ready 状态。这个实现在 egg-cluster 模块。
可以看到egg处于的是一个中间层的角色,基于koa,不同于koa以middleware为主要生态,egg根据不同的业务需求和场景,加入了plugin,extends等这些功能,可以让开发者摆脱在使用middleware功能时无法控制使用顺序的被动状态,而且还可以增加一些请求无关的一些功能。除此之外,egg还有很多其他优秀的功能。
Master 是主进程,只处理子进程的重启及通信;Agent 是 Master 的子进程,主要处理一些通用的服务,比如公共资源访问、文件监听,这些东西让一个 Agent 来做就好了,不需要每个 Worker 去关心。Worker 只需要处理好应用的逻辑就行。
Agent 是以 child_process fork 出来的,它属于 Master 的子进程。Worker 是 cluster fork 出来的(详见 cfork 模块),因为 Worker 是主要负责干活的,所以需要通过 cluster 内置的负载均衡机制合理的分配给他们。
Master Agent Worker 三者间 IPC 通讯实现是通过 Messenger 对象来实现的,Messenger 是 egg 实现的消息转发机制。另外由于Agent Worker 属于不同的进程,所以 Agent 与 Worker 不能直接通讯,不过它们有同一个“爹” Master ,所以它们的通讯是通过 Master 来中转的。
Egg应用程序结构
应用结构规范化是 egg 一个核心思想。约定目录是指约束基于 egg 的上层框架,如 begg 、beidou ,及应用的目录规范。这样做的好处:为 egg 的文件加载机制做准备(config 文件加载、plugin 加载等)。一个基于 egg 的应用应该符合以下目录结构:
├── package.json
├── app.js (可选)
├── agent.js (可选)
├── app
| ├── router.js
│ ├── controller
│ │ └── home.js
| ├── extend (可选,对 egg 的扩展)
│ | ├── helper.js (可选)
│ | ├── filter.js (可选)
│ | ├── request.js (可选)
│ | ├── response.js (可选)
│ | ├── context.js (可选)
│ | ├── application.js (可选)
│ | └── agent.js (可选)
│ ├── proxy (可选,由 hsf/tr 插件规范,建议统一为 proxy)
│ ├── service (可选)
| ├── public (可选)
| │ ├── favicon.ico
| | └── ...
│ ├── middleware (可选)
│ │ └── response_time.js
│ └── views (可选,由 view 插件规范,建议统一为 views)
| ├── layout.html
│ └── home.html
├── config
| ├── config.default.js
│ ├── config.prod.js
| ├── config.test.js (可选)
| ├── config.local.js (可选)
| ├── config.unittest.js (可选)
│ ├── plugin.js
│ └── role.js (可选,以 role 插件举例,插件特殊配置也放在 config 目录下)
└── test├── middleware| └── response_time.test.js└── controller└── home.test.js
egg运行启动的内幕
下面通过追踪源码来讲解一下egg究竟是如何运行起来的。
查看egg-init脚手架生成的项目文件,可以看到整个项目文件是没有严格意义上的入口文件的,根据package.json中的script命令,可以看到执行的直接是egg-bin dev的命令。找到egg-bin文件夹中的dev.js,会看到里面会去执行start-cluster文件:
//dev.js构造函数中
this.serverBin = path.join(__dirname, '../start-cluster');
// run成员函数
* run(context) {//省略yield this.helper.forkNode(this.serverBin, devArgs, options);
}
移步到start-cluster.js文件,可以看到关键的一行代码:
require(options.framework).startCluster(options);
其中options.framework打印信息为:
/Users/wyf/Project/egg-example/node_modules/egg
找到对应的egg目录中的index.js文件:
exports.startCluster = require(‘egg-cluster’).startCluster;
继续追踪可以看到最后运行的其实就是egg-cluster中的startCluster,并且会fork出agentWorker和appWorks,官方文档对于不同进程的fork顺序以及不同进程之间的IPC有比较清晰的说明,
主要的顺序如下:
Master 启动后先 fork Agent 进程
Agent 初始化成功后,通过 IPC 通道通知 Master
Master 再 fork 多个 App Worker
App Worker 初始化成功,通知 Master
所有的进程初始化成功后,Master 通知 Agent 和 Worker 应用启动成功
通过代码逻辑也可以看出它的顺序:
//在egg-ready状态的时候就会执行进程之间的通信
this.ready(() => {//省略代码const action = 'egg-ready';this.messenger.send({ action, to: 'parent' });this.messenger.send({ action, to: 'app', data: this.options });this.messenger.send({ action, to: 'agent', data: this.options });
});this.on('agent-exit', this.onAgentExit.bind(this));
this.on('agent-start', this.onAgentStart.bind(this));
this.on('app-exit', this.onAppExit.bind(this));
this.on('app-start', this.onAppStart.bind(this));
this.on('reload-worker', this.onReload.bind(this));// fork app workers after agent started
this.once('agent-start', this.forkAppWorkers.bind(this));
通过上面的代码可以看出,master进程会去监听当前的状态,比如在检测到agent-start的时候才去fork AppWorkers,在当前状态为egg-ready的时候,会去执行如下的进程之间的通信:
master—> parent
master —> agent
master —> app
fork出了appWorker之后,每一个进程就开始干活了,在app_worker.js文件中,可以看到进程启动了服务,具体代码:
// 省略代码
function startServer() {let server;if (options.https) {server = require('https').createServer({key: fs.readFileSync(options.key),cert: fs.readFileSync(options.cert),}, app.callback());} else {server = require('http').createServer(app.callback());}//省略代码
}
然后就回归到koa中的入口文件干的事情了。
除此之外,每一个appWorker还实例化了一个Application:
const Application = require(options.framework).Application;
const app = new Application(options);
在实例化application(options)时,就会去执行node_modules->egg模块下面loader目录下面的逻辑,也就是agentWorker进程和多个appWorkers进程要去执行的加载逻辑,具体可以看到app_worker_loader.js文件中的load():
load() {// app > plugin > corethis.loadApplicationExtend();this.loadRequestExtend();this.loadResponseExtend();this.loadContextExtend();this.loadHelperExtend();// app > pluginthis.loadCustomApp();// app > pluginthis.loadService();// app > plugin > corethis.loadMiddleware();// appthis.loadController();// appthis.loadRouter(); // 依赖 controller}
}
在真正执行业务代码之前,egg会先去干下面一些事情。
加载插件
egg中内置了如下一系列插件:
- onerror 统一异常处理
- Session Session 实现
- i18n 多语言
- watcher 文件和文件夹监控
- multipart 文件流式上传
- security 安全
- development 开发环境配置
- logrotator 日志切分
- schedule 定时任务
- static 静态服务器
- jsonp jsonp 支持
- view 模板引擎
加载插件的逻辑是在egg-core里面的plugin.js文件,先看代码:
loadPlugin() {//省略代码//把本地插件,egg内置的插件以及app的框架全部集成到allplugin中this._extendPlugins(this.allPlugins, eggPlugins);this._extendPlugins(this.allPlugins, appPlugins);this._extendPlugins(this.allPlugins, customPlugins);//省略代码//遍历操作for (const name in this.allPlugins) {const plugin = this.allPlugins[name];//对插件名称进行一些校验this.mergePluginConfig(plugin);//省略代码}if (plugin.enable) {//整合所有开启的插件enabledPluginNames.push(name);}}
如上代码(只是贴出了比较关键的地方),这段代码主要是将本地插件、egg中内置的插件以及应用的插件进行了整合。其中this.allPlugins的结果如下:
可以看出,this.allPlugins包含了所有内置的插件以及本地开发者自定义的插件。现货区所有插件的相关信息,然后将所有插件进行遍历,执行this.mergePluginConfig()函数,这个函数主要是对插件名称进行一些校验。之后还对项目中已经开启的插件进行整合。plugin.js文件还做了一些其他事情,比如获取插件路径,读取插件配置等等,这里不一一讲解。
扩展内置对象
包括插件里面定义的扩展以及开发者自己写的扩展,这也是这里讲的内容。
在对内置对象进行扩展的时候,实质上执行的是extend.js文件,扩展的对象包括如下几个:
- Application
- Context
- Request
- Response
- Helper
通过阅读extend.js文件可以知道,其实最后每个对象的扩展都是直接调用的loadExtends这个函数。拿Application这个内置对象进行举例:
loadExtend(name, proto) {// All extend filesconst filepaths = this.getExtendFilePaths(name);// if use mm.env and serverEnv is not unittestconst isAddUnittest = 'EGG_MOCK_SERVER_ENV' in process.env && this.serverEnv !== 'unittest';for (let i = 0, l = filepaths.length; i < l; i++) {const filepath = filepaths[i];filepaths.push(filepath + `.${this.serverEnv}.js`);if (isAddUnittest) filepaths.push(filepath + '.unittest.js');}const mergeRecord = new Map();for (let filepath of filepaths) {filepath = utils.resolveModule(filepath);if (!filepath) {continue;} else if (filepath.endsWith('/index.js')) {// TODO: remove support at next versiondeprecate(`app/extend/${name}/index.js is deprecated, use app/extend/${name}.js instead`);}const ext = utils.loadFile(filepath);//获取内置对象的原有属性const properties = Object.getOwnPropertyNames(ext).concat(Object.getOwnPropertySymbols(ext));//对属性进行遍历for (const property of properties) {if (mergeRecord.has(property)) {debug('Property: "%s" already exists in "%s",it will be redefined by "%s"',property, mergeRecord.get(property), filepath);}// Copy descriptorlet descriptor = Object.getOwnPropertyDescriptor(ext, property);let originalDescriptor = Object.getOwnPropertyDescriptor(proto, property);if (!originalDescriptor) {// try to get descriptor from originalPrototypesconst originalProto = originalPrototypes[name];if (originalProto) {originalDescriptor = Object.getOwnPropertyDescriptor(originalProto, property);}}//省略代码//将扩展属性进行合并Object.defineProperty(proto, property, descriptor);mergeRecord.set(property, filepath);}debug('merge %j to %s from %s', Object.keys(ext), name, filepath);}
},
将filepaths进行打印,如下图:
可以看出,filepaths包含所有的对application扩展的文件路径,这里会首先将所有插件中扩展或者开发者自己自定义的扩展文件的路径获取到,然后进行遍历,并且对内置对象的一些原有属性和扩展属性进行合并,此时对内置对象扩展的一些属性就会添加到内置对象中。所以在执行业务代码的时候,就可以直接通过访问application.属性(或方法)进行调用。
加载中间件
对中间件的加载主要是执行的egg-core中的middleware.js文件,里面的代码思想也是和上面加载内置对象是一样的,也是将插件中的中间件和应用中的中间件路径全部获取到,然后进行遍历。
遍历完成之后执行中间件就和koa一样了,调用co进行包裹遍历。
加载控制器
对控制器的加载主要是执行的egg-core中的controller.js文件
egg的官方文档中,插件的开发这一节提到:
插件没有独立的 router 和 controller
所以在加载controller的时候,主要是load应用里面的controller即可。详见代码;
loadController(opt) {opt = Object.assign({caseStyle: 'lower',directory: path.join(this.options.baseDir, 'app/controller'),initializer: (obj, opt) => {if (is.function(obj) && !is.generatorFunction(obj) && !is.class(obj)) {obj = obj(this.app);}if (is.promise(obj)) {const displayPath = path.relative(this.app.baseDir, opt.path);throw new Error(`${displayPath} cannot be async function`);}if (is.class(obj)) {obj.prototype.pathName = opt.pathName;obj.prototype.fullPath = opt.path;return wrapClass(obj);}if (is.object(obj)) {return wrapObject(obj, opt.path);}if (is.generatorFunction(obj)) {return wrapObject({ 'module.exports': obj }, opt.path)['module.exports'];}return obj;},}, opt);const controllerBase = opt.directory;this.loadToApp(controllerBase, 'controller', opt);this.options.logger.info('[egg:loader] Controller loaded: %s', controllerBase);
},
这里主要是针对controller的类型进行判断(是否是Object,class,promise,generator),然后分别进行处理
加载service
加载service的逻辑是egg-core中的service.js,service.js这个文件比较简单,代码如下:
loadService(opt) {// 载入到 app.serviceClassesopt = Object.assign({call: true,caseStyle: 'lower',fieldClass: 'serviceClasses',directory: this.getLoadUnits().map(unit => path.join(unit.path, 'app/service')),}, opt);const servicePaths = opt.directory;this.loadToContext(servicePaths, 'service', opt);},
首先也是先获取所有插件和应用中声明的service.js文件目录,然后执行this.loadToContext()
loadToContext()定义在egg-loader.js文件中,继续追踪,可以看到在loadToContext()函数中实例化了ContextLoader并执行了load(),其中ContextLoader继承自FileLoader,而且load()是声明在FileLoader类中的。
通过查看load()代码可以发现里面的逻辑也是将属性添加到上下文(ctx)对象中的。也就是说加载context对象是在加载service的时候完成的。
而且值得一提的是:在每次刷新页面重新加载或者有新的请求的时候,都会去执行context_loader.js里面的逻辑,也就是说ctx上下文对象的内容会随着每次请求而发生改变,而且service对象是挂载在ctx对象下面的,对于service的更新,这里有一段代码:
// define ctx.service
Object.defineProperty(app.context, property, {get() {// distinguish property cache,// cache's lifecycle is the same with this context instance// e.x. ctx.service1 and ctx.service2 have different cacheif (!this[CLASSLOADER]) {this[CLASSLOADER] = new Map();}const classLoader = this[CLASSLOADER];//先判断是否有使用let instance = classLoader.get(property);if (!instance) {instance = getInstance(target, this);classLoader.set(property, instance);}return instance;},
});
在更新service的时候,首先会去获取service是否挂载在ctx中,如果没有,则直接返回,否则实例化service,这也就是service模块中的延迟实例化
加载路由
加载路由的逻辑主要是egg-core中的router.js文件
loadRouter() {// 加载 router.jsthis.loadFile(path.join(this.options.baseDir, 'app/router.js'));
},
可以看出很简单,只是加载应用文件下的router.js文件
加载配置
直接加载配置文件并提供可配置的方法。
设置应用信息
对egg应用信息的设置逻辑是对应的egg-core中的egg-loader.js,里面主要是提供一些方法获取整个app的信息,包括appinfo,name,path等,比较简单,这里不一一列出
执行业务逻辑
然后就会去执行如渲染页面等的逻辑
文件加载机制
文件加载机制是 egg 里面非常亮点的地方,其中 plugin 插件无缝集成,更让 egg 实现高可拓展性,为 egg 的繁荣生态打下基础。文件加载机制实现于 egg-loader 模块。
MasterLoader 、 AgentWorkerLoader 、 AppWorkerLoader 都是继承于 @ali/egg-loader 下的 BaseLoader ,而在 BaseLoader 中更是把 antx/config/extend/middleware/plugin/proxy/service 加载方式都集成了。以下是各进程所需要加载的目录文件:
MasterLoader(Mater进程)
loadAntx()
加载antx配置:会加载应用、egg 上层框架、egg 下面的config/antx.*.properties(*根据环境而定)
loadConfig()
加载应用、 egg 上层框架、egg 下面的config/config.*.js(*根据环境而定)
AgentLoader(Agent 进程)
loadPlugin()
会读取app/config/plugin.js 、egg 上层框架/lib/core/config/plugin.js 、egg/lib/core/plugin.js,并根据环境剔除一些未开启的插件。
loadAntx()
除了 masterLoader 加载的那些 antx 外,还加载了插件里的 antx 配置。
loadConfig()
除了 masterLoader 加载的那些 config 外,还加载了插件里的 config 配置。
AppWorkerLoader(Worker进程)
appWorkerLoader 除了加载 AgentLoader 相同的文件之外,还需要加载整个应用逻辑文件:
loadRequest()
loadResponse()
loadContext()
loadHelper()
加载 app/extend 目录下的文件,拓展 Koa 实例。包括 context.js request.js response.js application.js helper.js
loadCustomApp()
加载自定义的 app.js,包含应用下的, egg 上层框架,egg
loadProxy()
主要是加载一些 hsf 相关配置,加载应用及插件下里的 app/proxy 目录下的文件,需要依赖 hsf。
loadService()
加载应用及插件下里的 app/service 目录下的文件。通常是业务逻辑通用的抽象服务,比如 A 接口需要用户信息, B 接口也需要用户信息,那么用户信息就可以抽出来做一个单独的 service 服务。
loadMiddleware()
有关 koa 的中间件。包含应用下的、egg lib/core 及 插件下的 app/middleware 目录文件。
loadController()
加载 app/controller 目录下的文件,里面包含应用对路由的逻辑处理。
loadRouter()
加载 app/router.js,应用路由入口,依赖 controller。
结语
egg 在除了上述内容之外,还为了保证应用健壮性这方面做了不少事情,比如 保证进程的优雅退出,日志记录等。构建与它之上的框架可以根据插件系统非常好的进行扩展,egg 本身的代码设计实现也比较优雅,值得阅读源码学习。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4503270.html
如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!
Base64 编码知识,一文打尽!
现在网站为了提升用户的浏览体验越来越多的使用了图片,而这些图片通常以 Base64 的形式存储和加载。因此各位开发工程师肯定对 Base64 毫不陌生了,那么你知道 Base64 究竟是什么,为什么要使用 Base64,以及 Base64 的优缺点吗?什么是 Base64 Base64 是网络中存储和传输的二…...

oracle11g的生产环境,Oracle11grac生产环境部署详录
Oracle 11g rac 生产环境部署详录 作者:田逸( sery163.com ) 基本规划 ◎ 设备选型 1 、服务器: Dell R620 两台。 cpu 8 core ,内存 64G , 600G 15000 转 sas 硬盘,双电源, hba 卡一块,连接存储…...

kubespray安装高可用k8s集群
kubespray快速安装高可用k8s集群 Kubespray 简介 Kubespray (opens new window)是 Kubernetes incubator 中的项目,目标是提供 Production Ready Kubernetes 部署方案,该项目基础是通过 Ansible Playbook 来定义系统与 Kubernetes 集群部署的任务&#…...

前端性能优化手段
前端性能优化分为两类: 一类是文件加载更快: 减少请求资源的大小:图片压缩和文件压缩 减少网络请求次数:雪碧图(精灵图)、防抖和节流 减少渲染次数:HTTP缓存、本地缓存(sessionStorage、localStorage)、Vue中的keep-alive缓存 一类是文件渲染更快: 提前渲染:ssr服务端渲…...

win10电子邮件没有关联_我们如何为在线课程建立10K电子邮件列表
win10电子邮件没有关联One year ago we launched our very first free coding course on Scrimba.com, an online learning platform which Sindre Aarsther and I have co-founded. The course was about CSS Grid and it was highly anticipated, as we had built a waiting …...

高级PHP工程师所应该具备的一些技能
一、平静的心态 和所有程序员一样,要写一手好的程序,没有好的心态是不行的。 遇事不可急躁,不可轻言放弃。 在程序开发过程中,尤其是初中级程序员,写出的程序或架构会遇到很多问题,其中一些问题比较弱智…...

pyhton---二分查找
一,定义 二分搜索是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素…...

Seata源码分析(一). AT模式底层实现
目录GlobalTransactionScanner继承AbstractAutoProxyCreator实现InitializingBean接口写在最后 以AT为例,我们使用Seata时只需要在全局事务的方法上加上@GlobalTransactional,就开启了全局事务的支持。那么Seata的底层到底是怎么实现的呢? 首先我们知道,Seata也是一个Sprin…...

树莓派3B+安装Android 10系统
Android Things 作为 Google 旗下的一款操作系统 (OS),能够帮助开发者规模化开发和维护物联网设备。同时推出的 Android Things 控制台 (Android Things Console) 更是将简化产品开发推向极致,帮助开发者定期获取 Google 最新稳定性修复包以及安全升级包…...

三个点拟合圆形的函数C#
三个点拟合圆形的函数 函数说明 public void FitCircleFromThreePoints(double 点1X, double 点1Y, double 点2X, double 点2Y, double 点3X, double 点3Y, out double 圆心X坐标, out double 圆心Y坐标, out double 圆形半径大小)public void FitCircleFromThreePoints(doub…...
v86.01 鸿蒙内核源码分析 (静态分配篇) | 很简单的一位小朋友 | 百篇博客分析 OpenHarmony 源码
本篇关键词:池头、池体、节头、节块内存管理相关篇为:v31.02 鸿蒙内核源码分析(内存规则) | 内存管理到底在管什么 v32.04 鸿蒙内核源码分析(物理内存) | 真实的可不一定精彩 v33.04 鸿蒙内核源码分析(内存概念) | RAM & ROM & Flash v34.03 鸿蒙内核源码分析(虚实映射…...

手机腾讯视频离线缓存ts格式文件合并为完整视频
写这边文章主要是记个笔记,方便日后使用。 功能背景:很多老人都喜欢听戏。我爷爷突然问我能不能帮他下载点戏曲,于是我用手机帮忙搜了下,发现腾讯视频上有很多戏曲,而且也可以离线缓存,我就说可以。然而缓…...

python content函数_python函数内容
在刚接触python的时候就有个疑问,什么是函数? python语言的函数和数学语言的函数有区别吗?什么是函数数学函数:给定一个数集A,假设其中的元素为x。现对A中的元素x施加对应法则f,记作f(x),得到另…...

centos7安装mysql5.7.24版本
参考:文章正在审核中... - 简书 #1.先检查是否有安装过mysql rpm -e mysql #2.检查有没有安装,如有则删除 rpm -qa | grep mysql #3.卸载MariaDB 如果直接点击rpm包安装会得到错误提示。因为CentOS的默认数据库已经不再是MySQL了,而是M…...

python整数因式分解
前言 提示:这里可以添加本文要记录的大概内容: 对正整数进行因数分解 提示:以下是本篇文章正文内容,下面案例可供参考 一、因数分解是什么? 在数学中,因数分解,又称素因数分解,是…...

Flash倒计时+写在自定义类+写在关键帧
目录 一、链接: 一、目的 1、因为很多都有倒计时图片切换,所以我封装一个倒计时的资源,以后直接从flash赋复制,交换一下资源就可以了 二、参考 1、AS3自定义事件以及发送事件(1)——发送事件 三、操作…...

Change Buffer 只适用于非唯一索引页?错
最近在网上看到一些文章里说:“change buffer 只适用于非唯一索引页。”其实这个观点是错的,先来看看官方文档对 change buffer 的介绍: 文档地址:https://dev.mysql.com/doc/refman/8.0/en/innodb-change-buffer.html The change buffer is a special data structure that…...

【解包裹】基于Matlab实现多聚类相位展开算法
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …...

C++从静态类型到单例模式
详细论述C++语言中静态类型和单例模式,以及为什么会用到这个技术。目录1. 概述2. 详论2.1. 静态类型2.1.1. 静态方法成员2.1.2. 静态数据成员2.2. 单例模式2.2.1. 实现2.2.2. 问题3. 参考 1. 概述 很多的知识,学习的时候理解其实并不是很深,甚至觉得是是不太必要的;而到了实…...

MySQL之SQL语句优化
语句优化 即优化器利用自身的优化器来对我们写的SQL进行优化,然后再将其放入InnoDB引擎中执行。 条件简化 移除不必要的括号 select * from x where ((a = 5));上面的括号很没必要,优化器就会直接去掉。 select * from x where a = 5;等值传递 select * from x where b = a a…...

matlab中三点定圆,MATLAB三点确定一个圆
1 给定三个不在同一直线上的三个点的坐标,确定圆的轨迹方程234 下面是MATLAB中的函数文件5 function[a,b,c]ThreePointFitCircle(x,y,flag)6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%7 %Author By:Wacs58 %Date:200908139 %Email:wacs5http://www.doc…...

freeswitch使用mod_shout模块播放mp3
概述 freeswitch 在对VOIP语音通话中,可以通过playback命令播放IVR语音文件。 默认情况下,freeswitch支持wav文件,也可以直接播放VOIP中常见编解码的G711文件、G729文件等,但是对mp3是不支持的。 通过查询freeswitch的官方文档,发现mod_shout模块是可以支持MP3文件的播放。…...
Exynos4412 Uboot 移植 1----6
转载自http://blog.csdn.net/zqixiao_09/article/details/50805205 11111111111111111111111111111 Uboot 所用版本 u-boot-2013.01 u-boot-2013.01 中有上千文件,要想了解对于某款开发板,使用哪些文件、哪些文件首先执行、可执行文件占用内存的情况&a…...

c语言函数求圆面积,C语言编写函数,计算圆面积.
用c语言编写函数,求圆的周长和面积,用函数.急求.#include#definePI3.1415926doublearea(doubler){returnPI*r*r;}doubleperimeter(doubler){return2*PI*r;}iC语言程序 编写函数,求圆面积的值,主函数输入半径,并在主函数中调它.#includemain(){\x09floatS(floatr);\x09floatr;\x…...

Hadoop进程理解
进程理解 HDFS相关进程理解(NN,DN,SSN)NameNode中存放的是数据文件与元数据的映射信息,数据文件和block快的映射信息,block块和DataNode的映射信息,前两者存放在磁盘里,Hadoop stop后不会消失,第三个存放在内存中,会消失;DataNode通过PING PONG 机制被NameNode识别,…...

lambda解释器_Lambda Interpreter
代码参考: 200行JS代码实现lambda解释器 PP大佬代码 解释器构造 一个lambda interpreter主要由一下几个方面构成: 词法分析器(Lexer):将字符流分解为符号流(token流)语法分析器(…...

『忘了再学』Shell基础 — 19、使用declare命令声明变量类型
目录1、declare命令介绍2、声明数组变量类型3、声明变量为环境变量4、声明只读属性5、补充: 1、declare命令介绍 Shell中所有变量的默认类型是字符串类型,如果你需要进行特殊数据类型进行运算,使用declare命令就可以实现声明变量的类型。 declare命令是一个内置命令,命令如…...

墙布的使用窍门和保养清洁方法 - 江南爱窗帘十大品牌
很多业主担心墙布的日常保养,其实很简单,下面就飞大家普及一下关于墙布的使用窍门和清洗保养的小知识~ 1、墙布的保养: 1. 刚开始施工的时候其实就涉及到保养方面的问题,因为墙布贴完以后不能通风,需要自然阴干&#…...

软件项目管理 4.1.软件需求管理过程
软件项目管理 4.1.软件需求管理过程【公众号 “项目管理研究所” 将会第一时间更新文章并分享行业分析报告】归档于软件项目管理初级学习路线 第三章 生存期模型 《初级学习路线合集 》前言 大家好,这节我们学习软件项目管理---软件需求管理过程,需求管理过程分两个部分。 第…...

状态机、混沌状态、机器学习和智能设备
1.机器和状态机 机器,英文名字为machine,是指具有某种功能和结构的系统(这是我个人基于系统论和结构-功能主义的定义)。机器的外部属性是具有某种功能,机器的内部属性是具有一定结构,从而帮助一定功能实现。…...

自从我学会了Jenkins的自动构建,我再也没有每次都打包上传到服务器然后发布Java服务了
上次我们讲了使用Jenkins部署maven项目 工作两年半,终于学会了Jenkins部署Maven项目 这次我们来讲一下每次提交代码的时候Jenkins自动构建 我们使用的代码仓库是gitee 文章目录🏃第一步,我们在Jenkins中安装gitee插件🏃第二步&am…...

爱奇艺容器实践(内附云原生落地沙龙干货下载)
4月10日下午,爱奇艺技术产品团队举办了“i技术会”线下技术沙龙,本次技术会的主题是“云原生落地探索与实践”,邀请快手、百度和字节跳动的技术专家,与爱奇艺技术产品团队共同分享与探讨云原生落地的实践经验。其中,来…...

css结构伪类
a :nth-child(1) 选择a内部的第一个子元素,不限定子元素的型 a li:nth-child(1 选择a内部的第二个li元素,不能是其他标签 a li:first-child 选择第一个li元素 a li:last-child 选择最后一个li元素 a li:nth-child(n) 选择a标签下的所…...

计算机组成原理笔记,第一章:计算机系统概论
一、计算机的发展与分类 世界第一台电子计算机: 用于炮弹弹道轨迹计算的“电子数值积分和计算机”(Electronic Numerical Integrator and Calculator, ENIAC),- - -美国 冯•诺依曼思想: (1&a…...

CodeTop每日系列三题------------------2021.11.19
LC143. 重排链表 注:这道题涵盖了寻找链表中点,反转链表,合并链表基础中的基础!! /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* …...

同义词词林图转树
HIT同义词此林的上下位词关系不是树状结构,从图转到树型结构 算法: 1.察看word是否有下为词,得到下位词childlist 2.若第一步childlist为空,在entity表中查找该概念对应的实体,否则对于childlist中的每个word若之前…...

java 原子类型
1 CAS -.CompareAndSwap 比较和交换 原子类 底层实现的基本思想 这个操作是cpu 级别的 指令 cmpxchg 什么意思 就是我们以前 一个线程 带着自己 和 自己的从主内存拷贝的数据 通过加工 产出的期望值 就是 我想要得到的数据写入主内存 会先看看 主内存和 手里的 拷贝的 原始数据…...

yarn安装命令
yarn安装 npm i yarn -g 查看版本 Yarn -v 1. 开始一个新工程 yarn init 与 npm init 一样通过交互式会话创建一个 package.json yarn init # yarn npm init # npm # 跳过会话,直接通过默认值生成 package.json yarn init --yes # 简写 -y npm init -y 2…...

HTML+CSS学习
HTMLCSS 目录HTMLCSSHTMLHTML基本格式字体、图像标签超链接锚点链接特殊字符表格标签合并单元格标签列表标签元素textatrea元素CSSCSS语法规范类选择器id选择器通配符选择器字体属性对齐属性装饰文本文本缩进行间距行内样式表外部样式表Emmet语法复合选择器后代选择器子选择器并…...

Java面试宝典!java并发编程详解
01 蚂蚁金服面试题之MySQL 之前的阿里面试题都有做总结,具体面试题内容整理成了文档,本文是针对MySQL系列的,所以下面只展示了自己第一次面试阿里时被吊打问到的一些MySQL难题。 1、请解释关系型数据库概念及主要特点? 2、请说…...

【Spring Cloud Gateway】学习笔记
【Spring Cloud Gateway】学习笔记一、简介二、核心概念三、代码案例3.1 pom依赖3.2、配置项3.3 启动项四、路由规则4.1、path4.2、Query4.3、Method4.4、Datetime4.5、RemoteAddr4.6、Header五、动态路由5.1、添加依赖5.2、配置项5.3、通过注册中心获取路由5.4、通过服务名称转…...

将Abp移植进.NET MAUI项目(一):搭建项目
前言 去年12月份做了MAUI混合开发框架的调研,想起来文章里给自己挖了个坑,要教大家如何把Abp移植进Maui项目,由于篇幅限制,将分为三个章节。 将Abp移植进.NET MAUI项目(一):搭建项目_林晓lx的博客-CSDN博客 将Abp移植进.NET MAUI项目(二):配置与基类编写_林晓lx的博…...

从头学前端--es6(Babel)
Babel使用规则 Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。 这意味着,你可以现在就用 ES6 编写程序,而不用担心现有环境是否支持。下面是一个例子。 // 转码前 input.map(item > item 1);…...

C# 蓄水池抽样
蓄水池采样算法解决的是在给定但长度未知的大数据集中,随机等概率抽取一个数据。如果知道数据的长度,可以用随机数rand()%n得到一个确切的随机位置,或者分块取值来构造随机,那么该位置的对象就是所求的对象,选中的概率是1/n。那长度未知特别是如果这个大数据集不能一次性放…...

NPDP是什么考试?产品经理必知
NPDP认证产品经理国际资格认证,由美国产品开发与管理协会(PDMA)所发起,是国际公认的唯一的新产品开发专业认证。关于NPDP是什么考试?在这里给大家简单介绍一下。 NPDP考试中文全称产品经理国际资格认证考试࿰…...

Centos7安装MySQL-RPM包安装
Centos7安装MySQL-RPM包安装 前期准备工作 Vmware中安装好Centos7虚拟机,并启动起来下载好MySQL相关RPM包安装有Xshell 和Xftp 等访问CentOS系统的工具 1.MySQL的Centos安装准备 1.1MySQL的4大版本 MySQL Community Server 社区版本,开源免费&#x…...

八个PHP 高级工程师经典面试题
1.PHP 如何实现不用自带的 cookie 函数为客户端下发 cookie。对于分布式系统,如何来保存 session 值。 这个题有点绕。考的还是 COOKIE 和 SESSION 的基础知识。服务端通过 set-cookie 命令来通知客户端保存 cookie。 只要按照 domain path 过期时间等规则 用 hea…...

【无标题】c# string.Format $$
string str string.Format(“my name is{0}, I’m {1} years old”,name,age); 2 string str2 $“my name is{name}, I’m {age} years old”; c#################...

PHP高级工程师的面试题
1. 基本知识点 HTTP协议中几个状态码的含义:1xx(临时响应) Php代码 表示临时响应并需要请求者继续执行操作的状态代码。 代码 说明 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分…...

2021年熔化焊接与热切割考试报名及熔化焊接与热切割免费试题
题库来源:安全生产模拟考试一点通公众号小程序 熔化焊接与热切割考试报名是由公众号安全生产模拟考试一点通提供,熔化焊接与热切割证模拟考试题库是根据熔化焊接与热切割最新版教材汇编出熔化焊接与热切割仿真模拟考试。2021年熔化焊接与热切割考试报名…...

风控策略分析师日常--代码、数据、策略
开篇: 在魔蝎被警方带走调查后,目前还没有对该案件公开的法律定性定罪。但是爬虫市场已经好像早已经离去,也许他是高利贷的推波助澜,也许他是使用数据的过分泛滥。我们理解,我们遵守,我们敬畏。以下面的案列…...

Webots中获取机器人质心三维速度的一种简单方法
Webots中获取机器人质心三维速度的一种简单方法 0 前言 Webots中常用的传感器有GPS获取机器人全局位置,加速度计(Accelerator)获取机器人全局加速度,磁力计(Gyro)获取刚体旋转角速度,IMU&#x…...

ICV:2022年稀释制冷机全球市场规模达2.11亿美元,2028年有望出现突破点
全球前沿科技咨询机构ICV于2023年初发布了稀释制冷机(DR)的市场分析报告,ICV在报告中表示,2019-2015稀释制冷机的年均增长率达到8.59%以上,且增长率逐年上升。2022年全球稀释制冷机市场规模将达到2.11亿美元࿰…...

零成本搭建个人博客搭建篇
说到本篇博客主角:Hugo。基于Go语言编写,优点在于本地构建速度超快,同时无需准备任何前提环境,只需要简单配置即可。它可以很简洁,也可以根据个人需求以及diy能力变得功能强大,“花里胡哨”。虽然比Hexo发家晚,但是star数和fork数远远超过前者。所以从本篇博客开始,我打…...

Java基础(1)——ThreadLocal
1. Java基础(1)——ThreadLocal 1.1. ThreadLocal ThreadLocal是一个泛型类,当我们在一个类中声明一个字段:private ThreadLocal<Foo> threadLocalFoo = new ThreadLocal<>();时,这时候,即使不同的线程持有了该类的同一个实例,那么它们在访问该实例的thread…...

给盒子添加边框显示不出
border:1px; 一开始我是这样设置的,这样设置边框是不行的,显示不出来。 border:1px solid; 必须要添加边框的类型,那可以显示出来。...

NoSQL数据库知多少--列存储Cassandra数据库
背景 2007年Facebook为了解决消息收件箱搜索问题(Inbox Search problem)而开始设计Cassandra项目。 当时Facebook遇到了传统的方法难以解决的超大数据量存储可扩展性问题。具体来说,项目团队需要处理大量的消息副本、消息的反向索引等不同形…...

使用NBU备份数据文件和Oracle
参考文档: -- MOS 上NBU备份恢复的参考文档 How To Perform A Redirected Restore With Netbackup (文档 ID 1399214.1) How to Install, Configure, Check and Troubleshoot VERITAS NetBackup 4.5 for Oracle (文档 ID 209117.1) RMAN and Specific Media Manage…...

20230110配置ubuntu18.04为开机自动登录
20230110配置ubuntu18.04为开机自动登录 百度搜索:ubuntu 18.04 开机自动登录 https://blog.csdn.net/yang1994/article/details/124446319 通过配置文件启用/禁用Ubuntu 18.04自动登录 超级用户可以通过编辑custom.conf配置文件的方式,来为自己或任何其…...
原型机拱手让人,飞行器停售,谷歌创始人押注的飞行汽车,如今搁浅
赖可 雷刚 发自 凹非寺量子位 报道 | 公众号 QbitAI如果从根本上变革人类出行,无人车是一种选择,飞行器是另一种更好的选择。而且两种选择,都得到谷歌创始人拉里佩奇青睐。2009年,谷歌无人车正式起步,一年之后…...

四旋翼飞行器2——自己设计四旋翼飞行器的硬件准备和基础知识
四旋翼飞行器2——自己设计四旋翼飞行器的硬件准备和基础知识 文章目录四旋翼飞行器2——自己设计四旋翼飞行器的硬件准备和基础知识DIY四轴需要准备什么零件【基本原理与名词解释】1、遥控器篇什么是通道?什么是日本手、美国手?2、飞行控制板篇飞控的用…...

四旋翼飞行器姿态解算算法入门视频教程
1、关于四旋翼飞行器设中Mahony互补滤波算法解算姿态的一点点讲解,和个人的一些心得,不是飞行器设计专业,视频比较浅显,最初是为了学校课程实训做的入门视频,所以没敢过于深入。如有错误欢迎交流,联系方式在…...

四轴飞行器的串级PID参数整定经验
串级PID即将两个PID控制器按照串联的方式连接起来,前一个的输出作为后一个的输入两者共同控制控制对象。对于四旋翼来讲最普通的就是外环角度环,内环角速度环,两者怎么联系呢,有的说法是:外环:输入为角度,输…...

无名创新——2019年TI杯电赛飞行器赛题关键问题汇总
从2018年12月以来,无名创新TI飞控累计服务了全国高校累计超400个电赛飞行器学生团队,无名创新TI系列产品根据客户反馈、市场需求,完成了一次次软硬件迭代升级,比赛临近,针对近期客户担心是否能直接采用成品TI飞控开发板…...

四轴飞行器入门知识
【概述】 1、diy四轴需要准备什么零件 无刷电机(4个) 电子调速器(简称电调,4个,常见有好盈、中特威、新西达等品牌) 螺旋桨(4个,需要2个正浆,2个反浆) 飞…...

四轴飞行器实现定点、巡线和跟踪
https://www.bilibili.com/video/av24220271 https://www.bilibili.com/video/av24220271 https://www.bilibili.com/video/av24181594 基础部分: 四轴姿态结算(AHRS和IMU的比较) 四轴串级PID姿态控制 四轴串级PID定高控制 以上部分是实现…...

预估飞行器最大飞行时间
本文以四旋翼飞行器为例,介绍如何借助硬件参数估算飞行器大致飞行时间。 文章目录前言计算公式验证实验结论总结前言 许多团队飞行器项目或个人DIY飞行器往往会涉及到飞行时间的约束,飞行器的种类不同、用途不同、搭载的功能不同,都会直接影…...

飞行器的姿态概念
地面坐标系 (earth-surface inertial reference frame)Sg--------Oxgygzg ①在地面上选一点Og ②使xg轴在水平面内并指向某一方向 ③zg轴垂直于地面并指向地心 ④yg轴在水平面内垂直于xg轴,其指向按右手定则确定 机体坐标系 (Aircraft-b…...

未来时尚个人飞行器
...

Spring-Boot报错:BeanCreationException:Error creating bean with name‘xxx‘
报错代码 检查注解 无错误 检查大小写 无错误 检查配置文件 无错误 检查映射关系 无错误 问题出在数据库的表的字段名上,字段名用了name,name是一个关键字 导致报错 将name改为add_name后,项目正常启动 问题出现的比较偏 记录一下...

封装RabbitMQ工具类出现required a bean of type ‘java.lang.String‘ that could not be found
封装RabbitMQ工具类过程中,报了required a bean of type java.lang.String that could not be found这个问题: 回看代码很容易发现在参数这里出现的问题: 继续往下看: 问题已经很明白了,由于疏忽,在注册Bea…...

装配Bean
自动装配Bean 相关注解 Component 组件扫描时,如果类上有Component注解,为其创建bean 注解参数说明: Component 没有参数时,默认将类名首字母小写作为bean的ID Component(“XXX”) 设置bean的ID Named Java依赖注入规范&…...
spark on yarn报错java.lang.ClassNotFoundException: com.sun.jersey.api.client.config.Client
环境: hadoop2.7.4spark2.1.0 配置完spark-historyserver和yarn-timelineserver后,启动的时候没有报错,但是在spark用 ./spark-submit –class org.apache.spark.examples.SparkPi –master yarn –num-executors 3 –driver-memory 1g…...

基于LVS的负载均衡
一、计算机集群1、什么是计算机集群计算机集群简称集群是一种计算机系统, 它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常…...

Druid 的 WallFilter 抛出 sql injection violation, comment not allow 问题的解决方法
ps: https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter可以对应修改参数。 如需要执行多行语句 , 要设置multiStatementAllow为true 1 现象 查询某个模块数据时,抛出以下异常: Caused by: java.sql.SQLException: sql…...

SpringBoot出现Error creating bean with name的一种情况
在使用springboot做单元测试的时候碰到以下问题: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name com.pose.boot.BootApplicationTests: Unsatisfied dependency expressed through field redisDao; 测试类获取不了redi…...

运行linux的机器死机了_如何在任何机器上轻松运行任何Linux工具
运行linux的机器死机了by Flavio De Stefano由弗拉维奥德斯特凡诺(Flavio De Stefano) 如何在任何机器上轻松运行任何Linux工具 (How to easily run any Linux tool on any machine) Have you ever encountered a situation like the ones below?您是否遇到过以下情况&#x…...

LVS理论知识
LVS 是一个开源的软件,可以实现LINUX平台下的简单负载均衡。首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请…...

java rbac_rbac
本篇文章将会解决上一篇文章《Spring Security OAuth2.0认证授权五:用户信息扩展到jwt 》中遗留的问题,并在原有的项目中新增模块business-server用来充当前端页面的web容器并转发登录请求和更换token的请求等,以模拟前后端分离下的登录以及更…...

linux vim下自动补全,linux-python在vim下的自动补全功能
linux-python在vim下的自动补全功能安装配置:wget https://github.com/rkulla/pydiction/archive/master.zipunzip -q mastermv pydiction-master pydictionmkdir -p ~/.vim/tools/pydictioncp -r pydiction/after ~/.vimcp pydiction/complete-dict ~/.vim/tools/p…...

vulfocus-fofa靶场 Log4j2远程命令执行
Log4j2远程命令执行前言一、Apache Log4j2是什么?二、复现步骤1.工具2.复现过程前言 一、Apache Log4j2是什么? Apache Log4j2 是一个基于 Java 的日志记录工具。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业…...

php sql语句 order,php 数据库order语句
SQL注入测试平台 SQLol -2.SELECT注入测试前面,我们已经安装好了SQLol,打开http://localhost/sql/,首先跳转到http://localhost/sql/select.php,我们先从select模块进行测试。一条完成Select语句,大致可以这样表示&…...

笔记 - js - vue
1、vue父子组件传值方式 1、props2、v-model3、.sync 父组件向子组件传的值,子组件可以直接修改父组件的值4、ref父组件通过ref直接拿到子组件的属性或方法5、$emit父组件给子组件定义事件,子组件中emit触发,参数(事件名…...

spring boot 报错 Error creating bean with name 'indexController': Injection of autowired dependencies
org.springframework.beans.factory.BeanCreationException: Error creating bean with name indexController: Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: priv...

出现org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xxx'报错
参考:https://blog.csdn.net/qq_35246620/article/details/70216023 1.写完controller,想启动测试一下,启动不成功,报错了: org.springframework.beans.factory.BeanCreationException: Error creating bean with na…...

idea将web项目打成jar包并运行
第一步 : 点击下面按钮 或者 files–project structure… 第二步 : Artifacts – 加号() – JAR – From modules with dependencies… 第三步 : 如果要直接打jar包直接第一个图点击OK即可 如果想打的jar包中含有main方法从第二个图往下执行 &&&&&&…...

嵌入式实现双路adc通道转换
本程序对应的开发板为蓝桥杯嵌入式开发板stm32f103rbt6,为中型mcu。当涉及两路甚至多路adc通道时,常用的方法有两种dma方法和注入通道,本文采用后者。 adc初始化 void ADC_Config(void) {ADC_InitTypeDef ADC_InitStructure;GPIO_InitType…...

spring boot中使用@Autowired注解时警告Field injection is not recommended
依赖注入有三种方式: ① 变量(filed)注入 Autowired StudentDao studentDao; ② 构造器注入 final StudentDao studentDao;Autowired public void constructor(StudentDao studentDao) {this.studentDao studentDao; } ③ set方法注入…...

SSM时遇到的异常(2)——BeanCreationException: Error creating bean with name 'empController'
JDK1.7Tomcat7.0 EclipseSSM 十二月 27, 2018 2:22:43 下午 org.apache.catalina.core.ApplicationContext log 严重: StandardWrapper.Throwable org.springframework.beans.factory.BeanCreationException: Error creating bean with name empController: Injection of reso…...

Angularjs启动入口, splash画面,与加快启动的技巧
Angularjs启动入口, splash画面,与加快启动的技巧 Angularjs启动入口 * 自动响应DOMContentLoaded event * 从ngApp指定的入口启动: 在angular.js执行后, 如果 document.readyState是complete, 则寻找并执行ngApp指定…...

Spring容器启动常见错误整理
以下是工作过程中常见的一些Spring容器启动时错误整理,方便后期再次遇到的时候,能够快速查询。本文章将不定时长期更新 1、NoSuchBeanDefinitionException org.springframework.beans.factory.BeanCreationException:Error creating bean with name xx…...

AndroidStudio升级4.1 后启动失败 Plugin问题
AS升级4.1 后启动失败 Plugin问题 start fail 弹窗如下: Internal error. Please refer to https://code.google.com/p/android/issuesjava.lang.NoSuchMethodError: com.intellij.ide.plugins.PluginManagerCore.loadDescriptors()[Lcom/intellij/ide/plugins/Id…...
手机收不了验证码,帮我收一下
欢迎来到,《黑鸟的财富经之赚钱方法写在刑法》系列。在讲财富经之前,我们先来温习一下平常正常登陆手机APP的过程,为了避免发函,我们以国外的WhatsApp(类似微信的聊天软件)为例子。一般在登陆APP时候,只要通过手机验证…...

30多年程序员生涯经验总结
2014-09-26 早读课:30多年程序员生涯经验总结http://www.sap-share.com/forum.php?modviewthread&tid44166&fromuid39324(出处: 同享汇- 打造SAP分享第一平台) 文章来源:码农网 1.客户在接触到产品之后,才会真正明白自己的需求。 这…...

安卓设置keychain_iOS KeyChain的使用
很多时候我们会发现一些iOS应用(例如:facebook,whatsap)即使我们卸载重装它仍然能够记住我们的账号密码,我们的应用数据不是存储在应用所对用的沙盒中吗?一旦应用卸载沙盒中的所有数据不是都会清除吗?答案是肯定的&…...

CSDN2022总排名前十统计
闲来无事,大概统计一下csdn总排名最高的一些大佬; 截至2022.06.23统计情况: 直接点击 周排行/总排名 即可查看排行榜上的各位大佬 第一名 涛歌依旧的博客_CSDN博客-s2: 软件进阶,S1: C/C,s2: Linux杂项领域博主 博主:涛歌依…...

联想ERP项目实施案例分析(大结局):回到最初再反思IT价值
由于昨天被盗号(我昨天上午都在医院看牙医),被坏人给大家群发了广告,幸亏昨天中午回来发现问题及时报告微信客服中心,加强安全防护,账号又被追了回来。在此继续警醒各位朋友,安全这个事…...

利用SAP 0day,四分钟内黑掉华尔街
本文讲的是利用SAP 0day,四分钟内黑掉华尔街,2017年5月20日,由唯品会信息安全部主办,唯品会安全应急响应中心承办的“因唯安全,所以信赖——深度揭秘唯品会信息安全建设实践 2017唯品会第二届电商安全峰会”在苏州成功…...

SAP License:糟糕的用户比任何系统问题都要危险
偶夫人在一公司做内部顾问。她本来是做SD模块的,可是公司里什么模块的问题都要她来解决,因为只有她一个业务顾问。我经常应邀解决他们的MM问题,甚至FI问题。但在FI上,我也是十窍通九窍那种。 夫人经常跟我抱怨说用户问题多多。他们…...

指数哥伦布编码
指数哥伦布编码是变长编码的一种,类似于哈夫曼编码,与哈夫曼编码不同之处在于其在解码是不需要保存一个码表,可以直接根据码字进行解码。 编码 指数哥伦布编码由前缀和后缀两部分构成,前缀和后缀都依赖于指数哥伦布编码的阶数k。…...

【Linux】线程互斥
目录🌈前言🌸1、Linux线程互斥🍧1.1、线程间互斥相关背景概念🍨1.2、互斥量(锁)相关背景🍯1.3、互斥量(锁)相关API🍯1.3.1、初始化和销毁互斥锁🍰1.3.2、互斥量加锁和解锁🍲1.3.3、互…...

【转】什么是编码?
事实上计算机只认识 0 和 1,然而我们却可以通过计算机来显示文本,这就是靠编码实现的。编码其实就是约定的一个协议,比如 ASCII 编码约定了大写字母 A 对应十进制数 65,那么在读取一个字符串的时候,看到 65,…...

编码介绍
编码是学习编程前必须要克服的一个问题,但是它并没有那么难以理解。相信大家在打开浏览器的时候就会有机会看到页面乱码,这就是因为编码和解码不一致导致的。 编码主要有两类,一类是非Unicode编码,一类是Unicode编码。 1. 非Unic…...

编码(字符串) SDUT
Problem Description 给你一个由大写字母组成的组成的字符串,你可以用如下规则对其进行编码: 1、 包含K个相同字母的连续字符串可以用KX表示,其中X是相同的字母。 2、 如果K为1,不输出K Input 输入有多组,直到文件…...

Mapabc地图----删除地图上的某个点
//删除地图上的某个点//equimentId,engineerId------>是某个点的IDfunction removeEuipment(equimentId,engineerId){if(equimentId ! null)mapObj.removeOverlayById(equimentId);if(engineerId ! null)mapObj.removeOverlayById(engineerId);}...

Mapabc地图----展示地图上的所有点
function showEmployeeLine(employeerArr){//employeerArr是一个数组for(var i0;i<employeerArr.length;i){var tipOptionnew MTipOptions();//添加信息窗口tipOption.title"编号:"employeerArr[i].id;//信息窗口标题tipOption.content"<div s…...

图吧mapabc禁止放大
吐糟下图吧mapabc,网上查找一下禁止放大都找不到。是太简单呢,还是太小众。 官网的API也没有个例子。看着手册,在31.3后倒是明确有个属性可以用来禁止双击放大,但也是看的一头雾水。全局变量。。。 更坑人的是以为false是用来禁…...

mapabc简单实例
<% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html&...

重写TiledServiceLayer实现Arcgis访问Mapabc地图服务
之前有一次用到过高德的地图,当时折腾了好几天才加到Arcgis中,这次把其中的代码分享出来,希望对正在研究这个的朋友们有些帮助 package com.baixin.main; /*** * ClassName: MapAbcToArcGISTLayer* Description: ArcGIS访问MapAbc地图服…...

andori-mapabc:mapview无法显示、不能拖动、缩放失效等问题
项目中需要用到地图功能,使用的是mapabc,但是在3.0以上真机上一直出现图层加载不出来,无法拖动,缩放也失效等问题,困扰了一周,写了不下5个demo单独测试均没有任何问题。仔细想了下,无法加载说明…...

基于Mapabc API的周边查询应用
现在,越来越多的 Location Based 应用,或者Geolocation的应用出现在网络、手机等各种各样的终端上,为人们的日常生活、出行和工作都提供了不少的便利。最常见的就是出门前,利用地图工具,看看合适的公共交通路线&#x…...

mapabc小示例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <meta http-equiv"Cont...

Mapabc地图----改变地图上的某个点
function changeEquimentStatus(equipmentInfo) {var tip mapObj.getOverlayById(equipmentInfo.id);tip.option.tipOption.title "这里是弹出框的标题";//信息窗口标题tip.option.tipOption.content"这里是弹出框的内容";//信息窗口内容tip.option.tipO…...

Mapabc地图----生成路线
//下面这一段代码是一定要定义的 //<---------------------------------开始---------------------------------------->/** 下面是生成线路的几个函数(请勿修改)<~----------------------------------------------------------------------------------->* */va…...

Mapabc里InfoWindow自定义窗口时的关闭事件。
使用InfoWindow的时候,原有的关闭事件InfoWindow.close()在很多动态查询点时候不太好用,这时使用οnclick"mapObj.clearInfoWindow()"即可。比较方便。...

mapabc入门实例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-equiv"Content-Type...

d的更好C关闭ctfe的dup
原文 //dmd -betterCmixin(void foo(){}.idup);//错误:TypeInfo不能与-betterC一起使用这会导致mir.bitmanip和mir-cpuid中的BetterC回归 我也有类似的问题.用betterC编译时,在CTFE中phobos的大多数东西不管用(在dmd和ldc中,有同样错误) void main() {import std.uni : toLow…...
Vector和ArrayList对比
本文会对ArrayList和Vector进行分析,为什么会关注这两个类,主要是因为他们拥有相同的继承结构,接下来就来探索下这两个类实现和效率的异同。 继承结构 可以看到,Vector和ArrayList都实现了List和RandomAccess接口,都继…...

python 中单下划线和双下划线的区别
一、_func 单下划线开头 --口头私有变量 1.1、在模块中使用单下划线开头 在Python中,通过单下划线_来实现模块级别的私有化,变量除外。一般约定以单下划线开头的函数为模块私有的,也就是说from moduleName import * 将不会引入以单下划线开…...

AI标注工具Labelme和LabelImage Labelme和LabelImage集成工具
在AI数据标注过程中,难免会使用到标注工具,常用的工具无非是Labelme和LabelImage。 Labelme是标注目标轮廓,而LabelImage则是标注目标的区域,然而使用原生态的工具,需要用到python命令行,十分麻烦…...

【springcloud 微服务】Spring Cloud Alibaba Sentinel使用详解
目录 一、前言 二、分布式系统遇到的问题 2.1 服务可用性问题 2.1.1 单点故障 2.1.2 流量飙升 2.1.3 容错机制 2.2 服务雪崩问题 三、 服务可用性解决方案 3.1 服务容错机制 3.1.1 超时机制 3.1.2 服务限流 3.1.3 隔离 3.2 服务熔断 3.2.1 什么是服务熔断 3…...

【分享】基于TPS65140的LCD驱动电路方案——飞凌嵌入式
在一次项目定制中,客户要求我们将CPU主控和LCD显示屏电压驱动电路做成一体板,LCD显示屏所需要的AVDD、VGH、VGL等电压需要主控板提供,因为这几路电压所输出的电流都很小(一般都不会超过10mA,具体可以查阅屏体手册&…...

关于 flex 布局时,子元素宽度超出父元素问题及解决方案(问题)
文章目录1. 第一次遇到这个问题的场景2. 第二种情况3. 问题原因4. 解决方案4.1 方案一4.2 方案二1. 第一次遇到这个问题的场景 先看效果图,大家可以看一下下面的样式,很明显左边和右边的盒子我是给的定宽,但是被挤压了 这个是我在项目中遇到的…...

php 压缩zip打包类和用例
<?php namespace app\lib; /** * 压缩包驱动 * author Wmeng * version 0.0.1 */ class ZipHelper { protected $zip; protected $root; protected $ignored_names; /** * 构造函数 */ public function __construct() { $th…...

普乐蛙景区VR体验设备景区VR解决方案元宇宙vr体验馆项目
#普乐蛙元宇宙VR案例分享 新疆博尔塔拉州温泉县五馆 内置机甲战机星球火箭模型等产品 新增VR产品既丰富孩子们学习空间更是对孩子社会领域教育的一次真正意义上的实践.VR设备体验,是让整个人置身于虚拟现实中,让人沉浸感更足。VR设备给该景区带来了更…...

黑马程序员——前端HTML5+CSS3(女神版)——day01——文本格式化标签、图片标签的title属性、音频标签、视频标签、超链接标签的target属性
黑马程序员——前端HTML5CSS3(女神版)——day01——文本格式化标签、图片标签的title属性、音频标签、视频标签、超链接标签的target属性 目录黑马程序员——前端HTML5CSS3(女神版)——day01——文本格式化标签、图片标签的title属…...

什么是用户体验 ?
1、感观体验:呈现给用户视听上的体验,强调舒适性。一般在色彩、声音、图像、文字内容、网站布局等呈现。 2、交互用户体验:界面给用户使用、交流过程的体验,强调互动、交互特性。交互体验的过程贯穿浏览、点击、输入、输出等过程给…...

学校教的Python,找工作没企业要,太崩溃了【大四真实求职经历】
如果只靠学校学的东西去找工作,能找到工作吗? 今天给大家看一个粉丝的真实求职案例,想做Python方面的工作,投了二十几个简历却没人要,心态崩了。为什么没人要?我来告诉你答案。 然后我还会结合我的这些年的…...

安卓版kawaks街机模拟器,C8,V3手柄冲突解决方案,物理改键
kawaks_5.2.7.apk 做得很好 美中不足,相同类型的手柄,键值会冲突,导致4个人没法玩 本人通过更改手柄模式,成功试出了4种不冲突的组合模式 准备工作:C8手柄*2V3手柄*2,我们要调出以下组合 Xbox Wireless Controller V3: R1 Home Wireless Controller V3: B Home Gamepad…...

http和https的区别?
http和https的区别?HTTPHTTPSHTTP与HTTPS区别HTTPS相比于HTTP协议的优点和缺点HTTP http是超文本传输协议 HTTP协议是基于传输层的TCP协议进行通信,通用无状态的协议。80端口 HTTPS https—安全的超文本传输协议 是以安全为目标的HTTP通道,…...

重构·改善既有代码的设计.02之代码的“坏味道”
前言之前在《重构改善既有代码的设计.01》中初步了解了重构的基本前提,基础原则等入门知识。今天我们继续第二更......识别代码的坏味道Duplicated Code 重复代码。最单纯的Duplicated Code就是“同一个类中含有相同的表达式”或“两个互为兄弟的子类内含有相同表达…...

学习自动化测试有那么重要吗?是不是真的有必要学呢?
你好,我是凡哥。 最近收到不少小伙伴私信提问,其中问得比较多的就是“学习自动化测试有那么重要吗?”。 我的回答是肯定的——很重要。 相信不少同学都有诸如此类的疑问,例如:“日常工作中好像用不上自动化ÿ…...

Linux下的图标与文件关联机制:freedesktop
Linux下的图标与文件关联机制:freedesktop 目前主流的Linux发行版中,使用的桌面基本都是基于GNOME、KDE、Xfce等环境,这几种桌面环境中,关于桌面图标,文件关联,应用程序启动等方面的实现,全部都…...

如何构造 HTTP 请求?
❣️关注专栏: JavaEE 这里写目录标题🍧1 通过 form 表单构造 HTTP 请求🍨 1.1 form 发送 GET 请求🍨 1.2 form 发送 POST 请求🍧 2 通过 ajax 构造 HTTP 请求🍨 2.1 js 提供的原生的 ajax 的 API…...

数据库:mycat实现读写分离
目录 一、mycat 1、mycat实现读写分离原理 2、mycat应用场景 3、mycat作用 4、mycat实现读写分离实战 一、mycat 1、mycat实现读写分离原理 ①用户进行读操作则由mycat转给配置的从数据库。 ②用户进行写操作则由mycat转给配置的主数据库。 ③转发规则由mycat配置文件中…...

系统测试设计的10种方法
一、等价类划分 等价类的概念 等价类 某个输入域的子集合,在这个集合中 每一个输入条件都是等效 的, 如果其中一个输入不能导致问题发生,那么集合中其它输入条件进行测试也不可能发现错误。有效等价类 合理的输入数据 指满足产品规格说明的…...

js常用方法和内存泄露的几种情况
1. JS数组的常用方法- 增: push() unshift() splice() concat()- 删: pop() shift() splice() slice(不改变原数组)- 改: splice()- 查: indexOf() includes() find()2. 排序- sort() - reverse()3. 转换- join()4. 迭代- forEach…...

DolphinScheduler
序言整理下DolphinScheduler的使用参考资料:https://dolphinscheduler.apache.org/zh-cn/docs/3.1.4 --官网文档简介Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期…...

【Java (一:12-2) 反射】
Java反射机制一、反射1.反射的概念2.获取class对象3. 获取Constructor对象4. 利用Constructor创建对象5.反射获取构造方法流程6.反射获取成员方法流程7.反射获取成员对象8.利用Field赋值和获取值9.获取method对象10.利用method对象运行方法一、反射 1.反射的概念 灵活调用 …...

ESP8266-NodeMCU开发板-------网络知识(2)
目录 TCP/IP协议簇 链路层 网络层与IP协议 IPv4 / IPv6 子网掩码(Subnet Mask) MAC地址和ARP 传输层 应用层 HTTP协议 HTTP请求 HTTP响应 DNS(Domain Name System/域名系统) TCP/IP协议簇 在网络系统中,为了保证通信设备之间能正确地进行通信…...

设计模式(二十六)----行为型模式之备忘录模式
1 概述 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原,很多软件都提供了撤销(Undo)操作&…...

前端利用js里数组的filter方法进行多条件过滤查询
需求:用户在输入框输入多个条件时,可以对表格数据进行过滤查询,无需后端接口处理,利用了前端js里数组的filter方法进行过滤。 如下是效果图: 当用户在姓名的输入框里输入"张"后效果如下: 当用户…...

DCDC--开关频率的选择
开关稳压器IC使用的开关频率从数十kHz到数MHz,最近有些甚至似乎以高频率工作。 1、重视效率或重视尺寸 如果将开关频率调高,则外置的电感和电容器将使用较小的,尺寸必然会变小。因此,包含安装面积和高度在内的外形尺寸也会变小&…...

【华为OD机试 2023最新 】 开放日活动、取出尽量少的球(C++)
题目描述 某部门开展Family Day开放日活动,其中有个从桶里取球的游戏,游戏规则如下: 有N个容量一样的小桶等距排开, 且每个小桶都默认装了数量不等的小球, 每个小桶装的小球数量记录在数组 bucketBallNums 中, 游戏开始时,要求所有桶的小球总数不能超过SUM, 如果…...

JavaScript学习笔记(9.6)
JSON JSON是Javascript对象标记法 JSON是一种轻量级的数据交换格式 JSON具有自我描述且易于理解 为什么使用JSON:因为JSON格式仅仅是文本,它能够轻松地在服务器浏览器之间传输,并用作任何编程语言的数据格式。 JavaScript提供内建函数把…...

Profinet协议下,MCGS触摸屏能否无线连接PLC?
一、方案概述 本方案以MCGS触摸屏和2台西门子S7-1200为例,介绍触摸屏与多台 PLC的无线Profinet通信实现过程。在本方案中采用了西门子PLC无线通讯终端DTD418M,作为实现无线通讯的硬件设备。 本方案中,用户无需更改网络参数和原有程序&#…...

小白开发微信小程序20--web api文档制作
1、什么是SwaggerSwagger 项目已于 2015 年捐赠给 OpenAPI 计划,自此它被称为 OpenAPI。 这两个名称可互换使用。 不过,“OpenAPI”指的是规范。 “Swagger”指的是来自使用 OpenAPI 规范的 SmartBear 的开放源代码和商业产品系列。简而言之:…...

审核通过≠报名成功,每年都有朋友因这个细节,报名失败
2023上半年软考已经开放报名啦~ 特别提醒:不是提交报考资料后就算报名成功!软考报考流程:提交报考资料→审核通过(一般需要1-3个工作日)→缴费成功→报名成功! 首次报名软考的同学可能很容易忽…...

进销存是什么?如何选择进销存系统?
什么是进销存?进销存软件概念起源于上世纪80年代,由于电算化的普及,计算机管理的推广,不少企业对于仓库货品的进货,存货,出货管理,有了强烈的需求,进销存软件的发展从此开始。 进入…...

【LeetCode】剑指 Offer 30. 包含min函数的栈 p165 -- Java Version
题目链接:https://leetcode.cn/problems/bao-han-minhan-shu-de-zhan-lcof/ 1. 题目介绍(30. 包含min函数的栈) 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 p…...

电路基础(4) 电阻电路的一般分析
1.电路的图将上面的电路图,抛开其中元器件的性质,可以提取出“只有线和结点的图”。如果考虑电流等的流向,则可以变化位“有向图”。 提取的有向图少了8那条支路,是因为把元件的并联组合也作为一条支路了。 提取的有向图少了7那条…...

安卓拍照、裁切、选取图片实践
安卓拍照、裁切、选取图片实践 前言 最近项目里面有用到裁切功能,没弄多复杂,就是系统自带的,顺便就总结了一下系统拍照、裁切、选取的使用。网上的资料说实话真是没什么营养,但是Android官网上的说明也有点太简单了,…...

tcpdump命令参数说明和使用实例、linux解析公网地址会卡顿一下解决方法
文章目录tcpdumptcpdump的参数选项基本返回值查看基本用法抓取指定网络接口的所有流量抓取指定网络接口指定主机地址【IP/域名】的所有流量只取出端口 3333 的联机数据包获取指定协议的数据包【如udp】在网口eth1上抓取源端口为80且目的端口为6100的数据包进阶用法【关系运算符…...

HBuilderx快捷键大全(2023)
文章目录1. 项目管理器2. 标签卡3. 文件4. 行操作5. 删除6. 列表符操作7. 剪贴板8. 撤销9. 语言10. 包围11. 选择12. 查找13. 跳转14. 视图15. 运行16. 鼠标配合快捷键17. 其他高效极客技巧1. 项目管理器 操作名称快捷键重命名文件(焦点在项目管理器中)…...

Queue-基于redis的队列
接上文:RBucket对象桶 -> Redisson系列-1(让redis操作更优雅)_子书少卿的博客-CSDN博客 (Queue) 结构的 RQueue Java对象实现了 java.util.queue 接口。尽管 Roueue 对象无初始大小 (边界)限制,但对象的最大容量受Red…...

prometheus03-如何导出prometheus指标
Prometheus是一个开源的监控系统和时间序列数据库,用于收集和存储服务的指标数据。要导出Prometheus指标,你需要使用或实现一个Prometheus Exporter。以下是一个简单的指南,分为三个主要步骤: 选择或实现Prometheus Exporter Pr…...

Pikachu靶场之XXE漏洞
Pikachu靶场之XXE漏洞一、XML和XXE的区别二、解题1.1 前提1.2 使用代码进行文件读取1.3 内网探针或攻击内网应用1.4 RCE1.5 无回显读取文件1.6 xxe绕过一、XML和XXE的区别 XML是传递数据的一种格式,而XXE是XML传递数据过程中产生的一种漏洞,两者是完全不…...

npm发布包教程(四):迭代
一个npm包发布之后,我们难免会修改一些bug,或者增改一些功能,这就涉及到对npm包的迭代。本篇文章就npm迭代涉及到一些知识点进行介绍。 本次演示以《npm发布包教程(二):发布包》中发布的包为基础。 npm包的…...

Apollo 配置变更原理
我们经常用到apollo的两个特性:1.动态更新配置:apollo可以动态更新Value的值,也可以修改environment的值。2.实时监听配置:实现apollo的监听器ConfigChangeListener,通过onChange方法来实时监听配置变化。你知道apollo…...

C语言实现队列(Push Pop Size Front EmptyBack)
队列是一个重要的数据结构,他的特性是先进先出,所以由于这个特性,队列只有一个入口和一个出口,所以只有push和pop 下面我们看一下他如何实现 首先我们来看一下他的结构体 这里我们看到我们定义了两个结构体,其中一个…...

为什么typeof null得到的是Object而不是null?
为什么typeof null得到的是Object而不是null? 因为JavaScript中不同对象在底层都表示为二进制, 而JavaScript中会把二进制前三位都为0的判断成object类型。 而null的二进制表示全是0,自然前三位也是0....

大数据框架之Hive:第12章 企业级调优
第12章 企业级调优 12.1 计算资源配置 本教程的计算环境为Hive on MR。计算资源的调整主要包括Yarn和MR。 12.1.1 Yarn资源配置 1)Yarn配置说明 需要调整的Yarn参数均与CPU、内存等资源有关,核心配置参数如下 (1)yarn.nodem…...

typescript(元组、枚举、类、泛型)
元组 数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象 // 数组 let arr:number[] [1,2] // 元组 let arr1:[string,number][1,2] // 但是使用联合类型/类型别名 同样可以实现元组的效果 // 区别是元组对每一项进行类型约束 …...

独闯万亿氢能江湖,未势能源显露“双轮动能”
在时代的洪流中,顺势而为的企业往往能更快拿到通往未来的船票。如火如荼的新能源行业,无疑是当下较为强劲的“势”。在最近的两会上,国家强调今年要推动发展方式绿色转型,关于加速新能源发展的提案也成为热门议题。市场中不少企业…...

基于opencv的边缘检测方法
1、梯度运算 用OpenCV的形态变换( 膨胀、腐蚀、开运算和闭运算)函数morphologyEx 梯度运算即膨胀结果-腐蚀结果: 【注意】对于二值图像来说,必须是前景图像为白色,背景为黑色,否则需要进行反二值化处理 …...

RocketMQ支持哪几种类型的消息
一.普通消息 对于普通消息,RocketMQ提供了三种发送方式:同步发送,可靠异步发送和单项发送。 1.同步发送 可靠同步发送指消息发送方发送数据后,在收到接收方的响应后才会发送下一个消息。 2.异步发送 可靠异步发送指发送方发出消息后,不等待接收方响应,接着发送下一个…...

ElasticSearch - SpringBoot整合ES之指定搜索结果返回的字段
文章目录1. 数据准备2. ElasticSearch 搜索结果返回指定的字段3. SpringBoot整合ES 搜索结果返回指定的字段4. 源码接口Elasticsearch的搜索结果可以通过以下参数进行控制:from:指定搜索结果的起始位置,默认为0。 size:指定返回的…...

arcpy基础篇(5)-使用栅格数据
栅格数据是一个独特的空间数据类型。ArcPy中有一个名为arcpy.sa的空间分析模块,该模块将地图代数全部整合到Python环境中,从而提高了脚本运行效率 1.列出栅格要素 ListRaster函数是以Python列表的形式返回工作空间中的栅格要素,该函数语法如…...

2023最全最牛的Jmeter接口测试教程及接口测试详情,你不知道的东西太多了!
下边是详细的jmeter接口测试入门到精通的详细教程,还有视频版本教您实战操作! 2023年B站最新Jmeter接口测试实战教程,精通接口自动化测试只需要这一套视频_哔哩哔哩_bilibili2023年B站最新Jmeter接口测试实战教程,精通接口自动化…...

redis 存储一个map 怎么让map中其中一个值设置过期时间,而不是过期掉整个map?
文章目录 redis 存储一个map 怎么让map中其中一个值设置过期时间,而不是过期掉整个map?Java 中 怎么 实现?方案一: Jedis方案二: Lettuce方案三: Redisson方案四: Jedisson方案五: RedisTemplate那种方式 效率最高 ?拓展:结语redis 存储一个map 怎么让map中其中一个值设置过…...

10、CLASSIFIER-FREE DIFFUSION GUIDANCE
简介 论文:https://arxiv.org/pdf/2207.12598.pdf 分类器指导将扩散模型的得分估计与图像分类器的梯度相结合,因此需要训练与扩散模型分开的图像分类器。 实验证明,在没有分类器的情况下,指导确实可以由纯生成模型执行 在无分…...

软件测试金三银四快速入职之如何解决HR已读不会的问题?
目录 前言 一、简历到面试分两个阶段 二、重视简历 三、简历优化 四、工作经历 五、项目经验 六、自我评价荣誉, 前言 金三银四现在正是很多人在面试找工作的时候,很多人在面试的时候都会遇到Hr已读不会的问题。今天就主要来讲一下如何解决下面几个问题&…...

开发人员项目开发的步骤
开发人员项目开发的步骤 前言 项目开发目的分析与确定 在开发商将开发项目确定下来之后,需要与需求方进行讨论,确定需求方对于软件开发需要实现的目标及其具体需要的功能等等,并进行可⾏性分析(技术、成本、法律法规)…...

Linux 终端、进程组、会话、守护进程
文章目录一、终端概念终端概念控制终端二、进程组概念进程组概述进程组相关 API会话会话概念会话相关 API创建会话注意事项守护进程守护进程介绍守护进程模型守护进程参考代码守护进程相关 API参考文章一、终端概念 终端概念 1、终端(Terminal) 终端是…...

【MySQL高级篇】第7章_InnoDB数据存储结构
第7章_InnoDB数据存储结构 1. 数据库的存储结构:页 1.1 磁盘与内存交互基本单位:页 1.2 页结构概述 1.3 页的大小 不同的数据库管理系统(简称DBMS)的页大小不同。比如在 MySQL 的 InnoDB 存储引擎中,默认页的大小是 …...

工具篇 | 10 | 抓包工具
1 前期准备 作为测试开发,为什么要使用抓包工具呢,因在调试过程中,会碰到一些问题,不确定是前端的问题,还是后端的问题,就需要通过一种工具来检测,数据的流转,如web界面或者客户端操作,点击了一个按钮或者浏览一个页面,调用了那些接口,那些参数,请求参数,返回结果…...

Notes04:GPIO功能框图详解
GPIO功能框图详解野火霸道开发板学习笔记信息说明GPIO功能框图输出部分推挽输出推挽输出模型分析推挽输出总结开漏输出开漏输出模型分析开漏输出总结输出数据寄存器(ODR)位设置清除寄存器(BSRR)位清除寄存器(BRR)输入部分输入数据寄存器(IDR)TTL肖特基触发器部分模型分析上拉/下…...

2023系统分析师---系统规划
一、系统规划的步骤 初步调查:根据企业战略目标,分析企业现状以及系统运行状况确定系统目标:确定系统的服务范围质量等分析子系统的组成:系统划分并指定子系统功能拟定系统的实施方案:分析子系统优先级,确…...

Leetcode.1814 统计一个数组中好对子的数目
题目链接 Leetcode.1814 统计一个数组中好对子的数目 Rating : 1738 题目描述 给你一个数组 nums,数组中只包含非负整数。定义 rev(x)的值为将整数 x各个数字位反转得到的结果。比方说 rev(123) 321, rev(120) 21。我们称满足下面条件的下…...