使用 YOLOv5 进行图像分割的实操案例

如何训练 YOLOv5 进行分割?简单来讲,包括几个步骤: 为图像分割准备数据集 在自定义数据集上训练 YOLOv5 使用 YOLOv5 进行推理 准备数据集 第一步,您需要以适当的格式准备数据集。这种格式与用于检测的 YOLOv5 格式非常相似。您需要创建类似如下所示的目录: 让我们看一下 data.yaml 文件的内部。该文件具有与检测任务相同的结构。其结构如下图所示: data.yaml 文件的结构 train - path to your train images val - path to your validation images nc - number of classes names - сlass names 让我们看一下 .txt 文件的内部。 第一个元素是“0”,表示类别数。下一个值是多边形的 x 和 y 坐标。这些坐标被归一化为原始图像的大小。如果你想查看带有这个多边形的图像,可以使用下面的函数。第一个打开图像和标记文件,第二个显示图像和标记。 def read_image_label(path_to_img: str, path_to_txt: str, normilize: bool = False) -> Tuple[np.array, np.array]: # read image image = cv2.imread(path_to_img) image = cv2.

java poi导出下载excel报表或下载到指定路径

1. 数据库查出数据导出excel浏览器并下载 /** * 导出下载excel * @param list 导出数据 * @throws Exception */ public static void exportExcel(HttpServletResponse response, List<Student> list) throws Exception { SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmss"); XSSFWorkbook wb = new XSSFWorkbook(); //标题行抽出字段 String[] title = {"序号", "学号", "姓名", "性别", "入学时间", "住址", "手机号", "其他信息"}; //设置sheet名称,并创建新的sheet对象 Sheet stuSheet = wb.createSheet(); //获取表头行 Row titleRow = stuSheet.createRow(0); //创建单元格,设置style居中,字体,单元格大小等 CellStyle style = wb.createCellStyle(); Cell cell = null; //把已经写好的标题行写入excel文件中 for (int i = 0; i < title.

Redis——》过期删除策略

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Redis——》过期删除策略 一、过期删除策略1、定时删除2、惰性删除3、定期删除 二、Redis过期删除策略1、定期删除(1)设置执行时间间隔(2)执行过程 2、惰性删除 三、RDB对过期键的处理(开启RDB持久化)1、生成RDB文件2、载入RDB文件(1)如果服务器以主服务器模式运行(2)如果服务器以从服务器模式运行 四、AOF对过期键的处理(开启AOF持久化)1、AOF文件写入2、AOF文件重写 五、复制功能对过期键的处理 一、过期删除策略 策略定时删除惰性删除定期删除描述设置key过期时间时,创建一个定时器,让定时器在该过期时间到来时,立即执行对其进行删除的操作。当需要key时,首先检查是否过期,如果过期就删掉,反之返回值。每隔一段时间,对key进行检查,删除里面过期的key。优点对内存最友好对cpu最友好对内存友好 对cpu友好缺点对cpu不友好对内存不友好难以确定删除操作执行的时长和频率 1、定时删除 优点:对内存最友好(key只要过期就能立即从内存中删除)缺点:对CPU最不友好(在过期键比较多的时候,删除过期键会占用一部分 CPU 时间,对服务器的响应时间和吞吐量造成影响) 2、惰性删除 优点:对 CPU最友好(只在使用该键时才会进行过期检查,对于很多用不到的key不用浪费时间进行过期检查)缺点:对内存不友好(如果一个键已经过期,但是一直没有使用,那么该键就会一直存在内存中,如果数据库中有很多这种使用不到的过期键,这些键便永远不会被删除,内存永远不会释放,从而造成内存泄漏) 3、定期删除 优点:通过限制删除操作执行的时长和频率来减少删除操作对 CPU 的影响,也能有效释放过期键占用的内存。缺点: 1)难以确定删除操作执行的时长和频率 如果执行频率高:和定时删除一样,对CPU不友好 如果执行频率低:和惰性删除一样,对内存不友好 2)在获取某个键时,如果某个键的过期时间已经到了,但是还没执行定期删除,那么就会返回这个键的值,这是个严重的错误 二、Redis过期删除策略 Redis的过期删除策略 = 惰性删除 + 定期删除 过期删除策略处理方式实现函数描述惰性删除零散db.c/expireIfNeeded当key被访问时,调用函数检查key是否过期,如果过期则删除,否则继续执行实际命令定期删除集中redis.c/activeExpireCycle每隔一段时间,随机检查设置了过期的key并删除已过期的key 1、定期删除 Redis 会将每个设置了过期时间的 key 放入到一个独立的字典中,以后会定时遍历这个字典来删除到期的 key。 (1)设置执行时间间隔 # 每秒执行次数 hz 10 # 默认值:10 # 取值范围:1~500,建议不超过100,只有在请求延时非常低的情况下可以将值提升到100 Q:单线程的redis,如何知道要运行定时任务? A:Redis 的定时任务会记录在一个称为最小堆的数据结构中。这个堆中,最快要执行的任务排在堆的最上方。在每个循环周期,Redis 都会将最小堆里面已经到点的任务立即进行处理。处理完毕后,将最快要执行的任务还需要的时间记录下来,这个时间就是接下来处理客户端请求的最大时长,若达到了该时长,则暂时不处理客户端请求而去运行定时任务。 (2)执行过程 Redis 默认会每秒进行10次过期扫描,但并不是遍历过期字典中所有的 key,而是采用了一种简单的贪心策略。 从过期字典中随机 20 个 key;删除这 20 个 key 中已经过期的 key;如果过期的 key 比率超过 1/4,那就重复步骤 1。 为了保证过期扫描不会出现循环过度,导致线程卡死现象,算法还增加了扫描时间的上限,默认不会超过 25ms。

最近跑代码遇到的几个问题

错误总结 cuda out of memoryPILImage的问题tensor类型的问题__call__函数进行返回的时候显示未定义image.copy()的中重要性ValueError: The 'VI' parameter is required for the mahalanobis metric when Y is passed. cuda out of memory 出现这个问题,我的原因是图片太大,显卡无法直接处理,因此需要对图片进行二次裁剪。 图片中是因为代码出了问题,没有裁剪成功。不过6000*4000的图片对于显卡来说可能太大了。 PILImage的问题 这个问题的原因,我将tensor格式的图片转为PILImage依然出现问题,即处理的结果是transformers.PILImage问题。 目前我的解决方案是: 将tensor转为ndarray,再将ndarray转为PILImage。则不会出现transformers.PILImage问题。 tensor类型的问题 这个报错的原因是因为没有将image转成想要的tensor格式,需要检查自己的transforms操作是否正确。 __call__函数进行返回的时候显示未定义 UnboundLocalError: local variable 'image' referenced before assignment. 这里出现问题的原因是我设置了if语句时,对输入的变量进行重新定义。return却在if语句的前面。 image.copy()的中重要性 图像进行Flip增广操作之后的ndarray的存储格式是不连续的,因此会影响之后的输入,下面 是发生的报错情况。 ValueError: some of the strides of a given numpy array are negative. 所以利用copy()语法可以使内存重新变为连续。 ValueError: The ‘VI’ parameter is required for the mahalanobis metric when Y is passed. 解决方案:scikit-learn的版本需要改为0.

RocketMQ服务中各端口号说明

我们在安装rocketmq后,要开放的端口一般有4个:9876,10911,10912,10909 1,首先说9876 这个是nameserver中的端口,不做过多解释,链接nameserver就靠这个端口 2,剩下的3个都是RocketMQ-Broker中的端口 listenPort listenPort参数是broker的监听端口号,是remotingServer服务组件使用,作为对Producer和Consumer提供服务的端口号,默认为10911,可以通过配置文件修改。 打开broker-x.conf,修改或增加listenPort参数: #Broker 对外服务的监听端口 listenPort=10911 fastListenPort fastListenPort参数是fastRemotingServer服务组件使用,默认为listenPort - 2,可以通过配置文件修改。 打开broker-x.conf,修改或增加fastListenPort参数 #主要用于slave同步master fastListenPort=10909 haListenPort haListenPort参数是HAService服务组件使用,用于Broker的主从同步,默认为listenPort - 1,可以通过配置文件修改。 打开broker-x.conf,修改或增加haListenPort参数: #haService中使用 haListenPort=10912 remotingServer和fastRemotingServer的区别: Broker端: remotingServer可以处理客户端所有请求,如:生产者发送消息的请求,消费者拉取消息的请求。 fastRemotingServer功能基本与remotingServer相同,唯一不同的是不可以处理消费者拉取消息的请求。 Broker在向NameServer注册时,只会上报remotingServer监听的listenPort端口。 客户端: 默认情况下,生产者发送消息是请求fastRemotingServer,我们也可以通过配置让其请求remotingServer;消费者拉取消息只能请求remotingServer。

​qemu-img 转换:raw、qcow2、qed、vdi、vmdk、vhd虚拟磁盘格式

qemu-img 转换:raw、qcow2、qed、vdi、vmdk、vhd ¶ 所述的qemu-IMG转换命令可以执行多种格式,包括之间的转换qcow2,qed, raw,vdi,vhd,和vmdk。 qemu-img 格式字符串 ¶ 图片格式 qemu-img 的参数 QCOW2(KVM、Xen) qcow2 QED (KVM) qed 生的 raw VDI (VirtualBox) vdi VHD (Hyper-V) vpc VMDK (VMware) vmdk 本示例将一个名为的原始图像文件转换为image.img qcow2 图像文件。 $ qemu-img convert -f raw -O qcow2 image.img image.qcow2 运行以下命令将 vmdk 映像文件转换为原始映像文件。 $ qemu-img convert -f vmdk -O raw image.vmdk image.img 运行以下命令将 vmdk 映像文件转换为 qcow2 映像文件。 $ qemu-img convert -f vmdk -O qcow2 image.vmdk image.qcow2 运行以下命令将 qcow2 映像文件转换为vmdk 映像文件。

xorg-x11-服务器 (SL7)

概要:重要:xorg-x11-server 安全更新 公告 ID:SLSA-2022:8491-1 发布日期:2022-11-16 CVE 编号:CVE​​-2022-3550 CVE-2022-3551 — 安全修复: * xorg-x11-server:xkb/xkb.c 中的 _GetCountedString() 缓冲区溢出 (CVE-2022-3550) * xorg-x11-server:xkb/xkb.c 中 ProcXkbGetKbdByName() 的内存泄漏 (CVE-2022-3551) 有关安全问题的更多详细信息,包括影响、CVSS 分数、致谢和其他相关信息,请参阅 CVE — SL7 x86_64 xorg-x11-server-Xephyr-1.20.4-19.el7_9.x86_64.rpm xorg-x11-server-Xorg-1.20.4-19.el7_9.x86_64.rpm xorg-x11-server-common-1.20。 4-19.el7_9.x86_64.rpm xorg-x11-server-debuginfo-1.20.4-19.el7_9.x86_64.rpm xorg-x11-server-Xdmx-1.20.4-19.el7_9.x86_64.rpm xorg-x11 -server-Xnest-1.20.4-19.el7_9.x86_64.rpm xorg-x11-server-Xvfb-1.20.4-19.el7_9.x86_64.rpm xorg-x11-server-Xwayland-1.20.4-19.el7_9 .x86_64.rpm xorg-x11-server-debuginfo-1.20.4-19.el7_9.i686.rpm xorg-x11-server-devel-1.20.4-19.el7_9.i686.rpm xorg-x11-server-devel- 1.20.4-19.el7_9.x86_64.rpm noarch xorg-x11-server-source-1.20.4-19.el7_9.noarch.rpm – 科学 Linux 开发团队

逻辑漏洞之用户名枚举

学习目标: 从代码上分析用户名枚举 学习内容: 使用python写一个简单的账户密码登录分析问题整改问题 1.使用python写一个账户、密码登录次数判断代码 trycount=0 for i in range(3): #接收用户名和密码 username=input('请输入您的登录账户:') password=input('请输入您的密码:') trycount+=1 #判断用户名密码是否正确 if username =="admin": if password=="admin888": print("登录成功") break else: print("用户名或密码错误") print(f"您还有{3-trycount}次机会") else: print ("用户错误") print (f"你还有{3-trycount}次机会") 判断代码内容为输入用户账户判断账户正确,再输入密码判断错误(就引起了逻辑问题用户名枚举),总体反映用户和密码输入次数限制,可以防止暴力破解。 2.效果 安全问题就是给我们机会去使用别人的账户登录系统去看内部活动。 3.防护 防护其实很简单就是不管账户、密码任何一方输入正确都是使用“账户或密码输入错误”可以有效防止用户名枚举。 其他建议: 1.输入次数限制(有效防止暴力破解) 2.登录密码符合复杂程度(特殊字符+大小写字母+数字如何密码长度达10位以上破解年限将长达十几年)。

linux Apache服务配置

