华为OD七日集训第2期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 一、适合人群二、本期训练时间三、如何参加四、七日集训第 2 期五、精心挑选21道高频100分经典题目,作为入门。第1天、逻辑分析第2天、字符串处理第3天、矩阵第4天、深度优先搜索dfs算法第5天、回溯法第6天、二分查找第7天、双指针 大家好,我是哪吒。 最近一直在刷华为OD机试的算法题,坚持一天三道题的节奏,已经8个多月了,刷了370多道题。 最近还组织了“【陪伴学习】华为OD刷题交流群”,目前有207人在群。 希望用我自己疯狂刷题的劲头,感染大家,让大家爱上刷题,顺利通过华为OD机试,掌握更多优秀的算法。 为了更高效、更有乐趣的刷题,学习,即日起开展 “华为OD七日集训”。 有兴趣参加 “华为OD七日集训”的小伙伴,点击文末名片,扫描一下,回复华为OD即可。 一、适合人群 参加华为OD机试的小伙伴们想学习一下算法的小伙伴们题库题目太多,刷题没方向想刷题,没动力,三天打鱼两天晒网 二、本期训练时间 2024年3月13日(周三) ~ 2024年3月19日(周二)。 三、如何参加 私信哪吒,备注华为OD七日集训,加入华为OD七日集训。 四、七日集训第 2 期 遵循“按算法分类,由易到难”的刷题思路。 制定七期七日集训,达到有效刷题,高效刷题,顺序通关的目的。 1、 先了解华为OD机试,是个啥? 2、喜提华为OD算法总纲,运筹帷幄之中决胜千里之外。 五、精心挑选21道高频100分经典题目,作为入门。 21天法则定律,又称为21天养成习惯法则,是指一个人坚持做某件事情21天后,就能够形成一种习惯,这个习惯将会成为自己生活中的一部分,从而达到自我成长和提升的目的。这个法则源于美国心理学家马克斯·马尔茨,他在研究人类行为习惯时发现,一个人需要至少21天的时间去养成一种新的习惯。 第1天、逻辑分析 华为OD机试 - 垃圾信息拦截(Java 2024 C卷 100分) 华为OD机试 - 羊、狼、农夫过河 - 逻辑分析(Java 2022 Q4 100分) 华为OD机试 - ABR 车路协同场景 - (Java 2023 B卷 100分) 第2天、字符串处理 华为OD机试 - 字符串统计(Java 2024 C卷 100分) 华为OD机试 - 敏感字段加密(Java 2023 B卷 100分) 华为OD机试 - 字符串分割(Java 2023 B卷 100分)

【企业战略转型】某音响制造公司发展战略转型管理咨询项目纪实

