VM options

文章目录 -Xms512m-Xmx1024m-XX:PerSize=512MXX:MaxPersize=1024M-noverify参考文献 刚参加工作,发现每次配置启动时,在 都配置了。虽然也是知道是配置虚拟机的,可是具体有什么用,不晓得。特此记录一下。 -Xms512m -Xmx1024m -XX:PerSize=512M -XX:MaxPersize=1024M -noverify -Xms512m 完整格式是: -Xmssize 这是一个不标准的选项(标准的选项是所有类型的虚拟机都可以使用的),而这个选项是特定于Java HotSpot Virtual Machine的。意思是设置堆的初始化大小,值的大小必须大于1M并且是1024byte的倍数。默认单位是byte,不过末尾可以使用k或者K去指明单位是kilobytes。同理可以使用m/M,g/G。下面是使用该选项设置堆的初始化大小为6M。 -Xms6291456 -Xms6144k -Xms6m 如果你不设置的话,那么堆的初始化大小为老年代和新生代的大小总和。 tips: 可以使用-Xmn option 或者 -XX:NewSize option来设置新生代的大小。 -Xmx1024m 完整格式是: -Xmssize 设置堆的最大大小,也必须为1024的倍数,并且必须大于2m. -XX:PerSize=512M permanent generation(由叫做non-heap),其实就是java虚拟机运行时数据区中的方法区。 用来设置方法区触发垃圾回收机制的内层大小。当超过大小就会触发垃圾回收机制。在jdk8中是不建议的,推荐使用-XX:MetaspaceSize替换。 Sets the space (in bytes) allocated to the permanent generation that triggers a garbage collection if it is exceeded. This option was deprecated un JDK 8, and superseded by the -XX:MetaspaceSize option. XX:MaxPersize=1024M 设置方法区最大大小。同样在jdk8中是不建议的,建议使用 -XX:MaxMetaspaceSize替换。

Python实现PDF、doc、docx、xls、xlsx文件文本替换(保留原格式)

需求: 替换pdf文件中的指定内容 解决思路: doc、docx、pdf、xls等文件都是以二进制形式保存,不能直接通过read('r')读取文件原始内容,需要转换为html文件,html文件可以通过read('r')获取文本内容,在进行文本替换。 替换doc、docx文件指定内容: 可以利用win32com库直接进行替换(只适用于win系统)或者转为html格式处理 替换xls文件指定内容: 转为html格式处理使用xlrd、xlutils两个库,参考https://blog.csdn.net/bocai_xiaodaidai/article/details/100007852 问题汇总: 利用libreoffice将doc、docx直接转为html,可能出现格式错乱问题,可先转为pdf,pdf再转为htmlxls文档内容过宽时,直接转html或者先转pdf都会出现排版错乱,此问题尚未解决。那种方式影响小先用哪种吧 格式转换工具参考:https://blog.csdn.net/bocai_xiaodaidai/article/details/99676635

vue的无缝滚动插件:vue-seamless-scroll

1、npm安装 npm install vue-seamless-scroll --save 2、引入 import scroll from 'vue-seamless-scroll' 官方demo:https://chenxuan1993.gitee.io/component-document/index_prod#/component/seamless-default 3、使用 <vue-seamless-scroll :data="listData" class="seamless-warp"> <ul class="item"> <li v-for="item in listData"></li> </ul> </vue-seamless-scroll> 4、配置 defaultOption() { return { step: 0.2, // 数值越大速度滚动越快 limitMoveNum: 3 // 开始无缝滚动的数据量 this.dataList.length // hoverStop: true, // 是否开启鼠标悬停stop // direction: 0, // 0向下 1向上 2向左 3向右 // openWatch: true, // 开启数据实时监控刷新dom // // singleHeight: 0, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1 // singleHeight: 20, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3 // waitTime: 1000 // 单步运动停止的时间(默认值1000ms) } }

全志 v4l2 VIDIOC_S_CTRL 报错Inappropriate ioctl for device

最近,有个热成像的uvc摄像头,在v4l2 ioctlv4l2 VIDIOC_S_CTRL报错 v4l2 VIDIOC_S_CTRL 报错 错误信息: iioctl(fd, VIDIOC_S_CTRL, &ctrl) == -1) 报错: Inappropriate ioctl for device 跟踪内核代码:linux-3.4/drivers/media/video/uvc/uvc_v4l2.c 函数: uvc_v4l2_do_ioctl() default: uvc_trace(UVC_TRACE_IOCTL, "Unknown ioctl 0x%08x\n", cmd); return -ENOTTY; } 没找到命令? 奇怪了, 根据信息 uvcvideo: Unknown ioctl 0xc008561c 难度VIDIOC_S_CTRL的值不为0xc008561c,在内核打印VIDIOC_S_CTRL的值为:c00c561c 说明VIDIOC_S_CTRL的定义在应用程序头文件和内核不一样 内核查找VIDIOC_S_CTRL定义 include/linux/videodev2.h:2497:#define VIDIOC_S_CTRL _IOWR('V', 28, struct v4l2_control) 应用程序定义 libc/usr/include/linux/videodev2.h:1874:#define VIDIOC_S_CTRL _IOWR('V', 28, struct v4l2_control) 看似应该是一样,差别应该在_IOWR和struct v4l2_control的定义, 继续查找struct v4l2_control定义 内核: 1147 /* 1148 * C O N T R O L S

eMTC网络系统广播消息研究

