Amp

Unity 游戏框架搭建 2019 (九~十二) 第一章小结&第二章简介&第八个示例

不羁的心 提交于 2020-11-22 06:47:03
第一章小结 为了强化教程的重点,会在合适的时候进行总结与快速复习。 第二章 简介 在第一章我们做了知识库的准备,从而让我们更高效地收集示例。 在第二章,我们就用准备好的导出工具试着收集几个示例,这些示例中有的是我们后续库的基础工具,也有的是在项目中非常实用的小工具,还有一些示例是实践了在框架搭建方向上非常重要的 C# 语法知识。 第二章大纲如下。 第八个示例(一) 在之前,我们完成了一个导出的功能。但是在完成这个功能的过程中,我们也遇到了一些问题。我们回忆一下,在《MenuItem 复用》的这篇文章中,我们想对如下代码进行复用。 using System; #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public class ExportUnityPackage : MonoBehaviour { #if UNITY_EDITOR [MenuItem("QFramework/4.导出 UnityPackage")] private static void MenuClicked() { var assetPathName = "Assets/QFramework"; var fileName = "QFramework_" + DateTime.Now

C#中Equals和GetHashCode

北战南征 提交于 2020-11-22 06:43:37
https://www.cnblogs.com/yyfh/archive/2020/01/31/12245916.html Equals和GetHashCode Equals每个实现都必须遵循以下约定: 自反性(Reflexive): x.equals(x)必须返回true. 对称性(Symmetric): x.equals(y)为true时,y.equals(x)也为true. 传递性(Transitive): 对于任何非null的应用值x,y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)必须返回true. 一致性(Consistence): 如果多次将对象与另一个对象比较,结果始终相同.只要未修改x和y的应用对象,x.equals(y)连续调用x.equals(y)返回相同的值l. 非null(Non-null): 如果x不是null,y为null,则x.equals(y)必须为false GetHashCode: 两个相等对象根据equals方法比较时相等,那么这两个对象中任意一个对象的hashcode方法都必须产生同样的整数。 在我们未对对象进行修改时,多次调用hashcode使用返回同一个整数.在同一个应用程序中多次执行,每次执行返回的整数可以不一致. 如果两个对象根据equals方法比较不相等时

(a == 1 && a == 2 && a == 3),何时为true?

穿精又带淫゛_ 提交于 2020-11-21 23:15:58
今天浏览一些技术网站,看到这个题目。虽然觉着代码这么写的可能性低之又低,但是却也考验对js了解的程度。 在 JavaScript 中 (a ==1 && a== 2 && a==3) 可能为 true 吗?解释说nothing is impossible! 这里是两个可能的答案: <script> const a = { i: 1 , toString: function () { return a.i++ ; } } if (a == 1 && a == 2 && a == 3 ) { console.log( 'Hello World!' ); } </script> 运行代码 <script> const a = { i: 1 , valueOf: function () { return a.i++ ; } } if (a == 1 && a == 2 && a == 3 ) { console.log( 'Hello JavaScript!' ); } </script> 运行代码 最根本的还是强制类型转换。类型==,===运算符和强制转换: 先看个表达式: <script> var res = "1.0e0" == { valueOf: function () { return true ; } };   console.log(res); </script> 运行代码

python图像处理-滤镜的算法原理实现