首先恢复虚拟机1、虚拟机2快照,重新准备环境,还原为初始状态,也就是刚刚安装好虚拟机的状态: 虚拟机1-单网卡-仅主机模式-192.168.100.3-Web服务器 虚拟机2-单网卡-仅主机模式-192.168.100.4-Linux客户端 物理机(windows系统宿主机)-Windows客户端 两台虚拟机保证本地yum源配好!! 两台虚拟机均关闭SELinux与firewalld防火墙!! 验证yum源是否配置成功 验证防火墙是否关闭 验证selinux的状态是否为不执行但是产生警告 ------------------------------------------------------- 任务一、使用Apache发布个人主页 【1】通过 yum 源安装 Apache 服务 Centos 7系统上安装 Apache 软件有多种方式,比如源码编译安装、rpm 方式安装、yum源方式安装等。因为前面的课程中已经配置好了 yum 源,在此直接通过 yum 方式进行安装。 //-y选项表示不再询问直接安装安装完成后,可以通过rpm命令查看是否已经安装。 [root@localhost ~]# yum install -y httpd [root@localhost ~]# rpm -qa |grep httpd 如果能够在输出中看到 httpd-2.4.6-93.el7.centos.x86_64 这个包,则说明安装成功。 【2】运行 Apache 服务 启动服务。 [root@localhost ~]# systemctl start httpd 查看服务运行状态。 [root@localhost ~]# systemctl status httpd 通过该命令可以查看服务是否处于运行状态,比如结果中有 active (running)字样,表示服务正在运行中。 设置服务开机自启动。 [root@localhost ~]# systemctl enable httpd 设置为开机自启动后,当开机或者重启操作系统后,httpd自动运行 浏览器查看 Apache 默认测试页面。

Jmeter压测工具详解

Jmeter压测工具详解 1. Jmeter概述1.1 Jmeter简介1.2 Jmeter适用场景 2. Jmeter安装配置2.1 下载安装2.2 环境配置(可不配)2.3 Jmeter启动 3. Jmeter安装插件管理工具3.1 JMeter Plugins Manager3.2 通过Plugins Manager安装插件 4. Jmeter与loadrunner的区别5. Jmeter的GET与POST请求5.1 Jmeter发送GET请求5.2 Jmeter发送POST请求 6. Jmeter并发测试7. Jmeter生成测试报告8. JMeter梯度测试、阶段性测试(每隔几秒增加几个线程直到一个数字停止增加)9. Jmeter注意事项9.1 content type不支持异常9.2 请求参数二选一9.3 JMETER 执行报错 Address already in use :connect 如何解决该问题 1. Jmeter概述 1.1 Jmeter简介 Apache JMetier是Apache组织开发的基于Java的压力测试工具。一款非常优秀的开源的性能测试工具。 1.2 Jmeter适用场景 适用的测试领域: 用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、 Java小服务程序、 CGI脚本、Java对象、数据库、 FTP服等器,等等。 JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。JMetor能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性, JMeter允许使用正则表达式创建断言。Apache jmeter可以用于对静态的和动态的资源(文件, Servlet» Perl脚本,java对象,数据库和查询, FTP服务器等等)的性能进行测试。接口测试数据库压力测试 一批量产生测试数据 2. Jmeter安装配置 2.1 下载安装 官网下载地址:http://jmeter.apache.org/download_jmeter.cgi jmeter是免安装的,下载解压配置环境变量即可使用。 解压之后状态 2.2 环境配置(可不配) jdk1.8环境配置:Java -version 查看jdk版本。

celery介绍

目录 官方 架构: celery 是独立的服务 celery包结构 celery执行异步任务,延时任务,定时任务 异步任务 延时任务 定时任务 django 使用celery 秒杀逻辑 双写一致性 官方 Celery 官网:Celery - Distributed Task Queue — Celery 5.2.7 documentation Celery 官方文档英文版:Celery - Distributed Task Queue — Celery 5.3.0b1 documentation Celery 官方文档中文版:Celery - 分布式任务队列 — Celery 3.1.7 文档 Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统 1. 完成异步任务:可以提高项目的并发量,以前用多线程实现项目的并发量,现在可以使用celery来做 2. 完成延时任务 3. 完成定时任务 架构: 消息中间件: broker 提交的任务【函数】都放在这里, celery本身不能提供消息中间件,需要借助于第三方: redis, rabbitmq 任务执行单元: worker,是真正执行任务的的地方, 一个个进程中执行函数 结果存储: backend, 函数return的结果都存储在这里, celery本身不提供结果存储,需要借助于第三方: redis 数据库, rabbitmq celery 是独立的服务 1, 可以不依赖任何服务器,通过自身命令来启动服务

相关对MIMO系统容量影响仿真