背景 LTE对于小区的公共配置参数通过系统广播消息发送给终端。终端在完成搜网和同步以后,下一步就是接收和解析系统广播消息。 系统广播消息分为MIB和SIB。MIB在BCH上发送,SIB在DL-SCH上发送。 eMTC是3GPP R13中为了增强对LTE - M的支持而引入的新的技术,也成为LTE CAT-M1。 国内目前没有eMTC商用网络,使用eMTC终端接入微戎WR100s测试系统,可以抓取信令消息进行分析。 MIB消息 MIB消息中以空闲的5bit携带schedulingInfoSIB1-BR-r13指示该小区是支持eMTC。以下是MIB消息的解析: dl-Bandwidth: n50 (3) phich-Config phich-Duration: normal (0) phich-Resource: one (2) systemFrameNumber: 2e [bit length 8, 0010 1110 decimal value 46] schedulingInfoSIB1-BR-r13: 16 PDSCH repetitions - TBS 208 bits (3) spare: 00 [bit length 5, 3 LSB pad bits, 0000 0... decimal value 0] SIB1消息 eMTC相关的配置参数主要是 bandwidthReducedAccessRelatedInfo-r13 c1: systemInformationBlockType1 (1) systemInformationBlockType1 cellAccessRelatedInfo plmn-IdentityList: 1 item Item 0 PLMN-IdentityInfo plmn-Identity mcc: 3 items Item 0 MCC-MNC-Digit: 0 Item 1 MCC-MNC-Digit: 0 Item 2 MCC-MNC-Digit: 1 mnc: 2 items Item 0 MCC-MNC-Digit: 0 Item 1 MCC-MNC-Digit: 1 cellReservedForOperatorUse: notReserved (1) trackingAreaCode: 0001 [bit length 16, 0000 0000 0000 0001 decimal value 1] cellIdentity: 1a2e0010 [bit length 28, 4 LSB pad bits, 0001 1010 0010 1110 0000 0000 0001 .

Non-resolvable import POM: Could not transfer artifact org.springframework.cloud:spring-cloud-depend

mvn clean命令,报错如下: [INFO] Scanning for projects… [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-commons-dependencies/1.2.2.RELEASE/spring-cloud-commons-dependencies-1.2.2.RELEASE.pom [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-netflix-dependencies/1.3.1.RELEASE/spring-cloud-netflix-dependencies-1.3.1.RELEASE.pom [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-stream-dependencies/Chelsea.SR2/spring-cloud-stream-dependencies-Chelsea.SR2.pom [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-task-dependencies/1.1.2.RELEASE/spring-cloud-task-dependencies-1.1.2.RELEASE.pom [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-config-dependencies/1.3.1.RELEASE/spring-cloud-config-dependencies-1.3.1.RELEASE.pom [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-consul-dependencies/1.2.1.RELEASE/spring-cloud-consul-dependencies-1.2.1.RELEASE.pom [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-sleuth-dependencies/1.2.1.RELEASE/spring-cloud-sleuth-dependencies-1.2.1.RELEASE.pom [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-vault-dependencies/1.0.1.RELEASE/spring-cloud-vault-dependencies-1.0.1.RELEASE.pom [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-zookeeper-dependencies/1.1.1.RELEASE/spring-cloud-zookeeper-dependencies-1.1.1.RELEASE.pom [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-security-dependencies/1.2.1.RELEASE/spring-cloud-security-dependencies-1.2.1.RELEASE.pom [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-cloudfoundry-dependencies/1.1.0.RELEASE/spring-cloud-cloudfoundry-dependencies-1.1.0.RELEASE.pom [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/cloud/spring-cloud-bus-dependencies/1.3.1.RELEASE/spring-cloud-bus-dependencies-1.3.1.RELEASE.pom [INFO] Downloading from central: https://repo.

WebDriver概述

什么是WebDriver? Webdriver (Selenium2.0)是一种用于Web应用程序的自动测试工具;它提供了一套友好的API;Webdriver完全就是一套类库,不依赖于任何测试框架,除了必要的浏览器驱动; WebDriver API 支持的开发语言 官网文档:https://docs.seleniumhq.org/docs/03_webdriver.jsp JavaPythonPHPJavaScriptPerlRubyC# 为什么要学习WebDriver? 自动化测试概念WebDriver-定位元素WebDriver-操作元素 基于Python环境搭建 Windows系统Python 3.5(以上版本)安装selenium包浏览器安装PyCharm selenium 安装、卸载、查看命令 安装:pip install selenium==2.48.0 1). pip:通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。 2). install: 安装命令 3). selenium==2.48.0: 指定安装selenium2.48.0版本(如果不指定版本默认为最新版本)卸载:pip uninstall selenium查看:pip show selenium 浏览器 火狐浏览器 FireFox 48以上版本 Selenium 3.X +FireFox驱动——geckodriverFirefox 48 以下版本 Selenium2.X 内置驱动 IE浏览器 IE 9以上版本 Selenium3.X +IE驱动IE 9以下版本 Selenium 2.X +IE驱动 谷歌浏览器 selenium2.x/3.x +Chrome驱动 各个驱动下载地址: http://www.seleniumhq.org/download/ 注意: 浏览器的版本和驱动版本要一致!(如果是32bit浏览器而Driver是64bit则会导致脚本运行失败!)浏览器驱动下载好后需要添加Path环境变量中,或者直接放到Python安装目录,因为Python已经添加到Path中推荐使用火狐浏览器(24、35)版

Jenkins自定义构建参数使用

Jenkins自定义构建参数使用 配置参数化构建 新建参数 简单的在命令使用, 直接使用字符参数即可 配置名称和默认值 命令中引用 mvn compile jib:build \ -Dimage_tag=pa-1.5.0${BUILD_TAG} \ -Dregistry_url=${REGISTRY_URL} \ -Dregistry_username=${REGISTRY_USERNAME} \ -Dregistry_password=${REGISTRY_PASSWORD} 使用参数构建 配置了参数这里就会编程使用参数构建 输入参数 这个时候构建命令里面的参数就会被替代

相对路径和绝对路径的区别和联系(图文分析)

一.基本概念 相对路径从名字可以看出是以某一个文件夹或者文件为参照点来看,其他文件夹或者文件的路径 绝对路径即是绝对的路径,固定死的路径,则是以根目录为起始点某一文件的路径,我们平时在电脑上的文件在硬盘上真正存在的路径就是绝对路径 比如根目录为A,A下面有B、C两个子文件夹,B文件夹下有D文件,C文件夹下有E文件,则对于D文件来说,E文件的绝对路径就是A:\C\E,E文件的相对路径则是../C/E;因为D和E都是在根目录A下面,但其上面都还有一个父文件夹,所以前面加个..表示上一层。如图所示 二.联系和区别 从上面例子我们可以看出如果将绝对路径转化为相对路径,则只需保留两者路径不同的部分,去除相同的部分即可,并且两者的分隔符有所却别,在相对路径中可以使用“/”字符作为目录的分隔字符,而在绝对路径中即可以使用“\”也可以 “/”字符作为目录的分隔字符 在相对目录中经常使用.代表的是当前所在的目录,使用..代表上一层目录,而/代表根目录 比如,我的前端项目结构如下 如果我需要在Dangfengjianse.vue项目中引用assets文件夹下的bgm.png图片,因为Dangfengjianse.vue和bgm.png都同在src文件夹下,则引用的相对路径格式为 而绝对路径则是 文件的绝对路径使用VSCode可以右键该文件,然后选择复制路径即可以得到绝对路径 三.总结 相对路径和绝对路径的使用没有绝对的要求使用环境,但是相对路径的使用更加灵活,方便更改,但如果相对路径可能有点难找,如果找的不对则容易出错;而绝对路径的话能避免这个问题,直接复制在硬盘上的路径即可,但是在使用上面的灵活性不如相对路径。

这2个在线资源网千万别错过,老司机人手一份,一年省下好几千

早些时候,国内的电影资源网站大部分是搬运了国外的破解资源,并非自己 “ 原创 ” 出来的,这两天很多人都在想尽办法求《哪吒》熟肉资源,我们这边的电影院已经下播了,然后大家也知道,新出的电影在下播之后也会要很长一段时间才能在手机上观看,错过电影院上映时间的小伙伴们可以在下面这个网站中搜索一下,很多熟肉资源甚至都不是会员。 【一部影院】 看漫画不过瘾,动漫更生动形象,一部影院里面包括斗罗大陆,妖神记等口碑极好的动漫,不良人也在内,无广告观看,这些熟肉不需要充值VIP,有一点要提醒大家,这个站点在电脑上打开无法播放,支持手机观看,给大家健康看一下内容。 最新电影 国内动漫 热门电视剧 站内有的全部不收费,观看图中没有广告没有病毒,一次性看到爽就是这种感觉吧。 【colorhub】 百度图片很多人在用,但这些图片清晰度肯定是不够的,去网站里面找图片素材又怕侵犯到别人的版权,巧了,这个网站里面有着许多精美的图片,可都是没有版权的,免费下载免费使用,根据要用的颜色选择图片定位新更强。 选择夕阳红 专辑栏系列图片 大自然系列 目前网站已收录109874张图片了,用作撰文配图或ps素材在风格会更统一,每一张图片都是高清的存在。 港真的,昨天今天为了找资源奔波好多搜索网站 最后发现这两个网站最好用,比较满意的是能对上大多数人的需求,今天给大家推荐的两个在线网站你们觉得哪个比较称心如意呢,欢迎下面给评价哦。

mui实现上拉刷新与下拉加载功能

引言 下拉刷新与上拉加载功能可谓是现在APP开发的两个常见功能,在电脑端我们常常通过点击分页的形式来向用户展示更多内容,不过在移动端我们可不想有这些多余的点击操作,只要想看更多内容只要下拉话上拉就可以了,这个小技巧可以大大的提高用户体验,下面我们来简单的了解一下MUI是如何实现这两种功能的。 关键点1: 初始化下拉刷新与上拉加载功能 mui.init({ pullRefresh: { container: '#refreshContainer', down: { callback: pulldownfresh // 下拉刷新 }, up: { callback: pullupfresh // 上拉加载 } } }); 关键点2: 定义下拉刷新与上拉加载的容器 <div class="mui-content"> <!--下拉刷新/上拉加载开始--> <div id="refreshContainer" class="mui-content mui-scroll-wrapper"> <div class="mui-scroll"> <!--执行上拉刷新或下拉加载的业务逻辑--> </div> </div> <!--下拉刷新/上拉加载结束--> </div> 关键点3: 编写下拉刷新逻辑,这里一般的逻辑都是通过ajax向后端获取更多数据,然后再显示到前端上。 function pulldownfresh() { // 业务逻辑开始 // 业务逻辑结束 // 结束下拉刷新 this.endPulldownToRefresh(); } 编写上拉加载逻辑,同下拉刷新一样,这里一般的逻辑也都是通过ajax向后端获取更多数据,然后再显示到前端上。 function pullupfresh() { // 业务逻辑开始 // 业务逻辑结束 // 结束上拉加载 this.endPullupToRefresh(); } 使用案例 <!doctype html> <html> <head> <meta charset="

电脑触摸板操作

基本操作:用单指触摸触摸板并移动相当于移动鼠标;轻敲触摸板相当于鼠标左键单击;轻敲两次相当于鼠标左键双击。 一、用单指触摸触摸板并移动相当于移动鼠标 二、单击左键相当于点击鼠标左键;单击右键相当于点击鼠标右键。 三、单指双击触摸板相当于鼠标左键双击;双指同时单击触摸板相当于单击鼠标右键。 四、拖动图标;左手双击图标后不松手,右手进行拖动 五、选中一段文字;左手双击后不松手,右手进行选中 六、双指在触摸板上上下、左右滑动,可以滚动浏览网页事文档;双指张开、闭合可以实现放大、缩小(看照片、文档时) 七、三个手指同时点击可以快速打开搜索界面;三个手指向上滑动可以显示虚拟桌面 八、三个手指向下滑动可以隐藏桌面打开的应用程序;三个手指左右滑动可以快速切换任务 九、四个手指同时单击可以快速打开操作中心。

PyTorch_GPU加速测试

示例代码: import torch import time print(torch.__version__) # 返回pytorch的版本 print(torch.cuda.is_available()) # 当CUDA可用时返回True a = torch.randn(10000, 1000) # 返回10000行1000列的张量矩阵 b = torch.randn(1000, 2000) # 返回1000行2000列的张量矩阵 t0 = time.time() # 记录时间 c = torch.matmul(a, b) # 矩阵乘法运算 t1 = time.time() # 记录时间 print(a.device, t1 - t0, c.norm(2)) # c.norm(2)表示矩阵c的二范数 device = torch.device('cuda') # 用GPU来运行 a = a.to(device) b = b.to(device) # 初次调用GPU,需要数据传送,因此比较慢 t0 = time.time() c = torch.matmul(a, b) t2 = time.time() print(a.

java 上传大文件以及文件夹

文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦、缺乏交互、用户体验差。 一、前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用HTML5的API,对文件上传进行渐进式增强: * iframe上传 * ajax上传 * 进度条 * 文件预览 * 拖放上传 1.1 传统形式 文件上传的传统形式,是使用表单元素file,参考 http://www.ruanyifeng.com/blog/2012/08/file_upload.html : <form id="upload-form" action="upload.php" method="post" enctype="multipart/form-data" > <input type="file" id="upload" name="upload" /> <br /> <input type="submit" value="Upload" /> </form> 所有浏览器都支持上面的代码,点击上传按钮后,网页"锁死",用户只能等待上传结束,然后浏览器刷新,跳到表单的action属性指定的网址。 1.2 iframe上传 用户点击submit时,动态插入一个iframe元素 var form = $("#upload-form"); form.on('submit',function() { // 此处动态插入iframe元素 }); var seed = Math.floor(Math.random() * 1000); var id = "uploader-frame-" + seed; var callback = "uploader-cb-" + seed;

rhel8订阅注册激活

先注册账号进行订阅 注册系统 https://www.howtoing.com/enable-rhel-subscription-in-rhel-8/

Altium Desiner10 设计简单了解及PCB四层板设计详细介绍

一、Altum Designer10破解安装 下载安装Altum Designer10.接下来这里将会附上破解版下载链接,请稍后 二、PCB画板简单介绍 1、新建工程PCB工程,打开AD10,点击File->New->Project->PCB Project.将工程文件取个名字保存在你能容易找到的文件目录下,这是一个项目工程文件,包含其他文件。如下图所示 2,新建库 这里的库包含两个,一个是元件库(元件引脚),一个是封装库(元件大小),接下来分别详细介绍创建方法: (1)元件库 点击File->New->Library->Schematic Library.取个名字保存在你能容易找到的文件目录下,在这里就可以画器件外形及引脚。如下图所示 (2)封装库(PCB Library) 点击File->New->Library->PCB Library.取个名字保存在你能容易找到的文件目录下,在这里就可以画器件大小。如下图所示 3、新建原理图 原理图是器件连接的桥梁,构建电路工作的基本连接,是画PCB必不可少的文件。 4,、新建PCB 这里的PCB就是交给厂家直接打板的文件 三、四层电路板绘制 1、四层板绘制 在PCB设计里,一般默认是双层板,即Top Layer 与BOttom Layer,在信号要求比较高的情况下,为了排除干扰,信号线与电源线分开,这时候就需要设计四层甚至更多层的PCB板,以保证信号的完整性。 在下图我们可以看到,只有Top Layer 与BOttom Layer,即两层板,点击Design->Layer Stack Mannger,弹出对话框如下图所示。 先选中左边的Top Layer,然后点击右边选项框的Add Plane,。 可以看到多了两层,四层板点击两下就可以,几层板就点几下,这里我们点两下,画四层板。 给新加的层取个名,点击左边Internal Plane1(No Net), 这里取VCC和GND,分别连接到5V(连接到5V是因为板供电电压为5V,这里大家可根据所设计PCB电源选择,以减少走线)和GND 修改好,点击OK即可。 可以看到下方多了刚新建的VCC和GND,到这里,一个简单的四层板雏形就搭建好了。 2、电源分割 电源分割是为了减少 PCB走线,表面上看起来不那么乱,也为了减少信号间干扰问题。 选中刚新建的VCC,点击Place->Line 在PCB上选出你要分隔的模块,点击连接到你要连的网络,这里需要注意的是,你所连接的图形是一个封闭的,这里选择的AVDD Shift+S组合键,你可以看到,整个VCC版面被分成了两大块,一部分连接到AVDD,一部分连接到5V(刚添加plane时连接的5V),这样电源层就被分割好啦 GND层也是一样。 接下来就是布线,覆铜,步骤和两层板一样,这样,一个完整的四层PCB板就设计好啦! 附加:有时候不注意就会让左下角菜单显项卡不见,点击View->Desktop Layouts->Default.就可以了。

小白一看就懂的Springboot+mybatis+mysql的demo项目

废话不多说,我们直接进入正题,基于springboot整合mybatis实现后台管理的小demo,在这里我用的编辑器是IDEA(最近比较火嘛,也来跟下风,嘻嘻) 第一步:打开idea编辑器,初始化一个Springboot项目:File---New---Preject---Spring Initializr,如下图: 按照规范填写好包名和项目名(这里就不做过多介绍),添加Springboot核心配置文件Application.yml 这里贴出相应的目录结构: Application.yml配置文件参数如下: spring: datasource: url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8&serverTimezone=GMT%2B8 username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver mvc: view: prefix: /WEB-INF/ suffix: .jsp #配置mybatis mybatis: typeAliasesPackage: com.fly.pojo mapper-locations: classpath:mapper/*.xml #配置mapper mapper: not-empty: false identity: MYSQL #配置Tomcat,配置80,可在浏览器访问项目时不用加端口号(默认端口8080) server: port: 80 第二步:创建实体类(User.java)并创建对应数据库user,便于演示,就只写了3个字段: package com.fly.pojo; public class User { private int id; private String name; private int age; public int getId() { return id; } public String getName() { return name; } public int getAge() {

php获取时间戳及对时间戳进行格式化处理

个人blog,欢迎关注加收藏 //获取当前的时间戳 echo "<h3>time()获取当前时间戳</h3>"; $timestamp = time(); echo $timestamp; //mysql获取当前时间的时间戳:unix_timestamp() //格式化时间戳 echo "<h3>date(日期格式,时间戳)格式化时间戳</h3>"; $date = date('Y-m-d H:m:s',$timestamp); echo '<br>'.$date; //mysql中格式化时间戳:from_unixtime(时间戳,日期格式) //与php参数位置不同 //并且mysql的日期格式需要写成'%Y-%m-%d %H:%m:%s',一定要加%

SystemUI中显示通知流程

目录 1.参考: 2.NotificationListenerService: 3.时序图: 4.时序图解读: 1.参考: 通知framework中的执行流程请参考: https://blog.csdn.net/zhao5214319/article/details/98848708 2.NotificationListenerService: 在SystemUI中会注册这个Service用来接收从Framework中传过来的通信信息,也就是StatusBarNotification这个类。这个过程使用的是Binder通信机制,AIDL接口为INotificationListener,在Framework代码中实现了这个接口,但这个实现是一个抽象服务类(extends Service)的,本质上是一个Services,但在SystemUI中的使用上可以理解就是向NotifcationManageService中注册的一个回调,当需要发送一个通知时,Framewok中接收到通知信息进行记录并处理,处理完了之后调用回调将信息传到SystemUI进行处理。 注册流程: 要了解NotificationListenerService的注册流程首先要连接SystemUI的启动流程,在这个里做一个简单的介绍。 启动流程大约分为几个阶段: 1>java环境启动阶段(fastboot->Kernel->java虚拟机) 2>framework服务启动阶段(参考:https://blog.csdn.net/zhao5214319/article/details/96483297) 3>SystemUI启动阶段 主要简单的介绍下SystemUI阶段,因为NotificationListenerService注册就是在这个阶段进行的,SystemUI启动流程会另起一篇文章详细学习。 时序图如下: 重点解读: 1>SystemUIApplicaton创建SystemBar对象时会使用工厂模式,若工厂中存在则直接使用,若不存则通过反射的newInstance方法创建此对象,并将对象加入工厂中。这块时序图中不能清晰表达,因此在这重点介绍 2>在SystemBar创建PhoneStatusBar对象时会读取配置文件,根据配置文件中配置的包名+类名进行创建,因此这块厂家可以配置自己的statusBar的java类,在进行此项开发时最好继承PhoneStatusBar这个类,当然继承BaseStatusBar或其父类也可以,但这样就需要自己实现大量的功能,会消耗大量的资源。 3>congfig.xml的配置如下: <string name="config_statusBarComponent" translatable="false">com.android.systemui.statusbar.phone.PhoneStatusBar</string> 4>时序图中调用了大量的start()方法,请注意:SystemBar、PhoneStatusBar和BaseStatusBar既不是服务,也不是新建立的线程,start就是一个java的最普通的方法。 5>在NotificationManagerService中NotificationListenerService一般有4个。 3.时序图: 4.时序图解读: 通知是怎么传到NotificationListenerService中的请参考此篇文章: https://blog.csdn.net/zhao5214319/article/details/98848708 在NotificationListenerService的onNotificationPosted方法中首先就是新开一个线程,这样做有以下几点好处: 将framework中的线程释放掉,这样可以节省Framwork进程的内存空间,防止因内存不够导致的问题释放Binder通道,防止资源暂用导致使用通道堵塞,从而引起的crash问题由于新开的线程是运行在SystemUI进程中的,出问题后可以通过进程ID快速定位那个模块出的问题 新开线程处理的好处多多,简单列举几条,希望以后在使用Binder通信时,把这个当成一个准则来使用(Binder接口不需要返回值时,要开线程来处理所有的活动,无论是耗时还是非耗时) 线程启动后首先就是对RemoteImput的处理,这是通知的一种新功能,支持用户的输入操作,增加了通知于用户的可交互性,最常用的就是短信模块,可以通过此工具快速回复短消息,此功能会单独记录,在这就不在啰嗦。 在RemoteInput之后就需要判断此次通知消息发过了是要进行更新处理还是要进行增加处理了:在此之前要了解NotificationData的作用。NotificationData是一个记录所有SystemUI中通知信息的实体类,它存在一个内部静态类Entry,这个Entry存放一条通知在SystemUI中显示所有需要的所有信息(包含RemoteViews),而NotificationData中有一个成员变量mEntries,它是一个ArrayMap类型的变量,通过Key-Value方式将所有通知对应的Entry,也是就是说,你在通知栏中看到的每一条通知都会有其对应的一个Entry。新增一条通知时,SystemUI会将StatusBarNotification对象,按照一定的规则转成一条Entry存储在SystemUI中,并将StatusBarNotification的对象释放。 这个Key值很重要,判断是否是新增就需要判断这个Key值能否从NotificationData中拿到有效数据,若不存在,则新增;若存在就更新。因此就要保证这个Key值是唯一的,可以通过Framework的StatusbarNotification中的key()方法来读懂这个Key值是怎么保证唯一的: private String key() { String sbnKey = user.getIdentifier() + "|" + pkg + "|" + id + "|" + tag + "|" + uid; if (overrideGroupKey != null && getNotification().isGroupSummary()) { sbnKey = sbnKey + "

报错:Required String parameter 'XXX' is not present错误的几种可能性

背景了解: 同事对代码做了改动,他在后台把原本接收的参数“username”改成了"id",没有把修改的事情通知我。拿到代码运行后发现前台网页的内容显示不完整了。下边是前后对比图 报错信息: Resolved exception caused by Handler execution: org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'id' is not present 中文释义:所需的字符串参数“id”不存在 错误分析: 根据控制台报错的内容来看,没有具体指向哪个文件哪个类或者方法,这样的报错很烦,联想到我项目前后运行的效果不一样,猜测可能是和我左侧菜单栏那有关系。去看了一下后台接口接收的参数是“id”,页面上传递的参数是“username”,问题应该是页面传递和后台接收的参数不一致导致 解决办法: 根据业务需求接收参数这里保持不变,接收id public List<Resource> getInfo(@RequestParam("id")String id) { logger.debug("data{}",resourceService.get(id)); return resourceService.get(id); } 页面这里传递的参数“username”改为“id” created() { var user = sessionStorage.getItem('user'); user = JSON.parse(user); let _para = { //username: user.username, //user对象是登录时存在session里的,直接从session里取出就行 id :user.id }; this.$fetch('http://' + http.host_port + '/Resource', _para).then(res => { if(res) { } }); } 刷新页面,发现问题解决了 在网上还看到几种情况也会导致这个问题: (1)头文件类型不对,可以在MediaType中选择合适的类型,例如GET和POST (2)jquery提交delete时,不支持@RequestParam,只支持@PathVariable形式 (3)api在调用的时候,如果存在重类型,但不重名;例如:/id与/name,两者在类型上是一样的

C语言中的break

参考例程 1 -> 用于for循环 for(;;){// A for(;;) {// B break; // 只跳出B的for循环 } } 参考例程 2 -> 用于switch int i; switch(i){ case 1: break; // 跳出Switch case 2: break; // 跳出Switch default: break; // 跳出Switch } 总结 1、break 在一些计算机编程语言中是保留字,其作用大多情况下是终止所在层的循环 2、break语句对if-else的条件语句不起作用 3、在多层循环中,一个break语句只向外跳一层 4、在 C语言 的 switch(开关语句)中,break 语句还可用来在执行完一个 case(分支)后立即跳出当前 switch 结构 5、break和continue对if都是没影响的 break和continue 1.break 用break语句可以使流程跳出switch语句体,也可以用break语句在循环结构终止本层循环体,从而提前结束本层循环。 使用说明: (1)只能在循环体内和switch语句体内使用break; (2)当break出现在循环体中的switch语句体内时,起作用只是跳出该switch语句体,并不能终止循环体的执行。若想强行终止循环体的执行,可以在循环体中,但并不在switch语句中设置break语句,满足某种条件则跳出本层循环体。 2.continue continue语句的作用是跳过本次循环体中余下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为仅结束本次循环 注意:continue语句并没有使整个循环终止 continue扩展说明 在while和do-while循环中,continue语句使得流程直接跳到循环控制条件的测试部分,然后决定循环是否继续进行。 在for循环中,遇到continue后,跳过循环体中余下的语句,而去对for语句中的“表达式3”求值,然后进行“表达式2”的条件测试,最后根据“表达式2”的值来决定for循环是否执行 在循环体内,不论continue是作为何种语句中的成分,都将按上述功能执行,这点与break有所不同

linux下设置IPV6默认路由,ping,路由跟踪

近日由于业务所需,需要在linux下设置IPV6地址和路由,IPV4的经常弄都在脑子里,但是IPV6的第一次弄,弄的过程好复杂,查了好多资料也问了好多人,终于学会了最基本的,现在总结出来分享下,希望对大家有帮助,自己也做个存档。 设置IPV6默认网关: ip -6 route add default via XXXXXXXX 这一句是把后面的XXXX的地址设置为默认网关。 设置IPV6静态路由: ip -6 route add IPV6地址/掩码 via 网关地址 dev 网卡名称 IPV6路由跟踪: traceroute6 XXXXXXX IPV6的ping: ping6 XXXXXXX IPV6的路由表: ip -6 route show 或 route -6

SQL中的left outer join,inner join,right outer join用法 (左右内连接)

SQL语句中的left outer join,inner join,right outer join用法 left outer join=left join , right outer join=right join, inner join=join. 使用关系代数合并数据 1 关系代数 合并数据集合的理论基础是关系代数,它是由E.F.Codd于1970年提出的。 在关系代数的形式化语言中: 用表、或者数据集合表示关系或者实体。 用行表示元组。 用列表示属性。 关系代数包含以下8个关系运算符 选取――返回满足指定条件的行。 投影――从数据集合中返回指定的列。 笛卡尔积――是关系的乘法,它将分别来自两个数据集合中的行以所有可能的方式进行组合。 并――关系的加法和减法,它可以在行的方向上合并两个表中的数据,就像把一个表垒在另一个表之上一样。 交――返回两个数据集合所共有的行。 差――返回只属于一个数据集合的行。 连接――在水平方向上合并两个表,其方法是:将两个表中在共同数据项上相互匹配的那些行合并起来。 除――返回两个数据集之间的精确匹配。 此外,作为一种实现现代关系代数运算的方法,SQL还提供了: 子查询――类似于连接,但更灵活;在外部查询中,方式可以使用表达式、列表或者数据集合的地方都可以使用子查询的结果。 本章将主要讲述多种类型的连接、简单的和相关的子查询、几种类型的并、关系除以及其他的内容。 2 使用连接 2.1 连接类型 在关系代数中,连接运算是由一个笛卡尔积运算和一个选取运算构成的。首先用笛卡尔积完成对两个数据集合的乘运算,然后对生成的结果集合进行选取运算,确保只把分别来自两个数据集合并且具有重叠部分的行合并在一起。连接的全部意义在于在水平方向上合并两个数据集合(通常是表),并产生一个新的结果集合,其方法是将一个数据源中的行于另一个数据源中和它匹配的行组合成一个新元组。 SQL提供了多种类型的连接方式,它们之间的区别在于:从相互交叠的不同数据集合中选择用于连接的行时所采用的方法不同。 连接类型 定义 内连接 只连接匹配的行 左外连接 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行 右外连接 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行 全外连接 包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行。 (H)(theta)连接 使用等值以外的条件来匹配左、右两个表中的行 交叉连接 生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配 在INFORMIX中连接表的查询 如果FROM子句指定了多于一个表引用,则查询会连接来自多个表的行。连接条件指定各列之间(每个表至少一列)进行连接的关系。因为正在比较连接条件中的列,所以它们必须具有一致的数据类型。 SELECT语句的FROM子句可以指定以下几种类型的连接 FROM子句关键字 相应的结果集 CROSS JOIN 笛卡尔乘积(所有可能的行对) INNER JOIN 仅对满足连接条件的CROSS中的列 LEFT OUTER JOIN 一个表满足条件的行,和另一个表的所有行 RIGHT OUTER JOIN 与LEFT相同,但两个表的角色互换 FULL OUTER JOIN LEFT OUTER 和 RIGHT OUTER中所有行的超集 2.

两种改进的冒泡排序算法

两种对冒泡排序的改进算法,对于n个元素的冒泡排序,普通的冒泡排序要经过n-1趟排序。 第一种改进:加一个标志位,当某一趟冒泡排序没有元素交换时,则冒泡结束,元素已经有序,可以有效的减少冒泡次数。 template <class T> void Sort<T>::bubbleSwap(DataList<T> &datalist, const int n, int &flag) { flag = 0; for (int i = datalist.m_nCurrentSize - 1; i >= n; i--) { if (datalist.m_pvector[i-1] > datalist.m_pvector[i]) { datalist.swap(datalist.m_pvector[i-1], datalist.m_pvector[i]); flag = 1; } } } template <class T> void Sort<T>::bubbleSort(DataList<T> &datalist) { int flag = 1, n = 0; while(++n < datalist.m_nCurrentSize && flag) { bubbleSwap(datalist, n, flag); cout<<"n = "<<n<<endl; }

CSS选择器Selector

目录 一、DOM 二、类选择器 类选择器示例代码 类选择器Class Selector *指定多个class 多个class选择器,后定义的优先级高 三、标签类型选择器 标签类型示例代码: 统一设定某种标签的样式 标签与类结合使用 四、ID选择器 元素的ID ID选择器 ID选择器示例代码: 五、伪类选择器 伪类选择器示例代码: 六、子选择器 子选择器示例代码: 一、DOM DOM, Document Object Model 文档对象模型 在HTML页面里,浏览器根据<body>和里面的所有标签,建立一个树状结构 <body>下的每个节点,称为元素Element 例如: 元素的通用属性: 元素都有一些属性,例如 id给改元素设置一个全局唯一的IDname给改元素设置一个名字class设置样式类名style设置临时样式............................. <img id="logo" src="img/U7015P1134DT20121120162824.jpg" /> 注:不要把显示的内容放在<body>以外 二、类选择器 类选择器示例代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>信息统计</title> <style> /*普通按钮*/ .my-button{ padding: 8px; border: 1px solid silver; font-size: 12px; color: black; background-color: #f1f1f1; min-width: 60px; } /*默认按钮*/ .my-button-default{ background-color: #0078D7; color: #f1f1f1; border-color: #F1F1F1; } </style> </head> <body> <p> <button class="

Linux(CentOS)上的分布式Hadoop安装搭建(hadoop2.7.7为例)

Linux(CentOS)上的Hadoop安装 注意:执行以下步骤我们都用非root账号,不要问为什么不用root账号,我拒绝回答-。-,非root账号是没有在根目录/下rwx的权限的,那么怎么用他执行我们需要的命令呢,在每条命令前加上sudo;当然友情提示 如果你是在装CentOS时,创建的非root账号,勾上管理员权限的小勾就可以使用sudo -f 文件名但是如果你是自己用命令新建的用户,要去/etc/sudoers文件中加上一段 注意:该文件只能用visudo命令打开在root ALL = (ALL)ALL行下加上(比如新建用户名为tutu) tutu ALL=(ALL) ALL sudo的具体操作参考这篇博客:https://www.cnblogs.com/henrylinux/p/9746835.html 以下操作用的用户名是centos 1. hadoop环境安装 1.1 安装jdk 1.注意:如果你安装的CentOS不是Min版本,可能Linux自带jdk,你需要先卸载它 1.1 查询系统是否安装了jdk命令:yum list installed | grep java 1.2 卸载以java开头:比如sudo yum remove java-1.8.0-openjdk... 1.3 如果卸载不了,查看是否在后台运行,强制杀死进程,再执行1.2步骤 a)下载jdk-8u65-linux-x64.tar.gz(以你安装的linux版本为准,如果你安装的是32位,那么jdk也下载32位的,下载网站:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html;这里我推荐在window上进行下载,然后用SecureCRT上传到Linux) b)tar开 $>su centos ; $>cd ~ $>mkdir downloads $>cp /mnt/hdfs/downloads/bigdata/jdk-8u65-linux-x64.tar.gz ~/downloads #这里是把下载的jdk移到downloads文件夹中 $>tar -xzvf jdk-8u65-linux-x64.tar.gz c)创建/soft文件夹,把soft的拥有权设置为centos用户 $>sudo mkdir /soft $>sudo chown centos:centos /soft d)移动tar开的文件到/soft下 $>mv ~/downloads/jdk-1.8.0_65 /soft/ e)创建符号连接,相当window中的快捷方式 $>ln -s /soft/jdk-1.8.0_65 /soft/jdk f)验证jdk安装是否成功 $>cd /soft/jdk/bin $>.

最详细的图文教程帮你解决GitHub下载慢或下载失败问题(2019.8.10亲测有效)

写这篇文章缘由,是下载一个机器学习课程的课件,想去GitHub上下载,结果下载速度居然只有几k,并且还老是下载失败。然后去百度解决办法,基本上都是让修改hosts文件,修改完成后发现效果并不明显(其实下载速度并没多大变化,从个位数变成了十位而已),于是找到了另一种方法来高速下载GitHub上的项目。 利用码云来克隆GitHub项目,操作简单而且有效,下面是图文详情: 1、首先需要一个码云账户,如果你没有,这个是官网地址——https://gitee.com/ 。 2、注册一个账户。 3、手机号就可以,一分钟的事。 4、新建一个仓库。 5、选择导入已有仓库。 6、找到你的GitHub网站,选择clone下的网址,复制。 7、在上面链接中输入我们刚刚复制的要导入的github项目地址,然后点击创建。 8、等待码云克隆项目,大概1-3分钟(由你的网络和要克隆项目大小决定)。 9、克隆完成,下载我们码云上的项目(这个就是你正常下载速度了)。 10、正常下载项目(原谅我的超级慢校园网速)。 11、最后下载完成后,如果不需要这个项目了可以在码云上删除,我们只是想解决下载慢和下载不下来的问题而已,不要过多的创建无用项目。 12、选择删除仓库,复制黑色验证信息到相应位置,点击确认删除,然后验证你的密码,就可以删除了。 本文只是提供一种博主验证可行并使用的解决GitHub下载慢或下载失败问题的方法。 如果想要更多的资源,欢迎关注 @我是管小亮,文字强迫症MAX~ 回复【福利】即可获取我为你准备的大礼,包括C++,编程四大件,NLP,深度学习等等的资料。 想看更多文(段)章(子),欢迎关注微信公众号「程序员管小亮」~

深度学习_卷积神经网络

卷积神经网络(Convolutional Neural Network, CNN)用于图像识别,在CNN 中有卷积层(Convolution层)、池化层(Pooling层)和全连接层(fully-connected), 随着网络深度的加深,高度和宽度会逐渐减小,信道的数量逐渐增加。 常见的卷积神经网络有两种: (1)Input -> 卷积层 -> 池化层 -> 卷积层 -> 池化层 -> …… -> 全连接层(几个)-> Softmax -> Output (2)Input -> 卷积层(一个或多个)-> 池化层 -> 卷积层(一个或多个)-> 池化层 -> …… -> 全连接层(几个)-> Softmax -> Output 1.卷积层 卷积层可以使图像保持形状不变,能正确理解图像等具有形状的数据,避免了全连接层无法利用与形状相关的信息。过滤器大小通常是奇数。 卷积运算: 卷积运算加偏置,是把偏置分别加到各个像元上 三维数据的卷积运算,有几个通道就需要几个滤波器,然后对应通道进行卷积运算,再把各通道计算值相加。 把数据看作是方块,进行理解;滤波器与输入数据具有一样的通道,最后输出数据是一维的。 选择FN个滤波器,会生成FN维的输出数据 2.填充 填充是在输入数据周围填入固定的数据(比如0),主要是为了调整输出数据的大小。 一般有两种方式: (1)不填充 (2)填充使图像卷积后大小不变 3.步幅 步幅就是使用滤波器时的位置间隔。 输出数据大小计算式: H: 输入数据的高 W: 输入数据的宽 FH: 滤波器的高 FW: 滤波器的宽 P: 填充 S: 步幅 OH: 输出数据的高 OW: 输出数据的宽 4.池化层

400 Bad Request: The browser (or proxy) sent a request that this server coul

错误类型 [POST]>400 Bad Request: The browser (or proxy) sent a request that this server could not understand. 400 (错误请求) 服务器不理解请求的语法。 使用场景flask 后台报400错误。400错误表示 由于语法格式有误,服务器无法理解此请求。 但后台的接口确实可以进行post请求。之后发现原因是当flask的request.form无法获取到对应的参数时,就会报400错误。 使用post请求时, 若是参数为json数据, request。 更正总结: json数据不能用表单接收, 表单最好也不要接收json数据 Flask 中接收与发送表单方式 from flask import Flask,render_template,request @app.route('/login',methods=['GET','POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] print username,password return render_template('login.html',method=request.method) Flask 中接收与发送json 方式详解 (转)https://blog.csdn.net/gymaisyl/article/details/86629874 1、利用flask的request.form.get()方法接收 from flask import Flask from flask import jsonify from flask import request import json @app.

针对tfrecords数据集,标签和图片读取不一致问题。

前一段时间,训练2分类深度网络时,loss一直维持在2.3左右。在网上看了很多博客,最后从这篇博客中找到了,解决的方法。具体的不详细说了,可以参考那篇博客。我按照上面的提到问题,仔细检测自己的网络,发现可能是我的数据集中的图片和标签不一致所造成。 我的数据集是tfrecords格式的二进制文件(前提:确保制作数据集的图片不存在问题,不然读取时会报错。),我制作代码如下: import glob import tensorflow as tf from PIL import Image import numpy as np import random num=0 bestnum=5000 recordfilenum=0 filenames=[] for filename in glob.glob('./data/PetImages/Cat/*.jpg')[2500:3000]: tmp=[] tmp.append(filename) tmp.append(0) filenames.append(tmp) for filename in glob.glob('./data/PetImages/Dog/*.jpg')[2500:3000]: tmp=[] tmp.append(filename) tmp.append(1) filenames.append(tmp) random.shuffle(filenames) for filename in filenames: if not num % bestnum: #超过1000,写入下一个tfrecord recordfilenum += 1 ftrecordfilename = ("valpetdata.tfrecords_%.3d" % recordfilenum) writer = tf.python_io.TFRecordWriter(os.path.join('./data',ftrecordfilename)) num = num + 1 img = Image.open(filename[0], 'r') img = img.

《微积分:一元函数微分学》——判断拐点的三个充要条件

二阶可导点是拐点的必要条件 设 存在,且点 (x0,f(x0) ) 为曲线拐点,则 判断拐点的第一充分条件 设 f(x) 在 x=x0 处连续,在点 x=x0 的某去心邻域 内二阶导数存在,且在该点的左右邻域内 变号 则点 (x0,f(x0) ) 为曲线拐点 判断拐点的第二充分条件 设 f(x) 在 x=x0 的某邻域内三阶可导,且 ,则点 (x0,f(x0) ) 为曲线拐点 判断拐点的第三充分条件 设 f(x) 在 x=x0 处 n 阶可导,且 当 n 为奇数时,点 (x0,f(x0) ) 为曲线拐点 证明: 由于n为奇数,令 n=2k+1,构造极限 上述洛必达法则成立的依据是最后的结果存在. 由函数极限的局部保号性可得: 同理可证 的情况 故点(x0,f(x0) ) 为曲线拐点 证毕

这些免费版音视频格式转换器哪个最好用

大家肯定都知道音频转换软件是什么,顾名思义也能明白就是当你碰到有什么音频在音乐播放器上因格式错误而导致无法正常播放时就需要借助到音频转换器来将音频格式转换成其它格式。那么谁知道音频格式转换软件免费版哪个最好用吗?小编接下来分享的这些音视频转换软件你一定没用过,不信就一起来看看吧! 软件一:迅捷音频转换器 迅捷音频转换器是一款多功能的音频编辑处理软件,软件具有功能齐全,操作简单等特点,支持音频剪切、音频提取、音频转换,可以多种分割方式进行音频剪切,而且软件不仅支持单个文件操作,还支持文件批量操作! 软件二:稞麦网视频转换器 稞麦网视频转换器(xmlbar)是一款易于使用、功能强大的视频文件格式转换工具。它不但完全免费而且不含有任何第三方插件,可以完全干净卸载。用户可以将多个视频文件一起转换,并输出到指定路径。支持各种视频和音频格式的相互转换,如mp4、3gp、mov、flv、f4v、avi、wmv、mp3等(特色: mp4和f4v之间可快速转换)。支持转换成为各种设备和os上可以观看的视频,如ipad、iphone、谷歌android、psp等。 软件三:视频转换大师 视频转换大师(WinMPG Video Convert)为视频格式文件转换提供了终极解决方案,它能够读取各种视频和音频文件,并且将他们快速转换为流行的媒体文件格式。 软件四:万能视频转码软件 一款视频格式转换的实用工具。万能视频转码软件不仅可以帮助你快速转换需要的视频格式文件,操作简单,不用很复杂就可以上手操作。而且万能视频转码软件还支持多种类的视频格式转换、具有视频抓取。剪辑等功能。为用户带来良好的视频转换体验。 文章最后告诉大家一个小秘密,其实小编一直用的是以上第一款音频转换器,这个软件界面简洁、引导式的功能界面,就算是新手也能马上上手,支持的音频格式也很多,基本上主流的音频格式都能相互转换。

spirng源码中关于方法refreshBeanFactory委派模式的理解

今天在查看spring源码时在AbstractApplicationContext类中看到了如下代码 跟进 refreshBeanFactory()方法后发现是一个抽象方法,如下: protected abstract void refreshBeanFactory() throws BeansException, IllegalStateException; 而正在实现方法的是她的子类 如是陷入了深深的纳闷中“父类竟然能直接调用子类中的方法?” 经过网上搜索发现这叫委派模式。 网上是这么介绍的: 比较有用的例子如下: ***在这个例子里,类C可以委托类A或类B,类C拥有方法使自己可以在类A或类B间选择。因为类A或类B必须实现接口I规定的方法,所以在这里委托是类型安全的。**/ package Paint; interface I { void f(); void g(); } class A implements I { public void f() { System.out.println("A: doing f()"); } public void g() { System.out.println("A: doing g()"); } } class B implements I { public void f() { System.out.println("B: doing f()"); } public void g() { System.out.println("B: doing g()"); } } class C implements I { I i = new A(); public void f() { i.

teamviewer检测为商业用途 5分钟后关闭解决方法

相信很多办公的人员都会喜欢使用远程的工具,目前在是市面上使用较多的远程工具有teamviewer,向日葵,还有QQ的远程。但是使用比较频繁的还是teamviewer,但是teamviewer使用比较频繁之后,就会有所限制,就会弹出检测为商业用途 5分钟后关闭的字样,这样很不方便。 步骤一: 关于如何解决“teamviewer检测为商业用途 5分钟后关闭“这样一个问题呢?相信很多网友都尝试过了,包括小编在内也尝试过了, 最终小编总结出了一个方法,彻底解决了这样一个问题。 步骤二: 那就是修改系统的mac地址,就是这么简单。打开桌面的控制面板,然后找到网络与Internet那个选项,点击"查看网络状态与任何”那一栏。就会跳转到网络共享中心这个界面。 步骤三: 在网络共享中心这个界面中,点击左边的“更改适配器设置”选项,在网络连接这个界面中,找到本地连接的网络,然后右键属性,就转到了本地连接的属性对话框中。 步骤四: 在对话框中,点击配置按钮,就转到了Realtek PCIe FE Falimy Controller属性对话框中,然后在上面的菜单按钮中点击高级那个选项,滚动滚动条,找到网络地址那个选项。 步骤五: 双击“网络地址”选项,来到了更改mac地址值的界面,然后在单选框中选中值那一栏,然后随便更改一下值,注意:如果是局域网的话,不要更改重复了,小编这边就随便写了个1。 步骤六: 更改之后,按下确认键,此时网络会断开一下,然后网络重新连接完成,此时mac地址更改已经完成。这个时候,你再重新打开teamviewer,如果你打开的id与之前修改mac地址的id 不同的话,恭喜你完成了。 步骤七: 如果打开的id和以前一样,卸载,再修改mac之后重装。

第五章 WebRTC, SIP和 Verto

WebRTC,视频和音频的实时通信,已经在超过十亿个浏览器上工作。很快移动应用程序就会成倍增长。WebRTC有望成为物联网(IOT)所采用的多媒体通信层。 FreeSwitch是一个完整的WebRTC解决方案,使现有的和遗留的应用程序能够通过新的渠道为用户服务。此外,Freeswitch是一个超级可编程应用服务器,是您创建杀手级服务的基础,它定义了“快速致富”的新概念! WebRTC是一组P2P多媒体流的技术和标准。WebRTC需要一个额外的信令和会话管理层才能真正有用:它包括用户目录、用户定位、故障管理等等。 FreeSWITCH既支持WebRTC上的SIP(会话初始化协议),也支持VERTO协议。VERTO是一种新的开源协议,它的设计旨在为JavaScript开发者提供方便。 我们将看到如何安装、配置和管理FreeSWITCH服务,把它作为一个集成的WebRTC平台。我们还将看到Verto Communicator (VC)的惊人先进性,和简单的浏览器客户端视频会议和远程呈现应用。 最后,我们将以两种难以区分的方式实现同一个应用:WebRTC房间,一种基于SIP.js,另一种基于verto.js。 这一章,我们将讨论以下主题: WebRTC 概念WebRTC 里的加密FreeSWITCH的WebRTCSIP和Verto协议的基本原理安装并配置一个完整的FreeSWITCH WebRTC平台Verto通信的惊人特性怎样利用Verto和SIP.js编写测试应用 WebRTC概念 WebRTC是一组支持P2P音频、视频和数据采集、流媒体和交换的标准和技术。它的首款“杀手级”应用是视频电话和视频会议。它首先在web浏览器上实现(已有超过10亿个兼容WebRTC的浏览器),这项技术已经在许多智能手机应用上推广,据预测,它可能成为物联网多媒体通信的基础(将有数十亿的物联网设备启用WebRTC)。 在最直接和流行的实现中,浏览器会访问一个页面,并加载页面所包含的Javascript。脚本的函数使用WebRTC API(后面介绍)与计算机多媒体硬件交互(麦克风、摄像头),并且和对端交换音视频媒体流。 这里的重点是P2P。WebRTC不规定或支持任何超出抓取、发送、接收和播放流之外的操作。没有信令,没有用户目录或定位服务,没有协商通信会话建立和销毁的协议,等等。 WebRTC既不是协议,也不是服务。仅使用WebRTC技术,你必须对两个端点的应用地址硬编码,嗅探它们的监听,而应用程序只对这些端点有效。 除了最简单演示之外,WebRTC还需要某种信令和会话管理协议。对于你的WebRTC服务来说,你可以选择现成的协议,或者自己发明一套私有协议。 最成熟的会话管理信令协议显然是SIP,它支持着整个世界的通信网络,从PSTN运营商到移动运营商,再到PBX呼叫服务,SIP的身影无处不在。另一种广泛应用的协议是XMPP,它主要用于管理即时消息和状态服务。有许多专有封闭的协议,其中以Skype背后的协议最为突出。还有面向Web开发人员和JavaScript编程人员的开源替代方案,如Freeswitch的Verto。你必须选择一种,或自己写。 WebRTC技术体现为软件开发人员构建程序时用到的三组应用编程接口(API):GetUserMedia (GUM)、RTCPeerConnection (RTCPC 或PC)和RTCDataChannels (RTCDC 或 DC)。 GetUserMedia 用于枚举机器上的多媒体硬件,请求用户权限来控制麦克风和摄像头,获取媒体流,并通过屏幕和扬声器播放流。RTCPeerConnection 用于在定义的端点间传输音频和视频流。RTCDataChannels 用于在定义的端点间传输任意数据(即使是结构化数据)。 WebRTC RTCPeerConnection 必须使用ICE,STUN和TURN来穿透防火墙和NAT,最终抵达另一端。 ICE是WebRTC自身推广的一种技术,并获得了巨大的吸引力。它是解决所有网络问题的真正的灵丹妙药,并且工作完成得相当完美,是多年VoIP工程服务的精华。 ICE将通过一个STUN服务器告诉应用程序它的公网地址是什么(从NAT和防火墙的另一侧看到的公网地址),并使用一个TURN服务器作为中继,防止 P2P通信失败。因此,一个功能完整的WebRTC应用需要: 使用 GetUserMedia API 控制麦克风和摄像头使用一种会话协议和可能的外部辅助服务器定位对方端点并建立会话使用ICE (和 STUN 和 TURN) 确定网络路径使用 RTCPeerConnection 传输音/视频媒体流 加密无处不在 对媒体流和数据流加密是强制性的。 如果不对交换的媒体流加密,就没有WebRTC通信。包括所有的媒体流(音频和视频)和可能存在的数据流都需要加密。媒体流被加密为SRTP,通过DTLS交换密钥。这一切都是由RTCPeerConnection API替你完成的。 但是,当你操作时,对会话协议一并加密才更具意义。这种信令选择的传输层通常选择安全的WebSocket。在定义WebRTC信令服务器和终端端时,WSS:// 这样的URI前缀(WebSocket Secure)到处可见。WSS信令交换是TLS加密的(就像web的HTTPS)。未加密的交换方式,前缀是WS,但除了测试之外,很少使用。 FreeSWITCH的WebRTC 好了,抽象的内容说得够多了,是时候拿出点实质性的东西了:FreeSWITCH是怎样实现WebRTC的? FreeSWITCH是一个完整的WebRTC平台,既可以作为WebRTC网关,也可以作为WebRTC应用服务器。例如,FreeSWITCH能够把WebRTC客户端连接到外部“正常”的SIP和PSTN服务(或者PBX),从而使现有或遗留的服务能够被超过10亿的浏览器在线访问。与此同时(这是真实的,作为网关同时提供某些附加的服务),FreeSWITCH能够为WebRTC客户端(浏览器或App)提供与其它“正常”SIP和PSTN客户端相同的服务,比如PBX、IVR、呼叫中心、会议系统、电话卡,等等。 对FreeSWITCH来说,WebRTC只不过是另一种类型的通信通道,和SIP、TDM、MGCP、H323、Skype、Jingle是一样的。FreeSWITCH的所有特性天然支持WebRTC。 FS 的WebRTC信令: SIP和Verto 从这一章的前面部分内容中,我们已经知道WebRTC需要一种会话协议来补充它自己的媒体流功能。这个协议将用于定位端点位置、建立与拆除会话,管理状态和消息。 FreeSWITCH支持两种这类型的协议:SIP和Verto。 这两种不同的协议只影响客户端的编写方式(客户端是加载Javascript的网页,可以访问FreeSWITCH)和客户端与FreeSWITCH的“交谈”方式。两种协议都可以完全访问FreeSWITCH的所有功能和服务。此外,不同客户端可以同时使用两种协议接入同一服务,甚至直接互动。例如:我们可以在FreeSWITCH上发起一个视频会议,让一个基于SIP的FreeSWITCH客户端,一个基于Verto的客户端,还有其它TDM客户端,普通(非WebRTC)SIP客户端同时接入会议室: 为什么选择SIP?又为什么选择Verto? 记住:这里的选择影响的只是访问FreeSWITCH的页面应用的Javascript编写方式。在本章的后续内容中,我们将介绍一个具体实例,分别用两种协议实现一个相同的应用程序。从终端用户的角度看,感觉不到其中的差异。 尽管SIP很复杂,但有电信背景的程序员很容易接受,他们对这些概念很熟悉:会话、对话、事务、REGISTER/ INVITE/ BYE消息,等等。它是在复杂环境中集成WebRTC客户端的完美选择,在扩展、监视和部署方面拥有20年的经验积累。

python selenium 启动浏览器,有无界面

有界面 耗内存,速度慢 #coding=utf-8 #导入select方法 from selenium import webdriver # 有界面 # driver=webdriver.Chrome() driver.get("https://www.amazon.com/dp/0062301675") driver.quit() 无界面 节省内存,速度快 #coding=utf-8 #导入select方法 from selenium import webdriver # 无界面 chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') driver = webdriver.Chrome(chrome_options=chrome_options) driver.get("https://www.amazon.com/dp/0062301675") driver.quit()

Java实现对压缩文件的解压(图形界面)

核心代码: 读取指定压缩文件信息 package my; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class ZipInfo { public int fileCount; // zip文件里的文件个数 public long totalSize; // zip文件里所有文件的总大小 List<ZipEntry> entries = new ArrayList<>(); // 显示的时候将文件夹排在前面,文件排在后面 public void sort() { } // 工具方法: 从ZipFile中获取目录信息 public static ZipInfo from(ZipFile zipFile) throws Exception { ZipInfo info = new ZipInfo(); Enumeration<?> entries = zipFile.entries(); while (entries.hasMoreElements()) { ZipEntry entry = (ZipEntry) entries.nextElement(); info.entries.add(entry); if ( !

echarts Y轴设置刻度间隔

设置最小刻度值 minInterval: 6 yAxis: [{ max:30, // min:0, type: 'value', minInterval: 6, interval:6, //每次增加几个 }],

SparkSQL任务提交、执行计划

1、提交任务的缺点 用spark-submit提交任务时会有一些缺点: 耗费太多的时间用于申请资源上,尤其针对那些小任务(可能任务非常快就完成了)若因为部分task一值无法结束,那么即使那些完成的task,资源也不会释放Sparl sql join以及aggregation的ShufflePatition数默认是200,若数据比较少或非常多,那么参数就需要适当的做修改,减少小文件或增加并发。要处理的数据都有波峰波谷,如何保证波峰资源不吃紧波谷资源不浪费。 是否有将所有的作业共享Spark session来解决上述的问题,社区提供了:JobServer 2、SparkSQL执行计划 这里有篇很不错的博文: http://hbasefly.com/2017/03/01/sparksql-catalyst/ 3、选择 Parquet for Spark SQL 的 5 大原因 博文: https://www.ibm.com/developerworks/cn/analytics/blog/5-reasons-to-choose-parquet-for-spark-sql/

Swarm管理Docker集群

一.swam简介 Swram是Docker公司推出的官方容器集群平台,基于go语言实现,代码开源在 https://github.com/docker/swarm .2016年2月对架构进行重新设计,推出了v2版本,支持超过1千个节点。作为容器集群管理器,Swarm最大的优势之一就是100%支持标准的Docker API及工具(如Compose,docker-py等),Docker本身就可以很好地与Swarm进行集成。 Manager:接收客户端服务定义,将任务发送到agnet节点,维护集群期望状态和集群管理功能以及leader选举。默认情况下manager节点也会运行任务,也可以配置只做管理任务。 agent:接收并执行从管理节点分配的任务,并报告任务当前的状态,以便Manager节点维护每个服务期望状态。 二.Swam管理集群 1.部署集群 1.清理实验环境 删除server1、server2的容器 2.为server3安装docker(server1、server2已经安装好了) [root@server1 ~]# scp -r docker server3: [root@server3 ~]# ls docker [root@server3 ~]# cd docker/ [root@server3 docker]# ls container-selinux-2.21-1.el7.noarch.rpm docker-ce-18.06.1.ce-3.el7.x86_64.rpm libsemanage-2.5-8.el7.x86_64.rpm libsemanage-python-2.5-8.el7.x86_64.rpm pigz-2.3.4-1.el7.x86_64.rpm policycoreutils-2.5-17.1.el7.x86_64.rpm policycoreutils-python-2.5-17.1.el7.x86_64.rpm repodata [root@server3 docker]# yum install *.rpm -y 3.打开server3的docker服务 [root@server3 docker]# systemctl start docker.service 4.初始化server1(管理节点)的swarm集群 [root@server1 ~]# docker swarm init 5.查看server1的桥接,和网络信息 [root@server1 ~]# yum install bridge-utils.x86_64 -y ##提供brctl命令 [root@server1 ~]# brctl show [root@server1 ~]# docker network ls 6.

用Vue编写项目中的前端页面

文章目录 前言实现效果准备实现 前言 Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。使用Vue,同样也可以达到此种效果。这里介绍的,就是用Vue来编写前端页面的例子。 原例子项目来自此博客:https://blog.csdn.net/qq_41151659/article/details/98115573 实现 效果 原来是用动态Jsp编写查看所有书籍(allBook.jsp)的页面,这里换用vue实现(Vue.jsp)。 准备 在webapp目录下新建一个statics包,并在该包下新建vue文件夹,导入vue.js和vue-resources.js文件(去Vue官网下载),如图所示: 实现 原先的查看所有书籍页面(allBook.jsp),代码如下: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%--使用JSTL标签--%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>全部书籍</title> <%--引用BootStarp--%> <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> <%--标题--%> <div class="row clearfix"> <div class="col-md-12 column"> <div class="page-header"> <h1> <small>书籍列表--显示所有书籍</small> </h1> </div> </div> </div> <%--增加--%> <div class="row"> <div class="col-md-4 column"> <a class="btn btn-primary" href="${pageContext.request.contextPath}/book/toAddBook">新增</a> </div> </div> <%--展示页面:表格,修改,删除--%> <div class="row clearfix"> <div class="col-md-12 column"> <table class="

iOS 改变字符串中数字的颜色

匹配中文字符 [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内) [^\x00-\xff] 匹配网址:[a-zA-z]+://[^\s]* 匹配国内电话 \d{3}-\d{8}|\d{4}-\{7,8} 匹配腾讯QQ号 [1-9][0-9]{4,} 匹配18位身份证号^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$ Swift String // // ModifyNumberColor.swift // CodeBench // // Created by coder on 2019/8/7. // Copyright © 2019 AlexanderYeah. All rights reserved. // import Foundation import UIKit extension String { /// 改变字符串中数字的颜色和字体 /// /// - Parameters: /// - color: 颜色 /// - font: 字体 /// - regx: 正则 默认数字 "\\d+" /// - Returns: attributeString func modifyNumberColor(color: UIColor, font: UIFont, regx: String = "

OriginPro2016 三维绘图

小编最近写论文需要绘制一些三维图,经同学推荐觉得OriginPro2016是一个不错的数据画图以及分析软件, 只不过目前小编只是简单使用了三维画图的功能,下面简单进行总结: 1、三维线图,如下图所示的模式 新建一个BOOK: 插入一列,并将三列分别设置为X Y Z 如果想实现如图一中所示的,多条三维曲线图,数据应该像如下图中一样排列: 然后在plot-->3D symbol/bar/vector-->3D scatter,对轴和曲线进行属性设置,可以实现图一所示的效果。 2、绘制三维曲线图 要想绘制如上图所示的三位曲线图,有以下三个步骤: (1)新建book (2)插入一列,并将三列分别设置为X Y Z,并将所有的点都放在XYZ下面,如下图所示: 注:这个是跟上一个三维曲线图稍微有些区别 (3)选择plot-->3D surface-->color map surface选项,在进行相关属性的设置即可的到三维曲线图。

Less学习(四)----扩展(Extend)

扩展(Extend) 选择器:extend(选择器参数){ } 扩展是less里的伪类,作用是 将选择器与匹配它引用的选择器合并在一起 简单地说,就是 在extend里选择器参数出现的设置规则的时候,也会给extend前的选择器给予同样的规则,相当于非破坏性的搜索和替换() .a:extend(.b){ } .b{ 样式规则 } 等价于 .b, .a{ 样式规则 } 在输出之前会移除扩展,选择器块仍然保持不变,当没有向扩展里放属性时,在输出的时候会移除扩展,不过仍然可能对其他选择器有影响(不太清楚有啥影响)) 1)语法 extend可以绑定在选择器上也可以放在规则设置里,在选择器参数后可以添加 关键字 all,添加了 all 后,只要有 选择器参数出现的地方都会产生扩展, 没有关键字 all 时,只有 选择器参数单独出现的时候才会产生扩展 有多个选择器参数时可以使用 ‘,’ 隔开,和写多个 扩展是一样的 .a:extend(.b){ } 等价于 .a{ &:extend(.b); } .a:extend(.b),.c:extend(.d){} 等价于 .a:extend(.b){} .c:extend(.d){} (1) 没有关键字all .a:extend(.b){ } .b.c{ 样式规则//此时的样式是不会渲染到 .a.c ,只会渲染 .b.c } (2)关键字 all .a:extend(.b all){ } .b.c{ 样式规则//此时的样式是能够渲染到 .a.c } 相当于 .b.c, .a.c{ 样式规则 } 2)绑定在选择器上 一个选择器上可以绑定多个伪类,但是 扩展必须在最后,多个选择器里部分选择器绑定 扩展和单独绑定扩展是一样的

CityHash

CityHash在python上可以直接导入模块使用。https://pypi.org/project/cityhash/但是可能仅支持Linux系统,不支持Windows系统(反正本菜鸡在瘟十上面各种报错提示要修改XX文件)... CityHash算法由Google公司于2013年公布,是个略久远的算法了~ CityHash 的主要优点是大部分步骤包含了至少两步独立的数学运算。现代 CPU 通常能从这种代码获得最佳性能。但 CityHash 也有其缺点:代码较同类流行算法复杂。 人家当时对这个字符串哈希算法的要求是: quick and dirty(dirty???我没太理解)suitable for a librarysuitable for fingerprinting(对于要生成指纹的童鞋来说是个很友好的算法!)secure 本着比Murmurhash2更高(质量)更快的要求,他们创造了CityHash。 CityHash64的整体框架是: if (N <= 32) if (N <= 16) if (N <= 8) ... else ... else ... else if (N <= 64) { // Handle 33 <= N <= 64 ... } else { // Handle N > 64 int iters = ⌊N/64⌋ ... } 预处理: k0,k1,k2是2^64附近的素数,并且K=k2+2N 当1≤N≤3时: 当4≤N≤8时: 当9≤N≤16时:

第六章:MATLAB:二维绘图(plot绘图命令 fplot命令 ezplot命令 不同的坐标系)

第六章:二维绘图 6.1. 二维绘图6.1.1. plot绘图命令:6.1.2. fplot绘图命令:6.1.3. ezplot绘图命令: 6.2. 不同坐标系下的绘图命令:6.2.1. 极坐标系下的绘图:6.2.2. 双y轴坐标 6.3. 图形窗口6.3.1. 图形窗口的创建6.3.2. 工具条的使用 6.4. 综合实例--绘制函数图线 本部分介绍MATLAB的图形窗口和二维图形的绘制: 二维曲线是将平面上的数据连接起来的平面图形,数据点可以由向量或者矩阵来提供,matlab大量的数据给二位图像提供了平台 这就是matlab区别于其他科学计算的地方,实现了数据结果的可视化,具有强大的图形功能 6.1. 二维绘图 6.1.1. plot绘图命令: plot函数是最基本最常用的绘图命令,执行plot命令,系统会自动创建一个新的图形窗口, plot函数有以下几种调用格式: 1)plot(x) a:当x是实向量时,则绘制出以该向量元素的下标(即向量的长度)为横坐标,以该向量元素的值为纵坐标的一条连续曲线 b:当x是实矩阵时,按列绘制出每列元素值对应的下标的曲线,曲线数等于列数; c:当x是复矩阵时,按列分别绘制出以元素实部为横坐标,虚部为纵坐标的多条曲线; 这个函数理论基础看似简单,实际上后续都很重要 如果要在同一个图形窗口之中分割出所需要的几个窗口来,可以使用subplot命令 1)subplot(m,n,p):视图分割成m*n个视图,并指定第p个视图为当前视图, 2)subplot(‘position’,[left bottom width height]),产生的新子区域的位置由用户自己指定,后面的四元组为区域的具体参数控制,宽高的取值范围都是【0,1】 2.plot(x,y) 函数的功能要能准确把握,很重要 重要例子: 3.plot(x1,y1,x2,y2,…) 这个函数格式的功能是绘制多条曲线,在这一条指令之中,(xi,yi)必须是成对出现的,上面的指令等价于逐条执行plot(x,y)指令 通过两个实例加深理解 注意:引入函数linspace(a,b,n) 用于将已知区间【a,b】n等分,返回值是各节点的坐标; 4.plot(x,y,s) hold on命令用来使当前轴及图形保持不变,准备接收plot函数之后的所绘制的新的图线,即把这些图形都花在一张图中,hold off就是之后的图形不在保持这一性质; hold on 命令的作用千万不能忘了 示例:图像信息的保持: 可以看到下面这个图保持了之前的图像,在此基础上加入了之后的新图 在这个图纸中,可以看到,前两个图都消失了,因为已经off了 示例:曲线属性的设置: 5.plot(x1,y1,s1,x2,y2,s2…) 这种用法格式与用法三相似,不同之处是此格式下有参数的控制 这种操作方法一定程度上替代了hold on 命令,而且达到了代码精简的效果,显然很好 6.1.2. fplot绘图命令: fplot命令是matlab的一个专门用于画一元函数图像的命令,这个功能plot命令也可以完成,实际上plot命令是根据我们给定的数据点来作图,而在实际情况中,我们不知道函数的具体情况,因此我们根据我们所选取的数据点来选择往往会忽略真实函数的某些重要特性 fplot命令用来指导数据点的选取,通过内部的自适应算法,在函数变化的平稳的地方,它所选取的数据点会相对稀疏一点,在函数变化明显的地方,选点就会很密 用fplot命令所作出的图像要比用plot命令做出的图像光滑准确 对上述的几种用法还有几点要说明 实例:绘制函数图线 从图中我们可以明显看出fplot命令所画出的图形比plot命令更加准确,这主要是因为分点取的太少了,也就是说对于区间的划分还不够细致,读者往往会感觉对长度为0.01的区间做50等分的划分已经够细致了,但是事实上远远不能精确描述原函数 6.1.3. ezplot绘图命令: 对于符号函数的图形化表示,用这个命令来做,利用这个命令,可以轻易的将一个符号函数图形化;

Tomcat各目录详解

打开tomcat的解压之后的目录可以看到如下的目录结构: 1.bin: bin目录中的内容如下图所示:主要用来存放Tomcat的命令,很多环境变量也在此处设置。 1.以.sh结尾的代表Linux下的命令; 2.以.bat结尾的代表Windows下的命令。 其中: startup.bat代表windows系统下启动Tomcat的命令; shutdown.bat代表Windows系统下关闭Tomcat的命令。 startup.sh代表linux系统下启动Tomcat的命令; shutdown.sh代表linux下关闭Tomcat的命令。 (即此目录下存放linux系统下和window系统下启动启动和关闭Tomcat服务器的脚本文件)。其中修改catalina可以设置Tomcat的内存 2.conf: conf目录:存放tomcat服务器全局配置的各种配置文件。 backup文件夹为它的备份。 catalina目录 下可以设置默认加载的项目。 catalina文件 可以设置tomcat服务器内存大小。 context.xml 可以用来配置数据源之类的东西。 logging文件 记录tomcat服务器运行的日志记录。 server.xml : 可以设置域名、端口号、IP、请求的编码、默认加载的项目。 3.lib: lib目录:用来存放Tomact服务器所需要的所有jar包,将jar包存放到该目录下之后,以后创建项目时就不需要每次都引入jar包了. 4.logs: logs目录用来存放tomcat在运行过程中产生的日志文件. 5.temp temp目录用来存放tomcat在运行过程中产生的临时文件. 6.webapps webapps目录:tomcat默认部署路径。目录用来存放应用程序,当Tomcat启动时会加载webapps目录下的应用程序。当然可以以war包、Jar包、普通文件夹三种形式发布应用 7.work work目录是用来存放tomact在运行时产生的编译文件.删除该目录相当于删除缓存.

java poi cell.getCellTypeEnum() 日期处理的问题

一般情况我们在获取单元格值的时候 会通过 cell.getCellTypeEnum() 提前判定一下单元格的类型 ,从而决定应该如何取值。 但当把单元格类型自定义的时候,出现了日期解析不出来的问题。 如出生日期这一列,我自定义格式为 yyyy-mm-dd。 但解析出来是double类型,取值为数字。 那么当程序校验日期的时候 就出现错误。 因此不得不得再次处理一次 cell.getCellStyle().getDataFormatString()来判断,这个方法会返回格式字符串,通过这个字符串去匹配,再处理。 poi获取这种自定义日期格式的时候 返回的字符串为 yyyy\-mm\-dd (注意:有反斜杠),那么程序中在判断的时候要反义一下 用双斜杠。 这样的话就能正确获取日期值了 /** * 功能描述: 获取单元格值 * * @param cell 单元格 * @return String */ public String getCellValue(Cell cell) { String value = ""; if (cell != null){ switch (cell.getCellTypeEnum()) { case STRING: value = cell.getRichStringCellValue().getString(); break; case NUMERIC: String debug_str = cell.getCellStyle().getDataFormatString(); if ("m/d/yy".equals(cell.getCellStyle().getDataFormatString()) || "yyyy\\-mm\\-dd".equals(cell.getCellStyle().getDataFormatString())) { value = DateUtil.dateToStringByFormat(DateUtil.FORMATTER_DATE, cell.getDateCellValue()); } else { DecimalFormat df = new DecimalFormat("

GraphViz's executables not found解决方案

在jupyter notebook运行中报错:GraphViz's executables not found 解决方案: 在Anaconda Prompt里边输入conda install graphviz 安装成功之后输入pip install graphviz 在anaconda安装路径中找到C:\Anaconda3\Library\bin\graphviz,将此路径添加至系统环境变量中 完成后重新启动jupyter notebook,运行后完美解决