BigDecimal可以用equals方法做等值比较吗?

结论是不可以,BigDecimal的equals方法不仅会比较值,还会比较精度,比如1.0和1.00虽然值是一样的,我们也倾向于认为是相同的,但是因为精度不同,最终得到的结论是false。 代码如下: @Test public void compareBigDecimal(){ BigDecimal d1 = new BigDecimal("1.0"); BigDecimal d2 = new BigDecimal("1.00"); System.out.println(d1.equals(d2)); } 得到结果: 这是因为BigDecimal重写了equals方法,源码如下: public boolean equals(Object x) { if (!(x instanceof BigDecimal)) return false; BigDecimal xDec = (BigDecimal) x; if (x == this) return true; if (scale != xDec.scale) return false; long s = this.intCompact; long xs = xDec.intCompact; if (s != INFLATED) { if (xs == INFLATED) xs = compactValFor(xDec.intVal); return xs == s; } else if (xs !

web安全攻防渗透测试实战指南_web安全攻防渗透测试实战指南

1. Nmap的基本 Nmap + ip 6+ ip Nmap -A 开启操作系统识别和版本识别功能 – T(0-6档) 设置扫描的速度 一般设置T4 过快容易被发现 -v 显示信息的级别,-vv显示更详细的信息 192.168.1.1/24 扫描C段 192.168.11 -254 =上 nmap -A -T4 -v -iL ~/targets.txt (iL表示要扫描的目标位于一个文档中) --------------- 192.168.1.1/24 --exclude 192.168.1.100 (排除在外的目标 .100) --------------- -----------------excludefile ~/targets.txt nmap 192.168.1.1 -p 80.443 网站 是否在这个端口部署网站 nmap –traceroute 192.168.1.1 探测路由 nmap -O 192.168.1.1 对目标进行指纹识别 nmap -sV ---------- 对版本进行探测 nmap -sF -T4 192.168.1.1 利用fin包对端口进行扫描,识别是否被关闭,收到RST包,说明被关闭。否则是open 后者 fileter状态。 (利用三次握手,可以绕开防火墙) nmap –script=auth+ip 处理鉴权证书的脚本,也可以作为检测部分应用弱口令 -----------=brute+ip 暴力破解 扫描脚本介绍: 位置 : nmap安装目录/scripts/ 例如/usr/share/nmap/scripts

Python基础:类型注解(type hint)

1、什么是 Python 类型注解? 1.1 Python动态类型的优缺点 使用静态类型的编程语言,例如 C/C++、Java,需要预先声明函数的变量、参数和返回值的类型。编译器在编译和运行之前检查代码的类型定义是否符合要求。运行时不能随意改变类型,指针变量可显式地用cast()来改变类型。 而 Python 使用动态类型,函数的变量、参数和返回值可以是任何类型。此外,在程序运行时,允许不加申明更改变量类型。Python 解释器在运行时,根据上下文来动态推断变量类型。如下面这个add()函数,输入参数,可以是任意类型。 def add(x,y) return x+y print(add(10+20)) print(add(3.14+5.10)) print(add(10+20.33)) print(add("hello","world")) 如果换成C++, 虽然可用函数模板来实现,显然不如python 简洁与灵活。 template<typename T> T add(T x, T y) { return x + y; } // 如果输入参数为整数 int a = 3; int b = 4; int result = add(a, b); // result 等于 7 //如果输入参数为浮点数 double c = 3.14; double d = 2.71; double result = add(c, d); // result 等于 5.

JVM的工作流程

目录 1.JVM 简介 2.JVM 执行流程 3. JVM 运行时数据区 3.1 堆(线程共享) 3.3 本地方法栈(线程私有) 3.4 程序计数器(线程私有) 3.5 方法区(线程共享) 4.JVM 类加载 ① 类加载过程 1) 加载 2) 验证 3) 准备 4) 解析 5) 初始化 ② 双亲委派模型 双亲委派模型的优点 1.JVM 简介 JVM 是 Java Virtual Machine 的简称,意为 Java 虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。 常见的虚拟机: JVM 、 VMwave 、 Virtual Box 2.JVM 执行流程 程序在执行之前先要把java代码转换成字节码(class文件),JVM 首先需要把字节码通过一定的方式 类加载器(ClassLoader) 把文件加载到内存中 运行时数据区(Runtime Data Area) ,而字节码文件是 JVM 的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析器 执行引擎(Execution Engine)将字节码翻译成底层系统指令再交由CPU去执行,而这个过程中需要调用其他语言的接口 本地库接口(Native Interface) 来实现整个程序的功能,这就是这4个主要组成部 分的职责与功能。

