获取cookie的两种方式EL表达式中判断数据是否为空

1.使用java代码获取cookie Cookie[] cs = request.getCookies();//通过请求获取 for(Cookie c:cs){ if(c.getName().equals("loginAct")){ String loginAct = c.getValue(); }else if(c.getName().equals("loginPwd")){ String loginPwd = c.getValue(); } } 2.使用EL表达式获取cookie 说明:${loginAct}:这样写会依次去4个作用域里面去搜索 cookie中有3个重要的属性:name:cookie的名字,value:cookie的值;maxage:cookie的最大的生命周期。 ${cookie.loginAct.value} 二. el表达式中判断数据是否为空 <c:if test="${not empty cookie.loginAct and not empty cookie.loginPwd}"> <input type="checkbox" id="isRemPwd" checked> 十天内免登录 </c:if> <c:if test="${empty cookie.loginAct or empty cookie.loginPwd}"> <input type="checkbox" id="isRemPwd"> 十天内免登录 </c:if>

vue elementui 计算一个月后的时间

watch:{ 'form.startTime'(val) { console.log('startTime', val) if (val) { var month = new Date(val).getMonth() + 1 var year = new Date(val).getFullYear() // console.log(month, '月') // console.log(year, '年') if (month == 2) { if (year % 4 == 0 && year % 100 > 0) { // console.log('闰年') this.form.endTime = parseTime(new Date(val).getTime() + (60 * 60 * 1000 * 24 * 29)) return } if (year % 4 != 0) { // console.

PHP 如何根据Ip区分是国内还是国外地方

1.安装 composer require geoip2/geoip2:~2.0 2.下载 数据库地址数据库,下载地址:https://www.maxmind.com/en/accounts/722009/geoip/downloads 3.使用 use GeoIp2\Database\Reader; //根据ip获取对应的国家 public function get_country(){ $ip = $_SERVER["REMOTE_ADDR"]; $reader = new Reader('/www/wwwroot/dev/GeoLite2-Country.mmdb'); $record = $reader->country($ip); if ($record->country->names['zh-CN'] == '中国'){ echo '对应的IP地址所在的地区是国内'; }else{ echo '对应的IP地址所在的地区是国外,国家名称是: '.$record->country->names['zh-CN']; } } 参考链接:php或laravel使用maxmind/GeoIP2-php免费判断IP地址定位 - Laravel学习网

HackTheBox:Pandora靶场

HackTheBox:Pandora靶场 这个靶场是一台linux机器,上边搭载了两个cms,其中涉及到对信息搜集、ssh证书登录、suid提权、sql注入等知识的考验 信息搜集 nmap走一遍什么也没 ┌──(root㉿kali)-[~] └─# nmap -sS -sV -Pn 10.10.11.136 Starting Nmap 7.92 ( https://nmap.org ) at 2022-05-21 21:18 CST Nmap scan report for 10.10.11.136 Host is up (1.8s latency). Not shown: 998 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel 没办法,whatweb看看cms 说可能是WordPress,但是wpscan扫了结果并不是,目录扫描也没结果,只跑出来一个assets目录 做到这里,显然htb没有把突破点放在前台,就是一个模拟常见网站的cms,去别的地方再看看

算法面试题:合并有序链表系列(合并两个,合并n个)分治算法

算法面试题:合并有序链表系列(合并两个,合并n个) 内容目录 算法面试题:合并有序链表系列(合并两个,合并n个)一、合并两个有序链表方法1方法2: 二、合并n个有序链表分治解法: 合并有序链表问题,可以分为两种,一种是合并两个有序链表,另一种是合并n个有序链表 一、合并两个有序链表 合并两个链表,可以想到的方法大概分为两种 一种是开辟一个空间,逐渐比较两个链表,小的放到空间中,以此类推 一种是不开辟另外的空间,直接使用list1或者list2 方法1 public ListNode Merge(ListNode list1,ListNode list2) { if(list1 == null) return list2; if(list2 == null) return list1; // 开辟一个新空间 ListNode newHead = new ListNode(-1); ListNode ptr = newHead; while(list1 != null && list2 != null){ if(list1.val <= list2.val){ ptr.next = list1; ptr = ptr.next; list1 = list1.next; }else{ ptr.next = list2; ptr = ptr.next; list2 = list2.next; } } ptr.next = (list1 == null) ?

js、vue处理日期,向前向后N个月,自动处理闰年、月末取n个月后的最后一天

js代码 function getNewDate(date, n) {//date 日期 n 前后相差月份 let curDate = new Date(date),newDate = new Date(date),diff,remainder //curDate当前日期 newDate计算后日期 diff日期相差月份 remainder n对12的余数 newDate.setMonth(curDate.getMonth() + n); //设置月份+n diff = newDate.getMonth() - curDate.getMonth(); //计算后月与之前月差值 diff < 0 ? diff += 12: diff; //如果差值小于12 对其+12 n > 0 ? remainder = n % 12 : remainder = n + 12 * Math.ceil((Math.abs(n) /12 )) //n>0时直接对12取余 n<0时,将其加上 n取绝对值后的年份(向上取整)* 12 if(diff != remainder){ return new Date(newDate.

Windows网络诊断和配置常用命令详解

文章目录 前言 一、ipconfig 1.1.ipconfig命令语法 1.2.ipconfig命令参数解释 1.3.ipconfig命令举例 二、ping 2.1.ping命令的语法 2.2.ping命令参数解释 2.3.ping命令举例 三、arp 3.1.arp命令语法 3.2.arp命令参数解释 3.3.arp命令举例 四、netstat 4.1.netstat命令语法 4.2.netstat命令参数解释 4.3.netstat命令举例 五、tracert 5.1.tracert命令语法 5.2.tracert命令参数解释 5.3.tracert命令举例 六、nslookup 总结 前言 Windows提供了一组实用程序来实现简单的网络配置和管理功能,这些实用程序通常以DOS命令的形式出现。用键盘命令来显示和改变网络配置,感觉就像直接操控硬件一样,不但操作简单方便,而且效果立即显现;不但能详细了解网络的配置参数,而且提高了网络管理的效率。 提示:以下是本篇文章正文内容,下面内容可供参考 一、ipconfig ipconfig命令相当于Windows9x中的图形化命令winipcfg,是最常用的Windows实用程序,可以显示所有网卡的TCP/IP配置参数,可以刷新动态主机配置协议(DHCP)和域名系统的设置。 1.1.ipconfig命令语法 ipconfig [/all] [/review[Adapter]] [/release[Adapter]] [/flushdns] [/dsiplaydns] [/registerdns] [/showclassid Adapter] [/setclassid Adapter[ClassID]] 1.2.ipconfig命令参数解释 /? 显示帮助信息,对本章中其他命令有同样作用。/all 显示所有网卡的TCPIP配置信息。如果没有该参数,则只显示各个网卡的P地址、子网掩码和默认网关地址。/review [Adapter] 更新网卡的DHCP配置,如果使用标识符Adapter说明了网卡的名字,则只更新指定网卡的配置,否则更新所有网卡的配置。这个参数只能用于动态配置P的计算机。使用不带参数的ipconfig命令,可以列出所有网卡的名字。/release [Adapter] 向DHCP服务器发送DHCP Release 请求,释放网卡的DHCP配置参数和当前使用的P地址。/flushdns 刷新客户端DNS缓存的内容。在DNS排错期间,可以使用这个命令丢弃负缓存项以及其他动态添加的缓存项。/displaydns 显示客户端DNS缓存的内容,该缓存中包含从本地主机文件中添加的预装载项,以及最近通过名字解析查询得到的资源记录。DNS客户端服务使用这些信息快速处理经常出现的名字查询。/registerdns 刷新所有DHCP租约,重新注册DNS名字。在不重启计算机的情况下,可以利用这个参数来排除DNS名字注册中的故障,解决客户端和DNS服务器之间的手工动态更新问题,可以利用“高级TCP/IP设置”来注册本地连接的DNS后缀。/showclassid Adapter 显示网卡的DHCP类别ID。利用通配符“*” 代替标识符Adapter,可以显示所有网卡的DHCP类别ID。这个参数仅适用于自动配置IP地址的计算机,可以根据某种标准把DHCP客户端划分成不同的类别,以便于管理。例如,将移动客户划分到租约期较短的类,将固定客户划分到租约期较长的类。/setclassid Adapter[ClassID] 对指定的网卡设置DHCP类别ID。如果未指定DHCP类别ID,则会删除当前的类别ID。 1.3.ipconfig命令举例 (1)如果要显示所有网卡的基本TCP/IP配置参数,输入:ipconfig (2)如果要显示所有网卡的完整TCP/IP配置参数,输入:ipconfig /all (3)如果仅更新本地连接的网卡由DHCP分配的IP地址,输入:ipconfig /renew "Local Area Connection" (4)排除DNS名称解析故障时,如果要刷新DNS解析器缓存,输入:ipconfig /flushdns

Python 学生信息管理系统(类)

Python 学生信息管理系统(类) 文章目录 Python 学生信息管理系统(类)前言一、题目1.学生类2.数据存取类3.操作类3.身份验证类 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、题目 使用类构建一个学生信息管理系统 1.学生类 代码如下(示例): # -*- coding: UTF-8 -* # 定义全局变量 info_list = [] filename = "info.txt" admin_id = "admin" password = "123456" class Student: def __init__(self): self.Stu_id = "student" self.Stu_password = "123456" student = Student() 2.数据存取类 代码如下(示例): class FileManger: @staticmethod def load_info(): global info_list try: f = open(filename, "r", encoding="utf-8") except FileNotFoundError: f = open(filename, "w", encoding="utf-8") f.write("[]") f.

java可变参数(详解+代码样例)

可变参数 基本概念:java允许将同一个类中多个同名,同功能但参数个数不同的方法封装成一个方法。就可以通过可变参数实现。 基本语法: 访 问 修 饰 符 \color{#FF0000}{访问修饰符} 访问修饰符 返 回 类 型 \color{#FF0000}{返回类型} 返回类型 方 法 名 \color{#FF0000}{方法名} 方法名( 数 据 类 型 . . . \color{#FF0000}{数据类型...} 数据类型... 形 参 名 \color{#FF0000}{形参名} 形参名){ } 传入的多个参数会被以数组的形式传入,也可以直接传入数组。 可变参数可以和普通参数一同传入,但是要确定可变参数放在最后。 public int insum(double add,int... sum){ } 一个方法内只能有一个可变参数。 例题(求和方法): public class kebiancan{ public static void main(String args[]){ Sum sum = new Sum(); //调用该方法,输入多个参数 System.out.print(sum.insum(4,5,6)); } } class Sum{ //定义可变参数的方法,写一个求和方法 public int insum(int... sum){ int s = 0; for(int i = 0;i<sum.

MarkDown标准格式

MarkDown MarkDown一种轻量级标记语言,没有it基础的,也可以写出,如网页一般的文档格式。它的编辑工具很多,也有网页版的。专门开发markdown工具typora。 使用广泛,github,简书。 标题格式列表格式表格格式分割线格式字体格式超链接图片格式代码块格式内容引用锚点 以上都是标准的markdwon格式。每个软件可能有自己的格外格式,和拓展格式。软件不同,展示效果不同。 1.标题: 分为主副标题,和多级标题 至少3个=== — 多级标题1~6 字号逐渐变小 主标题 === 副标题 --- # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级 标题 ###### 六级标题 效果: 2.列表: 有序列表,无序列表 嵌套列表 有序列表:使用数字进行标号 考试排名: 1. 小红 2. 小陈 3. 小李 效果: 无序列表:使用符号+ - *任意一个都可以。 注意:不能混用。自动划分,不同符号创建的列表 + 水果 + 香蕉 + 桃子 + 苹果 - 水果 - 香蕉 - 桃子 - 苹果 * 水果 * 香蕉 * 桃子 * 苹果 效果:

阿里面试官:你先简单说说JVM 是如何管理内存的吧?

Java 的内存管理都是由 JVM 来进行管理的,不需要程序员手动管理内存,这对于程序员来说是友好的。 但一件事有好处就有坏处。 假如内存管理出现了问题,如果我们不了解 JVM 是如何管理内存的,那么排查问题将会是一项异常艰难的工作。 1、运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途。 1.1 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。 作用: (1)字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器。 (2)还有一个很重要的作用就是——线程恢复,在并发如此流行的时代,线程的上下文切换是常有的事。假如发生了线程上下文切换,如何能让线程恢复之前运行的状态?就需要依赖程序计数器来完成。 特点: (1)就根据刚刚线程恢复这个作用就能推断出来,程序计数器是线程私有的,生命周期和线程一样。 (2)当执行 Java 方法时,程序计数器中保存的值就是正在执行的虚拟机字节码指令的地址;当执行本地方法时(用 native 关键字修饰的方法),程序计数器中保存的值就是为空。 (3)程序计数器是唯 一一个在《Java虚拟机规范》中没有规定任何 OutOfMemoryError 情况的区域。 1.2 Java 虚拟机栈 虚拟机栈描述的是 Java 方法执行的线程内存模型。 作用: 每个方法被执行的时候,Java 虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。 每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。 局部变量表存放了编译期可知的各种 Java 虚拟机基本数据类型、对象引用、returnAddress 类型。 特点: 如果线程请求的栈深度大于虚拟机所允许的深度,将抛出 StackOverflowError 异常;如果 Java 虚拟机栈容量可以动态扩展,当栈扩展时无法申请到足够的内存会抛出 OutOfMemoryError 异常。 注意:HotSpot 虚拟机的栈容量是不可以动态扩展的,以前的 Classic 虚拟机倒是可以。 Java 虚拟机栈是线程私有的,生命周期和线程一样。 1.3 本地方法栈 和 Java 虚拟机栈类似,只不过 Java 虚拟机栈面向的是 Java 方法,而本地方法栈面向的是本地方法。 注意:有的 Java 虚拟机(譬如 Hot-Spot 虚拟机)直接就把本地方法栈和虚拟机栈合二为一。

用FLIR热数据集跑yolov5 个人踩坑大全

版本:yolov5-v5.0 环境:python3.8+anaconda3_2020.7+cuda10.1.105 数据集:FLIR_ADAS_1_3.tar 1、问题:ImportError: The _imagingft C module is not installed 在测试YOLO v5时出现错误提示: ImportError: The _imagingft C module is not installed 经查是pillow库的问题 解决 windows系统 卸载pillow,重新安装 pip uninstall pillow pip3 install pillow 加上 --no-cache-dir参数: pip3 install pillow --no-cache-dir Ubuntu系统 卸载同上 然后安装devel sudo apt-get install libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel 最后重新安装。 注:适用于代码中导入语句为: from PIL import ImageFont 2、问题:train: Scanning ‘data\labels\train.cache’ images and labels… 0 found, 1000 missing, 0 empty, 0 corrupted: 100% 解决 (1)数据集格式不对

python一段字符串仅包含小写字母和下划线且必须包含小写字母

一段字符串包含只能包含下划线和小写字母,且必须有小写字母,下面给出本人的解决办法,如有高手,请赐高招 1、使用 str.islower()方法 判断字符串全为小写字母 a = "qwert" print(a.islower()) # 结果为 True 2、使用正则表达式 判断字符串是否包含 a-z 的小写字母及下划线 import re a = "b_c" print(bool(re.match('^[a-z_]+$', a))) # 结果为 True 此处有问题,如果a = “__” a = "__" if bool(re.match('^[a-z_]+$', a)): print("验证成功") print(a.islower()) else: print("好像不对") # 结果为 验证成功 # False 如果字符串里都是下划线,使用正则表达式返回的是True,但使用str.islower()方法返回的是False。 3、最终解决办法 —— 将正则表达式与str.lower()方法结合使用 a = "b_" if bool(re.match('^[a-z_]+$', a)) and a.islower(): print("验证成功") else: print("好像不对呀") # 结果为 验证成功 这样就可以判断出一个字符串仅能包含小写字母和下划线,且必须包含小写字母。

渗透测试之目录扫描

什么是目录扫描: 在我们部署了网站之后有很多的敏感文件,比如说配置文件(.cfg)、数据文件(.sql)、目录文件(/backup /conf /admin)。但是有些网站如果配置出现问题,就会被攻击者攻击。 这些配置的问题会导致数据库用户名和密码 、服务器的用户名和密码 、数据库的文件、网站源码等等信息都会被 入侵。如果黑客获得了相应文件后,就能对网站进行进一步的攻击! 目录为什么会泄漏: 1、配置问题。 2、本地文件包含问题。 比如在一个php文件中,我们经常会有一些公共的文件,在其他的代码文件中不需要重复编码的话,那我们就能用include +文件名 让php文件在当前的代码中生效,如果可以包含其他页面的代码,比如说恶意的代码,那么这个恶意代码就会被执行。如果include没有被限制,那我们可以通过本地文件和相对路径来进行遍历文件,进行攻击。 常见敏感目录和文件: 1、robots.txt 如果一个网站不让爬虫机器人去爬取里面的文件,那么我们可以默认这里面的文件包含有重要信息。 2、sitemap.xml 这是指导搜索引擎去网站搜索什么内容的文件。一般的cms都会自动生成这个文件 3、网站的备份文件和数据 对程序去进行升级或者定期对自己的网站需要进行备份。 这种工具生成的备份总会有类似的后缀和名字,比如wwwroot生成的日期.zip文件,如果路径泄漏,那么这些文件就会是攻击者值得关注的文件,所以我们自己在备份的时候,备份文件也需要路径的迁移。 路径类: 4、后台登录的目录: 一般来说,我们会给用户登录的界面,然后管理员也会有管理员登录的专用界面,虽然这些目录一般不会开放,但是如果我们在做目录扫描的时候扫出来了这样的目录,比如(admin或者manager),如果没有次数限制,那么我们可以尝试用暴力破解的方式进行攻击。 5、程序的安装包 对于一些非开源的商用系统,如果我们在安装的时候,他在部署网站后,没有及时把自己的压缩包给清理掉,那我们很有可能获得他的源码(1.zip) 6、上传的目录(/upload.php) 这样的文件如果存在那么就是存在上传功能的,如果有这个功能,那我们就可以把恶意代码进行植入和上传了。 7、mysql的管理界面: mysql的管理经常使用phpadmin进行管理。如果用phpadmin进行管理的话,就有很多漏洞可以利用了 8、程序的安装路径:(/install) 如果install的目录没有被删掉,那么我们可以重新进行安装,并且拥有访问权限 9、php的探针(phpinfo 雅黑探针) 10、网站的文本编辑器 文本编辑器也能造成很多的漏洞。 11、linux /etc/passwd /etc/shadow SHA512 /etc/sudoers sudo 这些linux的文件也都很重要,需要扫描分析。 12、macos (.ds-store) 13、编辑器的临时文件.swp 14、tomcat WEB-INF WEB-INF/web.xml : Web应用程序配置文件, 描述了servlet和其他的应 用组件配置及命名规则. WEB-INF/database.properties : 数据库配置文件 WEB-INF/classes/ : 一般用来存放Java类文件(.class) WEB-INF/lib/ : 用来存放打包好的库(.jar) WEB-INF/src/ : 用来放源代码(.asp和.php等) github里面我们参考查询到一些敏感文件 以上这些文件和目录都是我们在进行目录扫描时需要重点关注的问题,里面经常会存在关键信息。还有一些非常规文件也是我们需要留心的点。 文件扫描思路 我们可以通过字典、递归、暴力破解、爬虫等等方式来进行扫描,

操作系统的环境变量

一、简介 1.概念(非程序员跳过) 环境变量相当于程序的一些固定的变量,由于某些程序会取固定的环境变量,所以需要正确设置对应的环境变量才能使用这些程序。 2.path变量 不管是linux还是windows系统,执行程序都要有一个入口,比如windows常见的exe、linux的sh(批处理文件),但有时候执行命令时却需要到这个程序的目录才能启动它(cmd、regedit、java等程序),这时候path变量起作用了。 系统执行命令时,会先去path环境变量的目录中找对应的可执行文件(如:exe、sh等)找到就执行它,找不到的话会提示找不到xxx命令 ![编辑path变量](https://img-blog.csdnimg.cn/img_convert/f31452e5ff0aba62a60a060f35118448.png 3.系统变量与用户变量的区别 系统变量是整个系统生效的环境变量,会对所有用户生效 用户变量则是对本用户(windows、linux的登录用户)生效,对其他用户无效 使用时根据自己的需求来设置即可,若不懂的话设置系统变量吧,会方便些! 4.作用 设置环境变量(path变量)可以让我们更方便的调用程序。 比如java开发时,第一课就是设置环境变量,设置完成之后,就可以在命令行调用java和javac命令。若有其他命令也想进行简便的调用,就可以把它所在的目录设置到环境变量的path中即可。 某些程序需要环境变量支持 JAVA_HOME、CLASS_PATH等变量则是为了支持某些程序,需要设置对应的环境变量 二、修改环境变量 1 windows设置环境变量 1.1 进入设置环境变量页面 我的电脑(右键)选择【属性】->高级系统设置->高级(标签)->环境变量 1.2 系统变量设置 在系统变量栏,设置环境变量即可,设置完成后点击确定。 1.3 用户变量设置 在系统变量栏,设置环境变量即可,设置完成后点击确定。 1.4 常用语法 %VAR_NAME% :代替VAR_NAME环境变量的路径 例如图中的JAVA_HOME,代替的就是D:\Java\jdk6 . (英文句号):代表当前路径,即执行的时候会把当前路径作为其中一个参数值 例如在C:\WINDOS\system32执行cmd,若path变量中有. ,不在Path中添加C:\WINDOS\system32 也可以执行,因为.将本目录路径作为Path变量了。 ; (英文分号):多个值的分隔符 例如Path变量有很多个值,就需要在各个值之间加上;作为分隔符 2 linux设置环境变量 2.1 系统变量设置 $ vi /etc/profile 在后面追加形如: PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin export PATH 2.2 用户变量设置 $ vi 用户家目录/.bash_profile 在后面追加形如: PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin export PATH root的家目录在/root 其他用户的家目录在/home/用户名 2.3 常用语法 $VAR_NAME :代替VAR_NAME环境变量的路径 :(英文冒号):多个值的分隔符 例如Path变量有很多个值,就需要在各个值之间加上:作为分隔符

机器学习算法(二十一):核密度估计 Kernel Density Estimation(KDE)

目录 1 分布密度函数 1.1 参数估计方法 1.2 非参数估计 2 直方图到核密度估计 2.1 核函数 2.2 带宽的选择 2.2.1 自适应或可变带宽的核密度估计 2.3 多维 1 分布密度函数 给定一个样本集,怎么得到该样本集的分布密度函数,解决这一问题有两个方法: 1.1 参数估计方法 简单来讲,即假定样本集符合某一概率分布,然后根据样本集拟合该分布中的参数,例如:似然估计,混合高斯等,由于参数估计方法中需要加入主观的先验知识,往往很难拟合出与真实分布的模型; 1.2 非参数估计 和参数估计不同,非参数估计并不加入任何先验知识,而是根据数据本身的特点、性质来拟合分布,这样能比参数估计方法得出更好的模型。核密度估计就是非参数估计中的一种,由Rosenblatt (1955)和Emanuel Parzen(1962)提出,又名Parzen窗(Parzen window)。Ruppert和Cline基于数据集密度函数聚类算法提出修订的核密度估计方法。 2 直方图到核密度估计 给定一个数据集,需要观察这些样本的分布情况,往往我们会采用直方图的方法来进行直观的展现。该直方图的特点是简单易懂,但缺点在于以下三个方面:(1)密度函数是不平滑的;(2)密度函数受子区间(即每个直方体)宽度影响很大,同样的原始数据如果取不同的子区间范围,那么展示的结果可能是完全不同的。如下图中的前两个图,第二个图只是在第一个图的基础上,划分区间增加了0.75,但展现出的密度函数却看起来差异很大;(3)直方图最多只能展示2维数据,如果维度更多则无法有效展示。 除此之外,直方图还存在一个问题,那就是直方图展示的分布曲线并不平滑,即在一个bin中的样本具有相等的概率密度,显然,这一点往往并不适合。解决这一问题的办法时增加bins的数量,当bins增到到样本的最大值时,就能对样本的每一点都会有一个属于自己的概率,但同时会带来其他问题,样本中没出现的值的概率为0,概率密度函数不连续,这同样存在很大的问题。如果我们将这些不连续的区间连续起来,那么这很大程度上便能符合我们的要求,其中一个思想就是对于样本中的某一点的概率密度,如果能把邻域的信息利用起来,那么最后的概率密度就会很大程度上改善不连续的问题,为了方便观察,我们看另外一副图。 一个很自然的想法是,如果我们想知道X=x处的密度函数值,可以像直方图一样,选一个x附近的小区间,数一下在这个区间里面的点的个数,除以总个数,应该是一个比较好的估计。用数学语言来描述,如果你还记得导数的定义,密度函数可以写为: 现在我们假设要求x处的密度函数值,根据上面的思想,如果取 x 的邻域[x-h,x+h],当h->0的时候,我们便能把该邻域的密度函数值当作x点的密度函数值。用数学语言写就是: 是该邻域中的样本点数量,样本集的总数量,最后对该邻域内的密度值取平均便得到 x 点的密度函数值f(x)。把上面的式子进行改写,即:核密度估计(Kernel density estimation),是一种用于估计概率密度函数的非参数方法,为独立同分布 F 的n 个样本点,设其概率密度函数为 f: 这里 h 如果选的太大,肯定不符合 h 趋向于 0 的要求。h 选的太小,那么用于估计 f(x) 的点实际上非常少。这也就是非参数估计里面的 bias-variance tradeoff,也就是偏差和方差的平衡。这样后还是存在一个问题,那就是概率密度函数依然不够平滑(因为两个数之间的存在无数个数)。 记 ,那么: 由于需要满足概率密度的积分为1,所以: 也就是要满足 K(t) 的积分等于1也就满足了的积分为1。如果把 K(t) 当作其他已知的概率密度函数,那么问题就解决了,最后的密度函数也就连续了。 2.1 核函数 从支持向量机、meansift都接触过核函数,应该说核函数是一种理论概念,但每种核函数的功能都是不一样的,这里的核函数有uniform,triangular, biweight, triweight, Epanechnikov,normal等。这些核函数的图像大致如下图: 有言论称Epanechnikov 内核在均方误差意义下是最优的,效率损失也很小。由于高斯内核方便的数学性质,也经常使用 K(x)= ϕ(x),ϕ(x)为标准正态概率密度函数。 从上面讲述的得到的是样本中某一点的概率密度函数,那么整个样本集应该是怎么拟合的呢?将设有N个样本点,对这N个点进行上面的拟合过后,将这N个概率密度函数进行叠加便得到了整个样本集的概率密度函数。例如利用高斯核对X={x1=−2.

在Javaweb中使用JSON数据格式发送以及响应

在传统的Javaweb中数据发送以及响应的,我们通常使用servlet。随着技术的不断更新迭代,当我们使用axios发生json格式的数据时,我们后台之内使用json数据格式来进行响应。 1.如果我们在前端发送普通请求参数时,我们在后台还能使用servlet.getParameter方法接收 前端使用VUE进行发送 new Vue({ "el":"#app", "data":{}, "methods":{ "commonParam":function () { axios({ "method":"post", "url":"/demo/AjaxServlet?method=commonParam", "params":{ "userName":"tom", "userPwd":"123456" } }).then(function (response) { console.log(response); }).catch(function (error) { console.log(error); }); } } }); 后端接收的相关代码 请求的URL为:http://localhost:8080/demo/AjaxServlet?method=commonParam&userName=tom&userPwd=123456 public class AjaxServlet extends ModelBaseServlet { protected void commonParam(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userName = request.getParameter("userName"); String userPwd = request.getParameter("userPwd"); System.out.println("userName = " + userName); System.out.println("userPwd = " + userPwd); response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("服务器端返回普通文本字符串作为响应"); } } 2.

Python 批量解压

import os import shutil import rarfile import zipfile import re def main(target_path): for root, dirs, files in os.walk(target_path): now_dir = root # 解压后的存放目录 for file in files: path = os.path.join(now_dir, file) path_out = os.path.join(now_dir, 'down', file.split('.')[0]) if '.rar' in file: rf = rarfile.RarFile(path) # 待解压文件 rf.extractall(path_out) # 解压指定文件路径 print(file,":OK") if '.zip' in file: z = zipfile.ZipFile(path) z.extractall(path_out) # path为解压路径,解包后位于该路径下 print(file,":OK") if __name__ == '__main__': target_path = "dongtai/" main(target_path)