医药采购系统平台第10天02:按药品分类的统计按供货商统计按医院统计统计数据的导出DWR的配置和应用
如果想要获取相关的源码,笔记,和相关工具,对项目需求的二次开发,可以关注我并私信!!!
一 按药品分类的统计实现
1 按药品分类统计的需求
按药品统计:在指定时间段中采购量、采购金额、入库量、入库金额.................等等,效果图如下:
输入框中的采购时间是指:按照采购单基本信息表的创建时间来统计!
分类统计中需要搞清楚一个问题:分类统计的数据的来源,即:分类统计的原始数据是什么?
统计数据的来源于:交易明细表,在交易明细的基础上进行分类统计。
按药品的分类统计的功能是给医院、供应商、监督单位,这3类角色来使用的,因此sql语句中3个约束条件不能少!
2 dao
2.1 按药品分类统计的查询sql语句
该sql语句的编写是以“交易明细的统计实现”的sql语句为基础,并在其上添加group by分类的条件即可!
按药品分类统计的sql语句之方法一:本系统所使用的sql查询方法(颜色加深加粗为添加的内容)
select business.id, business.bm, business.mc, sum(nvl(business.cgl,0))cgl, sum(nvl(business.cgje,0))cgje, sum(nvl(business.rkl,0))rkl, sum(nvl(business.rkje,0))rkje, sum(nvl(business.thl,0))thl, sum(nvl(business.thje,0))thje, sum(nvl(business.jsl,0))jsl, sum(nvl(business.jsje,0))jsje from ( select useryy.id useryyid, useryy.mc useryymc, yycgd.bm yycgdbm, yycgd.id yycgdid, usergys.id usergysid, usergys.mc usergysmc, yycgdmx.ypxxid, ypxx.id, ypxx.bm, ypxx.mc, ypxx.jx, ypxx.gg, ypxx.zhxs, ypxx.scqymc, ypxx.spmc,
ypxx.jyzt,
(select info from dictinfo where ypxx.jyzt = dictcode and typecode = '003') jyztmc, (select info from dictinfo where typecode = '011' and dictcode = yycgdmx.cgzt) cgztmc, yycgdmx.cgl, yycgdmx.cgje, yycgdmx.rkl, yycgdmx.rkje, yycgdmx.thl, yycgdmx.thje, yycgdmx.jsl, yycgdmx.jsje from yybusiness2018 yycgdmx, yycgd2018 yycgd, useryy, usergys, ypxx where yycgdmx.yycgdid = yycgd.id and yycgd.useryyid = useryy.id and yycgdmx.usergysid = usergys.id and yycgdmx.ypxxid = ypxx.id
--监管单位查询管理地区内医院采购明细信息
and useryy.id in ( --管理地区内医院 select id from useryy where dq like '1.1.%')
--医院查询自己的采购明细信息 and useryy.id = '1f8b098b-067e-11e3-8a3c-0019d2ce5116'
--供货商查询: 与本供货商相关的采购明细信息 and usergys.id = '5197cdd2-08cf-11e3-8a4f-60a44cea4388'
)business
--分类统计之按药品分类统计。思路是:先按照药品的Id(business.id)进行分类统计,统计完之后的结果中如果存在相同的bm(流水号)字段,那么就再按照bm字段进行统计(business.bm)。Mc字段的统计以此类推. group by business.id,business.bm,business.mc |
按药品分类统计的sql语句之方法二(该方法可以自己参考):
select business.*, ypxx.bm, ypxx.mc, ypxx.jx from (select business.id, sum(nvl(business.cgl, 0)) cgl, sum(nvl(business.cgje, 0)) cgje, sum(nvl(business.rkl, 0)) rkl, sum(nvl(business.rkje, 0)) rkje, sum(nvl(business.thl, 0)) thl, sum(nvl(business.thje, 0)) thje, sum(nvl(business.jsl, 0)) jsl, sum(nvl(business.jsje, 0)) jsje from (select useryy.id useryyid, useryy.mc useryymc, yycgd.bm yycgdbm, yycgd.id yycgdid, usergys.id usergysid, usergys.mc usergysmc, yycgdmx.ypxxid, ypxx.id, ypxx.bm, ypxx.mc, ypxx.jx, ypxx.gg, ypxx.zhxs, ypxx.scqymc, ypxx.spmc,
ypxx.jyzt,
(select info from dictinfo where ypxx.jyzt = dictcode and typecode = '003') jyztmc, (select info from dictinfo where typecode = '011' and dictcode = yycgdmx.cgzt) cgztmc, yycgdmx.cgl, yycgdmx.cgje, yycgdmx.rkl, yycgdmx.rkje, yycgdmx.thl, yycgdmx.thje, yycgdmx.jsl, yycgdmx.jsje
from yybusiness2018 yycgdmx, yycgd2018 yycgd, useryy, usergys, ypxx where yycgdmx.yycgdid = yycgd.id and yycgd.useryyid = useryy.id and yycgdmx.usergysid = usergys.id and yycgdmx.ypxxid = ypxx.id
--监管单位查询管理地区内医院采购明细信息
and useryy.id in ( --管理地区内医院 select id from useryy where dq like '1.1.%')
--医院查询自己的采购明细信息 and useryy.id = '1f8b098b-067e-11e3-8a3c-0019d2ce5116'
--供货商查询: 与本供货商相关的采购明细信息 and usergys.id = '5197cdd2-08cf-11e3-8a4f-60a44cea4388'
) business
--分类统计 --按药品统计 group by business.id) business, ypxx where business.id = ypxx.id |
2.2 按药品分类统计的总数查询的sql
看需求可知:因为按药品进行分类统计也需要分页的,所以还需要进行总数查询的sql编写。
注意:下面的sql语句进行了优化,可以把不需要的字段去除掉。因为只需要计算总数,所以group by字句后面只需按照business.id字段进行分类即可!
Sql语句如下:背景颜色加深的部分为添加的语句。
--按药品分类统计列表的总数 select count(*) from ( select business.id from ( select useryy.id useryyid, useryy.mc useryymc, yycgd.bm yycgdbm, yycgd.id yycgdid, usergys.id usergysid, usergys.mc usergysmc, yycgdmx.ypxxid, ypxx.id, ypxx.bm, ypxx.mc, ypxx.jx, ypxx.gg, ypxx.zhxs, ypxx.scqymc, ypxx.spmc,
ypxx.jyzt,
(select info from dictinfo where ypxx.jyzt = dictcode and typecode = '003') jyztmc, (select info from dictinfo where typecode = '011' and dictcode = yycgdmx.cgzt) cgztmc, yycgdmx.cgl, yycgdmx.cgje, yycgdmx.rkl, yycgdmx.rkje, yycgdmx.thl, yycgdmx.thje, yycgdmx.jsl, yycgdmx.jsje from yybusiness2014 yycgdmx, yycgd2014 yycgd, useryy, usergys, ypxx where yycgdmx.yycgdid = yycgd.id and yycgd.useryyid = useryy.id and yycgdmx.usergysid = usergys.id and yycgdmx.ypxxid = ypxx.id
--监管单位查询管理地区内医院采购明细信息
and useryy.id in ( --管理地区内医院 select id from useryy where dq like '1.1.%')
--医院查询自己的采购明细信息 and useryy.id = '1f8b098b-067e-11e3-8a3c-0019d2ce5116'
--供货商查询: 与本供货商相关的采购明细信息 and usergys.id = '5197cdd2-08cf-11e3-8a4f-60a44cea4388'
)business
--分类统计 --按药品统计 group by business.id )
|
2.3 自定义mapper映射文件
因为这两个statement中的sql语句存在相同的部分,并且该sql语句的编写也是以“交易明细查询”的sql语句为基础,所以这里可以把相同的sql语句抽取了出来作为sql片段的方式!至于sql片段的内容可以参考源文件,也可以参考上节中的“交易明细查询”的mapper映射文件中的内容!
在YybusinessMapperCustom.xml映射文件中添加如下两个statement:
2.4 自定义mapper接口
需要在YybusinessMapperCustom.java接口中添加两个方法,如下:
3 service
因为数据的来源都是“交易明细”,因此接口中的条件也是都一样的,参考“交易明细查询的service接口的编写”!
接口功能:医院、监管单位、供货商按药品统计.
分类统计的内容如下:
监管单位:对管理地区内医院采购的药品的信息进行统计。
医院:统计自己的采购的药品的信息进行统计.
供货商:与本供货商相关的采购的药品信息进行统计.
接口参数:年份、查询条件,单位id、用户类型(1:卫生局 2:卫生院 3:卫生室 4:供货商)
BusinessService.java接口中添加如下两个方法:
BusinessServiceImpl实现类中的两个方法,如下:
4 Action
在TjAtion.java中添加两个方法,如下:
5 groupbyypxx.jsp页面
在groupbyypxx.jsp页面中需要注意几个地方:
第1个:url路径,如下:
第2个:这里要暂时的屏蔽掉,如下所示:在讲完DWR之后,这里的注释就可以取消掉了。
第3个:年份,如下:
第4个:采购状态,暂时先这么写,在讲完DWR之后,这里的代码会修改,如下:
6 调试
在menu.json中添加“按药品统计”链接,如下
先使用卫生室(医院)身份登录系统,如下:
查询结果如下:
当然,可以在交易明细列表下面添加一个导出的工具栏!(自己实现)
然后再以卫生局身份登录系统,如下
点击“按药品统计”链接后,应该统计出所有的药品信息!这样测试才算正确!
二 按供货商统计
需求:按供货商统计指定时间段的采购量、采购金额、入库量、入库金额。。。。.
使用卫生局来登录系统的话,原型系统中的页面中所查询出的数据如下:
Sql语句如下:
该sql语句的编写是以“交易明细查询”的sql语句为基础,并在其上添加group by分类的条件即可
select business.usergysid,business.usergysmc, sum(nvl(business.cgl,0))cgl, sum(nvl(business.cgje,0))cgje, sum(nvl(business.rkl,0))rkl, sum(nvl(business.rkje,0))rkje, sum(nvl(business.thl,0))thl, sum(nvl(business.thje,0))thje, sum(nvl(business.jsl,0))jsl, sum(nvl(business.jsje,0))jsje from ( select useryy.id useryyid, useryy.mc useryymc, yycgd.bm yycgdbm, yycgd.id yycgdid, usergys.id usergysid, usergys.mc usergysmc, yycgdmx.ypxxid, ypxx.id, ypxx.bm, ypxx.mc, ypxx.jx, ypxx.gg, ypxx.zhxs, ypxx.scqymc, ypxx.spmc,
ypxx.jyzt,
(select info from dictinfo where ypxx.jyzt = dictcode and typecode = '003') jyztmc, (select info from dictinfo where typecode = '011' and dictcode = yycgdmx.cgzt) cgztmc, yycgdmx.cgl, yycgdmx.cgje, yycgdmx.rkl, yycgdmx.rkje, yycgdmx.thl, yycgdmx.thje, yycgdmx.jsl, yycgdmx.jsje from yybusiness2018 yycgdmx, yycgd2018 yycgd, useryy, usergys, ypxx where yycgdmx.yycgdid = yycgd.id and yycgd.useryyid = useryy.id and yycgdmx.usergysid = usergys.id and yycgdmx.ypxxid = ypxx.id
--监管单位查询管理地区内医院采购明细信息
and useryy.id in ( --管理地区内医院 select id from useryy where dq like '1.1.%')
--医院查询自己的采购明细信息 and useryy.id = '1f8b098b-067e-11e3-8a3c-0019d2ce5116'
--供货商查询: 与本供货商相关的采购明细信息 and usergys.id = '5197cdd2-08cf-11e3-8a4f-60a44cea4388'
)business
--分类统计:按供货商统计 group by business.usergysid,business.usergysmc
|
三 按医院统计
需求:按医院统计指定时间段时采购量、采购金额、入库量、入库金额。。。。
SQL语句如下:
该sql语句的编写是以“交易明细查询”的sql语句为基础,并在其上添加group by分类的条件即可
select business.useryyid, business.useryymc, sum(nvl(business.cgl,0))cgl, sum(nvl(business.cgje,0))cgje, sum(nvl(business.rkl,0))rkl, sum(nvl(business.rkje,0))rkje, sum(nvl(business.thl,0))thl, sum(nvl(business.thje,0))thje, sum(nvl(business.jsl,0))jsl, sum(nvl(business.jsje,0))jsje from ( select useryy.id useryyid, useryy.mc useryymc, yycgd.bm yycgdbm, yycgd.id yycgdid, usergys.id usergysid, usergys.mc usergysmc, yycgdmx.ypxxid, ypxx.id, ypxx.bm, ypxx.mc, ypxx.jx, ypxx.gg, ypxx.zhxs, ypxx.scqymc, ypxx.spmc,
ypxx.jyzt,
(select info from dictinfo where ypxx.jyzt = dictcode and typecode = '003') jyztmc, (select info from dictinfo where typecode = '011' and dictcode = yycgdmx.cgzt) cgztmc, yycgdmx.cgl, yycgdmx.cgje, yycgdmx.rkl, yycgdmx.rkje, yycgdmx.thl, yycgdmx.thje, yycgdmx.jsl, yycgdmx.jsje from yybusiness2018 yycgdmx, yycgd2018 yycgd, useryy, usergys, ypxx where yycgdmx.yycgdid = yycgd.id and yycgd.useryyid = useryy.id and yycgdmx.usergysid = usergys.id and yycgdmx.ypxxid = ypxx.id
--监管单位查询管理地区内医院采购明细信息
and useryy.id in ( --管理地区内医院 select id from useryy where dq like '1.1.%')
--医院查询自己的采购明细信息 and useryy.id = '1f8b098b-067e-11e3-8a3c-0019d2ce5116'
--供货商查询: 与本供货商相关的采购明细信息 and usergys.id = '5197cdd2-08cf-11e3-8a4f-60a44cea4388'
)business
--分类统计 --按医院统计 group by business.useryyid,business.useryymc
|
四 统计数据的导出
建议:所有的统计功能,包括:交易明细查询,分类统计................等等,都可以添加导出功能,来将统计的数据以excel方式导出。
五 DWR的使用
1 什么是DWR
DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码直接调用在WEB服务器上的JAVA方法,就像它就在浏览器里一样。
2 DWR的调用方法
普通ajax调用方法如下:
Dwr调用:
Flex:用于flash编程,实现页面/视图层的开发。它开发出的效果和网页样式不一样,更接近windows桌面的样式,开发的成果就是一个flash文件。
Flex实现了视图层:
3 Dwr的配置
第1步:导入Jar包:
如果是maven工程则需要加入以下依赖:
<!-- dwr -->
<dependency>
<groupId>org.directwebremoting</groupId>
<artifactId>dwr</artifactId>
<version>3.0.M1</version>
</dependency>
如果不是maven工程则需要导入: dwr-3.0.M1.jar
当然,在第一天的配置环境中就已经通过maven工程配置过了,如下图所示:
并且在Maven Dependcecies依赖包中已经导入了该dwr的jar包了,如下图:
第2步:Dwr servlet的配置。
其作用就是把表现层的实现整合到了servlet中,由servlet控制器来实现表现层。
在web.xml中加入:
<servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class> <!-- 是否允许调试,如果要在浏览器中调试则必须设置为true --> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <!-- 如果允许跨域请求,则必须将此值设置为false,默认值为true --> <init-param> <param-name>crossDomainSessionSecurity</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>allowScriptTagRemoting</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> |
如果访问的URL是:/dwr/,那么就会把请求交给dwr来处理。
第3步:在WEB-INF下配置dwr.xml文件,如下图:
配置dwr服务端中的哪些方法允许前台页面的ajax调用。
简单说,不是所有的后台的service中的方法都可以调用的,必须 是在这里的配置文件中配置的方法才可以调
用!
dwr.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.ltd.uk/dwr/dwr30.dtd"> <dwr> <allow> <create creator="spring" javascript="dwrService"> <param name="beanName" value="dwrService" /> </create> </allow> </dwr> |
1)其中Creator:
creator属性的值可以是new,struts,spring......因为后台的service方法是通过整合spring来实现的,
所以设置成“spring”;
如果后台的service方法是通过struts来实现的,那么就要设置creator=”struts”;
如果如果后台的service方法中的类是通过new来实现的,即使用的是new来创建的一个类,那么这
里就要设置creator=”new”;
如果creator为new则param为:
<param name=”class” value=”类路径名”/>
2) javascript="dwrService":表示一个JS文件的名称。
作用:如果要调用dwr.xml配置的service(这里配置是名称为:dwrService的bean)的方法,需要在页面中引
入dwrService.js文件。
Js的地址是:
<script type='text/javascript' src='工程路径/dwr/interface/ dwrService.js'></script>.
/dwr/interface/ dwrService.js交给dwr的servlet进行处理,servlet会根据dwr.xml中配置,生成一个js文件 的内容。
<param name="beanName" value="dwrService" />表示:
Spring容器中的名称beanName为:dwrService的bean
4 Dwr测试
调用yycg.base.service.impl.DwrServiceImpl类里面的方法。
由于yycg.base.service.impl.DwrServiceImpl使用spring管理,那么,就要在spring容器中配置,在
applicationContext-base-service.xml文件中配置如下:
在页面中加入dwrService的js引用,可以调用上边dwrService这个bean中的方法。
<script type='text/javascript' src='工程路径/dwr/interface/ dwrService.js'></script>
如果页面中要调用其它bean的方法,则页面中还需要引入:
<script type='text/javascript' src='工程路径/dwr/interface/ XXXXXXXX.js'></script>
都必须引用dwr的引擎配置的js文件:
<script type='text/javascript' src='${baseurl}dwr/engine.js'></script>
<script type='text/javascript' src='${baseurl}dwr/util.js'></script>
测试如下:
调用无参数方法:
//dwrService是加载js的名称
//testdwr是dwrService对应的bean的方法名
//callback:回调方法
dwrService.testdwr({
callback:function(data) {
alert(data);
}});
调用有参数方法:
dwrService.testdwr2('张三',{
callback:function(data) {
alert(data);
}});
5 Dwr在本系统的应用
1)在年份下框显示的数据,通过dwr来获取.
需求:显示近6年的年份。
需要在dwrService写一个方法:
获取近6年的年份
客户端通过dwr调用该方法,得到近6年的年份,在页面向年份下拉框设置6年的年份。
如果通过dwr方法,在action方法中就无需调用service获取数据,再通过model传到页面。
客户端调用上边的方法,dwr会自动将list转成json在客户端解析。
2) 在所有数据字典下拉框, 通过dwr来获取数据字典信息.
针对业务代码:
编写根据typecode获取业务代码及代码对应的名称 .
针对普通配置项:
编写根据typecode获取普通配置项id及对应的名称.
客户端使用固定的三个js方法,解析上边三个方法返回数据,解析完数据,将数据填充到select下拉框。
相关文章:
医药采购系统平台第10天02:按药品分类的统计按供货商统计按医院统计统计数据的导出DWR的配置和应用
如果想要获取相关的源码,笔记,和相关工具,对项目需求的二次开发,可以关注我并私信!!! 一 按药品分类的统计实现 1 按药品分类统计的需求 按药品统计:在指定时间段中采购量、采购金…...
Navicat、DataGrip、DBeaver在渲染 BOOLEAN 类型字段时的一种特殊“视觉风格”
文章目录 前言✅ 为什么 Boolean 字段显示为 [ ]?✅ 如何验证实际数据类型?✅ 小结 前言 看到的 deleted: [ ] 并不是 Prisma 的问题,而是数据库客户端(如 Navicat、DataGrip、DBeaver)在渲染 BOOLEAN 类型字段时的一种…...
(undone) 吴恩达版提示词工程 2. 指南
url: https://www.bilibili.com/video/BV1Z14y1Z7LJ?spm_id_from333.788.videopod.episodes&vd_source7a1a0bc74158c6993c7355c5490fc600&p2 别人的笔记 url: https://zhuanlan.zhihu.com/p/626966526 指导原则(Guidelines) 编写提示词有两个…...
VLC搭建本机的rtsp直播推流和拉流
媒体---流---捕获设备,选择摄像头,点击串流 x下一步 选择rtsp,点击添加 看到了端口,并设置路径: 选择Video -H 264 mp3(TS) 点击下一个, 点击流,就开始推流了 拉流,观看端&#x…...
Rocky Linux 9.1 修改网卡和DNS
在 Rocky Linux 9.1 中修改网卡和 DNS 配置可以通过 NetworkManager 工具实现(推荐)或直接编辑配置文件。以下是两种方法的详细步骤: 方法一:使用 nmcli 命令行工具(动态生效) 查看当前网络连接nmcli connection show # 输出示例: # NAME UUID …...
Web前端:常用的布局属性
常见的布局方式有哪些? float:浮动布局 position 定位布局 flex 弹性布局(display) table 表格布局(弃用) 一、HTML5 语义化布局标签 这些标签本身不提供布局能力,但能增强页面结构…...
XSS学习2
一、客户端的Cookie 1. 无状态的影响 无状态问题: HTTP协议的无状态特性导致每次请求都是独立的,无法保持会话。例如,在银行办理业务时,柜员不需要重复询问客户信息,但在计算机网络中,每次HTTP请求都需要重新认证用户…...
软件设计师/系统架构师---计算机网络
概要 什么是计算机网络? 计算机网络是指将多台计算机和其他设备通过通信线路互联,以便共享资源和信息的系统。计算机网络可以有不同的规模,从家庭网络到全球互联网。它们可以通过有线(如以太网)或无线(如W…...
Kubernetes(k8s)学习笔记(二)--k8s 集群安装
1、kubeadm kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署: 1.1 创建一个 Master 节点$ kubeadm init 1.2 将一个 Node 节点加入到当前集群中$ kubeadm join <Master 节点的 IP 和…...
线性DP:最长上升子序列(子序列可不连续,子数组必须连续)
目录 Q1:简单遍历 Q2:变式(加大数据量) Q1:简单遍历 Dp问题 状态表示 f(i,j) 集合所有以第i个数结尾的上升子序列集合-f(i,j)的值存的是什么序列长度最大值max- 状态计算 (其实质是集合的划分)…...
SpringBoot 基本原理
SpringBoot 为我们做的自动配置,确实方便快捷,但一直搞不明白它的内部启动原理,这次就来一步步解开 SpringBoot 的神秘面纱,让它不再神秘。 目录 SpringBootApplication 背后的秘密 Configuration ComponentScan EnableAutoC…...
LeetCode第158题_用Read4读取N个字符 II
LeetCode 第158题:用Read4读取N个字符 II 题目描述 给你一个文件,并且该文件只能通过给定的 read4 方法来读取,请实现一个方法来读取 n 个字符。 read4 方法: API read4 可以从文件中读取 4 个连续的字符,并且将它…...
webgl入门实例-矩阵在图形学中的作用
矩阵在图形学中扮演着核心角色,几乎所有图形变换、投影和空间转换都依赖矩阵运算来实现高效计算。以下是矩阵在图形学中的主要作用及具体应用: 1. 几何变换 矩阵乘法可以高效表示物体的平移、旋转、缩放等基本变换,并通过矩阵连乘实现复合变…...
基于Matlab求解矩阵电容等效容值
1需求 仿真测试8*10阶举证电容等效容值。 2模型搭建 2.1打开simscape 在打开simulink之后打开simscape库,Simscape库位置如下 2.2搭建模型 在库中寻找需要的元件搭建电路。 2.2.1基本元件 电阻电容电感等基础器件,搭建电路之后需要对其进行幅值&…...
铅酸电池充电器方案EG1253+EG4321
参考: 基于EG1253EG4321铅酸电池(48V20AH)三段式充电器 屹晶微高性价比的电瓶车充电器方案——EG1253 电瓶电压 48V电瓶锂电池,其充满约为55V~56V,因此充电器输出电压为55V~56V; 若是48V铅酸电池,标称电压为48V&…...
每天学一个 Linux 命令(26):less
可访问网站查看,视觉品味拉满: http://www.616vip.cn/26/index.html less 是 Linux 中一个强大的文件内容查看工具,用于分页显示文件内容,支持快速搜索、滚动浏览、跳转等操作。相比 more,less 功能更丰富且支持向前和向后翻页,适合查看大文件或日志。 命令格式 les…...
【网络】数据链路层知识梳理
全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的笔记吧~ 自己写自己的八股!让未来的自己看懂! (全文手敲,受益良多) 数据链路层 我们来重新理解一下这个图:…...
2.2 BackgroundWorker的使用介绍
BackgroundWorker 是 .NET Framework 中一个简化异步操作的组件,它位于 System.ComponentModel 命名空间下。它为开发人员提供了一种简单的方式在后台执行耗时操作,同时保持与 UI 线程的交互 主要属性以及任务如下: DoWork 事件:…...
Java从入门到“放弃”(精通)之旅——类和对象全面解析⑦
Java从入门到“放弃”(精通)之旅🚀——类和对象全面解析⑦ 一、面向对象初探 1.1 什么是面向对象? Java是一门纯面向对象的语言(OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想&a…...
无回显RCE
在CTF和实战渗透中,不是每一个命令执行点都有回显,有时我们审了半天代码,却发现好不容易找到的命令执行没有回显,但是这并不代表这段代码不能被我们利用,在无回显的情况下也是可以利用的 首先我们来写一个最简单的php…...
DQN在Gym的MountainCar环境的实现
DQN on MountainCar 引言 在本次实验里,我构建了DQN和Dueling DQN,并在Gymnasium库的MountainCar环境中对它们展开测试。我通过调整训练任务的超参数,同时设计不同的奖励函数及其对应参数,致力于获取更优的训练效果。最后&#…...
typescript判断是否为空
1 判断数据类型 1.1 基础数据类型 比如number,string,boolean,使用typeof,返回值是string类型: 例如: if("number" typeof(item)) {egret.log("item的类型是number"); } else if(&…...
JavaScript forEach介绍(JS forEach、JS for循环)
文章目录 JavaScript forEach 方法全面解析基本概念语法详解参数说明 工作原理与其他循环方法的比较forEach vs for循环forEach vs map 实际应用场景DOM元素批量操作数据处理 性能考量常见陷阱与解决方案无法中断循环异步操作问题 高级技巧链式调用(不使用 forEach …...
C语言之图像文件的属性
🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 图像文件属性提取系统设计与实现 目录 设计题目设计内容系统分析总体设计详细设计程序实现…...
Java链表反转方法详解
一、理解链表结构 假设链表节点定义为: class ListNode {int val;ListNode next;ListNode(int x) { val x; } } 二、迭代法反转链表 核心思路 逐步反转每个节点的指针方向,最终使整个链表反向。 步骤拆解 初始化三个指针: prev…...
lmm-r1开源程序是扩展 OpenRLHF 以支持 LMM RL 训练,用于在多模态任务上重现 DeepSeek-R1
一、软件介绍 文末提供程序和源码下载学习 lmm-r1开源程序是扩展 OpenRLHF 以支持 LMM RL 训练,用于在多模态任务上重现 DeepSeek-R1。 二、简介 小型 3B 大型多模态模型(LMMs)由于参数容量有限以及将视觉感知与逻辑推理相结合的固有复杂性…...
Java学习笔记(数组,方法)
一,数组 1.数组初始化 1.1动态初始化 格式:数据类型[] 数组名 new 数据类型[数组长度]; int[] arr new int[3]; // 定义长度为3的int数组,元素默认值为0 double[] scores new double[5]; // 长度5,元素默认0.0 String[…...
嵌入式---零点漂移(Zero Drift)
一、零点漂移的定义与本质 零点漂移(简称“零漂”)指传感器在输入信号为零(或理论上应输出固定零值)时,输出信号随时间、温度、环境等因素变化而偏离初始零点的现象。 核心特征:无输入时输出非零且缓慢变…...
健身房管理系统设计与实现(springboot+ssm+vue+mysql)含万字详细文档
健身房管理系统设计与实现(springbootssmvuemysql)含万字详细文档 健身房管理系统是一个全面的解决方案,旨在帮助健身房高效管理日常运营。系统主要功能模块包括个人中心、会员管理、员工管理、会员卡管理、会员卡类型管理、教练信息管理、解聘管理、健身项目管理、…...
C语言if
一、题目引入 如果从键盘输入58,则以下程序输出的结果是多少? 二、运行结果 三、题目分析 因为这道题中的多个if是并列结构 所以只要条件满足都会执行 这一题58满足所有的条件 所以可以运行出来 也就是说每个if里面的条件都满足 所以都会打印出来 而下面的这种情况就是 if e…...
XSS学习1之http回顾
1. HTTP的基本结构与工作流程 HTTP是一个请求-响应协议,基于客户端与服务器之间的交互。每次用户通过浏览器请求某个资源时,HTTP协议都会完成一系列的步骤。 HTTP请求: HTTP请求由以下几个部分构成: 请求行: 请求方…...
小迪抓包技术算法加密(6-9天)
抓包技术 https://blog.csdn.net/2301_81015455/article/details/147014382 算法加密入门(了解) 在实际测试中安全性高一些得采用得都是AES等高安全加密,遇到这种,放弃你啥都不知道测个毛啊,所以直接run!!! 大部分解密时碰撞式…...
Tkinter与ttk模块对比:构建现代 Python GUI 的进化之路
在 Python GUI 开发中,标准库 tkinter 及其子模块 ttk(Themed Tkinter)常被同时使用。本文通过功能对比和实际案例,简单介绍这两个模块的核心差异。 1. 区别 Tkinter:Python 标准 GUI 工具包(1994年集成&…...
【数据结构入门训练DAY-18】信息学奥赛一本通T1331-后缀表达式的值
文章目录 前言一、题目二、解题思路总结 前言 本次训练内容: 栈的复习。栈模拟四则运算计算问题的练习。训练解题思维。 一、题目 从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加()、减…...
时序预测 | Transformer-LSTM-SVM时间序列预测(Matlab完整源码和数据,适合基础小白研究)
时序预测 | Transformer-LSTM-SVM时间序列预测(Matlab完整源码和数据,适合基础小白研究) 目录 时序预测 | Transformer-LSTM-SVM时间序列预测(Matlab完整源码和数据,适合基础小白研究)效果一览基本介绍代码…...
【HarmonyOS 5】makeObserved接口详解
【HarmonyOS 5】makeObserved接口详解 一、makeObserved接口是什么? makeObserved 接口(API version 12 起可用)用于将非观察数据转为可观察数据,适用于三方包类、Sendable 装饰的类、JSON.parse 返回的对象、collections.Array…...
色谱图QCPColorMap
一、QCPColorMap 概述 QCPColorMap 是 QCustomPlot 中用于绘制二维颜色图的类,可以将矩阵数据可视化为颜色图(热力图),支持自定义色标和插值方式。 二、主要属性 属性类型描述dataQCPColorMapData存储颜色图数据的对象interpol…...
【数据结构_12】二叉树(4)
一、二叉树的层序遍历 思路:可以按照先序的方式来遍历这个树,递归的时候,给递归方法,加上辅助的参数,level表示当前层数,递归过程中,根据level的值,决定当前整个节点要放到哪个list中…...
HCIA-Datacom高阶:vlan、vlanif、单臂路由、静态路由、ospf综合实验
本实验拓扑图如下:实验包含 AR1、AR2、AR3 路由器,LSW1(三层交换机)、LSW2、LSW3 交换机,以及 PC1-4 和 Server1。AR1 与 LSW2 通过单臂路由连接,AR2 与 AR3、LSW1 构成 OSPF 网络,AR1 与 AR2 间…...
HTTP 1.0 和 2.0 的区别
HTTP 1.0 和 2.0 的核心区别体现在性能优化、协议设计和功能扩展上,以下是具体对比: 一、核心区别对比 特性HTTP 1.0HTTP 2.0连接方式非持久连接(默认每次请求新建 TCP 连接)持久连接(默认保持连接,可复用…...
如何一键批量删除多个 Word 文档中的页眉和页脚
在工作中,许多 Word 文档的页眉页脚中包含公司名称、Logo、电话等信息,用于对外宣传。但有时我们需要批量删除这些页眉页脚信息,尤其当信息有误时,手动逐个删除会增加工作量,导致效率低下。本文将介绍一种便捷的方法&a…...
关于编译树莓派内核系统的总结
1.首先获取官方的内核系统源码: 然后在源码根目录执行命令: 🌟ARCHarm64 CROSS_COMPILEaarch64-linux-gnu- KERNELkernel8 make bcm2712_defconfig (注意这里的是树莓派5的64位的) 🌟ARCHarm CROSS_COM…...
AIGC赋能插画创作:技术解析与代码实战详解
文章目录 一、技术架构深度解析二、代码实战:构建AIGC插画生成器1. 环境配置与依赖安装2. 模型加载与文本提示词构建3. 图像生成与参数调优4. 风格迁移与多模型融合 三、进阶技巧:参数调优与效果增强四、应用场景代码示例1. 游戏角色设计2. 广告海报生成…...
平衡二叉树(leetcode刷题)
题目描述: 给定一个二叉树,判断它是否是 平衡二叉树 (平衡二叉树 是指该树所有节点的左右子树的高度相差不超过 1。) 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:true示例 2࿱…...
【数据结构 · 初阶】- 带环链表
目录 一.基本结构 二.判断一个单链表带不带环 三.2个问题 1.为什么 slow 走 1 步,fast 走 2 步,他们会相遇,会不会错过?请证明。 2.为什么 slow 走 1 步,fast 走 X 步 ( X > 3 ),他们会相遇&#x…...
ClickHouse简介
OLAP与ClickHouse的定位 OLAP的核心概念 OLTP:服务于高并发、低延迟的短事务操作(如银行转账、订单支付),强调数据的增删改查(CRUD)和事务一致性(ACID)。 OLAP:专注于大…...
强制重装及验证onnxruntime-gpu是否正确工作
#工作记录 我们经常会遇到明明安装了onnxruntime-gpu或onnxruntime后,无法正常使用的情况。 一、强制重新安装 onnxruntime-gpu 及其依赖 # 强制重新安装 onnxruntime-gpu 及其依赖 pip install --force-reinstall --no-cache-dir onnxruntime-gpu1.18.0 --extra…...
分布自定义shell脚本(详写)附带全代码
涉及知识全排列 常见指令 小知识点 操作系统 什么是进程 进程控制 步骤 1:项目准备 在开始编写代码之前,你需要创建一个新的项目文件夹,并在其中创建一个 .cpp 文件,例如 my_shell.cpp。同时,确保你已经安装了 C…...
windows拷贝文件脚本
1、新建脚本文件xxx.bat,名字任意,后缀未.bat即可,将以下内容拷贝进去,修改src和des为自己文件的目录即可。 echo off :: 设置字符集为UTF-8,命令窗口能正确显示中文字符。 chcp 65001 rem 读取当前目录并进入当前目…...
Arduino编译和烧录STM32——基于J-link SWD模式
一、安装Stm32 Arduino支持 在arduino中添加stm32的开发板地址:https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json 安装stm32开发板支持 二、安装STM32CubeProgrammer 从stm32网站中安装:https://ww…...