01、包装类型可以为 null,而基本类型不可以 它使得包装类型可以应用于 POJO 中,而基本类型则不行。POJO 的英文全称是 Plain Ordinary Java Object,即: 简单无规则的 Java 对象,只有属性字段以及 set和 get方法
和 POJO 类似的,还有数据传输对象 DTO(Data Transfer Object,泛指用于展示层与服务层之间的数据传输对象)、视图对象 VO(View Object,把某个页面的数据封装起来)、持久化对象 PO(Persistant Object,可以看成是与数据库中的表映射的 Java 对象)。那为什么 POJO 的属性必须要用包装类型呢?
《阿里巴巴 Java 开发手册》上有详细的说明,我们来大声朗读一下(预备,起)。 数据库的查询结果可能是 null,如果使用基本类型的话,因为要自动拆箱(将包装类型转为基本类型,比如说把 Integer 对象转换成 int 值),就会抛出 NullPointerException 的异常。
02、包装类型可用于泛型,而基本类型不可以 泛型不能使用基本类型,因为使用基本类型时会编译出错。
//例如 List<int> list = new ArrayList<>(); // 提示 Syntax error, insert Dimensions to complete ReferenceType List<Integer> list = new ArrayList<>(); 03、基本类型比包装类型更高效 基本类型在栈中直接存储的具体数值,而包装类型则存储的是堆中的引用。
04、两个包装类型的值可以相同,但却不相等 两个包装类型的值可以相同,但却不相等——这句话怎么理解呢?来看一段代码就明明白白了。
两个包装类型在使用==进行判断的时候,判断的是其指向的地址是否相等。chenmo 和 wanger 两个变量使用了 new 关键字,导致它们在==的时候输出了 false。 而 chenmo.
目录代码创建进程创建进程的方式有哪些代码创建的两种方式进程循环join方法进程间数据默认隔离进程对象相关属性和方法查看进程的方法cmdpython代码current_process函数os模块僵尸进程与孤儿进程僵尸进程孤儿进程守护进程互斥锁
代码创建进程 创建进程的方式有哪些 鼠标双击桌面一个应用图标 代码创建 代码创建的两种方式 # 第一种代码创建进程的方式 from multiprocessing import Process import time def task(process_name): print('the subprocess %s is running' % process_name) time.sleep(3) print('the subprocess %s is over' % process_name) if __name__ == '__main__': p = Process(target=task, args=('meta',)) # 创建一个进程对象 p.start() # 创建一个新的进程 print('主进程') # 第二种代码创建进程的方式 from multiprocessing import Process import time class MyProcess(Process): def __init__(self, process_name): self.process_name = process_name super().__init__() def run(self): print('the subprocess %s is running' % self.
写一个excel,4列:编号,预期结果,实际结果,执行结果。然后预期结果和执行结果写入相同或不同的值,作比较,相同的值则执行结果通过,否则失败,并且用不同的颜色标注,在第四列写入对应的结果
总共2个表
第一个表:生成表和数据
#第一步:新建一个表 import openpyxl wb=openpyxl.Workbook() wb.save('zuoye.xlsx') #第二步:插入一个sheet表 import openpyxl wb=openpyxl.load_workbook('zuoye.xlsx') wb.create_sheet('bijiao',0) wb.save('zuoye.xlsx') #第三步:插入3列表头 import openpyxl wb=openpyxl.load_workbook('zuoye.xlsx') sh=wb['bijiao'] sh.cell(row=1,column=1).value='编号' sh['B1']='预期结果' sh['C1']='实际结果' wb.save('zuoye.xlsx') #第四步:插入列表 import openpyxl wb=openpyxl.load_workbook('zuoye.xlsx') sh=wb['bijiao'] list=[[1,'a','b'],[2,'a','a'],[3,'a','b'],[4,'b','b'],[5,'b','a'],[6,'b','c']] for row in list: sh.append(row) wb.save('zuoye.xlsx') #第五步:插入最后一个表头执行结果 import openpyxl wb=openpyxl.load_workbook('zuoye.xlsx') sh=wb['bijiao'] sh['D1']='执行结果' wb.save('zuoye.xlsx') 第二个表:封装运算
import os import openpyxl from openpyxl.styles import Font class ZuoYe: def __init__(self): self.wb = None self.sh = None self.filename = None self.lines=[] #打开表 def open_excel(self,filename): if os.path.isfile(filename): if filename.
作者: 林 渤, 王枭雄, 胡建鹏:上海工程技术大学电子电气工程学院,上海 关键词: 抽象语法树;GCC;C语言;可视化;AST; GCC; C Language; Visualization 摘要: 抽象语法树(abstract syntax tree, AST)作为一种重要的中间表示形式,在代码静态分析领域有着重要的研究意义。本文通过研究GCC生成的抽象语法树文本内容,给出重建抽象语法树及可视化的方法。GCC编译器生成的抽象语法树内容存在大量冗余,不能直接进行解析。针对此问题,本文提出一种改进的去冗余算法,从根节点中先找到main函数后进行遍历,相比常规的去冗余算法有更高的效率,同时针对可视化操作进行了结构性的优化,能够将原始的文本转换为JSON字符串,配合web树形控件的展示形式实现了可视化界面。 Abstract: The abstract syntax tree (AST), as an important intermediate representation, plays an important role in the field of static analysis of code. This paper gives a method to reconstruct and visualize the AST based on the textual content of the AST generated by the GCC compiler. The contents of the abstract syntax tree generated by the GCC compiler are heavily redundant and cannot be parsed directly.
集合运算练习
union()
intersection()
subtract()
cartesian()
内连接与外连接
join()
leftOuterJoin()
rightOuterJoin()
fullOuterJoin()
三、综合练习:学生课程分数
网盘下载sc.txt文件,通过RDD操作实现以下数据分析:
持久化 scm.cache() 总共有多少学生?map(), distinct(), count() 开设了多少门课程? 生成(姓名,课程分数)键值对RDD,观察keys(),values() 每个学生选修了多少门课?map(), countByKey() 每门课程有多少个学生选?map(), countByValue() 有多少个100分? Tom选修了几门课?每门课多少分?filter(), map() RDD Tom选修了几门课?每门课多少分?map(),lookup() list Tom的成绩按分数大小排序。filter(), map(), sortBy() Tom的平均分。map(),lookup(),mean() 生成(课程,分数)RDD,观察keys(),values() 每个分数+5分。mapValues(func) 求每门课的选修人数及所有人的总分。combineByKey() 求每门课的选修人数及平均分,精确到2位小数。map(),round() 求每门课的选修人数及平均分。用reduceByKey()实现,并比较与combineByKey()的异同。 结果可视化。 pyecharts.
Day0 看了下去年的题,去年我只是大概瞟了一眼题意,只有 Day2T1 这种数据结构口胡了一下做法。
重新看一下,发现 Day1T1T2 都随便秒,T3 没怎么想,感觉暴力分不少。
看 Day2,T1我觉得按我现在码力没问题,T2 是一个简单的 DP ,我想不出来也有很多暴力分,T3 稍微了解支配树就有很多分了……
很有信心。感觉去年这种题非常适合我。
Day1 开题,题面和去年的简洁对比一下,完全没有读题欲望。
T1 不知道是大模拟还是小模拟。我已经做好写不完这题的准备了。
T2 一看非常拉插出多项式,但我完全没写过这种题。
T3 是个神秘图论,不知道能不能做。
我竟然先去推 T2 ,时间考试 1h 多了,没有任何进展,我没看有多少暴力分就去看 T3 。
T3 看了看还是多少有点思路,但我一来就盯着性质 C 看,过了这个拼上暴力有 80 分,很赚,想了一会我以为自己会了,就开写。
我先去写 T1 ,感觉码力并不是很行,写两行删一行,最后写出来倒是挺简洁,还是调了一会,由于我把它看成大模拟来整,写了将近 1h ……
回来先把 T3 的状压写了,手速确实不行,调 bug 也挺慢。写完我会想 80 分咋做,结果发现之前假了。再看一下部分分,A 我还是会的。
写了一下,有个 trick 我差点没想起,然后还忘记了那个保证的条件,导致写的挺复杂,写完只有 20min 了。
写 T2 发现当时只考虑了第一问,因为我会第一问第二问也肯定 simple,但是写暴力就不是了,思考了一下只剩 10min ,最后第一问都没调出来。
考完才发现 T3 性质 B 有一半分是完全送的。考场上也知道性质 B 能做,但没时间写,没发现不构造解就是送分。
感觉今天打的很一般,明天翻盘仅仅是理论上可能性了。
晚上我想明天该按啥策略打,然后感觉今年和 20 年的像,于是就默认了明天 T1 签到,后面两道也不是不可做(为什么我还没看到题就会有这种想法)
2021119陈俊积 Python技能树及CSDN MarkDown编辑器测评
课程:《Python程序设计》 班级: 2111 姓名: 施鸽 学号:20211119 实验教师:王志强 实验日期:2022年4月19日 必修/选修: 公选课
测评链接:https://blog.csdn.net/xs_1234/article/details/124282316
牛顿迭代法 求近似解 概念 牛顿法又称为牛顿-拉弗森方法,它是一种在实数域和复数域上近似求解方程的方法。方法使用函数\(f(x)\)的泰勒级数的前面几项来寻找方程\(f(x)=0\)的根。
注意:牛顿法只能逼近解,不能计算精确解。
原理 利用泰勒公式,在\(x_0\)处展开,展开到一阶,即:
\[f(x)=f(x_0)-f^{'}(x_0)(x-x_0) \tag{1} \]
令\(f(x)=0\),就是我们要找的方程的解,即:
\[x_1=x_0-\frac{f(x_0)}{f^{'}(x_0)} \tag{2} \]
同理,在\(x_1\)处展开,则:
\[x_2=x_1-\frac{f(x_1)}{f^{'}(x_1)} \tag{3} \]
依次计算,最终的根将无线逼近方程的解:
\[x_{n+1}=x_n-\frac{f(x_n)}{f^{'}(x_n)} \tag{4} \]
开二次方 要求常数\(a\)的近似解,我们可以构造函数,\(f(x)=x^2-a\),\(f^{'}(x)=2x\),则原来的牛顿迭代式为:
\[\Rightarrow x_{n+1}=x_n-\frac{x^2_n-a}{2x_n}=\frac{1}{2}(x_n+a/x_n) \tag{5} \]
给方程一个迭代初始值,\(x_0=a\),然后依次迭代求得方程近似解。
注意:初始化为负数可能会出现负数。
代码 public static double static sqrt(double a){ if(a<0) return Double.NAN; double e=1e-7; double t=a; while(Math.abs(t*t-a)>e) { t=(a/t+t)/2.0; } return t; } 拓展 牛顿法开\(k\)次方,构造函数\(f(x)=x^k-a\),\(f^{'}(x)=kx^{k-1}\),则牛顿迭代式为:
\[x_{n+1}=x_n-\frac{x^k_n-a}{kx^{k-1}_n}=\frac{k-1}{k}x_n+\frac{a}{kx^{k-1}_n} \tag{6} \]
(1) 牛顿法
优化算法 除了经常被提起的梯度下降法,牛顿法也是机器学习中用的比较多的一种优化算法,牛顿法的速度很快,而且能高度逼近最优值。
求解优化函数\(f(x)\),转化为求\(f^{'}(x)=0\)的解。
对\(x_k\)点进行泰勒展开,具体展开到二阶:
之前已经在虚拟机上安装好了hadoop,下面纪录下用java操作hdfs和中间遇到的一些问题,使用的是伪分布式模式
一 本地配置hadoop环境变量 此处默认已经具备jdk环境.将hadoop的压缩包解压到任意目录
在环境变量中配置HADOOP_HOME变量,值为hadoop所在的目录
二、编写测试类 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.junit.Before; import org.junit.Test; import java.net.URI; public class JavaToHDFS { // 定义类变量:文件系统,用来链接hdfs FileSystem fs = null; //预处理,链接hdfs @Before public void init() throws Exception { fs = FileSystem.get(new URI(hdfs://192.168.10.102:9000), new Configuration(), root); } @Test public void mkdir() { System.out.println(fs); } } 测试会发现会报一个这样的错误
这是因为在本地运行hadoop程序需要依赖一些依赖库和工具类,需要工具的可以直接搜索你对应Hadoop版本的winutils.exe
下载完后吧他bin里面的文件全部拷贝到Hadoop的bin文件中
添加完后就可以正常运行了
前言 本章节将讲解各种 WEB 层面上的有那些漏洞类型,具体漏洞的危害等级,以简要的影响范围测试进行实例分析,思维导图中的漏洞也是后面我们将要学习到的各个知识点,其中针对漏洞的形成原理,如何发现,如何利用将是本章节学习的重点内容
思维导图 实际应用:CTF,SRC,红蓝对抗,实战等
以上漏洞危害情况 SQL注入 攻击者未经授权可以访问数据库中的数据,盗取用户的隐私以及个人信息,造成用户的信息泄露。 可以对数据库的数据进行增加或删除操作,例如私自添加或删除管理员账号。 如果网站目录存在写入权限,可以写入网页木马。攻击者进而可以对网页进行篡改,发布一些违法信息等。 经过提权等步骤,服务器最高权限被攻击者获取。攻击者可以远程控制服务器,安装后门,得以修改或控制操作系统。 XSS 窃取管理员帐号或Cookie,入侵者可以冒充管理员的身份登录后台。使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。 窃取用户的个人信息或者登录帐号,对网站的用户安全产生巨大的威胁。例如冒充用户身份进行各种操作 网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马 发送广告或者垃圾信息。攻击者可以利用XSS漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用 XXE 读取任意文件 执行系统命令 探测内网端口 攻击内网网站 文件上传 如果 Web应用程序存在上传漏洞 , 攻击者甚至可以将一个webshell直接上传到服务器上 文件包含(可能含有文件包含的漏洞:inurl:php?file=) web服务器的文件被外界浏览导致信息泄露 脚本被任意执行,可能会篡改网站、执行非法操作、攻击其他网站 文件读取 通过任意文件下载,可以下载服务器的任意文件,web业务的代码,服务器和系统的具体配置信息,也可以下载数据库的配置信息,以及对内网的信息探测等等 CSRF(用户请求伪造) 以受害者名义发送邮件,发消息,盗取受害者的账号,甚至购买商品,虚拟货币转账,修改受害者的网络配置(比如修改路由器DNS、重置路由器密码)等等 个人隐私泄露、机密资料泄露、用户甚至企业的财产安全 SSRF (服务器端请求伪造) 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner 信息 攻击运行在内网或本地的应用程序 攻击内外网的 web 应用,主要是使用 GET 参数就可以实现的攻击(如:Struts2,sqli) 下载内网资源(如:利用file协议读取本地文件等) 进行跳板 无视cdn 利用Redis未授权访问,HTTP CRLF注入实现getshell 反序列化 远程攻击者利用漏洞可在未经任何身份验证的服务器主机上执行任意代码,被攻击者间接控制服务器 代码执行 代码执行漏洞造成的原理是由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。造成代码执行相关的函数分别是:eval、assert函数 暴露服务器信息 木马植入 敏感文件暴露 可能升级为命令执行 逻辑漏洞 在提交订单的时候抓取数据包或者直接修改前端代码,然后对订单的金额任意修改。 黑客只需要抓取Response数据包便知道验证码是多少或直接绕过 有些业务的接口,因为缺少了对用户的登陆凭证的较验或者是验证存在缺陷,导致黑客可以未经授权访问这些敏感信息甚至是越权操作 有些关键性的接口因为没有做验证或者其它预防机制,容易遭到枚举攻击 Cookie的效验值过于简单。有些web对于cookie的生成过于单一或者简单,导致黑客可以对cookie的效验值进行一个枚举 单纯读取内存值数据来当作用户凭证 用户修改密码时,邮箱中会收到一个含有auth的链接,在有效期内用户点击链接,即可进入重置密码环节。而大部分网站对于auth的生成都是采用rand()函数,那么这里就存在一个问题了,Windows环境下rand()最大值为32768,所以这个auth的值是可以被枚举的 未授权访问 敏感信息泄露 命令执行 继承Web服务程序的权限去执行系统命令或读写文件 反弹shell 控制整个网站甚至控制服务器 进一步内网渗透 目录遍历 攻击者通过访问网站某一目录时,该目录没有默认首页文件或没有正确设置默认首页文件,将会把整个目录结构列出来,将网站结构完全暴露给攻击者; 攻击者可能通过浏览目录结构,访问到某些隐秘文件(如PHPINFO文件、服务器探针文件、网站管理员后台访问地址、数据库连接文件等) 以上漏洞等级划分 高危漏洞:SQL注入、文件上传、文件包含、代码执行、未授权访问、命令执行