案例: 【客户评价】 日本M汽车音响有限公司田总经理: 受经济大环境的影响,我公司原有的依赖企业下订单的业务模式受到很大的影响,企业进入“不进则退”的重要转型阶段。当企业生存的关键因素,我们作为典型的OEM汽车音响代工企业,正处在“不进则退”的重要战略转型阶段。 当企业生存的关键因素——劳动力成本低的优势逐渐丧失的时候,如何实现产业升级与品牌建设,是我们最关心的问题。华恒智信所提出的“双轮之路”战略转型的思路为我们指明了方向,非常具有时间指导意义,也是我们最关心的问题。我们选择与北京华恒智信人力资源顾问有限公司进行合作,为公司解决行业发展的难题。 在3个多月的项目合作中我们深深感受到了诸位咨询老师们的专业性和严谨性,另外,各位老师勤奋的工作作风和为顾客负责的服务精神也令我们印象深刻。 华恒智信咨询专家不仅对人力资源模块有深入的研究,他们对企业发展战略方向的定位也有专业的研究和深刻的见解。专家针对企业的困难提出了独特的“双市场”的发展战略,这一战略的实施有利于企业开拓新的业务和市场,也为企业的发展创造了源源不断的动力。 在此,我们对北京华恒智信项目组老师们对本公司的辛勤付出表示衷心的感谢! 【客户背景及现状问题】 日本M音响有限公司,是一家总部设于日本主要生产汽车音响产品,是一家代工的OEM工厂,获取以欧美汽车厂商为主的对音响产品的订单,公司为其设计并生产。 对于M音响制造商来说,通过合资可以学习欧美的先进生产技术和吸收品质管理经验。在2005年,当整个音响行业陷入业绩滑坡、进入行业的冬天的时候,M音响公司作为一个汽车OME配套制造商却“逆风飞扬”,仍保持了20%的较高增长率。 然而,此次金融危机引发的世界范围内的经济危机,使产业结构进入激变时期。此时,因为来自欧美汽车厂商的海外订单量萎缩,M音响公司单纯靠汽车厂家下订单的业务模式受到很大的局限,加之劳动力市场的成本也水涨船高,使公司面临生存的巨大威胁。 华恒智信专家团队深入该公司进行访谈与调研,并结合音响OEM配套制造商的行业发展状况,认真分析了该公司目前所面临的挑战。 1、海外订单无法保障,前景难料 许多从事汽车音响及相关配件的中小企业或多或少的与外贸扯得上一点关系,除了部分企业有着长期OEM订单位外,绝大部都是看订单生产,并没有长期合作关系,因此海外订单无法得到保障,如果只做这样的外贸“出口”业务,前景可想而知,这也是现阶段汽车音响企业的一大通病。 2、人工成本上升,利润空间越来越小 人工成本的上升对于劳动密集产业的代工企业而言影响较为严重,尽管该企业早就意识到转型的必要性,但由于该公司规模并不大,转型困难。后金融危机时代大陆人工成本的上升,再次提醒该公司产能转型的重要性。 3、没有品牌支持下的经营只是走过场 该汽车音响企业没有自己的品牌,没有自己的核心技术,一直以来都没有自己的品牌生产,一直做得就是外贸或贴牌生产。没有品牌支持的经营,虽然能让企业生存下去,但能生存多久,那就不好说,但有一个现实就是:在这个领域里,唱主角的永远是别人,自己只不过是走过场。该企业要想走的更远,还是多准备些,形成自己的品牌才能唱主角、才能获得市场中的话语权。 【华恒智信问题分析】 针对该音响制造公司生产成本上升、利润空间大幅下降,海外订单难保,业绩不断下滑等一系列问题,华恒智信专家团队对该公司的问题进行深入分析与研究后,认为该公司实现转型有两条途径: 策略一:转内销,借助内销市场实现战略转型 在一些代工企业较为集中的地区,在当地协助下,建立联合众多OEM配套相关企业的大卖场,该公司可以通过这样的内销平台,与更多国内的客户需求建立联系,助其创立内销品牌,转型进入内销市场。在这样的内销平台,M音响制造公司可以不用自建渠道,如此一来该公司品牌塑造和营销成本也将大大减少。 当然,这种内销渠道的建立也需要从长计议,需要各方面力量的配合与支持才有可能形成一个庞大的、有影响力的OEM配套生产商群。因此,M公司应慎重选择这种途径。 策略二:长期来看,产业升级、建立自有品牌才是M音响公司的长期发展方向 OEM配套生产商转型的根本之道还是开拓副业、产业升级及建立自有品牌。该公司战略转型很重要的渠道,就是去承接一些更高附加值的产品和服务来提升自己的利润空间;同时,该汽车音响公司谋求长久发展的战略目标,也就是要走一条双轮的路线——既要“代工贴牌”,又要想办法去打造自己的品牌。 【华恒智信解决方案】 前期经过与该企业负责人的访谈和交流,并对该公司代工生产模式进行一次全面梳理后,华恒智信专家提出构建“OEM配套与售后市场并重的双市场”战略转型的解决方案,期望能够为企业提供建设性的建议和帮助。 1、“双市场”战略的出发点 M汽车音响公司作为汽车电子产业,受到企业技术与电子技术发展的双重推动与制约。该产业的产值会随着汽车的普及及消费电子产品的发展得到迅速的扩大。但是,由于融合度较高,汽车电子产业的进入门槛较高,产业附加值和利润都相对于汽车和普通电子产业更高,所以对M汽车音响企业而言既是机遇又是挑战。 汽车电子市场产生了两块截然不同的市场:即汽车生产厂的标准配套市场(OEM市场)和汽车购买之后的售后改装市场(AFT市场)。两种市场各自的定义及主要特征如下表所示: AFT市场与OEM市场有着微妙的互相作用、互相影响的关系。对于OEM市场配套制造商而言,对所制造产品的个性化、品牌化的要求越来越高了,而这种个性化需求的本身就是AFT市场所追求的根本。 所以,当汽车厂商对AFT市场的产品新功能越来越重视时,OEM能否满足其要求成为汽车厂商最终决定与谁合作的关键因素。另外,从ATF售后市场的角度出发,消费者在选择产品的时候,也会关注其选择对象产品在OEM市场的表现。 假设这样一个情景——当M汽车音响公司做售后市场时,介绍说我们生产的品牌是专为奔驰配套生产音响的厂家。这样的推荐方式会有效地促进消费者选择最终购买。 另外,AFT市场于OEM市场相结合的“双市场”战略也可以有效地避免单一市场的巨大风险——AFT市场需要投入巨大的自主品牌研发费用,树立品牌也非一日之功,因此需要由持续的稳定利润收入作为强大的后盾;而单一的OEM市场的成本竞争将会使企业的利润空间不断地被挤干。 对于M汽车音响OEM代工企业而言,在与委托方议价时又缺乏话语权,最后只能够沦为成本的牺牲品,失去了长久发展的原动力。因此,只有采取“双市场”战略,才能够使M汽车音响公司获得持久的核心竞争力。 2、M公司“双市场”战略实施的难度分析 首先,由于长期的订单生产模式,企业缺乏自主研发及创新能力。因此,企业要适应AFT市场对创新的个性化产品、强大的销售团队以及稳定的市场渠道要求,并不是一件容易的事情。 故而,当M汽车音响公司习惯于订单式生产,技术和产品标准均听从委托方,多数会对委托方产生依赖性,所以只有克服这些缺点,度过变革的阵痛期考验,才会使“双市场”战略在公司真正的落地与实施。 其次,摆在M公司面前的最大难题也是急需解决的问题就是售后体系的建设。汽车音响产品是高科技术含量的产品,存在着售后服务与质保等一系列的问题,健全的售后服务保障体系与品牌的建设同等重要,也是M公司进入ATF市场后,成功运作的关键。这些需要M公司在进入AFT市场前做好准备,因为售后体系的建设会是该公司面对的下一轮挑战。 3、“双市场”战略的实施 为了实现双市场同时作战,M汽车音响公司必须有效地配置资源,OEM和ATF两个市场取得良性互动和适当平衡,为公司创造持续发展和获利的核心竞争力。 因此,M汽车音响公司“双市场”战略实施的关键在于——首先,在AFT市场确立M公司具有个性化、高档次的品牌定位;第二,通过品牌效应,推动OEM市场订单的不断增加;第三,通过OEM市场委托商的品牌效应,反作用于AFT市场,形成双市场之间的良性互动与增值。 4、AFT市场的业务开拓与管理 M汽车音响公司为了打造一个具有个性化、高档次的品牌,应该从产品的定位、组织结构、产品开发和市场营销、人力资源开发与管理等方面都作出相应的规划、协调和改进。 在人力资源开发方面,为了适应“双市场”战略转型对人才的需要,引进并不断培育具有开拓创新意识的企业管理者和职业经理人,构建一支锐意搏杀的品牌推广人员和销售人员队伍,将为企业开拓AFT市场业务提供人才动力与智力支持。 劳动力成本的不断提升,使企业在成本方面的优势已经渐渐消失,因此,M公司如果依然维持OEM的经营管理模式,将会永远受牵制于产业链上端的委托商。不如选择开拓售后AFT市场来实现产业升级,从而打造属于自己的品牌,为企业长远发展创造源源不断的动力。

架构师之路:中台和微服务区别

什么是中台架构? 中台架构是一种将业务逻辑和技术能力模块化的架构思想,通过构建统一的中间层服务,将业务能力和技术能力解耦,使得各业务领域的功能和服务能够共享和复用。中台包括业务中台和技术中台两个方面: 业务中台:将业务逻辑进行分层,构建通用的业务能力模块,以满足不同业务场景的需求。例如,用户管理、订单管理、支付管理等。技术中台:将技术能力进行分层,构建通用的技术服务模块,以提供统一的技术支持和基础设施。例如,身份认证、权限控制、日志监控等。 中台与微服务区别: 中台强调的是功能和服务的复用和共享,通过统一的业务能力和技术能力来提高开发效率和降低维护成本;而微服务强调的是系统的拆分和独立部署,通过分布式的架构来提高系统的灵活性和可扩展性。中台更关注业务层面的解耦和复用,着重于统一业务逻辑和技术支持;而微服务更注重技术层面的解耦和独立部署,着重于服务之间的松耦合和自治性。中台通常是为了解决大型企业内部的复杂业务问题而提出的架构思想,而微服务更适用于大型系统或者跨部门组织的开发团队,以应对快速变化的业务需求和技术挑战。

Linux之防火墙详解

