由于业务需要,在上个月做了一个关于qt的设计,在设计中主要需要解决的问题就是接收单片机采集到的数据并在上位机将数字实时的通过波形显示出来,然后上位机要有保存下数据文件的功能,便于后续的软件读取数据做进一步的分析处理
QT第一步:安装软件环境
安装qt5.14,可以在这个网站下载安装包。 下载版本: qt-opensource-windows-x86-5.14.2.exe
安装时需要勾选MinGW 相关选项
安装教程不在重复赘述,网上有很多的例子
第二步:初始QT
qt作为一种开源的UI程序设计框架可以便捷的通过qt提供的各种组件以低代码的方式组件自己需要的ui界面,这对于初步入门的设计人员十分的友好,同时qt官方对每个类、方法、变量的文档说明都非常详细并且提供了实例代码入门非常简单。 安装好qt后直接使用qt官方的Qt Creator程序进行开发,当然你可以使用MSVS进行开发,这还需要在MSVC中安装一下qt的官方插件。我使用的是VS2019+qt5.14.2,在UI设计界面上VS和qt还存在一定的兼容性问题,有好多次出现闪退的问题。所以工程不是特别大的时候还是建议老老实实就用Qt Creator进行开发。 安装好后可以看到qt提供很多的模板程序,当然也可以都不使用,直接从空白模板开始我们的工程
第三步:了解信号与槽机制
Qt利用信号与槽(signals/slots)机制取代传统的callback来进行对象之间的沟通。当操作事件发生的时候,对象会发提交一个信号(signal);而槽(slot)则是一个函数接受特定信号并且执行槽本身设置的动作。信号与槽之间,则透过QObject的静态方法connect来链接。 信号在任何执行点上皆可发射,甚至可以在槽里再发射另一个信号,信号与槽的链接不限定为一对一的链接,一个信号可以链接到多个槽或多个信号链接到同一个槽,甚至信号也可连接到信号。 以往的callback缺乏类型安全,在调用处理函数时,无法确定是传递正确类型的参数。但信号和其接受的槽之间传递的资料类型必须要相符合,否则编译器会提出警告。信号和槽可接受任何数量、任何类型的参数,所以信号与槽机制是完全类型安全。
信号与槽机制也确保了低耦合性,发送信号的类别并不知道是哪个槽会接受,也就是说一个信号可以调用所有可用的槽。此机制会确保当在"连接"信号和槽时,槽会接受信号的参数并且正确执行。
上面的解释来自维基百科,说的简单点呢就是说:当你在qt界面中放置了一个按钮,当你运行程序并移动鼠标点击这个按钮的时候。点击按钮这个动作就是一个信号,当然有了信号我们就要执行命令,我们通过软件定义将这个信号连接上一个槽,这个槽函数执行点击动作所需要的对行功能。信号与槽可以是一一对应也可以是一对多、多对一。 在这里我们可以看到:
QObject::connect(ui->button, SIGNAL(clicked()), this, SLOT(senddata()));
上面这个函数就是一个槽函数,他把button按钮的点击信号链接到了发送数据的响应函数上,只要鼠标点击一次就会发送一次。
在qt中每一个对象都有对应的属性,这些属性的值就对应了这个对象的大小,相对位置,名称等等。
在使用qt时也可以选择pyqt,其中也同样拥有界面设计的功能,但以下的程序默认针对c++版本的qt
开始串口助手
这里默认你已经了解了基本的qt操作和c++语法 首先我们需要一个串口类,用来发送和接收数据; 然后我们需要 两个文本框和几个按钮来实现数据的接收和发送,并且设置串口通信的参数; 实现之后我们就需要设置针对串口数据的解析了:
定时接收串口数据
由于对电脑端接收数据很难做到硬件级的收中断,收到1bit数据就中断处理一次所以我们设置一个定时器,让程序检测当有数据来时就打开定时器开始定时,定时一段时间后关闭中断并接收保存这段时间内的所有数据。 这一段时间根据串口发送一帧数据的时间做合理设置,一般来时这个时候收到的数据里包含着好几帧完整的数据,整段数据的头和尾可能并不是我们设置的帧头和帧尾,所以我们需要从中解析出需要的数据: 这里我使用了关键字索引,从接收到的字符串中查找到第一个我设置的帧头数据,然后从这个位置开始向后继续检索第一个我设置的帧尾,如果帧长度满足要求则把这一段字符串从中提取出来做单独处理:
//串口接收数据帧格式为:帧头'*' 帧尾'#' 数字间间隔符号',' 符号全为英文格式
void Widget::Read_Date()
{
int bufferlens = 0; //帧长
QString str = ui->Receive_text_window->toPlainText();
timerserial->stop();//停止定时器,
qDebug()<Receive_text_window->clear();
ui->Receive_text_window->append(str);
}
else
{
str+="error! ";
str+=tr(buffercashe);
str += " ";
ui->Receive_text_window->clear();
ui->Receive_text_window->append(str);
}
buffer.clear();
}
void Widget::serial_timerstart()
{
timerserial->start(4);
buffer.append(serialport->readAll());
}
在上面的程序中,当串口发现有数据进来则引用Widget::serial_timerstart()
开始定时接收。当定时到之后开始处理接收到的数据。如果数据正常后则把数据保存到缓冲区并更新当前的波形数据。
波形显示
这里显示模型数据使用了很简单的QChart()实例,定义QSplineSeries()对象,然后不断的更新QSplineSeries对象的数据列表,做好坐标轴的处理后就可以实现出动态曲线的效果了。
//曲线设置初始化
void Widget::Chart_Init()
{
//初始化QChart的实例
chart = new QChart();
//初始化QSplineSeries的实例
lineSeries = new QSplineSeries();
//设置曲线的名称
lineSeries->setName("曲线1");
//把曲线添加到QChart的实例chart中
chart->addSeries(lineSeries);
//声明并初始化X轴、两个Y轴
QValueAxis *axisX = new QValueAxis();
QValueAxis *axisY = new QValueAxis();
//设置坐标轴显示的范围
axisX->setMin(0);
axisX->setMax(MAX_X);
axisY->setMin(0);
axisY->setMax(MAX_Y);
//设置坐标轴上的格点
axisX->setTickCount(10);
axisY->setTickCount(10);
//设置坐标轴显示的名称
QFont font("Microsoft YaHei",8,QFont::Normal);//微软雅黑。字体大小8
axisX->setTitleFont(font);
axisY->setTitleFont(font);
axisX->setTitleText("X-时间");
axisY->setTitleText("Y-角度");
//设置网格不显示
axisY->setGridLineVisible(false);
//下方:Qt::AlignBottom,左边:Qt::AlignLeft
//右边:Qt::AlignRight,上方:Qt::AlignTop
chart->addAxis(axisX, Qt::AlignBottom);
chart->addAxis(axisY, Qt::AlignLeft);
//把曲线关联到坐标轴
lineSeries->attachAxis(axisX);
lineSeries->attachAxis(axisY);
//把chart显示到窗口上
ui->graphicsView->setChart(chart);
ui->graphicsView->setRenderHint(QPainter::Antialiasing); // 设置渲染:抗锯齿,如果不设置那么曲线就显得不平滑
}
//更新曲线函数
void Widget::DrawLine()
{
if(count > MAX_X)
{
//当曲线上最早的点超出X轴的范围时,剔除最早的点,
lineSeries->removePoints(0,lineSeries->count() - MAX_X);
// 更新X轴的范围
chart->axisX()->setMin(count - MAX_X);
chart->axisX()->setMax(count);
}
else{
chart->axisX()->setMin(0);
chart->axisX()->setMax(MAX_X);
}
//增加新的点到曲线末端
lineSeries->append(count, (int)Data.Sensor_1);
count ++;
}
文件保存
首先是说明下csv文件的写入格式:以逗号作为分隔符,\n
作为换行符。
那么就可以先写入一个表头,然后根据格式从缓存好的数据容器中逐条加载后逐行写入并打上时间戳。 下面的代码举例我们要保存的数据是五通道的。
/*
函 数:SaveRecvDataFile
描 述:保存数据按钮点击槽函数
输 入:无
输 出:无
*/
void Widget::SaveRecvDataFile()
{
if(m_data.size()<1)
{
QMessageBox::information(this, "提示","当前数据为空");
return;
}
serialport->clear(); //清空缓存区
serialport->close(); //关闭串口
timerDrawLine->stop(); //关闭波形刷新
ui->send_button->setEnabled(false); //禁用部分按键
ui->open_port->setEnabled(true);
ui->close_port->setEnabled(false);
ui->save_data->setEnabled(false);
QString csvFile = QFileDialog::getExistingDirectory(this); //获取文件保存路径
if(csvFile.isEmpty())
return;
QDateTime current_date_time =QDateTime::currentDateTime(); //获取系统时间
QString current_date =current_date_time.toString("MM_dd_hh_mm"); //获取时间字符串
csvFile += tr("/%1.csv").arg(current_date);
qDebug()<< csvFile;
QFile file(csvFile);
if ( file.exists())
{
//如果文件存在执行的操作,此处为空,因为文件不可能存在
}
file.open( QIODevice::ReadWrite | QIODevice::Text ); //以读写模式读取文件
QTextStream out(&file);
out<().swap(m_data); //清空缓存区数据
QMessageBox::information(this, "提示","数据保存成功");
}
好的,那我们基本实现了最初的三个功能,下面附上一张完整效果的演示截图:
完整源码将在项目结束后公开在博客里,有需要的话可以点个关注哦
下次离开还是先见一面吧,即使什么也不说
你可能感兴趣的:(奇怪的知识增加了,嵌入式,qt,开发语言,学习)
【LeetCode】第19题——删除链表的倒数第 N 个结点(难度:中等)
Se7en_Dayz
LeetCode题解 leetcode java 双指针
【LeetCode】第19题——删除链表的倒数第N个结点(难度:中等)题目描述解题思路代码详解注意点题目描述给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例1:输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]示例2:输入:head=[1],n=1输出:[]示例3:输入:head=[1,2],n=1输出:[1]提示:链表中结点
机器学些|实战?
dami_king
随笔 机器学习
机器学习实战:从零到%1…今天聊聊机器学习(MachineLearning,ML),这个听起来高大上的技术其实并没有那么神秘。跟着我的节奏,咱们一起来探索一下如何从零开始!准备工作:安装和导入必要的库在开始我们的房价预测项目之前,我们需要准备好开发环境并导入所有必要的库。这些库将帮助我们处理数据、构建模型、评估性能以及可视化结果。安装Python和JupyterNotebook首先,确保你已经安装
Windows Opencl clSetKernelArg()函数
万能的小裴同学
GPU opencl C++ windows c++ opencl
WindowsOpenclclSetKernelArg()函数详细解析SettingKernelArguments函数原型cl_intclSetKernelArg(cl_kernelkernel,cl_uintarg_index,size_targ_size,constvoid*arg_value)clSetKernelArg()用于为内核的特定参数设置参数值。kernel是一个有效的内核对象。a
前端布局的方式有哪些
IT木昜
大白话前端面试题 前端
前端布局的方式有哪些在前端开发里,布局就像是装修房子,把不同的东西合理地摆放在合适的位置,让整个空间既美观又实用。下面给你介绍几种常见的前端布局方式:1.普通流布局(标准文档流布局)这就像是按顺序往书架上摆书,一本挨着一本,从左到右,从上到下依次排列。在网页里,元素默认就是按照这种方式排列的。比如段落、标题这些元素,一个接一个地显示在页面上。块级元素(像、等)会独占一行,就像大本书会占一整层书架;
Java数组详解:初始化、操作与优化
微赚淘客系统@聚娃科技
java windows
Java数组详解:初始化、操作与优化大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!数组初始化在Java中,数组是一种数据结构,用于存储相同类型的元素。数组可以是基本数据类型的数组,也可以是对象的数组。初始化数组是使用数组之前的必要步骤。以下是不同类型数组的初始化方法:一维数组一维数组用于存储一组相同类型的元素。例如,存储整数的一维数组:publicclassArra
Mybatis 的插件,环境配置,映射器
or77iu_N
MyBatis mybatis java
1、插件(plugins)MyBatis允许你在映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis允许使用插件来拦截的方法调用包括:Executor(update,query,flushStatements,commit,rollback,getTransaction,close,isClosed)ParameterHandler(getParameterObject,setPar
MyBatis-Plus分页查询
pan_junbiao
MyBatis-Plus 我の原创 java 数据库 开发语言
在实际开发中,对于大量数据的查询,可以通过分页查询的方式来减少查询量和提高查询效率。在MyBatis-Plus中,分页查询可以通过使用Page对象和IService接口提供的分页方法来实现。MyBatis-Plus的分页插件PaginationInnerInterceptor提供了强大的分页功能,支持多种数据库,使得分页查询变得简单高效。官方文档:《MyBatis-Plus分页插件》Page类的说
面试官:谈谈RabbitMQ的队头阻塞问题?
java
RabbitMQ延迟消息的队头阻塞问题是指,在使用死信队列(DLX)和TTL(消息过期时间)实现延迟消息时,由于队列的先进先出(FIFO)特性,在队列头部消息未过期的情况下,即使后续消息已经过期也不能及时处理的情况。实现原理RabbitMQ延迟消息的实现方式有以下两种:死信队列+TTL。使用rabbitmq-delayed-message-exchange插件。而我们本文要讨论的“RabbitMQ
如何制定完美的项目执行计划?项目执行计划包含内容
项目管理
项目执行计划是项目管理中至关重要的一环,它为项目的顺利实施提供了清晰的路线图和指导方针。一个完善的项目执行计划包含内容广泛,涵盖了项目的各个方面,确保项目团队能够协调一致地朝着共同目标前进。本文将详细探讨项目执行计划的核心要素,帮助项目经理和团队成员制定出高效、可行的执行策略。项目目标和范围定义项目执行计划的首要内容是明确项目的目标和范围。这一部分应该包括项目的总体目标、具体可交付成果以及项目边界
Spring Boot集成Spring MVC:快速搭建Web应用
软件职业规划
spring spring spring boot mvc
在SpringBoot项目中集成SpringMVC是一个非常常见的需求。SpringBoot已经内置了对SpringMVC的支持,因此集成过程相对简单。1.创建SpringBoot项目你可以通过以下方式创建一个SpringBoot项目:使用SpringInitializr(start.spring.io)在线生成项目。使用IDE(如IntelliJIDEA或Eclipse)的SpringBoot插
HarmonyOS Next智能家居控制系统的模型轻量化实践
harmonyos
本文旨在深入探讨基于华为鸿蒙HarmonyOSNext系统(截止目前API12)在智能家居控制系统中模型轻量化技术的实践应用,基于实际开发经验进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、智能家居控制需求与模型轻量化架构搭建(一)常见需求分析设备状态识别需求智能家居控制系统需要准确识别各种智能设
HarmonyOS Next智能驾驶辅助系统的模型轻量化应用
harmonyos
本文旨在深入探讨基于华为鸿蒙HarmonyOSNext系统(截止目前API12)在智能驾驶辅助系统中模型轻量化技术的应用,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、智能驾驶场景与模型轻量化策略规划(一)关键场景分析车道线检测场景车道线检测是智能驾驶辅助系统的基础功能之一,对于
HarmonyOS Next智能安防系统中的模型轻量化实战
harmonyos
本文旨在深入探讨基于华为鸿蒙HarmonyOSNext系统(截止目前API12)构建智能安防系统中的模型轻量化技术实践,基于实际开发经验进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、智能安防系统需求与模型轻量化方案设计(一)功能需求分析目标检测需求在智能安防系统中,目标检测是核心功能之一。它需要
KubeSphere 产品生命周期管理政策公告正式发布!
云计算
亲爱的KubeSphere用户:在云原生技术飞速发展的今天,KubeSphere始终以技术创新和用户价值为核心,持续优化产品与服务。为更好地服务全球用户、保障业务连续性,基于多年的技术积累与用户反馈,我们正式对外公开发布《KubeSphere产品生命周期管理政策》。通过清晰的支持策略与版本管理,助力用户高效规划升级,规避潜在风险,实现业务可持续发展。KubeSphere产品生命周期管理政策公告文件
挑战分库分表后实现跨分页查询
java
想象你有一个图书馆(单库单表),所有书按顺序放在书架上。当你要找第100-110本书时,直接数到第100本就能拿到。但图书馆的书爆炸式增长后,馆长决定:分库:把书分到10个房间(10个数据库)分表:每个房间再分成20个书架(20张表)每个书架只放特定规则的书(比如按ID取模:ID%200)问题来了:当用户要求「按时间倒序排列,显示第1000-1010条数据」时:每个房间的书架都是独立排序的无法直接
YashanDB表介绍
数据库
本文内容来自YashanDB官网,原文内容请见https://doc.yashandb.com/yashandb/23.3/zh/%E6%A6%82%E5%BF%B5%...在关系型数据库中一个表就是一个关系(Relation),一个关系数据库可以包含多个表。表是一种按行、列排列的具有相关信息的逻辑结构,是关系数据库中组织数据的基本单元。表的元素列数据库中表包含若干个列(或字段),列表示关系模型的
DeepSeek的训练与优化流程
程序猿000001号
DeepSeek 训练 优化
DeepSeek的训练与优化流程一、数据工程体系1.多模态数据融合处理动态数据湖架构:实时摄入互联网文本、科学论文、专利文献、传感器数据等20+数据源日均处理原始数据量达1.2PB,支持200+文件格式自动解析智能清洗流水线:基于大模型的语义去重算法,重复数据识别准确率99.6%创新应用对抗网络生成噪声数据,增强模型鲁棒性专利级数据质量评估体系(DQAS3.0)包含87个质量维度2.知识增强处理结
YashanDB应用程序与网络体系
数据库
本文内容来自YashanDB官网,原文内容请见https://doc.yashandb.com/yashandb/23.3/zh/%E6%A6%82%E5%BF%B5%...#程序接口程序接口是应用程序与数据库的必要纽带,是数据库提供给数据库应用程序使用的,可以访问操作数据库的软件层。程序接口具备以下能力:简化数据库操作,通过简单的函数调用完成复杂的数据库操作。跨机器访问,能解决不同机器间数据格式
2025全新一代PHP游戏代练系统源码发布|好用的代练订单管理系统
vue.jsphpmysql
在这里不仅可以找代练,还能成为打手当代练,同时软件中拥有一流的大神、专业的客服团队、高效的代练模式,致力为用户提供优质、高效、快捷、安全的代练服务,并且软件不仅能为您量身打造定制代练需求,还会为您包胜率解决源码获取地址!!!!!源码传送门!!!!此类系统允许用户注册账号、下单委托游戏任务、查看代练进度以及完成任务后的评价等。该系统兼容手机端,提供了良好的用户体验。PHP网站开发基础:PHP是一种广
Dubbo
java
Dubbo是一个高性能的分布式服务框架,提供了多种调用策略来优化服务调用的性能和可靠性。一、负载均衡策略:随机(Random):随机选择一个服务提供者进行调用,适合动态调整权重的场景。轮询(RoundRobin):按顺序依次选择服务提供者,适合请求分布均匀的场景,但可能存在请求累积的问题。最少活跃调用(LeastActive):选择当前活跃调用数最少的服务提供者,适合解决慢提供者接收更少请求的场景
【Java实现数组的插入优化】
长安归故里♬
java 算法 开发语言
头插,尾插的插入效率在之前的插入中是【直接让currentIndex++我们在填入数据】现在我们把他们分为头插和尾插和中间插入中间插入:【在插入index的位置以后移动一位然后在index的位置中插入我们的数据】publicvoidadd(intdata,intindex){//是否扩容currentIndex++;if(currentIndex>nums.length-2){inttager[]
DeepSeek行业应用实践报告100+份汇总解读|附PDF下载
数据挖掘深度学习机器学习算法
原文链接:https://tecdat.cn/?p=40240在当下快速发展的科技浪潮中,人工智能(AI)已成为推动各行业变革的核心力量。AI大模型的出现,更是为众多领域带来了全新的发展机遇与挑战。本报告聚焦于AI大模型中的佼佼者——DeepSeek,通过深度剖析其技术特性、应用场景、市场表现以及未来趋势,为读者呈现一个全面且深入的AI行业发展图景。本报告汇总洞察基于文末157份DeepSeek行
HTML CSS整理笔记(建议收藏)
程序员的生活1
js web前端 html+css css javascript html css3
点击链接后退页面:回到上一个网页——修改placeholder提示的样式:打造全网web前端全栈资料库(总目录)看完学的更快,掌握的更加牢固,你值得拥有(持续更新)1.除IE外通用写法类名或标签名::placeholder{color:red;}2.加兼容前缀写法css超出一行显示省略号:给定宽度(width:100px)、超出隐藏(overflow:hidden)、强制在同一行显示(white-
一些我不知道的HTML前端基础知识笔记
han1140521792
学习资料 HTML5 CSS JavaScript
点击链接后退页面:回到上一个网页——修改placeholder提示的样式:1.除IE外通用写法类名或标签名::placeholder{color:red;}2.加兼容前缀写法css超出一行显示省略号:给定宽度(width:100px)、超出隐藏(overflow:hidden)、强制在同一行显示(white-space:nowrap)、省略号(text-overflow:ellipsis)——常见
使用python对url编码解码 (转)
woodcol
Python
写cgi经常碰到的一个问题就是对url进行编码和解码,python提供了很方便的接口进行调用。url中的query带有特殊字符(不是url的保留字)时需要进行编码。当url中带有汉字时,需要特殊的处理才能正确编码,以下都只针对这种情形,当然也适用于纯英文字符的url。(1)url编码:importurlliburl='http://test.com/s?wd=哈哈'url=url.decode('
如何用示波器的FFT计算功能抓取电机驱动DS两极间的辐射干扰源
Xyc0317_
硬件 EMC 单片机 嵌入式硬件
1.硬件连接与准备探头选择:使用高带宽探头(至少为信号最高频率的3倍,例如1GHz探头用于300MHz干扰)。接地方式:采用探头接地弹簧而非长接地夹,缩短接地回路,减少引入噪声。差分测量(可选):若干扰为共模噪声,建议使用差分探头直接测量DS两极间电压。接线要点:尽量缩短探头与被测点的距离,避免环路天线效应。确保电机驱动电路处于正常工作状态(如PWM信号开启)。2.示波器参数设置(以泰克MSO5/
136道Vue面试八股文(答案、分析和深入提问)整理
守护海洋的猫
vue.js 面试 javascript 前端 ecmascript
1.简述mixin、extends的覆盖逻辑回答在Vue中,mixins和extends是用来实现代码复用的两种方式,但它们在覆盖逻辑上有一些细微的区别。1.Mixin当你使用mixins的时候,可以将多个功能组合在一起。Mixins的内容会与组件中的数据、方法、生命周期钩子等进行合并。数据:Mixin中的数据会与组件中的数据合并。如果两个数据属性同名,则组件的数据属性会覆盖mixin中的属性。方
第三章:组件开发实战 - 第五节 - Tailwind CSS 响应式导航栏实现
qianmoQ
Tailwind CSS:现代化开发实战指南 css 前端
导航栏是几乎所有网站都必备的组件,一个好的响应式导航栏需要在不同设备上都能提供出色的用户体验。本节将介绍如何使用TailwindCSS实现功能完善的响应式导航栏。基础导航栏结构桌面端导航<divclass
Error 和Exception 有什么区别?
欣欣爱吃香菜
java
Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;Exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。
python中的URLEncode和Base64编码:技术详解与应用
小宇python
python python基础 爬虫 python 服务器 linux
URLEncode编码1.定义与目的URLEncode(百分比编码)是一种编码机制,用于在URI(统一资源标识符)中嵌入特定字符。由于URL中只允许包含一定范围内的字符,URLEncode用于将非法字符转换为合法字符,以便在URL中安全传输。2.编码规则URLEncode将非字母数字字符(排除-,_,.,!,~,*,+,@等字符)转换为%后跟两位十六进制数的形式。例如,空格字符(ASCII码为32
数据采集高并发的架构应用
3golden
.net
问题的出发点:
最近公司为了发展需要,要扩大对用户的信息采集,每个用户的采集量估计约2W。如果用户量增加的话,将会大量照成采集量成3W倍的增长,但是又要满足日常业务需要,特别是指令要及时得到响应的频率次数远大于预期。
&n
不停止 MySQL 服务增加从库的两种方式
brotherlamp
linux linux视频 linux资料 linux教程 linux自学
现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库。前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作。
一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长。另一种是通过xtrabacku
Quartz——SimpleTrigger触发器
eksliang
SimpleTrigger TriggerUtils quartz
转载请出自出处:http://eksliang.iteye.com/blog/2208166 一.概述
SimpleTrigger触发器,当且仅需触发一次或者以固定时间间隔周期触发执行;
二.SimpleTrigger的构造函数
SimpleTrigger(String name, String group):通过该构造函数指定Trigger所属组和名称;
Simpl
Informatica应用(1)
18289753290
sql workflow lookup 组件 Informatica
1.如果要在workflow中调用shell脚本有一个command组件,在里面设置shell的路径;调度wf可以右键出现schedule,现在用的是HP的tidal调度wf的执行。
2.designer里面的router类似于SSIS中的broadcast(多播组件);Reset_Workflow_Var:参数重置 (比如说我这个参数初始是1在workflow跑得过程中变成了3我要在结束时还要
python 获取图片验证码中文字
酷的飞上天空
python
根据现成的开源项目 http://code.google.com/p/pytesser/改写
在window上用easy_install安装不上 看了下源码发现代码很少 于是就想自己改写一下
添加支持网络图片的直接解析
#coding:utf-8
#import sys
#reload(sys)
#sys.s
AJAX
永夜-极光
Ajax
1.AJAX功能:动态更新页面,减少流量消耗,减轻服务器负担
2.代码结构:
<html>
<head>
<script type="text/javascript">
function loadXMLDoc()
{
.... AJAX script goes here ...
创业OR读研
随便小屋
创业
现在研一,有种想创业的想法,不知道该不该去实施。因为对于的我情况这两者是矛盾的,可能就是鱼与熊掌不能兼得。
研一的生活刚刚过去两个月,我们学校主要的是
需求做得好与坏直接关系着程序员生活质量
aijuans
IT 生活
这个故事还得从去年换工作的事情说起,由于自己不太喜欢第一家公司的环境我选择了换一份工作。去年九月份我入职现在的这家公司,专门从事金融业内软件的开发。十一月份我们整个项目组前往北京做现场开发,从此苦逼的日子开始了。
系统背景:五月份就有同事前往甲方了解需求一直到6月份,后续几个月也完
如何定义和区分高级软件开发工程师
aoyouzi
在软件开发领域,高级开发工程师通常是指那些编写代码超过 3 年的人。这些人可能会被放到领导的位置,但经常会产生非常糟糕的结果。Matt Briggs 是一名高级开发工程师兼 Scrum 管理员。他认为,单纯使用年限来划分开发人员存在问题,两个同样具有 10 年开发经验的开发人员可能大不相同。近日,他发表了一篇博文,根据开发者所能发挥的作用划分软件开发工程师的成长阶段。
初
Servlet的请求与响应
百合不是茶
servlet get提交 java处理post提交
Servlet是tomcat中的一个重要组成,也是负责客户端和服务端的中介
1,Http的请求方式(get ,post);
客户端的请求一般都会都是Servlet来接受的,在接收之前怎么来确定是那种方式提交的,以及如何反馈,Servlet中有相应的方法, http的get方式 servlet就是都doGet(
web.xml配置详解之listener
bijian1013
java web.xml listener
一.定义
<listener>
<listen-class>com.myapp.MyListener</listen-class>
</listener>
二.作用 该元素用来注册一个监听器类。可以收到事件什么时候发生以及用什么作为响
Web页面性能优化(yahoo技术)
Bill_chen
JavaScript Ajax Web css Yahoo
1.尽可能的减少HTTP请求数 content
2.使用CDN server
3.添加Expires头(或者 Cache-control) server
4.Gzip 组件 server
5.把CSS样式放在页面的上方。 css
6.将脚本放在底部(包括内联的) javascript
7.避免在CSS中使用Expressions css
8.将javascript和css独立成外部文
【MongoDB学习笔记八】MongoDB游标、分页查询、查询结果排序
bit1129
mongodb
游标
游标,简单的说就是一个查询结果的指针。游标作为数据库的一个对象,使用它是包括
声明
打开
循环抓去一定数目的文档直到结果集中的所有文档已经抓取完
关闭游标
游标的基本用法,类似于JDBC的ResultSet(hasNext判断是否抓去完,next移动游标到下一条文档),在获取一个文档集时,可以提供一个类似JDBC的FetchSize
ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
白糖_
ORA-12514
今天通过Oracle SQL*Plus连接远端服务器的时候提示“监听程序当前无法识别连接描述符中请求服务”,遂在网上找到了解决方案:
①打开Oracle服务器安装目录\NETWORK\ADMIN\listener.ora文件,你会看到如下信息:
# listener.ora Network Configuration File: D:\database\Oracle\net
Eclipse 问题 A resource exists with a different case
bozch
eclipse
在使用Eclipse进行开发的时候,出现了如下的问题:
Description Resource Path Location TypeThe project was not built due to "A resource exists with a different case: '/SeenTaoImp_zhV2/bin/seentao'.&
编程之美-小飞的电梯调度算法
bylijinnan
编程之美
public class AptElevator {
/**
* 编程之美 小飞 电梯调度算法
* 在繁忙的时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。
* 所有乘客都从一楼上电梯,到达某层楼后,电梯听下来,所有乘客再从这里爬楼梯到自己的目的层。
* 在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
* 问:电梯停在哪
SQL注入相关概念
chenbowen00
sql Web 安全
SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
首先让我们了解什么时候可能发生SQ
[光与电]光子信号战防御原理
comsci
原理
无论是在战场上,还是在后方,敌人都有可能用光子信号对人体进行控制和攻击,那么采取什么样的防御方法,最简单,最有效呢?
我们这里有几个山寨的办法,可能有些作用,大家如果有兴趣可以去实验一下
根据光
oracle 11g新特性:Pending Statistics
daizj
oracle dbms_stats
oracle 11g新特性:Pending Statistics 转
从11g开始,表与索引的统计信息收集完毕后,可以选择收集的统信息立即发布,也可以选择使新收集的统计信息处于pending状态,待确定处于pending状态的统计信息是安全的,再使处于pending状态的统计信息发布,这样就会避免一些因为收集统计信息立即发布而导致SQL执行计划走错的灾难。
在 11g 之前的版本中,D
快速理解RequireJs
dengkane
jquery requirejs
RequireJs已经流行很久了,我们在项目中也打算使用它。它提供了以下功能:
声明不同js文件之间的依赖
可以按需、并行、延时载入js库
可以让我们的代码以模块化的方式组织
初看起来并不复杂。 在html中引入requirejs
在HTML中,添加这样的 <script> 标签:
<script src="/path/to
C语言学习四流程控制if条件选择、for循环和强制类型转换
dcj3sjt126com
c
# include <stdio.h>
int main(void)
{
int i, j;
scanf("%d %d", &i, &j);
if (i > j)
printf("i大于j\n");
else
printf("i小于j\n");
retu
dictionary的使用要注意
dcj3sjt126com
IO
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
user.user_id , @"id",
user.username , @"username",
Android 中的资源访问(Resource)
finally_m
xml android String drawable color
简单的说,Android中的资源是指非代码部分。例如,在我们的Android程序中要使用一些图片来设置界面,要使用一些音频文件来设置铃声,要使用一些动画来显示特效,要使用一些字符串来显示提示信息。那么,这些图片、音频、动画和字符串等叫做Android中的资源文件。
在Eclipse创建的工程中,我们可以看到res和assets两个文件夹,是用来保存资源文件的,在assets中保存的一般是原生
Spring使用Cache、整合Ehcache
234390216
spring cache ehcache @Cacheable
Spring使用Cache
从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的
当druid遇上oracle blob(clob)
jackyrong
oracle
http://blog.csdn.net/renfufei/article/details/44887371
众所周知,Oracle有很多坑, 所以才有了去IOE。
在使用Druid做数据库连接池后,其实偶尔也会碰到小坑,这就是使用开源项目所必须去填平的。【如果使用不开源的产品,那就不是坑,而是陷阱了,你都不知道怎么去填坑】
用Druid连接池,通过JDBC往Oracle数据库的
easyui datagrid pagination获得分页页码、总页数等信息
ldzyz007
var grid = $('#datagrid');
var options = grid.datagrid('getPager').data("pagination").options;
var curr = options.pageNumber;
var total = options.total;
var max =
浅析awk里的数组
nigelzeng
二维数组 array 数组 awk
awk绝对是文本处理中的神器,它本身也是一门编程语言,还有许多功能本人没有使用到。这篇文章就单单针对awk里的数组来进行讨论,如何利用数组来帮助完成文本分析。
有这么一组数据:
abcd,91#31#2012-12-31 11:24:00
case_a,136#19#2012-12-31 11:24:00
case_a,136#23#2012-12-31 1
搭建 CentOS 6 服务器(6) - TigerVNC
rensanning
centos
安装GNOME桌面环境
# yum groupinstall "X Window System" "Desktop"
安装TigerVNC
# yum -y install tigervnc-server tigervnc
启动VNC服务
# /etc/init.d/vncserver restart
# vncser
Spring 数据库连接整理
tomcat_oracle
spring bean jdbc
1、数据库连接jdbc.properties配置详解 jdbc.url=jdbc:hsqldb:hsql://localhost/xdb jdbc.username=sa jdbc.password= jdbc.driver=不同的数据库厂商驱动,此处不一一列举 接下来,详细配置代码如下:
Spring连接池  
Dom4J解析使用xpath java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常
xp9802
用Dom4J解析xml,以前没注意,今天使用dom4j包解析xml时在xpath使用处报错
异常栈:java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常
导入包 jaxen-1.1-beta-6.jar 解决;
&nb