零基础转行网络安全可以做什么工作

一直在说网络安全行业好就业、薪资高、前景也好,但是大家对网络安全这个行业具体做什么工作可能还一知半解。所以今天来跟大家聊聊,网络安全学完可以找到什么样的工作,顺便把不同岗位的不同技术要求也说一下。 安全运维工程师 由于一些知名度比较高的网站,每天的工作量和资料信息都是十分庞大的,所以在网站正在运行状态中一定会出现各种各样的问题。例如一些数据的丢失、网站的崩溃等等,这个时候就需要一个网站维护人员,而通过网络安全的学习,也是能够胜任这个工作岗位的。 需要的技能: 了解计算机网络知识,对常见协议,路由、交换、防火墙知识有全面了解熟悉SQserver oracle mysql等主流数据库熟悉Windows、Linux等操作系统了解服务器和网络设备维护 … 网络安全工程师 为了防止黑客入侵盗取公司机密资料和保护用户的信息,狠毒哦公司都需要把自己的网络安全建设好,而网络安全工程师是直接负责保护公司网络安全的核心人员。 需要的技能: 熟悉TCO/IP、网络安全、以太网工作原理了解网络安全、主机安全、应用安全、数据安全等技术了解恶意代码检测、网络威胁监测和分析、防火墙、IDS、IPS、WAF、终端管理、安全管理等熟悉L2TP/PPTP/OPEN VPN、NAT、ACL、DNS、端口映射等工作原理具有良好的安全意识和信息安全知识 … 渗透测试工程师 渗透测试岗位主要是模拟黑客攻击,利用黑客技术,挖掘漏洞,提出修复建议。 需要的技能: 1、熟悉主流的Web安全技术,包括SQL注入、 XSS、CSRF、一句话木马等安全风险; 2、.熟悉国内外主流安全产品和工具,如:Nessus、Nmap、AWVS、Burp、Appscan等 3、熟悉windows、linux平台渗透测试、后门分析、加固; 4、至少掌握一门编程语言C/C++/Perl/Python PHP/Go/Java等; 5、熟悉渗透测试的步骤、方法、流程,具有 Web安全实战经验; 6、熟悉常见安全攻防技术,对网络安全、系统安全、应用安全有深入的理解和自己的认识 7、对Web安全整体有深刻理解,具备代码审计和独立漏洞挖掘能力; … 安全服务工程师 负责公司的风险管理咨询和培训服务,给公司项目的风险管理提供解决方案。项目实行的全过程中进行管理,独立完成项目风险管理,出具建议书以及报告。 需要的技能: 掌握扎实的安全基础知识,包括网络、系统、应用等领域; 2、具备日志分析经验,能够从日志分析中发现异常事件; 3、有丰富web渗透测试经验,对常见Web安全漏洞的原理、危害、利用方式及修复方法有较深入的理解,熟悉主流的安全工具; 4、具有良好的洞察力、数据分析能力和归纳总结能力; … 这里就介绍四种具体的工作岗位,感兴趣的同学可以来武汉安鸾网络安全学院交流学习! 接下来,跟大家聊聊行业的趋势和薪资待遇。 一般来说网络安全方向的薪资待遇都比较好,并且有别于程序员的工作。工作压力小,不会出现996、007的情况,并且网络安全方向的工作薪资会随着工作经验的增加而增加,越老值钱。来看看招聘网站上真实的薪资待遇,还不够心动吗? 其实如何选择网络安全学习方向,如何进行实战与理论的结合并不难,找准正确方式很重要。 如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享! 接下来我将从成长路线开始一步步带大家揭开网安的神秘面纱。 1.成长路线图 共可以分为: 一、基础阶段 二、渗透阶段 三、安全管理 四、提升阶段 同时每个成长路线对应的板块都有配套的视频提供: 视频配套资料&国内外网安书籍、文档 当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料 SRC技术文档汇总 绿盟护网行动 网络安全源码合集+工具包 网络安全面试题 最后就是大家最关心的网络安全面试题板块 所有资料共87.9G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方CSDN官方合作二维码免费领取(如遇扫码问题,可以在评论区留言领取哦)~ 如果你也想学习:黑客&网络安全的SQL攻防 今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。 在这里领取: 👉嘿客必备开发工具👈 工欲善其事必先利其器。学习嘿客常用的开发软件都在这里了,给大家节省了很多时间。 这份完整版的网络安全(嘿客)全套学习资料已经上传至CSDN官方,朋友们如果需要点击下方链接也可扫描下方微信二v码获取网络工程师全套资料【保证100%免费】 如果你对网络安全入门感兴趣,那么你点击这里👉CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享 这个是我花了几天几夜自整理的最新最全网安学习资料包免费共享给你们,其中包含以下东西: 1.学习路线&职业规划 2.全套体系课&入门到精通 3.黑客电子书&面试资料 4.漏洞挖掘工具和学习文档