clear all; close all; clc M=5000; R=[0.2 0.95];%相关矩阵 SNR=[0:2:20]; figure; xlabel('SNR[dB]','fontsize',18); ylabel('容量(bps/Hz)','fontsize',18); title('相关信道的容量比较','fontsize',18); grid on; hold on; for l=1:length(R) R_t=eye(2); R_r=[1 R(l);R(l) 1]; for snr_idx=1:length(SNR) snr=10^(SNR(snr_idx)/10); for m=1:M Hw=(randn(2,2)+1i*randn(2,2))/sqrt(2); H=R_r^(.5)*Hw*R_t^(.5); C(m,snr_idx)=log2((det(eye(2)+snr*H*H'/2))); end Capacity(snr_idx,l)=mean(C(:,snr_idx)); end end plot(SNR,Capacity(:,1),'k-',SNR,Capacity(:,2),'kx-'); for l=1:length(R) R_t=eye(2); R_r=[1 R(l);R(l) 1]; for snr_idx=1:length(SNR) snr=10^(SNR(snr_idx)/10); for m=1:M Hw=(randn(2,2)+1i*randn(2,2))/sqrt(2); H=R_r^(.5)*Hw*R_t^(.5); [gamma,eigs]=pwr_modes(H,snr); C(m,snr_idx)=sum(log2(real(1+eigs.*gamma*snr/2))); end Capacity(snr_idx,l)=mean(C(:,snr_idx)); end end plot(SNR,Capacity(:,1),'k-.',SNR,Capacity(:,2),'kd-'); legend('R=0 CSI未知','R=0.95 CSI未知','R=0 CSI已知','R=0.95 CSI已知'); %计算gamma和奇异值子程序,子程序名称:pwr_modes.m function [g,l]=pwr_modes(H,rho) %输入参数:H为信道矩阵,rho为信噪比 %输出参数:g为gamma值,l为奇异值eigs %这部分程序参看注水算法 N_tilde=size(H,1); l_tilde=real(eig(H*H')); l=l_tilde(find(l_tilde~=0));%返回矩阵或向量中非零元素的索引值 N=length(l); mu=(N_tilde+sum(N_tilde.

安卓的工程目录文件夹简单介绍

当创建了一个安卓工程之后,系统会生成很多文件夹,那么这些文件夹都存放的是什么东西呢? src:存放java代码,有包,有文件。相当于普通java程序的src文件夹。 gen:存放自动生成的文件。R.java存放的是程序的页面、按键、文本等的id。 Android 4.4和Android Private Libaries:安卓的相关库 assets:存放一些资源,程序运行时的配置文件、图片等 bin:程序编译后生成的文件、apk等。(apk也就是安卓的安装包,想要在手机上安卓编写的APP,就需要apk文件) libs:开发的一些依赖库 res: drawable:一般用来存放app程序运行需要用到的图片,根据图片分辨率放在不同的drawable文件夹 layout:存放布局文件的文件夹(一个安卓页面对应一个布局) 剩下的menu、values就是存放一些参数和一些自定义控制文件 8. AndroidManifest.xml:APP的配置。 权限:网络访问权限、名片夹访问权限、相机访问权限等。 目标机器的SDK版本 APP的名字 APP的图标 配置第一个被加载、启动页面

网上蛋糕商城JSP页面

任务目标: 使用JSP页面实现网上蛋糕商城注册页面,实现效果如图所示 实现步骤: 1.创建顶部文件 创建用于显示页面导航栏的顶部文件header.jsp,代码实现如下 <%--<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>--%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>Title</title> </head> <body> <%-- 引入初始化Servlet--%> <jsp:include page="/init"></jsp:include> <div class="header"> <div class="container"> <nav class="navbar navbar-default" role="navigation"> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li><a href="#">首页</a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">商品分类<b class="caret"></b></a> <ul class="dropdown-menu columns-2"> <c:forEach var="type" items="${ sessionScope.alltypes }"> <li class="list-group-item">${type.name}</li> </c:forEach> </ul> </li> <li><a href="#">热销</a></li> <li><a href="#">新品</a></li> <li><a href="

什么是零拷贝

零拷贝是老生常谈的问题,无论是Kafka还是Netty等都用到了零拷贝的知识,那究竟什么是零拷贝呢 什么是零拷贝 “零”:表示次数是0,它表示拷贝数据的次数是0 “拷贝”:指数据从一个存储区域转移到另一个存储区域 合起来,那零拷贝就是不需要将数据从一个存储区域复制到另一个存储区域。 零拷贝是指计算机执行IO操作时,CPU不需要将数据从一个存储区域复制到另一个存储区域,进而减少上下文切换以及CPU的拷贝时间。它是一种IO操作优化技术。 传统IO的执行流程 比如想实现一个下载功能,服务端的任务就是:将服务器主机磁盘中的文件从已连接的socket中发出去,关键代码如下 while((n = read(diskfd, buf, BUF_SIZE)) > 0) write(sockfd, buf, n); 传统的IO流程包括read以及write的过程 read:将数据从磁盘读取到内核缓存区中,在拷贝到用户缓冲区 write:先将数据写入到socket缓冲区中,最后写入网卡设备 流程图如下 1.应用程序调用read函数,向操作系统发起IO调用,上下文从用户态切换至内核态 2.DMA控制器把数据从磁盘中读取到内核缓冲区 3.CPU把内核缓冲区数据拷贝到用户应用缓冲区,上下文从内核态切换至用户态,此时read函数返回 4.用户应用进程通过write函数,发起IO调用,上下文从用户态切换至内核态 5.CPU将缓冲区的数据拷贝到socket缓冲区 6.DMA控制器将数据从socket缓冲区拷贝到网卡设备,上下文从内核态切换至用户态,此时write函数返回 从流程图中可以看出传统的IO流程包括***4次上下文的切换***,4次拷贝数据(两次CPU拷贝以及两次DMA拷贝) 前置知识 内核空间和用户空间 我们电脑上跑着的应用程序,其实是需要经过操作系统,才能做一些特殊操作,如磁盘文件读写、内存的读写等等。因为这些都是比较危险的操作,不可以由应用程序乱来,只能交给底层操作系统来。 因此,操作系统为每个进程都分配了内存空间,一部分是用户空间,一部分是内核空间。内核空间是操作系统内核访问的区域,是受保护的内存空间,而用户空间是用户应用程序访问的内存区域。 以32位操作系统为例,它会为每一个进程都分配了4G(2的32次方)的内存空间。 内核空间:主要提供进程调度、内存分配、连接硬件资源等功能 用户空间:提供给各个程序进程的空间,它不具有访问内核空间资源的权限,如果应用程序需要使用到内核空间的资源,则需要通过系统调用来完成。进程从用户空间切换到内核空间,完成相关操作后,再从内核空间切换回用户空间。 用户态和内核态 如果进程运行于内核空间,被称为进程的内核态。 如果进程运行于用户空间,被称为进程的用户态。 什么是上下文切换 什么是上下文 CPU 寄存器,是CPU内置的容量小、但速度极快的内存。而程序计数器,则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。它们都是 CPU 在运行任何任务前,必须的依赖环境,因此叫做CPU上下文。 什么是上下文切换 它是指,先把前一个任务的CPU上下文(也就是CPU寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。 一般我们说的上下文切换,就是指内核(操作系统的核心)在CPU上对进程或者线程进行切换。进程从用户态到内核态的转变,需要通过系统调用来完成。系统调用的过程,会发生CPU上下文的切换。 虚拟内存 现代操作系统使用虚拟内存,即虚拟地址取代物理地址,使用虚拟内存可以有2个好处: 1.虚拟内存空间可以远远大于物理内存空间 2.多个虚拟内存可以指向同一个物理地址 正是多个虚拟内存可以指向同一个物理地址,可以把内核空间和用户空间的虚拟地址映射到同一个物理地址,这样的话,就可以减少IO的数据拷贝次数,示意图如下 DMA技术 DMA,英文全称是Direct Memory Access,即直接内存访问。DMA本质上是一块主板上独立的芯片,允许外设设备和内存存储器之间直接进行IO数据传输,其过程不需要CPU的参与。 简单的说它就是帮住CPU转发一下IO请求以及拷贝数据,那为什么需要它呢?其实主要是效率问题。它帮忙CPU做事情,这时候,CPU就可以闲下来去做别的事情,提高了CPU的利用效率。大白话解释就是,CPU老哥太忙太累啦,所以他找了个小弟(名叫DMA) ,替他完成一部分的拷贝工作,这样CPU老哥就能着手去做其他事情。 下面看下DMA具体是做了哪些工作 1.用户应用程序调read函数,向操作系统发起IO调用,进入阻塞状态等待数据返回 2.CPU接到指令后,对DMA控制器发起指令调度 3.DMA收到请求后,将请求发送给磁盘 4.磁盘将数据放入磁盘控制缓冲区并通知DMA 5.DMA将数据从磁盘控制器缓冲区拷贝到内核缓冲区 6.DMA向CPU发送数据读完的信号,CPU负责将数据从内核缓冲区拷贝到用户缓冲区 7.用户应用进程由内核态切回用户态,解除阻塞状态

Ubuntu20.04安装orb-slam3

说明:笔者是在一个全新的系统上面配置的。安装时间:2022.10.30 环境:虚拟机;VMare Workstation16 Pro,运行内存16G. 之后,笔者在Ubuntu18.04的机器上安装过,也能使用. 注意orb-slam3的版本. 版本说明: orb-slam3 : v0.4-beta.cmake : 3.16.3pangolin : v0.8openCV : 4.4.0Eigen : 3.3.7pyhon : 2.7.18boost : 1.70.0 注:笔者使用了科学上网工具 文章目录 0.安装cmake、git1.安装Eigen32.0安装pangolin(方法一)2.1安装Pangolin(方法二)3.安装Python4.安装openCV4.4.05.安装ORB-SLAM6.安装ORB-SLAM可能遇到的错误 0.安装cmake、git cmake安装: sudo apt-get update #软件更新 sudo apt install cmake # 安装cmake3.16.3 cmake --version #查看cmake 版本 g++ install sudo apt install g++ git安装: sudo apt install git 1.安装Eigen3 environment: Could NOT find OpenGL sudo apt-get install libegl1-mesa-dev environment: Could not find GLEW sudo apt install libglew-dev apt安装:

用python实现简易计算器

最近学习了字符串,运算符,条件语句,循环语句,我在想可以用我最近学的东西做什么? 看到运算我就想到了可以做一个简易的计算器. 实现流程 1.定义函数 2.请用户选择运算方法 3.请用户输入要运算的两个数 4.运算出结果 代码实现 定义加减乘除四种函数,在后续的运算中调用这四个函数输出结果. 定义加减乘除四种运算的函数 定义函数要用def 首先定义加法函数add在里面传入参数x,y 返回值X加y 定义subtract减法函数 ,返回值x减y 定义multiply乘法函数,返回值x乘y 定义divide除法函数,返回值x除y. 定义函数: # 定义函数 def add(x, y): """相加""" return x + y def subtract(x, y): """相减""" return x - y def multiply(x, y): """相乘""" return x * y def divide(x, y): """相除""" return x / y 创建变量num1,用input函数使用户输入第一个要计算的数字,用int函数将用户输入的值转变成整形. 同样创建变量num2,用input函数使用户输入第二个要计算的数字. 接着用print函数提示用户输入运算运算符. 打印运算 1.相加 2.相减 3.相乘 4.相除 创建变量choice. 用input函数获取用户输入值. 输入值: print("选择运算:") print("1、相加") print("2、相减") print("3、相乘") print("4、相除") answer = input('是否开始计算(y/n)?

帧同步学习记录

帧同步 参考链接 细谈网络同步在游戏历史中的发展变化(上) 细谈网络同步在游戏历史中的发展变化(下) 网易雷火 cocos2dx lua socket 使用cocos creator 项目总结二(战斗帧同步解析)2 天做了个多人实时对战,200ms 延迟竟然也能丝滑流畅? 不是标题党,讲的非常完善清晰,而且还有状态同步的例子 Unity游戏开发 帧同步战斗框架 理论篇Unity游戏开发 帧同步战斗框架 框架篇 两篇学会帧同步 Unity帧同步解决方案(一) Unity帧同步解决方案(二) Unity 游戏开发总结 大佬的专栏,还有很多Unity的知识 《王者荣耀》技术总监复盘回炉历程:没跨过这三座大山,就是另一款MOBA霸占市场了 一. 简介 帧同步和状态同步是目前最常用的游戏同步设计。它们并不互斥,可以一起相辅相成的出现于同步逻辑中。 下图来自 Unity游戏开发 帧同步战斗框架 理论篇 二. 客户端逻辑 帧同步的逻辑都在客户端,所以首要保证的是不同客户端同一帧内的计算结果一定要相同。 可控的客户端的逻辑逻辑显示分离可控的随机 1).客户端帧同步逻辑 unity游戏开发 帧同步战斗框架 框架篇 帧同步的逻辑全都在客户端计算,必须保证每个客户端相同帧的计算结果是一样的。 要完全控制客户端的计算流程,比如,移动,碰撞,动画事件,延迟处理(等待s秒)等。 渲染因为跟不同硬件设备以及引擎有着相对较强的关联,所以客户端会设计成逻辑与显示分离。 渲染部分可以交给引擎提供的更新,而逻辑更新必须由客户端实现的Update控制。 1.主要逻辑 Update(delta){ 事件帧 逻辑帧 } UpdateRender(delta){ 渲染帧 } 事件帧:帧同步的帧,包含某段时间内所有玩家的操作逻辑帧:游戏的所有逻辑渲染帧:显示部分的更新,比如坐标 1个事件帧 = n个逻辑帧 = n*m 个渲染帧 2.统一时间间隔 事件帧和逻辑帧是一起更新的,逻辑帧间隔小于等于事件帧。使用更小的间隔来判断 deltaTime。 要注意的是,Update 传入的间隔时间不是固定的,是变化的。比如 前台 -> 后台,后台 -> 前台。这时候传入的时间就会很大。

MIMO系统平均容量与中断容量仿真

(1)发送端已知状态信息与发送端未知信道状态信息时,MIMO系统平均容量随信噪比变化曲线仿真 (2)发送端已知状态信息与发送端未知信道状态信息时,MIMO系统中断容量随信噪比变化曲线仿真 (3)发送端已知状态信息与发送端未知信道状态信息时,MIMO系统中断容量随天线数变化曲线仿真 clear all; close all; clc; M=1000;%循环次数 Nt=[2:2:8];%发送端天线个数 SNR=[0:2:20];%信噪比,单位为dB figure(1); title('MIMO系统平均容量 vs SNR','fontsize',18); xlabel('SNR[dB]','fontsize',18); ylabel('容量(bps/Hz)','fontsize',18); grid on; hold on; figure(2); title('MIMO系统10%中断容量 vs SNR','fontsize',18); xlabel('SNR[dB]','fontsize',18); ylabel('中断容量(bps/Hz)','fontsize',18); grid on; hold on; for n=1:length(Nt) N=Nt(n); for m=1:M H=(randn(N,N)+1i*randn(N,N))/sqrt(2);%产生瑞利信道 for snr_idx=1:length(SNR) rho=10^(SNR(snr_idx)/10); %发送端未知信道状态信息情况下,MIMO系统平均容量,参见式(4-10) CU(m,snr_idx)=log2(real(det(eye(N)+rho*H*H'/N))); %发送端已知信道状态信息情况下,MIMO系统平均容量,参见式(4-16) [gamma,eigs]=pwr_modes(H,rho); %计算式(4-16)中的gamma和奇异值 CK(m,snr_idx)=sum(log2(real(1+eigs.*gamma*rho/N))); end end C_unknown(:,n)=mean(CU)';%对M个未知CSI的MIMO系统容量取均值 C_known(:,n)=mean(CK)';%对M个已知CSI的MIMO系统容量取均值 %统计中断容量 for snr_idx=1:length(SNR) [cdf_u,co_u]=hist(CU(:,snr_idx),100); cdf_u=cumsum(cdf_u); idx_ten_percent=find(abs(cdf_u-100) == min(abs(cdf_u-100))); C_unknown_outage(snr_idx,n)=co_u(idx_ten_percent(1)); [cdf_k,co_k]=hist(CK(:,snr_idx),100); cdf_k=cumsum(cdf_k); idx_ten_percent=find(abs(cdf_k-100) == min(abs(cdf_k-100))); C_known_outage(snr_idx,n)=co_k(idx_ten_percent(1)); end figure(1); plot(SNR,C_unknown(:,n),'k-'); plot(SNR,C_known(:,n),'k-.'); figure(2); plot(SNR,C_unknown_outage(:,n),'k-'); plot(SNR,C_known_outage(:,n),'k-.

单细胞分析:细胞聚类(十)

导读 前面我们已经整合了高质量的细胞,现在我们想知道细胞群中存在的不同细胞类型 ,因此下面将进行细胞聚类分析。 全部流程 学习目标 描述评估用于聚类的主成分数量的方法 根据重要的主成分对细胞进行聚类 1. 目标 生成特定细胞类型的簇并使用已知细胞类型的标记基因来鉴定簇的身份。 确定簇是否代表真正的细胞类型或是由于生物学或技术变异而产生的簇,例如细胞周期 S 期的细胞簇、特定批次的簇或具有高线粒体含量的细胞簇。 2. 挑战 生物或技术问题可能会导致鉴定出质量差的簇 识别每个簇的细胞类型 需要保持耐心,因为这可能在聚类和标记基因识别之间进行重复(有时甚至会回到 QC 过滤步骤) 3. 推荐 在执行聚类之前,对您对存在的细胞类型有一个很好的了解。了解您是否期望细胞类型复杂性较低或线粒体含量较高,以及细胞是否正在分化。 如果您有多个条件的数据,执行整合步骤通常很有帮助。 如果需要并且有实验条件,则回归 UMI 的数量(默认情况下使用 sctransform)、线粒体含量和细胞周期。 识别任何无用簇以进行删除或重新进行QC 过滤。无用簇可能包括那些具有高线粒体含量和低 UMI/基因的簇。如果由许多细胞组成,则返回利用 QC 过滤掉,然后重新整合/聚类可能会有所帮助。 如果没有将所有细胞类型检测为单独的簇,请尝试更改分辨率或 PC 数量。 4. Set up 在开始之前,创建一个名为 clustering.R 的新脚本。 接下来,让我们加载需要的所有库。 # 单细胞聚类 # 加载包 library(Seurat) library(tidyverse) library(RCurl) library(cowplot) 5. PCs 鉴定 为了克服 scRNA-seq 数据中任何单个基因表达中的广泛技术噪音,Seurat根据从整合的最可变基因的表达中获得的 PCA分数将细胞分配到簇种,每个 PC 基本上代表一个“metagene”,结合相关基因集的信息。因此,确定要在聚类步骤中包含多少 PC 对于确保我们捕获数据集中存在的大部分变异或细胞类型非常重要。 在决定哪些 PC 用于下游聚类分析之前,对 PC 探索很有用。 (a) 探索 PC 的一种方法是使用热图来可视化选定 PC 的最多变异基因,其中基因和细胞按 PCA 分数排序。这里的想法是查看 PC 并确定驱动它们的基因对于区分不同的细胞类型是否有意义。

设计模式学习笔记 - 组合模式

设计模式学习笔记 - 组合模式 一、学校院系展示问题二、传统方案解决学校院系展示问题三、组合模式介绍1、基本介绍2、组合模式原理 四、组合模式解决学校院系展示问题五、组合模式在JDK集合的源码分析六、组合模式的注意事项和细节 一、学校院系展示问题 展示一个学校院系结构:要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。 二、传统方案解决学校院系展示问题 (1)将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的。实际上在一个页面中展示出学校的院系组成(一个学校有多个学院,一个学院有多个系),这种方案不能很好实现的管理的操作,比如添加、删除、遍历学院和系等。 (2)解决方案:把学校、院、系都看做是组织结构,它们之间没有继承的关系,而是一个树形结构,可以更好的实现管理操作。 也就是使用组合模式来实现。 三、组合模式介绍 1、基本介绍 组合模式(Composite Pattern),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示“整体-部分”的层次关系。 组合模式属于结构型模式。 组合模式依据树形结构来组合对象,用来表示部分以及整体层次。 组合模式使得用户对单个对象和组合对象的访问具有一致性,即组合能让客户以一致的方式处理个别对象以及组合对象。 2、组合模式原理 类图: 说明: (1)Component:这是组合中对象声明接口,在适当情况下,实现所有类共有的接口默认行为,用于访问和管理Component子部件,Component可以是抽象类或者接口。 (2)Composite:非叶子节点,用于存储子部件, 在Component接口中实现子部件的相关操作,比如add(增加)、remove(删除)。 (3)Leaf:在组合中表示叶子节点,叶子节点中没有子节点。 四、组合模式解决学校院系展示问题 类图: 实现代码: package com.etc.design.composite; public abstract class OrganizationComponent { // 名字 private String name; // 说明 private String des; //默认实现 protected void add(OrganizationComponent organizationComponent) { throw new UnsupportedOperationException(); } //默认实现 protected void remove(OrganizationComponent organizationComponent) { throw new UnsupportedOperationException(); } // 构造器 public OrganizationComponent(String name, String des) { super(); this.

C#窗体怎样实现自适应大小(一)

以前用串口助手时,没有发现什么不对劲的地方,但自己写的上位机控件,点击窗口最大化时,界面却没有按相应的比例放大,让人看得很不舒服,其实,知道窗口有自适应这一说法,可在C#里如何实现呢? 在C#编程里,使用布局控件实现窗体的自适应大小,相信很多朋友都用过吧,用过的不要吐糟,没有用过的可以参考参考,谢谢各位狼友。 1 先介绍两个控件 tableLayoutPanel和flowLayoutPanel 这两个控件,在 工具箱---容器 里面 tableLayoutPanel 是列表布局 flowLayoutPanel 是流布局 2 tableLayoutPannel 列表布局 2.1 新建一个窗口Form 2.2 拖一个tableLayoutPanel到窗体上 2.3 将其Dock属性设置为Fill,也就是中间那个区域 这样tableLayoutPanel就会部填充窗口 2.4 选择控件右上角的小三角,可以编辑行和列,在弹出的窗体中设置百分比或者设置固定值,比如说在窗口放大时,有些控件不希望改变大小,就可以在绝对(B)写入固定相素值 可以添加行或列,并设置百分比值或绝对值,也可以选择自动调整大小 2.5 到这里,就可以方便的向列表存放其它控件了 如拖一个 groupBox到第单元格1,然后将其属性 Dock 设置为Fill,这样groupBox1就自动填充满单元格1,如果不想填充满,也可以设置它的anchor属性,让它居中对齐,有空再试试这个功能。 2.5 如果想让控制跨度放置,如下面的textBox 选中控件,ColumnSpan 设置为2,然后将Dock 设置为Fill 如果想要放多个控件,比如单元格1按2个button,就先放一个groupBox,再拖两个button进去,就可以了。 3 如果要自适应屏幕大小,就可以在窗体打开事件中加上下面这段代码 4 总结 像我示范的窗体那样有很多groupBox控件的话,是需要用相同的办法在groupBox控件中也加入布局控件进行上面相同的操作,否则就会出现groupBox缩小了,但是groupBox里面的子控件却被覆盖掉而显示不出来的情况。如果想要实现局部放大或缩小,也就是有些地方不希望它改变大小,只希望固定控件去改变大小,这种情况下只需要前面几行固定像素,让希望变化的控件为百分比大小即可. 如下在单元4中,再拖入一个tableLayoutPannel,设置好行列,就可以各放gruopBox,看起很舒服吧。 如果要实现直接自适应屏幕大小可以这样做(在上述窗体设计操作完成后): 在主窗体构造函数末尾或者主窗体Load事件中写上 //获取当前屏幕显示区域大小,让窗体长宽等于这个值,这里不包含任务栏哦 this.Width = Screen.PrimaryScreen.WorkingArea.Width; //这样窗体打开的时候直接就是屏幕的大小了 this.Height = Screen.PrimaryScreen.WorkingArea.Height;

OFDM信号的产生与解调

(1)通过对OFDM信号各个子载波赋共轭对称的数据产生一个实OFDM符号 (2)给OFDM符号加循环前缀与循环后缀 (3)给OFDM符号加窗。在程序中加入的是升余弦窗的滚降系数,观察加入不同升余弦窗对OFDM信号频谱的影响 (4)信道采用加性高斯白噪声信道,可以通过改变信噪比改变信道环境,从而在接收端通过误码率或星座图观察信道对OFDM信号传输的影响 (5)去除循环前缀与循环后缀,对OFDM信号进行解调 clear all; close all; carrier_count=200; %这个程序中OFDM子载波个数为512,其中400即carrier_count*2为数据符号,其余赋0值 symbols_per_carrier=20; %每个子载波上的符号数,在这里即为OFDM符号的个数 bits_per_symbol=4; %OFDM符号的每个子载波上传输的比特数。4bit通常采用16QAM调制 IFFT_bin_length=512;%FFT长度,也即一个OFDM符号的子载波个数 PrefixRatio=1/4; %循环前缀的比值,即循环前缀与OFDM符号长度的比值,通常在1/6~1/4之间 GI=PrefixRatio*IFFT_bin_length;%保护间隔的长度,这里为128 beta=1/32;%升余弦窗的滚降系数 GIP=beta*(IFFT_bin_length+GI);%循环后缀的长度,这里为20 SNR=30;%本程序考虑加性高斯白噪声信道,这里信噪比为30dB %OFDM信号产生 baseband_out_length=carrier_count*symbols_per_carrier*bits_per_symbol; %计算传输数据总的比特数,为200*20*4bit=16000bit,16000bit的构成为20个OFDM符号,每个OFDM符号200个子载波,每个子载波传输4bit信息 carriers=(1:carrier_count)+(floor(IFFT_bin_length/4)-floor(carrier_count/2));%floor函数:朝负无穷大方向取整 %(floor(IFFT_bin_length/4)-floor(carrier_count/2)=28 %计算OFDM符号子载波的序号,carriers中存放的序号是29~228 conjugate_carriers=IFFT_bin_length-carriers-2; %计算OFDM符号子载波的序号,conjugate_carriers中存放的序号是282~481 rand('twister',0);%rand函数(用于产生随机数) twister产生非重复的随机数 baseband_out=round(rand(1,baseband_out_length));%round函数用于舍入到最接近的整数 注:round(2.5) = 3; %产生16000bit待传输的二进制比特流。这里存放的是发送的二进制信号与后面解调后的二进制信号比较,可以计算误码率。 %16QAM调制并绘制星座图 complex_carrier_matrix=qam16(baseband_out); %调用子程序qam16进行16QAM调制。将baseband_out中的二进制比特流,每4bit转换为一个16QAM信号,即将二进制比特流每4bit转换为-3-3j、-3+3j、3-3j、3+3j、 %-1-3j、-1+3j、1-3j、1+3j、-3-j、-3+j、3-j、3+j、-1-j、-1+j、1-j、1+j中的一个。转换后complex_carrier_matrix为1*4000矩阵 complex_carrier_matrix=reshape(complex_carrier_matrix',carrier_count,symbols_per_carrier)';% A = reshape(A,m,n)将A 的行列排列成m行n列 %转换complex_carrier_matrix中的数据为carrier_count*symbols_per_carrier矩阵,这里为200*20矩阵 figure(1); plot(complex_carrier_matrix,'*r');%绘制16QAM星座图 axis([-4,4,-4,4]); title('16QAM调制后星座图'); grid on;%grid on是matlab中的一种函数,表示在画图的时候添加网格线 。 %IFFT,即进行OFDM调制 IFFT_modulation=zeros(symbols_per_carrier,IFFT_bin_length);%matlab中zeros函数是用于返回一个double类零矩阵 %将symbols_per_carrier*IFFT_bin_length矩阵赋0值,这里将20*512矩阵赋0值。 %这里512是IFFT的长度,也是OFDM符号的子载波个数 IFFT_modulation(:,carriers)=complex_carrier_matrix; %将20*200的complex_carrier_matrix的数据赋给IFFT_modulation的第29~228列,即给512个子载波中的29~228子载波赋值 IFFT_modulation(:,conjugate_carriers)=conj(complex_carrier_matrix);%conj函数:用于计算复数的共轭值 %将20*200的complex_carrier_matrix的数据赋给512个子载波中的第282~481个子载波,这段程序构造了512个子载波的OFDM符号,并且各个子载波上的 %数据是共轭对称的。这样做的目的是经过IFFT后形成的OFDM符号均为实数。另外,在512个子载波中,仅有400个子载波为数据,其余为0值,相当于补零。 %补零的目的是通常IFFT的长度应该为2的整数次幂 signal_after_IFFT=ifft(IFFT_modulation,IFFT_bin_length,2); %IFFT实现OFDM调制 time_wave_matrix=signal_after_IFFT; figure(2); plot(0:IFFT_bin_length-1,time_wave_matrix(2,:)); %画一个OFDM信号的时域表现 axis([0,512,-0.

[附源码]java毕业设计网上书店管理系统

项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。 环境需要 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.是否Maven项目: 否;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目 6.数据库:MySql 5.7/8.0等版本均可; 毕设帮助,指导,本源码分享,调试部署(见文末) 3.1系统说明 网上书店管理系统是一个中小型的网上管理平台,人们可以在网络上进行订购图书,不用出门就可以找到自己想要的图书,本网站是属于图书商城类型的网站。用户可以在图书信息里面找到用户自己想要订购的图书,可把多样图书一起进行参考,然后提交进行订购流程。管理员可以通过对图书信息的管理、用户资料的管理等来对系统进行日常的更新与维护。 3.2系统功能的分析 整个网上书店管理系统为了便于用户订购与管理员管理,采用了以下几大功能管理模块,包括管理员与用户的设计: 用户模块:该模块包含了几个子模块包括 用户登录:用户登录功能是用来识别已在本网站注册过的用户,能根据用户的信息方便的为用户提供服务。最重要的是,系统需要登记用户所订购的图书的信息等等一些的情况,最后为用户生成订单。 用户注册账号:填写相关用户信息的资料,用于用户登录本网站,进行用图书的订购。包括用户的用户账号、密码、用户姓名、用户手机等等信息,可让用户先登录本系统,然后修改自己的信息,用户只有通过注册成为本网站的用户,才能在本网站页面订购图书,否则只能浏览网页上的图书而不能进行订购。 用户资料修改:该模块功能主要是针对用户注册资料的修改,比如用户登录到本系统中,想修改自己的密码、手机和用户名等信息可以通过用户资料修改页来实现用户资料修改。 浏览图书模块:该模块可让打开本网站的用户看到网站上未订购的图书,不管是登录的用户还是未登录的用户都可以查看本网站上的图书。 订购图书模块:此模块功能只提供在本网站已注册的用户,先要登录本网站系统,然后在浏览页选择想订购的图书,然后选择订购功能,可选择修改用户所需的信息,通过此流程可向网站进行订购。 图书商城模块:管理员可以管理所有的图书,不同的图书可以分类到不同的列表,这样用户就可以快速找到想要的图书,其中可添加图书信息,可修改和删除上传的记录。 用户管理模块:管理员可查询、验证在本网站注册的用户信息,同时有权限可以修改用户的信息,管理员也可以删除任何一个用户的账号。 订单管理模块:此模块可看到用户在网站订购的图书和一些关于订单的信息,还可查看是否执行些订单。 3.3系统的设计思路 关于网上书店管理系统,我找到许多的电子商城设计的书籍,对SSM进行了更进一步的了解,在整体设计方面选择了比较清新的颜色,网站网页的颜色不要过于花哨,要能使整个页面看起来很统一,所以选择了比较简洁大方的设计。数据库采用的是mysql数据库,本网站对用户进行了权限的设计,为了数据库的安全普通的用户只拥有浏览图书页面的功能,而且订购图书的话,就需要先到用户注册页面去注册一个属于自己的账号,然后通过登录然后才能进行订购。最后,在主要功能模块都能实现之后,再对整个网站进行反复的测试与修改,这样就能达到自己理想的效果。 3.4系统的设计思想 一个优秀的设计作品,必然要有一个正确的构想,通过选择合理的开发工具、数据结构和操作系统来构成一个完善的网上书店管理系统,根据用户的实际需求,本网上书店管理系统的设计按照以下的原则来进行设计。 实用性 本网上书店管理系统以用户订购需求为目标,以方便使用本系统的用户为原则,同时加入一些先进的设计理念。根据用户不同的需求制作一个操作界面简单、模块功能完善、便于管理的平台,能够充分的满足用户的需求并方便于本网站的管理人员对网站实行管理。 可靠性 一个好的网站必须具有高的可靠性,该系统通过结合先进的结构设计和数据的安全性,可以保证本系统具有高可靠性还有容错性,便于本系统不会出现一些不必要的错误信息,妨碍网站的管理。 智能性 本系统的设计要求便于网站的管理员管理本网站,用户可以根据自己的需求通过不同的模块入口进入不同的图书浏览页,通过后台图书列表的编辑与更新,可使消费者看到最新的图书信息,并且方便为更多的用户提供服务。 扩展性与灵活性 系统的模块设计主要以方便网站业务拓展和方便用户需求为目标,要求消费者能够很方便的浏览图书,并通过自身的需求能够快速搜索到自己想订购的图书。 3.5系统功能结构 用户管理功能 该部分内容提供用户注册、用户资料修改、图书商城、图书资讯、个人中心、购物车等等,用户能够进行用户信息的注册、用户信息的修改和提交订单功能。 管理员管理功能 该部分内容包含了个人中心、用户管理、图书分类管理、图书商城管理、系统管理、订单管理等。管理员可对所有的图书信息进行增、删、改、查,能对用户信息和订单进行管理,更新最近的图书信息。

Perforce使用教程

资源链接: https://download.csdn.net/download/love_xiaozhao/20534062 PerforceP4V入门-互联网文档类资源-CSDN下载 P4V文件状态命令速查表_p4v-互联网文档类资源-CSDN下载 PerforcexHelix分支策略_perforce分支-互联网文档类资源-CSDN下载 简介 Perforce是一款非常优秀的商业化版本管理工具,特别是对美术资源比较友好,更新速度快安全。 安装 首先安装Windows版的P4,双击安装包选择路径开始安装,这里的Server和Name可以先不填 启动P4登录输入服务器地址,输入分配的P4账号,自己创建一个新的Workspace 创建Workspace,名字的话包含项目,职位,员工名称,按照如下规则: 如果客户端让你确认证书指纹,请信任该指纹 重要:如果客户端让你选择编码方式,请选择UTF8编码 重要:修改Line ending:菜单栏中依次选择Connection–>Edit Current Workspace–>Advanced,然后选择UNIX 如果有多个库,点击Connection->Open Connection可以弹出设置服务器,用户,WorkSpace的窗口 或者点击Connection->Open Recent 可以直接切换打开过的服务器,用户,WorkSpace的配置 Workspace Workspace可以理解为,depot到本地的一个映射,对应本地的一个目录。例如: 开发的过程中可以有多个Workspace(例如一个用来开发,一个用来更新验证保证提交没有错误),但一般只推荐有一个Workspace WorkSpace可以切换,通过Connection->Switch To Workspace或者,如下图: 选择列表中的Workspace条目,双击切换,按DEL按键可以删除Workspace。出现问题的时候先确认下Worksapce是否正确。 WorkSpace可以编辑,通过Connection->Switch To Workspace,如下图: 可以修改Workspace的名字,本地目录以及一些高级参数 视图 目录区分为Depot标签页表示服务器上存储的文件目录结构,和Workspace表示本地存储的文件目录结构。 带感叹号的文件表示本地和服务器不一致,一般这种情况请先更新P4 文件目录里没有任何标记的文件是说明服务器上没有的: 红色问号的表示和服务器上不一样,有冲突的。这种文件不能直接合入: refresh某些情况下某些修改不能实时地在p4v中跟新,可以在view->refreash all。也可以在任意文件,目录或changelist右键中找到refresh相关的操作: 获取 在需要获取资源的目录上右键选择Get Latest Revision,这样可以拉取服务器最新的变更,【重要:每次提交前必须拉取一次】: 因为Get Latest Revision是拉取服务器最新变更,但是有时候我们希望覆盖本地的资源,或者是P4出了一些问题导致一些资源没有更新到。这时候我们可以选择Get Revision,然后在弹出的窗口勾选Force Operation,再点击Get Revision的按钮,强制从服务器上拉取最新的资源。这样服务器会把该目录下的资源强制拉取一遍,时间会比较长: 另外也可以对指定版本获取,一般用于回退到某个版本: Submit P4的提交是以Changelist为单位,所有修改过的文件会放在一个Changelist里。如下图 对要修改的文件,在文件上右键选择CheckOut,会弹出选择Changelist的窗口,可以放在默认或者新建的Changelist下: 对要删除的文件可以右键选择Mark for Delete,最好在depot窗口操作,【重要:删除的时候别忘了删除meta文件】,特别是目录也有meta: 对新增的文件,需要到WorkSpace视图下选择Mark for Add: Reconcile。P4提供一个便捷的方式可以直接对一个目录进行比较,找到和服务器上不同的文件,包括修改,删除,新增。找出之后会自动添加到Changelist中,自动完成上面三种操作: 有了Changelist之后,就可以提交了。右键Changelist选择Submit或者点击工具栏里的Submit图标,都会弹出 上传的提示框,输入上传的备注之后就可以提交了。建议每次提交前先对Changelist右键选择Revert Unchanged Files防止提交一些未修改过的文件。【重要:提交备注一定要写的详细清晰易懂】: Revert 当有文件不想提交的时候可以选择revert,revert之后会放弃本地修改,从服务器重新拉取最新的文件。 选中文件或者Changelist之后右键,在弹出菜单里可以选择Revert If Unchanged或者Revert。Revert If Unchanged是当本地文件和服务器一样没修改的时候会回退。Revert则是强行回滚,放弃本地修改。如果选择的是Changelist,则会对Changelist下的所有问题做Revert操作。 另外也可以通过工具栏的Revert按钮进行回退。

0-7【React】Hooks 原理解析(useState、useRef、useContext)

1.useState 流程: 1.首次渲染会执行函数组件App(),也就是函数会执行一次,useState(0)也会执行,打印出 n=0 2.当点击按钮调用 setN({n:n+1}) 改变n的值时,函数组件App()会再次被调用,重新渲染,打印出 n=1执行setN的时候:n会变吗?App()会重新执行吗? 1.n不会变,setN不会改变n,它只是把传入的新值存起来,方便后面useState去取新值 2.App()会重新执行,但每次执行 useState(0) 的时候,n每次的值是不同的useState useState肯定会从 setN 存入新值的地方取出新值存储位置 每个组件都有自己的数据存储仓库,我们将其命名为 state 注意:旧n和新n同时存在 这就是React的思想,永远产生新的对象,不改变旧值 1.1 分析 setN 1.setN 一定会修改数据 x,将 n+1 存入 x 2.setN 一定会触发 <App />重新渲染(re-render)useState useState 肯定会从 x 读取 n 的最新值x 每个组件都有自己的数据 x,我们将其命名为 _stateuseState 重新执行不重置 0 的原理 就是将函数内部变量的 _state 声明在 hook 外面作为全局变量,这样就不会每次调用 hook 都重置 //全局变量 let _state //API内部 const myUseState = initialValue =>{ //判断初始值是否存在,存在就是自己的值,不存在就赋初始值 _state = _state === undefined ? initialValue : _state } myUseState(0) 1.

mac系统安装搭载Windows系统虚拟机方法教程

我们都知道macOS系统虽然相对windows系统而言更稳定,但macOS系统中可使用的软件数量较windows系统而言要少很多。对于macOS系统应用少的问题,我们可以使用虚拟机来解决。那么,苹果虚拟机好用吗?整体而言是可以的。苹果虚拟机怎么装?苹果虚拟机的安装是一项非常复杂的操作。下面我们来看详细介绍吧! 一、苹果虚拟机好用吗 在苹果电脑安装虚拟机是解决macOS系统中应用程序少的一种方案,如果说在苹果电脑安装的windows虚拟机是否好用,只能说在苹果电脑安装的windows虚拟机可以用。下面我们就简单来说一下在苹果电脑安装虚拟机的优缺点吧! 图1:虚拟机 在苹果电脑安装虚拟机的优点:(1)可以在苹果电脑打开windows系统中的专属文件,以及安装windows系统;(2)两个系统可以同时运行,互不干扰,即使一个系统崩溃也不会影响到另一个系统。 缺点:(1)安装过程复杂;(2)运行时会大量占用计算机内存;(3)并非所有软件都可以安装,有些软件厂商会禁止用户使用虚拟机;(4)部分虚拟机在使用过程中并不流畅。 上面我们介绍了在苹果电脑安装虚拟机的优缺点,通过对比用户可以自己衡量苹果虚拟机是否好用。 什么是类虚拟机软件? 图8:CrossOver 类虚拟机软件工作原理:类虚拟机软件CrossOver不像虚拟机那样,在安装windows应用程序时需要现在苹果电脑中创建一个windows环境。CrossOver是将运行windows应用程序所需的配置文件安装至CrossOver的【容器】中,运行应用程序时,直接调用配置文件即可。 优点:(1)可以大量节省苹果电脑的运行空间;(2)成功的应用程序和苹果电脑自身应用程序没有什么区别,也不会出现卡顿的状况。 CrossOver Mac-安装包下载如下: https://wm.makeding.com/iclk/?zoneid=50028 CrossOver linux-安装包下载如下: https://wm.makeding.com/iclk/?zoneid=50029 macbook使用的macOS系统与PC端使用windows系统是完全不同的,这也造成了许多应用程序不能在两个系统间进行数据互通。常用的解决方案是虚拟机或双系统,那么macbook虚拟机好还是双系统好?这要看实际使用场景。macbook虚拟机怎么装?虚拟机的安装是一个非常复杂的过程。下面我们来看详细介绍吧! 一、macbook虚拟机好还是双系统好 虚拟机和双系统的使用都是为了解决macOS系统和windows系统间数据不能互通状况的。那么,在macbook是选择虚拟机?还是选择双系统呢?我们就要分别来看它们的优缺点。 1.双系统 双系统好似在一个鱼塘中筑坝修堤,将一个鱼塘分为两个。一个用来养甲鱼,一个用来养鲤鱼。在macbook中就是将一个系统盘分为两个,一个用来装windows系统,一个来装macOS系统。 图1:系统盘 一台设备中两个系统盘,一个装windows系统,一个装macOS系统,看似非常完美。优点:(1)可以macbook运行windows专属应用程序及打开专属文件;(2)使用杀毒软件对一个系统查杀时,同时也会对另一个系统进行查杀。 双系统的缺点也非常明显:(1)分割系统盘,会造成系统盘减少;(2)两个系统不能同时使用,来回切换系统较为麻烦;(3)如果其中一个系统在使用崩溃,那么会波及另一个系统。(4)安装过程复杂。 2.虚拟机 仍以养鱼为例,虚拟机好似在鱼塘放了一个网笼,将甲鱼和鲤鱼分开,使用的水仍然是一个池塘中的水,只是加了一个笼子。在设备中,仍使用一个系统盘,只是使用虚拟机软件织造了一个可以装windows应用程序的盒子。 图2:虚拟机 虚拟机的优点:(1)两个系统不会互相影响;(2)几乎windows原生系统可以安装的应用程序和专属文件在虚拟机都可以正常使用;(3)两个系统可以同时使用。 缺点:(1)安装过程复杂;(2)虚拟机价格较高;(3)有些虚拟机使用起来较为卡顿;(4)部分游戏会限制使用虚拟机;(5)运行起来占用空间较多。 总的来讲,双系统和虚拟机都有各自的优缺点,用户可以根据自身实际使用情况来选择。 二、macbook虚拟机怎么装 相对而言虚拟机的使用,不会造成两个系统间相互影响。使用时,也无需来回切换系统。下面我们来看如何在macbook安装虚拟机吧! 1.安装前准备 在安装虚拟机前,需要先下载虚拟机软件和windows系统的镜像文件。 图3:镜像文件 这里我们以使用Parallels Desktop安装windows系统为例,首先通过Parallels Desktop中文官网下载软件安装包,再通过资源网站下载windows镜像文件。 2.创建虚拟机 图4:创建虚拟机 安装虚拟机时,首先通过虚拟机软件搭建一个安装windows系统环境的框架,然后我们再将windows镜像文件导入框架内安装即可。在Parallels Desktop控制中心单击【+】,便可创建虚拟机。 3.安装虚拟机 使用Parallels Desktop安装虚拟机大致可以分为三步:(1)导入镜像文件;(2)选择应用场景;(3)设置windows。 (1)导入镜像文件 图5:导入镜像文件 在Parallels Desktop创建虚拟机框架后,通过文件夹图标打开macbook访达,将已下载好的windows镜像文件导入Parallels Desktop,单击【继续】开始安装。 (2)选择应用场景 图6:选择应用场景 选择应用场景是一个快捷的安装方式,这里Parallels Desktop提供了四种应用场景,根据个人需求选择即可,如图6选择了【生产力】,主要被应用于日常办公。 (3)设置windows 图7:设置windows windows的设置非常简单,主要是基础设置,如用户名,开机密码等。到这一步,windows虚拟机便可安装完成了。 通过前面两步,我们发现在macbook无论是安装虚拟机,还是装双系统都有非常麻烦,不如直接使用类虚拟机软件CrossOver。CrossOver的原理相较于虚拟机和双系统都有很大不同,CrossOver是运行windows应用程序时需要什么配置文件,CrossOver直接将配置文件下载至容器中。下面我们来看CrossOver如何下载软件吧! CrossOver如何下载steam? 1.搜索应用 图8:搜索应用 启动CrossOver后,通过【安装】打开搜索应用界面,直接搜索应用名称,或者直接在【热门应用程序】位置直接选中steam,便可开启下载。 2.安装应用 图9:下载应用 在CrossOver下载和安装应用都是自动的,只有进入windows系统安装向导阶段才需要用户操作,安装完成后,直接在CrossOver【容器】或macbook桌面便可启动steam。 图10:启动应用 三、总结 以上便是,macbook虚拟机好还是双系统好,macbook虚拟机怎么装的内容。Macbook是选择虚拟机,还是选择双系统,要看用户对windows系统的需求程度。Macbook虚拟机的安装较为复杂,不如直接使用类虚拟机软件CrossOver。

作业:封装一个函数,函数功能实现数组求和

作业实现过程: #封装一个函数,函数功能实现数组求和 #!/bin/bash function sum() { sum=0 read -p "请输入需要求和的数组数据:" -a arr for((i=0;i<${#arr[@]};i++)) { sum=$(($sum+${arr[i]})) } } sum echo 求和结果=$sum 实现效果:

作业:家目录下创建两个目录文件,如果有这两个文件夹,询问用户是否要对目录清空[Y/N],输入一个文件路径,判断这个文件路径是否存在,把这个目录下的目录文件和其它文件分别复制到两个文件夹中,并统计个数

作业实现过程: #编程:在家目录下创建两个目录文件file_dir和dir_dir,如果家目录下有这两个 #文件夹,就不需要创建,询问用户是否要对目录清空[Y/N],输入一个文件路径,判断 #这个文件路径是否存在,如果存在,把这个目录下的目录文件复制到dir_dir中,如果是其他文件, #复制到file_dir下,统计复制的文件和目录文件的个数,并打印出来 #!/bin/bash read -p "请创建文件夹:" var1 #判断文件夹是否存在,并且是否为空 if [ -s /home/ubuntu/$var1/ ] then read -p "文件夹已存在,是否清空[y/n]" var3 if [ $var3 == 'y' ] then cd /home/ubuntu/$var1/ rm -rf * fi else echo 没有相同文件夹,已创建新文件夹 mkdir /home/ubuntu/$var1 fi read -p "请创建文件夹:" var2 if [ -s /home/ubuntu/$var2/ ] then read -p "文件夹已存在,是否清空[y/n]" var4 if [ $var4 == 'y' ] then cd /home/ubuntu/$var2/ rm -rf * fi else echo 没有相同文件夹,已创建新文件夹 mkdir /home/ubuntu/$var2 fi #判断路径是否存在,并不存在时死循环再次输入 while [ 1 ] do read -p "

[ESP32]在vscode中搭建ESP32编译环境

1.在vscode中安装"C/C++"、"ESP-IDF"插件。 2.Ctrl+P,>ESP-IDF:Configure ESP-IDF extension,选择"Advanced"。(可以在espressif/esp-who: Face detection and recognition framework (github.com)查看ESP-IDF Version) 3.等待安装ESP-IDF Extension。 4.点Download Tools。 5.弹出来这个页面就是安装成功,×掉。 6.Ctrl+P,>ESP-IDF:New Project,如下图配置(以hello_world举例)。点击右下角的"Choose Template"。下个页面选择ESP-IDF中的"hello_world",点击"Create project using template hello_world"。 7.在新的vscode打开生成的project。电脑插上ESP32开发板,在左下角设置好对应的COM口、device target、板子选择"Custom board",在menuconfig中设置芯片对应的flash size,再点击"ESP-IDF Build project"。 看到如下则是编译成功。 8.flash method选择"UART",再点击"flash device"。 看到如下则是flash成功。 9.选择"Monitor Divice",可以看到串口输出信息。

基于Springboot的在线网络小说阅读网站的设计与实现

摘 要 现在是互联网快速发展的时代,网络是一种新媒体的类型,被称为“第四媒体”,随着越来越多的人进入互联网时代,网络阅读一种由文本的变化所带来的新的阅读方式,借助计算机、网络技术来获取多媒体合成信息和知识的阅读行为,对人们来说是一个新的阅读体验,改变了阅读的媒介(以前是纸质的),是时代的进步。 基于Springboot的在线网络小说阅读网站主要实现了在线写作、在线阅读、评价小说、更新章节、查询小说、将小说加入书架、阅读记录、购买平台VIP来阅读收费小说等功能。在本网站中一个人可以创作多本小说、用户作为其他人的读者也作为自己作品作者,可以通过查询功能根据小说名与作者名来查询自己想要观看的小说,在购买一个月、三个月等不同月份的平台VIP后可以看其他作者写的收费小说,在支付成功后会显示截至到期的期限。 本系统使用纯面向对象的Java语言,Springboot作为后端框架,MySQL数据库等技术进行开发,使用JSP+CSS+JS对网站前端界面进行设计,更采用了JQuery这款轻量级的JS框架。用Navicat for MySQL管理MySQL数据库。 关键词 Springboot;阅读;Java语言;MySQL数据库 演示视频(去blibli观看): springboot mybatis在线小说网站java小说网站毕业设计 YML配置: server: port: 8080 servlet: context-path: /novel multipart: max-file-size: 10MB #单个文件 max-request-size: 100MB #总文件大小 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db_novel?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8 username: root password: root jpa: show-sql: true mvc: view: prefix: /WEB-INF/views/ suffix: .jsp mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.novel.entity #devtools插件 devtools: restart: enabled: true #是否支持热部署 #mybaatis分页插件pagehelper设置 pagehelper: pagehelperDialect: mysql reasonable: true support-methods-arguments: true # 打印sql logging: level: com.novel.dao: DEBUG 支付宝沙箱支付:

一文读懂如何证明充要条件

充要条件 想问大家一个问题,大家做数学的证明题的时候是否会遇到一个这样子的问题? 1、证明:P的充分必要条件是Q 充分性:Q—>P 必要性:P—>Q 正确解答 为什么不是下面这种情况呢? 2、证明:P的充分必要条件是Q 充分性:P—>Q 必要性:Q—>P 错误解答 似乎第二种证明更符合我们的习惯,属于我们的第一反应,但是真的是这样吗? 我们可以先看下定义: P—>Q 表示为:P是Q的充分条件 P<—Q 表示为:P是Q的必要条件 有了上述定义之后,我们可以再来看下上述的1为什么是对的,2为什么不对。 首先我们来看一句话:“我是你”。 “我是你”和“你是我”,这俩句话是不是等价的?搞明白了这句话,相信对下面的就不难理解了。 首先我们先证明充分条件,P的充分条件是Q,可以解读为:Q是P的充分条件 也就是Q—>P。 然后我们再证明必要条件,P的必要条件是Q,可以解读为:Q是P的必要条件 也就是Q<—P,换过来就是P—>Q。 我么可以来看一个例子: P的必要条件** 也就是Q<—P,换过来就是P—>Q。 我么可以来看一个例子: 如果写的有什么不对的地方,还请大家指正。

Maven项目引入第三方(金蝶云星空)jar包

第一种最简单有效的方法(亲测可用) 1、配置maven环境(可百度) 2、将第三方jar包放到某文件夹 3、调用cmd命令,执行maven命令mvn install mvn install:install-file -Dfile=D:\WorkSpace\repository\com\erp\k3cloud-webapi-sdk7.9.2.jar -DgroupId=com.erp -DartifactId=k3cloud-webapi-sdk -Dversion=7.9.2 -Dpackaging=jar 参数说明: file -Difle:为jar包存放路径 DgroupId:为jar包id,可以随便写 DartifactId:为dartifactId,可以随便写 Dversion:为jar版本,可以自己定义 4、最后在pom文件引入即可 <dependency> <groupId>com.erp</groupId> <artifactId>k3cloud-webapi-sdk</artifactId> <version>7.9.2</version> </dependency>

【搭建NextCloud私有云盘服务】采用docker在linux上进行部署,内含nextCloud移植(迁移服务器)方法

1、前言 完成的效果: 在linux上搭建NextCloud云盘服务,可以通过域名访问到云盘服务,并且安装有SSL证书,可进行https访问。 例如: 服务器公网ip为47.110.66.88 域名为:cloud.huahua.com 可直接通过访问https://cloud.huahua.com访问到私有云盘。 本实例的配置: 服务器厂商:阿里云服务器 linux系统:Alibaba Cloud Linux 3.2104 LTS 64位 使用到的工具:宝塔面板(主要做Nginx反向代理还有安装Docker管理面板,不用面板问题也不大,会Nginx就行) 服务器安装有Docker和Nginx服务 效果图 架构图 2、首次搭建NextCloud (1)查询并下载NextCloud镜像 docker search nextcloud docker pull nextcloud (2)创建并启动NextCloud容器 docker images # 查询镜像 docker run -d --restart=always --name nextcloud -p 9090:80 nextcloud:latest 解释: -d 表示在后台运行 nextcloud 自定义容器的名字, nextcloud:latest 是镜像的名字,冒号后面表示版本号 9090:80 表示服务器访问端口是9090,容器内部的端口是80,就是说要访问容器内部的80端口的时候,直接访问服务器的9090端口才可以访问到。 (3)访问地址 公网:端口号形式例如 http://47.110.66.88:9090 温馨提示: 记得把公网ip的9090端口打开,在安全组那里可以添加设置。 (4)连接mysql数据库 自行创建一个数据库 数据库名:nextCloud 用户名:root 密码:f35765c5f33ed13c(自定义) 注意: 字符集选 utf8mb4 排序规则选 utf8mb4_general_ci 使用 Navicat 数据库工具创建如下 如果是使用宝塔创建数据库,一定要设置访问权限为本地ip或者所有人,不要设置为本地服务器,会安装失败的,因为访问权限不足,docker服务与linux服务隔开,所以docker里面的NextCloud服务准确来说不属于linux内部服务,我这里推荐使用本地ip也就是47.110.66.88

matlab/importGeometry

求matlab的r2020a版本的importGeometry.m源代码,自己该了,忘记怎么改回来了,不想重装软件

Docker安装MYSQL5.7

背景 自己的练手小项目需要部署到公网服务器,需要连接mysql数据库,这里选择docker安装mysql5.7,简单便捷。 至于为什么选择mysql5.7,是因为mysql5.7版本稳定,其次安装相较于其他高版本(mysql8)实在是简单太多了,少了很多grant等初始化操作,比如access denied for user root......password no。看到这些连接错误提示信息实在头疼。 前提 安装好docker,配置好阿里云镜像。 实践 1、拉取mysql5.7的docker镜像 docker pull mysql:5.7 配好阿里云镜像仓库地址后,拉取镜像还是挺快的。 2、启动镜像 docker run -d -p 3306:3306 --privileged=true -v /docker/mysql/conf/my.cnf:/etc/my.cnf -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='123456' --name mysql mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci 表示映射宿主机3306端口到容器内部的3306端口,mysql连接密码为123456,配置了容器my.cnf和mysql数据目录在宿主机的链接,设置了mysql编码为utf8. 3、查看容器运行状态 docker ps 容器在运行表示启动成功,不需要再做任何操作就可以通过root用户和IP密码去连接mysql了。 注意 : 如果使用的是云服务器,需要配置安全组策略后本地数据库连接工具才能成功连接数据库! 道友可以在博客下方留言互相探讨学习或者关注公众号fairy with you了解更多,欢迎来撩! 注:本博客仅用于交流学习,不用于任何商业用途,欢迎思维碰撞。

C语言 PTA 奇偶分家

题目: 解题: 1)关键是怎样判断输入的数是奇数还是偶数,就看其值取余为何即可 代码: #include<stdio.h> int main() { int N,ru,i=0,o=0; scanf("%d\n",&N); while(i+o!=N) { scanf("%d",&ru); switch(ru%2) { case 1:i++; break; case 0:o++; break; } } printf("%d %d",i,o); return 0; }

k8s容器编排(使用kubeadm部署)

一。基础 kuberbete就是管理这些应用程序所在的小运行环境(container)而生,集群调度的最小单元就是一个pod,一个pod可以是一个容器,也可以是多个容器。k8s不是直接管理容器,而是管理pod。 1 一个K8S系统,通常称为一个K8S集群(Cluster)。kubectl 是k8s的客户端程序,也是k8s的命令行工具,提供的大量的子命令可以让用户可以和集群进行交互。 这个集群主要包括两个部分: 一个Master节点(主节点) 一群Node节点(计算节点) 2 Master节点包括API Server、Scheduler、Controller manager、etcd。 API Server是整个系统的对外接口,供客户端和其它组件调用,所有的指令请求都要经过apiserver 。 Scheduler使用调度算法,负责对集群内部的资源进行调度,把请求资源调度到某一个node节点,相当于“调度室”。 Controller manager维护k8s资源对象,负责管理控制器,控制平面,用于调度程序以及节点状态检测。 eted存储资源对象。 3 3.1 Node节点是实际部署容器运行的地方,包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),pods。 3.2 详细介绍: Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。 Service,一个Service可以看作一组提供相同服务的Pod的对外访问接口。 Docker,创建容器的。 Kubelet,在每一个node节点都存在一份,在node节点上的资源操作指令由kubelet来执行,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。 Kube-proxy,主要负责为Pod对象提供代理,处理服务器间负载均衡。 Fluentd,主要负责日志收集、存储与查询。 3.3 Node包含的信息: · Node地址:主机的IP地址,或Node ID。 · Node的运行状态:Pending、Running、Terminated三种状态。 · Node Condition:… · Node系统容量:描述Node可用的系统资源,包括CPU、内存、最大可调度Pod数量等。 · 其他:内核版本号、Kubernetes版本等。 3.4 查看Node信息: kubectl describe node 3.5 Pod的生命周期通过Replication Controller来管理;通过模板进行定义,然后分配到一个Node上运行,在Pod所包含容器运行结束后,Pod结束。 3.6 在Kubernetes的世界里,虽然每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失,这就引出一个问题:如果有一组Pod组成一个集群来提供服务,那么如何来访问它呢?Service! 一个Service可以看作一组提供相同服务的Pod的对外访问接口,Service作用于哪些Pod是通过Label Selector来定义的。 · 拥有一个指定的名字(比如my-mysql-server); · 拥有一个虚拟IP(ClusterIP、ServiceIP或VIP)和端口号,销毁之前不会改变,只能内网访问; · 能够提供某种远程服务能力; · 被映射到了提供这种服务能力的一组容器应用上; 如果Service要提供外网服务,需指定公共IP和NodePort,或外部负载均衡器; 4 二。目的 k8s是一个编排容器的工具,创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,故障自愈(一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉),更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行 三。安装步骤 1

Flink cdc 2.3.0 日前发布,支持众多新特性

新连接器 2.3.0 新增了 DB2 CDC 连接器 增量快照迎来新的连接器成员 2.3.0 版本MongoDB CDC,Oracle CDC 两大连接器均支持了增量快照,实现无锁读取+并发读取+断点续传 优化 2.3.0 版本 MySQL CDC 连接器性能和稳定性大幅提升 Flink 支持 2.3.0 版本一口气兼容了Flink 1.13 & 1.14 & 1.15 & 1.16 四个版本 更多细节 MySQL CDC 支持指定位点/指定时间戳/earliest位点启动 MySQL CDC 支持异步分片,支持checkpoint期间分片暂停 MySQL CDC 支持全部字符集,支持宽容默认值,支持自动获取数据库时区 MySQL CDC JM内存和TM内存优化,binlog读取性能优化 OceanBase CDC 修复了时区问题,支持全类型对接到 Flink SQL MongoDB CDC 支持了更多的数据类型,优化了捕获表的筛选过程 TiDB CDC 修复了全增量切换时数据丢失问题,支持读取时 region切换 Postgres CDC 支持的更多的类型,开放了更多配置项 SqlServer CDC 支持了更多的版本,完善了文档 MySQL CDC 和 OceanBase CDC 提供了中文文档,OceanBase CDC 提供了视频教程

基于springboot学生管理系统设计与实现

摘 要 目前,借助信息管理系统能够有效解决高校的信息管理问题,对于提高教育管理水平有着非常重要的作用。 因此,有必要建立一个与之相适应的管理信息系统。基于此,本文为了使教师高效地管理学生信息,需要对现代的学生 信息管理系统进行设计与实现,建立一个快速、简单、规范、标准化的学校办公管理平台。 本学生管理系统系统是根据目前学校实际情况的实际需求而设计的,采用了B/S结构和MVC三层设计模式、springboot mybatis技术、idea集成开发环境、mysql数据库。本本学生管理系统系统主要包括系统用户登录、选课管理、教评管理、校建管理、教师管理和学生管理,校园新闻,系统管理等多个模块。本文在开发学生信息管理系统的过程中,选取适合Java开发 语言的 MVC 架构开发模式。该开发模式能够降 低学生信息管理业务逻辑之间的耦合度,不仅能够使学生信息 管理的业务更加清晰,也能为系统的数据安全提供保障。 关键词: springboot学生管理系统:mysql数据库; html Design and implementation of head teacher management system Abstract At present, with the help of information management system can effectively solve the problem of information management in Colleges and universities, which plays a very important role in improving the level of education management. Therefore, it is necessary to establish a corresponding management information system. Based on this, in order to make teachers manage student information efficiently, we need to design and implement a modern student information management system, and establish a fast, simple, standardized and standardized school office management platform.

[附源码]java毕业设计农产品网络销售系统

项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。 环境需要 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.是否Maven项目: 否;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目 6.数据库:MySql 5.7/8.0等版本均可; 毕设帮助,指导,本源码分享,调试部署(见文末) 3.1需求分析 该款农产品网络销售系统的主要功能有:个人中心,商户管理,用户管理,产品分类管理,农产品管理,系统管理等。 (1) 登入界面:首次打开软件,会出现账号以及密码的填写页面,当然也可以进行新商户的注册,新商户注册需要完成账号,密码,确认密码,商户名称,联系方式,联系人等信息的填写; (2)用户界面:商户可以根据自身要求在搜索栏进行关键词搜索,随即会显示有关农产品网络销售的具体信息等,进入用户后台可以对个人中心,农产品管理,订单管理等功能进行相应的操作; (3) 管理员:管理员可以对所有信息进行查看,修改和删除等,包括对商户的信息进行操作。 3.2系统可行性分析 3.2.1技术可行性 本农产品网络销售系统使用的是Eclipse开发环境及Java语言。Java是编写程序的面向对象的编程语言,封装了各种数据和处理数据的方法,方便了程序员的设计与开发。其跨平台的特性,使得其不被平台环境束缚。另外,其具有多线程的处理能力,这使得程序具有更好的交互性和实时性。 3.2.2操作可行性 现在随着科技的飞速发展,计算机早已经进入了人们的日常生活中,人们的工作环境也不像以前有那么多的要求,需要员工一定要到公司办公,有的工作在家也可以完成。这使得人们的工作效益有了很大的提高。操作的多样性也变高了。因此,管理的计算机化,智能化是社会发展而带来的必然趋势,各种智能的软件层出不穷,不同的软件能完成商户不同的需求,这不仅提高了工作效率还能完成一些客户特定的一些需求。本系统不仅界面简洁明了还采用可视化界面,用户只要用鼠标和键盘就可以完成对相关信息的修改,删除,添加等操作。因为这个系统的操作十分简单,方便上手,对于第一次使用系统的人,只需要很少的时间就可以上手操作。由此可见,本系统在操作上是可行的。 3.2.3经济可行性 农产品网络销售系统的设计与开发环境仅需要一台电脑和一款模拟器,成本预算少,外加搭建开发环境和安装开发工具即可。 3.3系统设计规则与运行环境 软件系统的优劣很大程度上是由系统设计的完善与否决定的。世间万物都必须遵循生老病死的法则,这是大自然的规则不能违反,软件设计也一样需要遵循系统设计规则。因此,在设计过程中必须遵循系统设计规则。 规则如下: 简单性:为了扩大系统使用者的受众面,系统设计应该本着操作越简单约好的原则,这样不仅能提高系统的使用率更能够扩大系统使用面。。 针对性:一个系统针对性越强,所能提供的功能必然越完善,用户体验肯定更好,所以应该明确指定系统针对性。 实用性:实用永远是检验一个系统是否成功的唯一标准,使用的语言再高端,使用的结构再新颖但不能满足用户的要求那就是失败。 运行环境: 本系统是利用B/S结构来开发的,数据库在服务器上进行部署 Mysql即可,其他包括My Eclipse等常规开发程序。 4 系统软件的总体设计 4.1系统开发流程 (1)需求分析:初步分析商户的需求,列出功能模块。 (2)系统设计:相关数据库、各功能的设计。 (3)界面设计:根据各个模块准备素材,设计界面。

vue3 实现echarts根据页面大小进行自适应

效果图: 1. 工具代码 debounce代码 === @/utils/index /** * 函数防抖 * @param {Function} func 包装的函数 * @param {num} delay 延迟时间 * @param {boolean} immediate 第一次滚动会执行两次 开始滚动和结束滚动的时候 * @return {*} */ export function debounce(func, delay, immediate = false) { let timer, context = this; return (...args) => { if (immediate) { func.apply(context, args); immediate = false; return; } clearTimeout(timer); timer = setTimeout(() => { func.apply(context, args); }, delay); }; } 页面关键代码块

解决-linux服务器被执行恶意脚本代码

1. 首先登入服务器,top命令看一下资源使用情况 2. 通过点击“shift+M”,按照内存大小排序;点击“shift+P”,按照CPU大小排序。 发现并不是执行某个程序占用资源。 3. ps -ef 查看运行的进程 可以 kill -9 进程号 或者 pkill -u 用户名 杀死进程; 但是发现杀死进程后,它又重新启动,所以应该是使用了定时任务 4. 删除本用户(root)的定时任务 命令:crontab -l :查看定时任务代码 crontab -e:编辑并删除定时任务代码 删除root的定时任务后,发现进程又重启了(用户是nobody),所以需要删除其他用户的定时任务。 5. 删除其他用户定时任务 cd /var/spool/cron;这是所有用户crontab文件存放的目录,以用户名命名 直接删除某个用户的定时任务文件即可。 暂时还不清楚被执行的恶意脚本代码的用意是什么,后续会查清楚并补充!

torch.nn.CrossEntropyLoss

CrossEntropyLoss用于计算多分类问题的交叉熵损失。因为torch.nn.CrossEntropyLoss内置了Softmax运算,所以在使用torch.nn.CrossEntropyLoss作为损失函数时,不要在网络的最后添加Softmax层!!!label应为一个整数,而不是one-hot编码形式。 示例 import torch ''' 每一个样本都有一个标签,表示它的真实类别。在深度学习中,通常是分批进行训练。 对于一个N分类问题,样本的标签只可能是0、1、2 ... N-1 则对于一个3分类问题,样本的标签只可能是0或1或2。 当batch_size为5时,这一个batch的标签是一个形状为[batch_size]的tensor,即shape为[5] ''' # 一个batch(batch_size=5)的标签 label = torch.tensor([1, 2, 0, 1, 0]) print(label.shape) # [5] ''' 对于一个3分类问题,当训练时batch_size为5, 则深度网络对每一个batch的预测值是一个形状为[batch_size, classes]的tensor,即shape为[5, 3] 以深度网络对第一个样本的预测值[0.5, 0.8, -1.2]为例, 经过Softmax层后,得到[0.3949, 0.5330, 0.0721],表示深度网络认为第一个样本属于0,1,2这三类的概率分别是0.3949,0.5330, 0.0721 ''' predict = torch.tensor([[ 0.5, 0.8, -1.2], [-0.2, 1.8, 0.5], [ 0.3, 0.2, 0.7], [ 0.6, -0.8, -0.4], [-0.4, 0.2, 0.8]]) print(predict.shape) # [5, 3] # 当reduction='none'时,输出是对每一个样本预测的损失 loss_func = torch.nn.CrossEntropyLoss(reduction='none') loss = loss_func(predict, label) print(loss) # tensor([0.

CUDA与cuDNN安装教程(超详细)

前言 windows10 和win11安装 CUDA ,首先需要下载两个安装包 CUDA toolkit(toolkit就是指工具包) cuDNN 用于配置深度学习使用 官方教程 CUDA:Installation Guide Windows :: CUDA Toolkit Documentation (nvidia.com) cuDNN:Installation Guide :: NVIDIA Deep Learning cuDNN Documentation cuda的下载及安装 cuda版本 判断自己应该下载什么版本的cuda? 打开nvidia(桌面右键)->选择左下角的系统信息->组件 此处 版本向下兼容,即按照开发库一般不建议使用最新版本的原则,此处我们的显卡及驱动最高支持cuda11.2,但是我们仍然选择10.1版本来完成开发工作。 也可以直接在cmd中输入 nvidia-smi 进行 查看自己显卡支持的cuda版本。 CUDA toolkit Download CUDA Toolkit Archive | NVIDIA Developer 点进去,按照如下配置选择,然后点击下载: 此处我们使用离线安装方法,下载exe可执行文件完成安装。 cuda安装 安装cuda时,第一次会让设置临时解压目录,第二次会让设置安装目录; 临时解压路径,建议默认即可,也可以自定义。安装结束后,临时解压文件夹会自动删除; 安装目录,建议默认即可; 注意:临时解压目录不要和cuda的安装路径设置一样,否则安装结束,会找不到安装目录!此处我将临时安装目录设置到非系统盘路径,但是注意要选择空文件夹,否则会报错。 选择自定义安装 安装完成后,配置cuda的环境变量; 命令行中,测试是否安装成功; 双击“exe文件”,选择下载路径(推荐默认路径) 同意并继续 自定义安装,精简版本是下载好所有组件,并且会覆盖原有驱动,所以在这里推荐自定义下载。 如果你是第一次安装,尽量全选 如果你是第n次安装,尽量只选择第一个,不然会出现错误。 没有选择visual studio,后面说找不到,就返回取消了这个复选框 此处安装目录不建议修改,因为后期开发中很多报错来源于路径问题。 Ok啦,点击下一步即可 打开控制面板即可发现安装了一大堆配置和驱动文件。 查看环境变量 点击设置-->搜索高级系统设置-->查看环境变量 【如果没有需要自己添加】 一共四个系统变量,都是自动生成的,但是有时后两个系统变量可能不会自动生成,需要自己添加上去,添加时注意路径。

kafka配置用户名密码开启认证后 命令行工具报错无法使用

kafka 开启认证模式,命令行工具kafka-console-producer.sh kafka-console-consumer.sh无法使用报错 kafka的配置 测试环境kafka配置了认证模式 security.inter.broker.protocol=SASL_PLAINTEXT sasl.enabled.mechanisms=PLAIN 此时,如果直接运行 生产者命令行 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 可能会有如下报错 [2022-11-03 10:53:32,911] WARN [Producer clientId=console-producer] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) 运行 消费组命令行工具,也会报错 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning 原因 由于 kafka开启了认证,如果命令行工具中 不加认证参数,就没有办法成功链接 修改 修改生产者命令行 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test-topic --producer-property security.protocol=SASL_PLAINTEXT --producer-property sasl.mechanism=PLAIN 修改消费组命令行 bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --consumer-property security.protocol=SASL_PLAINTEXT --consumer-property sasl.mechanism=PLAIN

了解 SQL 和 MySQL 之间的区别

随着商业世界中数据使用的增加,管理数据库的需求也显着增长。这些数据库已经发展成为每个企业不可或缺的一部分,无论其规模和结构如何。 但除非经过分析,否则数据毫无用处。为此,公司使用 RDBMS(关系数据库管理系统)。RDBMS帮助数据库管理员和组织使用管理工具开发不同数据集之间的关系。在本文中,您将了解这两种广泛流行且高效的管理工具,并了解SQL和 MySQL 之间的区别。但在深入研究 SQL 和MySQL之间的区别之前,有必要分别了解它们。 什么是 SQL? SQL 是结构化查询语言的缩写。根据 ANSI(美国国家标准协会)指南,SQL 是维护和管理数据库的标准语言。因此,除了一些小的语法更改外,大多数数据库的检索、添加或操作数据的查询都基于标准的 SQL 语法。 SQL 最初是在 IBM 开发的。使用 SQL,您可以使用简单的类似英语的语言轻松查询数据库以添加、更改、更新或删除数据。您可以使用 SQL 来管理多个关系数据库管理系统,例如 MySQL、SQL Server、Oracle 和 MS Access。通过在 SQL 中编写代码和查询,您可以在创建模式的同时创建和修改任何数据库。 什么是 MySQL? MySQL 是 1995 年开发和发布的关系数据库管理系统。它由 MySQL AB 开发和赞助,后来被 Sun Microsystems(即今天的 Oracle Corporation)收购。MySQL 是“我的”(联合创始人的女儿)和“SQL”的组合。 MySQL 是最早开发和推出的开源 RDBMS 之一。目前,MySQL 有很多变体。但是,所有变体的基本语法都保持不变。使用 C 和C++ 编程语言设计和编写,MySQL 与所有主要 OS(操作系统)兼容。它是广受欢迎的开源 Web 应用程序软件堆栈的核心组件,称为 LAMP,代表 Linux、Apache、MySQL、PHP /Perl/ Python。 SQL 是一种管理 RDBMS 的查询编程语言。 MySQL 是一个使用 SQL 的关系数据库管理系统。 SQL主要用于查询和操作数据库系统。 MySQL 允许您以有组织的方式处理、存储、修改和删除数据以及存储数据。

SpringBoot用MultipartFile.transferTo传递相对路径的问题

起因: 工作中简单的图片不需要使用第三方文件存储服务,上传到项目所在路径保存,在使用 MultipartFile.transferTo 转存文件时报错,路径找不到。 原因: 当MultipartFile的transferTo的入参是相对路径时,会自动拼接成一个绝对路径,但这个绝对路径并不是真实存在的,所以转存时会报错,而如果传递的时绝对路径,就不会有问题。但是我非要传相对路径,解决办法如下。 解决: File dir = new File("目录相对路径"); if (!dir.exists()) { dir.mkdirs(); // 创建目录 } try { String realPath = dir.getCanonicalPath(); // 获取真实路径 file.transferTo(new File(realPath + "/" + fileName)); // 转存 } catch (IOException e) { System.err.println(e); throw new BadRequestException("上传失败"); }

[前端笔记002]CSS的基础知识及选择器 -- selector

资源 推荐zeal:离线文档查看器 https://zealdocs.org/推荐w3c:线上文档 https://www.w3school.com.cn/本笔记参考视频,尚硅谷:BV1XJ411X7Ud我的笔记:https://gitee.com/plusmile/stackedit-app-data.git我的CSS文件:https://gitee.com/plusmile/front-code.gitCSS餐厅练习:https://flukeout.github.io/,可以练习下面提到的选择器,检查自己的学习情况。 简介 网页分为三个部分,结构(html)现(CSS)行为(Javascript),这章讲表现,看到的都是表现。CSS全称层叠样式表,通俗的讲就是按样式表规定标签样式长啥样。注释的格式为/* 注释内容*/,可以写在style里也可以写在CSS文件中CSS的基本语法为:选择器{声明块},选择器可以选中页面中的指定元素,声明块中可以定义要为元素设置的样式,声明式结构: 样式名:值;CSS修改样式的方式: 内联样式,行内样式,在标签内通过style属性设置元素样式, 编写、修改比较麻烦,开发时不使用,例子如下: <p style="color:red; font-size:60px;">111</p>内部样式表,将样式编写到head中的style标签中,缺点是不同文件无法复用,例子如下: <style> p{ color:green; font-size:60px; } </style> 外部样式表,需要编写到外部的CSS文件中,文件中语法与第二种相同, 然后使用link标签引入外部的CSS文件。方便多网页复用,可以使用浏览器的缓存机制,加快网页加载速度,是最佳实践。href的值跟html笔记中a标签的值格式一样。 <link rel="stylesheet" href="./01-CSS简介.css"> 常用的选择器 元素选择器:根据标签名选中指定的元素 - 语法:标签名{} - 例子:p{} h1{} div{} p{color: rebeccapurple;}id选择器:根据元素的id属性值选中一个元素 - 说明:因为id不能重复,所以只能选中一个 - 语法:#id属性值{} - 例子:#box{} #red{color: red;}类选择器:根据元素的class属性值选中一个元素 - 说明: class为标签属性,可以使用class来为不同或相同元素分组 - 语法:.class属性值{} - 例子:.blue{color: red;} - 在标签中可以同时为一个与元素指定多个class属性,以空格隔开 <h1 class="blue big">类选择器</h1>通配选择器:选中页面中的所有元素 - 语法:*{} - 例子:*{color: red;} 复合选择器 交集选择器:选中同时符合多个条件的元素 - 语法:选择器1选择器2选择器n{} - 例子:div.red.a.b{color: red;} - 注意:元素选择器必须为开头,如果有的话并集选择器:同时选择多个选择器对应的元素。

金融知识总结

MKS主义理论体系。 MKS主义理论体系包括MKS主义哲学、MKS主义政治经济学和科学社会主义三大部分。 其中,MKS主义哲学是科学的世界观和方法论,是MKS主义全部学说的理论基础。科学社会主义直接体现了无产阶级利益和共产主义理想,是MKS主义的理论目的、理论归宿和主要标志。MKS主义政治经济学是运用MKS主义哲学原理去研究社会生产关系及其发展规律的科学。它通过对资本主义生产方式的内在矛盾、运行机制和发展规律的深刻分析,揭示了资本主义剥削的秘密和它必然被社会主义所代替的历史命运,是MKS主义的主要内容。 MKS主义的基本立场、基本观点和基本方 MKS主义的基本立场:以人民为中心,一切为了人民,一切依靠人民。 MKS主义的基本观点:是关于自然、社会和人类思维发展一般规律的科学认识,是对人类思想成果和社会实践经验的科学总结 MKS主义的基本方法:是建立在辩证唯物主义和历史唯物主义世界观和方法论基础上,指导我们正确认识世界和改造世界的思想方法和工作方法. MKS主义的当代价值在于 第一,它是观察当代世界变化的认识工具; 第二,它是指引当代中国发展的行动指南; 第三,它也是引领人类社会进步的科学真理。MKS主义必须与中国的实际国情相结合。 MKS主义的鲜明特征 1.科学性 MKS主义是对自然、社会和人类思维发展本质和规律的正确反映。 2.革命性 MKS主义的革命性,集中表现为它的彻底的批判精神和鲜明的无产阶级立场。 3.实践性 MKS主义是从实践中来,到实践中去,在实践中接受检验,并随实践而不断发展的学说。(从前唯物主义的主要区别) 4.人民性 人民至上是MKS主义的政治立场。MKS主义的人民性是以阶级性为深刻基础的,是无产阶级先进性的体现。 5.发展开放性 发展性是指MKS主义是不断发展的学说,具有与时俱进的理论品质。 辩证唯物论 哲学问题不同流派 唯物主义哲学与“半截子”的旧唯物主义思想本质区别 列宁的这一论述特别强调了MKS、恩格斯唯物主义哲学的“辩证”属性和“历史”属性,并以此作为与以往唯物主义哲学的区别,旨在说明MKS主义哲学是辩证唯物主义和历史唯物主义的高度统一,与“半截子”的旧唯物主义思想有着本质区别。 半截子唯物主义 “半截子”唯物主义是指费尔巴哈等人在唯物主义的立场上所表现出来的不彻底性,也就是没有把唯物主义贯彻到社会历史领域,即在自然观上是唯物主义的,在历史观上则陷入唯心主义。 唯物主义和唯心主义是哲学中的两大基本派别,划分两大派别的标准是何为第一性 物质和运动 运动的概念:运动是标志一切事物和现象的变化及其过程的哲学范畴。 运动是物质的存在方式和根本属性。 物质和运动的关系:不可分割。运动是物质的运动,物质是运动着的物质。 两种错误的观点:脱离物质谈运动,将导致唯心主义;脱离运动谈物质,将导致形而上学。 运动和静止 静止的概念:静止是物质运动在一定条件下的稳定状态,包括空间位置和根本性质暂时未变这样两种运动的特殊状态。 运动和静止的关系:对立统一。 运动和静止相互区别: 运动的绝对性体现了物质运动的变动性、无条件性; 静止的相对性体现了物质运动的稳定性、有条件性。 运动和静止相互联系:运动和静止相互依赖、相互渗透、相互包含,“动中有静,静中有动” 实践是自然存在与社会存在区分和统一的基础: 一方面,实践是使物质世界分化为自然界与人类社会的历史前提,又是使自然界与人类社会统一起来的现实基础。 自然存在与人类社会联系 在实践活动中,物质世界被区分为自然界和人类社会两大领域,二者都具有客观实在性,它们相互联系、相互作用。 但观念分两种: 一种是“我的观念”,属于主观唯心主义; 另一种是“绝对观念”,属于客观唯心主义; 意识的概念 意识是自然界长期发展的产物,是人脑的机能和属性,是客观世界的主观映象。 意识形成的影响因素 意识不仅是自然界长期发展的产物,而且是社会历史发展的产物。 社会实践特别是劳动,在意识的产生和发展中起着决定性的作用。 一方面,劳动为意识的产生和发展提供了客观需要和可能; 另一方面,在人们的劳动和交往中形成的语言促进了意识的发展,语言是意识的物质外壳。 意识的本质: 意识从其本质来看是客观世界的主观映象,是客观内容和主观形式的统一。 意识是物质的产物,但又不是物质本身,意识是特殊的物质-人脑的机能和属性,意识在内容上是客观的,在形式上是主观的。 意识的作用: MKS指出:“观念的东西不过是外界移入人的头脑并在人的头脑中改造过的物质的东西而已。”这表明,辩证唯物主义在坚持物质决定意识,意识依赖于物质并反作用于物质又承认意识对物质具有能动作用。 注意:意识的能动作用是人的意识所特有的积极认识世界与改造世界的能力和活动 主要表现: 第一,意识活动具有目的性和计划性。 第二,意识活动具有创造性。 第三,意识具有指导实践改造客观世界的作用。 第四,意识具有调控人的行为和生理活动的作用。俗话说“笑一笑十年少,愁一愁白了多少反映了这个道理。 意识的作用。恩格斯这句话的意思是,理论思维能指导一个民族站在科学的高峰,正确的理论思维是一种正确的意识,能对一个民族的发展起到积极作用。 意识的本质。题干中的“感动”是指人的思想意识、情感,因而是人脑对客观世界的主观反映。意识的内容是客观的,而在形式上是主观的,所以意识是客观内容和主观形式的统一。 世界的物质统一性原理