python中w、r指的是什么意思
发布时间:2020-11-20 10:54:44
来源:亿速云
阅读:100
作者:小新
这篇文章将为大家详细讲解有关python中w、r指的是什么意思,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
文件读写就是一种常见的IO操作。
文件读写操作步骤
不同的编程语言读写文件的操作步骤大体都是一样的,都分为以下几个步骤:
1)打开文件,获取文件描述符;
2)操作文件描述符--读/写;
3)关闭文件。
文件打开模式:
r+、w+和a+都可以实现对文件的读写,那么他们有什么区别呢?
r+会覆盖当前文件指针所在位置的字符,如原来文件内容是"Hello,World",打开文件后写入"hi"则文件内容会变成"hillo, World"。
w+与r+的不同是,w+在打开文件时就会先将文件内容清空,不知道它有什么用。
a+与r+的不同是,a+只能写到文件末尾(无论当前文件指针在哪里)。
关于python中w、r指的是什么意思就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
只允许输入某范围内的数据
工作表中有些数据的取值范围非常明显,如“学生成绩表”中的成绩范围在0~100之间。可以利用“数据验证”功能保证输入的成绩都是有效的,关键是它可以在输入数据前进行有效提醒,而不是输入错误数据后再提醒,这样可以大大提高输入效率,具体操作步骤如下。
步骤01 选中C2:E6单元格区域,选择【数据】选项卡,在【数据工具】组中单击【数据验证】下拉按钮,选择【数据验证】选项,如下图所示。
步骤02 弹出【数据验证】对话框,在【设置】选项卡中,设置【允许】为【小数】、【数据】为【介于】,在【最小值】参数框中输入【0】、【最大值】参数框中输入【100】,如下图所示。 步骤03 在【输入信息】选项卡中,在【标题】文本框中输入【数据范围】,【输入信息】文本框中输入【0~100的实数】,如下图所示。
步骤04 在【出错警告】选项卡中,在【标题】文本框中输入【输入错误】,【错误信息】文本框中输入【数据范围为0~100的实数。】,单击【确定】按钮,如下图所示。
步骤05 单击C2:E6单元格区域中的任一单元格,系统会显示设置的“输入信息”,提醒用户输入数据的范围。如果数据输入错误,系统自动显示设置的“出错警告”,提示需要重新输入正确数据。
提示:如果“输入信息”提示框挡住了输入数据的单元格,可以把它拖动到不影响输入的区域。在【数据验证】对话框的【设置】选项卡中,【允许】下拉列表中还有一些常用数据有效性设置,如“整数”“日期”“文本长度”“序列”等,甚至数据范围中可以用函数作为参数,该功能有非常实际的管理意义。
测试目标: 使用KEPServerEX 的 MQTT 全套驱动及IOT 插件发布 MQTT服务端, 订阅实时数据 ------- 编制:雲飛兄 ---------------------------- ------ Kepware QQ群:905485143 -------
解决思路: A 安装 MQTT 服务程序(EMQ)并运行(能打开网页就行)
B 利用KEPW的自身的设备TAG数据 配置IOT的MQTT Client功能发布给MQTT服务端(EMQ)
C 使用KEPWR的 MQTT Client驱动订阅接收MQTT服务端的实时数据
D 使用QC Clinent 实时查看订阅的数据
A 安装 MQTT 服务程序(EMQ)并运行(能打开网页就行) 安装 MQTT Broker 代理服务程序安装后 启用能打开网页就行详细说明:https://blog.csdn.net/qq_35616330/article/details/102538166 B/C点配置后 能在会话中查看到 有两个【节点】都是kepw的MQTT
B 利用KEPW的自身的设备TAG数据 配置IOT的MQTT Client功能发布给MQTT服务端(EMQ) KEPW的自身先创建设备的几个TAG数据配置IOT MQTT Client注意; URL 是 (MQTT Broker 代理服务程序的)注意:Topi 是 主题名称 (自行定义)注意: Messages 是 输出格式其它默认就行添加 TAG-ID启用即可详细说明:https://blog.csdn.net/qq_35616330/article/details/113065618 本篇重点到了 C 使用KEPWR的 MQTT Client驱动订阅接收MQTT服务端的实时数据 通道 设置好 【MQTT 服务器】 主机、端口注意:客户端-ID 是 就是自的名字(自行定义 )会在服务器的连接中体现 设备 设置好后,可使用 生成标记 标记生成 主题填好,点【创建标记】会自动生成标记(没有生成,检查是否IOT 启用了,检查MQTT 会话是否已有连接) D 使用QC Clinet 实时查看订阅的数据 这是开了 两个 QC Client (MQTT 订阅接收的数据) 与 (IOT MQTT 发布的TAG的值 ) ####### 完美实时数据,实现KEPServerEX软件中 IOT MQTT 发布数据,MQTT Client 驱动 订阅数据 #######
最近咱行业在讨论光模块可靠性验证时,有个矛盾的指标,光模块验证的温度循环次数,有说10次,又说20次, 100次,甚至是500次的。
看两个行业标准中的次数定义
站在我的角度,这些标准的引用都有明确的来源,也都对,(下文做分析)。
针对于5G前传光模块而言,我的看法是循环次数是500次,温度设定是-40℃~85℃
以下是GR-468(2004)中,原文对于上面10/20/100/500次的说明
在第116页中,
The procedure for temperature cycling tests is generally based on MIL-STD-883E, Method 1010.7, Temperature Cycling,However, ...., and considerably more cycles than the minimum of 10 cycles listed in standard
这句话的意思是,美军标883中有对温度循环的测试方法,标准定义是10次,但是,注意这个however的转折,我们(光器件,光模块)要考虑比10次更多的循环次数
在142页,
All optoelectronic modules and integrated modules for CO applications,关键词是CO,就是中心机房应用的光模块,温度和次数,–40°C/+85°C, 100 cycles
All optoelectronic modules and integrated modules for UNC applications,关键词是UNC,就是非中心机房应用的光模块,温度和次数–40°C/+85°C, 500 cycles,咱们5G前传的光模块,是在UNC环境中的,是非中心机房的应用,所以定义为500次
还有人说,这个500次的温循,是定义在GR468的3.3.2,中的。
3.3.2,是定义的有源器件的非工作状态下的测试
3.3.3,才是有源器件工作状态下的测试
但是,在3.3.2中有一句话
that although this test is listed as a non-powered environmental stress test, the device being tested may be powered, if desired
医疗器械注册检验为产品全性能试验,也称型式检验。办理第一类医疗器械备案的,备案人可以提交产品自检报告,不需要做注册检验,第二类、第三类产品均需要做注册检验。同时医疗器械检验机构应当具有医疗器械检验资质、在其承检范围内进行检验。尚未列入医疗器械检验机构承检范围的医疗器械,由相应的注册审批部门指定有能力的检验机构进行检验。
那么在产品送去注册检验的时候,有哪些流程要走又应该准备哪些资料呢?一起来看看(今天主要介绍EMC部分)
一、检验前的准备
首先我们要准备符合国家医疗器械质量管理相关要求的样品,因为《医疗器械注册管理办法》规定,“注册检验样品的生产应当符合医疗器械质量管理体系的相关要求,注册检验合格的方可进行临床试验或者申请注册” 当然大家的样品一定是都符合滴,嘿嘿,然后准备产品技术要求和产品相关的技术资料。这个也可以与第二步换一下进行,先选择检验中心,然后根据检验中心的要求进行产品和资料准备,我也更建议这么走。
二、检验中心的选择
因为注册检验要在具有医疗器械检验资质、且检验项目在其承检范围内的检验机构进行,所以我们要依据自己的产品来对检验中心进行选择。
选择途径:
1.进入器审中心网站,在右下方活动栏点击“检测中心承检目录库”,输入检索产品名称或机构名称,点击“查询”。
比如麻醉机,我们在产品名称框输入“麻醉机”,点击查询得到结果如下图所示
那么就可以在这些检测机构中选择一家进行送检。
2.直接咨询相关医疗器械检验中心。
三、 检验工作流程
1.确定好检测机构后,与该检测机构签订检验合同;
2.申请人按照检测机构要求提交产品技术要求及产品相关技术资料,同时将待检样品送至检测机构指定地方;
3.检测机构开展检测工作,不合格的话会与申请人沟通,出具一个整改报告,经申请人整改后进行复测,合格后检测机构出具合格报告。
流程看起来是不是很简单,对的,就是这么简单,但是具体又需要准备哪些资料呢?不同的检测机构有自己的要求,比如广东所这么要求
上海所这么要求
湖南所这么要求
当然每个检测所都有自己的要求,在此不再一一列举,那对比以上三个检测所的要求,我们不难发现他们的共性:
1.送检样品及其附件
这个大家也都理解,上面写的也都比较清楚,不再赘述;
2.使用说明书、技术说明书
二者可以合并,目前多数企业也是选择合并来写的,那么检测所看什么呢,主要看说明书中关于YY0505 6.8.2.201以及6.8.3.201条款要求内容
查看以下四个表的内容
当然还有安装环境以及警示等其他内容。
更多关于说明书电磁兼容部分的编制请参考
医疗器械电磁兼容性技术评价指南发布
关于电磁兼容测试项目的学习请参考
有源医疗器械电磁兼容入门知识汇总
3.一些表格内容
广东所称之为有关表格,上海所称为审查表,湖南所直接的讲“填写下述表格”,内容也都比较接近。
3.1 首先是产品基本性能的识别,如果制造商已经识别,那么列明产品基本性能并提交风险分析文件;如果未识别,勾选未识别基本性能即可,但是需要注意的是未识别基本性能,那么检测时可以将产品所有功能的性能都作为基本性能来测试,所以可以的话我还是建议大家识别一下。关于基本性能,可以参考
小议新版GB9706.1-2020的基本性能
3.2 其次是样品的预期使用场所或环境
那么有了这个检测工程师就可以判断你的产品是什么类别,也可以和说明书上已有的进行对比来确认一下说明书上填写是否正确。在这里呢上海所也是直接让申请人填写分组与分类,产品检测的多的话,确实也几乎根据拿到产品就知道他的分组分类以及对应限值了
——1组包括为发挥其自身功能的需要而预期产生或使用传导耦合射频能量的所有工科医设备。
——2组包括放电加工(EDM)和弧焊设备,以及为材料处理而有意产生或使用电磁辐射射频能量的所有工科医设备。
——A类设备是在非家用和不直接连到住宅低压供电网的所有设施中使用的设备。
——B类设备是家用和直接连到住宅低压供电网的所有设施中使用设备。
3.3 再就是送检样品的基本信息
这个也会在我们产品出具报告时体现在报告里面,按照要求填写就行,定义不了解的可以参考9706.1术语部分。
3.4 然后是样品构成表
列出样品的主要组成结构和配件,建议与注册证、说明书和技术要求中的组成结构一致。若样品包含软件部分,应填写软件的版本号及名称。
产品由于正常运行条件、持续时间、人机交互方式等原因制约不能实现正常运行或模拟运行时,以及产品的基本性能相关的功能在常规操作中不能被观察或验证时,应提供专业软件或类似的方法。
3.5 样品连接图:主要是体现主机与其他部件的连接关系(框图为佳),例如适配器,探头等。医用电气系统需要体现设备间的连接关系。如果只有主机没有其他附件的产品不需要提供连接图。
3.6 样品运行模式:列出送检样品的工作模式,比如待机、血液透析机的高中低流速、负压吸引装置的高中低压力值、高频电刀的电切、电凝模式等。模式描述包括配置,功能,具体设置和运行参数,连接模拟器状况等。
3.7 样品电缆:电缆包括产品外部连接线(电源线、控制线,I/O线、互连线、患者电缆、适配器电缆、各端口连接导线、各接线端子导线等)、产品部件间的连接线和患者导联线。样品的无源管路、光纤和内部电缆不需要列出。若无具体名称,可用连接部件代替,例如:控制连接扫描架电缆。电缆长度单位为米,建议保留至小数点后一位。
那么也会根据电缆线长度进行一些豁免情况的判断,比如患者耦合电缆、信号电缆、互联电缆长度小于3 m不适用电快速瞬变脉冲群试验,在电池充电期间不能使用、包括所有连接电缆的最大长度在内其最大尺寸小于1 m且未与地、通信系统、任何其他设备或系统或患者相连的内部电源供电设备,免予传导发射试验,也就是电缆大于1m的内部电源设备也需做传导发射试验。
3.8 最后就是EMC的关键元器件清单:EMC关键元器件清单,指与样品EMC设计和EMC测试结果密切相关的元器件或部件。已经获得认证的元器件在备注栏填写证书类型和编号。若未获得证书等对应内容,请填写“/”。不带磁环的电源线、电源开关、熔断器等不属于EMC关键元器件。磁环需在备注中指相关元器件在产品内的具体位置。
关键元器件可参照如下示例:变压器、开关电源、滤波器、谐波抑制器、高压组件、电池、X电容、Y电容、抑制电磁干扰电容器、抑制射频干扰固定电感器、隔离电阻、电源适配器、带磁环电源线、滤波连接器、信号线、显示器、电动机、天线、压缩机、瞬变干扰吸收器件(气体放电管、固体放电管、压敏电阻、瞬变电压吸收二极管等等)、继电器、UPS系统、电子稳压器、变频器、逆变板/逆变变压器、控制板、主电路板、LCD控制电路、显卡、I/O卡、电信接口电路板、以太网卡、调制解调卡、IC芯片、激光单元、光电耦合器、铁氧体抗干扰磁芯(磁环、磁珠)、可控硅、开关管、发热丝(盘、管)、金属外壳或有EMI涂料的非金属外壳、电抗器、屏蔽显示窗、屏蔽衬垫、直流风扇、打印单元、晶振、电磁阀、霍尔元件、机箱、电池、整流器、镇流器、各种集成电路及外购电路主板等。
关键元器件不限于以上要求的元器件,企业应该根据产品自行完善关键元器件清单。
注:送样时,除样品本身包含的所有组件和配件外,还应提供产品正常运行模式或模拟运行时所需的负载或模拟装置。比如对主体为附件的样品进行检测时,配合使用的主机应被视作辅助设备。
4.产品技术要求
为什么把这个放在最后呢,因为我发现湖南所并未提到需要提交产品技术要求,很多人会感觉比较差异,但是想想,产品技术要求中与EMC相关的无非是两句话,XXX电磁兼容性能应符合YY0505-2012要求;电磁兼容性试验应按照YY0505-2012规定的试验方法进行检测。所以在在进行电磁兼容检测时,有无产品技术技术要求看起来并无多大影响,但是如果涉及专标中有特殊要求的,那么产品技术要求就是必要的了,所以一般情况下建议一起提供。关于产品技术要求,可以参考:
[医械研发]关于产品技术要求,只看这一篇就够了!收藏+分享!
产品原理图和电路图也建议准备一下。
软考高级职称考什么好?有很多人是因为要评高级职称而选择参考软考高级资格考试,那么软考高级里哪个资格好呢?
软考高级职称考什么好?
取得软考高级资格可聘任高级工程师职务,软考高级有多个资格可以选择,其中信息系统项目管理师是高级里非常热门的考试项目,每年报考的人也很多,其次信息系统项目管理师相对于高级里一些技术类的专业来说可能难度要小一点,加上目前项目管理的发展需求比较大,因此很多考生选择报考信息系统项目管理师。
如果参加软考高级资格考试只是想评职称的话可以考虑信息系统项目管理师,但是如果跟未来发展方向相关的话建议选择与以后职业发展相关的专业。
可能很多考生都知道在软考高级资格中信息系统项目管理师是很热门的考试项目,每年报考的人也很多,一方面跟项目管理这个行业的市场需求有一定关系,一方面可能也是因为信息系统项目管理师是偏管理类的考试所以相对于其他技术类的资格考试会比较容易通过。
所以,对于没有相关知识基础的考生来说可以考虑报考信息系统项目管理师,但是并不是说每个人都适合报考信息系统项目管理师,大家还是要根据自己的职业规划以及兴趣爱好来选择,如果对系统分析比较感兴趣可以选择系统分析师或者系统规划与管理师,对规划设计比较感兴趣则可以考虑网络规划设计师或者系统架构设计师。特别是对于一些有相关知识基础的考生来说,报考对应的考试学习起来可能会更容易。
概述
首先声明,本文讨论的 watchdog,不是单片机里的 watchdog,也不是 linux 中的 watchdog,而是 python 世界里用来监视文件系统变化的一个第三方模块。在 python 中文件监视主要有两个库,一个是 pyinotify,一个是 watchdog。pyinotify 依赖于 linux 平台的 inotify 机制,只能应用在 linux 平台上。watchdog 则对不同平台的的事件都进行了封装,不仅可以监视 windows 文件系统,也可以监视 linux 的文件系统。
文件系统事件类
文件系统事件基类定义如下:
watchdog.events.FileSystemEvent(event_type, src_path, is_directory=False)#event.event_type - 事件类型,为 moved / deleted / created / modified 其中之一#event.src_path - 触发该事件的文件或目录路径#event.is_directory - 该事件是否由一个目录触发
由 watchdog.events.FileSystemEvent 基类派生的子类如下:
watchdog.events.FileDeletedEvent()#文件被删除时触发该事件
watchdog.events.DirDeletedEvent()#目录被删除时触发该事件
watchdog.events.FileCreatedEvent()#文件被创建时触发该事件
watchdog.events.DirCreatedEvent()#目录被创建时触发该事件
watchdog.events.FileModifiedEvent()#文件被修改时触发该事件(修改文件内容、修改文件inode信息如权限和访问时间,都会触发该事件)
watchdog.events.DirModifiedEvent()#目录被修改时触发该事件
watchdog.events.FileMovedEvent()#文件被移动或重命名时触发该事件,因为涉及文件移动,所以除了event.src_path表示原路径,还有event.dest_path表示目的路径
watchdog.events.DirMovedEvent()#目录被移动或重命名时触发该事件,因为涉及文件移动,所以除了event.src_path表示原路径,还有event.dest_path表示目的路径
文件系统事件处理类
watchdog.events.FileSystemEventHandler 是事件处理器的基类,用于处理事件,用户需继承该类,并在子类中重写对应方法。需要用户重写的方法有:
self.on_any_event(event)#任何事件发生都会首先执行该方法,该方法默认为空,dispatch()方法会先执行该方法,然后再把 event 分派给其他方法处理
self.on_moved(event)#处理 DirMovedEvent 和 FileMovedEvent 事件,默认为空
self.on_created(event)#处理 DirCreatedEvent 和 FileCreatedEvent 事件,默认为空
用网站来赚钱是现在所有人做网站的初衷,无论是个人网站还是企业网站都无一例外,当然有个别个人网站是最初的动机可能是出于一种兴趣爱好,但是当网站的流量上来后有商业意识的就会利用网站开始赚钱了,现在比较流行的个人网站赚钱方式还是依赖于广告联盟,也有企业做网站主要是提示企业品牌形象,也是让企业获客的有利条件,不过想要使网站能够赚钱,就必须要主动出击先发制人,出来广告完全可以研发或代理一个产品在网站上销售赚取差价。那么如何利用一个网站来赚钱?
1、提升流量赚钱 靠流量赚钱的网站必须做成一个营销型的网站,在网站流量到了一定的程度,就可以申请加入广告联盟的网站,通过网站的广告方式来赚取佣金,这个前期就要花费大量的工作时间,需要发布大量的文章,做好长尾关键字的优化工作,使网站的首页关键字多起来。做流量的网站行业也是比较多的,有做电影的左图片的等等很多很多,就不一一列出来了,在做电影和图片站的话想要获取大的流量是比较难的,这个竞争力太大,排名不好往上拍,想要拍上去的途径只有一个就是发布原创内容,坚持每天发一定获得优化的seo效果。参考:http://www.xdy666.com/
2、做产品赚钱 现在已经进入互联网+时代了,电子商务技术已经深深的融入了我们的生活之中,做网站销售产品应该是互联网时代比较简单的赚钱模式了,现在越多的人已经养成了在网上购买东西的习惯了,这个也就成就了很多站长在网上销售产品的网络达人。做网站销售产品的方式也很多,可以申请域名空间后制作自己的官网网站,在前面有讲解如何制作网站的文章,有了自己个人的网站就可以利用自己的网站在网络上销售产品,也可以在第三方平台上申请一个店铺然后上传产品设计一些产品展示的单页面,达到产品销售的目的,这个模式是比较普遍的也是投资比较少的网络销售模式了。
3、出售虚拟物品赚钱 虚拟物品出来吧长尾关键字优化上去,还要懂得包装,同一个产品换不同的包装买的价格都是不一样的,虚拟物品还是比较好卖的,但是一定要找对方法掌握产品的销售技巧,虚拟的产品有网站源码,图片素材类、软件类、游戏点卡类、手机卡充值缴费、网站的虚拟主机、域名、游戏装备等等可以赚钱的虚拟物品。
4、出售友情链接赚钱 出售友情链接赚钱可以做一个行业网站或是导航网站,做为行业网站首先也是把自己这个行业的长尾关键字优化上去后,前期可以使用网站智能云作为内容的更新,有了大量的内容才能使网站的长尾关键字排上去,使用自动更新可以设置自主每天文章更新数量,更新时间和发布间隔时间,让蜘蛛抓取有规律收录新页面,自动内敛设置锚文本关键字标题链接,在发布文章的时候就可以自动生成内链,,最大的将页面权重传递给目标关键字从而提升搜索引擎的优化排名。在排名上去后可以在第三方友情链接平台上申请注册设置价格,就会有很多客户申请,这个古月建站已经在换链神器上测试过了,前期价格可以设置的低一点慢慢的流量权重上来后即可以适当的提高价格,这个可以在数量上获取更多的回报,一个十块/月做上100个就是以前坐上一千个就是一万一年就是十几万数字还是比较客观的。
相关文章:http://www.jieba8.com/
Python交互模式(Python Shell)的基本使用
python shell的打开
运行cmd命令提示符,博主一般喜欢右键选择[以管理员身份运行],然后直接输入python.exe(我觉得这是不需要区分python的安装路径的,博主的python安装在[E:\python-3.6.3]),就可以进入Python Shell环境。
运行其它文本编辑器编写的python文件(.py)
在NotePad++中选择python语言,输入一段代码,将文件名保存为博主保存到E盘下新建并命名的文件夹中,将要打开的txt文件和py文件放到一起。
一般情况下,把.py文件和python.exe放在一起,是可以直接通过输入[import 文件名](注意不要带后缀名)来导入和运行的;但是为了管理和结构的清晰,我们一般把Demo或工程文件放到自己命名的其它文件夹中。
如果将python文件放到了其它文件夹下,需要在交互模式中按顺序执行下面三条指令:
① import sys
② sys.path.append("python文件所在的绝对路径")
③ from [python文件名(注意不要带后缀)] import *
示例如下:
3.【注意】如果此时还不能正确执行(博主就遇到了这种情况),便加上一句[import python文件名]
读文件操作报错(OSError)的解决办法
我们在进行其它程序的编写时,一般要读的文件和代码文件放到同一个文件夹下便可以通过直接输入文件名来读取,但是楼主这次发现有FileNotFoundError的错误,错误提示如下:
没办法,只能写上绝对路径,于是博主复制了文件夹中的路径[E:\py-Machine_Learning\ch06-SVM_SMO]。
结果却提示OS错误,提示如下:
搜索了好多办法都没有得到解决,最后看到一个文件路径的格式问题,于是博主把绝对路径中所有的\符号换成/号[E:/py-Machine_Learning/ch06-SVM_SMO/testSet.txt],问题解决。
[内心OS:这是Windows系统默认的路径诶。。。竟然还要转换符号。。果然解决bug是个玄学问题( ̄▽ ̄)/]
Exception Type: OperationalError at /
Exception Value: (1049, "Unknown database 'database'")
At the moment i tried this:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'database', # Or path to database file if using sqlite3.
'USER': 'root', # Not used with sqlite3.
'PASSWORD': '****', # Not used with sqlite3.
'HOST': '/var/lib/mysql/database/', # Set to empty string for localhost. Not used with sqlite3.
局域网与广域网的互连是目前常见的方式之一,路由器Router或网关Gateway是实现局域网与广域网互连的主要设备。
广域网与广域网互连也是目前常见的方式之一,它们通过路由器或网关互连起来,可以使分别连入各 个广域网的主机资源能够相互共享。
广域网使用技术
广域网的通信子网主要使用分组交换技术。广域网的通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网,它将分布在不同地区的计算机系统连接起来,以达到资源共享和互相通信的目的。如因特网(Internet)是世界范围内最大的广域网。
公司组网解决方案在目前的应用需求还是很大的,伴随着网络蓬勃发展,企业全球意识及本地化服务意识的增强,不少企业在远离总部的国内其他地区或国外设立分支机构,因此网络信息资源的应用不仅仅局限于某个公司总部小型局域网了,现在总部都需要实现与分支机构的互联,使CRM中的客户信息、OA中的综合信息等资源共享,让公司管理更加统一规范。
一、了解整个办公室的布局,规划好设备摆放位置和线路。
了解整个办公室的布局是首要任务,一般小公司人数都在5到20人左右,大概分为办公区、会议区、老板办公室这三个区域。组网主要分为有线网和无线网,有线网主要用于办公外部联络,而无线网主要用于无线端链接网络。无线就要考虑到无线的覆盖面,办公区不会出现死角,如果公司的布局复杂的话可以考虑采用无线桥接满足网络需求。
二、设计整个组网布置图
这个图只是一个个例,不同的公司配置,相应的网络构造图也不一样,我们常用的网络拓扑图制作软件可以直接用Visio,用起来简单,容易上手。根据自己的需要设计相应的网络拓扑图是组网最关键的一步。
三、选择合适的网络设备
需要用到的设备有:路由器(企业级和家用都可以,家用的最好是用好一点的路由器),交换机(根据公司人数而定可选12孔和24孔两种)、千兆网线、服务器、无线ap等等。选择网络设备最好选用大品牌,很多廉价的网络设备经常容易出故障。维修起来麻烦,也大大降低工作效率。
四、配置路由器和布置线路
(一)配置路由器。如果选用的是家用路由器的话配置相对简单,设置好宽带账号和密码,绑定好mac公司计算机的ip和mac地址。设置复杂的后台登录密码,最重要的是一定要设置登录路由器后台的电脑,一般设置只有服务器可以访问路由器后台控制界面。
(二)布置线路,根据办公室布局图安放好设备,然后按照网络拓扑图连接好各个线路,连接后线路以后开始测试网线连通情况。
(三)搭建无线网络
一般从光猫出来的有两个接口,同一个宽带账号可以登录在两个路由器上,这样可以便于我们无线网与公司网络分开,保证内网的安全。小公司一般占地面积不大,一个好的路由器只要位置摆放合理,基本上可以覆盖整个公司。
Vecloud是一家面向企业提供云交换网络服务为核心业务的技术创新企业,在全球的数据中心节点30个,POP节点超过200个,服务的大客户超过300个,涉及金融、互联网、游戏、AI、教育、制造业、跨国企业等行业领域。http://www.vecloud.com/products/ddos.html
一、了解Json Json(JavaScript Object Notation)是JS对象简谱 , 是一种轻量级的数据交换格式。
一个对象, 由一个大括号表示.括号中 描述对象的属性 . 通过键值对来描述对象的属性(可以理解为大括号中, 包含的是一个个的键值对)
格式:
键与值之间使用冒号连接, 多个键值对之间使用逗号分隔.
如:{“name”:“李四”,“age”:“20”}
在编译器中注意转义字符的使用:
"{\"name\":\"李四\",\"age\":\"20\"}" 键值对的键 应使用引号引住 (通常Java解析时, 键不使用引号会报错. 而JS能正确解析.)
键值对的值 可以是JS中的任意类型的数据(数组(用"[]"括起来)、对象,并且可以相互嵌套)
作用:
1.将Java中的对象 快速的转换为 JSON格式的字符串.
2.将JSON格式的字符串, 转换为Java的对象.
二、Json的解析方式 为了方便下面使用,我们先定义一个简单的类:
public class Student { private String name; private String age; public Student() { } public Student(String name, String age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.
1.确认gitlab-runner是不是挂了,如果不是绿色的标点就是挂了
2.没有设置Indicates whether this runner can pick jobs without tags
3.在.gitlab-ci.yml指定tags
stages: - build docker-build: stage: build tags: - mytag # 这里是gitlab-runner的tag 4.重新装一个runner
wget https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-linux-amd64 mv gitlab-ci-multi-runner-linux-amd64 /usr/bin/gitlab-runner chmod +x /usr/bin/gitlab-runner mkdir -p /app/gitlab-runner gitlab-runner install --user=root --working-directory=/app/gitlab-runner gitlab-runner start gitlab-runner status 注册 [root@localhost ~]# gitlab-runner register Running in system-mode. Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): https://gitlab.com/ Please enter the gitlab-ci token for this runner: aaxxxxxxxxxG Please enter the gitlab-ci description for this runner: [localhost.
48001api 功能未授权,请确认公众号已获得该接口,可以在公众平台官网 - 开发者中心页中查看接口权限 微信网页开发-网页授权 scope为snsapi_base的坑
以下链接,在配置没问题的前提下,前端是可以获取到code的,但是后端会一直报errcode":48001,"errmsg":"api unauthorized的错误
https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=网址&response_type=code&scope=snsapi_userinfo&state=123&connect_redirect=1#wechat_redirect 原因是
snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面),
snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
所以这里scope改用snsapi_userinfo的方式就好了
不管是微信公众号开发还是小程序开发,都要仔细阅读开发文档,一切皆在文档中
微信网页开发-网页授权
微信公众号全局返回码说明
参考:https://www.jb51.net/article/146656.htm
我分四步来描述:
1.先写出公用方法(全局),含存、取、删的方法
2.存,这个一般都是在登陆界面login.vue时的事情,一般存后台返回的数据
3.取,在需要展示的地方从cookie中获取即可
4.删,就是点击退出登陆等其他类似操作。
全局变量会把?
//登陆信息,供获取cooike给值,来源getCookie() username:"", //姓名 usernumber:"",//工号 usertype:"",//管理员还是啥,或者天数 一、公用方法,供调用(存,取,删) 方法写在公用地方(全局)-----gongyong.js:
/** 供外部调用的方法 */ //设置cookie --由login调用 setCookie(name,gonghao,type){ var exdate = new Date() exdate.setTime(exdate.getTime() + 24 * 60 * 60 * 1000 * 0.5); // 字符串拼接cookie window.document.cookie = 'userName' + '=' + name + ';path=/;expires=' + exdate.toGMTString() window.document.cookie = 'usernumber' + '=' + gonghao + ';path=/;expires=' + exdate.toGMTString() window.document.cookie = 'usertype' + '=' + type + ';path=/;expires=' + exdate.
早在 2020年9 月份,C++标准委会历史上规模最大的一次会议(180人参会)在美国San Diego召开,这次的会议上讨论确定哪些特性要加入到C++20中,哪些特性可能加入到C++20中。C++20 国际标准草案获得一致通过,C++ 之父 Bjarne Stroustrup 就表示:“C++ 20是自C++11以来最大的发行版,它将是C++发展史上的里程碑。” 这一发言引起了开发者们对 C++20 的广泛关注。在明年二月份的会议当中将正式确定所有的C++20特性。 这次会议讨论的提案也是非常之多,达到了创纪录的274份,C++20的新特性如果要一一列出的话将是一份长长的清单,因此本文将只评论大部分确定要加入和可能加入到C++20的重要特性,让读者对C++的未来和演进趋势有一个基本的了解。
C++20中可能增加哪些重要特性,下面这个图可以提供一个参考。
ISO C++ 委员会正式发布了 C++20 标准,命名为 ISO/IEC 14882:2020。
C++20 引入了许多新特性,其中包括:
模块 (Modules)
协程 (Coroutines)
范围 (Ranges)
概念与约束 (Constraints and concepts)
指定初始化 (designated initializers)
操作符 <=> != ==
constexpr支持:new/ delete、dynamic_cast、try/ catch、虚拟
constexpr 向量和字符串
计时:日历、时区支持
std::format
std::span
std::jthread
像 Concepts/Ranges/Modules/Coroutines 这些新特性将会对开发者及 C++ 生态产生不小的影响,也为这门“高龄”编程语言增添不少魅力。
+Resin JNDI数据源,都出现了连接溢出的问题.
我当时猜测不是连接池的问题,就是驱动程序bug的问题.
当然经过排查,确实是连接池的问题.有溢出.
我将连接池更换为c3p0 v0.9.5.1之后,大量连接Oracle的问题已经解决.终于监听器日志不再刷了.
隔天,AWR检查,发现一个SQL在4个小时内居然执行196w次.占用数据库负载3%左右.
SELECT NULL AS table_cat,
o.owner AS table_schem,
o.object_name AS table_name,
o.object_type AS table_type,
NULL AS remarks
FROM all_objects o
WHERE o.owner LIKE :1
AND o.object_name LIKE :2
AND o.object_type IN ('xxx', 'TABLE')
ORDER BY table_type, table_schem, table_name
刚开始以为是系统被SQL注入了..
因为之前正在排查硬解析过高的问题
后来发现是JDBC Metadata的调用.
但是这个调用的频率,明显异常.
最后发现,原来是我使用c3p0连接池的时候,还需要配置preferredTestQuery参数.
否则,默认测试连接的行为,就是DatabaseMetaData.getTables()这种操作.
preferredTestQuery设置为"select 1 from dual" 问题解决.
原文如下:
http://www.mchange.com/projects/c3p0/#configuring_connection_testing
Configuring Connection Testing
c3p0 can be configured to test the Connections that it pools in a variety of ways, to minimize the likelihood that your application will see broken or "
数据验证(在早期Excel版本中称为数据有效性)是Excel中的常用功能,使用此功能可以确保数据的规范化,如下图A列(序列:张三,李四)和C列(序列:早班,晚班)设置了数据验证。
依次单击【数据验证】>【圈释无效数据】,无效数据将被标注出来,如下图所示。
值得注意的是:圈释无效数据添加的椭圆并不是普通的图形(Shape对象),因此无法使用VBA直接读取无效数据所在单元格区域。
山穷水尽疑无路,柳暗花明又一村,此路不通,肯定还有其他的方法。VBA中还有其他方法来识别无效数据。
Sub Demo() Dim res As Range, c As Range, rngVal As Range Set rngVal = [a1].CurrentRegion.SpecialCells(xlCellTypeAllValidation) If Not rngVal Is Nothing Then For Each c In rngVal If Not c.Validation.Value Then If res Is Nothing Then Set res = c Else Set res = Union(res, c) End If End If Next If Not res Is Nothing Then MsgBox "无效数据:" & res.Address(0, 0) Else MsgBox "没有设置数据验证" End If End Sub 【代码解析】
测试时会报错:
com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest1 See http://docs.aliyun.com/cn#/pub/ons/faq/exceptions&topic_not_exist for further details. at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:542) at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1030) at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:989) at com.alibaba.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:90) at com.yang.rocketmq.Producer.main(Producer.java:45) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 解决方案
DefaultMQProducer producer = new DefaultMQProducer("please_rename_unidcque_group_name"); //设置自动创建topic的key值 producer.setCreateTopicKey("AUTO_CREATE_TOPIC_KEY"); //设置自动创建topic的key值
producer.setCreateTopicKey(“AUTO_CREATE_TOPIC_KEY”);
这一步很重要
吃水不忘挑水人 参考链接 这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上!!!
1. 个人环境 CentOS Linux release 7.9.2009 (Core)
2. 更换步骤 2.1 备份源文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2.2 根据版本下载更改源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo (注:如果出现“未知的名称或服务”报错,如:
则转到步骤3对网络配置文件进行修改)
2.3 清空yum缓存并生成cache文件
yum clean all yum makecache 2.4 更新yum列表
yum -y update 3. 修改网络配置文件 (此处需要对应网卡,可用ifconfig查看网卡名称,第一栏)
vim /etc/sysconfig/network-scripts/ifcfg-ens33 # 修改虚拟机网卡配置文件,此处需要对应网卡 在配置文件最下面添加:
DNS1="8.8.8.8" # 增加DNS1; DNS2="8.8.4.4" # 增加DNS2; 保存后重启网络
service network restart
【Oracle 结论】
order by colum asc 时,null默认被放在最后
order by colum desc 时,null默认被放在最前
nulls first 时,强制null放在最前,不为null的按声明顺序[asc|desc]进行排序
nulls last 时,强制null放在最后,不为null的按声明顺序[asc|desc]进行排序
【MySql 结论】
order by colum asc 时,null默认被放在最前
order by colum desc 时,null默认被放在最后
ORDER BY IF(ISNULL(update_date),0,1) null被强制放在最前,不为null的按声明顺序[asc|desc]进行排序
ORDER BY IF(ISNULL(update_date),1,0) null被强制放在最后,不为null的按声明顺序[asc|desc]进行排序
针对【oracle】我们就需要使用以下语法:
order by order_col [asc|desc] nulls [first|last]
针对【mysql】我们则需要使用以下语法:
select * from table_name order by IF(ISNULL(字段名),0,1),字段名;
在win7英文版下,很多软件中文字体均显示问号,通过如下解决方案,经测试,可以完美解决:
一、 通过控制面板->时钟、语言和区域,打开区域和语言面板
二、修改如下配置:
1、区域和语言->格式->选择“日语”->应用->再选择“中文”->应用;
2、区域和语言->位置->选择“日本”->应用->再选择“中国”->应用;
3、区域和语言->管理->复制设置->勾选“欢迎屏幕和系统账户”->应用,但不要重新启动系统;
4、区域和语言->管理->更改系统区域设置->选择“日语”->应用->选择“中文简体”->应用;
三、以上设置完成后,再重启系统,即可解决中文乱码问题
Flink支持三大部署模式: 1. Local 本地部署 Flink 可以运行在 Linux、Mac OS X 和 Windows 上。本地模式的安装唯一需要的只是Java 1.7.x或更高版本,本地运行会启动Single JVM,主要用于测试调试代码。
2. Standalone Cluster集群部署 Flink自带了集群模式Standalone,这个模式对软件有些要求:
1.安装Java1.8或者更高版本
2.集群各个节点需要ssh免密登录
3. Flink ON YARN Flink ON YARN工作流程如下所示:
首先提交job给YARN,就需要有一个Flink YARN Client。
第一步:Client将Flink 应用jar包和配置文件上传到HDFS。
第二步:Client向REsourceManager注册resources和请求APPMaster Container。
第三步:REsourceManager就会给某一个Worker节点分配一个Container来启动APPMaster,JobManager会在APPMaster中启动。
第四步:APPMaster为Flink的TaskManagers分配容器并启动TaskManager,TaskManager内部会划分很多个Slot,它会自动从HDFS下载jar文件和修改后的配置,然后运行相应的task。TaskManager也会与APPMaster中的JobManager进行交互,维持心跳等。
Flink的支持以上这三种部署模式,一般在学习研究环节,资源不充足的情况下,采用Local模式就行,生产环境中Flink ON YARN比较常见。
Flink Local模式部署测试 1.jdk的安装和验证
java -version
2.下载安装包 下载地址:https://archive.apache.org/dist/flink
选择自己需要的版本进行下载
2.解压安装包(tar -zxvf flink-*.tgz)
tar xzf flink-*.tgz # 解压文件 cd flink-1.8.0 3.启动单节点flink
$ ./bin/start-cluster.sh # 启动 Flink 查看进程jps
在ndoe-1上可用看见StandaloneSessionClusterEntrypoint进程即JobManager,在其他的节点上可用看见到TaskManagerRunner 即TaskManager
访问localhost:8081,确认监控界面正常启动,Web监控界面会显示有一个可用的TaskManager实例。
4.验证
本文将验证官方给出的SocketWindowWordCount代码,代码将从socket监听中读取数据,并且每5秒打印一次前5秒内每个不同单词的出现次数,即使用windos的滚动时间窗口。
1 什么是跨域 浏览器因为安全考虑,所有设置了同源策略,同源策略简单理解就是 域名,端口号,协议 完全相同就是称为同源
同源下的页面质检可以进行Js的dom操作,如果不在同一个源下的任何文档dom访问都被组织,不同源下的访问就称为跨域请求
跨域请求 分为以下几个方面
端口号不同 http://www.baidu.com/a.js - http://www.baidu.com:8080/b.js 主域相同子域不同 http://www.baidu.com/a.js - http://blog.baidu.com/b.js 协议不同 http://www.baidu.com/a.js - https://www.baidu.com/b.js 域名不同 http://www.baidu.com/a.js - https://www.qq.com/b.js 域名和对应ip http://www.baidu.com/a.js - https://192.168.2.3/b.js 2 如何解决跨域 解决跨域主要考虑两个方面:
一个是避开ajax请求方式
一个是解决同源限制问题
解决跨域方式有很多
基于js标签的src方式
基于jquery的jsonp方式
基于cors的方式 解决了同源问题
jsonp 和 cors 区别
jsonp只能解决get方式提交
cors不仅支持get方式 同时支持post提交方式
3 CORS介绍 CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。
3.1cors原理 客户端自动向请求头 header中注入origin
服务器端需要向响应头 header 中注入 Access-control-Allow-Origin
浏览器检测到header中的Access-Control-Allow-Origin 则就可以跨域操作
4 两种请求 浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
只要同时满足以下两大条件,就属于简单请求。
(1) 请求方法是以下三种方法之一: HEAD GET POST (2)HTTP的头信息不超出以下几种字段: Accept Accept-Language Content-Language Last-Event-ID Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain 这是为了兼容表单(form),因为历史上表单一直可以发出跨域请求。AJAX 的跨域设计就是,只要表单可以发,AJAX 就可以直接发。
备份mysql
备份mysql数据库的命令;
mysqldump -u$username -p$password $databasename > bak_file.sql
备份mysql数据库为带删除表的格式(能够让改备份覆盖之前备份的数据库,无须手动删除之前已备份数据库文件)
mysqldump -add-drop-table -u$username -p$password $databasename > bak_fiel.sql
直接将mysql数据库压缩备份
mysqldump -u$username -p$password $databasename | gzip > bak_file.sql.gz
备份mysql数据库某个表
mysqldump -u$username -p$password $databasename specific_table1 specifice_table2 > bak_file.sql
同时备份多个mysql数据库
mysqldump -u$username -p$password -databases db1 db2 db3 > mul_db.sql
仅仅备份数据库结构
mysqldump -u$username -p$password -no-data -databases db1 db2 db3 > structure_bak.sql
备份服务器中所有数据库
mysqldump -u$username -p$password –all-databases > alldb_bak.sql
====================================================
还原备份的mysql数据库
mysql -u$username -p$password $databasename < bak_file.
为了能够读取配置文件,redis启动的时候必须指定配置文件,如下:
./redis-server /path/to/redis.conf 接下来我们就来介绍redis.conf的具体可配置参数。
一、基本配置 1. 内存大小设置
当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写):
1k =< 1000 bytes
1kb =< 1024 bytes
1m =< 1000000 bytes
1mb =< 1024*1024 bytes
1g =< 1000000000 bytes
1gb =< 1024*1024*1024 bytes
2. daemonize no
默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项的值更改为yes。
3. pidfile /var/run/redis.pid
当redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个redis
服务时,需要指定不同的pid文件和端口。
4. port 6379
指定redis运行的端口。
5. bind 127.0.0.1
# If you want you can bind a single interface, if the bind option is not # specified all the interfaces will listen for incoming connections.
网络连接正常,但是应用商店加载失败,错误代码: 0x80131500
网上试了很多种办法都不行,包括重装应用商店。
后来才发现不是应用商店的问题,而是http协议设置的问题。
若有小伙伴也有类似的情况可以试试,避免采坑。
-----------------------------------------------------
1、用“win + R”打开运行
2、输入 inetcpl.cpl 打开Internet属性(或从IE浏览器设置打开)
3 点击高级选项
4 找到并勾选 TLS 1.2,取消勾选TLS 1.0
点击确定,现在应用商店可以打开了!
前言 没有什么好说的,就是想起来前些年失恋使劲刷番剧缓解自己糟糕的情绪。纪念下。
一、直接上代码
1.搜索入口 # 搜索动漫名称 列表 def get_video_list(name): # 开启代理 # proxy = {'http': 'http://127.0.0.1:8080', 'https': 'https://127.0.0.1:8080' } url = 'http://www.7666.tv/search.php?searchword=' + name + '&submit=' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'Content-Type': 'application/x-www-form-urlencoded', 'Cookie': "" } # url 中文转码 url = url.replace(url.split("/")[-1].split(".")[0], quote(url.split("/")[-1].split(".")[0])) # 发起请求 , proxies=proxy response = requests.get(url, headers) # 解决requests.
在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。抽空把对ListView的使用做了整理,并写了个小例子,如下图。
列表的显示需要三个元素:
1.ListVeiw 用来展示列表的View。
2.适配器 用来把数据映射到ListView上的中介。
3.数据 具体的将被映射的字符串,图片,或者基本组件。
根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
我们从最简单的ListView开始:
public class MyListView extends Activity {
private ListView listView;
//private List data = new ArrayList();
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
listView = new ListView(this);
listView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1,getData()));
setContentView(listView);
}
private List getData(){
List data = new ArrayList();
data.add("测试数据1");
data.add("测试数据2");
data.add("测试数据3");
data.add("测试数据4");
return data;
}
}
上面代码使用了ArrayAdapter(Context context, int textViewResourceId, List objects)来装配数据,要装配这些数据就需要一个连接ListView视图对象和数组数据的适配器来两者的适配工作,ArrayAdapter的构造需要三个参数,依次为this,布局文件(注意这里的布局文件描述的是列表的每一行的布局,android.R.layout.simple_list_item_1是系统定义好的布局文件只显示一行文字,数据源(一个List集合)。同时用setAdapter()完成适配的最后工作。运行后的现实结构如下图:
SimpleCursorAdapter
sdk的解释是这样的:An easy adapter to map columns from a cursor to TextViews or ImageViews defined in an XML file.
我CAD自带的VLisp编写了一个Lisp程序,测试OK的,但生成vlx文件加载进来,确提示不能识别...
本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP...
下面是我找到的资料,希望对你有用。AutoCAD二次开发工具综述AutoCAD是目前微机上应用最...
一些提示吧,得到直线 用的是ssget,它建立一个选择集,然后在选择集中分别取各实体(sslen...
电脑系统【卸载或更改程序】,点击AutoCAD,添加功能【Express Tools】。(setq...
编译成VLX格式的!方法:CAD里执行命令:VLISP依次点击:文件->生成应用程序-&...
将语言写到txt文本保存到lsp格式即可,或者使用cad自带的lisp编辑器进行编程,命令:Vlis...
如果单纯的是lisp文件,完全可以把他们都拷贝到一个lisp文件里,如果包括lisp,dcl等多个文...
这个问题。。涉及到cad二次开发,,其实就是保存文件的路径和命名,一般调用系统的就可以lisp或...
在CAD命令窗口输入vlisp它就能进入vlisp编辑器,如果以前这样能进入而现在进不了,那试试VL...
本文主要向大家介绍了MySQL数据库之在Linux环境下mysql的root密码忘记解决方法(三种) ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。
MySQL密码的恢复方法之一
1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL对外的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全状态。最安全的状态是到服务器的Console上面操作,并且拔掉网线。
2.修改MySQL的登录设置:
?
# vi /etc/my.cnf
在[mysqld]的段中加上一句:skip-grant-tables 保存并且退出vi。
3.重新启动mysqld
?
# /etc/init.d/mysqld restart ( service mysqld restart )
4.登录并修改MySQL的root密码
?
mysql> USE mysql ; mysql> UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ; mysql> flush privileges ; mysql> quit
5.将MySQL的登录设置修改回来
?
# vi /etc/my.cnf
将刚才在[mysqld]的段中加上的skip-grant-tables删除
保存并且退出vi。
6.重新启动mysqld
?
# /etc/init.d/mysqld restart ( service mysqld restart )
7.恢复服务器的正常工作状态
将步骤一中的操作逆向操作。恢复服务器的工作状态。
本次安装Mysql的CentOS版本是7.7
1.下载Mysql
首先去Mysql官网下载安装包,网址https://dev.mysql.com/downloads/mysql/
推荐大家下载Linux通用版本的,便于管理安装位置,也方便一台服务器安装多个版本的mysql,下载后将Mysql安装包上传至服务器/usr/local/目录下
2.创建Mysql用户和组
groupadd mysql #创建mysql组
useradd -r -d /home/mysql -g mysql mysql #创建mysql用户 并指定组和默认路径
chown -R mysql:mysql /home/mysql #将Mysql默认路径的用户和组改成mysql
3.解压Mysql
tar -xvf mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz #解压安装包
ln -s mysql-8.0.11-linux-glibc2.12-x86_64 mysql #文件夹添加软链接为mysql
chown -R mysql:mysql /usr/local/mysql
4.为Mysql安装配置环境
使用root用户编辑/etc/profile,将下面的内容添加到最下面,并执行source /etc/profile使配置生效
export PATH=$PATH:/usr/local/mysql/bin
关闭防火墙,防火墙状态为inactive时表示关闭成功
service firewalld stop
关闭SELinux,编辑/etc/selinux/config,将selinux=enforce改为disable即可
5.创建Mysql数据目录
mkdir /usr/local/mysql/data #创建数据目录
chown mysql:mysql /usr/local/mysql/data #将数据目录的用户和组改成mysql
chmod 750 /usr/local/mysql/data #更改数据目录权限
6.配置my.cnf文件
新建my.cnf配置文件,并添加以下内容
[mysqld]
port=3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
log-error=/usr/local/mysql/data/error.log
socket=/tmp/mysql.sock
pid-file=/usr/local/mysql/data/mysql.pid
character-set-server = utf8
MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_NextPart_01D6EB7A.25CCBB00" ????????????????????????????Web ??????????????????????????????????????????????????????Web ?????????????????????Web ?????????????????? Windows? Internet Explorer??? ------=_NextPart_01D6EB7A.25CCBB00 Content-Location: file:///C:/8290D809/file0569.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="gb2312" ?????????????- ??= ????????- ???棨???????? <= /span> ?. ?????( ??5 ????10 ??) 1. 7+4+ ?? ????17 ?? A.7  = ; B.8 C.9  = ;D.6 2.???????,???????? ?? = 3D"/uploads/image/ueditor/20191202/1575291726293923.png" = A.9 ??4=3D5( ?) B.13 ??9= =3D4( ?) C.9 ??4= =3D13( ?) 3.?????????????????? ?? 3D"/uploads/image/ueditor/20191203/1575351005505811.png" = A. 9 ??4=3D5 B. 5 ??9=3D14 3D"
在formdata中传递复杂参数时,很头疼,期望是一个样子,结果到了后台又是另一个样子,介绍几个基本的formdata格式
传递一个普通的对象obj:{name:'testname',age:'testage'}
需要写成这个样子
‘obj[name]’:'testname'
‘obj[age]’:'testage'
传递一个数组arr:['name','age','sex']
需要写成这个样子
'arr[]':'name'
'arr[]':'age'
'arr[]':'sex'
此时有这样一个结构,怎么传,一个个写出来,想死的心都有了,而且还会涉及到文件的异步上传(不然不会用formdata),所以找了个方法,总结一下:数组会加上[],对象会写成这样obj[property]
var params = {
name:'testname',
obj:{
innername:'innername',
innerage:23,
inneraddress:[
{
city:'shanghai',
area:'pudong'
},
{
city:'jiangsu',
area:'nanjing'
},
]
}
}
var objectToFormData =function(obj, form, namespace) {
var fd = form || new FormData();
var formKey;
if(obj instanceof Array){
for(var item of obj ){
if(typeof item === 'object' && !(item instanceof File)){
this.objectToFormData(item, fd, namespace+'[]');
}else{
// 若是数组则在关键字后面加上[]
fd.append(namespace+'[]',item)
1 var all = {"data":[[1,1.5,0.5,1],[1,2,1.5,2],[3.5,3,2,3],[3,4,3.5,4.5],[4,6,4.5,5.5],[5.5,7,6,7.5],[6.5,7.5,6.5,7.5],[7,8.5,7.5,9],[9,9.5,9,9.5]],"provinces":["健康","意外","人寿","财险"],"years":["风险指数1","风险指数2","风险指数3","风险指数4","风险指数5","风险指数6","风险指数7","风险指数8","风险指数9"]};2 var optionFour ={3 timeline: {4 show:false,5 axisType: 'category',6 autoPlay: false,7 controlStyle:'none', //隐藏自动播放的按钮
8 symbol: 'emptyCircle',9 symbolSize:8,10 bottom:-20,11 left:'15%',12 right:'15%',13 itemStyle: {14 normal: {15 color: '#F68989', //圆点的颜色
16 borderWidth:1
17 }18 },19 checkpointStyle:{20 color:'#fff',21 borderWidth:7,22 borderColor:'#fdd68a',23 },24 lineStyle:{25 color:'transparent', //线的颜色
26 width:1,//线的宽度
27 },28 data: all.years29 },30 options: [{31 toolbox: {32 show: false,33 orient: 'vertical',34 x: 'right',35 y: 'center',36 feature: {37 mark: {38 show: false
天下武功,唯快不破。
在 2021 年的春天,谁能率先开卖 5000 系列锐龙还有 30 系列移动版显卡,谁就能成为最炙手可热的产品,而华硕天选延续了去年的势头,在 1 月 26 号同步 AMD 和 NVIDIA 解禁时间首发天选 2, 我们也在最快的时间之内完成了对它的评测。
*全文基于天选 2, 锐龙 R7-5800H,16GB 内存,RTX 3070 显卡,240Hz 1080P sRGB 色域屏幕版本,售价 9299 人民币,目前全系其售价也是 9299 人民币。
设计与体验: 天选 2 延续了上一代的「二次元」风格,魔幻青的版本有白色机身和青色顶盖搭配,我们手里的日蚀灰则更加低调一些,通体都是哑光的黑色。
打开机身顶盖,正面是一块 15.6 英寸的屏幕,左右边框表现不错,不过下巴确实稍微大了一些有点可惜,不过这一块屏幕的内在表现还是很不错的,因为它达到了 240Hz 的刷新率,100% 的 sRGB 色域覆盖,既能满足电竞的需求,色彩表现也很不错,我们在后文中也会有详细测试。
而在机身 C 面,天选 2 保留了小键盘设计,键盘的布局也符合主流的设计,并不需要额外习惯就能上手,1.8mm 的键程较长,按压的手感比较不错, AWSD 四个按键也有特别的半透明键帽,方便快速定位。
天选 2 的快捷键设置也有为游戏考虑,比如说通过 Fn+F5 可以快速切换性能模式,而 Fn+F4 可以一键静音麦克风,语音开黑的时候很有用。
接口方面,左侧分别是电源接口,RJ-45 网线接口,HDMI 接口,两个速率为 5Gbps 的 USB-A 接口,全功能的 USB-C 接口,以及 3.5mm 音频接口。
来,干了这碗安利
写这篇文章的目的其实就是为了安利一下我的图标库:
主题说完了,下面进入正题。
在web开发中,我们经常要用到一些小图标(加减勾叉等)。通常做法就两种:
直接使用图片;
使用css/svg直接在浏览器中绘制图标。
方案1:由于图标图片比较多,而且体积很小,为了减少请求所以很多时候我们会用雪碧图这种技术来将图标拼凑在同一张图片里面。你也能想到,一堆图标的雪碧图,修改维护会相当麻烦!现在比较好的方案是使用webpack引入图片,小图直接转换成base64插入css中。直接使用图片比较简单,这也是目前比较主流的做法。
方案2: 相比方案1,明显可以减小资源的体积,只需要几条css/svg命令就可以绘制出精美的图标,而且不受图片尺寸限制,可大可小非常灵活。初看方案2的一堆代码可能会觉得非常难,但其实很多简单的图标都是非常容易实现的。
接下来就是妹子们最期待的茄果叔叔手把手教学时间啦。
手抓手教学时间
使用CSS绘制线条,用到的不外乎两个属性:border & box-shadow。而形状则可以用border-radius、transform控制变形,位置则会用到绝对定位、transform、margin等属性来调整。CSS的绘图,做过几个就知道大概是怎么回事了,归根到底,还是几何。如果觉得几何烧脑,那就直接用
基本原理说了,下面来撸一发,先看看最简单的加号:
.plus {
box-sizing : border-box;
display : inline-block;
position : relative;
font-size : 20px;
}
.plus:before, .plus:after {
content : '';
pointer-events : none;
position : absolute;
left : 50%;
top : 50%;
transform : translate(-50%, -50%);
box-shadow : inset 0 0 0 1em;
}
.plus:before {
width : 1em;
height : 2px;
}
发现http的请求头不对。
通过查阅资料,说是要改nginx配置,因为SSL没有开启,参考链接:
https://blog.csdn.net/qq_21460229/article/details/102969528
但是前几天还是正常,并且nginx 配置也没有动过。
然后想了下,发现接收的地址是http,之后变成https。
换成火狐浏览器,又是正常的。
接着把浏览器的不安全内容设置成允许就行了。有点小坑啊。。。
文章目录 #事故现场#解决方法 #事故现场 将本地代码添加到远程仓库,然后pull远程仓库代码时,报错:
$ git remote add origin http://192.168.1.183/git/pstest.git $ git pull origin master fatal: refusing to merge unrelated histories 错误的意思是:(拒绝合并不相关的历史)
#解决方法 出现这个问题的最主要原因还是在于本地仓库和远程仓库实际上是独立的两个仓库。假如我之前是直接clone的方式在本地建立起远程git仓库的克隆,本地仓库就不会有这问题了。
最终发现可以在pull命令后紧接着使用--allow-unrelated-history选项来解决问题(该选项可以合并两个独立启动仓库的历史)。
$ git pull origin master --allow-unrelated-histories
针对在校大学生的C语言入门学习——学生管理系统 有了前面的链表作为数据结构,接下来我们就开始学生管理系统的项目。项目的功能主要就是对学生信息的增、删、改、查。我简单画了一个图来表达一下我们的需求。
主界面显示学生的信息,可以根据姓名和各科的成绩升序降序排序。修改、删除、添加都会切换到其他界面进行。数据的持久化我就使用C语言的文件读写来实现。 学生结构体封装 /* 学生信息结构体 */ typedef struct Student { char name[32]; float language; float english; float math; }Student; 结构体包含存放名字的字符数组和语数外三科成绩。这里要强调的是我们不可以在结构体中定义一个指针变量来保存名字。比如char* name这样是错误的。因为指针变量只能保存地址,不能保存字符串。 界面切换 每个界面都要定义一个函数。但是切换界面的时候如果只是简单的函数调用,那程序就太不灵活了。我使用函数指针的形式来实现界面的切换。请看下面代码。 int mainMenu(); int addMenu(); int updateMenu(); int removeMenu(); int(*currentMenu)() = mainMenu; int main(void) { while(1) { if(currentMenu()) break; } return 0; } /* 主菜单 */ int mainMenu() { } /* 添加学生信息菜单 */ int addMenu() { } /* 修改学生信息菜单 */ int updateMenu() { } /* 删除学生信息菜单 */ int removeMenu() { } currentMenu是函数指针,在项目中它将会指向每个界面函数。main函数中使用currentMenu来执行各个界面。每个界面在结束之前要给currentMenu指向下一个界面,然后结束当前界面的函数。界面函数的返回值是1就结束整个程序,否则继续执行下一个界面。下面我把几个界面函数添加一些显示内容和切换的操作。 主菜单 /* 主菜单 */ #define MEIN_MENU_ITEMS 3 void mainMenuShow(int cursor) { char* menus[] = {"
华硕天选作为兼顾游戏和娱乐的二次元专属潮玩笔记本,自上市以来受到广大年轻人群的关注与喜爱,在初代产品取得巨大成功之后,华硕继续深耕二次元文化,将独特的审美与价值取向同用户需求持续融合。1月26日,华硕正式发布全面升级的天选2笔记本。天选之子强者致胜,天选2采用了NVIDIA Ampere架构的新一代NVIDIA GeForce RTX 3070笔记本电脑GPU,进一步强化了游戏体验优势。
天选2采用了全新ID设计,运用二次元设计美学打造出更高颜值的精巧机身,搭载NVIDIA GeForce RTX 3070笔记本电脑GPU和AMD新一代锐龙7 5800H标压版处理器等顶级硬件配置,同步亮相的还有全新天选姬2.0与天选桌宠(TX Mascot)。高颜值,高配置加上二次元IP生态的丰富,为潮玩新次元持续输出独有的活力!
顶级性能高燃 出场就开大
作为二次元潮玩用户的焦点作品,天选2在图型性能方面必须让玩家们“先爱为敬”。搭载最新的NVIDIA GeForce RTX 3070笔记本电脑,充分发挥NVIDIA Ampere架构的领先优势,为天选2带来巨大飞跃。
搭载GeForce RTX 30系列笔记本电脑GPU的天选2游戏本,其强劲的性能令玩家和设计者青睐。该系列 GPU 采用屡获殊荣的第二代 NVIDIA RTX 架构 - Ampere,搭载全新 RT Core、Tensor Core 及SM多单元流处理器,可为您带来逼真的光线追踪效果和先进的 AI 功能。搭载全新第三代 Max-Q 技术的 GeForce 笔记本电脑通过 AI 和全新的系统优化选项,让高性能游戏笔记本电脑的表现远超以往。NVIDIA Ampere 流式多处理器专为游戏玩家和创作者打造,效能更高,性能更好,让天选2的性能表现远超期待。
GeForce RTX 30系列笔记本电脑GPU拥有第2代RT Cores和第3代 Tensor Cores的全新NVIDIA Ampere架构,吞吐量更高, 强者致胜!其中, 第二代RT Core让实时光线追踪更为逼真、流畅,全新的第3代Tesor Core更是让AI充分发挥游戏大作的华丽画面,加上NVIDIA特有的DLSS2.0,这是由Tensor Core提供算力支持的一项突破性AI渲染技术, 可让笔记本电脑在同等功耗下,展现出更强大的性能,让玩家恣意遨游任意3A大作。
对于玩家竞技无止境的追求,天选独有的TX BOOST让笔记本电脑GPU超频完全自动化,再加上Reflex低延迟技术的配合,带来更充沛的游戏性能。在《剑网3奉天证道》中,RTX30系列笔记本电脑GPU可助您感受家园光追效果!玩家进入“家园”,在“探索画质”下,即刻体验最新的实时光线追踪全局光照以及阴影效果带来的巨大视觉震撼!
拥有强劲的GPU,CPU方面自然也不遑多让。天选2首发搭载基于Zen 3架构的AMD新一代锐龙7 5800H标压版处理器,拥有8核心16线程的设计,最高频率可达4.4GHz。而且作为定位游戏专用的“H”系列处理器,全新的Zen3架构、翻倍缓存,让天选2的这颗处理器无论单核还是双核性能都有着巨大的提升,其每颗核心可直接调用三级缓存,极大加速了PC游戏等延迟敏感型工作负载的运行,带来19%的每时钟周期指令数(IPC)提升,以及24%的能效提升。
天选2配置的TLC颗粒的512GB PCIe SSD让其读写性能也随之暴涨,标称连续写入速度达到了3000MB/秒,读取速度更是高达3500MB/秒,此外还预留一个m.2接口,方便用户自行拓展。16GB的DDR4 3200MHz高频内存足以应对运算需求,最高支持扩展至64GB。强悍且稳定的高速传输表现为玩家酣畅游戏提供了绝佳支持。
有颜更有料 再造二次元潮玩新宠
天选2性能给力,颜值更为给力。魔幻青和日蚀灰两种配色都使得天选2颜值全面提升,而D面底部特有的蜂巢式散热孔,让这款颜值攀升的笔记本多了一份魔幻机甲质感,绝对是天选姬最佳物化代言。
颜值之外,品质绝不省料。全新的天选2拥有三面窄边框设计的15.6英寸全高清IPS电竞屏,刷新率高达240Hz,拥有100% sRGB色域和疾速响应时间,支持Adaptive Sync自适应同步技术与DC调光,为玩家提供好看舒适的游戏画面体验。音频系统则升级为支持DTS:X Ultra技术的立体声,带来高保真7.
这个是html文件引入的方式播放m3u8格式视频 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>前端播放m3u8格式视频</title> <link href="https://vjs.zencdn.net/7.4.1/video-js.css" rel="stylesheet"> <script src='https://vjs.zencdn.net/7.4.1/video.js'></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.15.0/videojs-contrib-hls.min.js" type="text/javascript"></script> <!-- videojs-contrib-hls 用于在电脑端播放 如果只需手机播放可以不引入 --> </head> <body> <style> .video-js .vjs-tech {position: relative !important;} </style> <div> <video id="myVideo" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto" data-setup='{}' style='width: 100%;height: auto'> <source id="source" src="http://139.186.133.195:10080/fvod/arena01/20201230/a342c6d859214ab8a95fae2050502dc7/14zMW9bMR/video.m3u8" type="application/x-mpegURL"></source> </video> </div> <div class="qiehuan" style="width:100px;height: 100px;background: red;margin:0 auto;line-height: 100px;color:#fff;text-align: center">切换视频</div> </body> <script> // videojs 简单使用 var myVideo = videojs('myVideo', { bigPlayButton: true, textTrackDisplay: false, posterImage: false, errorDisplay: false, }) myVideo.
作为机械工程师,你是否想过让弹簧式的零件在装配中自动压缩或拉伸,但是却没有找到方法?
今天的方法,它来了!先看成品!
再说条件:
SOLIDWORKS 2020及以上版本,新增柔性零件功能,可以通过装配体几何体来驱动柔性零部件的几何体,例如,您可以用装配体自顶向下方式建模,其中弹簧长度由装配体中的外部参考驱动。
您可以使用使零件成为柔性,因此,弹簧由装配体驱动,从而就得到了弹簧的柔性运动。
最后看步骤:
先装配两端的零部件,添加同心配合;
使用Topdown方式插入新零件,默认前视基准面;
创建草图1,捕捉弹簧两端零件的中心位置;
创建草图2,在一侧边线上绘制弹簧截面圆,定义尺寸;
启用扫描命令,选择草图轮廓,对应选择圆与中心扫描路径,选项-指定扭转值-圈数设置10,完成扫描;
退出零件编辑模式,点击零件名,在对话框中选择“制作柔性零件”;
点击弹性参考中的项按照提示,选择对应参考,直到全部√。
确定,制作完成,看看成果。
河南艾金米:是正版SOLIDWORKS河南授权代理服务商。负责solidworks软件试用、培训、认证考试、销售、咨询、售后等一体化专业服务。
shapely,OSError: [WinError 126] 找不到指定的模块 最近在使用PaddleOCR时,win10下安装好paddle框架和相关依赖后,控制台下执行测试程序报如下错误:
“OSError: [WinError 126] 找不到指定的模块。”
错误原因:找不到shapely中依赖的dll文件,geos_c.dll
使用环境:anconda中的python环境,笔者环境目录为:E:/anconda/envs/paddleOCR
解决方法:复制shapely/DLLs 目录下的dll文件,到E:/anconda/envs/paddleOCR/Library/bin下即可。
注意:shapely/DLLs为pip安装的shapely目录。笔者此目录为E:/anconda/envs/paddleOCR/Lib/site-packages/shapely/DLLs. 根据自己的安装环境自行替换即可
另外:
如果确实找不到geos_c.dll文件的,可以在下面的地址中,下载对应版本的shapely.whl,然后将后缀改为.rar,解压后DLLs/目录下可以找到geos_c.dll
https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely
设置factor结构体 由于2*3*5*7*11*13*17*19*23*29超过int范围,因此数组大小开到10即可:
struct factor{ int x,cnt;//x为质因子,cnt为其个数 }fac[10]; int num; 关键来了:如果一个数存在1和本身之外的因子,那么一定是在sqrt(n)的左右成对出现的。因此得出一个强化的结论: 对一个正整数n,如果存在有[2,n]之间的质因子: 1、要么这些质因子全部小于等于sqrt(n) 2、要么只存在一个大于sqrt(n)的质因子,而其余质因子全部小于等于sqrt(n) vector<int>prime; int num; int isPrime(int x) { if(x <= 1) return 0; for(int i = 2;i <= sqrt(x); i++) if(x % i == 0) return 0; return 1; } void findPrime() { for(int i = 1;i < 101;i++) if(isPrime(i)) prime.push_back(i); } int main() { findPrime(); cin>>n; for(int i = 0;prime[i] <= sqrt(n) && i<prime.size(); i++) { if(n % prime[i] == 0)//注意不是n % i 此处是质因子,不是因子 { fac[num].
问题:电脑右下角扬声器显示有一个小红×,显示“扬声器禁用”
解决思路:首先自己没有动过显卡,所有肯定不是硬件问题,考虑是驱动问题,百度的一些说法中提到,这种情况有可能是耳机插入口不标准,导致扬声器部分短路,但因为我一直都用同一款耳机,在其他电脑上也用过,没有这种问题,所有我觉得大概率是驱动的问题。
前段时间win10自动更新,我就考虑到可能是自动更新后,驱动版本不兼容,所有尝试着退回旧版本,然后重启,现在扬声器已经OK了
解决步骤:
1.“win+x ”,选择“设备管理器”
2.选择“声音,视频和游戏控制器”中的“英特尔(R)显示器音频”
3.右键选择“属性”
4.选择“驱动程序”栏中的“回退驱动程序”(因为我已经回退过了,所以图片里面这个选项是灰色)
5.重启,然后就OK了
我使用的是联想小新,在小新系列应该都可以,其他电脑可能会有些出入,另外一个更普适的方法参考下面这篇博文
链接:Windows 10 音频红叉 重装驱动无效 解决方案
还有一种方式是找到“realtek高清晰音频管理器”,因为我的电脑找不到这个东西,所有就没有使用这种方式,此方式仅供参考
链接:关于Windows10更新后没声音
问题 鼠标滑过会悬浮一些代码提示,有些人喜欢,有些人不喜欢,这里告诉大家怎么关闭和开启这个功能。
原理 vscode设置
操作 在setting(快捷键ctrl+,)中搜hover找到 editor hover
关闭后如下
新到的树莓派4B自从我修改到阿里源后,一直无法正常使用apt-get update更新,这个问题是因为目前没有公钥,所有无法使用,偶尔想起来树莓派的系统似乎和debian有很深联系,所以试了下debian的源,结果成功了,但可以直接用Debian
首先通过nano编辑sources.list文件
sudo nano /etc/apt/sources.list 然后注释掉原来所有的项,在后面添加下面的源:
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free 最后直接删掉raspi.list即可(也可以全部注释掉)
rm -rf /etc/apt/sources.list.d/raspi.list
在vue里的svg标签里,想用v-for实现下面的列表
<text x="-120" y="1050" font-size="45" @click="showWenduDialog(1, 1)">1号主电机</text> <text x="280" y="1050" font-size="45" @click="showWenduDialog(1, 2)">2号主电机</text> <text x="680" y="1050" font-size="45" @click="showWenduDialog(1, 3)">3号主电机</text> <text x="1080" y="1050" font-size="45" @click="showWenduDialog(1, 4)">4号主电机</text> <text x="1480" y="1050" font-size="45" @click="showWenduDialog(1, 5)">2号 <tspan x="1480" y="1100" >主电机</tspan > </text> <text x="1880" y="1050" font-size="45" @click="showWenduDialog(1, 6)">6号主电机</text> <text x="2380" y="1050" font-size="45" @click="showWenduDialog(1, 7)">7号 <tspan x="2380" y="1100" >主电机</tspan > </text> <text x="2780" y="1050" font-size="45" @click="showWenduDialog(1, 8)">8号主电机</text> 实现代码如下:
<g v-for="(item,index) in this.jgres" :key="index"> <text v-bind:x="getXvalue(index)" y="
喜欢赛车的小伙伴们必定听说过《头文字D》和《速度与激情》两大经典作品,《头文字D》中秋名山车神的称号以及丰田AE86曾是许多年轻小伙的追求;此后的《速度与激情》那一系列超级跑车带来的热血、紧张和刺激更是夺得一众年轻人的芳心。
若是我们能在赛场上过把真正的赛车瘾,岂不乐哉?
前段时间,广汽丰田四城开赛,举办了一场“双擎杯嘉年华”,邀请车主驾驶量产车上赛道,挑战“小勒芒”赛,拼速度,比油耗,让车主们真实经历了一场酣畅淋漓的赛事,仿佛秋名山车神上线,过足了赛车瘾!
(广汽丰田第四届车主双擎杯嘉年华-冠军队百公里油耗仅2.4L,完美诠释“高性能”与“高效率”产品实力)
虽说量产车上赛道多少有点“骇人”,但也正是凸显了如今家轿的市场演变,不再单纯只追求满足家用,更是将目标投放至未来的年轻消费主力军,生产出更多适合年轻人审美与用车习惯的“运动版家轿”。
“运动版家轿”不仅需要强劲的性能表现和良好的驾乘体验,还得具备日常代步和低油耗特点,兼顾性能和舒适性,才能更讨好年轻消费者。
运动主张——Lovin‘Levin!Lovin‘Sport! 秉持“Lovin‘Levin!Lovin‘Sport!”运动主张的雷凌运动版,车身采用了前低后翘的设计理念,这种设计不仅可以有效降低空气阻力带来更好的性能表现,同时从远处望去像是有一种可以随时爆发的感觉,流线型外观设计则让整个车身兼具酷炫和沉稳。这种锐利先锋的前脸设计,非常适合追求“颜艺与个性”的年轻人。
出色的运动范颜艺 运动版雷凌采用了“牛头标”的设计,不同于将车标放置在前格栅栏中的普通版,2021款运动版雷凌则是将丰田的银色车标放置在前机盖上,运动网状钢琴黑的前格栅以及专属的车尾设计可与灰色车身完美呼应,这种设计让性能和颜值兼具。雷凌一车双造型的设计,可谓是既满足日常家庭出行,又满足运行性能的需求。
鹰眼大灯的加入,不仅为颜值上增色不少,还可以在夜间带来出色的光照表现,让车主能够拥有良好的夜间驾驶体验。而搭配的17寸双色铝合金轮毂不仅可以让车辆从侧面看起来更酷炫,而且可以在保证效率的同时带来良好的舒适感。
高级运动感的内饰设计 光有好看的皮囊当然是不够的,2021款运动版雷凌在内饰上也是下足了功夫。初次进入车内可以发现它并没有过多的按钮和配色,中控台灰色和黑色的搭配让其看起来不仅工整干净,坐在驾驶座上更是感觉到这个车厢都很宽阔舒适,门内侧和挡把周围红色线条的加入则让它由内而外散发着运动的气息。
后排空调出风口的加入提升后排乘客的乘坐体验,同样在后排配备的USB接口则让手机不离手的小伙伴们不再需要购买转接头,可谓是十分贴心。
“智联”、“安全”构造的驾趣 值得一提的是在安全和智能方面做的努力。
雷凌真正吸引年轻群体的,大抵是智联系统的便捷与科技趣味感,导得了航,唱得了歌,旅途中解闷,还能操控车窗、天窗、空调等,轻松愉悦的驾乘环境,常常能被年轻群体津津乐道。
而广汽丰田精心打造安全驾驶条件,优质的安全口碑才是让消费者真正放心购买的原因。
丰田最新的 Toyota Safety Sense智行安全套装让你的驾驶更为放心,基于毫米波雷达和单目摄像头的DRCC动态雷达巡航控制系统可以降低高速公路等场景的驾驶负担;而PCS预碰撞安全系统则可以有效降低行人和非机动车辆碰撞事故发生的可能。
搭配的高刚性GOA车身的加入提升车辆耐用性,8个SRS安全气囊则可以实现驾乘人员的全方位保护,而像ABS防抱死制动系统、VSC车身稳定控制系统、HAC坡路起步辅助控制系统等功能都是比较常见的安全性功能。
以上这些,都是给驾乘人员最稳妥的出行保护,是内里的修养。
更不用说,对于价格敏感的年轻消费者,雷凌运动版搭载了第四代THS II混合动力系统,不仅能利用发动机&电动机的优势互补带来优异的驾乘体验,百公里油耗更是低至4.1L左右,还有电池无忧政策可以保障后期的无忧使用,年轻人的车,当有面子还得有里子。
比起卡罗拉,雷凌更具核心竞争力 了解丰田系车型的小伙伴一定知道雷凌的兄弟车型——卡罗拉,两者相似的外观设计和价格让许多购车用户无比纠结。那么这两款车型到底有什么区别,哪款车型更适合消费者选购呢?
先来说说这两款车的共同点吧,根据丰田对于这两款车型的官方介绍不难得知,雷凌和卡罗拉车型皆采用丰田TNGA架构开发,这意味着两款车型的三大件是相同的,但是两者在细节上仍有一些区别。
首先是价格层面的区别,同样配置下雷凌价格相较于卡罗拉普遍低四千左右,但是雷凌的电池无忧保障政策则让其价格优势更为明显;
其次是外观方面,仔细看两款车型的话不难发现雷凌的底盘更低,红色线条的内饰不仅让其看起来更动感前卫,也更符合年轻人的审美理念。
底盘偏软的卡罗拉系列适合家庭出行,而低底盘搭配宽车体的雷凌系列则更满足追求驾驶体验的消费者群体;同时高强度钢的加入则可以有效提升雷凌系列整体车身刚性,并带来更好的安全性能。就这几点来看,雷凌和卡罗拉系列各有各偏向的用户群体。
零部件的高品质——细节控的福利 汽车装配质量取决于汽车制造商的组装技术,以比较常见卷发美容为例,虽说是同样的头发和同样的卷发工具,但是自己在家卷的头发远达不到理发店效果。汽车制造领域也是如此,不同汽车制造商由于生产工艺的不同,因此最终制造的车型也是有一定区别的。 虽说雷凌和卡罗拉是兄弟车型,但是两款车型在国内分别由广汽丰田和一汽丰田负责生产制造。这意味着两款产品虽说外观相仿,但是两款车型在细节方面仍有天壤地别。了解丰田TNGA架构的小伙伴应该知道,这个架构最大的特点在于从设计环节开始插手,通用零部件的加入让其后期装配误差大幅度降低。
如果用几个词来形容2021款运动版雷凌的话,想必是安全、年轻、运动,这款车型可谓是完美满足年轻人的需求。其中运动版更是自推出以来便开启热销模式,为了让更多消费者可以得到它,广汽丰田还专门推出“0首付0息新车开回家”的活动,月付低至2066元起,可享6成2年0息、或者6成1年0息的优质购车方案,更多优惠政策可登陆官网咨询/当地经销店试驾查询:
广汽丰田
大家好,我是太空橘子。
自从上初中的时候,收到了姐姐送我的第一台音乐播放器——Walkman NW-A815,就爱上了音乐,就像「痛苦的信仰」乐队的《不要停止我的音乐》歌名一样那般热爱。从此之后,便也陆陆续续购买了多款Walkman和其他播放器,逐渐发现日常生活已经离不开播放器的优质音乐了。
一、为什么要买播放器 当然随着手机功能越来丰富,大家可能会有个疑问,播放器还有什么购买的必要吗?我来说说我的原因,
1、对音乐是真爱,杂食听众,对音乐的细节比较在乎,相比于日常手机的音质水平,专业播放器的提升还是非常明显。
2、从小到大,买了很多高素质正版CD以及下载了很多高采样的音乐,如果手机上听就需要下载很多杂七杂八的第三方播放器,用播放器的话要更方便,简单一些;
3、手机承载了太多任务,日常聊微信,看视频就消耗了太多的电量,播放器对我这种电量焦虑者来说很友好。
4、版权问题,不仅是音乐软件也是音乐厂牌的问题,合作及决裂让消费者有种被牵着鼻子走的感觉,所以喜欢的音乐买CD,自己转录抓轨,存放在自己的播放器里面,随时都可以听。
5、当然流媒体我也是支持的!我自己也是长期AppleMusic、Spotify、网易云音乐的付费用户,所以现在流媒体播放器支持安卓也是非常方便的。
6、还有就是在乎情怀和质感,对音乐有那么一丝情感在播放器里面。
那么今天就跟大家详细聊聊艾利和SR15和和索尼 ZX505的使用体验。
二、入手顺序 两款播放器我都很喜欢,我是先在2019年年初入手的艾利和SR15,年底左右又买了一部索尼的ZX505;两款均采用了安卓底层操作系统,听歌相比于之前的产品都方便了不少;但是两款的设计风格以及产品语言则是完全不同,价位方面也处于同一水平,总体来说索尼的活动多,到手价格要便宜一点。
三、外观 两款播放器都属于相当便携的产品,我个人也喜欢这样的设计,这样出差还是旅行,使用起来也是比较方便。
但是设计风格上就完全不同了,ZX505走的是延续经典的路线,在经典之作ZX300的基础上做了很多改进和完善,有着非常强烈的Walkman气息。
握持感出色,接口也换成了更为流行和通用的USB-C接口,日常充电也可以用手机的充电线。侧方的按钮适应后也能快速的调节歌曲和音量,即使是第一次接触Walkman的同学也能快速上手。
而SR15从我拿到手的第一眼,就有一个感觉,酷,另类。
正面使用了一块「歪屏」,但是按照艾利和的官方说法这块「歪屏」不是为了酷而歪,设计上也是符合人体工学,让用户能单手更好的操作。
另外SR15也依然延续了艾利和的「光影概念」,背面用了一整块的碳纤维,机身有着锐利的金属边角,看起来更有个性,但是也牺牲了一定的手感,而且让我觉得比较尴尬的是使用了Micro-USB接口,导致每次灌歌还要专门拿出数据线。
四、系统 ZX505和SR15都是以安卓为底层,但是ZX505是采用了Android 9.0,而SR15则是定制UI。
上手后是什么感觉呢,
ZX505就像是一部纯净的安卓手机,但是抹去了电话和相机功能。
SR15呢,给人的感觉则是我用了安卓,但是我不想让人知道啊!!
第一个区别就是两款虽然都是安卓底层,但是安装软件的方式就截然不同。
(1)应用安装和桌面
ZX505你可以通过应用宝下载,也可以通过浏览器下载安装,比如我就装了「夸克浏览器」,也可以通过文件管理器来安装软件,像我用的是Mac电脑,直接用HandShaker来同步管理。
ZX505可以完全兼容各种第三方音乐App,我就很喜欢Apple Music这个极简的播放界面,和ZX505搭配的很好看。
但是SR15呢,不仅把能安装的应用数限制在4个,而且在安装软件的时候,还需要使用替换大法,在电脑里修改各种软件的名称和权限,才能安装成功。
(2)自带播放器的使用区别
使用SR15最好还是用自带的播放器,可以通过官方的分类快速的找到歌曲,专辑以及自己搜索的音乐,另外也支持歌曲的搜索功能,支持中文和英文的模糊搜索。
缺点方面,我觉得自带的EQ过少,对于小白来说不够友好。
ZX505的自带播放器之前也属于正常的水准,更新后我觉得有几点做的值得iriver借鉴。
首先是支持在播放页面「快速查看」歌曲所在专辑中的歌曲或该演出者的专辑,可以快速找到相关的歌曲;我记得这个功能最早是出现在网易云音乐App里,没想到ZX505现在也用上了,非常方便。
其次是支持了「拼音模糊搜索」,之前必须打中文或者英文,现在输入「zhou」就能召唤周杰伦,周华健等等~
(3)第三方听歌体验
SR15目前只存在于能听的阶段,第三方软件而且当你终于安装好应用之后,你会发现每次使用第三方软件还需要手动多次点击完全关闭,不然机器就会进入一种很烫很卡的状态,不然你就等着掉电...
说到耗电问题,开始索尼ZX505也有类似的问题,但是最近更新了系统,推送了一个新的APP专门来解决耗电问题,里面可以对各种APP潜在非必要耗电行为进行主动拦截,另外对于一些流氓软件,可以直接一键长按关闭,方便了不少。
五、音质 两款播放器均支持平衡接口,ZX505自带4.4mm规格接口,SR15则是2.5mm规格接口,两种规格各有优势,4.4mm在保有量上稍有占优。
当然买了这种播放器自然就是馋平衡输出带来的分离度和更强的驱动力;硬件方面SR15 采用了两颗MasterHIFI高品质的DAC CS43198,ZX505则是采用了索尼自家的S-Master HX,而且在内部的「模块地板」「电容」「机身设计」上也为了音质做了很多提升设计,而且DMP-Z1的一些新技术,比如无铅焊料也下方到ZX505上面。
音质表现方面,我个人觉得两款的差距不大,属于该价位表现不错的水平,但是调音风格和侧重点两款稍有不同,听感方面,包括人声,SR15要更通透,特别是女声,非常的毒,悦耳。
但是呢ZX505的特色则是密度强,声场处理的更得当,整体表现的更加均衡。
至于哪种风格更好,就看各位喜欢的风格了。
(1)可玩性
可玩性方面,ZX505要明显的强于SR15,不仅有内置的黑胶唱片处理器,模拟黑胶唱片的质感,还有各种丰富的EQ设置。
当然对于我这个杂食听众,最让我惊喜的是前端时间发布的DSEE Ultimate新技术也适配了ZX505,相比于之前的DSEE HX,DSEE Ultimate则是通过AI技术实时提升数字音频品质,动态识别乐曲风格及各元素,恢复音源压缩时损失的高频信号,带来更加丰富而饱满的聆听体验。(最高提升至32bit/192kHz)
我测试了好几首歌曲,比如周董的《青花瓷》和陈慧娴的《让一切随风》,开启后,吉他、古琴等乐器的尾音更动听了,另外就是乐器之间的衔接要更连贯,人声的表现力也稍微强了那么一丢丢,对于一些低品质,难找的资源可谓是升级利器。
(2)蓝牙耳机
现在的音频用户绕不开的就是蓝牙耳机,我用的比较多的是索尼WH-1000XM4。
以往蓝牙输出的时候,声音调节都不能使用,升级过后“均衡器”、“动态音量均衡器”都可以进行设置了。
还发现了一个小细节,使用蓝牙耳机可以从16档音量调节更新至32档音量调节。
对于SR15,不是黑啊,蓝牙功能比较半残...不知道是硬件问题还是软件原因,经常会出现断链,发现也有不少网友中招。
六、总结 写了这么多,最后来总结一下我对这两款播放器的评价,
艾利和SR15,外观设计好看,音质出色,系统能用,但不好用,你问我后悔不后悔,我肯定不后悔啊,因为我入手的时候,SR15已经是市面上最佳的选择,而且外观是真的酷~不过缺点么,就是后劲不足,系统更新没有诚意。
索尼ZX505,则是一部越来越完善的播放器,发布了一年多之后,Walkman团队还能结合用户痛点,推出了很多实用的功能,如果你问我两款怎么选,那肯定索尼ZX505更容易上手,性价比更高。
当然么,ZX505和SR15都是这个行业的领军者,只是大家走的路不同罢啦!
a)简介
希尔密码是利用矩阵进行加密的一种加密算法,其本质是一种多表代换密码。
b)算法流程
基本思想:将n个明文字母通过线性变换,将它们转换为n个密文字母。解密只需做一次逆变换即可
算法的密钥K=﹛Z_26 上的n×n可逆矩阵﹜,明文M与密文C 均为n维向量,加密和解密变换分别为:
C=K∙M mod 26 M=K^(-1)∙C mod 26
K^(-1) 为K在模26上的逆矩阵,满足
KK(-1)=K(-1) K=I (mod 26)
I 为单位矩阵
c)算法实现
加密:
图1.5.1 hill加密
d)算法验证
使用课件上的例子:
图1.5.2 hill样例
验证:
图1.5.3 hill验证
e)算法分析
希尔密码由于采用矩阵运算加密,因此在相同的明文加密时,可能会出现不同的密文,因此可以很好的抵御字母频率攻击法。
f)实现难点
解密时求矩阵的模逆矩阵。
web前端开发工具 (开发工具众多,只举例常用的。)
1. Visual Studio Code:
界面美观插件安全界面操作方便 2. Sublime text :是主流的开发编辑器,
小巧轻便启动速度快(媲美记事本)丰富的可扩展插件内置语言的高亮内置语言的自动补全 3. Webstorm:是jetbrains公司旗下的一款javascript开发工具被誉为“最智能的javascript IDE”
对目前主流的web前端框架进行了集成,安装方便代码补全框架丰富强大的集成代码的格式化 4. hbuilder: 适合移动端开发,对mui、html5+等做了相应的集成,可以对应用程序进行打包。
web前端调试工具 1.goole开发工具:谷歌浏览器啊按F12调出开发者工具
工具栏:Element:用于查看和编辑当前页面的HTML和CSS元素。
console标签页:用于显示脚本输出的调试信息,或运行的测试脚本等。常用指令:console.log() console.info() console.error() concole.warn()
sources标签页:用于查看和调试当前页面所加载的脚本的源文件(可以进行断点的设定和调试过程、代码格式化)
network标签页:用于查看http请求的详细过程,如请求头、响应头、响应及返回内容等。(可以查看加载资源的名称、加载资源的状态、加载资源类型)
application标签页:用于查看本地应用缓存数据信息(离线应用或本地存储应用时用)
2.firebug
3.IE tester主要用于IE不同版本的调试
4.在线的HTML\CSS代码格式化工具
5.json验证相关工具
Ubuntu:64位
解决64位系统运行32位程序的问题:
sudo apt-get install lib32z1
sudo apt-get install lib32ncurses5
sudo apt-get install libstdc++6
sudo apt-get install lib32stdc++6
看到b站的animation-banner效果太妙了,就自己也想仿写一个.去查了查资料鼓捣出来一个.
首先是成品展示
大家可能觉得这个效果看起来很复杂,其实拆开来看比较简单.
他的效果就是实现了一个镜头聚焦,那么我们分步骤进行讲解
step1 首先,让图层跟随鼠标进行移动,大家应该已经想到怎么办了,但是有个问题,每个图层跟随鼠标移动的距离不能相同,这里可以用循环进行移动距离的迭代.
step2 其次是让图层跟随鼠标的移动距离进行清晰度的变化,和上述的办法类似,也是构造一个函数来计算清晰度,可以看到,随着鼠标的移动,最后和靠前的图层清晰度都变低(后面称之为失焦点),而靠中间的图层清晰度变高(后面称之为聚焦点).我们可以知道,这个偏移距离和焦点的转移是有关系的
实际上这个函数有很好的选择,就是我们小学二年级就 学过的的二次函数,两端的数值大,中间的数值小,符合我们的要求.
然后我们利用图层的index把六个图层按顺序排列在x轴上,得到的y值就符合我们的要求了
这就是最核心的思路啦,那么我们就开始
首先获得六个图层
这里我就直接用b站的图了,因为咱菜鸡画不出来
放出来方便大家练习,侵删
<!-- 这就是我的html结构,很简单 --> <header> <div><img src="./img/bilibili-autumn-1.webp"></div> <div><img src="./img/bilibili-autumn-2.webp"></div> <div><img src="./img/bilibili-autumn-3.webp"></div> <div><img src="./img/bilibili-autumn-4.webp"></div> <div><img src="./img/bilibili-autumn-5.webp"></div> <div><img src="./img/bilibili-autumn-6.webp"></div> </header> body{ margin: 0;//经典margin0 } header{ height: 155px;//给容器一个高度,防止高度坍塌 position: relative;//开定位,六个图层需要以容器为坐标进行左右移动 overflow: hidden;//因为图层需要移动,所以图层要略大于容器,容器要做溢出隐藏 } header>div{ position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex;//直接flex居中,太美了这东西 justify-content: center; align-items: center; --offset: 0px;//这里定义css的变量方便后面js的处理 --blur: 2px; } header>div>img{ display: block; width: 110%;//放大点,移动的时候不会有空白溢出 height: 100%; object-fit: cover; transform: translateX(var(--offset));//变量的使用 filter: blur(var(--blur)); } 接下来就是js代码,可能我写的比较繁琐,但是实现的效果我觉得和b站的很像
数组应用小游戏——扫雷游戏 游戏准备开局界面布置布雷 游戏过程排查雷总体游戏代码的实现 最终代码 游戏准备 游戏介绍
扫雷游戏就是一个方格面上埋藏有雷,一旦玩家点击雷点即失败本轮游戏结束,只有成功将所有无雷点找出点击即为成功,每次点击到不是雷电的地方时,界面将会显示数字表示以该坐标为中心的周围至多8个点的雷个数
需要实现
需要准备游戏开局的菜单以及采用两个二维数组一个用来布雷,一个用来显示玩家每一步的雷点情况,将最初游戏界面初始化
开局界面布置 目的
实现菜单的输出以及采用循环的方式使玩家可以决定继续玩还是终止游戏
代码实现
void menu(){ printf("***************************\n"); printf("********** 1.play ********\n"); printf("********** 0.exit ********\n"); printf("***************************\n"); } int main( ){ srand((unsigned int)time(NULL)); int input = 0; do{ menu(); printf("please choose:>"); scanf("%d",&input); switch(input){ case 1: game( );//三子棋游戏 break; case 0: printf("quit a game\n");//退出游戏 break; default: printf("please input again\n");//重新输入 break; } } while(input); return 0; } 布雷 目的
创建两个二维数组,并将棋盘随机安置上适量炸弹,游戏开始打印初始游戏界面
注意事项
1.创建二维数组时因为存在需要了解周围8个雷的布局情况,边上的元素较难讨论,因此在创建时将原来的格数+2,使游戏界面多一圈,如图所示
2.创建为字符数组较为合适
3.进行布雷时将有雷置为’1’,无雷置为’0’,原因后续会讲到
4.打印界面时为了美观易看,可以打上对应坐标,且打印时只需打印游戏界面的行列数即可
一、前期准备工作
1、开发使用工具:IDEA、Mysql
2、在Mysql中创建数据库以及建一张表
二、开始流程
1、使用IDEA创建空的javase工程
2、创建完成后引入依赖
<dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>8.0.18</version> </dependency> </dependencies> 3、在pom.xml中增加下方代码(target中找不到mapper.xml使用)
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build> 4、工程目录
5、代码一之User.java
package org.javayu.Model; public class User { private Integer id; private String username; private String address; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.
这里写自定义目录标题 随着网络大时代的快速发展,在网络线路中BGP这个词出现的概率也是大大提升,也越来越多的机房开始使用上了BGP线路,那么接下来就由书脉科技为大家介绍下什么是BGP线路。
BGP(边界网关协议)协议主要用于互联网AS(自治系统)之间的互联,BGP的最主要功能在于控制路由的传播和选择最好的路由。中国网通与中国电信都具有AS号(自治系统号),全国各大网络运营商多数都是通过BGP协议与自身的AS号来互联的。而采用BGP方案来实现双线路互联或多线路互联的机房,我们称为BGP机房。
那么,BGP双线的优点是什么呢?
1、使用BGP协议可以使网络具有很强的扩展性可以将IDC网络与其他运营商互联,轻松实现单IP多线路,做到所有互联运营商的用户访问都很快。这个是双IP双线无法比拟的。
2、服务器只需要设置一个IP地址,最佳访问路由是由网络上的骨干路由器根据路由跳数与其它技术指标来确定的,不会对占用服务器的任何系统资源。服务器的上行路由与下行路由都能选择最优的路径,所以能真正实现高速的单IP双线访问。
2、由于BGP协议本身具有冗余备份、消除环路的特点,所以当IDC服务商有多条BGP互联线路时可以实现路由的相互备份,在一条线路出现故障时路由会自动切换到其它线路。
BGP本身即是一种协议也是一种让电信联通移动三网快速运行的协议,一个好的机房拥有着BGP是一个好的机房的标准哦。
前言 由于前端写多了老是想着用cross-env这种混入系统变量使用,然而在vscode的debugger有点行不通,就发现了一个新的方式
单例模式AppConfig AppConfig.dart
import 'package:flutter/material.dart'; enum DevMode { sf, ad } class AppConfig { DevMode mode; static AppConfig _appConfig; factory AppConfig(DevMode mode) { if (_appConfig != null) return _appConfig; else { _appConfig = AppConfig._init(mode); return _appConfig; } } static AppConfig getConfig() { if (_appConfig == null) return throw new ErrorSummary("需要初始化"); return _appConfig; } AppConfig._init(this.mode); } 然后默认你已经有一个main.dart暴露了MyApp的Widget组件了,接下来创建不同环境的两个入口文件,下面展示一个就行了
sf.dart
import './config.dart'; import 'package:flutter/material.dart'; import './main.dart'; void main() { AppConfig(DevMode.sf); runApp(MyApp()); } 最后配置一下vscode的launch.
1.FROM 基础镜像,当前新镜像基于那个镜像,任何镜像都可以基于scratch
2.MAINTAINER 镜像维护者的姓名和邮箱地址信息
3.RUN 容器构建时需要运行的命令
4.EXPOSE 当前容器对外暴露的端口
5.WORKDIR 指定在创建容器后,交互终端默认登录的目录
6.ENV 镜像构建过程中设置的环境变量
7.ADD 将宿主机目录下的文件拷贝进镜像且ADD会自动处理URL解析和tgr压缩包解压
8.COPY 拷贝宿主机目录中的文件到镜像中,和ADD的区别是不会处理URL和tar压缩包自动解压
9.VOLUME 容器数据卷,用于数据持久化
10.CMD 指定容器启动时要运行的命令,如果存在多个CMD命令,只有最后一个生效
11.ENTRYPOINT 指定容器启动时要运行的命令,与CMD区别是多个ENTRYPOINT执行都会生效4
12.ONBUILD 当构建一个被继承的dockerfile时运行命令,父镜像在被子镜像继承时被触发
3dmax_建模入门 3ds max 2016 64位中英文版(直接可用)
详情
室内设计3dmax建模-效果图建模-零基础入门到精通
详情
高校室内设计教材
详情
如果使用静态ip,则不需要NetworkManager这个服务
否则它会修改一些配置如
/etc/resolv.conf 导致外网不同 常见如:
ping: www.baidu.com: Name or service not known
CentOS 7 关闭:
systemctl stop NetworkManager # 临时关闭 systemctl disable NetworkManager # 永久关闭网络管理命令 其余版本关闭命令不一样,具体需要查询.
NetworkManager介绍 NetworkManager 的出现主要为了解决下面的问题:
软件可以自动检测尽量多的信息,
在复杂网络环境下可以平滑的切换,
可以即使反馈网络状态,可以在桌面环境下工作。
NetworkManager由一个管理系统网络连接、
并且将其状态通过D-BUS进行报告的后台服务,
以及一个允许用户管理网络连接的客户端程序组成
NetworkManager 网络配置顺序 1) 如果有线网络连接可用,NetworkManager会自动配置有线网络连接。
2) 如果有线网络连接不可以用,NetworkManager 会搜寻所有可检测到的无线网络,如果有保存的授权信息, NetworkManager会自动配置无线网络连接
3) 如果用户自定义网络信息,用户定义具有最高优先权
NetworkManger系统架构 NetworkManger由四个独立的模块构成:
- NetworkManager服务 — 一个核心服务,用户处理网络连接和策略
- DHCPCD — NetworkManager使用的DHCP客户端服务 NetworkManagerInfo —
- 收集用户桌面或者客户端定义信息,并反馈网络状态给用户 NetworkManagerNotification — - Panel的桌面通知标识符。
NetworkManager 和 D-BUS D-Bus 是一种被linux系统广泛集成的一个内部消息(IPC)和远程进程调用(RPC)组件, 同一系统间,进程可以通过D-Bus通过并发交互。D-Bus 是freedesktop.
下载地址:http://download.sangfor.com.cn/download/product/sslvpn/pkg/mac_ec_sp/EasyConnect.dmg
简要总结这款 M1 MacBook Air:
1.M1性能表现超出预期的好,速度快到堪称恐怖
2.与Intel Mac一样功能强大,甚至更强大
3.M1发热大幅降低,续航大幅提升
4.兼容性不是大问题,而且吃惊的是,用M1跑X86应用甚至比用Intel跑X86应用都快出很多
5.外观设计无任何变化
6.新增P3广色域、Wi-Fi 6
7.可运行iOS App
本文全部在这款 M1 MacBook Air 上编辑完成。首先放上配置。
2020 款 M1 最基础的配置Air,教师优惠 7199 元。
上午 7 点收到货,就马不停蹄的做了一整天的测试,目前来做一个汇总。八核CPU(4大+4小)3.2GHz
七核GPU
十六核NE
8GB UMA 内存
256GB SSD
49.9 瓦时锂聚合物电池
对比手上另一款2020款Intel最高配的配置Air,教师优惠9799元。
i7-1060NG7 四核八线程 1.2GHz 睿频加速3.9GHz
Iris Plus G7 GPU
16GB LPDDR4X 内存
256GB SSD
49.9 瓦时锂聚合物电池
性能表现
开门见山,直接谈感受。
系统级流畅度的直观体验:一个字:快,丝滑流畅!
在均搭载macOS Big Sur 11.0.1 正式版(20B29)的情况下,M1芯片的Air在各项系统操作中流畅度远远超过Intel Air。尤其体现在动画效果、打开/切换应用程序、滑动、页面放大缩小、打字流畅度、和睡眠唤醒速度。
得益于更强的GPU,掉帧现象几乎不存在,而这在Intel Air上随处可见。
得益于低延迟的UMA内存和新内存控制器,切换应用程序的响应速度迅速。
得益于M1的新SSD控制器,连续读写能力达到了2400Mb/s以上,而Intel Air只有1200Mb/s。随机读写能力也大幅增强。这让打开应用程序、睡眠唤醒都得到了,可以说是革命性的提升。
对于睡眠唤醒,Intel Mac从睡眠中唤醒需要2-3秒的等待时间,就和普通PC一样。而这款M1 Mac就和你手中的iPhone一样,瞬间唤醒,瞬间解锁。千万不要小看了这几秒的提升,它带来的是一种非常舒适非常“Apple”的体验。
文章目录 前言一、程序代码二、程序结果1. 带有点标号的结果图2. 没有点标号的结果图 三、总结 前言 前面写过三篇关于Gmsh的教程:
有限元剖网格之Gmsh安装与使用入门Gmsh剖一维网格教程附代码Gmsh剖二维网格教程附代码 以上文章对Gmsh都有一定的介绍,在此不再重复直接接剖三维网格的C++代码。
注:因有一个OpenCASCADE库暂时没安装好,所以目前只能用插点,连线,线连面,面拼体的方式构造三维几何体。
一、程序代码 #include <iostream> #include <gmsh.h> #include <vector> #include <fstream> #include <iomanip> using namespace std; int main(int argc, char **argv) { // Before using any functions in the C++ API, Gmsh must be initialized. gmsh::initialize(); // By default Gmsh will not print out any messages: in order to output // messages on the terminal, just set the standard Gmsh option // "
【软件名称及版本】:ecognition 9.02
【学习内容】:遥感影像变化检测
使用ecognition完成遥感影像的变化检测
开头提醒大家随手保存是个好习惯,我希望我浪费的时间能为您省下一刻
因为中途软件出现了恶行bug导致重做,所有有些命名有些许差异,不过诸位的慧眼一定能明确甄别
1.数据的导入
将需要对比的数据一次性导入,注意路径无中文
2.编辑图层名称
数据导入之后,可以看到共有 10 个图层,为了区分时相和波段名,下面我们根据影像的命名给它们重命名
复制地图
(1)查看原始地图
影像加载后,在默认创建的原始地图 main 中,包含了所有影像图层。为了做变化检测,我们需要把 T1 时相和 T2 时相的图层分别装在另外两个地图中,T1 时相的所有图层装在map T1 中,T2 时相的所有图层装在 map T2 中。在view的image layer mixing中可以查看已经导入的图层
(2)创建进程目录
在Process Tree中右键,在弹出菜单中点击Append New,创建一个新进程。在Edit Process
中 Name 下一栏输入“copy image”,然后点击 OK。
(3)添加复制地图进程
在”复制地图”目录进程上右键,从菜单中点击 Insert Child,插入一个子进程。打开 EditProcess 窗口编辑进程。Algorithm 选择 copy map,Target map name 输入”map T1”,Image layers右侧空白栏中点击一下,在弹出的 Select Image Layers 对话框中勾选 B-T1,G-T1,R-T1,NIR-T1,PAN-T1,将其添加进来。
在复制地图到 map T1 的进程上右键,从菜单中点击 Append New,同上操作,如下设置
4.查看复制地图结果
执行复制地图进程之后(进程edit下excute即为运行),创建了 map T1。在 Navigate 工具栏中定位到 map T1,然后点击,进行波段组合,里面只有 T1 时相的 5 个图层了,这里可以设置一下波段组合顺序,使用 RGB 合成方式,然后使用 NIR-T1 和 PAN-T1 在绿通道上进行加强。
摘要:Docker的广泛应用相对于传统的虚拟机而言提高了资源的利用率,推广后docker的影响不容忽视,在启动速度、硬盘、内存、运行密度、性能、隔离性和迁移性方面都有很大的提高。本次在centos7下使用不同容器搭建lamp环境后部署开源的CMS。分别在两个容器里用yum下载httpd、mysql,并在httpd内安装PHP7.1版本。测试apache通过后下载CMS镜像并部署。
关键词:Docker Lamp CMS
要求:
1.熟练掌握centos7版本下docker的安装、删除,启动、停止,docker镜像的安装、删除。
2.掌握容器端口的各个映射方式,及容器互联的操作方法。
3.掌握不同容器下lamp的搭建。
4.Lamp搭建在容器中搭建后掌握CMS镜像的保存、授权、部署。
一、 过程:
1.docker容器的创建,启动,停止,并查询docker容器的状态。
命令:yum install docker #下载docker
2.docker镜像的安装、删除、状态。
3.通过docker exec -it 2db /bin/bash 命令进入容器,安装httpd、php7.1。并测试apache是否成功。
命令:
docker pull docker.io/centos/mysql-57-centos7 #下载mysql镜像
docker run -d --name=mysql -e MYSQL_ROOT_PASSWORD=123456 docker.io/centos/mysql-57-centos7 #创建mysql容器创建用户root 口令123456
docker run --name=httpd -d -u root -P --link mysql centos/httpd #创建httpd容器并连接数据库
docker exec -it httpd /bin/bash #进入httpd容器
[root@2db3229c1b25 /]# yum install -y epel-release
[root@2db3229c1b25/]#rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
[root@2db3229c1b25 /]# yum update -y
[root@2db3229c1b25 /]# yum install -y gcc make openssl openssl-devel
这个问题在使用mybatis的过程中会经常遇到。
一、连表查询 <select id="getStudent2" resultMap="StudentTeacher2"> SELECT s.`id` sid,s.`name` sname,t.`name` tname FROM `student` s,`teacher` t WHERE s.`tid`=t.`id`; </select> <resultMap id="StudentTeacher2" type="Student"> <result property="id" column="sid"/> <result property="name" column="sname"/> <association property="teacher" javaType="Teacher"> <result property="name" column="tname"/> </association> </resultMap> 各个属性介绍:
id要保持一致,就是结果集的id和select的resultMap的值保持一致(使用结果集映射的只有select)result标签中的 property就是实体类的属性名,column就是SQL字段名association标签映射的是类变量,result标签映射的普通变量type 和 javatype都是实体类的名字 其实结果集映射学这些基本够了
二:嵌套查询 在SQL中设计多表查询的问题的时,有两种方式,一是多表连接,而是嵌套查询。其中多表连接常用,但是嵌套查询也应该了解
嵌套查询的结果集映射和上面有所不同
一个参数: <select id="getStudent" resultMap="StudentTeacher"> select * from student </select> <select id="getTeacher" resultType="Teacher"> select * from teacher where id=#{id} </select> <resultMap id="StudentTeacher" type="Student"> <result property="id" column="id"/> <result property="
1.通过ambari将集群中的所用组件都关闭,如果关闭不了,直接kill-9 XXX
2.所有节点运行
# 不同版本位置可能不同 python /usr/lib/python2.6/site-packages/ambari_agent/HostCleanup.py –-silent –-skip=users 3.所有节点删除hadoop包
yum remove -y hadoop_2* hdp-select* ranger* zookeeper* bigtop* atlas-metadata* spark* slide* strom* hive* ambari* oozie* pig* tez* hbase* knox* storm* accumulo* falcon* smartsense-hst slider* 4.以上命令可能不全,执行完一下命令后,再执行
rpm –qa|grep Ambari rpm –qa|grep ambari 5.关闭ambari-server,ambari-agent
ambari-server stop ambari-agent stop 6.卸载ambari-server,ambari-agent(所有节点)
yum erase ambari-server -y yum erase ambari-agent -y 7.删除存储库
rm -rf /etc/yum.repos.d/ambari.repo /etc/yum.repos.d/HDP* yum clean all 8.删除数据库数据
rm -rf /var/lib/pgsql 9.删除日志文件夹
sudo rm -rf /var/log/ambari-agent sudo rm -rf /var/log/ambari-metrics-grafana sudo rm -rf /var/log/ambari-metrics-monitor sudo rm -rf /var/log/ambari-server/ sudo rm -rf /var/log/falcon sudo rm -rf /var/log/flume sudo rm -rf /var/log/hadoop sudo rm -rf /var/log/hadoop-mapreduce sudo rm -rf /var/log/hadoop-yarn sudo rm -rf /var/log/hive sudo rm -rf /var/log/hive-hcatalog sudo rm -rf /var/log/hive2 sudo rm -rf /var/log/hst sudo rm -rf /var/log/knox sudo rm -rf /var/log/oozie sudo rm -rf /var/log/solr sudo rm -rf /var/log/zookeeper 10.
1.注册出现timeout错误
#修改超时限制 /usr/lib/python2.6/site-packages/ambari_agent/security.py def create_connection(self): if self.sock: self.sock.close() logger.info("SSL Connect being called.. connecting to the server") sock = socket.create_connection((self.host, self.port), 120) 2.EOF occurred in violation of protocol (_ssl.c:661)
#修改/etc/ambari-agent/conf/ambari-agent.ini #在security最下面新增 [security] force_https_protocol=PROTOCOL_TLSv1_2 python SSL验证设置 终极解决方案: ① 查看 openssl 版本: [root@ambari ~]# openssl version OpenSSL 1.0.2k-fips 26 Jan 2017 [root@ambari ~]# rpm -qa | grep openssl openssl-libs-1.0.2k-12.el7.x86_64 openssl-1.0.2k-12.el7.x86_64 如果低于 openssl-1.0.1e-16.el6.x86_64 版本,则需要更新到 openssl-1.0.1e-16.el6.x86_64 及以上版本 ② 查看 Python 版本: [root@ambari ~]# python -V Python 2.
1、先从Github下载源码
https://github.com/tzutalin/labelImg
2、windows环境
(base) C:\Users\Administrator>conda activate pytorch (pytorch) C:\Users\Administrator>cd H:\AItest\AiSetup\labelImg-master (pytorch) C:\Users\Administrator>h: (pytorch) H:\AItest\AiSetup\labelImg-master>pip install PyQt5 -i https://pypi.douban.com/simple Collecting PyQt5 Cache entry deserialization failed, entry ignored Cache entry deserialization failed, entry ignored Cache entry deserialization failed, entry ignored Downloading https://pypi.doubanio.com/packages/aa/72/754c693db0e745b9fe47debc3ec52844461f090d5beff28489a0cde5ef82/PyQt5-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl (56.9MB) 100% |████████████████████████████████| 56.9MB 13kB/s Collecting PyQt5-sip<13,>=12.8 (from PyQt5) Cache entry deserialization failed, entry ignored Cache entry deserialization failed, entry ignored Downloading https://pypi.doubanio.com/packages/59/0e/f51483e98c407687ec6e99d21ec1333c42a4d285933f2863494676d22896/PyQt5_sip-12.8.1-cp36-cp36m-win_amd64.whl (62kB) 100% |████████████████████████████████| 71kB 4.1MB/s Installing collected packages: PyQt5-sip, PyQt5 Successfully installed PyQt5-5.
ER图
student表
score 表
1-- 查询学过"张三"老师授课的同学的信息
select s.* ,t_name from student s left join score sc on s.s_id = sc.s_id left join course c on sc.c_id = c.c_id left join teacher t on c.t_id = t.t_id where t_name = '张三'; 2-- 查询同名同性学生名单,并统计同名人数
select s_name,s_sex,count(s_name) from student group by s_name,s_sex having count(s_name)>1; 3-- 查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩 select sc1.* from score sc1 ,score sc2 where sc1.s_id=sc2.s_id and sc1.score=sc2.score and sc1.c_id<>sc2.c_id group by sc1.s_id, sc1.
猜数字游戏是gameboy最喜欢的游戏之一。游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上。
比如计算机随机产生的数字为1122。如果玩家猜1234,因为1,2这两个数字同时存在于这两个数中,而且1在这两个数中的位置是相同的,所以计算机会告诉玩家猜对了2个数字,其中一个在正确的位置。如果玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。
现在给你一段gameboy与计算机的对话过程,你的任务是根据这段对话确定这个四位数是什么。
Input
输入数据有多组。每组的第一行为一个正整数N(1<=N<=100),表示在这段对话中共有N次问答。在接下来的N行中,每行三个整数A,B,C。gameboy猜这个四位数为A,然后计算机回答猜对了B个数字,其中C个在正确的位置上。当N=0时,输入数据结束。
Output
每组输入数据对应一行输出。如果根据这段对话能确定这个四位数,则输出这个四位数,若不能,则输出"Not sure"。
暴力,可能有更好的想法,但我不会/狗头
暴力思路:从1000到9999每次数字循环输入给出的条件,直到遍历完或出现2个答案跳出循环。
为了美观,2个判断写成了函数,主要是写两边代码行数就太长了,不好找出哪里出现错误
#include<iostream> #include<cstring> using namespace std; struct Node{ int a[4],b,c; }arr[100]; void input(int n){ for(int i=0;i<n;i++){ string a; int b,c; cin >> a >> b >> c; for(int j=0;j<4;j++){ arr[i].a[j]=a[j]-'0'; } arr[i].b=b; arr[i].c=c; } } int check_num(int t,int i){ int cnt=0; int vis[4]; memset(vis,0,sizeof(vis)); do{ int t1=t%10; t/=10; for(int j=3;j>=0;j--){ if(t1==arr[i].a[j] && !vis[j]){ vis[j]=1; cnt++; break; } } }while(t!=0); return cnt; } int check_place(int t,int i){ int cnt=0; for(int j=3;j>=0;j--){ int t1=t%10; t/=10; if(t1==arr[i].
1、删除开源JDK软件包:
2、借助SecureFX等工具将JDK压缩文件上传至/opt/soft目录,这里上传jdk-8u231-linux-x64.tar.gz压缩文件;
3、将JDK压缩文件解压至/usr/local目录:tar -zxvf /opt/soft/jdk-8u231-linux-x64.tar.gz -C /usr/local
4、删除压缩文件:rm /opt/soft/jdk-8u231-linux-x64.tar.gz
5、配置JDK环境变量:
a、打开配置环境变量文件:vim /etc/profile
b、进入文件末尾:点击Shift+G快捷键
c、进入文件编辑模式:点击I键
d、/etc/profile文件尾部添加如下内容:
export JAVA_HOME=/usr/local/jdk1.8.0_231
export PATH=$JAVA_HOME/bin:$PATH
e、退出文件编辑模式:点击Esc键
f、保存关闭profile::wq
g、使环境变量生效:source /etc/profile
h、判断JDK是否安装成功:java -version
看似问题简单,好多人搞不懂真正的区别,下面我们从底层的角度给大家分析一下
从C语言的角度来看,所有的文件都可简单的分为两类:一类是文本文件,另外一类是二进制文件。
1、文本文件: 所谓的文本文件,就是按照字符的编码规则(比如ASCII),1:1的根据你敲的字符形成的机器码文件。后缀习惯是以.txt结尾。一个典型的文本编辑器就是大家熟悉的记事本程序(notepad.exe)。
假设我们在记事本程序里面写入了如下的“ABC回车123回车abc”,并且保存为文件名为a.txt文件。如下图所示
a.txt
我们的问题是,在保存后,计算机究竟保存了什么样的信息?
我们用一个能够查看底层二进制代码的程序打开后,可以看到如下信息
a.txt底层二进制代码
41 42 43 0D 0A 31 32 33 0D 0A 61 62 63 0D 0A(十六进制)
根据ANSI ASII规范表
很明显:41->A ,42->B,43->C,换一行的回车,是由两个控制符 0D(CR)和0A(LF)决定的。其他的字符依次类推。
可见一个标准的ASCII文本文件,就是按照ASCII表的编码规则来进行1:1转换的。当然如果你是按照unicode编码,所有的字符按照两个字节代表一个字符的方式进行编码。在解析Unicode编码的文本文件时,就要按照两个字节为一个字符的方式进行二进制到文本的转换,这样才能正确解析。
有人可能要问,如果一个人用word保存的这些字符,是不是文本文件呢?答案是,不是。因为word文件在保存时,添加了很多的特定的格式化信息。我们以保存一个字符A为例,看看word 2010中的A在保存后,底层究竟是什么样的。下图截取了部分
word文件底层代码截图
这只是一部分,可见又一大堆只有微软才了解的代码。
2、二进制文件 二进制文件是可以认为是所有非文本文件都称之为二进制文件。
要打开二进制文件,需要有形成这类文件的程序的内置的解析器,才能解读。这也解释了为什么不同的文件比如pdf,docx等文件,在编程的时候,必须要有相应的文档解析类函数来完成的原因了。
当然你完全可以用二进制方式打开任何一个文本文件,因为底层上就是那些代码,你只需要读取每一个字节,查找转化成相应字符予以显示就可以了,因为是你知道ASCII表的规则。
努力学习编程?通过学习伪代码来掌握代码。但是什么是伪代码,它真的有帮助吗?
当你第一次开始学习编程时,在构建第一个应用程序之前,需要学习很多东西。像程序员一样思考可以帮助你将问题分解为算法来解决问题。算法是你的代码将用来解决问题或回答问题的步骤。
如果你是一门新的编码器,那么从一开始就像程序员一样思考可能会具有挑战性。将应用程序创意转换为实际代码需要一些练习。
为了弥合你希望应用程序执行的操作和需要编写的实际代码之间的差距,可以使用伪代码。
什么是伪代码?
伪代码是一段代码或算法的纯文本描述。它实际上不是编码;没有脚本,没有文件,也没有编程。顾名思义,它是“伪代码”。
伪代码不是用任何特定的编程语言编写的。它以通俗易懂的英语书写,清晰易懂。
尽管它不是用编程语言编写的,但仍然使用了一些关键字,它们引用了常见的编码概念。这些字母以大写字母书写,以便于阅读。
开始
输入
读取/获取
打印/显示
计算/确定
组
增减
程序
结束
这是一个伪程序的片段,该伪程序要求你输入自己喜欢的颜色并打印你的选择。
START
PROGRAM getColor
Create variable Color
Ask the user for their favorite color
READ INPUT into Color
PRINT Color
END
这是用伪代码编写的非常简单的算法。任何人都可以阅读并了解这是做什么的。作为编码人员,你要做的就是使用你使用的任何一种编程语言来实现这一目标。这是JavaScript中的同一程序:
let color = window.prompt("What is your favorite color?");
console.log(color);
该程序使用JavaScript语法编写算法。如果你不了解JavaScript,弄清楚正在发生的事情可能会有些挑战。
伪代码编写算法,编程语言编写语法。
伪代码有什么帮助?
伪代码可帮助你在编写应用之前对其进行规划。它可以帮助你以比代码语法更易于阅读的格式创建算法。一旦编程语言出现了,就很难理解你的代码在做什么。
如果你知道该语言,那么该JavaScript示例就很容易阅读。但是,如果你只是阅读并尝试确定逻辑该怎么办?具体术语如
window.prompt
要么
console.log
不要透露太多关于算法的信息。
好的软件原理很重要。如果你面试成为一名软件工程师,他们不会期望你记住语法。他们将询问你对算法和结构的了解。如果在开始编码之前构造算法和结构,则会编写出更好的代码。
如何编写伪代码
用伪代码编写完整的程序需要很多不同的语句和关键字,就像常规编程一样。实际上,一旦你对伪代码的理解足够深入,它将开始看起来非常接近真实程序。
让我们使用带有伪代码语句的关键字来构建算法。
有条件的
条件语句对于编程至关重要。这些语句是IF语句或IF / ELSE语句,它们可以为你的代码添加逻辑。这些语句使用以下伪代码编写:
如果
其他
否则
然后
在软件检测行业中常见的资质主要有CNAS认可和CMA检测认定。只有具有国家计量检定规程的单位才能颁发检定证书,没有或者没有计量校准规程的单位只能给出校准不确定度,不能给出具体的检定结论。还有第三方校准机构通过CNAS认可也是一种校准证书,只有通过计量行政部门的考试授权才算具备CNAS认可资质。
如果产品质量检验报告需要加盖CNAS和CMA章,这就要求相关行业的实验室需要通过CNAS(实验室认可)和CMA(资质认定)。
那么CNAS认可和CMA检测认证有什么区别呢?下面卓码测评就为大家来简单介绍一下:
1、性质及适用对象
CNAS适用对象是所有从事实验室活动的组织,包括那些将检测或校准作为检查和产品认证工作一部分的实验室。只要具备相应的检测能力,就可以通过认证发放资质证书。
而CMA认证是强制性的,如果要向社会发布认证结果,就必须具有CMA资格。一般适用于第三方检测机构,包括少数特定的第三方实验室,范围相对较小。它通常是伴随着审批的,只有经过政府授权的检测机构才算合格。
2、适用范围
CNAS认可认证是一种国际互认。
CMA在中国境内有效,面向社会出具公证性检测报告。
3、管理机构和评价机构
CNAS的认可由中国合格评定认可委员会进行评审和管理。
CMA由CNCA(国家认证认可监督管理委员会)和省、市、自治区、直辖市人民政府质量技术监督部门负责审查和管理。
4、审核程序和要求
CMA的评审程序和要求在各地区都有区别,具体情况还需要咨询当地的质量技术监督局。而CNAS的评审和要求在全国以及国际上都是统一的。
5、具备CMA和CNAS资质的软件测试公司推荐
同时具备CMA和CNAS资质的软件测试公司一般比较少,有测试需要可以考虑一下卓码软件测评。
湖南卓码软件测评有限公司是一家第三方软件测试公司,具备CMA、CNAS双重资质,可根据您的需求提供各类软件测试服务,并出具合格有效的测试报告。通过了中国合格评定国家认可委员会(CNAS)认可,保证了测试能力成熟度,出具的检测报告具有权威性和法律效力。
1、什么是CMA?
CMA的全称是“China Metrology Accreditation”,中文含义为“中国计量认证”。它是根据中华人民共和国计量法的规定,由省级以上人民政府计量行政部门对检测机构的检测能力及可靠性进行的一种全面的认证及评价。
这种认证的对象是所有对社会出具公正数据的产品质量监督检验机构及其它各类实验室,如各种产品质量监督检验站、环境检测站、疾病预防控制中心等。取得计量认证合格证书的检测机构,允许其在检验报告上使用CMA标记。
有CMA标记的检验报告可用于产品质量评价、成果及司法鉴定,具有法律效力。
2、具有CMA资质的软件检测机构推荐?
(1)中国软件评测中心
中国软件评测中心,简称“中国评测”,是工业和信息化部一类科研事业单位。属于国内权威的第三方软、硬件产品及信息系统工程质量安全与可靠性检测机构,主要服务对象为政府机构、科研院校及企事业单位。
(2)卓码软件测评
卓码软件测评是一家独立的第三方软件检测公司,具备CMA和CNAS双重资质,可提供多种软件测试服务,并且拥有专业的软件测试服务团队,测试技术成熟,经验丰富,服务周到,出具靠谱有效的软件测试报告,具有权威性和法律效力。
这个提示可能是输入参数类型和实际函数参数类型不一致导致的。
错误代码:
convenience init(hex: Int, alpha: CGFloat = 1.0) { let components = ( R: Double((hex >> 16) & 0xff) / 255.0, G: Double((hex >> 08) & 0xff) / 255.0, B: Double((hex >> 00) & 0xff) / 255.0 ) self.init( red: components.R, green: components.G, blue: components.B, alpha: alpha ) } 正确代码:
convenience init(hex: Int, alpha: CGFloat = 1.0) { let components = ( R: CGFloat((hex >> 16) & 0xff) / 255.
概述 “异常”通常是一个主观的判断,什么样的数据被认为是“异常”的,需要结合业务背景和环境来具体分析确定。
实际上,数据通常嵌入在大量的噪声中,而我们所说的“异常值”通常指具有特定业务意义的那一类特殊的异常值。噪声可以视作特性较弱的异常值,没有被分析的价值。噪声和异常之间、正常数据和噪声之间的边界都是模糊的。异常值通常具有更高的离群程度分数值,同时也更具有可解释性。
在普通的数据处理中,我们常常需要保留正常数据,而对噪声和异常值的特性则基本忽略。但在异常检测中,我们弱化了“噪声”和“正常数据”之间的区别,专注于那些具有有价值特性的异常值。在基于相似度的方法中,主要思想是异常点的表示与正常点不同。
基于距离的度量 基于距离的方法是一种常见的适用于各种数据域的异常检测算法,它基于最近邻距离来定义异常值。 此类方法不仅适用于多维数值数据,在其他许多领域,例如分类数据,文本数据,时间序列数据和序列数据等方面也有广泛的应用。
基于距离的异常检测有这样一个前提假设,即异常点的 近邻距离要远大于正常点。解决问题的最简单方法是使用嵌套循环。 第一层循环遍历每个数据,第二层循环进行异常判断,需要计算当前点与其他点的距离,一旦已识别出多于 个数据点与当前点的距离在 D D D之内,则将该点自动标记为非异常值。这样计算的时间复杂度为 O ( N 2 ) O\left(N^{2}\right) O(N2),当数据量比较大时,这样计算是及不划算的。 因此,需要修剪方法以加快距离计算。
基于单元的方法 在基于单元格的技术中,数据空间被划分为单元格,单元格的宽度是阈值D和数据维数的函数。具体地说,每个维度被划分成宽度最多为 D 2 ⋅ d \frac{D}{2 \cdot \sqrt{d}} 2⋅d D单元格。在给定的单元以及相邻的单元中存在的数据点满足某些特性,这些特性可以让数据被更有效的处理。
以二维情况为例,此时网格间的距离为 D 2 ⋅ d , \frac{D}{2 \cdot \sqrt{d}}, 2⋅d D, 需要记住的一点是, 网格单元的数量基于数据空间的 分区, 并且与数据点的数量无关。这是决定该方法在低维数据上的效率的重要因素, 在这种情况下,网 格单元的数量可能不多。另一方面, 此方法不适用于更高维度的数据。对于给定的单元格, 其 L 1 L_{1} L1 邻居 被定义为通过最多1个单元间的边界可从该单元到达的单元格的集合。请注意,在一个角上接触的两个单
特定单元格及其 L 1 L_{1} L1 和 L 2 L_{2} L2 邻居集。显然, 内部单元具有8个 L 1 L_{1} L1 邻居和40个 L 2 L_{2} L2 邻居。然后, 可以立即观察到以下性质:
经常遇到处理时间与获取当前时间,之前记录了一版Scala版本的,现在记录一下Python版本的:
Tip: 导入类
import time import datetime 一.获取时间 1.获取当前时间
now = datetime.datetime.now() print now print now.year print now.month print now.day print now.hour print now.minute print now.second print now.microsecond 2.获取指定时间
这里的 format = '%Y%m%d' 需要根据自己的时间格式进行自定义修改。
startdate = datetime.datetime.strptime(startdate, '%Y%m%d') print startdate.year print startdate.month print startdate.day print startdate.hour print startdate.minute print startdate.second print startdate.microsecond 二.获取时间戳 1.获取当前时间时间戳
t = time.time() #秒级: print int(t) #毫秒级: print int(round(t * 1000)) #微秒级: print int(round(t * 1000000)) 2.
pandas中scatter_matrix函数 from pandas.plotting import scatter_matrix attributes = ["median_house_value", "median_income", "total_rooms", "housing_median_age"] scatter_matrix(housing[attributes], figsize=(12, 8)) plt.show() pandas中scatter_matrix函数,它会绘制出每个数值属性相对于其他数值属性的相关值。如果pandas将每个变量都与自身相对,那么主对角线将全都是直线,这样毫无意义,所以取而代之的方法是,Pandas在这几个图中显示了每个属性的直方图。
scatter_matrix(frame, alpha=0.5, c,figsize=None, ax=None, diagonal='hist', marker='.', density_kwds=None,hist_kwds=None, range_padding=0.05, **kwds)
frame:(DataFrame),DataFrame对象alpha:(float, 可选), 图像透明度,一般取(0,1]figsize: ((float,float), 可选),以英寸为单位的图像大小,一般以元组 (width, height) 形式设置ax:(Matplotlib axis object, 可选),一般取Nonediagonal:({‘hist’, ‘kde’}),必须且只能在{‘hist’, ‘kde’}中选择1个,’hist’表示直方图(Histogram plot),’kde’表示核密度估计(Kernel Density Estimation);该参数是scatter_matrix函数的关键参数,下文将做进一步介绍marker:(str, 可选), Matplotlib可用的标记类型,如’.’,’,’,’o’等density_kwds:(other plotting keyword arguments,可选),与kde相关的字典参数hist_kwds:(other plotting keyword arguments,可选),与hist相关的字典参数range_padding:(float, 可选),图像在x轴、y轴原点附近的留白(padding),该值越大,留白距离越大,图像远离坐标原点kwds:(other plotting keyword arguments,可选),与scatter_matrix函数本身相关的字典参数
Windows Server 2019服务器之DHCP服务搭建图文教程 1、首先将服务器的IP地址设置为"静态IP地址";否则到选择服务器角色那一步勾选"DHCP服务器"会弹出一个"添加角色和功能向导"的提示框,点击该提示框的"添加功能"按钮就会弹出一个"验证结果"的问题框
解决该问题框的办法就是将服务器的IP地址设置为"静态IP地址",该问题也可以在进行到这一步的时候再解决,设置"静态IP地址"如下图所示:
2、点击"开始菜单",选择"服务器管理器"
3、选择"添加角色和功能"
4、在弹出的页面中直接点击"下一步"
5、选择"基于角色或基于功能的安装"并直接点击"下一步"
6、选择"从服务器池中选择服务器"选项然后从下面的服务器池中选择自己的服务器,最后直接点击"下一步"
7、在服务器角色中先点击一下"DHCP服务器",然后在弹出的"添加角色和功能向导"面板中,点击"添加功能"
8、第7步完成以后"DHCP服务器"前面的复选框才会被打上√,然后点击"下一步"
9、直接下一步
10、直接下一步
11、本步骤的操作如下图所示:
12、安装过程中的进度条,等待安装完成
13、点击关闭
14、安装完所需的角色和功能后再服务器管理器里面会有如下图所示的提示,根据提示完成相应的配置
15、点击第14步中的"完成DHCP配置"会弹出如下的提示框,直接点击提交
16、打开DHCP配置界面来配置相关的DHCP参数,打开DHCP配置界面的方式有如下两种:
(1)第一种:
(2)第二种:
17、打开DHCP配置台后按下图所示"新建作用域",弹出界面直接"下一步"
18、定义DHCP地址池的名称并点击"下一步"
19、新建"IP地址范围"并点击下一步
20、输入需要排除的IP地址范围并点击"添加",最后点击"下一步"
21、设置IP地址的租约期限并点击"下一步"
22、直接"下一步"
23、添加DHCP地址池的"网关"并点击"添加"按钮,最后点击"下一步"
24、输入DNS服务器的IP地址添加并点击"下一步"
25、添加WINS服务器的IP地址,没有可以先不管
26、直接下一步
27、点击完成
、
28、至此,DHCP服务搭建完成,并可以在下图所示地方进行更改或更详细的设置
计算机软考中级科目包含:系统集成项目管理工程师、信息系统监理师、网络工程师、软件评测师、软件设计师、多媒体应用设计师、嵌入式系统设计师、电子商务设计师、数据库系统工程师、信息系统管理工程师、信息安全工程师。
软考中级里最容易考的应该算系统集成项目管理工程师,信息系统监理师这两个资格项目了。内容偏管理。技术性没那么强,比较适合新手,也是比较热门的科目。
其次,网络工程师以及软件设计师报考的人也很多,难度也不会很大,偏向于网络工程和软件设计专业的考生报考。
由于每个人的知识基础不同,学习能力也不一样。因此,建议大家根据自己的爱好和具体情况来报考。
提点备考建议
第一:确定备考时间不要不重视备考时间,因为它决定了你是否可以理解完教材,看完资料,做完测试题,做完模拟题。一般软考自学的话备考时间建议是4-5个月,也就是将近半年的时间,尤其是对没有什么基础的人来说,越充分的备考时间越有把握。软考的书籍知识点是相当的多的。
第二:选好学习教材其实这个说的有点废话,一般的教材都是官方教材。但是注意的是教材版本,尤其是注意一下教材是否有改版。辅导用书官方有的话看官方,官方没有的话最好去实体书店看看,做下具体的对比。
第三:选择是自学还是培训这个主要是看你自己拿证的需求以及对时间的重视程度。如果有大把的时间去学习,而且也有计算机基础,技术也比较OK的话,可以选择自学。如果是为了什么找工作,跳槽一类的还有就是公司需要这种就可以选择培训,因为通过率会提高,以保证能一次通过。
第四:做好备考计划无规矩不成方圆,无计划也不能成功。制定计划最好是按照小目标到大目标的计划来,小目标可以是一天看几页书,一天理解几个知识点或者是一天做几道试题,大目标就是一个月把教材读完,2个月理解完所有考点等。
第五:历年真题一定要重视历年真题是很重要的,做完之后反复琢磨,了解出题思路,题目背后涉及的知识点以及查漏补缺。软考最重要的就是教材和历年真题了。再加上平时的题海战术,通过问题应该不大。
需要薅资料的小伙伴戳评论~
1.先让你的手机与你的电脑进行多媒体的连接
2.首先找到你的Android的SDK目录,然后进入platform-tools目录下,然后shift+鼠标右键,选择在此处打开cmd或Powershell窗口,然后执行adb shell命令即可
3.然后我们在手机中随便找一个图片并查看其保存的位置如图
4.我们根据查询到的位置去寻找这个图片
上图中的内部存储路径一般是/storage/emulated/0(通过代码:Environment.getExternalStorageDirectory().getPath()可以得到)
然后我们进入到对应目录下就可以找到它了
系列文章目录 文章目录 系列文章目录前言一、目标检测目标检测中几个基础概念边界框(bounding box)锚框(Anchor box)交并比 文本检测 基于目标检测的算法 二、图像分割文本检测基于图像分割的算法 前言 # 引言
自然场景文本检测识别(Scene Text Recognition, STR)是计算机视觉中的一个重要领域。它在图像搜索,即时翻译和机器人导航等应用中有着至关重要的作用:例如识别照片和视频中的标志、路牌、商店名称等。相比于发展成熟的文档文本识别技术(OCR),STR显然更具挑战性。OCR善于识别平面上的白纸黑字,而自然场景中的文本具有复杂的光照、遮挡、角度、字体和3D阴影。
需要大致提及一下目标检测和图像分割基础知识
一、目标检测 目标检测任务,就是在图像中检测出物体的存在、位置与类别。目标检测的主流算法分为两步法和一步法两种。
(1) 两步法
在两步法中,我们需要首先找出目标存在的区域,再将该区域的内容识别出来。我们也可以理解为从一张大图片中先截出各个目标的小图片,再对小图片做图像分类任务。但实际操作中,由于检测目标的存在位置与小图片的识别都需要多层卷积神经网络得到的语义信息,因此这两个任务可以共享一个骨干卷积神经网络,得到了卷积层语义特征后,再分别用于后续的子任务。
在检测目标存在和位置的任务中,我们需要输出矩形目标框的位置,通常使用预设锚框的方法。我们对卷积层上的每个像素点,预设好几个不同大小和长宽比的目标框提案,我们称之为锚框。在Faster RCNN中,作者使用了三种大小和三种长宽比,一共九种锚框。这些锚框代表着我们预设的目标可能存在的区域。在骨干网络的基础之上,我们预测每个锚框对应于目标或背景的二分类概率和锚框相对于真实目标框的位置偏差。例如,Faster RCNN中额外增加3x3和1x1卷积层,最终的1x1卷积层使用6N个卷积核,N=9为锚框的种类数。对于每一个锚框,我们分别输出该锚框是目标和背景的概率(2N),该锚框与真实锚框中心位置在x和y方向的偏差(2N),和该锚框与真实锚框长和宽的偏差(2N)。拥有这些信息之后,我们便可以取概率大的锚框并修正其位置大小作为模型的预测结果。另外,除了预设锚框的方法以外,还可以直接预测每个像素点到目标框上下左右的距离。
在得到了目标所在区域后,我们需要将该区域输入到识别网络做图像分类。然而,由于图像识别网络通常需要固定长宽的输入窗格,而目标区域的形状千差万别,我们需要将目标区域通过ROI Pooling或ROI Align转化为符合识别网络要求的大小。在这一过程中,我们通常保持目标区域的纵横比不变,确定缩放比例使得目标区域的长边与窗格的短边对齐,对于目标区域短边的方向则通过补零以对齐窗格。假设原目标区域比窗格大,在ROI Pooling中,窗格中的每一个格点对应原目标区域中多个格点,我们用极大值或平均值聚合再用极大值或平均值来聚合这多个格点的值;在ROI Align中,我们先将窗格中的格点坐标线性映射到原目标区域,由于映射后的点很可能不在目标区域的格点上,我们使用插值法得到该位置的值。
目标检测中几个基础概念 边界框(bounding box) 检测任务需要同时预测物体的类别和位置,因此需要引入一些跟位置相关的概念。通常使用边界框(bounding box,bbox)来表示物体的位置,边界框是正好能包含物体的矩形框,如 所示,图中3个人分别对应3个边界框。
注意
在阅读代码时,请注意使用的是哪一种格式的表示方式。 图片坐标的原点在左上角,x轴向右为正方向,y轴向下为正方向。 锚框(Anchor box) 锚框与物体边界框不同,是由人们假想出来的一种框。先设定好锚框的大小和形状,再以图像上某一个点为中心画出矩形框。在下图中,以像素点[300, 500]为中心可以使用下面的程序生成3个框,如图中蓝色框所示,其中锚框A1跟人像区域非常接近。
在目标检测模型中,通常会以某种规则在图片上生成一系列锚框,将这些锚框当成可能的候选区域。模型对这些候选区域是否包含物体进行预测,如果包含目标物体,则还需要进一步预测出物体所属的类别。还有更为重要的一点是,由于锚框位置是固定的,它不大可能刚好跟物体边界框重合,所以需要在锚框的基础上进行微调以形成能准确描述物体位置的预测框,模型需要预测出微调的幅度。在训练过程中,模型通过学习不断的调整参数,最终能学会如何判别出锚框所代表的候选区域是否包含物体,如果包含物体的话,物体属于哪个类别,以及物体边界框相对于锚框位置需要调整的幅度。
交并比 文本检测 基于目标检测的算法 这一类算法在骨干卷积网络的基础上,增加卷积层提出文本框提案,再执行两个子任务:判断提案对应于文本的概率和回归调节正样本提案的位置。文本框提案既可通过预设锚框的方式(如PRPN,TextBoxes++),也可通过直接预测的方式(如EAST,ABCNet)。相比于常规的目标检测,文本目标通常为长条形、具有较大的纵横比,而且可能存在旋转歪斜的情况。因此,此类算法通常使用扁平竖高的文本框、旋转文本框或者直接使用多边形文本框,从而可以判别歪斜的文本。
RRPN
TextBoxes++
EAST
ABCNet
例如,在TextBoxes++中,作者预设了一系列长宽比为1,2,3,5,1/2,1/3,1/5的锚框以刻画不同形状的文本。在骨干网络的基础上,模型增加了卷积层输出每个位置上每个锚框对应于文本的概率和位置回归。图中的绿色和黑色虚线都是预设的锚框,绿色对应于正例而黑色对应于负例。在对正例做位置回归时,模型同时执行两个任务,一个是计算最小的包含文本的四边形(黄色实线)的顶点坐标相对于锚框的位置偏移,如图中红线所示;另一个是计算最小的包含文本的水平矩形(绿色实线)相对于锚框的位置偏移。这两个任务可以用于不同的应用。
二、图像分割 图像分割任务的与目标检测非常类似,目的在于找出图片中的各种目标。然而不同之处在于,目标检测需要输出矩形目标框,而图像分割需要找出所有对应于相同目标的像素点。
图像分割任务同样需要卷积神经网络输出的深层语义特征,因此它通常也在骨干卷积网络的基础上,增加一个任务。以Mask RCNN为例,模型在识别网络增加一个子任务,用少量卷积层,对每一个目标类生成一个二值的mapping,判断每一个像素点是否属于该目标类。模型最后采用识别网络的识别结果类对应的mapping作为图像分割任务的输出。
文本检测基于图像分割的算法 第二类算法的研究者认为,使用预设形状的文本框无法很好地描述某些特殊形状的文本(如纵横比过大或者弧形)。他们受图像分割工作的启发,另辟蹊径,先从像素层面做分类,判别每一个像素点是否属于一个文本目标和它与周围像素的连接情况,再将相邻像素结果整合为一个文本框。这种做法可以适应任何形状和角度的文本,典型代表有pixelLink,CRAFT等。
pixelLink
CRAFT
由于场景文字的大小形状的多样,使用基于分割的检测方法往往更好,但是大部分基于分割的方法需要复杂的后处理将像素级别的结果组合成文字行,在预测时开销往往很大。例如PSENet使用连续尺度扩张的方式后处理;LSAE计算像素之间的特征距离来聚类。这里具体介绍一下DB net 网络结构。
大部分检测模型用上图的方式做后处理(蓝色箭头)。第一种,设置一个固定的阈值,把分割图转化成二值化图,然后用一些启发式的方法例如聚类把像素处理成文字行;而作者的方法(红色箭头),把二值化的操作放到网络里面同时优化,这样每个像素点的阈值都可以自适应地预测,这样就可以更好地区分前景与背景。常规的二值化方法是不可微的,DB提出了Differentiable Binarization,一种近似的方法来做二值化,这种方法在与分割网络一起使用时是完全可微的。
DB module有四个优点:
1.作者的模型在5个基准数据集上表现得更好,包括处理横向、纵向和卷曲文字。
2.作者的模型比之前的方法快得多,得益于DB可以生成高可靠的二值图,显著地简化了后处理。
搞了半天 是父工程没加dependencyManagement标签
添加上去之后就好了
为什么要使用RestTemplate?
随着微服务的广泛使用,在实际的开发中,客户端代码中调用RESTful接口也越来越常见。在系统的遗留代码中,你可能会看见有一些代码是使用HttpURLConnection来调用RESTful接口的,类似于下面这样:
URL url = ... // 打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
try {
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
// 发送数据...
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(conn.getOutputStream(), "utf-8"));
bw.write(str);
// 接收数据 ...
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "utf-8"));
String line = null;
while ((line = br.readLine()) != null) {
...
}
} finally {
conn.disconnect();
}
从上面的代码可以看出,使用HttpURLConnection调用RESTful接口是比较麻烦的,假如要调用30个接口,每个接口都使用类似于上面的代码 进行调用,那简直是一场灾难(写这么多无聊的样板代码,内心绝对是崩溃的)。有人可能会想,将常用的RESTful操作(例如GET、POST、DELETE)封装成工具类,再调用不是也可以吗!这样做确实可行,但是要封装成通用的工具类不是那么简单的(需要一定的经验)。调用RESTful接口,还有另外一种选择:Apache HttpComponents。虽然使用它发送HTTP请求确实挺方便的,但是使用它调用RESTful接口好像也挺麻烦的!
直到我遇到了RestTemplate,世界顿时都明亮了,腰也不酸了,腿也不疼了,一下子就对接好了10个RESTful接口。写的代码可能变成是这样子的:
RestTemplate template = ...
// 请求地址
点击蓝字|关注我们
在前几篇关于JMeter的文章中,分享了关于JMeter基础操作的技术点,在日常的测试工作中,除了基础的操作,还有很多种测试情况。
本文,再给刚入门JMeter测试的测试人员介绍一种【接口信息依赖】的情况。
比如,需要测试两个HTTP请求,用JMeter的HTTP组件发送了一个请求A,A种返回的参数X是请求B的请求参数。
用手工的方式解决,先对请求A返回的参数X做记录,然后在手动的添加到请求B中。但是这里就有弊端了,如果参数都是动态的,那每次手工调试会降低效率。所以一般我们不会用手工的方式做处理。
这个时候,我们就要用到【正则表达式提取器】
正则表达式提取器
什么意思呢?
JMeter中给到一个自动传上个接口返回参数的功能-正则表达式提取器。
举个简单的例子,大家都去看过电影,那电影的入场流程是什么样子呢?
如图,用技术风格理解,可以这样解释,
你(客户端)先给影院(服务器)票钱(请求A)。
影院(服务器)返给你(客户端)电影票(返回参数)。
你(客户端)拿着电影票(返回参数)给到检票的人(请求B),检票的人验证OK,再返回给你(客户端)票根。
你拿着票根对号入座
而以上这种两个请求直接有参数依赖关系的,就可以用JMeter的正则表达式提取器自动完成。
在JMeter上,如何操作呢?
在【HTTP请求】下加入正则表达式提取器:
分别含义如下:
引用名称,自己取,是应用到请求B中的参数名
正则表达式
()括起来是提取的部分
点代表匹配任何字符串
+表示一次活多次
*表示0次或多次
?表示找到第一个匹配后停止
$1$提取多个时,找到的是第一个,如果数字是2则代表找到的第二个。
然后放到请求B中。
(.+?) 和 (.*?) 的区别:
(.+?)提取1个字符串及以上,不要太贪婪,在找到第一个匹配项后停止;
(.*?)提取0个字符串及以上,要取的值是空值的时候可以取得到。
例如:“test":"",如果要取test的值,使用 (.+?) 匹配不到值。使用 (.*?) 则可以取到test的值为空,写法是: “test":"(.*?)"。
想要学习更多内容,加下方微信,获取JMeter想过视频课哦!
扫码加工程师微信获得
1.主要是以下这个属性 parent=“Theme.MaterialComponents.Light.NoActionBar.Bridge” 使用Light主题name=“android:forceDarkAllowed” 强制关闭 2.完整的代码 <?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Theme.Base" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge"> <!-- Primary brand color. --> <item name="colorPrimary">@color/color_F3F3F1</item> <item name="colorPrimaryVariant">@color/color_F3F3F1</item> <item name="colorOnPrimary">@android:color/black</item> <item name="android:forceDarkAllowed" tools:targetApi="q">false</item> <!-- Secondary brand color. --> <item name="colorSecondary">@color/color_FFC01F</item> <item name="colorSecondaryVariant">@color/color_FFC01F</item> <item name="colorOnSecondary">@android:color/white</item> <!-- Status bar color. --> <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> <!-- Customize your theme here. --> <item name="android:windowBackground">@color/color_F3F3F1</item> <item name="colorControlActivated">@color/color_FFC01F</item> </style> </resources> 3.然后在manifest的application标签下设置android:theme="@style/Theme.Base"
旅游管理系统 自己在跟着视频学习完SSM,SpringBoot时,感觉不实践一下所学的知识一直停留在学习理论阶段,没有真正的会用在项目中,自己一直坚信实践是检验知识学习的有效方式。所以自己跟着视频学习了这个管理系统,总结一下自己的学习过程以及重要知识点。
视频链接: https://www.bilibili.com/video/BV1Nt4y127Jh?p=19
项目简介 技术要求: 后端技术栈:Springboot + mybatis前后端分析:axios、json前端技术栈:Vue、nodejs 前置知识 vue 组件之间的知识springboot + mybatis 知识 开发流程 需求分析库表设计编码(项目环境搭建 + 项目编码)项目调试 需求分析 用户模块:登陆和注册省份模块:一个省份可以有多个景点 CRUD景点模块:一个景点对应多个省份 库表设计 分析系统中有哪些表? —> 表的个数分析系统中表与表之间的关联关系分析每个表中字段(显性字段 隐性字段(业务字段、经验字段)) 数据库建表 用户表 t_user —— 独立表
id、username、password、email 省份表t_province —— 省份表:景点表 === 1:n
id、 name、 tags、 placecounts 景点表 t_place
id、name、picpath、hottime、hotticket、dimticket、placedes、provinceid 数据库名:travels
用户SQL:
CREATE TABLE t_user( id INT(6) PRIMARY KEY AUTO_INCREMENT, username VARCHAR(60), PASSWORD VARCHAR(60), email VARCHAR(60) ) 省份表:t_province
CREATE TABLE t_province( id INT(6) PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(60), tags VARCHAR(80), placecounts INT(4) ) 景点表:t_place
[MenuItem("Tools/根据预设生成物品")] public static void CreateDocTemplate() { //获取事先做好的预设 GameObject templatePrefab = AssetDatabase.LoadAssetAtPath("Assets/Resources/Prefabs/DocTemplate/ResPrefab/Template_doc.prefab", typeof(GameObject)) as GameObject; //读取配置表并且遍历 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("Assets/Resources/StaticXML/docTemp.xml"); XmlNodeList nodeList = xmlDoc.SelectNodes("//docTemp"); int index = 0; foreach (XmlElement xe in nodeList) { index++; string imageUrlStr = xe.GetAttribute("docUrl"); bool canInput = int.Parse(xe.GetAttribute("canInput")) == 1; int inputFieldCount = int.Parse(xe.GetAttribute("inputFieldCount")); if (!canInput || inputFieldCount > 0) { CreatTemplate(index, imageUrlStr, inputFieldCount); } } //保存 AssetDatabase.SaveAssets(); } //生成的预设 private static void CreatTemplate(int index , string imageUrlStr , int inputFieldCount) { //生成的预设储存的路径 string savePath = templatePrefabPath + "
一、SQL语言查询选修了全部课程的学生的学号和姓名。
两种解决途径:
第一种:
我们可以表示为在SC表中某个学生选修的课程数等于C表中课程总数。相应的SQL语言如下:
selectS#,SNAMEfromSwhere S# in(selectS#fromSCgroup by S# --根据Sno分组,统计每个学生选修了几门课程。如果等于C表课程的总数,就是我们要找的S#
having count(*) = (select count(*) from C))--统计C表中共有几门课程
第二种:
问题:查询选修了全部课程的学生的学号和姓名。
可以转换为:查询没有一门课没有被该生选择的学生的学号和姓名。
相应的SQL语言如下:
select S#,SNAME --在 S 表里选 S#,SNAME
fromSwhere not exists --不存在
(select * --课程
fromCwhere not exists --没有
(select * --被该生选择的课程
fromSCwhere SC.S#=S.S# and SC.C#=C.C#)) --相关查询,三个表进行连接
这个查询语句可以这样理解:
查询没有一门课没有被该生选择的学生的学号和姓名。
第一个select 必定是在 S 表里选 S#,SNAME
selectS#,SNAME
fromS
where (不存在)
第二个select 是课程,来自C表)
select *
fromC
where (没有)
第三个select是课程被该生选择,来自SC表)
select *
fromSC
where (SC学号对应S表学号,SC表课程号对应C表课程号)
一. 概念 1. 主体 访问的发起者,并造成了信息的流动或者系统状态的改变。如人,进程,设备等。
2. 客体 包含信息或接收信息的被动接受访问的资源,对客体的访问意味着对其中所包含信息的访问。如文件,设备,信号量,网络节点等。
3. 权限 是否允许主体(s)对客体(o)执行某种动作(a),如果主体可以访问,则为允许(pass);否则为禁止(deny)。权限的概念本质上描述的是一种对主体是否拥有许可的判定,用函数F可以表示为F(s, o, a)={pass/deny}或者F(s, o, a)={1/0}。例如,在Windows系统中,具有管理员权限的用户Alice对注册表执行修改的操作,访问权限=pass;没有管理员权限的来宾用户Guest对注册表执行修改的操作,访问权限=deny。
4. 授权 授权是指将访问权限授予一个主体的行为。该定义至少包含了2个层次的含义:
断言一个主体可以被授予一组特权或者安全属性的行为;
在确定主体拥有对应的访问权限之后,允许主体访问资源的操作行为。
第一个层次的含义描述的是一种授权管理行为,通常需要安全管理员的参与;而第二层含义描述的是一种自动化的访问控制操作行为,是由计算机系统自动实施的。
5. 访问控制 指在鉴别用户的合法身份后,通过某种途径显式地准许或限制用户对数据信息的访问能力及范围,阻止未经授权的资源访问,包括阻止以未经授权的方式使用资源。当主体提出资源访问请求时,系统必须先要确认是合法的主体,而不是假冒的欺骗者,也就是对主体进行鉴别(也称认证)的过程。主体通过鉴别以后,就会获得一个主体标识用来区别其身份,此时系统才能根据预设的访问控制策略来判定主体是否拥有权限对客体执行访问动作。该定义说明,授权管理过程往往发生在访问控制之前,前者是后者的执行依据。
二. 访问矩阵,访问控制列表(ACL),能力列表(CL) 1. 访问矩阵 行对应主体,列对应客体,矩阵元素定义了主体可以对客体执行的访问操作。
2. ACL 记录允许访问客体的主体及允许的访问操作集合,针对客体。
从主体的角度实施权限分配与管理困难。
3. CL 记录主体定义允许访问的所有客体及对应的访问操作,针对主体。
感觉访问控制并不侧重资源产生者,而是侧重访问主体,客体和策略。资源产生者不体现,而体现在制定的策略中。
有学者通过研究提出,ACL方法和CL方法可以结合使用。在分布式系统中,这种混合的方法可以避免重复的用户认证。主要的原理是:由系统中的服务提供对客体的管理,用户如果要访问客体,将在通过认证后获得一个CL,通过使用该CL中描述的主体允许访问服务的能力来访问系统中的服务,服务则可以依据ACL进一步实施细粒度的访问控制。
CL讲真可以通过zxy_ABE实现。一种思路:将发放CL的过程以zxy_CP-ABE的方式写入交易中,用户自行获得CL,访问服务。服务由所有者保管,所有者可以自行实现CL对应的细粒度访问控制,然后发给用户,用户使用自己的CL对之进行解密获取权限。(自黑:没有改变方法的原理,只是提出了一种可行方案,而且实际上没有上链的必要。)
或许可以让服务集群上链?感觉类似知识产权的细粒度保护,GitHub或区块链?区块链实现知识产权的细粒度保护可以研究一下。感觉上链还是不靠谱,讲真没有办法做到我目前方案的非传播性访问控制,也就是如果资源不被允许再授权,放到链上是很难保证这一点的安全的。如果不上链的话服务集群还是要交给第三方保管,那么或许可以选择代理?我们抛开公有链的场景,假设是联盟链or私有链,那么可以选取可信代理进行服务集群的托管?类似工作量证明里的将工作量替换为存储资源?(自黑:没有必要。因为服务对客体的细粒度控制不可能让大家讨论来决定。)
等等,如果访问控制针对的是资源,那么真的没办法控制不被传播;但如果是某种行为或特权,是否可以实现不被传播呢。首先,访问控制是授予主体对资源的读写执行权限,写权限可以让全网验证是否有写权限从而更改资源内容。所以我们要对客体进行分类,客体包括资源,行为,特权,服务等,然后针对性地设想访问控制场景。
So… 我需要上链的场景是什么?
场景:首先,主体是用户,而不是进程和设备等。客体是服务,行为等动态变化的资源(静态资源上链意义不大);其次,授权主体与访问主体可能是跨域的,因而客体和访问策略需要放在网络上传播(或许用访问策略对客体加密?),访问者满足访问策略获得权限,可以对客体执行相应操作提交给所有者,所有者可对客体进行相应的操作,从而使后续得到该客体的主体都能得到最新的客体。
如果将客体的更新过程交给区块链来完成,即区块链中每个节点都保存着对客体的所有合法操作过程和最新结果,访问主体在访问客体时能够得到最新客体,区块链使得对客体的操作过程可追溯,且需多方验证超过51%才被全网认可。
上链的价值需要体现在对资源的操作需要多方认可才得以执行,那么适用的具体场景—多方协作,所以用区块链做GitHub的中心化托管会更好吗?知识产权目前的问题是什么?(Q1)
我们是否可以将权限直接加到资源上,比如多根访问树之类的?(Q2)
是否可以跳出区块链的局限,将区块链中用某个技术解决某个问题的思想应用到我们需要的场景,重新建构安全框架?-总结一下区块链各技术意义所在,是否缺一不可/可以改进。(Q3)
4. ACL与CL实现技术的特点对比 了解到将权限分配给主体和客体带来的某些方面的便利和另一些方面的困难,两种方法没有绝对的好坏,因此在设计方案时,应该根据场景权衡利弊。
三. 访问控制模型 1. 自主访问控制模型(DAC model) 将用户权限与用户直接对应-较高访问效率与灵活度
客体拥有者持有对该客体的完全控制权
权限传播可控性差
用户可以自主地把自己所拥有的客体的访问权限授予用户组其他用户,例如Linux和Windows系统中客体拥有者对自己所属用户组进行授权管理的操作。
有些场景是需要权限可传播的,会带来极大的灵活性,但对于某些场景就是灾难,因此需要尽量做到"可控”。
2. 强制访问控制(MAC) 依据主体和客体的安全级别实施权限管理
通过控制信息的单向流动来防止信息扩散
3. 基于角色的访问控制(RBAC) 上述两者对于权限的授权变动工作繁琐,且容易引发安全漏洞
角色是指一个可以完成一定事务的命名组。事务是指一个完成一定功能的过程。用户能被指派到哪些角色受时间,地点,事件等诸多因素的影响。
1、shift+G 到达最后一行
2、gg 到达第一行
3、ctrl+b 向下
4、ctrl+f 向上
5、?xxx 查找xxx,shift + n上一个,n下一个
6、tail -f log/log***.txt 自动打印文件尾
https://stackoverflow.com/questions/56238356/understanding-esmoduleinterop-in-tsconfig-file
#import <objc/message.h> 或 #import <objc/runtime.h>
出现了:
Too many arguments to function call, expected 0, have 2
解决办法: tagres -> Build sSettings -> 搜索msg -> Enable... (YES 改为 NO) 在运行就好了
正常调用:
[self test];
[SortViewController hh];
发送消息:
objc_msgSend(self,@selector(test));
objc_msgSend(self,sel_registerName("test"));
objc_msgSend(objc_getClass("SortViewController"),sel_registerName("hh"));
+(void)hh{
NSLog(@"-----TEST222----" );
}
-(void)test{
NSLog(@"-----TEST----" );
}
instance对象、class对象、meta-class对象在内存中都存储了一个isa指针。
1 什么是isa?
2 如何发送消息?
3 给instance对象发送消息,instance对象又是如何找到存储在class对象中的实例方法呢?
4 给class对象发送一个消息,class对象又是如何找到存储在meta-class对象中的类方法呢?
5 如何进行方法交换?
6 Imp是什么?
7 如何进行字典转模型?
8 runtime 通过方法交换做数组字典的防护,防越界和插入空值?
偷张神图镇楼:
关于isa ,runtime,等等自己去深挖吧😄
mysql视频教程栏目介绍解决Mysql 5.6索引失效和数据不准确问题
相关免费学习推荐:mysql视频教程
背景在一次进行SQl查询时,我试着对where条件中vachar类型的字段去掉单引号查询,这个时候发现这条本应该很快的语句竟然很慢。这个varchar字段有一个复合索引。其中的总条数有58989,甚至不加单引号查出来的数据不是我们想要的数据。
使用的是mysql 5.6版本,innoDB引擎 实际情况如下
下面我们来看一下执行的结果
在上面的描述中我们还得注意就是,你的where条件的字符串不加单引号必须是全数字。不然就会报错
还有可能查出来的数据不是我们想要的数据。如下图
分析从执行结果来看,使用了单引号的走了对应的索引。没有使用单引号的没有走索引,进行了全表扫描。
为什么会这样呢? mysql的优化器怎么不直接进行类型转换呢?在SQL语句中单引号的引入也就是代表这个类型是字符串数据类型CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM,和 SET。。
不加单引号也就代表这是一个字符串之外的类型,如int,bigDecimal类型等
如果给一串有字幕和特殊符号的字符串不加单引号,后果就是类型转换失败导致SQl不能执行。
如上图所述:1054 - Unknown column '000w1993521' in 'where clause', Time: 0.008000s
我们先来看一下一条SQL的执行过程
(网图)我们先得出结论:如果对索引字段做函数操作(本例是cast函数做了隐式的转换),可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。(https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l5AwT0xu-1607244327891)(http://note.youdao.com/yws/res/23689/CE6F785994E6476D816B23787CE65217)]
意思也就是:请注意,如果您使用BINARY,CAST()或CONVERT()转换索引列,则MySQL可能无法有效使用索引。
查出来的数据不准确,也是因为隐式转换,转换后导致数值类型不一样,导致不等变为相等。
隐式转换
1. 产生条件
当操作符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。则会发生转换隐式
发生隐式转换的条件:两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <=> 对两个 NULL 做比较时会返回 1,这两种情况都不需要做类型转换
两个参数都是字符串,会按照字符串来比较,不做类型转换
两个参数都是整数,按照整数来比较,不做类型转换
十六进制的值和非数字做比较时,会被当做二进制串
有一个参数是 TIMESTAMP 或 DATETIME,并且另外一个参数是常量,常量会被转换为 timestamp
有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整数,会将整数转换为 decimal 后进行比较,如果另外一个参数是浮点数,则会把 decimal 转换为浮点数进行比较
所有其他情况下,两个参数都会被转换为浮点数再进行比较
2. 分析实际遇到的情况
python中魔术方法:关于__getattr__、__setattr__和__getattribute__ __getattr____getattribute____setattr__ getattr __getattr__比较好理解~
首先明白__getattr__是什么。
**getattr()**函数会在你试图读取一个不存在的属性时,引发AttributeError异常。
下面看一段代码段。
class testclass: count = 0 name = [] def __init__(self,name,count): self.count += count self.name = name def __getattr__(self, item): print('无此项,出错') m = testclass('wang',100) m.addr m.addr='上海' print(m.name) print(m.addr) 为了简化代码,就没有涉及__del__(self)等,比较好理解,这个就简单定义了一个类,里面有name和count两个属性,但是没有addr,这时候运行的结果如下:
无此项,出错 wang 上海 这个很好理解接下来看__getattribute__。
getattribute getattribute() 是在查找真正要访问的属性之前就被调用了,无论该属性是否存在。可以跟__getattr__有个区别了吧(在定义层面)。
使用__getattribute__()要特别注意,因为如果你在它里面不知何故再次调用了__getattribute__(),你就会进入无穷递归。为了避免这种情况,如果你想要访问任何它需要的属性,应该总是调用祖先类的同名方法:比如super(obj, self).getattribute(attr)。
上面这话怎么理解呢?看下面这段代码:
class testclass: count = 0 name = [] def __init__(self,name,count): self.count += count self.name = name def __getattr__(self, item): print('无此项,出错') def __getattribute__(self, item): return 1 m = testclass('wang',100) m.
效果图如下 1、 点击全选,按钮全部被选中,取消全选,全部取消。 2、点击单选,单选全部被选中,全选才会被选中。 3、点击加减,总数量发生变化,小计发生变化,只有被选中,才会算入合计。 4、点击加入购物车,多一条商品。 5、点击删除,删除商品。 代码如下 HTML代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>小米购物车最后修改,打死不改了</title> <link rel="stylesheet" href="css/index.css"> <link rel="stylesheet" href="http://at.alicdn.com/t/font_2329432_13y8j7gturbp.css"> <script src="js/data.js"></script> <script src="js/index.js" defer></script> </head> <body> <div class="page-main"> <div class="container card_wrap"> <table> <thead> <tr> <th class="allcheck"> <i class="iconfont icon-duihao allBtn"></i> 全选 </th> <th class="col_img"> </th> <th class="col_name">商品名称</th> <th class="col-price">单价</th> <th class="col-num">数量</th> <th class="col-total">小计</th> <th class="col-action">操作</th> </tr> </thead> <tbody> </tbody> </table> <div class="section clearfix"