华子目录 什么时防火墙分类Netfilter(数据包过滤)定义Netfilter分析内容 防火墙无法完成的任务iptables与firewalld区别iptablesiptables执行原则原则防火墙规则规则链概念分析规则链分类注意例:物业管理公司有两条规定: 规则链之间的匹配顺序iptables流量处理动作iptables表四种规则表 安装iptables预处理管理命令规则链存储文件 iptables命令原则格式参数示例 实验1实验2实验3firewalld概念firewalld特点区域zone作用例分析zone文件中的过滤规则 firewall-cmd可视化界面工具安装使用 firewall-cmd命令行工具firewalld命令生效模式管理命令设置命令firewall-cmd参数示例1示例2示例3示例3总结 示例4示例5firewalld 富规则格式 什么时防火墙 防火墙时位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出。 分类 硬件防火墙:由厂商设计好的主机硬件,其操作系统主要以提供数据包数据的过滤机制为主,并去掉不必要的功能。软件防火墙:保护系统网络安全的一套软件(或称为机制) Netfilter(数据包过滤) 定义 netfilter是一个工作在Linux内核的网络数据包处理框架,用于分析进入主机的网络数据包,将数据包的头部数据(硬件地址,软件地址,TCP,UDP,ICMP等)提取出来进行分析,来决定该连接为放行还是抵挡的机制,主要用于分析OSI七层协议的2,3,4层 Netfilter分析内容 拒绝让Internet的数据包进入主机的某些端口拒绝某些来源IP的数据包进入拒绝让带有某些特殊标志(flag)的数据包进入,如:带有SYN的主动连接标志分析MAC地址决定是否连接 防火墙无法完成的任务 防火墙并不能杀毒或清除木马程序(假设主机开放了www服务,那么防火墙的设置一定是要将www服务的port开放给client端的。假设www服务器软件有漏洞,或者请求www服务的数据包本身就是病毒的一部分时,防火墙时阻止不了的)防火墙无法阻止来自内部LAN的攻击(防火墙对于内部的规则设置通常比较少,所以就很容易造成内部员工对于网络滥用的情况) iptables与firewalld区别 netfilter数据包过滤机制是由Linux内核建立的,不同的内核版本使用的设置防火墙策略的软件不一样,从红帽7系统开始firewalld服务取代了iptables服务iptables与firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已,即只是一种服务,而真正使用规则干活的是内核的netfilter总之,当前Linux系统中的防火墙管理工具,旨在方便运维人员管理Linux系统中的防火墙策略,我们只需要配置妥当其中的一个就足够了。当然这些工具各有优劣,但它们在防火墙策略的配置思路上是保持一致的 iptables 早期的Linux系统中,默认使用iptables防火墙来管理服务和配置防火墙,虽然新型的firewalld防火墙管理服务已经被投入使用多年,但是iptables在当前生产环境中还继续使用,具有顽强的生命力 iptables执行原则 原则 防火墙会从上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束配置工作并去执行匹配项中定义的行为(即放行或阻止)如果在读取完所有的策略规则后没有匹配项,就去执行默认的策略 防火墙规则 通(放行,允许)堵(阻止,拒绝)(一类:返回信息后拒绝,另一类:直接丢包)当默认策略为拒绝时,就要设置允许规则,否则数据包都进不来;若默认策略为允许时,就要设置拒绝规则=,否则数据包都能进来,防火墙也就失去了作用 规则链 概念 iptables服务把用于过滤流量的策略条目称之为规则,多条规则组成一个规则链 分析 数据包经过iptables处理必须闯过5个控制关卡,每个关卡放置5个规则链用于检查规则和处理,每一道关卡中有多个规则,数据报文必须按顺序一个一个匹配这些规则,这些规则串起来就像一条链,所以我们把这些关卡都叫作规则链 规则链分类 input链:数据包流入时,即数据包从内核流入用户空间output链:向外发送数据包(流出)时,即数据包从用户空间流出到内核空间,一般不配置forward链:处理数据包转发时,即在内核空间中,从一个网络接口进入到另一个网络接口去(转发过滤)prerouting链:在对数据包作路由选择之前,即互联网进入局域网postrouting链:在对数据包作路由选择之后,即局域网出互联网 注意 从内网向外网发送的流量一般都是可控且良性的,因此使用最多的是input规则链,该规则链可以增大黑客人员从外网入侵内网的难度 例:物业管理公司有两条规定: 1.禁止小商小贩进入社区2.各种车辆在进入社区时都要登记这两条规定是用于社区正门的(流量必须经过的地方),而不是每家的防盗门。根据防火墙策略的匹配顺序,可能会存在多种情况如:来访人员是小商小贩,则会被保安拒之门外,也就是无需再对车辆进行登记。若来访人员乘坐一辆汽车进入社区正门,则=="禁止小商小贩进入社区"的第一条规则就没有被匹配到==,因此按照顺序匹配第二条策略,既需要对车辆进行登记。如果是社区居民要进入正门,则这两条规定都不会匹配到,因此会执行默认的放行策略 规则链之间的匹配顺序 主机型防火墙: 入站数据(来自外界的数据包,且目标地址是防火墙本机):prerouting------>input---->本机的应用程序出站数据(从防火墙本机向外部地址发送的数据包):本机的应用程序----->output------>postrouting 网络型防火墙:转发数据(需要经过防火墙转发的数据包):prerouting------>forward-------->postrouting 规则链内的匹配顺序 自上向下按顺序依次进行检查,找到相匹配的规则就立即停止(log策略例外,表示记录相关日志)若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许) iptables流量处理动作 当规则链匹配后应采用以下几种动作来处理匹配的流量 accept:允许流量通过reject:拒绝流量通过,拒绝后回复拒绝信息log:记录日志信息drop:拒绝流量通过,流量丢弃不回复 例:若某天你正在家里看电视,突然听到有人敲门,透过防盗门的猫眼一看是推销商品的,便会在不需要的情况下开门并拒绝他们(reject)。但如果你看到的是债主带了十几个小弟来讨债,此时不仅要拒绝开门,还要默不作声,伪装成自己不在家的样子(drop) iptables表 规则链容纳了各种流量匹配规则,规则表则存储了不同功能对应的规则链,总之:表里有链,链里有规则 四种规则表 filter表:用于对数据包过滤(外网进入内网时),根据具体的规则决定是否放行该数据包(如drop,accept,reject,log),包含三个规则链:input,forward,output,所谓的防火墙其实基本上是指这张表上的过滤规则,常用nat表:network,address,translation,网络地址转换功能,主要用于修改数据包的源,目标IP地址,端口,包含三个规则链,output,prerouting,postroutingmangle表:拆解报文,做出修改,并重新封装,主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)值以及为数据包设置Mark标记,由于需要相应的路由设备支持,因此应用并不广泛,包含全部五个规则链raw表:是自1.2.9以后版本的iptables新增的表,用于是否对该数据包进行状态跟踪,在匹配数据包时,raw表的规则要优先于其他表,包含两个规则链,OUTPUT、PREROUTING注意:最终定义的防火墙规则链,都会添加到这四张表中的其中一张表中,如图: 安装iptables 预处理 RHEL(Centos)9中默认使用的是firewalld,且与iptables之间有冲突,如果需要使用 iptables 需要先停止firewalld再进行安装: [root@server ~]# systemctl stop firewalld [root@server ~]# systemctl disable firewalld # RHEL9安装iptables: [root@server ~]# yum list | grep iptables # 查询安装包名 iptables-libs.

解决com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large

