现在很多单位使用共享打印机,已经越来越普及了。对于大部分用户来说,主要还是如何连接到打印服务器。下面介绍的是一种另类的办法,相信你还未曾使用过,不妨进来来看一看。
1、案例环境:已共享的打印机已安装在了IP地址为:192.168.1.69的计算机上,所有计算机通过有线与交换机直接连接,共享打印机的名称为:打印机2,本文约定:直接连接打印机的那台电脑,简称打印服务器如下图
1、打开桌面上的我的电脑,在打开的我电脑窗口中的地址栏输入:\\192.168.1.69,并回车,如下图
2、在打开的\\192.168.1.69共享窗口中找到名称为打印机2的共享打印机,双击打印机2,如下图
3、双击打印机2后,弹出连接到打印机的对话框,单击是命令按钮,如下图
4、单击是命令按钮之后,弹出192.168.1.68上的EPSON Style Photo R230 Series对话框,如下图
5、只要看到以上打印机打印任务对话框,网络打印机就连接成功了。为了验证网络打印机已安装到本台电脑,可以单击开始→设置→打印机和传真,打开打印机和传真窗口,找到刚才连接到EPSON Stylus Photo R230 Series在192.168.1.69上的打印机,如下图
6、从上图可以看出,网络打印机已经成功安装到本台电脑了,选择这台打印机打印一篇文档,文档被成功打印,说明这台网络打印机确确实实是可以被我们通过局域网络正常使用了。
注意事项:
1、本方法是通过打开我的电脑,在其地址栏输入共享路径的办法,连接网络打印机的,其实,只要窗口是有地址栏,都可以通过地址栏输入共享路径并回车,轻易连接到打印服务器;
2、本办法亦适用于有线和无线局域网络环境。
1、环境 Mysql:5.5 JDK:1.8 Maven:3.8.1 actibpm:3.E-8 IDEA:2019.3 OS:Win10 64 2、插件的安装 1、由于我用的是IDEA:2019.3的系统,所以说在搜索actibpm插件的时候就无法搜到,只能选择手动安装插件。 2、在 https://plugins.jetbrains.com/plugin/7429-actibpm/versions/stable/17789 网站进行下载程序,得到如下所示安装包。 3、通过如下操作进行安装下载的安装包。 3、搭建程序框架 1、创建数据库。数据库名为:utf8mb4 2、创建mven工程,并进行设名字地址的输入。 3、pom.xml的编写 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.newtouch.activiti</groupId> <artifactId>activiti01</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version> </properties> <dependencies> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>7.0.0.Beta1</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring</artifactId> <version>7.0.0.Beta1</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-model</artifactId> <version>7.0.0.Beta1</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-converter</artifactId> <version>7.0.0.Beta1</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-json-converter</artifactId> <version>7.0.0.Beta1</version> </dependency> <dependency> <groupId>org.
钉钉教学直播如何签到?钉钉课前签到如何使用?钉钉教学直播课程签到在哪?钉钉加强型签到如何使用?钉钉直播功能成了在线教学的利器,查看学生是否观看直播就要让学生签到。学生如何签到呢?钉钉群直播有很多签到功能。老师如何设置课程签到?钉钉电脑版老师如何查看学生签到情况?如何提醒未签到的学生。下面来看看钉钉教学直播签到图文教程。
钉钉课堂如何签到
第一步:打开手机钉钉;
第2步:点击下方工作;
第3步:在常用应用里有签到和考勤打卡,点击即可。
钉钉如何发起课前签到
1、这是版本新增加的功能,可要求学生上课后5分钟完成签到,具体时间可自行设置,在上课中也可以使用,马上就有统计数字
2、另一种加强型签到,利用填表功能,教师屏幕上打些字,要求学生进行填写,这种签到可以检查学生有没有认真听课,但步骤繁锁些,建议在课堂中使用。
另外填表可实现很多功能,大家可以研究下,充分利用
钉钉加强型签到是什么?钉钉加强型签到,利用填表功能
钉钉如何查看课前签?钉钉如何提醒学生签到
签到时间要比现在的时间要早哦。
1、我们打开软件,点击上方的班级群聊;
2、进入群聊页面,我们点击下方的在线课堂;
3、来到班级在线课堂页面,我们点击发起课前签到;
4、来到课程签到页面,我们输入签到说明和签到时间,再点击开始签到;
5、回到班级群,我们就可以看到签到消息了,点击进入;
6、来到下个页面,我们就可以看到班级签到情况了。点击下方的签到,就能提醒学生签到了。
钉钉电脑版老师如何设置课程签到
钉钉课程签到功能,解决了授课教师无法掌握直播间中学生的在线状况这一问题。
1、打开需要发布的班级群,点击发起直播,会在上部出现两个选项,如果是课前签到可在选择第一项。发布完成后再选择第二个选项发起直播,如果是课中点名的话可以在讲课过程中随机时间选择第一项发布签到任务。
2、点击进入课程签到后可以看到三个区域,分别为签到说明,签到结束时间,发起签到的群。
3、签到说明,最多可输入50字,大家可以按照自身需要进行填写。
4、签到结束时间,课前签到可以设置为上课时间,签到时间结束后无法签到可视为迟到,上课过程中可设置发起后2-3分钟左右结束,这样大致考察学生是否存在挂机或者走神的情况。
5、完成以上步骤,选择需要发布的群,点击发布即可,签到时间结束后,可查看已签到和未签到者,方便老师掌握课堂情况。从测试来看目前不支持数据导出,未来或许会增加导出功能。
以上就是钉钉群直播签到的图文教程。课程签到是新功能,钉钉还有课前签到、加强型签到等功能。钉钉直播是教学直播的重要手段,钉钉直播的观看者是学生,学生在观看直播前记得签到,否则老师找不到你的观看证据。钉钉上老师可以设置课程签到,查看签到情况,以及提醒未签到的学生。关注教程之家,解锁更多软件教程。
demo_reconstruct.py sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) sys.path.insert(0,"/path") 的用法:这样新添加的目录path会优先于其他目录被import检查os.path.abspath:获取文件绝对路径os.path.join()函数:连接两个或更多的路径名组件:
1.如果各组件名首字母不包含’/’,则函数会自动加上
2.如果有一个组件是一个绝对路径,则在它之前的所有组件均会被舍弃
3.如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾__file__表示了当前文件的pathos.path.dirname(file)表示:得到当前文件的绝对路径os.path.join(os.path.dirname(file), ‘…’)) 表示当前路径往上退一个文件 导入test images
decalib.datasets TestData类:处理数据,裁剪出人脸
提供kpt为txt文件或mat文件(适用于AFLW2000) kpt = scipy.io.loadmat(kpt_matpath)['pt3d_68'].T 导入文件并且提取出脸上的68个特征点,将这个特征点组成的矩阵转置 src_pts:图像上框选的人脸所在的位置
DST_PTS:裁剪出的新图像大小
tform =使用skimage.transform.estimate_transform函数 :变换,得到对应的变换矩阵
skimage.transform.warp函数:将该变换应用到图像上去
然后将其转变为bbox,边框回归
deca.py 纹理的路径修改在:
DECA/decalib/utils/config.py
import yaml
把变量写进yaml做配置文件,然后python脚本从yaml文件里面取到变量
yacs是一个轻量级库,用于定义和管理系统配置,例如那些在为科学实验设计的软件中常见的配置。这些“配置”通常涵盖诸如用于训练机器学习模型的超参数或可配置模型超参数(诸如卷积神经网络的深度)之类的概念。
FLAME.py pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议。 “pickling”是将Python对象层次结构转换为字节流的过程, “unpickling”是反向操作,从而将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构。pickle模块对于错误或恶意构造的数据是不安全的。setattr(a, ‘bar’, 5) # 设置属性 bar 值
天下武功,唯快不破 最近网友问了关于点云、倾斜摄影数据的性能优化问题。本来想刀枪剑戟、斧钺勾叉给弄了,但是后来想性能其实是个系统问题,要在第22节分成数小节扎扎实实的讲一讲。
鸣谢 非常感谢王锐王大神的cookbook,我准备主要参考它里面关于性能的一章。也就是第8章。
本节资源 本文集包括本节所有资源包括模型代码都在此下载,按节的序号有文件或文件夹:
注意: 务必使用浏览器打开:
【击此打开网盘资源链接】
问题描述 我们为什么使用googlEarth或者osgEarth的时候,原则上可以加载无限大的数据呢,其原因就是因为其使用的是树状的组织结构,如下:
我们仍然来拿地球来想象,Level0是最粗的球,我们离的很远的时候是这个球。Level1是我们拉近一点,地球会一分为八,然后我们再对着其中一个角拉近就分裂成Level2的模样,这个角又一分为八。
粗的级别就显示粗的内容,细的级别就加载细的内容,就像高清影像的瓦片一样,第0级可以是整个地球,分辨率是256X256,然后一分为八,每张图片的范围变成了第0级的八分之一,但是分辨率仍然是256x256,就越往下拉越清晰。
本节我们就来构建这样一个八叉树的结构,本节如果你搞明白了,就入门了八叉树的结构,因为在构建树状结构的时候往往会用到递归。理解起来还是有点费劲的。LOD和PagedLOD都大量的用作构建数字地球等,其实原理都和本节差不多。
本节功能 1、随机生成5000个球,坐标范围在[-500, 500]。
2、对这5000个球生成八叉树,其结束条件是这样的:当结点的孩子小于16个时认为是叶结点,就不再往下分了。或者树的深度大于32也不往下分了。3、每一层我们用一个LOD来保存,当离的很远时显示父亲(把包围盒绘制出来),当拉近时父亲就一分为八。直到显示叶结点。
听起来就晕了吧,一定要好好的缕一缕。
具体实现 1、随机生成小球没有什么好说的。我们将生成的所有的小球的包围盒都压在globalElements当中,将所有小球组成的最大包围盒记为globalBound
typedef std::pair<std::string, osg::BoundingBox> ElementInfo; osg::BoundingBox globalBound; std::vector<OctreeBuilder::ElementInfo> globalElements; for ( unsigned int i=0; i<5000; ++i ) { osg::Vec3 pos = randomVector( -500.0f, 500.0f ); float radius = randomValue( 0.5f, 2.0f ); std::stringstream ss; ss << "Ball-" << i+1; osg::Vec3 min = pos - osg::Vec3(radius, radius, radius); osg::Vec3 max = pos + osg::Vec3(radius, radius, radius); osg::BoundingBox region(min, max); globalBound.
一、网络层简介 网络层介于传输层和数据链路层之间,其主要作用是实现两个不同网络系统之间的数据透明传送,具体包括路由选择,拥塞控制和网际互连等。网络层负责在不同的网络之间(基于数据包的IP地址)尽力转发数据包,不负责丢包重传和接收顺序。
网络层是网络与网络之间通信的最底层,在数据从数据链路层向传输层进行数据传输的通信中,起到构建一个中间通信子网的作用。不同网络有这不同的网络层协议和地址规范,如果一个网络中的用户不能识别其他网络的通信协议和地址规范,那么这两个网络之间就不能进行数据通信,就好比不同国家有着不同的交通法规,属于不同的交警系统管理,不允许他国车辆随便出入一样。不同网络也有不同的设计规范,属于不同的组织来管理,必须通过授权,并由专门的协议来负责网络间的通信。
如果只是同一局域网内的各个计算机之间的通信,单靠物理层和数据链路层就可以建立通信链路完成用户间的数据通信,但要扩大应用范围,连接不同的局域子网,就需要借助网络层处理各个网络子网的协议,从而进行计算机的网络互连,所以网络层在 TCP/IP 协议体系中叫网际互连层。
1、数据链路层与网络层的区别
● 主机 : 配有IP地址, 但不能进行路由控制的设备;
● 路由器 : 既配有IP地址, 又能进行路由控制;
● 节点 : 主机和路由器的统称
2、网络互连起来的使用设备
(1)物理层使用的中间设备叫转发器(repeater)
(2)数据链路层使用的中间设备叫做网桥或者桥接器(bridge)
(3)网络层使用的中间设备叫做路由器(router)
(4)在网络层以上使用的中间设备叫做网关(gateway)。用网关连接两个不兼容的系统需要在高层进行协议转换。
3、网络通信的两种情况——局域网和不同网
通常一个计算机网络就是一个管理边界(一般属于一个特定的公司),有一个特定的管理者负责,所以在进行计算机网络互连时,要同时考虑两方面的问题:一是授权用户可以在不同网络间互访,共享双方的资源;另一方面又要保持各计算机网络管理原来的独立性。
网络通信只有两种情况:如果通信双方在同一个局域网内,可直接通过数据链路层进行相互通信,但因为主机其实也有网络层的路由功能,所以两台主机间进行网络通信时通常也是通过三层来进行的( IP 协议则是 IP 地址寻址);如果通信双方在不同网络内,毫无疑问必须通过三层进行。事实上,网络层的IP包到达链路层后还要重封装成帧,因为不同网络中的统一标识就是三层地址(网络地址),局域网内链路层的则是 MAC 地址。所以不同层传输的数据包格式不一样,因为每层的标识不一样。网络层的IP包封装成帧后,其中封装的源和目的网络地址作为帧的数据部分,不会改变,这在前面的数据链路层中有介绍。
不同用户之间进行通信,首先得知道彼此的地址。
① 局域网内部的用户访问(物理层和数据链路层就可以构建一个局域网)是通过数据链路层的 MAC 地址进行。
② 不同网络之间进行访问不能通过属于数据链路层地址的 MAC 地址来进行寻址,这需要通过网络层对应的网络地址来进行访问,每个网络都通过其网络地址,即 NSAP(网络服务访问点)来标识,网络中的每个节点都有一个 NSAP。 这个 NSAP 就是由对应网络所运行的网络层通信协议来定义的,在目前最常见的TCP/IP协议网络中,这个协议就是IP协议,对应的NSAP就是IP地址。
在物理层传输的是一个个比特位(bit),在数据链路层中传输的是一个个以许多字节为单位的帧(Frame),在每个帧的帧头都有源节点的 MAC 地址和目的节点的 MAC 地址,局域网内部的寻址就是通过 MAC 地址进行的,而在网络层中传输的是数据报(Packet,也叫分组),一个数据报是一个数据帧经过网络层协议重封装后得到的,每个数据报的报头(IP头)都有源节点和目的节点的IP地址,网络间的寻址就是通过 IP 地址进行的。
4、网络层的作用
在网络体系中,每一层都是服务于对应的上下层的。网络层也是服务于上层的传输层和下层的数据链路层。
网络层的功能就是让我们在茫茫人海中,能够找到另一台计算机在哪里,是否属于同一个子网等。
其主要作用表现在一下几个方面:
(1)屏蔽网络差异,提供透明传输
网络层就是为了解决不同网络有不同的规范要求的差异问题,寻找一个不同网络间都能共同遵守的网络通信规范,以便不同网络间能相互识别,并接受对方的网络请求。也就是一个中转站的作用,两个毫无交集的网络通过这个中转站来建立交集。
(2)为网络间通信提供路由选择
路由选择是根据一定的原则和路由选择算法在多个结点的通信子网中选择一条到达目的节点的最佳路径的过程。确定路由选择的策略称为路由算法。在无连接的数据包服务中,网络节点要为每个数据包做出路由选择,即选择到达目的节点的最佳路线,而在面向连接的虚电路服务中,存在一条专门的逻辑线路,在建立连接时就已经确定了路有路径,无需额外选择。
(3)拥塞控制
拥塞控制是为了避免网络传输路径中数据的传输延迟或死锁。数据链路层中的流量控制功能,是针对数据链路中点对点传输速率的控制,这里的拥塞控制是针对在网络层传输路径中的端到端传输效率的控制。主要采用预约缓冲区、许可证和分组丢弃等方式。
5、网络层提供的两种服务
(1)shell中的${},##和%%的使用部分
假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt
可以用${ }分别替换得到不同的值:
${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个 / 及其左边的字符串:my.file.txt
${file#*.}:删掉第一个 . 及其左边的字符串:file.txt
${file##*.}:删掉最后一个 . 及其左边的字符串:txt
${file%/*}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个 / 及其右边的字符串:(空值)
${file%.*}:删掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
# 是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2
也可以对变量值里的字符串作替换:
${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部dir 替换为 path:/path1/path2/path3/my.file.txt
利用 ${ } 还可针对不同的变数状态赋值(沒设定、空值、非空值):
${file-my.file.txt} :假如 $file 沒有设定,則使用 my.file.txt 作传回值。(空值及非空值時不作处理)
${file:-my.file.txt} :假如 $file 沒有設定或為空值,則使用 my.file.txt 作傳回值。 (非空值時不作处理)
${file+my.file.txt} :假如 $file 設為空值或非空值,均使用 my.
进行人脸检测前需要调用笔记本的摄像头。
opencv中通过cv2.VideoCapture()来进行摄像头的调用。括号中为0代表调用本机摄像头,为1代表调用usb摄像头。
调用摄像头后,就需要进行人脸的检测,此处需要借助opencv中的CascadeClassifier()函数加载haarcascade_frontalface_alt.xml文件。
之后就是对摄像头得到的每帧视频进行处理,要对它进行灰度转换,再用之前加载得分类器进行人脸检测。使用classfier.detectMultiScale()返回检测到得人脸矩阵的Rect(x,y,w,h),x、y是左上角起始坐标,h、w是高和宽。
将得到的矩阵用cv2.rectangle()画出来。
所有代码如下:
import cv2 def openvideo(window_name ,video_id): cv2.namedWindow(window_name) # 创建一个窗口 cap=cv2.VideoCapture(video_id) # 获取摄像头 while cap.isOpened(): ok,frame=cap.read() # ok表示摄像头读取状态,frame表示摄像头读取的图像 if not ok : break cv2.imshow(window_name,frame) # 将图像矩阵显示在一个窗口中 c=cv2.waitKey(10) # 等待10ms,10ms内没有按键操作就进入下一次while循环,从而得到10ms一帧的效果,waitKey返回在键盘上按的键 if c & 0xFF==ord('q'): # 按键q后break break # 释放资源 cap.release() cv2.destroyWindow(window_name) print("cam closed") def facedetect(windowname,camera_id): cv2.namedWindow(windowname) cap=cv2.VideoCapture(camera_id,cv2.CAP_DSHOW) # Face Detection using Haar Cascades http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html?highlight=cascadeclassifier classfier=cv2.CascadeClassifier('haarcascade_frontalface_alt.xml') # 加载分类器,分类器位置可以自行更改,注意这里用opencv库文件夹下的绝对路径也不行,在库文件夹里找到这个文件复制到这个程序的同目录下,参考:https://blog.csdn.net/GAN_player/article/details/77993872 color=(0,225,0)#人脸框的颜色,采用rgb模型,这里表示g取255,为绿色框 while cap.isOpened(): ok,frame=cap.read() # 读取一帧数据,ok表示摄像头读取状态,frame表示摄像头读取的图像矩阵mat类型 print(ok) if not ok: break # 灰度 gray=cv2.
需求描述:
日历组件,某些日期被人选了,就不能再选,用一个颜色标记。用户可以选择部分能选的。
类似这样的需求图片。
办法1是,vant-ui 微信小程序插件 本身的日期组件是可以实现的。
具体方法:
<van-calendar title="日历" :show="true" :formatter="formatter1" color="#07c160" type="range" :show-confirm="false" /> 我们可以通过`formatter`来自定义渲染内容。 formatter1(day){ // 周日全天不可选 let week = day.date.getDay() if(week == 0){ day.type = 'disabled_yes' // 很牛笔 很关键 } const month = day.date.getMonth() + 1; const date = day.date.getDate(); if (month === 5) { if (date === 1) { day.topInfo = '劳动节'; } else if (date === 4) { day.topInfo = '五四青年节'; } else if (date === 11) { day.
el-tooltip不显示问题 在使用el-tooltip时,使用方法什么都一样,有些就是显示不出来,最后才发现,其包裹元素添加了v-if条件,那么el-tooltip也应该加上相同的条件,要不然就会显示不出来
<el-tooltip v-if="radioList === 'isAbandoned'" class="item" effect="dark" content="撤销标记" placement="top" > <span v-if="radioList === 'isAbandoned'" v-has="['AI_evaluation_list_update']" class="iconfont" style="color:#0DB2C5; cursor: pointer" @click="revoke(scope.row)" ></span> </el-tooltip>
先放一下成品图,以佛山市为例。
整体
细节
具体步骤如下
Step1 获取城市ID 打开Openmap官网,找到对应的城市,点击下载XML,再打开的新网页可以找到城市ID
Step2 通过城市ID下载oms数据 打开http://www.overpass-api.de/index.html,点击Query and Convert Forms, 在Overpass API Query Form 中输入代码(用来获取城市的路网数据),其中 area-query ref="3603464719’’, 中360后面的数字换为你要找城市的ID,点击Query,会下载一个 interpreter文件。
<osm-script timeout="1800" element-limit="100000000"> <union> <area-query ref="3603464719"/> <recurse type="node-relation" into="rels"/> <recurse type="node-way"/> <recurse type="way-relation"/> </union> <union> <item/> <recurse type="way-node"/> </union> <print mode="body"/> </osm-script> Step3 将oms数据转为shp数据 将OMS数据转为shp格式
打开https://geoconverter.infs.ch(网站很慢或者有时候不能使用),点击file uploade
然后点击传入文件,在select export format中选择.shp格式的文件,之后convert就可以了
如此就可以在arcgis中操作了。
当执行#make menuconfig时会出现内核的配置界面,所有配置工具都是通过读取"arch/$(ARCH)Kconfig"文件来生成配置界面,这个文件就是所有配置的总入口,它会包含其他目录的Kconfig。
Kconfig的作用:
Kconfig用来配置内核,它就是各种配置界面的源文件,内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config
Kconfig的语法可以参考“Documentation/kbuild/kconfig-language.txt”
Kconfig文件的基本要素:
1.config条目(entry)
config TMPFS_POSIX_ACL
bool "Tmpfs POSIX Access Control Lists"
depends on TMPFS
select GENERIC_ACL
help
POSIX Access Control Lists (ACLs) support permissions for users and
groups beyond the owner/group/world scheme.
To learn more about Access Control Lists, visit the POSIX ACLs for
Linux website <http://acl.bestbits.at/>.
If you don't know what Access Control Lists are, say N.
解析:
config:关键字,表示一个配置选项的开始;紧跟着的TMPFS_POSIX_ACL是配置选项的名称,省略了前缀"CONFIG_"。
bool:表示变量类型,即"CONFIG_ TMPFS_POSIX_ACL "的类型,有5种类型:bool、tristate、string、hex和int,其中tristate和string是基本的类型。
bool变量的值: y和n
今天把实现微信页面的跳转的几种方法总结分享下
1.使用导航组件,标签,页面链接来实现(可以发现点击时有背景)
<!-- sample.wxml --> <view class="btn-area"> <navigator url="../my/my">跳转到新页面</navigator> </view> 参数如下
2.给页面布局加监听bindtap事件,然后在方法里面,通过wx.navigatorTo来实现跳转(保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面)
在my.wxml中加监听bindtap事件
<view bindtap='jump'>跳转</view> 在my.js中实现跳转
jump:function(){ wx.navigateTo({ url: '../login/login', success: function(res) { }, fail: function(res) { }, complete: function(res) { }, }) } 参数如下
3.通过wx.redirectTo实现跳转(关闭当前页面,跳转到应用内某个页面)
navigateto_index: function (event) { wx.redirectTo({ url: '../index/index', success: function (res) { // success }, fail: function () { // fail }, complete: function () { // complete } }) } 参数如下
4.通过wx.navigateBack返回上一级(关闭当前页面。返回上一页面或多级页面)。
wx.navigateBack({ delta: 1, // 回退前 delta(默认为1) 页面 success: function (res) { // success }, fail: function () { // fail }, complete: function () { // complete } }) 以上所述是小编给大家介绍的微信小程序跳转方式详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
项目中经常遇到海量数据批量处理的问题,第一时间想到通过多线程来处理,要想海量数据快速的处理完成, 就需要使用多台服务器并行处理。本文演示如何在分布式环境下使用 ElasticJob 处理海量数据, 通过 Demo 展示多机任务如何分片,作业如何拆分,如何水平扩容等问题。
1 概述 Elastic Job 是面向互联网生态和海量任务的分布式调度解决方案。最初由当当基于 ZooKeeper、 Quartz 进行二次开发的分布式解决方案。2020年 6月,经过 Apache ShardingSphere 社区投票,接纳 ElasticJob 为其子项目。 目前 ElasticJob 的四个子项目已经正式迁入 Apache 仓库。
源码地址: https://github.com/apache/shardingsphere-elasticjob文档地址(3.X版本): https://shardingsphere.apache.org/elasticjob/current/cn/overview/ 2 演示目标 leader 节点选举;任务分片, 分片是否均匀;水平扩容; 3 演示源码 3.1 相关依赖包引入 演示代码基于 3.0.0-RC1 版本编写,环境要求: Java 8及以上版本、Maven 3.5.0 及以上版本、 ZooKeeper 3.6.0 及以上版本;本文采用 Java 8、 Maven 3.6.3、 ZooKeeper 3.7.0、SpringBoot 2.3.4.RELEASE;ZooKeeper 3.7.0 下载地址: https://apache.claz.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz项目启动前需要下载并启动 ZooKeeper: ./zkServer.sh start <dependency> <groupId>org.apache.shardingsphere.elasticjob</groupId> <artifactId>elasticjob-lite-core</artifactId> <version>3.0.0-RC1</version> </dependency> <dependencyManagement> <dependencies> <dependency> <groupId>org.
<?xml version="1.0" encoding="UTF-8"?> <configuration status="INFO" monitorInterval="60"> <Properties> <Property name="app.name"></Property> <Property name="log.home">D:/logs/</Property> <!-- <Property name="log.pattern">[%d] [%-5p] [%t] [%c{3.}] [%l] [_] [%m]%n</Property> --> <Property name="log.file.charset">UTF-8</Property> <Property name="log.file.pattern"> [%d] [%-5p] [%t] [%c{3.}] %m%n </Property> <Property name="log.console.charset">UTF-8</Property> <Property name="log.console.pattern"> %d %highlight{%-5p} %style{%pid}{magenta} --- [%15.15t] %style{%-37.37c{36}}{cyan} : %m%n%n </Property> </Properties> <!--先定义所有的appender --> <appenders> <!-- 这个会打印出所有的info及以上级别的信息,每次大小超过size,则这size大小的日志会自动存入按年月日建立的文件夹下面并进行压缩,作为存档 --> <RollingFile name="FILE_INFO" immediateFlush="false" fileName="${log.home}${app.name}/info_${app.name}.log" filePattern="${log.home}${app.name}/$${date:MM}/$${date:dd}/info_${app.name}_%d{yyyyMMdd}_%i.log.gz"> <!-- 只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) --> <Filters> <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" /> <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" /> </Filters> <PatternLayout pattern="
internal server error错误通常发生在用户访问网页的时候发生,该错误的意思是因特网服务错误。能够引起internal server error报错的原因有多个,如果你是网站主的话,可以对下列情形进行一一排查。
1.服务器资源超载。如果网站文件没有做过修改,最有可能的是同服务器的资源超载:即同一时间内处理器有太多的进程需要处理的时候,会出现500错误。借助SSH,可以在命令行中输入以下命令查看:ps faux ps faux |grep username 如果你查到某个进程消耗过多资源,可以用kill命令强制关闭这个进程,只需输入该进程的进程号(Pid):kill -9 pid。
2.文件权限设置错误。500错误还有可能是对文件设置了不正确的权限:后台目录和文件的权限默认应该是755,而图片,文字等html文件应该是644,所以如果在刚刚上传文件后出现500错误,应该主要检查文件权限设置。可以使用FTP软件选中所有文件,然后批量修改文件权限。
3.htaccess文件写入错误的代码。在使用某些wordpress SEO插件的时候,插件会改写.htacess文件,如果语法错误的话就有可能造成500错误!## internal server error
pip安装了pandas之后如果未能安装tables,之后使用pandas会报错,之后安装pytables的话如果用pip安装,如果之前未安装过 Microsoft vc++工具就会报如下错误
raise distutils.errors.DistutilsPlatformError( distutils.errors.DistutilsPlatformError: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ 就是需要vc++去编译,但也可以在这个网站 https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
找到不需要下载vc++ tools就可以安装的wheel文件,找到pytables以及对应自己pytgon版本的wheel文件,其中cp39表示支持python 3.9,所以自己看合适的包下载之后pip 下载的包名即可安装
这个问题是因为应用程序上下文中的一些bean的依赖关系形成了一个循环:
方式一:
如果在pom文件中引用的shiro-jar包是:
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.6.0</version> </dependency> 换成下面的jar包。如果还没解决,可是使用第二种方式
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.7.0</version> </dependency> 方式二:在配置配中添加:
@Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(@Qualifier("sm") DefaultWebSecurityManager sm) { AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); advisor.setSecurityManager(sm); return advisor; }
SELECT T.YEAR, T.REGION_TYPE,t.REGION_NUM FROM GIMZG_TB_CURRENT_SITUATION T
LEFT JOIN SYS_TS_REGION SYSR ON T.REGION_ID=SYSR.ID
LEFT JOIN BI_TB_PERSONNEL P ON T.USER_ID=P.LOGIN_ID
WHERE T.YEAR IN (2020,2021)
ORDER BY T.YEAR DESC, T.REGION_TYPE ASC , T.REGION_NUM ASC
-----------------------------------------------------------------------------------------------------------
上面的查询排序是错乱的。检查后发现,T.REGION_NUM 在数据库存的是VARCHAR2的,经过调整。
SELECT T.YEAR, T.REGION_TYPE,t.REGION_NUM FROM GIMZG_TB_CURRENT_SITUATION T
LEFT JOIN SYS_TS_REGION SYSR ON T.REGION_ID=SYSR.ID
LEFT JOIN BI_TB_PERSONNEL P ON T.USER_ID=P.LOGIN_ID
WHERE T.YEAR IN (2020,2021)
ORDER BY T.YEAR DESC, T.REGION_TYPE ASC , CAST(T.REGION_NUM as integer) ASC
修改之后排序正常了,特此记录一下。
Excel函数教程:与求和有关的函数
SUM函数是Excel中使用最多的函数,利用它进行求和运算可以忽略存有文本、空格等数据的单元格,语法简单、使用方便。相信这也是大家最先学会使用的Excel函数之一。但是实际上,Excel所提供的求和函数不仅仅只有SUM一种,还包括SUBTOTAL、SUM、SUMIF、
SUMPRODUCT、SUMSQ、SUMX2MY2、SUMX2PY2、SUMXMY2几种函数。
这里笔者将以某单位工资表为例重点介绍SUM(计算一组参数之和)、SUMIF(对满足某一条件的单元格区域求和)的使用。(说明:为力求简单,示例中忽略税金的计算。)
SUM
1、行或列求和
以最常见的工资表(如上图)为例,它的特点是需要对行或列内的若干单元格求和。
比如,求该单位2001年5月的实际发放工资总额,就可以在H13中输入公式:
=SUM(H3:H12)
2、区域求和
区域求和常用于对一张工作表中的所有数据求总计。此时你可以让单元格指针停留在存放结果的单元格,然后在Excel编辑栏输入公式"=SUM()",用鼠标在括号中间单击,最后拖过需要求和的所有单元格。若这些单元格是不连续的,可以按住Ctrl键分别拖过它们。对于需要减去的单元格,则可以按住Ctrl键逐个选中它们,然后用手工在公式引用的单元格前加上负号。当然你也可以用公式选项板完成上述工作,不过对于SUM函数来说手工还是来的快一些。比如,H13的公式还可以写成:
=SUM(D3:D12,F3:F12)-SUM(G3:G12)
3、注意
SUM函数中的参数,即被求和的单元格或单元格区域不能超过30个。换句话说,SUM函数括号中出现的分隔符(逗号)不能多于29个,否则Excel就会提示参数太多。对需要参与求和的某个常数,可用"=SUM(单元格区域,常数)"的形式直接引用,一般不必绝对引用存放该常
数的单元格。
SUMIF
SUMIF函数可对满足某一条件的单元格区域求和,该条件可以是数值、文本或表达式,可以应用在人事、工资和成绩统计中。
仍以上图为例,在工资表中需要分别计算各个科室的工资发放情况。?
要计算销售部2001年5月加班费情况。则在F15种输入公式为
=SUMIF($C$3:$C$12,"销售部",$F$3:$F$12)
其中"$C$3:$C$12"为提供逻辑判断依据的单元格区域,"销售部"为判断条件即只统计$C$3:$C$12区域中部门为"销售部"的单元格,$F$3:$F$12为实际求和的单元格区域。
来源:互联网
1 引言
设计同时包含Wi-Fi和蓝牙功能的消费类电子产品会遇到很多问题,特别是在要求同时工作模式的情况下。蓝牙和802.11b/gWLAN系统工作在2.4GHz频段,这两种技术都用到了可用频谱的重要部分(见图1)。
蓝牙和WiFi共存智能手机方案
当WLAN设备和蓝牙设备靠得很近并试图同时收发无线信号时就会发生干扰。这两种技术采用不同的方法进行信号传送:载波侦听多路访问(CSMA)和跳频扩频。前者用于802.11b/g收发器,它在发送信号前会侦听空闲信道。所发送的信号带宽大约20MHz,将占用间距为25MHz、最多3个非重叠信道中的一个进行传输。
而蓝牙则采用跳频扩频技术在79个带宽为1MHz的信道间以每秒1,600跳的速率跳跃选频,在每个跳频点发送较短的时分复用数据包。当一个设备发起连接并成为该子网的主设备时,蓝牙连接就成功建立了。如果知道目标地址,设备就直接发送页面消息。如果目标地址未知,会先发送一个查询消息,跟着再发页面消息。一旦两个设备同步上以后,这两个具备蓝牙功能的设备就处于连接状态,并且每个设备会设定一个唯一的MAC)地址。通过简单的计算可以证实,蓝牙发射器输出的信号与802.11b/g信号在大约25%的时间内会有冲突。
这种共同信道干扰效应与信号的相对强度与数据包的发送长度和占空比密切相关。针对这种干扰现象所做的各种分析和仿真试验表明,干扰会严重影响其中一种或两种信号。相关标准提供了不同信号设计方法——802.11b使用的直接序列扩展频谱(DSSS)、802.11g使用的正交频分复用(OFDM)及蓝牙使用的跳频所导致的干扰反弹程度。这些标准还使用基于数据包重传和数据速率降低的协议。然而,这些对策会极大地降低数据吞吐量,从而严重影响一些设备的性能。例如蓝牙音频传送或WLAN上的VoIP,数据包差错率只要超过几个百分点就会导致无法忍受的音频时延甚至通话中断。下面提出了解决共存干扰的的两种方法——AFH(自适应跳频)和AFH与三线共存(时分复用)结合使用的技术。
2 AFH(自适应跳频)技术介绍及试验结果
AFH技术是对原始蓝牙跳频序列的一种改进,它允许蓝牙设备缩减跳频点的数量,其基本原理是通过分辨出ISM频段中优良和恶化的信道,从而避兔使用恶化信道,减少受干扰的程度。当蓝牙微微网进入AFH状态后,其跳频序列可使用的跳频点N的数量是动态变化的,其最大值不超过79。AFH只用于连接状态,而不会改变寻呼、查询等状态时的跳频序列。
自适应跳频选择机制的实现是基于原79跳系统(Bluetooth1.2协议中规定不再使用23跳系统)的频率选择核心,在其基础上增加了AFH_mode和AFH_channel_map两个参数。
AFH_mode指出当前选频核心是否可以使用自适应跳频序列;AFH_channel_map中指明哪些信道是可用的,哪些信道是不可用的。首先,原选频核心生成一个信道,如果这个信道是AFH_channel_map中定义的可用信道,则不作任何调整,直接作为跳频序列的输出;如果此信道包含在不可用信道中,则通过重定位函数将其映射成一个可用的信道。这种映射关系是一一对应的,就是说,如果给定了蓝牙地址、时钟以及AFH_channel_map,一个不可用的射频信道将被唯一地转换为一可用信道,这样保证了在同一微微网中使用AFH机制的主从设备能够保持跳频序列的同步。
在这种实现机制下,非自适应的79跳系统的跳频序列等于将全部信适设为可用的AFH选频核心产生的频率序列,这一属性使得可以方便地与原非AFH设备保持兼容。
AFH技术的另一点改变是:在原跳频系统中,主从节点分别采用不同的频率发送数据;当处于AFH状态时,在一次主从对话期间,从节点使用与主节点相同的射频信道向主节点响应数据包,这被称作AFH的相同信道机制。使用相同信道机制主要是由于在网中存在干扰的情况下,减少跳频可以防止从节点在发送响应分组时跳到可能发生冲突的信道上,保证至少在一次主从对话的过程中数据不易受到干扰,达到提高吞吐率的目的。
不幸的是,诸如AFH等技术是专门为2.4GHz设备设计用于检测和避免干扰的,还不足以实现蓝牙与WLAN的共存。当蓝牙与802.11设备共存于同一设计中时作为独立技术的AFH是远远不够的,这主要是因为WLAN设备必须提供较高的输出功率才能支持长距离、高数据速率、可靠的互联网、语音、数据和视频传输。图2给出了手机在同时使用蓝牙和Wi-Fi时的仿真图,此时Wi-Fi正在进行数据传输,蓝牙耳机正在接听由小灵通打进的电话。
蓝牙和WiFi共存智能手机方案
单独使用AFH技术,结果使得Wi-Fi吞吐量下降20%左右,小灵通接听杂音大。由此可以看出手机的WIFI发送会干扰到手机蓝牙的接收。
3 AFH技术与三线共存(时分复用)技术结合解决干扰问题
AFH技术在上面已经介绍过了,单独使用AFH技术使用蓝牙耳机的通话效果不是很好,为了解决这种问题,在使用AFH技术的基础上又使用了三线共存(时分复用)技术。三线共存,顾名思义,就是使用三根线连接Wi-Fi和蓝牙,下面结合图3中Wi-Fi和蓝牙所示的三线连接图来描述一下三线共存的机制,其中主处理器使用的是TI公司的OMAP1621芯片。
蓝牙和WiFi共存智能手机方案
由图3可以看出,三线连接由RF_ACTIVE,BT_STATE,WLAN_ACTIVE三根信号线组成。RF_ACTIVE是从蓝牙设备向Wi—Fi设备发送的信号线,它通知Wi—Fi设备此时蓝牙设备正在工作,RF_ACTIVE在整个蓝牙的发送与接收过程中都是有效的。由于硬件的需要,它必须连接到PIO7且不能改变。
BT_STATE也是由蓝牙设备向Wi—Fi设备发送的信号线,它通知Wi—Fi设备此时蓝牙是处于发送状态还是接收状态。由于硬件的需要,此信号线必须连接到蓝牙的PIO5管脚。
WLAN_ACTIVE是由Wi—Fi设备向蓝牙发送的信号线,它用来通知蓝牙Wi—Fi设备将要发送或接收数据,下一个蓝牙的操作应该被取消。这根信号线默认连接到PIO9。
此种类型的三线连接一般只能用于BlueCore4以及更高的蓝牙核上。
这里的三线共存实质上使用的是时分共存技术,当Wi—Fi设备将要发送或者接收数据的时候下一个蓝牙任务动作将会被取消。蓝牙任务在这里一般分为高优先级和低优先级两种,当高优先级任务工作的时候,如果此时Wi—Fi也在工作,这时候Wi—Fi任务将会被取消,当蓝牙执行低优先级任务的时候,如果有Wi—Fi也在工作,这时候蓝牙任务应该被取消。
使用AFH和三线共存两种技术很好的解决了蓝牙耳机通话的语音质量问题,而且Wi—Fi传输数据的效果也比较好。图4就是在同时使用这两种技术的情况下对蓝牙和Wi—Fi测试的仿真图。
蓝牙和WiFi共存智能手机方案
4 结语
本文详细介绍了AFH技术和AFH技术与三线共存技术结合使用来解决智能手机上的蓝牙与Wi-Fi共存问题,通过试验结果得出了两种解决方法的效果,使用AFH技术和三线共存技术可以更好的解决蓝牙与Wi-Fi的共存问题。相信以后这种解决方案在同时拥有这两种无线的其他的终端上也会越来越多的得到应用。
为什么要使用path.resolve() 方法?
解答:
1)官网解释:path.resolve() 方法将路径或路径片段的序列解析为绝对路径。
2)根据操作实例,path.resolve() 方法对参数中路径的操作也是为了达到拼接路径的效果;
3)实际上得到的路径结果,相当于对参数路径进行了一系列”cd”操作,看下图实例
path.resolve('path1', 'path2')
// 结果:/path1/path2
path.resolve('path1', '/path2')
// 结果:/path2
path.resolve('path1', '../path2')
// 结果:/path2
path.resolve('path1/path2/path3', 'path4/path5', '../path6')
// 结果:/path1/path2/path3/path4/path6
方法/步骤
1.首先,我们需要确保电脑USB端口处于可用状态:
2.接下来我们需要将USB打印机与电脑正常连接,安装打印机驱动程序。建议通过随机配带的驱动光盘来安装打印机驱动程序。当然也可以借助“驱动人生”或“驱动精灵”来完成打印机驱动的安装操作。
3.待完成打印机驱动的安装操作后,我们还需要解除因非法操作所造成的USB端口被禁用的问题。可以直接在“设备管理器”中找到对应的打印机驱动名称,右击选择“启用”,或者通过第三方操作系统管理工具来实现。直接在百度中搜索下载“大势至USB控制系统”。
4.安装此工具后,按“Alt+F2”唤醒程序主界面,在“端口控制”栏目中清除勾选“禁用打印机”项,或者先勾选再清除此选项,以确保打印机端口的正常使用。
5.顺便说一下,“大势至USB控制系统”作为一款计算机操作系统管理软件,除了实现对接入计算机的外部设备进行禁用或启用操作之外,还具有“上网行为管理”、“智能接入设备控制”、“存储设备控制”以及“USB设备”的控制功能,简单的操作界面,只需要勾选对应的选项,即可实现相应的功能。
6.如果通过以上方法,仍然无法修复打印机故障,则需要查看并开启“Print Spooler”服务来尝试解决。在“计算机管理”窗口中,展开“服务”项,在右侧找到“Print Spooler”项,以确保此服务正常开启。
文章目录 报错项报错原因解决方案 报错项 在开启nginx获取客户端IP地址模块功能的时候,启动报错
nginx: [emerg] unknown directive "set_real_ip_from" in /usr/local/nginx/conf/nginx.conf:50 报错原因 nginx在编译安装的时候没有开启 --with-http_realip_module 该模块功能(获取客户端IP地址)
解决方案 重新编译安装ngixn,./configure 配置是开启 --with-http_realip_module 模块功能
./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module \ --with-http_realip_module make && make install
import random import numpy as np random.seed(0) a = np.random.randn(2,3) b = np.random.randn(2,3) c = np.concatenate((a, b), axis=0) d = np.concatenate((a, b), axis=1) print("a:\n-----\n", a) print("b:\n-----\n", b) print("c:\n-----\n", c) print("d:\n-----\n", d) a: ----- [[-0.20512506 2.09148353 0.07333005] [ 0.74309513 -1.97919177 0.63844411]] b: ----- [[ 0.36332038 -0.77519834 1.23217508] [ 0.59555455 -3.04889988 -0.39933057]] c: ----- [[-0.20512506 2.09148353 0.07333005] [ 0.74309513 -1.97919177 0.63844411] [ 0.36332038 -0.77519834 1.23217508] [ 0.59555455 -3.04889988 -0.39933057]] d: ----- [[-0.
有时候我们在打开文件夹的时候,明明是空的什么文件也没有,但是却发现仍然会占用磁盘空间,这是怎么回事呢?后来听说可能是有隐藏文件,这文件都隐藏了怎么才能看见呢?关于电脑中怎么查看隐藏文件的问题,小编给大家找了两种可以查看隐藏文件的方法,一起来瞧一下吧。
方法一:文件夹中查看隐藏文件
第一步,打开“空的”文件夹,点击窗口上方的【工具】选项,然后点击选择【文件夹选项】。
第二步,在新弹出的对话框中,点击【查看】选项卡。
第三步,在【高级设置】模块下,勾选【显示隐藏的文件,文件夹和驱动器】选项,然后去掉【隐藏受保存的操作系统文件】的勾选项,点击【确定】即可。
方法二:我的电脑中查看隐藏文件
第一步,双击打开【我的电脑】,然后点击展开【查看】选项卡。
第二步,在查看选项卡中的左右侧,点击【选项】按钮。
第三步,这时候就会进入到【文件夹选项】对话框,然后我们需要还是点击【查看】选项卡。
第四步,跟方法一相同,去掉勾选【隐藏受保存的操作系统文件】选项,勾选【显示隐藏的文件,文件夹和驱动器】选项即可。
不管你是什么系统的电脑,这2种方法中总有一个是你需要的。怎么查看隐藏文件的方法就讲完了,以后再遇到有隐藏文件的情况,就可以用以上的方法显示隐藏文件,最主要的还是这两种方法都非常的简单,而且还有好多操作都是相同的,回了一种另一种也就会了。好了,今天的分享就到这里了,希望能对你有所帮助。
在安装打印机驱动的时候你有没有遇到过电脑提示无法正常识别打印机的情况?关于这一类的问题主要是由于驱动的原因而导致的。我们在安装打印机的时候系统常常提示我们无法识别到打印机,这个时候不要急,其实解决这一类的方法很简单。下面我就给大家介绍一下如果遇到电脑无法正常十倍打印机的问题相关的一些处理方法。
1首先下载是打印机型号相匹配的驱动程序。
2、在桌面选中“我的电脑”,鼠标右键选择“管理”;在“管理”窗口中,选取“服务和应用程序”扩展项目下的“服务”选项,在右侧出现系统服务列表中找到“PrintSpooler”服务,在找到“print spooler”后,启动该服务。
3、双击驱动光盘中的安装程序,安装打印机驱动程序。将打印机的USB接口或其它接口数据线与电脑相连,然后打开打印机电源。
4、如果此时打印机仍然无法被识别。则需要手机安装驱动程序。
方法是:依次打开“控制面板”-“硬件和声音”-“设备和打印机”,右击窗口内容区域,选择“添加打印机”,在下一步中选择“添加本地打印机”,端口选择“USB虚拟打印机端口”,在下一步中选择驱动“从磁盘安装”,然后定位到驱动程序的目录进行安装,完成后重启计算机即可。
最后我还要说一下,因为现在绝大部分常用打印机都是USB接口,常用型号连接到USB接口,系统一般都能默认识别并安装驱动;不常用型号打印机和精简操作系统一般也都能识别出打印机,但需要手动下载或是用光盘安装打印机驱动,打印机方可使用。
有一个集合:
List users = getList(); //从数据库查询的用户集合
现在想获取User的身份证号码;在后续的逻辑处理中要用;
常用的方法我们大家都知道,用for循环,
List idcards=new ArrayList();//定义一个集合来装身份证号码
for(int i=0;i<users.size();i++){
idcards.add(users.get(i).getIdcard());
}
这种方法要写好几行代码,有没有简单点的,有,java8 API能一行搞定:
List idcards= users.stream().map(User::getIdcard).collect(Collectors.toList())
解释下一这行代码:
users:一个实体类的集合,类型为List
User:实体类
getIdcard:实体类中的get方法,为获取User的idcard
stream()优点
无存储。stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。
为函数式编程而生。对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。
惰式执行。stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。
可消费性。stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。
stream().map()方法的使用示例:
再看几个例子:数组字母小写变大写
List list= Arrays.asList(“a”, “b”, “c”, “d”);
List collect =list.stream().map(String::toUpperCase).collect(Collectors.toList());
System.out.println(collect); //[A, B, C, D]
数组所有元素,按某种规律计算:
List num = Arrays.asList(1,2,3,4,5);
List collect1 = num.stream().map(n -> n * 2).collect(Collectors.toList());
System.out.println(collect1); //[2, 4, 6, 8, 10]
(https://blog.csdn.net/shine_guo_star/article/details/94383319)
文章目录 一 MQ的安装1.1 官方地址下载1.2 环境需要1.3 注意事项1.3.1 需要关闭虚拟机linux防火墙1.3.2 主机防火墙 1.4 配置项1.4.1 broker 配置1.4.2 nameServer 配置 1.5 启动 NameServer1.5.1 NameServer 日志 1.6 启动 Broker1.6.1 Broker 日志 1.7 安装可视化 rocketmq-console1.7.1 下载 rocketmq-console1.7.2 编辑 rocketmq-console 配置文件1.7.3 启动 rocketmq-console1.7.4 rocketmq-console 日志1.7.3 访问可视化 二 基础入门2.1 MQ的定义2.2 为什么要用消息中间件2.2.1 应用解耦2.2.2 流量削峰2.2.3 数据分发 2.3 RocketMQ 产品发展2.3.1 RocketMQ 版本发展2.3.2 阿里内部项目的使用2.3.3 展望未来 三 RocketMQ 的物理架构3.1 核心概念3.1.1 NameServer3.1.2 生产者(Producer)3.1.3 消费者(Consumer)3.1.4 消息(Message)3.1.5 主机(Broker) 3.2 物理架构中的整体运转 四 RocketMQ 的概念模型4.1 核心概念4.1.1 分组(Group)4.1.2 主题(Topic)4.1.3 标签(Tag)4.1.4 消息队列(Message Queue)4.
IntentFilter的意思就是意图过滤器,当我们隐式的启动系统组件的时候,就会根据IntentFilter来筛选出合适的进行启动。
如果组件的 IntentFilter 与 Intent 中的 IntentFilter 正好匹配,系统就会启动该组件,并把 Intent 传递给它。如果有多个组件同时匹配到了,系统则会弹出一个选择框,让用户选择使用哪个应用去处理这个 Intent,比如有时候点击一个网页链接,会弹出多个应用,让用户选择用哪个浏览器去打开该链接,就是这种情况。
我们都知道,Intent 可以分为两种类型,分别为显示和隐示。
显示的调用也就是常使用的:
Intent intent = new Intent(context,Activity.class); startActivity(intent); 相信这种用法我们并不陌生。
对于隐式的调用方式,我们在创建项目的时候也就自动添加了,如在AndroidManifest.xml文件中:
<activity android:name=".TestActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 在intent-filter标签中,可配置的选项有三个,分别是:
action:用来表示意图的行动,这个可以自定义也可以使用系统中自带的 Action 值。上面的android.intent.action.MAIN,标识 该Activity 为这个APP的开始。category:声明接受的Intent类别。data:根据设置的数据匹配,通常为Uri类型。 在使用时候,通常为在配置文件AndroidManifest.xml中配置Activity的过滤规则,然后使用Intent在Activity中:
Intent intent = new Intent(); intent.setAction(Intent.ACTION_BATTERY_LOW); intent.addCategory(Intent.CATEGORY_APP_EMAIL); intent.setDataAndType(Uri.EMPTY, "video/mpeg"); startActivity(intent); 1. <action/> 首先IntentFilter中可以有多个action,Intent最多能有1个。
(1) 如果<intent-filter>标签中有多个<action/>,那么Intent请求的Action,只要匹配其中的一条<action/>就可以通过了这条<intent-filter>的动作测试。
(2) 如果<intent-filter>中没有<action/>,那么无论什么Intent请求都无法和这条<intent-filter>匹配。
(3) 如果<intent-filter>中有<action/>,若intent中不存在action,那么可以通过;如果intent中存在action,那么intent中的action必须是IntentFilter中的其中一个(区分大小写)。
2. <category /> 首先IntentFilter中可以有多个category,Intent也可以有多个。
(1)如果IntentFilter不存在category,那么所有的intent都无法通过。有一个例外,Android把所有传给startActivity()的隐式意图当作他们包含至少一个类别:"android.intent.category.DEFAULT" 。 因此,想要接收隐式意图的活动必须在它们的意图过滤器中包含"android.intent.category.DEFAULT"。
(2)如果IntentFilter存在category,如果intent中不存在存在category,可以通过。如果intent中存在,那么intent中的所有category都包含在IntentFilter中,才可以通过。
即:Intent中的类别必须全部匹配<intent-filter>中的<category />,但是<intent-filter>中多余的<category />将不会导致匹配失败。
1.一个案例了解POWER PIVOT:订单明细表,区域,产品表
关键字段(1)创建关系(a)一对多:一指的是创建关系字段是唯一值,多指的是创建关系字段的重复值
(b)多对一
(c)一对一
(2)一端的字段可以控制多端的度量值
(3)自动刷新
2.获取数据:(1)从其他源:(1)自excel(a)预览并筛选(b)表属性(2)需要被导入的数据源不能被打开
(2)粘贴:(a)你需要先在数据源中复制以后,才会启动pp中的粘贴
(b)什么时候用:你的数据源万年不变,数据不会不会变动,不需要刷新;省份区域表;日期表
(c)追加粘贴,替换粘贴:要不要省略第一行
(3)添加数据模型(a)快速实现数据刷新
(b)我们可以将数据透视表模型和通过添加数据模型进入pp中的数据源,放置在一个工作表中,方便更改数据源,实现模型刷新
原因:这是因为“MSVCR120.dll”这个dll程序消失了,所以会出现这样的情况。
解决方法:下载“MSVCR120.dll”这个dll文件
下载地址:DLL文件下载 在搜索框中输入确实的DLL文件,点击搜索即可,如下图: 点击文件名,往下拉,就可以看到下载按钮(可以根据实际情况进行下载,一般第一个就可以) 点击下载之后,把相关的压缩包下载到电脑上。
解压压缩包,就会看到“MSVCR120.dll”的文件
将这个文件复制,打开System32,点击粘贴,然后按照提示进行。
最后当你打开原来没有打开的程序时,就可以正常打开了。
在哪里能找到各行业的分析研究报告?先给一个干货,一个最实在的研究行业的办法:看此行业的上市公司的招股说明书,年份越接近的越好。
证券公司和咨询公司的行研写得隔靴瘙痒,看论文又基本上是偏技术细节。只有招股说明书的前端行研部分,是企业以亲历者和行内人身份写的报告,也是最用心最靠谱的行业报告。
当你翻遍了搜索引擎,就是找不到我需要的那一份;
找互联网相关的报告数据,艾瑞、艾媒、极光、酷鹅…… 要翻遍所有的官网报告页面才放心;
好不容易找到报告,注册、填职位信息、收验证码…… 结果下!载!要!收!费!
甚至有些报告已经是好几年前的数据,根本没有参考价值……
每次找报告的过程都是一个想摔键盘的过程有木有!!!
后来被我找到一个神器:
能够同时在微信和电脑上检索、免费下载报告的软件叫 “报告社”
通过 “报告社” 网站 baogaoshe.com ,我可以更方便的找到各行业的研究资料,获得一手资讯。
数据分析有三大作用:
现状分析
原因分析
预测分析
大多数情况下,用Excel的数据透视表进行汇总分析即可,但数据量一大,Excel就跑不动了,那可以采用Access数据库和Microsoft Query,可以使用SQL语句进行查询汇总分析。
数据分析归纳起来有两大类:
一类是呈现现状的描述性分析。主要通过对比与细分进行现状和原因分析,可以制作数据透视表,求和、求平均值以及数据分组了解其构成,甚至通过不同时间维度的对比,查找数据变化原因,最后制作相关图标对现状进行呈现及描述。
另一类是展望未来的预测性分析。主要分析现有数据间的相关性,探寻数据之间存在的联系,并进一步通过建立相关回归模型的方式对未来进行合理的预测。
现在介绍一个工具,侧重于描述性分析的PowerPivot。
在PowerPivot中,Excel的行、列限制已被取消,这样我们能方便地操作更大型的数据。它的核心功能表现在:
整合多数据源:PP可以从几乎任意地方导入任意数据源的数据,包括Web服务、文本文件、关系数据库等数据源。
处理海量数据:可以轻松组织、连接和操作大型数据集中的表,处理大型数据集(通常几百万行)时所体现的性能就像处理几百行一样。
操作界面简洁:通过固有的Excel功能(如数据透视表、数据透视图、切片器等),以交互方式浏览、分析和创建报表,只要我们熟悉Excel,就可以使用PowerPivot。
实现信息共享:PowerPivot for SharePoint可以共享整个团队的工作簿或将其发布到Web。
Access、Microsoft Query和PowerPivot这三个工具分别在什么时候使用呢?
每个工具有自己的优势及劣势,采用PowerPivot进行数据处理分析的集中情况:
习惯使用Excel数据透视表进行数据分析
数据量大,超出Excel范围,且未安装Access
无须进行或只进行一些简单的数据处理操作
————————————————
版权声明:本文为CSDN博主「fightingoyo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fightingoyo/article/details/105956164
【文献翻译】Functional Dependency Discovery:An Experimental Evaluation of Seven Algorithms 摘要1. 函数依赖关系2. FD算法概述2.1 准备工作2.2 分类2.3 其他算法 3. 七种FD发现算法3.1 TANE3.2 FUN3.3 FD Mine3.4 DFD3.5 Dep-Miner3.6 FastFDs3.7 FDEP 4. 评价4.1 实验装置4.2 行可扩展性实验4.3 列可扩展性实验4.4 对不同数据集的实验4.5 内存实验4.6 实验结果外推 5. 总结 摘要 1. 函数依赖关系 所有算法的目标相同,即发现给定数据集中所有最小的、非平凡的函数依赖关系。
分析:怎么理解最小,非平凡
贡献:我们按其主要概念对七种FD算法进行了分类,并对最新的发展进行了概述。我们重新审视所有的算法,并为它们的实际实现提供额外的描述,因为它们的原始出版物很少。我们比较了不同数据集的算法,并评估运行时和内存使用情况。从我们的实验结果,我们得出了具体的建议,何时使用哪种算法。我们还将所有实施、数据和评估框架在线提供
结构:第2节给出了FD发现的概述,讨论了常见概念、替代方法以及我们对发现算法的分类。第3节描述了算法的实现。第4节给出了我们的评估结果,第5节总结了每种发现算法的优缺点
2. FD算法概述 2.1 准备工作 FD的定义:X->A ;如果X的子集并不确定A,则函数依赖性X→A是最小的。如果A不是X的子集,则它是非平凡的。为了发现数据集中的所有函数依赖性,只要发现所有最小的、非平凡的FDs就足够了,因为所有的左侧(lhs)子集都是非依赖性的,而所有的左侧(lhs)超集都是逻辑推理的依赖性。
子集和超集:
2.2 分类 为了更好地理解这七种函数依赖性发现算法及其性质,我们将它们分为三类。第3节以下是对每种算法的详细讨论。
2.3 其他算法 3. 七种FD发现算法 3.1 TANE 有参考资料
基于三个概念:
分区细分(partition refinement)检查函数依赖是否成立先验-基因(apriori-gen)确保找到所有且只有最小的函数依赖被发现剪枝规则(pruning rules)动态缩小搜索空间
与所有的格遍历算法一样,TANE将搜索空间建模为Hasse图,如第2.1节所述。 2.1节讲了什么
图1描述了关系式r ={A,B,C}的Hasse图。
晶格被划分为级别,其中Li级别包含大小为i的所有属性组合。TANE没有开始计算整个晶格,而是从第1级(大小为1 属性集)开始,然后逐级向上移动(示例中的粗体)。
In each level Li, the algorithm tests all attribute combinations X ∈ Li for the functional dependency X \ A → A for all A ∈ X.
@EqualsAndHashCode注解的作用就是自动实现model类的equals方法和hashcode方法。
我们在实际工作中经常会使用lombok来简化我们的开发,例如我们可以在定义的model类上添加@Data注解,从而免去手写get、set、toString、equals、hashcode等方法。
先来看问题:
1、定义一个基础类Car
/** * 汽车 */ @Data public class Car { /** * 颜色 */ private String color; /** * 续航 */ private Integer endurance; } 2、定义一个扩展类BYD继承Car
/** * 比亚迪汽车 */ @Data public class BYD extends Car { /** * 价格 */ private Integer price; } 3、分别new两个对象并比较
public class EqualsAndHashCodeTest { public static void main(String[] args) { BYD bydBlue = new BYD(); bydBlue.setPrice(150000); bydBlue.setColor("蓝色"); bydBlue.setEndurance(1200); BYD bydWhite = new BYD(); bydWhite.
关于盐加密你需要了解的 目录 什么是盐,盐加密是什么为什么要使用盐加密 什么是盐,盐加密是什么 盐:密码学中是指通过在密码任意固定位置插入特定字符串,让散列后的结果和使用原始密码的散列结果不相符,这样一个过程我们称之为“加盐”。
盐值 是一组随机的字符串,系统随机生成;Salt可以插在最前面、最后面,也可以插在中间,可分开插入也可倒序。
拓:
第一代密码 => 数据库明文存储,一旦数据库泄露,用户数据全部泄漏
第二代密码 => 数据库加密存储,典型加密算法有 MD5 和 SHA1 ,数据库存储的密码为加密后的密文。但理论上来说不能被解密,即时数据库丢失,由于存储为密文,故根本无法判断用户原始密码。
第三代密码 => 数据库存储MD5加密后的 {明文密码+Salt} 即 MD5(明文密码+salt),进行加盐处理,当密码设置过于简单,第二代密码加密方式也并不可靠了,也常容易被破解。数据库加入一个Salt盐值字段【salt可以是任意字母、数字、或字母数字的组合,必须是随机产生的】,每个用户Salt值均不相同。
加盐加密 是一种对系统登录口令加密的方式,它的实现方式是将每一个口令同一个叫做"盐"salt的n位随机数相关联。 只要口令改变,随机位数就改变。随机数以未加密方式存于口令文件中,每个人可读;不再只是保存加密过的文件,而是先将口令和随机数连接起来一同加密,加密后结果存于口令文件中。
为什么要使用盐加密 在我们实际应用中,出于安全的考虑和数据的保密,常常需要使用到加密算法,一些网站的数据库管理着用户的ID及口令,口令以MD5等加密后的形式存在,但是有些时候可能数据库泄露问题。为解决这种问题,可以考虑盐化的方式,比如存密码不再只是使用传统的明文存储方式,而是可以采用 Hash+Salt (哈希加盐法) 的方式进行密码的存储,这种加入盐值的方式可以防止黑客暴力破解用户ID和口令。
盐值→通过插入在口令后进行HASH算法,即便是相同的口令,插入不同的盐值后生成的HASH值也是不相同的,由于MD5的不可逆性,想要逆向破解MD5也是非常耗时间的。
具体的流程是:
用户注册时: 1、用户在网站注册时提供ID与口令 → 2、系统为用户分配盐值 → 3、盐值插入口令后进行HASH → 4、将ID,HASH值与盐值存入数据库 身份验证时: 1、用户提供ID与口令 → 2、系统在数据库中通过用户提供的ID查找HASH值与盐值 → 3、将盐值插入用户提供的口令后进行HASH → 4、将HASH值与数据库中的HASH值比较,相等则验证成功,反之验证失败
缓存在同一时间大面积的失效,后面的请求都直接落到了数据库上,造成数据库短时间内承受大量请求
解决对策
1.采用 Redis 集群,避免单机出现问题整个缓存服务都没办法使用。
2.限流,避免同时处理大量的请求。
3.设置不同的失效时间比如随机设置缓存的失效时间。
4.缓存永不失效。
LaTeX公式转MathType公式步骤:
方式一:
在下面网页中编写LaTex公式,记得加$$,如图右键选择,将代码复制到MathType公式编辑器里。
https://www.zybuluo.com/mdeditor
同样的方法,可以在下面网页中操作。
http://engenharialivre.com/latex-para-word/
参考:
https://blog.csdn.net/hao5335156/article/details/100610403
网络浏览器如何使用百分比值确定显示
许多响应式网页设计的学生 在宽度值上使用百分比是困难的时刻。具体来说,浏览器如何计算这些百分比有困惑。下面你将会找到一个详细的说明,说明百分比如何在响应式网站上进行宽度计算。
使用像素的宽度值
当使用像素作为宽度值时,结果非常简单。如果您使用CSS将文档标题中的元素的宽度值设置为100像素宽,则该元素将与您在网站的内容或页脚或其他区域中设置为100像素宽的元素的大小相同页。
像素是一个绝对值,所以100像素是100像素,无论文档中出现某个元素。不幸的是,虽然像素值很容易理解,但它们在响应式网站上的工作效果不佳。
Ethan Marcotte创造了 “响应式网页设计” 这一术语,解释这个方法包含3个主要原则:
流体网格
流体介质
媒体查询
通过使用百分比而不是像素来确定尺寸值来实现流体网格和流体介质的前两点。
使用宽度值的百分比
当您使用百分比来为元素建立宽度时,元素显示的实际大小将根据文档的位置而有所不同。百分比是相对值,意味着显示的大小与文档中的其他元素相关。
例如,如果将图像的宽度设置为50%,则这并不意味着图像将以正常大小的一半显示。
这是一个常见的误解。
如果一个图像本身是600像素宽,那么使用CSS值将其显示为50%并不意味着它在网络浏览器中将是300像素宽。此百分比值是根据包含该图像的元素计算的,而不是图像本身的本机大小。
如果容器(可以是一个除法或一些其他HTML元素)的宽度为1000像素,则该图像将显示为500像素,因为该值为容器宽度的50%。如果包含元素的宽度为400像素,则图像将仅显示为200像素,因为该值为容器的50%。这里的图像具有50%的大小,这完全取决于包含它的元素。
记住,响应式设计是流畅的。屏幕尺寸/尺寸会随着屏幕尺寸/设备的变化而变化。如果您以物理,非网页的方式考虑到这一点,那就像有一个纸板箱,您正在填充包装材料。如果你说这个盒子应该是一半的材料,你需要的包装量将根据盒子的大小而有所不同。网页设计中的百分比宽度也是如此。
基于其他百分比的百分比
在图像/容器示例中,我使用包含元素的像素值来显示响应图像将如何显示。实际上,包含的元素也将被设置为百分比,并且该容器内的图像或其他元素将基于百分比的百分比获得它们的值。
这是在实践中显示的另一个例子。
假设你有一个网站,整个网站包含在一个分类与一个“容器”(一个常见的网页设计实践)。在这个部门里面还有三个其他的部门,你最终将以3个垂直列的形式显示风格。该HTML可能如下所示:
现在,您可以使用CSS将“容器”部门的大小设置为90%。在这个例子中,容器划分除了身体之外没有其他包围它的元素,我们没有设置任何特定的值。
默认情况下,主体将呈现为浏览器窗口的100%。因此,“容器”部门的百分比将基于浏览器窗口的大小。随着浏览器窗口的大小变化,这个“容器”的大小也将改变。因此,如果浏览器窗口为2000像素宽,则该分区将以1800像素显示。这是2000年的90%(2000 x .90 = 1800)),这是浏览器的大小。
如果在“容器”中发现的每个“col”部分都设置为30%的大小,则在这个示例中,它们中的每一个将是540像素宽。这是以容器呈现的1800像素(1800 x .30 = 540)的30%计算的。如果我们更改了该容器的百分比,这些内部分区也将改变它们呈现的大小,因为它们依赖于该包含元素。
我们假设浏览器窗口保持2000像素宽,但我们将容器的百分比值更改为80%而不是90%。这意味着它现在将呈现1600像素宽(2000 x .80 = 1600)。即使我们不改变我们3“col”分区大小的CSS,并将它们保留在30%,它们将以不同的方式呈现,因为它们的包含元素(它们的大小)被改变了。这三个部门现在将呈现480像素宽度,即1600的30%,或容器的大小(1600 x .30 = 480)。
更进一步地,如果这些“col”部门之一存在图像,并且图像的大小采用百分比,则其大小的上下文将是“col”本身。随着“col”部门的大小变化,内部的图像也会变化。因此,如果浏览器或“容器”的大小发生变化,那将影响三个“col”部门,从而改变“col”中的图像大小。如您所见,这些都是连接的它涉及百分比驱动的大小值。
当您考虑当使用百分比宽度时网页中的元素将如何呈现,您需要了解该元素驻留在页面标记中的上下文。
综上所述
百分比在创建响应式网站的布局方面发挥了关键作用。无论您是响应性地调整图像或使用百分比宽度,以形成一个真正流畅的网格,其大小相对于彼此,了解这些计算将是实现您所需要的外观所必需的。
文章目录 覆盖索引思考:是否可以使用联合索引? 联合索引最左前缀原则思考:建立联合索引的时候,如何定义索引内的字段顺序。 索引下推联合索引失效条件 覆盖索引 create table student( id int primary key, name varchar(10) NOT NULL, age int NOT NULL, gender int NOT NULL default 1 ) 对于SQLselect * from student where age between 20 and 30;,执行流程是:
先在age索引树上找到k=20的记录,取得 id;再到id索引树查到id对应的数据;在age索引树取下一个值age=30,取得id;再回到ID索引树查到对应id的数据;在age索引树取下一个值age=31,不满足条件,循环结束。 这里进行了多次的回表,因为我们知道数据存储在主键上,所以不得不回表。
为了避免这种情况,可以将SQL写成select id from student where age between 20 and 30;此时因为id的值已经在age索引树上了,因此可以直接提供查询结果,不需要回表。
像索引age已经“覆盖了”我们的查询需求,我们称为覆盖索引。
覆盖索引可以减少树的搜索次数,提升查询性能,因此是一个不错的性能优化手段。
思考:是否可以使用联合索引? 联合索引又叫复合索引。是指两个或更多个列上的索引。
假如业务有一个请求,需要根据学生的名字查询他的年龄,如果请求频率较低,索引的创建会占用空间,同时利用率也没那么高,造成资源浪费。但是如果请求频率比较高,那么这个联合索引创建就有很大的意义。它可以在这个高频请求上用到覆盖索引,不再需要回表查整行记录,减少语句的执行时间。但是付出的代价就是需要维护冗余的索引,毕竟鱼和熊掌不可兼得。
联合索引最左前缀原则 当b+tree的数据项是复合的数据结构,比如联合索引index(name,age,gender),b+tree是按照从左到右的顺序来建立搜索树的,数据(瑞雯,18,0)查询的时候,b+树会优先比较name是瑞雯的来确定下一步的搜索方向,如果name相同再比较age和gender,最后得到检索的数据;但当(20,0)这样的数据没有name的时候,b+tree就不知道下一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里查询。比如当(瑞雯,0)这样的数据来检索时,b+tree可以用name来指定搜索方向,但下一个字段age的缺失,所以只能把名字等于瑞雯的数据都找到,然后再匹配性别是女的数据。
思考:建立联合索引的时候,如何定义索引内的字段顺序。 我们可以根据索引的复用能力。因为支持最左前缀,所以当已经有了(name,age)这个联合索引后,一般就不需要单独在name上建立索引了。所以如果通过调整顺序,可以少维护一个索引,那么这个顺序往往就是需要优先考虑的条件。
如果没有name只有age这个条件,是无法使用联合索引的,这时候就需要创建一个单独的索引,这时候我们创建联合索引(name,age)和一个(age)的单字段索引。我们知道name的空间一般大于age的空间,这时候空间就是我们优先考虑的条件。
索引下推 当有部分不满足最左前缀原则时,MySQL引入了一种叫索引下推优化,在MySQL5.6之前,只能通过回表来获取结果。MySQL5.6之后,可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。
联合索引失效条件 已经知道了最左前缀原则,但是什么时候联合索引会失效呢?
首先创建一张测试表:
create table test( a int, b int, c int, d int ) 创建索引index(a,b,c,d);
一、定义 1、以物体检测领域的通用数据集COCO物体定义为例,小目标是指小于32×32个像素点(中物体是指32*32-96*96,大物体是指大于96*96)。 2、在实际应用场景中,通常更倾向于使用相对于原图的比例来定义:物体标注框的长宽乘积,除以整个图像的长宽乘积,再开根号,如果结果小于3%,就称之为小目标。 二、难点 coco上面: 1、包含小目标的样本数量较少,这样潜在的让目标检测模型更关注中大目标的检测。 2、由小目标覆盖的区域更小,这样小目标的位置会缺少多样性。我们推测这使得小目标检测的在验证时的通用性变得很难。 三、解决方案 按照常规流程分为:数据层面、backbone、neck & head、其他(后处理、loss) 数据层面 1、过采样包含小目标的图像 注意会使得中大目标一定程度掉点,需要权衡。 2、在包含小目标样本中多次复制粘贴小目标 MS COCO中的实例分割mask使得我们可以将任意目标从它原来的位置进行拷贝。拷贝被粘贴在不同的位置。通过增加每张样本中小目标的个数,匹配的anchor的数据增加了。这样改进了小目标在RPN训练期间在loss函数中的贡献。 但是要注意不同的策略带来的效果,不好的策略甚至造成性能下降 1)需要保存原图和增广图同时训练 2)一幅图中黏贴一个物体多次、黏贴多个物体多次、黏贴所有物体多次三种方案,最优的黏贴次数不同,作者的实验条件下黏贴多个物体三次最好。 3)只考虑 未被遮挡的目标,因为使用有遮挡区域的不连续样本会失真。我们确保新粘贴的目标 不与任何现有的目标重叠,至少与图像边界保持5个像素的距离。不需要进行边缘高斯模糊等(除非用其他更复杂的融合策略) 4)在将目标粘贴到新路径之前,我们进行随机变换。我们通过将目标尺寸在±20%范围,旋转在±15°范围缩放。 5)mosaic增强 3、提升输入图像分辨率 4、提高图像采集的分辨率 5、tile图像(裁切) 检测小物体的另一个重要策略是将图像切割后形成batch,这个操作叫做tile,作为预处理步骤。tile可以有效地将检测器聚焦在小物体上,但允许你保持所需的小输入分辨率,以便能够运行快速推断。 如果你在训练中使用tile,重要的是要记住,你也需要在推理时tile你的图像。 6、过滤无关类别 类别管理是提高数据集质量的一项重要技术。如果你有一个类与另一个类明显重叠,你应该从数据集中过滤掉这个类。也许,你认为数据集中的小物体不值得检测,所以你可能希望将其拿掉。 backbone 1、RFBNet Neck & head 1、FPN(已开源) 不同阶段的特征图对应的感受野不同,它们表达的信息抽象程度也不一样。浅层的特征图感受野小,比较适合检测小目标(要检测大目标,则其只“看”到了大目标的一部分,有效信息不够);深层的特征图感受野大,适合检测大目标(要检测小目标,则其”看“到了太多的背景噪音,冗余噪音太多)。所以,有人就提出了将不同阶段的特征图,都融合起来,来提升目标检测的性能,这就是特征金字塔网络。 这里跳过了SSD网络,因为FPN可以认为是SSD结构的进化。 2、ssh网络(已开源) 由于可以通过融合不同分辨率的特征图来提高特征的丰富度和信息含量来检测不同大小的目标,自然会有人进一步猜测,如果只检测高分辨率的特征图(浅层特征)来检测小人脸,使用中分辨率特征图(中间特征)来检测大的脸。(个人感觉并不如FPN,FPN也可以设置不同的规则分治) 还有一种方法就是不共享主干网络,不同网络检测不同尺寸的人脸(小米是这么干的,由于单独任务简单,每个主干网络也设计的简单) 整体结构如下: 检测模块结构如下: 上下文模块如下: 3、Faceboxes(已开源) 对那些底层的小anchor进行一个稠密化的工作,具体就是在每个感受野的中心,也就是SSD中的anchor中心,对其进行偏移。根据其密度大小进行2 、3或4倍的稠密化工作。如下图 个人感觉可能直接使用后面的anchor free 中基于密集检测的算法更优,比如centernet (object as point) 4、利用上下文信息 主要有两篇文章,具体比较晦涩,还未细看 1) 小目标,特别是像人脸这样的目标,不会单独地出现在图片中(想想单独一个脸出现在图片中,而没有头、肩膀和身体也是很恐怖的)。像[PyramidBox]( PyramidBox: A Context-assisted Single Shot Face Detector )方法,加上一些头、肩膀这样的上下文Context信息,那么目标就相当于变大了一些,上下文信息加上检测也就更容易了。 2) 通用目标检测中另外一种加入Context信息的思路,[Relation Networks]( Relation Networks for Object Detection )虽然主要是解决提升识别性能和过滤重复检测而不是专门针对小目标检测的,但是也和上面的PyramidBox思想很像的,都是利用上下文信息来提升检测性能,可以归类为Context一类。 5、利用GAN 网络 Perceptual GAN 使用了GAN对小目标生成一个和大目标很相似的Super-resolved Feature(如下图所示),然后把这个Super-resolved Feature叠加在原来的小目标的特征图(如下下图所示)上,以此增强对小目标特征表达来提升小目标(在论文中是指交通灯)的检测性能。效果提升非常明显,需要后续仔细学习。 其他 1、自动学习模型的anchor YOLOv5模型会根据你的自定义数据自动为你完成这项工作。你所要做的就是开始训练。 主要就是利用kmeas进行聚类。 2、focal loss 3、匹配策略 不是用iou,使用改进版的比如: GIOU、DIOU、CIOU 4、如果需要,更改rio pooling为rio align 5、SNIPER 图像金字塔是传统的提升物体检测精度的策略之一,其能提升精度的一个原因是尺寸多样性的引入。但是图像金字塔也有一个非常严重的缺点:即增加了模型的计算量,SNIPER提出动机便是解决图像金字塔计算量大的问题。 需要注意SNIPER并不是一个检测算法,而是对输入图像的一个采样策略,是对图像金字塔的替代。其采样的结果(chips)将作为输入输入到物体检测算法中。 算法虽然使用了RPN,但是并不是离开了RPN就无法工作了,RPN提供了一个提取假正利率的功能,这个可以通过Selective Search或者Edge Box近似替代。 另外,SNIPER仅仅是对训练速度的提升,往往更重要的检测速度并没有提升,反而是 模型必须依赖图像金字塔,这反而降低了模型的通用性,并不适合工业界,可能对打比赛提升性能有用 最后,作者开源的源码和论文出入较大,读起来比较费劲,以后有需要再学习。 参考链接: 1、 https://segmentfault.
前两天win7旗舰版的小伙伴电脑正常开机后,一直卡在“配置update失败还原更改,请勿关闭计算机“的界面。这一般由于没有关闭windows更新,但又清理电脑垃圾引起的电脑故障。这个问题很多用户都碰到过。接下来爱纯净就详解下win7开机一直卡在还原更改请勿关闭计算机的解决方案。
win7开机提示配置update失败还原更改具体的解决方案:
第一步:按电源键重启电脑后,键盘上快速按F8键,打开并进入到安全模式。
第二步:在进入安全模式下,还是会显示配置Windows Update失败。这时我们要耐心等待win7旗舰版进入安全模式下。
第三步:等电脑进入安全模式的原始界面后再重启电脑。这时电脑正常启动会跳过显示配置Windows Update失败并直接进入到win7桌面。
第四步:点击左下角的开始,选择【控制面板】。或者点击桌面上的【计算机】图标选择【打开】,点击【打开控制面板】也可以。
第五步:接着在控制面板窗口下,找到并打开位于中间的【Windows Update】图标。
第六步:打开【Windows Update】后,点击左侧的【更改设置】。
第七步:我们看到右侧【选择windows安装更新的方法】下的【重要更新】,通过下拉选择【检查更新,但是让我选择是否下载和安装更新】,然后点【确定】即可解决问题。
关于win7开机一直卡在还原更改请勿关闭计算机的解决方案就介绍到这了,碰到同样情况的用户可以参照此文中的方法。
1. 使用HWindow_Final控件 引用 HWindow_Tool.dll 文件
控件功能
1,支持鼠标中键缩放和左键拖动
2,支持在图像缩放后,region,xld,roi能够复现
3,支持region,xld按照指定颜色显示,并在缩放后复现
4,支持矩形1,矩形2,圆,和直线roi的绘制
5,可以显示当前鼠标左键所在位置的图像灰度值
6,可以保存原图,或者截屏当前窗口
追加项:
1),图像按自身长宽比例自适应显示
2),追加了点,扇形类
3),追加了容许/禁止编辑功能
4 , 追加了选中手柄尺寸调整功能
5),追加了演示序列化保存与加载
6),追加了演示记录缩放平移及恢复位置功能
7),追加了演示在鼠标所在位置绘制点线原等图形功能
8),追加了演示修改已有坐标//下面是运行环境
private HObject image = new HObject();//图片
private HObject brush_region = new HObject();//笔刷
private HObject final_region = new HObject();//需要获得的区域
private HTuple hv_WindowHandle;
因为HWindow_Tool控件是用winform开发的,用在WPF中只能通过WinFormHost:WindowsFormsHost <WinFormHost:WindowsFormsHost Name="FormHostHW" Width="600" Height="600" Margin="10" HorizontalAlignment="Left" Canvas.ZIndex="1"> <hw:HWindow_Final Name="hwindow" Width="600" Height="600" /> </WinFormHost:WindowsFormsHost> 通过xaml mvvm:EventToCommand,viewmodel获取HWindow_Final控件对象 <i:Interaction.Triggers> <i:EventTrigger EventName="Loaded"> <mvvm:EventToCommand Command="{Binding LoadedHWCommand}" CommandParameter="{Binding ElementName=FormHostHW}" /> </i:EventTrigger> </i:Interaction.
一、什么是函数节流(throttle) 概念:限制一个函数在一定时间内只能执行一次。
举个栗子,坐火车或地铁,过安检的时候,在一定时间(例如10秒)内,只允许一个乘客通过安检入口,以配合安检人员完成安检工作。上例中,每10秒内,仅允许一位乘客通过,分析可知,“函数节流”的要点在于,在 一定时间 之内,限制 一个动作 只 执行一次 。 上图中绿色块表示触发一次事件,持续触发事件时,throttle会合并一定时间内的事件,并在该时间结束时真正去触发一次事件
二、为什么需要函数节流 前端开发过程中,有一些事件或者函数,会被频繁地触发(短时间按内多次触发),最常见的例如,onresize,scroll,mousemove ,mousehover 等,这些事件的触发频率很高,不做限制的话,有可能一秒之内执行几十次、几百次,如果在这些函数内部执行了其他函数,尤其是执行了操作 DOM 的函数(浏览器操作 DOM 是很耗费性能的),那不仅会造成计算机资源的浪费,还会降低程序运行速度,甚至造成浏览器卡死、崩溃。这种问题显然是致命的。
除此之外,重复的 ajax 调用不仅可能会造成请求数据的混乱,还会造成网络拥塞,占用服务器带宽,增加服务器压力,显然这个问题也是需要解决的。 三、函数节流如何解决上述问题 根据上面对问题的分析,细细思索,问题的解决方案就呼之欲出了。
主要实现思路就是通过 setTimeout 定时器,通过设置延时时间,在第一次调用时,创建定时器,先设定一个变量true,写入需要执行的函数。第二次执行这个函数时,会判断变量是否true,是则返回。当第一次的定时器执行完函数最后会设定变量为false。那么下次判断变量时则为false,函数会依次运行。目的在于在一定的时间内,保证多次函数的请求只执行最后一次调用。 四、函数节流的代码实现 根据以上分析,我们对“函数节流”进行代码实现,如下:
(1)方法一:时间戳方案
// 时间戳方案 function throttle(fn,wait){ var pre = Date.now(); return function(){ var context = this; var args = arguments; var now = Date.now(); if( now - pre >= wait){ fn.apply(context,args); pre = Date.now(); } } } function handle(){ console.log(Math.random()); } window.addEventListener("mousemove",throttle(handle,1000)); (2)方法二:定时器方案
一、Wireshark 时间显示设置
1、在菜单栏上面点击视图->时间显示格式->选择自捕获开始经过秒数和自动(根据捕获文件),如图所示
这样设置就可以看出客户端和服务端每个数据包间隔时间
二、设置列用来显示当前包与前面包的时间间隔,具体步骤如下:
1、点击菜单栏上编辑->首选项,如图所示
2、点击首选项后,然后在首选窗口左侧选择外观->列,如图所示
3、点击该窗口的+号添加一个新的一咧,然后命令为tcp.time_delta,然后选择Absolute date,as YYYY-MM-DD,and time 这个时间来捕获设备所处时区的日期和时间,如图所示
4、在Wireshark首选项窗口中依次选择Protocols->TCP,然后勾选Calculate conversation timestamps,如图所示
三、案例分析
1、本机向DNS服务器查询域名
1982 237.385558 2021-06-30 10:25:09.381124 10.10.242.234 116.116.116.116 DNS 87 Standard query 0x2d62 A push.live.blackview4g.com 2、DNS服务器根据域名向本机客户端响应对应的IP地址
1983 237.433036 2021-06-30 10:25:09.428602 116.116.116.116 10.10.242.234 DNS 170 Standard query response 0x2d62 A push.live.blackview4g.com CNAME push.live.blackview4g.com.w.kunlunso.com A 211.91.241.244 A 211.91.241.243 3、服务器和客户端进行3次握手成功,客户端和服务端RTMP连接成功
//握手第一次 1984 237.434836 2021-06-30 10:25:09.430402 10.10.242.234 211.91.241.244 TCP 76 52090 → 1935 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1 TSval=4294962282 TSecr=0 WS=256 1985 237.
主板的故障千奇百怪,虽然大部分时候电脑无法正常启动是由主板硬件损坏所导致的,但也有相当多莫名其妙的故障情况是因为主板电池引起的。主板电池没电了会导致主板coms(BIOS)设置保存不了,电脑从而会出现各种故障。下面是学习啦小编给大家整理的一些有关电脑主机电池没电引起故障的处理方法,希望对大家有帮助!
电脑主机电池没电引起故障的处理方法
按下电源按钮,电脑没有任何反应,反复按下电源开关仍然无效。初步分析,很可能是电源部分出问题了,不是功率不够(劣质电源的“专利”)就是开关出现了短路,
状况1、无论怎么按下电源开关(插座接触良好并验证有电)电脑没反应。
状况2、电脑没有任何报警声,主板似乎根本没有加载到所需的电压,电源风扇也不动,电脑根本就无法通电。
处理方式:
打开机箱仔细查看主板与电源的连接处并没有什么异常,电源开关处是否有短路迹象,再次开机。检查是否可以从新启动。
上述方式不行的需要从新检查一遍,采用替换法:
一个250v的电源,换装后,如果电脑仍然没有反应;很可能是电源功率超标造成的,检查其他设备电源连通情况,尝试再次开机。
方法/步骤
检查电脑的电源风扇是否会转动起来,硬盘是否有自检声,显示器是否变亮,如果这时候电脑显示“CMOS Load Failure”。
系统提示按“F2”键继续启动,不管它,按“Del”进入BIOS设置。
按下F2键,让系统继续引导,如果还是无法进入Windows XP的桌面,再次重启。
按“Del”键进入BIOS设置,这时不需要输入密码,可以直接进入了,很显然CMOS电池没电了。
需要买了一块新的电池装进其中,并接上所有设备再次开机,电脑即可顺利启动。
看了“电脑主机电池没电引起故障怎么处理”的人还看了
我们的生活和工作离不开电脑,是我们的好帮手。但是电脑是机器,难免会出现一些问题,我们都会使用电脑,可是在电脑出现故障,很多人却束手无策。比如 电脑主板电池没电了,会对电脑有什么影响,对于这个问题,很多电脑小白朋友来说都太清楚,下面小编就给大家介绍一下电脑主板电池没电了的表现以及解决方法。
电脑主板上的电池主要作用就是为主板内部供电,主要是为了保存内部时钟以及CMOS设置。在主板南桥区域有一个RTC振荡电路,它需要主板在没有任何外界电源的情况下能继续工作,为下一次开机、以及内部时钟事先做好准备,而电池正好是为这小部分电路供电,以满足其正常工作。
这也是为什么当我们断掉电脑所有外部电源后,下次电脑开机后,电脑上的时间不会乱的原因,另外主板B苹果iOS设置也是基于此原理。
了解主板电池原理后,对于电脑主板电池没电了会怎么样?就比较好理解了,没有了主板电池,会出现以下几种现象:
1、电脑每次开机,时间都会恢复到初始时间,也就是说,时间不能正常同步,时间不准的问题,每次重新启动电脑,其电脑时间都恢复到了出厂设置的时间;
2、电脑Bios设置不生效;
当主板电池没电了会出现这样的情况,进入主板BIOS设置后,重新启动电脑,其之前设置的BIOS项目都失效,又会恢复到原始设置;比如电脑设置了开机密码,但如果主板电池没电,就会出现设置了开机密码失效,下次依然可以直接进入电脑;
3、还有一种情况是,电脑BIOS没电后,电脑不能正常启动开机,显示的是黑屏界面。当然也有部分电脑没有主板电池也可以开机,不过经常无主板电池进行开机运用,容易破坏主板南桥芯片,导致主板破坏。
通常电脑主板电池的寿命为四年,一般情况下我们都三年更换一次电池,电脑运用四五年后,就容易导致电池老化,容易导致时间不准,主板bios设置失效等,搞定办法就是更换电池!
语音内容:
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。
输入文字时,按下【Shift】键可以进行中英文切换。按下键盘上的【Ctrl】+【Shift】键可以进行输入法的切换。
快捷键(shortcut keys),即热键,是指使用键盘上某一个或某几个键的组合完成一条功能命令,从而提高电脑操作速度的按键。快捷键分三种级别,系统级快捷键可以全局响应,应用程序级热键只能在当前活动程序中起作用,控件级热键则仅在当前控件中起作用。
电脑(computer,又称计算机)是一种用于高速计算的电子计算机器,被称为“20世纪最先进的科学技术发明之一”。电脑由硬件系统和软件系统所组成,具有进行数值计算、逻辑计算和存储记忆等多项功能。它的应用领域从最初的军事科研应用扩展到社会的各个领域,带动了全球范围的技术进步。电脑包括:主板、CPU(中央处理器)、主要储存器(内存)、扩充卡(显示卡声卡网卡等有些主板可以整合这些)、电源供应器、光驱、次要储存器(硬盘)、软驱。显示器、键盘、鼠标、音箱、摄像头,外置调制解调器MODEM等。
网址:http://www.spritecow.com/
把精灵图上传,然后选中自己想要的图标,复制下面的代码(记住改url为自己项目中精灵图的路径)