html--彩虹爱心

文章目录 js内容cssreset.min.cssstyle.css html内容 js内容 const colors = ["#e03776","#8f3e98","#4687bf","#3bab6f","#f9c25e","#f47274"]; const SVG_NS = 'http://www.w3.org/2000/svg'; const SVG_XLINK = "http://www.w3.org/1999/xlink"; let heartsRy = [] function useTheHeart(n){ let use = document.createElementNS(SVG_NS, 'use'); use.n = n; use.setAttributeNS(SVG_XLINK, 'xlink:href', '#heart'); use.setAttributeNS(null, 'transform', `scale(${use.n})`); use.setAttributeNS(null, 'fill', colors[n%colors.length]); use.setAttributeNS(null, 'x', -69); use.setAttributeNS(null, 'y', -69); use.setAttributeNS(null, 'width', 138); use.setAttributeNS(null, 'height', 138); heartsRy.push(use) hearts.appendChild(use); } for(let n = 18; n >= 0; n--){useTheHeart(n)} function Frame(){ window.requestAnimationFrame(Frame); for(let i = 0; i < heartsRy.

stable diffusion 零基础入门教程

一、前言 Midjourney 生成的图片很难精准的控制,随机性很高,需要大量的跑图,但Stable Diffusion可以根据模型较精准的控制。 SD 效果图展示: 二、Stable Diffusion 介绍 Stable Diffusion 是一款基于人工智能技术开发的绘画软件,它可以帮助艺术家和设计师快速创建高品质的数字艺术作品。该软件使用了一种称为 GAN(生成对抗网络)的深度学习模型,该模型可以学习并模仿艺术家的创作风格,从而生成类似的艺术作品。 Stable Diffusion 具有直观的用户界面,可以让用户轻松地调整绘画参数并实时预览结果。用户可以选择不同的画布、画笔和颜色,还可以通过调整图像的风格、纹理和颜色等参数来创建各种不同的艺术作品。 除此之外,Stable Diffusion 还提供了一些高级功能,例如批量处理、自动矫正和自动化调整等,可以帮助用户更加高效地完成大量的绘画任务。 总之,Stable Diffusion 是一款功能强大的 AI 绘画软件,它比现在市面上主流的 AI 绘画软件 Midjourney 更加的强大,可以说 SD 是所有 AI 绘画的鼻祖级存在,同样,更强大代表着它的上手难度及配置要求也更高。那么说到这里,我们就来看看这两款软件的一个对比吧 三、主流 AI 绘画软件的对比 四、Stable Diffusion 电脑配置要求 1. 配置要求: 需要使用 N 卡(NVIDIA 显卡),显卡的显存至少需要 4GB 以上显存才能在本地运行。最低配置需要 4GB 显存,基本配置 6GB 显存,推荐配置 12GB 显存或者以上。 Stable Diffusion Ai 绘画主要是运行显卡,算力越强,出图越快。显存越大,所设置图片的分辨率越高) “推荐使用 RTX4090 显卡哦” -----来自一个 3080 显卡玩家 还有一点的就是硬盘空间要大,SD 出图主要依赖模型,网上下载的模型资源一般都很大(一个模型在 2G 以上)批量跑图也是很占内存的,这边建议 60GB 以上的硬盘空间。 2. 网络要求: 大家都懂哈,咱也不说。

基于spring boot技术的签到管理系统的设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 SpringBoot框架 3 1.2 Vue框架 3 1.3 ECharts 3 1.4 JQuery技术 4 1.5 本章小结 4 2 系统分析 5 2.1 需求分析 5 2.2 非功能需求 8 2.3 本章小结 8 3 系统设计 9 3.1 系统总体设计 9 3.1.1 系统体系结构 9 3.1.2 系统目录结构 9 3.1.3 系统功能结构 9 3.2 系统详细设计 10 3.2.1 系统功能设计 10 3.2.2 数据库设计 10 3.3 本章小结 16 4 系统实现 17

6N137SDM光电耦合器中文资料规格书PDF数据手册引脚图图片价格参数芯片概述

产品概述: 6N137M、HCPL2601M、HCPL2611M 单沟道和 HCPL2630M、HCPL2631M 双沟道包含一个 850 nm AlGaAS LED,与带有可调谐输出的极高速集成式光电探测器逻辑门级进行光耦合。此输出具有一个开路集电极,允许有线 OR 输出。耦合参数在 -40°C 至 +85°C 的温度范围内可得以保证。最高 5mA 的输入信号提供最小 13mA 的输出汲电流(扇出 8)。内部噪声屏蔽提供卓越的共模抑制,通常为 10kV/µs。HCPL2601M 和 HCPL2631M 的最低 CMR 为 5kV/µs。HCPL2611M 的最低 CMR 为 10kV/µs。 产品特性: 6N137M、HCPL2601M、HCPL2611M 单沟道和 HCPL2630M、HCPL2631M 双沟道包含一个 850 nm AlGaAS LED,与带有可调谐输出的极高速集成式光电探测器逻辑门级进行光耦合。此输出具有一个开路集电极,允许有线 OR 输出。耦合参数在 -40°C 至 +85°C 的温度范围内可得以保证。最高 5mA 的输入信号提供最小 13mA 的输出汲电流(扇出 8)。内部噪声屏蔽提供卓越的共模抑制,通常为 10kV/µs。HCPL2601M 和 HCPL2631M 的最低 CMR 为 5kV/µs。HCPL2611M 的最低 CMR 为 10kV/µs。 规格书参数:

antd vue Tabs控件的使用

Ant Design Vue-------Tabs标签页 今天就讲讲Ant Design Vue下的控件----tabs 标签页 结合项目中的需求,讲一下该控件如何使用,需求: (1)竖排样式 (2)如何使用v-for绑定数据源 (3)change事件 (4)动态生成、动态切换(子组件和component、keepAlive、nextTick的联合使用) 官网案例来一个: <template> <a-tabs v-model:activeKey="activeKey"> <a-tab-pane key="1" tab="Tab 1">Content of Tab Pane 1</a-tab-pane> <a-tab-pane key="2" tab="Tab 2" force-render>Content of Tab Pane 2</a-tab-pane> <a-tab-pane key="3" tab="Tab 3">Content of Tab Pane 3</a-tab-pane> </a-tabs> </template> <script lang="ts" setup> import { ref } from 'vue'; const activeKey = ref('1'); </script> 效果如图: 项目中的代码: <div style="height: calc(100vh - 230px)"> <a-tabs v-model:activeKey="activeItem" tab-position="left" @change="handleTabChange"> <a-tab-pane v-for="

ES6:箭头函数中的this指向问题

普通函数中的this指向函数的调用者 例子: 黑马程序员的说法:箭头函数不会创建自己的this,它只会从自己的作用域链的上一层沿用this 尚硅谷的说法:this始终指向函数声明时所在作用域下的this的值 通俗理解就是箭头函数中找this,不能在this所在的代码块内找,应该往外一层去找 例子:

【MySQL】视图和用户管理

视图 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。 注:视图和Read View 没有关系! 语法 //建立视图 create view view_name as [select ...]; //删除视图 drop view view_name; 特点 视图和基表是联动的,视图方便进行CURD操作必须唯一命名视图不能添加索引,也不能有关联的触发器和默认值可以提高安全性 用户管理 账号信息 MySQL的用户信息也是以表的形式存储的,在mysql库下的user表里 //查看 账号名,登录权限,加密后的密码 select USER,HOST,authentication_string from user; //其中HOST为localhost表示只能在主机登录 用户创建 create user 'username'@'登录主机/ip' identified by 'password' //%表示可以在任意主机登录,严重不推荐 //设置密码可选,但更建议在创建用户时就设置好密码 //刷新 flush privileges; 用户删除 drop user 'username'@'登录主机/ip'; 更改密码 //当前用户更改自己 set password=password('新的密码'); //root为某个用户更改密码 set password for 'username'@'主机名'=password('新的密码'); 数据库权限 grant 权限列表 on 库.对象 to '用户名'@'登录位置' [identified by 'password']; 例如: grant select on ... grant select,delete,create on .

【MYSQL】事务

文章目录 什么是 事物为什么出现了事物事物的版本支持事物的四大属性事物的提交方式事物常见操作方式正常情况非正常情况 事物的隔离性查看与设置隔离性读未提交【read uncommitted】读提交【read committed】可重复读【repeatedable read】串行化【serializable】 数据库并发访问的三种场景:MVCC机制(读写并发)四个隐藏字段:undo日志Read View【读视图】实验:RR 和 RC的本质区别: 什么是 事物 事物就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,他们是一个整体。Mysql提供一种机制,保证我们达到这样的效果,事物还规定不同的客户端看到的数据是不同的。 例如,当你在大学毕业时,学校的数据库可能不需要你的数据了,所以要删除你的信息,即要删除所有你的信息,你的各科成绩等等,这些所有的语句合起来就是一个事务。 为什么出现了事物 事物被MySQL设计出来,本质是为了当应用程序访问数据库的时候事物能够简化我们的编程模型,不需要我们考虑各种各样的潜在错误和并发问题,因为我们使用事物的时候,要么提交,要么回滚,我们不用再考虑网络异常、服务器宕机、并发访问等问题,所以事物就是为了服务应用层而诞生的。 事物的版本支持 在MySQL中,只有使用innodb存储引擎的才支持事物,Myisam不支持事物。 事物的四大属性 原子性:一致性: 在事物开始之前和之后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有预设规则,包含资料的准确度、串联性以及后续数据库可以自发性地完成预定工作。隔离性:持久性: 原子性+隔离性+持久性 共同保障了一致性,一致性也需要用户的配合。 事物的提交方式 事物提交有两种方式:手动提交和自动提交。 //查看事物的提交方式: show variables like 'autocommit'; //更改事物的提交方式 set autocommit=0; //set autocommit=0 即禁止自动提交 事物常见操作方式 正常情况 //先检测一下默认提交方式: show variables like 'autocommit'; //启动事物 start transaction; begin; //设置保存点 savepoint sp_name; //回滚到保存点 rollback sp_name; //完全回滚 rollback; //提交事物 commit; 事物只能在启动期间才能回滚,一旦提交,事物就无法回滚了! 非正常情况 客户端异常退出,MySQL自动完成事物的回滚。 单条SQL和事物的关系:所有的单SQL语句都是事物,如果关掉了自动提交,每一条单SQL都需要我们手动commit去提交。 当我们手动begin时,不会受autocommit的影响。 通过事物的启动和回滚,体现出Mysql的原子性和持久性。 事物的隔离性 在事物场景里,隔离是必要的。运行中的事物,进行互相隔离,根据影响程度的不同,设置隔离级别。 读未提交读提交可重复读串行化 查看与设置隔离性 //查看全局隔离级别 select @@global.

图像压缩神器:使用wxPython和Pillow快速压缩JPEG文件

导语: 在数字时代,我们经常处理大量的图像文件,无论是个人照片、网络图片还是工作中的设计素材。然而,随着图像数量的增多,存储和传输这些文件可能会成为一个挑战。幸运的是,我们可以利用Python编程和两个强大的库——wxPython和Pillow,轻松地实现图像压缩的自动化过程。本文将介绍如何使用wxPython选择文件夹路径,并使用Pillow压缩JPEG文件,让你的图像占用更少的空间,同时保持良好的视觉质量。 正文: 引言 在当今数字化时代,我们每天都会处理大量的图像文件。无论是从手机相机中导出的个人照片,还是从互联网上下载的壁纸和图片资源,图像文件占据了我们电脑存储空间的很大一部分。为了更好地管理和共享这些图像,压缩它们是一个非常实用的方法。然而,手动逐个压缩图像文件费时费力,这时候我们可以借助Python编程来实现自动化的图像压缩过程。 C:\pythoncode\new\compressjpg.py 准备工作 在开始之前,我们需要确保已经安装了以下两个库:wxPython和Pillow。如果你还没有安装它们,可以使用以下命令进行安装: pip install wxPython pip install Pillow 创建GUI界面 我们将使用wxPython库来创建一个简单的GUI界面,它将帮助我们选择要压缩的文件夹路径。下面是代码片段: # 代码片段1 import os import wx from PIL import Image class ImageCompressor(wx.Frame): def __init__(self, parent, title): super(ImageCompressor, self).__init__(parent, title=title, size=(400, 200)) self.panel = wx.Panel(self) self.create_widgets() self.Show() def create_widgets(self): vbox = wx.BoxSizer(wx.VERTICAL) open_button = wx.Button(self.panel, label="选择文件夹") open_button.Bind(wx.EVT_BUTTON, self.on_open_button) vbox.Add(open_button, proportion=1, flag=wx.EXPAND|wx.ALL, border=10) self.panel.SetSizer(vbox) def on_open_button(self, event): dialog = wx.DirDialog(self, "选择文件夹路径", style=wx.DD_DEFAULT_STYLE) if dialog.ShowModal() == wx.

UE4 传奇4 角色是否死亡

// Function MirMobile.MM_AIControllerBase.IsDead // (Final, Native, Public, BlueprintCallable) // Parameters: // class AMM_CharacterPawnBase* PCharBase (Parm, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic) // bool ReturnValue (Parm, OutParm, ZeroConstructor, ReturnParm, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic) bool AMM_AIControllerBase::IsDead(class AMM_CharacterPawnBase* PCharBase) { static class UFunction* Func = nullptr; if (Func == nullptr) Func = Class->GetFunction("MM_AIControllerBase", "IsDead"); Params::MM_AIControllerBase_IsDead Parms{}; Parms.PCharBase = PCharBase; auto Flgs = Func->FunctionFlags; Func->FunctionFlags |= 0x400; UObject::ProcessEvent(Func, &Parms); Func->FunctionFlags = Flgs; return Parms.ReturnValue; }

「题解」动态规划:解码方法

解码方法 题目链接 思路: 状态表示 dp[i]表示到达 i 位置时,有多少种解码方法状态转移方程 根据上面的状态表示,第 i 个数字可以自己单独解码,也可以和第 i - 1 个数字一起解码,所以dp[i]就是这两种解码方式的解码方案总和 ① i 位置的数字单独解码时,如果这个数字不为0,那解码方法就有 dp[i-1]种(因为此时相当于在前面 i - 1 个数字的所有解码方案的后面再追加第 i 个数字) 如果这个数字为0,那就不能单独解码 ②如果和前面的数字一起解码并且可以解码的话,那解码方法就有 dp[i-2]种(因为此时相当于在前面 i - 2 个数字的所有解码方案的后面再追加第 i - 1 和第 i 个数字) 对于①和②两种情况,如果可以解码,那就让 dp[ i ] 加上 初始化 因为涉及到 i - 1 和 i - 2,所以一开始得初始化 dp[0] 和 dp[1] 对于 dp[0],当第1个数字不为0时,dp[0] = 1 对于 dp[1],如果自身能解码,那 dp[1] 就是1,如果可以和前面的数字一起解码,那 dp[1] 就为2填表顺序 因为得先知道前面有多少种解码方法才可以推出后面的解码方法数,所以得从左往右填表返回值 根据 dp[ i ] 的含义,我们返回 dp 表最后一个元素就可以了 class Solution { public int numDecodings(String s) { int n = s.

安卓的wifidog使用

安卓的wifidog使用 参考资料编译环境修改地方修改的config.hmk文件加入以下参数使用 参考资料 链接:GitHub - wuguohu/wifidog-gateway: 基于wifidog官方版本的修改版本链接:Android下编译wifidog_adb怎么编译wifidog-CSDN博客链接:移植wifidog至android5.1平台 - 简书 (jianshu.com)链接:如何移植wireless tool到Android - 简书 (jianshu.com)链接:Android.mk error: unused parameter 处理方法-CSDN博客 编译环境 安卓11 qssi目录下使用mm命令编译后会出现在out/target/product/qssi/system/bin/wifidog 修改地方 去除unused的参数 可以修改mk文件 但是修改了mk文件加了屏蔽unused没有用,所以我手动改了去除config.h 的__ANDROID__将bzero修改为memset配置的修改到对应开启热点的网卡 wlan1 修改的config.h #define VERSION "v1.0" #define HAVE_STDARG_H //#define __ANDROID__ mk文件加入以下参数 # -Wno-unused- 加上对应的变量或参数类型,即可忽略当前警告,编译通过。 LOCAL_CFLAGS += -Wno-unused-const-variable -Wno-unused-variable -Wno-unused-parameter 手动使用变量 (void)(x)也是可以的,要改的不多 使用 使用adb push生成的文件到 /system/bin/adb push wifidog.conf 到/etc/认证页面push到 /etc/

基于LTE和wimax异构网络的垂直切换算法matlab仿真

目录 1.LTE和WiMAX 2.垂直切换算法的基本原理 2.1 切换决策准则 2.2 切换判决函数 2.3切换成本分析 2.4 负载均衡 2.5 切换决策算法 2.6切换决策过程 3.matlab程序 4.仿真结果 随着无线通信技术的快速发展,多种无线接入技术(RAT)共存已成为常态。LTE和WiMAX作为两种主流的无线通信技术,各自具有独特的优势。在异构网络中,用户设备(UE)可能需要在不同的RAT之间进行切换,以保持最佳的网络连接质量。垂直切换算法就是用于在这种异构网络环境中实现UE在不同RAT之间平滑切换的关键技术。 1.LTE和WiMAX 在基于LTE和WiMAX的异构网络中,多个无线接入技术共存并相互协作以提供更加灵活、高效且广泛的覆盖范围。这种异构网络环境通常包括宏蜂窝(如LTE eNodeB)、小蜂窝(如femtocell或picocell)、WiMAX基站以及其他类型的接入点(如Wi-Fi热点),所有这些共同构成了一个多层次、多维度的无线通信架构。 在这样的网络环境中,设计一种有效的垂直切换算法至关重要,该算法能够在不同的RAT之间做出最优决策,确保用户设备(UE)始终连接到最佳可用网络节点。 2.垂直切换算法的基本原理 垂直切换算法的核心是根据一定的决策准则,在LTE和WiMAX网络之间选择最佳的接入点(AP)或基站(BS)。这些决策准则通常基于网络性能参数,如信号强度、带宽、延迟、抖动等。算法的目标是最大化用户的服务质量(QoS)和网络的整体性能。在一个包含LTE和WiMAX网络的异构网络中,垂直切换是指用户设备(UE)从一个无线接入技术(RAT)切换到另一种不同类型的RAT的过程。为了实现高效、无缝的垂直切换,算法通常考虑以下几个主要方面: 2.1 切换决策准则 信道质量测量:UE需要实时评估其在当前服务小区(例如LTE eNodeB或WiMAX BS)以及邻区小区的信号强度(RSRP, Reference Signal Received Power)和信号质量(SINR, Signal-to-Interference-plus-Noise Ratio)。 切换门限:基于系统参数设定切换阈值,SINR_{LTE} > SINR_{th,LTE},SINR_{WiMAX} < SINR_{th,WiMAX} 。基于吞吐量预测 Throughput_{LTE} > Throughput_{WiMAX}。 2.2 切换判决函数 可以构建一个综合评判函数,结合多种因素,如延迟要求、带宽需求、剩余电池电量等,来决定是否进行切换。此函数可以表示为: 2.3切换成本分析 考虑切换过程中的开销,包括传输时延、重配置消息的发送、业务中断时间等。这些成本可以通过数学模型量化,如切换时延模型: 其中 Tproc​ 表示处理时间,Ttrans​ 表示传输时间。 2.4 负载均衡 在大规模部署中,算法还应考虑网络负载平衡问题,即通过切换引导UE进入相对空闲的小区,这可以通过更复杂的数学优化模型来实现。 2.5 切换决策算法 常见的切换算法如最差小区删除(WCD)、比例公平(Proportional Fairness)原则等,它们涉及到对多个候选小区排序和选择的过程,可能使用如效用函数最大化这样的策略: 2.6切换决策过程 切换决策过程通常包括以下几个步骤: 网络发现:UE检测并收集周围可用的LTE和WiMAX网络的信息。 参数测量:UE测量各网络的性能参数,如接收信号强度(RSS)、信噪比(SNR)等。 切换触发:当当前网络的性能下降到某个阈值以下或另一个网络的性能更好时,触发切换过程。 切换决策:根据预定义的决策算法和测量到的参数,UE选择最佳的目标网络。 切换执行:UE断开与当前网络的连接,并建立与目标网络的连接。 3.matlab程序 ............................................................... while countinue_run %################# measure the receieved signal strength ############ %if the mobile station is in the LTE network if is_in_LTE_coverage(MS_coordinate) RSS_LTE=calculate_RSS(MS_coordinate,MS_speed,'LTE',record_time*Tc,Tc); else RSS_LTE=-inf; end %if the mobile station is in the LTE network if is_in_Wimax_coverage(MS_coordinate) RSS_Wimax=calculate_RSS(MS_coordinate,MS_speed,'Wimax',.

来说说看到的求职路上可以提高的地方——简历

要进行求职的时候应该遇到的第一件事情就是简历。 随着看到的简历越来越多,也发现了一些问题,来开个帖子来说说这些问题。 格式 让参加面试的人最头疼的地方就是简历格式没有空格。 最近发现好多人的简历格式上都不空格,很多内容完全都在一起,找起来特别费劲。 比如有求职者说自己是全栈工程师,后端使用的是 Java,然后在简历从上到下读下来完全都没有找到和 Java 相关的。 为了不漏掉相关细节,我们也只能开启了搜索模式,在简历中搜索有关 Java 的关键字。 通常这种简历给参加面试人感觉非常不好。 其实可以随便 Google 下简历的格式,挑一个好的,然后按照上面的格式改改,如果是做前端的,通常简历的格式要求更高。 这是因为对前端工程师不仅仅是会看相关代码,对审美的要求显然是会要比后端高一些的。 好的简历格式绝对是加分项。 内容 在面试的时候发现了另外的一个问题 —— 堆砌名词。 很多人都喜欢把用过的一些词放在简历里面,但是却不去了解放在简历中的名词是什么,自己有没有做过。 说个例子: 在面试的时候,我们问有没有使用相关后端 Java 框架的经验?面试人支支吾吾答不上来。 但我们在简历中,通篇看到的都是 Spring ,然后还有 Spring AOP。 Spring AOP 在实际使用的时候遇根据项目情况明显用得不多。在想,你都用到了 Spring AOP 了,难道还不知道 Java 后端框架在用 Spring 吗? 显然面试人堆砌名词了,这种堆砌名词会给自己埋下很多坑的。 对于有经验的随便看一下再提问就不好答了。所以在自己简历中堆砌名词的时候一定要对自己堆砌的名词有所准备。 来说说看到的求职路上可以提高的地方——简历 - 求职路上 - iSharkFly要进行求职的时候应该遇到的第一件事情就是简历。 随着看到的简历越来越多,也发现了一些问题,来开个帖子来说说这些问题。 格式让参加面试的人最头疼的地方就是简历格式没有空格。 最近发现好多人的简历格式上都不空格,很多内容完全都在一起,找起来特别费劲。 比如有求职者说自己是全栈工程师,后端使用的是 Java,然后在简历从上到下读下来完全都没有找到和 Java 相关的。 为了不漏掉相关细节,我们也只能开启了搜索模式,在简历中搜索有关…https://www.isharkfly.com/t/topic/15485

Google XML Sitemaps插件下载安装出现,无法勾选Include sitemap in HTML format的问题

源地址:Google XML Sitemaps插件下载安装出现,无法勾选Include sitemap in HTML format的问题_计算机技术网 最近在优化wordpress网站的时候发现有一个网站地图制作插件比较好用,而且比较正规,我们都知道google是搜索引擎的大佬级代表。国内很多搜索引擎的算法也基本是跟着这个标杆在对齐。今天我们就来看看google XML Sitemaps插件怎么使用设置? 插件安装: 搜索-下载-安装。 如果表明的红圈是灰色的,无法勾选解决方法: 到宝塔的中找到PHP版本管理,在里面安装扩展中找到xsl扩展,并且安装,然后重新启动PHP即可,如果是没有宝塔的,直接到实例里面去下载安装PHP xsl扩展即可。 在该设置中,红框选择的可以选择性的勾选,你可以不勾选,也没的什么问题的。 这里的设置都是默认的,如果不是,照着修改就可以了。 然后点击更新设置即可,就可以使用xxx.com/sitemap.xml来访问了。 访问sitemap.xml实际的效果: 当然这里说的是阿帕奇web服务器配置方法,如果是nginx web服务器的话,需要修改下伪静态,当用niginx web服务器的时候,插件会提示你怎么去增加伪静态代码,这里就不用详细的介绍了。