我 | 在这里 ✈️公众号 | 热爱技术的小郑 。文章底部有个人公众号二维码。回复 Java全套视频教程 或 前端全套视频教程 即可获取 300G+ 教程资料及项目实战案例 🚀 邮箱 | 2977429967@qq.com 文章目录 前言方法 前言 如果数据量太大,直接插入数据库,就会报这个错误。需要修改数据库可存数据的大小。 方法 直接修改配置文件 配置文件中添加如下配置。 max_allowed_packet=64M 重新启动服务,即可。 资料参考1:解决com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large (3009 大于 1024) 资料参考2:完美解决mysql数据库报Packet for query is too large (164,357 > 2,048)的错误

linux中查看目录文件(ls)用法:

查看目录下的文件:ls(list) 作用 查看目录下的内容 格式 ls -参数 操作对象 参数 参数功能-l以长格形式显示文件和目录的详细信息,ls命令默认只显示名称的短格式。-d显示指定目录本身的信息,而不显示目录下的各个文件和子目录的信息。-c按文件的修改时间排序后,予以显示。-h以更人性化的方式显示出目录或文件的大小,默认的大小单位为字节,使用-h选项后将显示为K、M等单位。此选项需要和-l选项结合使用才能体现出结果。-R以递归的方式显示指定目录及其子目录中的所有内容。-a显示所有子目录和文件的信息,包括名称以“.”开头的隐藏目录和隐藏文件。-A与-a选项的作用类似,但不显示表示当前目录的“.”和表示父目录的“…”。-i显示文件索引节点号(inode)。一个索引节点代表一个文件,在linux中保存在磁盘分区中的文件都给它分配一个编号,称为索引节点号inode。-s按照文件大小排序 —此处以根目录/为例: 1.以长格式的方式显示根目录下的文件,比起ls更为详细 2.显示指定的文件信息,默认显示本文件,不包含子类文件: 3.按照文件的修改时间排序: 4. 以更人性化的方式显示出目录或文件的大小,默认的大小单位为字节,使用-h选项后将显示为K、M等单位。此选项需要和-l选项结合使用才能体现出结果。 | 5.| -R | 以递归的方式显示指定目录及其子目录中的所有内容。 | 6.-a显示本目录下的隐藏文件,-A不会显示当前目录的.和父目录的… 7.显示父目录下子目录下的索引序列号: 8.按照目录下的文件大小进行排序:

每日OJ题_路径dp⑥_力扣174. 地下城游戏

目录 力扣174. 地下城游戏 解析代码 力扣174. 地下城游戏 174. 地下城游戏 难度 困难 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。 有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数);其他房间要么是空的(房间里的值为 0),要么包含增加骑士健康点数的魔法球(若房间里的值为正整数,则表示骑士将增加健康点数)。 为了尽快解救公主,骑士决定每次只 向右 或 向下 移动一步。 返回确保骑士能够拯救到公主所需的最低初始健康点数。 注意:任何房间都可能对骑士的健康点数造成威胁,也可能增加骑士的健康点数,包括骑士进入的左上角房间以及公主被监禁的右下角房间。 示例 1: 输入:dungeon = [[-2,-3,3],[-5,-10,1],[10,30,-5]] 输出:7 解释:如果骑士遵循最佳路径:右 -> 右 -> 下 -> 下 ,则骑士的初始健康点数至少为 7 。 示例 2: 输入:dungeon = [[0]] 输出:1 提示: m == dungeon.lengthn == dungeon[i].length1 <= m, n <= 200-1000 <= dungeon[i][j] <= 1000 class Solution { public: int calculateMinimumHP(vector<vector<int>>& dungeon) { } }; 解析代码 路径dp问题,这道题的状态表示如果定义成:从起点开始,到达 [i, j] 位置的时候,所需的最低初始健康点数。 那么分析状态转移方程的时候会有一个问题:那就是当前的健康点数还会受到后面的路径的影响。也就是从上往下的状态转移不能很好地解决问题。

c++基础学习第四天(内存分区,引用)

提示:c++基础学习第四天(内存分区,引用) 文章目录 1、内存分区模型1.1、程序运行前1.2、程序运行后1.3、new操作符 2、引用2.1、引用的基本使用2.2、引用注意事项2.3、引用做函数参数2.4、引用做函数返回值2.5、引用的本质2.6、常量引用 1、内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放,存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放程序结束时由操作系统回收 内存四区意义: 不同区域存放的数据,赋予不同的生命周期.给我们更大的灵活编程 1.1、程序运行前 在程序编译后,生成了exe可执行程序,未执行该程序(exe)前分为两个区域 代码区: 存放CPU执行的机器指令 代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可 代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令 全局区: 全局变量和静态变量存放在此, 全局区还包含了常量区,字符串常量和其他常量也存放在此, 该区域的数据在程序结束后由操作系统释放 // 全局区 // 全局变量(函数外的变量)、静态变量、常量 // 创建普通局部变量(函数内的变量) int a = 10; int b = 10; cout << "局部变量a的地址为:" << (int)&a << endl; cout << "局部变量b的地址为:" << (int)&b << endl; cout << "全局变量g_a的地址为:" << (int)&g_a << endl; cout << "全局变量g_b的地址为:" << (int)&g_b << endl; // 静态变量 在普通变量前面加static, 属于静态变量 static int s_a = 10; static int s_b = 10; cout << "

Android Studio

深入探索集成开发环境的魅力 在数字化和移动化的浪潮下,Android系统凭借其广泛的覆盖范围和深度的定制性,已在全球范围内占据显著的市场份额。为了支撑这一庞大的生态系统,一个强大且灵活的集成开发环境(IDE)应运而生,它就是Android Studio。 Android Studio是由Google主导推出的专业Android应用开发工具,旨在提供一个全面的解决方案,助力开发者高效构建高质量的Android应用。这款IDE基于业界公认出色的Java开发工具——IntelliJ IDEA,并结合Android开发的特性和需求,为开发者提供了一个强大的平台。 Android Studio不仅提供了现代化的Android开发环境,更引入了声明式UI和Kotlin语言,让开发者能以更少的代码实现应用构建。同时,它支持从手机到平板、手表,甚至汽车、电视等多种设备,确保应用在不同设备上都能提供无缝的用户体验。这种跨平台的支持使得Android Studio成为开发者的首选工具,无论是构建游戏、媒体应用,还是健康与健身应用、企业应用,都能得心应手。 在功能方面,Android Studio的集成度令人瞩目。它整合了图形布局编辑器、APK分析器、调试器和代码审查工具等多种实用工具,为开发者提供了从设计到测试的一站式服务。此外,Android Studio还支持Java、Kotlin等多种编程语言,使开发者可以根据项目需求选择最适合的编程语言。对于习惯使用特定编程语言的开发者来说,这无疑是一个巨大的福音。 除了强大的功能,Android Studio还注重提升开发者的工作效率。它提供了丰富的模板和样例代码,帮助开发者快速构建应用原型。同时,通过自动保存、多渠道打包、整合版本管理等功能,Android Studio极大地简化了开发流程,减少了开发者在琐碎事务上花费的时间。 值得一提的是,Android Studio还具备强大的调试能力。它支持实时调试、内存分析、性能分析等功能,帮助开发者快速定位和解决应用中的问题。无论是内存泄漏、性能瓶颈,还是逻辑错误,Android Studio都能提供有效的解决方案。 在生态方面,Android Studio也表现出色。它拥有庞大的开发者社区和丰富的资源库,为开发者提供了广泛的支持和帮助。无论是遇到技术难题,还是寻求最佳实践,开发者都能在社区中找到答案。此外,Android Studio还积极与第三方库和插件集成,扩展其功能,满足开发者多样化的需求。 此外,Android Studio在持续发展中也不断创新和完善。它密切关注行业动态和技术趋势,及时更新版本,保持与最新技术的同步。开发者可以通过参与预览计划、提供反馈等方式,与Google和其他开发者共同推动Android Studio的进步。 总的来说,Android Studio是一款功能强大、易于使用、生态丰富的集成开发环境。它凭借出色的性能和灵活的定制性,已成为Android应用开发的必备工具。对于任何希望构建高质量Android应用的开发者来说,Android Studio都是一个值得深入探索的宝藏。