早过忘川 提交于 2020-11-21 04:18:24
前言 本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要 具备基本的电脑操作能力, 准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过。 前言 上一篇文章我们利用PIL自带的路径方法实现了一些滤镜的效果,单纯从使用的角度来说已经够我们使用了,但是如果能够弄清楚它们背后的原理,相信应该是会对我们更有帮助的。 在正式讲解之前,有一些基本的概念还是要在重新了解一下。 图片是由一个个像素组成的,每个像素又是由RGB三种颜色数值组成的(这里指的是RGB模式图片),灰度图是由0-255单个数值组成的。所有的图片处理,本质上都是对像素值进行处理。 灰度滤镜实现 灰度图我们知道是由单一数值0-255组成的,一张RGB三种颜色组成的图片要变成灰度图,需要将它们的三种颜色值设为相同即可。由于人眼对绿色的敏感度最高,红色次之,对蓝色的敏感度最低,因此,当权值 G > R > B时,所产生的灰度图像更符合人眼的视觉感受。 所以将颜色的RGB设置为相同的值即可使得图片为灰色,一般处理方法有: 1、取三种颜色的平均值 2、取三种颜色的最大值(最小值) 3、加权平均值:L = 0.299R + 0.587G + 0.114*B 黑白滤镜实现 黑白效果实现和滤镜有点类似,只不过这里需要自己设定一个阈值,将每一个像素点的平均值与阈值100(这个不是固定的

系列文章:Kubernetes中日志的正确输出姿势

可紊 提交于 2020-11-19 05:31:40
https://yq.aliyun.com/articles/744265 前言 上一期主要和大家介绍从全局维度考虑如何去构建K8s中的日志系统,本期我们从实践角度出发来一步步构建K8s中的日志监控体系。构建日志系统的第一步是如何去产生这些日志,而这也往往是最繁杂最困难的一步。 2009年阿里云春节上班第一天,在北京一间连暖气都没有的办公室里,一帮工程师一边口呼白气,一边敲出了“飞天”的第一行代码。“飞天”作为阿里云的核心技术平台,其英文名Apsara——来自吴哥王朝的阿仆萨罗飞天仙女的名字。 阿里云飞天系统的第一行代码就是为了编写一个日志系统,而现在apsara logging的日志库应用在飞天所有的系统中,包括盘古、女娲、伏羲、洛神... Kubernetes中日志重要性 通常日志最基础的作用是记录程序的运行轨迹,在此之上会衍生出非常多的功能,例如线上监控、告警、运营分析、安全分析等等(详情可以参见第一篇文章),这些功能反过来也对日志具备一定的要求,我们需要尽可能的将日志规范化,以减少收集、解析、分析的代价。 在Kubernetes中,环境的动态性很强,日志基本上都是易失的,因此需要实时将日志采集到中心的存储中,为了配合日志采集,对于日志的输出、采集会有更多的要求。 下述我们列举了Kubernetes中,日志输出的常见注意事项(其中标记 (*

python实现秒杀商品的微信提醒

无人久伴 提交于 2020-11-18 20:32:43
技术实现原理:获取京东的具体的商品信息,然后再使用微信发送提醒 工具:需要两个微信号,这两个微信号互为好友 Step1 收集自己想要的商品url 我们就以京东来举例,获取京东的秒杀商品信息: 首先,我们在网页上打开京东,搜索我们想要的商品,这边我就以我最近买的东西为例子: 我们需要找到它的商品信息,需要打开浏览器的开发者模式,之后我们需要选择自己的配送地址,这个时候里面就发送一些接口请求: 我们选择一个有用的商品信息接口: 找到自己想要商品的信息接口,来判断它是否有货: 一般规则是:如果这个接口书籍里面有“无货”的字符信息,那就是缺货状态,否则就是有货状态,可以发送商品链接,进行购买。 我们现在已经成功获取到了商品的url信息,接下来就是设置微信了。 Step2 设置微信通知 微信通知我们需要两个微信号,一个作为发送方,一个作为接受方,这个两个账号需要互为好友。 注意:作为发送方的微信可能会有注册时间要求(微信好像设立了规则:如果晚于某一时间段注册的账号将不再具备网页微信登陆功能) 这边我们使用itchat模块进行模拟微信登陆: import itchat itchat.auto_login( hotReload = True ) hotload参数设置为True可以记住第一次登陆的状态,下一次就不需要扫码登陆了。 执行以上代码可以生成登陆二维码,你只需要扫码登陆就可以了。

XSS过滤JAVA过滤器filter 防止常见SQL注入

允我心安 提交于 2020-11-16 03:27:07
https://www.cnblogs.com/hero123/p/9091625.html Java项目中XSS过滤器的使用方法。 简单介绍: XSS : 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。 sql注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 实现方式,共三步: 第一步 :配置web.xml <filter> <filter-name>xssFilter</filter-name> <filter-class>com.wfcm.xss.XssFilter</filter-class> </filter> <filter-mapping> <filter-name>xssFilter</filter-name>

NOIWC2019 & FJWC2019 游记

一笑奈何 提交于 2020-11-15 07:12:10
NOIWC凉了。 去年Ag今年Cu。 讲课基本没听(听不懂),都在宿舍狗着。 44+40+0=84。(我发现有好多84的) t1是一道计数题,推了一个半小时,算出来一个关于组合数和prufer序列计数的式子,组合数的那部分可以多项式操作化掉,但是prufer序列那部分推不出来(水平不行),44分去看T2了。 t2是一道造计算机,第一个点和第三个点是送的,第二个点我打了一个表最后爆零了,后面两个点看样子是并行最短路,时间也不多了,就没搞了。 t3乱搞了1个半小时以为交互库是随机的结果GG了。 FJWC考得一般,挂了好多不该挂的分。 Day1 100+100+0,前两题比较水,但是第二题因为不太熟悉sam,调了很久,第三题想出了费用流的一个60分乱搞,没时间写了。 Day2 100+40+100,第一题是傻逼构造,第三题是安师大集训原题,第二题看了时限7s,我认为set的全部遍历复杂度是O(n log n)的所以手写了无旋treap最后T成翔,写set的反而过了(摔 Day3 100+0+10,第一题是傻逼线段树,第二题也是傻逼题,但是我把最大值看成求和最后暴力也爆零了,第三题是一个dp,我分析出了连通块分开做的性质,但是因为dp的细节过于繁琐,思考了很久还是没d出来,最后写了暴力。 Day4 20+0+0,严重翻车。。。T1 b=1的情况考虑错了,但过了大样例。只剩20分,T2

数组方法indexOf & lastIndexOf

自闭症网瘾萝莉.ら 提交于 2020-11-15 06:52:26
indexOf() 语法:arrayObject.indexOf(searchvalue, startIndex) 功能:从数组的开头(位置0)开始向后查找。 参数:searchvalue:必需,要查找的项; startIndex:可选,起点位置的索引。 返回值:number,查找的项在数组中的位置,没有找到的情况下返回-1. var nums=[1,7,5,7,8,1,6,9 ]; // 检测7在数组中出现的位置 var pos=nums.indexOf(7 ); console.log(pos) // 返回结果是1,它检测的是第一个7在数组中出现的位置 var nums=[1,7,5,7,8,1,6,9 ]; // 检测7在数组中出现的位置 var pos=nums.indexOf(7,3 ); console.log(pos) // 从索引为3开始查找,返回结果是3 lastIndexOf() 语法:arrayObject.lastIndexOf(searchvalue,startIndex) 功能:可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。 参数:searchvalue 必需,要查找的项; startIndex 可选,起点位置的索引。 返回值:number,查找的项在数组中的位置,没有找到的情况下返回-1. 注意

Scrapy & Django项目

廉价感情. 提交于 2020-11-15 04:59:11
# 需求: 编写爬虫项目与Django项目详解和, 将爬取到的数据展示到前端页面上 # spider编写: import scrapy from dl.items import DlItem class PSpider(scrapy.Spider): name = 'p' # allowed_domains = ['www.baidu.com'] start_urls = ['https://www.kuaidaili.com/free/'] def parse(self, response): # print(response) tr_list = response.xpath('//*[@id="list"]/table/tbody/tr') # print(tr_list) for tr in tr_list: ip = tr.xpath('./td[1]/text()').extract_first() port = tr.xpath('./td[2]/text()').extract_first() typ = tr.xpath('./td[3]/text()').extract_first() protocal = tr.xpath('./td[4]/text()').extract_first() position = tr.xpath('./td[5]/text()