基于粒子群(PSO)的PID控制器matlab仿真

算法实现简介 利用粒子群算法对 PID 控制器的参数进行优化设计,其过程如图 所示。 图中,粒子群算法与 Simulink 模型之间连接的桥梁是粒子(即 PID 控制器参数)和该粒子对应的适 应值(即控制系统的性能指标)。优化过程如下:PSO 产生粒子群(可以是初始化粒子群,也可以是更 新后的粒子群),将该粒子群中的粒子依次赋值给 PID 控制器的参数 Kp、Ki、Kd,然后运行控制系统的 Simulink 模型,得到该组参数对应的性能指标,该性能指标传递到 PSO 中作为该粒子的适应值,最后判 断是否可以退出算法。 粒子在搜索空间中的速度和位置根据如下 公式确定: 其中, x 表示粒子的位置, v 表示粒子的速度, w 为惯性因子, c1 、 c2 为加速常数, r1 、 r2 为[0,1] 之间的随机数, Pt 是粒子迄今为止搜索到的最优位置,Gt 是整个粒子群迄今为止搜索到的最优位置。 PSO 的流程如下: (1)初始化粒子群,随机产生所有粒子的位置和速度,并确定粒子的 Pt 和 Gt ; (2)对每个粒子,将其适应值与该粒子所经历过的最优位置 Pt 的适应值进行比较,如较好,则将其 作为当前的 Pt ; (3)对每个粒子,将其适应值与整个粒子群所经历过的最优位置 Gt 的适应值进行比较,如较好,则 将其作为当前的 Gt ; (4)更新粒子的速度和位置; (5)如果没有满足终止条件(通常为预设的迭代次数和适应值下限值),则返回步骤(2),否则, 退出算法,得到最优解。 仿真模型 PSO程序 运行结果

mysql 替换空值

函数 IFNULL() 用于判断一个表达式时否为NULL,如果为 NULL 则返回指定的代替值,否则返回原表达式的值。 函数: IFNULL(expression,alternavicate_value) expression 要判断的表达式alternavicate_value 当表达式为 NULL时要返回的代替值

【论文阅读】VMamba:视觉状态空间模型

文章目录 VMamba:视觉状态空间模型摘要相关工作状态空间模型 方法准备状态空间模型离散化选择扫描机制 2D 选择扫描VMamba 模型整体结构VSS块 实验分析实验有效感受野输入尺度 总结 VMamba:视觉状态空间模型 摘要 受最近提出的状态空间模型启发,我们提出了视觉状态空间模型,在不牺牲感受野的情况下实现线性复杂度。为了解决遇到的方向感知问题,我们提出了交叉扫描模块(CSM)以遍历空间域并将任何非因果视觉图像转换为有序补丁序列。广泛实验结果说明VMamba不仅在多种视觉感知任务上取得优秀的成果,在不断提升图像分辨率训练表现上也展现了明显提升。 VMamba在有效降低注意复杂度的关键概念来自选择性扫描状态空间模型(S6),原本被提出用来解决NLP问题。和传统注意力计算方法不同,S6使1-D矩阵内的每个元素来和先前扫描的样本交互,通过一个压缩的隐状态,有效将平方复杂度降低到线性。 然而,由于视觉信息是非因果的,直接在一个切分为patch并展平的图像上应用这样的策略会导致受限的感受野,因为和没被扫描到的patch间的关系难以被评估。我们称这个问题为“方向感知”问题并且提出通过新提出的交叉扫描模块来解决这一问题。不同于翻转特征图的空域以无方向模式(行方向或列方向),CSM采用一种四路扫描策略即从整个特征图的四个角到相反的位置。 总结我们的贡献如下: 我们提出了VMamba,有全局感受野的视觉状态空间模型提出CSM弥补1-D和2-D平面之间的差距没有花里胡哨的,我们展示VMamba在诸如图片分类,目标检测和语义分割任务上取得了很大的成功。 相关工作 状态空间模型 这些模型主要关注于状态空间模型如何应用在长程和因果数据像语言语音,语言理解,文本推理,像素级1-D图像分类上。S4ND是第一个将状态空间机制应用在视觉任务上的工作,但是不能以依赖于输入的方式有效地捕获图像信息。 方法 准备 状态空间模型 见【论文翻译】Mamba 中的状态空间模型背景-CSDN博客 离散化 见【论文翻译】MODELING SEQUENCES WITH STRUCTURED STATE SPACES 附录A.1-CSDN博客 VMamba在这里使用ZOH零阶保持离散化,但是 B ‾ \overline{B} B使用一阶泰勒近似为 B ‾ = ( e Δ A − I ) A − 1 B ≈ ( Δ A ) ( Δ A ) − 1 Δ B \overline{B} = (e^{\Delta A}-I)A^{-1}B\approx(\Delta A)(\Delta A)^{-1}\Delta B B=(eΔA−I)A−1B≈(ΔA)(ΔA)−1ΔB

verilog 从入门到看得懂---verilog 介绍

verilog介绍 Verilog HDL 是一种硬件描述语言,HDL是 hardware description language发缩写。可以用于数字电子下系统的设计。通俗点说就是在设计数字芯片或着使用cpld 或者fpga的时候用到,比如在设计电路的时候,如果要试一下一个计数功能,不适用硬件描述语言,就需要自己亲自选择元器件进行设计,如下图所示: 但是当你选择使用verilog的时候可以通过下面的语言实现,通过用编程语言更加直观的表现运行的逻辑,并且可以尽量分离硬件和算法,减小工作的复杂度。 module Count_1 ( input clk , input rst_n , output reg [ 3:0] cnt ); reg [ 3:0] cnt_n ; always @(*)begin if(cnt == 4'd9) cnt_n = 4'd0; else cnt_n = cnt + 1'b1;//实现累计 end always @(posedge clk or negedge rst_n)begin if(!rst_n) cnt <= 4'b0; else cnt <= cnt_n;// 控制时许 end endmodule verilog HDL 起始于1983年,后来有cadence公司收购,candence 公司对verilog 进行了公开,之后IEEE 一直对verilog 进行升级和维护,目前最新的有system verilog

c++基础学习第三天(指针,结构体)

c++基础学习第三天(指针,结构体) 文章目录 1、指针1.1、指针的基本概念1.2、指针变量的定义和使用1.3、 指针所占内存空间1.4、空指针和野指针1.5、 const修饰指针1.5.1、const修饰指针-常量指针1.5.2、const修饰常量-指针常量1.5.3、const即修饰指针,又修饰常量 1.6、指针和数组1.7、指针和函数 2、结构体2.1、结构体基本概念2.2、结构体定义和使用2.3、结构体数组2.4、结构体指针2.5、结构体嵌套结构体2.6、结构体做函数参数2.7、结构体中const使用场景 1、指针 1.1、指针的基本概念 指针的作用:可以通过指针间接访问内存 内存编号是从0开始记录的,一般用十六进制数字表示可以利用指针变量保存地址 1.2、指针变量的定义和使用 指针变量定义语法:*数据类型 变量名; //1、定义指针 int a1 = 10; // 指针定义的语法:数据类型 * 指针变量名: int *p; // 让指针记录变量a的地址 p = &a1; cout << "a的地址为:" << &a1 << endl; cout << "指针p为:" << p << endl; //2、使用指针 //可以通过解引用的方式来找到指针指向的内存,查看内存内容。 //指针前加 * 代表解引用,找到指针指向的内存中的数据 *p = 1000; cout << "a1 = " << a1 << endl; cout << "*p=" << *p << endl; 1.3、 指针所占内存空间 提问:指针也是种数据类型,那么这种数据类型占用多少内存空间?

python实现简单的爬取网页图片

先创建一个image文件 代码如下;举例:爬取sina网址的图片 import re import chardet import requests import chardet url = "https://www.sina.com.cn" response = requests.get(url=url) charset = chardet.detect(response.content).get('encoding') response.encoding = charset html = response.text images = re.findall(r"src=\"(.*?jpg|png|jepg)\"", html) for index,item, in enumerate(images): if not item.startswith("http"): real_url = "http:"+item print("开始从{}下载图片".format(real_url)) resp = requests.get(real_url) with open("image/"+str(index)+".jpg","wb") as f: f.write(resp.content) 结果如下:

CTFHUB-web-http

CTFHUB-web-http 题:技能树->web->web前置技能->HTTP协议 请求方式 打开靶机得到题目 翻译过来就是: HTTP方法是GET 使用CTF**B的方法,我会给你的标志。 提示:如果你得到了【HTTP方法不允许】错误,你应该请求index.php 解题思路:让我们修改请求头 操作步骤: 第一步:打开bp进行抓包(off->on),打开foxy代理(127.0.0.1),刷新页面进行抓包 第二步:将截取到的数据全选发送到Repeater中 第三步:修改请求头(将GET值修改为CTFHUB),点击Send发送,查看flag ctfhub{6a3ccaba1f06f9927f4d1c0e}就是flag答案(注:每个人获取到的flag不一样) 302跳转(HTTP临时重定向) 根据题目,首先我们要知道什么是302跳转? 302跳转是一种临时的网页重定向方式,用于将用户或搜索引擎蜘蛛暂时重定向到新的URL,同时保留对原URL的访问和权重。与302跳转不同,301跳转是永久性的重定向。当网页的URL结构发生永久性变更,并且希望搜索引擎将原来的权重转移到新URL上时,可以选择使用301跳转。 解题思路:抓包,重放 操作步骤: 第一步:先抓包(同样的步骤) 第二步:ctrl+R重放,点击send发送 获得 ctfhub{2b8ad1b8b332489ad6578365} Cookie(Cookie欺骗、认证、伪造) 翻译得:你好客人。只有管理员才能获取标志。 解题思路:如何获取管理员权限?修改cookie值 第一步:还是从述以上步骤(抓包->重发) 第二步:修改cookie值为"1" 得到 ctfhub{d7410dd04a6ddda791c1e3b2} 基础认证(是允许http用户代理(如:网页浏览器)在请求时,提供用户名和密码的一种方式) 题目附件打开,发现是个密码本 解题思路:bp(intruder)爆破 第一步:抓包 根据抓包可知,本网页提交会将用户名密码经过base64加密后提交 第二步:ctrl+I发送到intruder 第三步:选择PayLoads,进行相对应的配置(admin:),导入 要取消以下这一步的“=” 第四步:最后点击爆破,将最后得到的密码放入base64位解码 拿到密码登录页面得到 ctfhub{2ca1c5d7b948d08d0b2f4dc2} 相应包源代码 得到 ctfhub{17763b9239c414ae1bab1db9}

Markdown的语法使用

目录 前言一、Markdown基本使用二、基本使用补充2.1 首行缩进2.2 醒目文字 三、特殊字符3.1 常用类3.2 数学类3.3 特殊类 四、LaTeX数学公式4.1 公式的基本使用4.1.1 插入公式4.1.2 输入上下标4.1.3 括号与分隔符4.1.4 省略号与空格4.1.5 添加行标4.1.6 注释与文字 4.2 LaTeX字符4.2.1 希腊字母4.2.2 类型符号4.2.3 运算符4.2.4 其他符号 4.3 公式的表现形式4.3.1 函数形式4.3.2 矩阵形式4.3.3 分数形式4.3.4 向量 前言 Markdown是网页版的文本编辑器,Markdown 允许您使用易于阅读、易于编写的纯文本格式进行编写,然后将其转换为结构有效的 XHTML(或 HTML)。本文主要讲Markdown文本编辑器的使用,为了更方便写CSDN博客 一、Markdown基本使用 Markdown大部分常用操作都可以在右侧语法说明里面找到,如果自己手打出现问题,可以点击复制来进行比较 具体可以参考以下链接: https://www.appinn.com/markdown/ 二、基本使用补充 2.1 首行缩进 在常规文本里面缩进我们会采用空格或者Tab键,但是这在Markdown里都可能不能正常显示,可以使用以下符号进行缩进 &emsp;&emsp; 2.2 醒目文字 对于突出文字,在语法说明里面可以进行加粗等操作,但是颜色都是黑色,可以采取以下两种方法换色: 方法一:用CSS进行换色 <font color=#900>文字</font> 方法二:加入英文符号` `文字` 三、特殊字符 在某时候我们写入一些特殊符号,但是却不能正常显示,比如:在表格里添加|会自动添加列,却不能正常显示该字符。此时我们可以利用Markdown的HTML特性,将这些特殊字符显示出来。HTML 实体是一段以’&#‘开头、加上ASCII码居中、以分号‘;’结尾的文本,如下: 3.1 常用类 字符实体名称实体数字描述 &ensp; 半个空白位 &emsp; 一个空白位 &nbsp;&#160;空格&&amp;&#38;与| &#124;竖线·&middot;&#183;圆点¦&brvbar;&#166;断的竖线–&ndash;&#150;短破折号—&mdash;&#151;长破折号©&copy;&#169;版权标志®&reg;&#187;注册标志™&trade;&#153;商标标志 3.2 数学类 字符实体名称实体数字描述<&lt;&#60;小于号>&gt;&#62;大于号≤&le;&#8804;小于等于号≥&ge;&#8805;大于等于号×&times;&#215;乘号÷&divide;&#247;除号−&minus;&#8722;减号±&plusmn;&#177;加/减号≠&ne;&#8800;不等于号¹&sup1;&#185;上标1²&sup2;&#178;上标2³&sup3;&#179;上标3½&frac12;&#189;二分之一¼&frac14;&#188;四分之一¾&frac34;&#190;四分之三‰&permil;&#8240;千分率°&deg;&#176;度√&radic;&#8730;平方根∞&infin;&#8734;无限大 3.3 特殊类 字符实体名称实体数字描述↑&uarr;&#8593;上箭头¤&curren;&#164;一般货币符号$ &#36;美元符号¢&cent;&#162;分£&pound;&#163;英镑¥&yen;&#165;人民币元€&euro;&#8364;欧元«&laquo;&#171;左三角双引号»&raquo;&#187;右三角双引号§&sect;&#167;章节标志♥&hearts;&#9829;心型¿&iquest;&#191;反向问号←&larr;&#8592;左箭头↑&uarr;&#8593;上箭头→&rarr;&#8594;右箭头↓&darr;&#8595;下箭头↔&harr;&#8596;左右箭头 α&alpha;η&eta;μ&mu;π&pi;θ&theta;β&beta;γ&gamma;ψ&psi;υ&upsilon;ς&sigmaf;ι&iota;ω&omega;ρ&rho;ξ&xi;Δ&Delta;δ&delta;σ&sigma;ζ&zeta;Γ&Gamma;Λ&Lambda;⁄&frasl;∑&sum;∂&part;∫&int;∩&cap;Π&Pi;Θ&Theta;Ω&Omega;Ξ&Xi;Φ&Phi;ε&epsilon;λ&lambda;φ&phi;τ&tau; 补充:用微软拼音输入单位名称也可以打印符号,如下:

MySQL 中常用的存储引擎

1、MySQL中的存储引擎 MySQL支持多种数据库引擎,每种引擎都有其特定的优势和适用场景。 1.1 InnoDB: 这是MySQL的默认数据库引擎。它提供了事务安全(ACID兼容)的表,支持行级锁定和外键约束。InnoDB还具有崩溃恢复能力,对于需要高并发读写和事务支持的应用场景非常适用。 默认存储引擎,支持事务处理(ACID特性),具备崩溃恢复能力。支持行级锁定,提高并发性能,尤其是在多用户同时更新同一表的不同行时。支持外键约束,确保数据引用完整性。采用聚簇索引,数据行和相邻的键值索引存储在一起,优化了点查询和范围查询的性能。从MySQL 5.6.4开始支持全文索引。 1.2 MyISAM 这是MySQL的传统数据库引擎。它提供了较快的查询性能,特别是对于只读或大量读取的应用。然而,MyISAM不支持事务处理和外键约束,并且在高并发写入时可能表现不佳。 在MySQL早期版本中是默认存储引擎,但后来被InnoDB取代。不支持事务和行级锁定,仅支持表级锁定,因此在高并发写入场景下性能较低。支持全文索引,适合全文搜索的应用场景。数据和索引分开存储在.MYD和.MYI文件中,适用于读取密集型应用。不支持外键约束,不提供崩溃恢复功能。 1.3 Memory (HEAP) 这是一种内存引擎,它将数据存储在内存中,因此提供了非常快的访问速度。但是,由于数据存储在内存中,因此数据容量受到内存大小的限制,并且当数据库服务器重启时,数据会丢失。这种引擎适用于缓存、会话管理等轻量级应用。 数据全部存储在内存中,适合临时表或经常需要进行全表扫描的小型表。因为数据存储在内存中,所以重启服务后数据会丢失,适用于短期存储或计算密集型任务。 1.4 NDB Cluster(或Cluster/NDB) 这是MySQL的簇式数据库引擎,专为高性能查找和高可用性而设计。它可以将数据分布在多台服务器上,提供高可扩展性和高并发性能,适用于大规模分布式系统。 分布式存储引擎,专为高可用性和大规模并行处理而设计。数据分布在多台机器上,提供高可用性和可扩展性。特别适合大数据量和高并发的在线事务处理和分析(OLTP/OLAP)场景。 1.5 CSV 这是一种文本文件引擎,可以将数据存储在CSV格式的文本文件中。它适用于需要与其他系统进行数据交换的场景,但同样不支持事务处理和外键约束。 1.6 BLACKHOLE 这是一种虚拟引擎,它不会存储任何数据。任何对这种引擎的写操作都会被忽略,而任何读操作都会返回空结果集。这种引擎通常用于临时禁止对数据库的应用程序输入。 1.7 FEDERATED 这是一种远程引擎,它允许连接到远程MySQL服务器并执行查询。 1.8 ARCHIVE 这是一种用于存储和检索大量归档数据的引擎。 专门用于大容量、只追加、很少更新和查询的场景,例如日志记录。不支持索引,只支持INSERT和SELECT操作。 1.9 Merge 这是一种将多个MyISAM表组合为一个表的引擎。 用于合并多个MyISAM表作为一个逻辑表来处理,常用于数据分析和数据仓库场景。 注意: 在选择数据库引擎时,需要根据具体的业务需求和特点进行考虑。例如,如果应用需要事务支持和高并发读写,那么InnoDB可能是更好的选择;而如果应用主要是读取操作且对性能有较高要求,那么MyISAM可能更合适。同时,还需要考虑数据的持久性、备份和恢复策略等因素。 2、MySQL中InnoDB存储引擎 MySQL中的InnoDB存储引擎是一个高度可靠的事务型存储引擎,它的设计目标是满足高并发事务处理和数据安全的需求。 以下是InnoDB存储引擎的主要特点: 事务支持: InnoDB完全支持ACID(原子性、一致性、隔离性、持久性)事务特性,保证了数据的完整性和一致性。提供了事务管理机制,允许用户执行BEGIN, COMMIT, ROLLBACK等事务操作。 行级锁定: InnoDB使用行级锁定,大大提高了多用户并发环境下的性能,尤其在频繁修改不同记录的情形下,可以减少锁冲突,提升并发读写的效率。 外键约束: 支持外键约束(FOREIGN KEY),确保了数据库表间的数据引用完整性。 MVCC(多版本并发控制): 实现了多版本并发控制机制,从而在多个事务同时读取相同数据时,减少了锁竞争,提升了并发性能,同时也支持“可重复读”(Repeatable Read)事务隔离级别,有效避免了幻读现象。 崩溃恢复: 内置崩溃恢复机制,即使在数据库宕机或系统崩溃后,也能通过redo日志(重做日志)和undo日志(回滚日志)来恢复未完成的事务和回滚已提交的事务。 缓冲池: 使用缓冲池技术,将频繁读写的页缓存在内存中,减少磁盘I/O操作,提高整体性能。 其他高级特性: 插入缓冲(Insert Buffer),优化了非唯一二级索引的插入操作;两次写(Double Write),用于防止因电源故障等原因导致的数据页损坏;自适应哈希索引(Adaptive Hash Index),动态创建和维护哈希索引以加速查询;预读(Read Ahead),预先读取连续的数据页到内存,减少未来查询时的磁盘I/O。 InnoDB存储引擎非常适合那些需要事务处理、高并发读写操作、数据完整性和高性能的应用场景,这也是它成为MySQL默认存储引擎的原因之一。 2、MySQL中MyISAM存储引擎 MyISAM是MySQL中常用的存储引擎之一,尤其在MySQL 5.

搜维尔科技:OptiTrack新型动捕相机最大限度地提高远距离精度

新的Primex 120和Slimx 120相机采用了最高分辨率。 3D追踪系统的全球领导者OptiTrack宣布推出三款最先进的运动捕捉相机:Primex120、Primex120W和Slimx120。新的更高分辨率相机提供了OptiTrack所期望的精度,具有更高的分辨率和更大的视野。这些新功能使更大的跟踪区域能够用于更广泛的培训和模拟场景,以及更大的电影虚拟制作工作室。 “OptiTrack已经构建了超过30,000个各种形状和尺寸的3D运动跟踪系统。这些新的摄像头打开了通往更大场地的大门,在那里我们可以追踪更多的标记,这些标记或近或远,都是我们以前从未追踪过的,“OptiTrack执行副总裁StephanieHines表示当您的应用需要在非常大的体积下提供一流的精度时,0ptiTrack Primex120和Slimx120相机的精度和耐用性是无与伦比的。" 这三款新相机均采用OptiTrack迄今为止最高的分辨率--1200万像素。Primex120配备了标准的24mm镜头,而Primex120W配备了18mm镜头,具有更宽的视场。Slimx120有24毫米或18毫米的广角镜头可供选择。 Primex和Slimx 120相机镜头采用定制设计,具有低失真,"fastglass"可实现最佳标记跟踪和真正的10位灰度深度,从而减少量化噪声并提高精度,从而生成完美的清晰图像、更好的质心和更好的3D精度 Primex 120、Primex 120W和Slimx120相机现已接受预订 Primex 120和Primex 120W摄像机可跟踪活动标记,是低延迟虚拟现实跟踪增强现实地面实景系统和高主题数机器人的基准。Primex摄像机可以轻松识别和跟踪被动标记或回射标记,包括球体、半球体,甚至平面反射盘。Slimx 120能够跟踪活动标记,对于需要摄像机更加谨慎的应用,如虚拟生产场景或基于位置的虚拟现实,它是一个更小、更不显眼的选择。 为了确保公司严格的质量标准,Primex120、Primex120W和SlimxOptiTrack位于美国俄勒冈州的总部设计和制造了120台摄像机。系统可以配对Primex120,Primex120W和Slimx120台摄像机与任何其他Primex或PrimeColor摄像机搭配使用,为任何使用场景创建最佳配置,并在任何环境下提供最高的3D跟踪精度。 Primex和Slimx120台摄像机与OptiTrack全新的Motion3.13D运动捕捉软件协同工作,该软件具有Trained Markersets、连续校准、骨骼解算器等功能。综合起来,OptiTrack相机和动力软件使用户能够看到和分析跟踪数据,从而为从机器人和运动科学到视频游戏动画、电影虚拟制作和基于位置的虚拟现实的一切信息提供信息。

Pytorch学习 day10(L1Loss、MSELoss、交叉熵Loss、反向传播)

Loss loss的作用如下: 计算实际输出和真实值之间的差距为我们更新模型提供一定的依据(反向传播) L1Loss 绝对值损失函数:在每一个batch_size内,求每个输入x和标签y的差的绝对值,最后返回他们平均值 MSELoss 均方损失函数:在每一个batch_size内,求每个输入x和标签y的差的平方,最后返回他们的平均值 交叉熵Loss 当我们在处理分类问题时,经常使用交叉熵损失函数。 交叉熵能够衡量同一个随机变量中的两个不同概率分布的差异程度,在机器学习中就表示为真实概率分布与预测概率分布之间的差异。交叉熵的值越小,模型预测效果就越好。交叉熵在分类问题中常常与softmax是标配,softmax将输出的结果进行处理,使其多个分类的预测值和为1,再通过交叉熵来计算损失。 由于以下内容需要理解Softmax函数和交叉熵损失函数,所以先回顾一遍:Softmax函数: 首先,分类任务的目标是通过比较每个类别的概率大小来判断预测的结果。但是,我们不能选择未规范化的线性输出作为我们的预测。原因有两点。 1. 线性输出的总和不一定为1 2. 线性输出可能有负值 因此我们采用Softmax规范手段来保证输出的非负、和为1,公式和举例如下: 左侧为Softmax函数公式,右侧的o为线性输出,y为Softmax规范后的输出 交叉熵损失函数: 下图为交叉熵损失函数公式,P(x)为真实概率分布,q(x)为预测概率分布: 我们将Softmax规范后的输出代入交叉熵损失函数中,可得: 在训练中,我们已知该样本的类别,那么在该样本的真实概率分布中,只有该类别为1,其他都为0。在计算机中的log,默认都是ln。 这就是Pytorch官网中的交叉熵损失函数公式: 注意:给此公式的交叉熵损失函数传入的input,不需要进行规范化,即不需要进行Softmax变换我们仍然使用该类的对象函数来调用forward方法,而forward方法需要满足以下条件: input:第一位为batch_size,第二位为输入的class数量target:只有一位,为batch_size 代码如下: import torch x = torch.tensor([0.1, 0.2, 0.3]) print(x.shape) # torch.Size([3]) print(x) # tensor([0.1000, 0.2000, 0.3000]) y = torch.tensor([1]) x = torch.reshape(x, (1,3)) # 由于交叉熵损失函数的forward方法要求输入是二维,且第一位是batch_size,第二位是class的数量 print(x.shape) # torch.Size([1, 3]) print(x) # tensor([[0.1000, 0.2000, 0.3000]]) loss_cross = torch.nn.CrossEntropyLoss() # 交叉熵损失函数 result_loss = loss_cross(x, y) # 计算交叉熵损失 print(result_loss) # 输出结果: # torch.