VggNet网络结构详解

VggNet网络结构详解 #图像识别网络结构详解 一、概述 VGG在2014年由牛津大学著名研究组VGG (Visual Geometry Group) 提出,斩获该年ImageNet竞赛中 Localization Task (定位任务) 第一名 和 Classification Task (分类任务) 第二名。 二、网络详解 VGG16相比AlexNet的一个改进是采用连续的几个3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5)。对于给定的感受野(与输出有关的输入图片的局部大小),采用堆积的小卷积核是优于采用大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且代价还比较小(参数更少)。 简单来说,在VGG中,使用了3个3x3卷积核来代替7x7卷积核,使用了2个3x3卷积核来代替5*5卷积核,这样做的主要目的是在保证具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果。比如,3个步长为1的3x3卷积核的一层层叠加作用可看成一个大小为7的感受野(其实就表示3个3x3连续卷积相当于一个7x7卷积),其参数总量为 3x(9xC^2) ,如果直接使用7x7卷积核,其参数总量为 49x(C^2) ,这里 C指的是输入和输出的通道数。很明显,27x(C^2)小于 49x(C^2),即减少了参数;而且3x3卷积核有利于更好地保持图像性质。下表1为各个网络配置,表2为VGG-19网络各层详细情况,图1为VGG-16结构图 表1:各个网络的配置 表2:VGG-19网络各层详细 图1 VGG-16网络结构图 三、VGGNet改进点总结 1 使用更小的33卷积核,和更深的网络。两个33卷积核的堆叠相对于55卷积核的视野,三个33卷积核的堆叠相当于77卷积核的视野。这样一方面可以减少参数(3个堆叠的33结构只有77结构参数数量的(333)/(77)=55%);另一方面拥有更多的非线性变换,增加了CNN对特征的学习能力。 2 在VGGNet的卷积结构中,引入1*1的卷积核,在不影响输入输出维度的情况下,引入非线性变换,增加网络的表达能力,降低计算量。 3 训练时,先训练级别简单(层数较浅)的VGGNet的A级网络,然后使用A级网络的权重来初始化后面的复杂模型,加快训练的收敛速度。 4 采用了Multi-Scale的方法来训练和预测。可以增加训练的数据量,防止模型过拟合,提升预测准确率。 注:Single-Scale: 是指把一张图片送到CNN; Multi-Scale:一般会送到CNN十张图片:比如高宽是256Χ256的图片,Multi-Scale会在它的四个角以及中心进行裁剪 ,将其裁剪为10张 224Χ 224 的图片,然后再进行翻转,总共十张图片,最后全部送到 CNN。 四、VGGNet存在问题 唯一的不足是,在进行反向传播时,中间的卷积层可能会导致占用更多的内存。 五、VGG代码 代码如下(示例): import torch.nn as nn import torch __all__ = [ 'VGG', 'vgg11', 'vgg11_bn', 'vgg13', 'vgg13_bn', 'vgg16', 'vgg16_bn', 'vgg19_bn', 'vgg19', ] model_urls = { 'vgg11': 'https://download.

雪花算法id长度_SnowflakeId雪花ID算法,分布式自增ID应用

概述 snowflake是Twitter开源的分布式ID生成算法,结果是一个Long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的序列号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。 特点: 作为ID,肯定是唯一的;自增,依赖时间戳生成,序列号有序递增;支持非常大的业务ID生成,最大支持2^10=1024个业务节点,同一个节点一毫秒最多生成2^12=4096个ID,41位毫秒级时间可以使用(2^41 - 1)/(1000*60*60*24*365)=69.73,大约70年;实现简单,不依赖于其他第三方组件,甚至都不需要任何import。 结果是一个Long型的ID,64位,结构图如下: 第1位固定是0,表示正数;第2-42共41位表示时间戳,当前时间的时间戳减去开始时间的时间戳;业务节点ID,每个节点固定的值;毫秒内的序列号。 实现 清楚了结构后,就比较好实现了。 41bit-时间戳 当前时间的时间戳减去开始时间的时间戳,左移22位 (ts - beginTs) << timestampLeftOffset 10bit-工作机器ID 自定义的业务节点ID,固定的值,左移12位 workerId << workerIdLeftOffset 12bit-序列号 毫秒内序列号,以此递增,如果溢出就阻塞到下一秒从0开始计数 // 同一时间内,则计算序列号if (ts == lastTimestamp) { // 序列号溢出 if (++sequence > maxSequence) { ts = tilNextMillis(lastTimestamp); sequence = 0L; }} else { // 时间戳改变,重置序列号 sequence = 0L;}lastTimestamp = ts; /** * 阻塞到下一个毫秒 * * @param lastTimestamp * @return */private long tilNextMillis(long lastTimestamp) { long ts = System.

xml突然变成空白_丑小鸭如何变成白天鹅:JavaScript崛起史

神译局是36氪旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外的新技术、新观点、新风向。 编者按:很少有人能想到从前用来玩的语言会变成一个专业平台。可以肯定的是,JavaScript取得的成功是被迫的。JavaScript这一生从来就没有人喜欢它。其他人拥护的是Java applet,然后是Flash,甚至宠幸Silverlight。JavaScript直面所有这些挑战者,并且击败了所有人。这是一个丑小鸭逆袭成功的童话故事。原文发表在Medium上,作者是Matthew MacDonald,标题为:How JavaScript Grew Up and Became a Real Language 等待人生机会的匹诺曹[Pixabay ] 如果你在1999年做出预测,说20年后,JavaScript将成为全球最受欢迎语言之一的话,那么要么你正被人尊为通灵的巫师,要么就是脑子有问题了。 世纪之交那时候的JavaScript不仅做不到专业语言能做的事情,甚至还都没有被设计成一种严肃的编码工具。毕竟,需要开发Web应用的开发者已经有了他们更喜欢使用的成熟工具。那就是Java,通过applet嵌入系统的方式。 但是在1995年,网络浏览器的先驱Netscape意识到,他们需要给其他人一个更简单的选择。他们当时的处境艰难——在跟微软进行市场竞争,跟Sun Microsystems的重大战略协作关系濒临破裂,而且时间紧迫。他们聘请了Brendan Eich,要他在一个几乎不可能的时间期限内创建一门新语言。他在10天之内完善了JavaScript的第一个版本,正好赶上把它植入到这个漂亮的浏览器里面: Netscape 2:JavaScript的首次登台 Eich真正想做的是开发出像Scheme那样的学术性编程语言的浏览器托管版。但是Netscape的想法不一样。他们想要一种看起来像Java的语言,即便它的行为有所不同。Java和JavaScript的名称类似,这引起了大家多年的困惑。 营销要求我要把它弄得像Java,但又不要吹过头。就是让它看起来感觉像是Java的小兄弟,对吧? 弄成Java的伙计。 — Brendan Eich 翻转按钮时代 刚开始那5年,对于那些还没为用Java编程做好准备的人来说,JavaScript是一门填补空白的工具。其受众包括业余爱好者以及急着想做点简单东西的人。Web设计师也是受众之一——这是一群新的技术工作者,他们的工作是让网页的用户界面显得更加时尚和图形化。他们想要的东西比 在专业领域,这是JavaScript的主要工作——做UI的粘合剂,把过度设计的网页结合在一起。每当你需要交互式按钮、弹出菜单、图片特效的时候,你就得用JavaScript。 谁需要翻转按钮?每个人都要。 大约2000年那时候的翻转按钮 不久之后,JavaScript被大量用于世界上最不重要的工作——当鼠标经过时,就把一个图像换成另一个。 尽管认为开发人员会使用代码去发光按钮自动化,然后再把这一代码跟着网页分发出去的想法似乎有些疯狂,但这就是大家一遍又一遍在做的事情。(今天的CSS也提供了这种功能,不过用的是样式设置和动画,而不是预生成的图像文件,这种做法维护性更强。)没几个人预想JavaScript会走得更远。而且,很多编码人员更乐意用服务器端编程语言,这种语言会侵蚀对JavaScript的需求。认为JavaScript可以为应用的业务逻辑提供支撑的想法就像设想要用Excel的宏来取代数据库存储过程一样荒谬。 沙盒的囚徒 今天,当大家批评JavaScript时,通常质疑的是语言本身的局限性——修修补补的OOP(面向对象语言)功能,类型安全性差,笨拙的DOM模型,==跟===傻傻分不清楚等。但些并不是JavaScript早期看似如此糟糕的编程工具的原因。毕竟,有很多丑陋的编程语言因为在合适的时间出现在了合适的位置上而变成了必不可少的语言。(入选名单可以包括BASIC、COBOL、SQL和PHP。)JavaScript是所有Web浏览器均原生支持的唯一语言,就像网站正在统治世界一样,它绝对也是在正确的时间出现在了正确的位置上。 JavaScript的真正局限是沙盒——一个可以让你的代码固定下来的严格控制的环境。沙盒把JavaScript跟桌面世界隔离开了。比方说,JavaScript代码无法直接访问文件系统,显示器或任何硬件。更严重的是,它切断了JavaScript与Web服务器上一切内容的联系,比如存储客户列表和产品目录的数据库以及运行业务逻辑的服务器端代码。JavaScript被迫独自生活,所以毫不奇怪,除了翻转一下网页的按钮以外,JavaScript几乎无所事事。 用XMLHttpRequest 突破牢笼 奇怪的是,有个人却站出来拯救了JavaScript。这个人就是微软,并不是今天的微软,今天的微软拥护在所有操作系统上进行开源开发。但当年的微软与之相反,是赤裸裸的反开源斗士,总是用“拥抱,扩展再扑灭”的理念消耗竞争对手。 这是怎么回事呢?大约在全世界都会对翻转按钮感到疯狂的同时,微软的一个团队正在研究一种使Outlook的Web前端响应速度更快的方法。他们正在开发一个名为Outlook Web Access的产品,这个东西看起来是这样的: 2000年的Outlook Web Access 微软团队的目标不算过分。他们想做一个在浏览器上跑的高效电子邮件阅读器。最重要的是,他们不想每隔几秒钟就刷新一次整个页面。取而代之的是,他们用一种可让网页在后台悄悄检查新邮件的技术。这个目标似乎不是什么惊天动地之举,但是——请记住——那时候Gmail还没被发明出来。实际上,整个Google 公司也才只有几年的历史。 微软团队用了一个叫做XMLHttpRequest 的ActiveX组件来创建了一条小管道。XMLHttpRequest 的基本思想很简单——它为JavaScript代码提供了一种发送Web请求的方法。就像web浏览器可以联系web服务器并发出请求(例如,“嘿,请给我这个网页!”)一样,JavaScript代码也可以用XMLHttpRequest 对象发出自己的请求(例如,“嘿,请给我多几条邮件消息。”)。 突然之间,网页就可以利用Web服务器的所有资源了。需要数据库里面的一些数据?呼叫服务器让它给。需要服务器来执行计算、安全测试,或者对一个超级秘密进行验证检查?也请致电服务器吧。最重要的是,在后台发起呼叫时,页面不会受到干扰。 XMLHttpRequest也不是一点怪异都没有。首先,它的名称就很奇怪,大小写不一致,对于像JavaScript这样大小写敏感的语言来说很是头痛。其次,这个名称似乎表明你的代码会发送和接收XML消息。可现实情况是,消息几乎可以是任何东西——普通文本、HTML块或序列化为JSON的JavaScript对象。但是,最大的问题也许是,XMLHttpRequest 是用ActiveX开发的,这意味着它只能在Windows计算机上运行,并且只能在Internet Explorer中运行。 但这些怪异并不能阻挡JavaScript前进的步伐。在短短几年内,其他浏览器纷纷提供了自己的XMLHttpRequest 实现——代码都用同一个对象,但没有ActiveX的麻烦。 尽管微软开发了XMLHttpRequest,但是他们自己进行Web开发时却没有充分利用好它。他们不愿在基于公共Web的电子邮件系统Hotmail中使用XMLHttpRequest。相反,他们就这么干等,知道Google用XMLHttpRequest 震惊了Web开发界,首先是2004年用来实现Gmail,然后是2005年用来实现Google Maps。这是圣杯的惊鸿一瞥:运行无响应桌面应用的基于Web的程序。 2005年的Google Maps 现代化之路 XMLHttpRequest 是改变JavaScript进程的关键要素。不过,后面还有更多拐点。 多年以来,JavaScript语言一直处于冻结状态。问题在于,领先市场的Web浏览器,Internet Explorer,它的升级节奏是按照操作系统的时标来进行的,也就是说,升级非常缓慢。开发人员被迫要写代码去检查浏览器的版本,还得努力做出实时调整。 在2006年,开发人员想出来一个解决方案,那就是以jQuery 的形式来进行检查。尽管jQuery 在今天已经过时了,但是在10年前,如果你想把时间花在开发功能而不是解决浏览器兼容性问题的话,它就是必不可少的工具。

python力扣刷题记录——1672. 最富有客户的资产总量

题目: 给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i​​​​​​​​​​​​ 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。 客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。 方法一: class Solution: def maximumWealth(self, accounts: List[List[int]]) -> int: m = len(accounts) max_num = 0 if m <= 50: for i in accounts: if len(i) >= 1: total_num = 0 for j in i: total_num += j if total_num > max_num: max_num = total_num return max_num 方法二: 一行代码

b460 win7 usb驱动_【实战系列】B460主板+Intel 10代CPU i5 10400+H630核显完美装WIN7系统...

丁丁1818,精彩呈现,喜欢就分享! WIN7虽然已经停止服务半年了,10代CPU和B460主板也已经上市有一段时间了,但有些用户还是对WIN7系统有需求,所以今天还是有必要讲一下如何用B460主板+Intel 10代CPU i5 10400+H630核显装WIN7系统。如果按照以往装系统的方式装WIN7,会一直卡在登陆LOGO界面进不了部署界面,不管封装的系统镜像还是原版的系统镜像都一样。必须要提前在PE环境里向目标系统注入USB3.1驱动和H630核显驱动才能正常进入部署界面。注入工具我选择系统总裁的驱动总裁2.0尝鲜版,主要是因为有支持intel 10代CPU装WIN7所需的USB驱动和H630驱动,注入时机是在恢复完镜像后立刻在PE里对目标系统注入USB驱动和核显驱动。接下来我演示一下实战操作过程。 开始前先做一下准备工作,此教程使用的是七彩虹B460主板,intel i5 10400CPU,普通SATA固态硬盘,没有独立显卡,重装系统使用的U盘是IT天空定制的512Pro固态U盘。PE系统使用的是IT天空最新版优启通3.5,并提前将U盘制作成PE启动盘,镜像使用本站的Intel3X0主板+AMDRyzenCPU通用WIN7 64位镜像,提前下载好镜像并放到U盘的根目录。 现在新配置的电脑一般默认都关闭了CSM兼容模式,开启了secure boot,所以新配置装WIN7必须要将bios里的secure boot关闭,并将CSM兼容模式开启,才能正常装WIN7系统。我们要先进bios里改一下设置。开机前先插上U盘,开机的同时快速敲击Delete键进入bios界面,各种主板的设置界面可能不同,但是这几个字母是相同的,万变不离其宗。这里是七彩虹主板bios界面,如下图步骤先关闭secure boot。 开启CSM,启动方式默认uefi启动就行。 设置完成后按F10保存并退出。 重启的同时快速敲击F11,七彩虹主板的启动装置选择快捷键是F11。然后选择U盘启动盘,进入PE。 进入PE后,我们按照下图步骤将固态硬盘重新分区格式化。资料很宝贵,分区需谨慎!由于我们启动方式选择的是uefi,所以这里必须将分区表类型设置为GUID,以GPT的方式分区装系统。 分区完成后,按照下图步骤选取前面下载的待安装的WIN7系统镜像,记得不要勾选重启计算机,待会儿恢复完镜像后还有事情要做。 恢复完镜像后,我们紧接着在PE里向目标系统注入USB驱动和核显驱动,注入工具用前面下载的驱动总裁2.0尝鲜版‍,这里注意一下,系统盘符需要自己手动确认,PE里的系统盘符有时候是乱的,目标系统盘符不一定是C,这个要注意一下。 已识别到目标系统需要的几个必要的驱动。 注入完成后重启即可,拔不拔优盘都可以。ES5封装的系统就这么任性。 重启后,进入登录LOGO界面,这里需要等几十秒,然后就能正常部署了。如果没有提前注入驱动的话,那么会卡在这里进不了正常的部署界面。 帅气的ES5部署界面 熟悉的万能驱动7 下图是安装完成后的效果和本次教程的硬件配置截图。 教程完结,打完收工,晒晒真硬件配置。

设计一个采用udp实现数据传输的程序_终于把TCP协议与UDP协议给整明白了

网络编程有三个要素,分别是IP地址、端口号和通信协议,那本文主要讲述的是TCP与UDP这两种通信协议,以及编程的实现。 首先,我们需要了解一下IP地址、端口号、通信协议的相关知识。 一、IP地址 网络中的计算机使用IP地址来进行唯一标识,IP地址有IPv4和IPv6两种类型。IPv4采用十进制或二进制表示形式,十进制是一种比较常用的表示形式,如192.168.1.131,IPv6采用十六进制表示形式,一般不常用。 如何查看IP地址相关信息: 在Windows系统下,打开cmd,输入命令ipconfig,按回车即可查看。在Linux或Mac系统下,打开终端,使用ifconfig命令,按回车即可查看。 二、端口号 端口号是计算机中的应用程序的一个整数数字标号,用来区分不同的应用程序。 0 ~ 1024 为被系统使用或保留的端口号,0 ~ 65535为有效的端口号,也就是说我们要对一些程序定义端口号的时候,要选择1024 ~ 65535范围内的整数数字。 比如,以前学过的MySQL的端口号是3306,SQLServer的端口号是1433,还有Oracle的端口号是1521。 一定要把这些数据库对应的端口号,藏在深深的脑海里,以后在连接数据库的时候,会使用到端口号。 三、通信协议 说的通俗一点,通信协议就是网络通信中的规则,分为TCP协议和UDP协议两种。 第一种:TCP协议 英文名:Transmission Control Protocol 中文名:传输控制协议 协议说明:TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。 举例:打电话,需要双方都接通,才能进行对话。 特点:效率低,数据传输比较安全。 第二种:UDP协议 英文名:User Datagram Protocol 中文名:数据报协议 协议说明:UDP是一种面向无连接的传输层通信协议。 举例:发短信,不需要双方建立连接,But,数据报的大小应限制在64k以内。 特点:效率高,数据传输不安全,容易丢包。 四、三要素关系图与网络模型图 1、网络编程三要素关系图 注:图中端口号、IP地址为演示,并非真实 2、OSI参考模型与TCP/IP参考模型 五、TCP编程 TCP是基于字节流的传输层通信协议,所以TCP编程是基于IO流编程。 对于客户端,我们需要使用Socket类来创建对象。对于服务器端,我们需要使用ServerSocket来创建对象,通过对象调用accept()方法来进行监听是否有客户端访问。 客户端与服务器端图解: 客户端与服务器端实现步骤: 前提:创建一个项目,在项目中创建两个模块(model),一个模块用来放客户端相关代码,一个模块用来放服务器端相关代码。 目录结构如下图 客户端: 1、创建Socket对象,并指定服务器端应用程序的端口号和服务器端主机的IP地址。 2、使用Socket的对象调用getOutputStream()方法来获取字节输出流对象。 3、调用字节输出流的write(byte[] buf)或者write(int b)向服务器发送指定数据。 4、记得关闭流。 服务器端: 1、创建ServerSocket对象,并指定该应用程序的端口号,端口号必须和客户端指定的端口号一样。 2、使用ServerSocket对象的accept()方法来监听客户端发送过来的请求,返回值为Socket对象。 3、调用Socket对象的getInputStream()方法获取字节输入流对象 4、调用字节输入流对象的read(byte[] buf)或read()方法获取数据。 5、记得关闭流。 实例: 客户端向服务器端发送信息,并显示在服务器端。 Client类(客户端) package cn.tkrnet.client; import java.io.IOException; import java.

数据结构基本操作的复杂度汇总

1.顺序表 插入操作时间复杂度 最好O(1),最坏O(n),平均O(n) 移动结点的平均次数n/2 删除操作时间复杂度 最好O(1),最坏O(n),平均O(n) 移动结点的平均次数(n-1)/2 按值查找时间复杂度 最好O(1),最坏O(n),平均O(n) 移动结点的平均次数(n+1)/2 2.单链表 头插法O(n)尾插法O(n)按序查找O(n)按值查找O(n)插入删除 其中插入和删除操作,指定结点O(1),需要从头查找则花费主要用于查找O(n) 3.二叉树 二叉树的遍历 时间复杂度O(n),空间复杂度O(n) 二叉排序树 插入/删除O(n) 4.图 邻接矩阵存储空间 O(n^2) 邻接表存储空间 无向图O(|V|+2|E|),有向图O(|V|+|E|) 十字链表和邻接多重表存储空间 O(|V|+|E|) 广度优先搜索 时间复杂度:邻接表O(|V|+|E|),邻接矩阵O(|V|^2) 空间复杂度:O(n) 深度优先搜索 时间复杂度:邻接表O(|V|+|E|),邻接矩阵O(|V|^2) 空间复杂度:O(n) 求最小生成树时间复杂度 Prim算法:O(|V|^2) Kruskal算法:O(|E|log|E|) 求最短路径时间复杂度 Dijkstra算法:O(|V|^2) Floyd算法:O(|V|^3) 拓扑排序时间复杂度 O(|V|+|E|) 5.内部排序

element ui 中table 单列 超出部分显示省略号

elementui表格超出部分显示省略号 1.el-table是有这个控制属性的::show-overflow-tooltip=“true” <el-table-column prop="address" align="center" header-align="center" label="报修地址" :show-overflow-tooltip='true'> </el-table-column> 官方的版本颜色跟字体有时未必能满足我们的需求,因此需要修改一下 <style> .el-tooltip__popper{max-width:20%;} .el-tooltip__popper,.el-tooltip__popper.is-dark{background:#f5f5f5 !important; color: #303133 !important;} </style> 调整提示框的背景色和字体颜色等

python函数def里面嵌套def_Python的函数嵌套的使用方法

例子: 代码如下: def re_escape(fn): def arg_escaped(this, *args): t = [isinstance(a, VerEx) and a.s or re.escape(str(a)) for a in args] return fn(this, *t) return arg_escaped 函数嵌套 python允许在定义函数的时候,其函数体内又包含另外一个函数的完整定义,这就是我们通常所说的嵌套定义。为什么?因为函数是用def语句定义的,凡是其他语句可以出现的地方,def语句同样可以出现。 像这样定义在其他函数内的函数叫做内部函数,内部函数所在的函数叫做外部函数。当然,我们可以多层嵌套,这样的话,除了最外层和最内层的函数之外,其它函数既是外部函数又是内部函数。 使用方法 代码如下: spam = 99 def tester(): def nested(): global spam print('current=',spam) spam += 1 return nested #注意:打印 print 那行的代码调用是tester()() #而不是tester().nested()

python函数def里面嵌套def_python3的嵌套函数

背景 最近在学python3 嵌套函数 顾名思义,即使在函数中还有函数,实现了函数的多级嵌套 def test1(): age = 10 print(age) def test2(): te = 5 print(age) def test3(): print(te) test3() test1() 输出结果: 10 test2()方法没有被执行,这是因为任意函数在定义完成之后,需要通过函数名来进行引用调用,如果没有调用,那么该函数永远不会执行。 def test1(): age = 10 print(age) def test2(): te = 5 print(age) def test3(): print(te) test3() test2() test1() 输出结果: 10 10 5 还拿上面的例子进行学习。在嵌套函数内部,函数引用变量的时候是一层一层的向外找,同时需要注意代码的上下顺序,被调用的变量不能在调用函数的下方定义 age = 18 def func1(): # age = 20 放在上面 def func2(): print(age) age = 20 #放在下面,其实都是放在func2的上面 func2() func1() 输出结果: Traceback (most recent call last):

Linux虚拟机下普通用户和root用户的切换

1、普通用户切换到root用户 第一步打开Linux虚拟机 可以看到刚开始是普通用户user登录,当你像切换回root用户,你可以敲 su 然后回车,要求输入密码(linux终端输入的密码似乎都不显示)输入密码后回车就进入了root用户. 如图所示: 这样你就会发现你已经从user用户切换到root用户了。 2、root用户切换到普通用户 当你想切换回普通用户时,输入exit,然后回车,此时你就切换回之前的普通用户了 还有第二种方式,敲 su root 然后回车,或者敲 su - root 然后回车。这两种方式也都可以从root用户切换回普通用户。 但这两种方式有点区别: su 后面不加用户是默认切到 root su 是不改变当前变量 su - 是改变为切换到用户的变量 也就是说su只能获得root的执行权限,不能获得环境变量,而su -是切换到root并获得root的环境变量及执行权限. 总结来说就是: su 只能切换到管理员用户权限,不使用管理员的登陆脚本和搜索路径。 su - 不但能切换到管理员权限而且使用管理员登陆脚本和搜索路径。

什么是ISO镜像文件,为什么不能拷贝到U盘直接重新安装?

之前搞虚拟机和重装系统的时候一直在想,为什么ISO镜像文件要用ultraiso去"烧录"到硬盘,不能直接复制吗? 不行 不行 不行 那是因为文件与启动的必要关系决定的! 一、启动条件: 1、具有一个系统引导文件(ipl Initial Program Loader初始程序加载器)。 虽然说叫什么加载器,但其实就是一个512字节的文件,作用是加载真正的操作系统 2、引导文件必须在根目录下(其实是0柱面0磁头1号扇区,BIOS从这里加载启动程序,也就是通常说的引导程序)。 3、引导文件与引导系统盘格式相符合兼容。 下面是引导文件的汇编代码(从软盘引导) 4、存储设备的必须要主板支持的格式并激活状态。 如果直接把ISO系统镜像文件放入到U盘中,那么格式不说,首先你的引导文件是在ISO文件中,就就是说不在你的根目录下!根目录下没有引导文件,那么电脑启动的时候得不到程序运行命令自然无法运行。 而用UltraISO写入U盘,UltraISO写入的过程也会地U盘格式化成相应的兼容格式,并将ISO中的子文件写入到U盘根目录(0柱面0磁头1号扇区)。

分布式常见场景解决方案——分布式缓存

1. 缓存的概念 1.1 外存 外储存器是指除计算机内存及 CPU 缓存以外的储存器,此类储存器一般断电后仍然能保存数据。 常见的外存储器有硬盘、软盘、光盘、U 盘等,一般的软件都是安装在外存中(windows系统指的是 CDEF 盘, Linux 系统指的是挂载点)。 1.2 内存 内存是计算机中重要的部件之一,它是与 CPU 进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。 内存(Memory)也被称为内存储器,其作用是用于暂时存放 CPU 中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU 就会把需要运算的数据调到内存中进行运算,当运算完成后 CPU 再将结果传送出来,内存的运行也决定了计算机的稳定运行,此类储存器一般断电后数据就会被清空。 1.3 缓存 缓存就是把一些外存上的数据保存到内存上而已,怎么保存到内存上呢,我们运行的所有程序,里面的变量值都是放在内存上的,所以说如果要想使一个值放到内存上,实质就是在获得这个变量之后,用一个生存期较长的变量存放你想存放的值,在 java中一些缓存一般都是通过 map 集合来做的。 广义的缓存是把一些慢存(较慢的外存)上的数据保存到快存(较快的存储)上,简单讲就是,如果某些资源或者数据会被频繁的使用,而这些资源或数据存储在系统外部,比如数据库、硬盘文件等,那么每次操作这些数据的时候都从数据库或者硬盘上去获取,速度会很慢,会造成性能问题(系统停工待料)。于是我们把这些数据冗余一份到快存里面,每次操作的时候,先到快存里面找,看有没有这些数据,如果有,那么就直接使用,如果没有那么就从硬盘获取它,并复制一份到快存中,下一次访问的时候就可以直接从快存中获取。从而节省大量的时间,可以看出,缓存是一种典型的空间换时间的方案。 生活中这样的例子处处可见,举例: 举例 1 --CPU--L1/L2--内存--磁盘 CPU 需要数据时先从 L1/L2 中读取,如果没有到内存中找,如果还没有会到磁盘上找。 举例 2 --Maven 用过 Maven 的朋友应该都知道,我们找依赖的时候,先从本机仓库找,再从本地服务器仓库找,最后到远程仓库服务器找。 举例 3 --京东仓储 还有如京东的物流为什么那么快?他们在各个地都有分仓库,如果该仓库有货物那么送货的速度是非常快的。 举例 4 --数据库中的索引 也是以空间换取时间,缓存也是以空间换取时间。 1.4 重要的指标 1.4.1 缓存命中率 缓存命中率表明缓存是否运行良好的。即【从缓存中读取数据的次数】与【总读取次数】的比率,命中率越高越好。 命中率 = 从缓存中读取次数 / (总读取次数[从缓存中读取次数 + 从慢速设备上读取的次数]) Miss 率 = 没有从缓存中读取的次数 / (总读取次数[从缓存中读取次数 + 从慢速设备上读取的次数]) = 1 - 命中率

分布式常见场景解决方案——session共享及单点登录

1. 传统Session机制及身份认证方案 1.1 Cookie与服务器的交互 http 是无状态的协议,客户每次读取 web 页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息。比如我们现在要实现一个电商内的购物车功能,要怎么才能知道哪些购物车请求对应的是来自同一个客户的请求呢?session 就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过 SessionID 来区分不同的客户。session 是以 cookie 或 URL 重写为基础的,默认使用 cookie 来实现,系统会创造一个名为 JSESSIONID 的值输出到 cookie。 注意 JSESSIONID 是存储于浏览器内存中的,并不是写到硬盘上的,如果我们把浏览器的cookie 禁止,则 web 服务器会采用 URL 重写的方式传递 Sessionid,我们就可以在地址栏看到 sessionid=KWJHUG6JJM65HS2K6 之类的字符串。 通常 JSESSIONID 是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的 sessionid,这样我们信息共享的目的就达不到了。 1.2 服务器端的 session 的机制 session 机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 但程序需要为某个客户端的请求创建一个 session 的时候,服务器首先检查这个客户端的请求里是否包含了一个 JSESSIONID 标识的 sessionid,如果已经包含一个 session id 则说明以前已经为此客户创建过 session,服务器就根据 sessionid 把这个 session 检索出来使用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的 session 对象,但用户人为地在请求的 URL 后面附加上一个 JSESSION 的参数)。 如果客户请求不包含 session id,则为此客户创建一个 session 并且生成一个与此 session相关联的 session id,这个 session id 将在本次响应中返回给客户端保存。

dll 调用exe_认识电脑系统RUNDLL32.EXE

Rundll32.exe是什么?顾名思意,“执行32位的DLL文件”。它的作用是执行DLL文件中的内部函数,这样在进程当中,只会有Rundll32.exe,而不会有DLL后门的进程,这样,就实现了进程上的隐藏。如果看到系统中有多个Rundll32.exe,不必惊慌,这证明用Rundll32.exe启动了多少个的DLL文件。当然,这些Rundll32.exe执行的DLL文件是什么,我们都可以从系统自动加载的地方找到。 现在,我来介绍一下Rundll32.exe这个文件,意思上边已经说过,功能就是以命令行的方式调用动态链接程序库。系统中还有一个Rundll.exe文件,他的意思是“执行16位的DLL文件”,这里要注意一下。在来看看Rundll32.exe使用的函数原型: Void CALLBACK FunctionName ( HWND hwnd, HINSTANCE hinst, LPTSTR lpCmdLine, Int nCmdShow ); 其命令行下的使用方法为:Rundll32.exe DLLname,Functionname [Arguments] DLLname为需要执行的DLL文件名;Functionname为前边需要执行的DLL文件的具体引出函数;[Arguments]为引出函数的具体参数。 略谈Rundll32.exe的作用 (我是菜鸟) 常用Windows 的朋友一定对Rundll32.exe和Rundll.exe这两个档案不会陌生吧,不过,由於这两个程式的功能原先只限於在微软内部使用,因而真正知道如何使用它们的朋友想必不多。那么好,如果你还不清楚的话,那么就让我来告诉你吧。 首先,请你做个小实验(请事先保存好你正在执行的程式的结果,否则...):点击“开始-程式-Ms-Dos方式”,进入Dos视窗,然後键入rundll32.exe user.exe,restartwindows,再按下回车键,这时你将看到,机器被重启了!怎么样,是不是很有趣? 当然,Rundll的功能绝不仅仅是重启你的机器。其实,Rundll者,顾名思义,执行Dll也,它的功能就是以命令列的方式呼叫Windows的动态链结库,Rundll32.exe与Rundll.exe的区别就在於前者是呼叫32位的链结库,而後者是运用於16位的链结库,它们的命令格式是: RUNDLL.EXE ,, 这里要注意三点:1.Dll档案名中不能含有空格,比如该档案位於c:ProgramFiles目录,你要把这个路径改成c:Progra~1;2.Dll档案名与Dll入口点间的逗号不能少,否则程式将出错并且不会给出任何资讯!3.这是最重要的一点:Rundll不能用来呼叫含返回值参数的Dll,例如Win32API中的GetUserName(),GetTextFace()等。在Visual Basic中,提供了一条执行外部程式的指令Shell,格式为: Shell “命令列” 如果能配合Rundll32.exe用好Shell指令,会使您的VB程式拥有用其他方法难以甚至无法实现的效果:仍以重启为例,传统的方法需要你在VB工程中先建立一个模组,然後写入WinAPI的声明,最後才能在程式中呼叫。而现在只需一句: Shell “rundll32.exe user.exe,restartwindows”就搞定了!是不是方便多了? 实际上,Rundll32.exe在呼叫各种Windows控制面板和系统选项方面有著独特的优势。下面,我就将本人在因特网上收集的有关Rundll的指令列举如下(很有用的,能省去你很多呼叫Windows API的时间!!),供大家在程式设计中引用: 命令列: rundll32.exe shell32.dll,Control_RunDLL 功能: 显示控制面板 命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1 功能: 显示“控制面板-辅助选项-键盘”选项视窗 命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2 功能: 显示“控制面板-辅助选项-声音”选项视窗 命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3 功能: 显示“控制面板-辅助选项-显示”选项视窗 命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4 功能: 显示“控制面板-辅助选项-滑鼠”选项视窗 命令列: rundll32.exe shell32.

m3u8文件在手机上用什么软件看_m3u8解析、转码、下载、合并

现在网也上大多数视频需要下载都很麻烦,极少数是MP4,大多都是m3u8, 先说视频下载, pc端: 打开网页,点击视频播放,打开开发者工具,找到网络那一栏, 等整个网页加载完成后,可以再下图指示的地方进行搜索,搜mp4.或者m3u8,搜出来之后,鼠标右键复制链接, 在浏览器新打开个窗口把链接复制上去,如果是mp4格式的视频,直接可以下载,如果是m3u8,就找个m3u8下载器, 把链接复制进去直接下载,如果是用的下载器,下载器会直接把下载的视频合并,并进行转码。 手机浏览器: 手机浏览器打开视频网页,如果是视频播放的话,可以直接去点击缓存,然后就会下载到本地,一般是mp4,或者m3u8 如果是m3u8,你在文件管理中找到的是一个文件夹,里面是一个以.m3u8结尾的文件和若干个.ts结尾的文件,有的还会有一个.key结尾的文件。 如果说你下载的文件没有.key文件的话,随便找个软件就可以将其合并,然后转为你想要的视频格式,这里详细说一下下载的文件里面有.key文件的 视频该怎么合并,首先你先得把整个文件夹拷到你的电脑上,然后用文本编辑器把.m3u8文件打开。然后把里面的路径修改一下, 然后电脑上下载ffmpeg,然后配置环境变量,然后在你的视频的文件夹里面运行cmd,然后运行以下代码 ffmpeg -i index.m3u8 -vcodec copy -acodec copy 1.mp4 如果运行报错的话,建议把.key结尾的文件的后缀改为.m3u8,然后在之前的以.m3u8结尾的文件中把key对应文件名也做相应的更改,确保 跟文件夹里面的key文件所对应。 然后再运行上面的代码,等运行完成后,在该文件里面会生成一个1.mp4文件,这个就是解码,合并之后的文件。

软件项目试运行报告_EPC模式下,如何做好设计全过程管理?工程总承包项目设计变更...

EPC工程总承包模式下的设计全过程管理 《建设项目工程总承包管理规范》主要起草人、统稿人 《建设项目工程总承包管理规范实施指南》主编人 中国寰球工程有限公司原安全副总监—李森 前言 本文结合《质量管理体系要求》GB/T 19001-2016和《建设项目工程总承包管理规范》GB/T 50358-2017两个国家标准,从组织行为EPC看工程总承包设计全过程管理,从工程总承包项目设计管理基本要求、设计控制、设计输入、设计控制、设计输出、设计变更、设计分包控制、接口控制以及设计全过程管理的重点工作九个方面,对EPC工程总承包设计全过程管理进行阐述,旨在倡导设计指导采购、指导施工和试运行的管理理念,以有效发挥工程总承包设计在工程建设过程中的龙头作用。 01工程总承包项目设计管理的基本要求 设计定义 设计是将项目发包人的要求转化为项目产品描述的过程,即按合同要求编制建设项目设计文件的过程。 设计应满足合同要求 设计除了应满足合同约定的技术性能、质量标准和工程的可施工性、可操作性及可维修性的要求外,还应满足应急条件要求。 设计是做好工程总承包项目的前提 组织应建立、实施和保持适当的设计和开发过程,以确保后续的产品和服务的提供。产品和服务的设计和开发是产品实现的一个重要过程,对生产的产品和提供的服务最终能否满足顾客和法律法规要求,能否满足组织的战略要求,包括相关方的要求都有着极其重要的作用。组织应做好设计和开发的策划、输入、控制、输出和更改工作。 项目活动应与设计文件保持一致 工程总承包项目管理活动应与设计文件保持一致,只有从设计出发对工程总承包项目实施全过程的管理,才能使设计有效地指导采购,指导施工和试运行工作,才能使项目全过程管理活动得以有效控制。 02工程总承包项目设计控制 设计控制要求 根据工程总承包项目的特性,应充分体现工程总承包项目特点,考虑投标报价时的方案优化,设计阶段的深化设计,新材料、新设备、新工艺、新技术的应用,以及信息技术(包括BIM的应用等)、项目创优、施工图审核配合、设计与采购和施工接口关系、设计对试运行的指导作用等方面的要求,综合确定总承包工程设计项目的控制要求。 设计策划 设计策划应编制设计计划。设计计划除了应满足项目合同要求外,还应满足应急条件,并以项目总体计划为指导。 项目设计计划的主要内容 设计计划的主要内容包括:明确项目背景及工程概况;明确项目定位和目标,目标应包括质量目标、进度目标、费用目标等;识别项目风险,制定应对措施;根据设计项目的性质、设计周期、项目的复杂程度等,明确设计内容、范围;明确项目的进度要求;项目总进度计划要充分考虑设计工作的内部逻辑关系及资源分配、外部约束等条件,并应与工程勘察、采购、施工和试运行等的进度协调;对资源的特殊要求,包括确定设备、软件、成果表达所需的技术要求、BIM等技术的应用、特殊或专用的技术标准等要求;组建项目团队,明确参与项目人员的职责;明确参与工程设计项目的不同部门或不同专业之间的接口关系和接口方式;明确分包方或其他合作方的职责、工作内容、工作要求及成果验收标准、验收方式及时间要求;对设计输出文件的深度、内容、格式作出要求;根据项目的规模、技术复杂程度、项目目标、参与设计人员水平等因素,确定设计评审的内容、方式和时机;对施工参与设计方案评审作出安排,通过可施工性分析,提出设计应考虑的措施或意见等。 提出风险应对措施 在设计策划阶段,应根据项目的特点对工程设计风险进行识别、分析和评价,针对评价结果提出风险应对措施。 03工程总承包项目设计输入 设计输入 应根据工程设计的类型、设计阶段、专业特点、技术复杂程度等,确定设计输入的要求。设计输入包括项目级、专业级的输入,各级输入应明确负责人。 设计输入评审 应采取适宜的方式,对设计输入进行评审,确保设计输入充分、适宜、完整、清楚、正确,避免出现矛盾的信息,以保证设计输入能够满足开展工程设计的需要。应保存设计输入的记录。 设计输入相关要求 专业之间委托的设计条件必须经过校审。合作方提供的外部技术条件应经合作方和项目负责人双方确认。设计输入应进行动态管理,当设计输入发生变化,特别是顾客要求发生变化时,应及时更改设计输入,且将更改后的设计输入文件传递到相关部门及相关设计人员。 04工程总承包项目实施过程控制 设计控制要求 应对设计过程进行控制,控制内容包括质量、进度、费用、软件等,控制方式应包括设计评审、设计验证、设计确认(包括对工程项目使用的软件确认)等。根据项目具体情况,设计评审、设计验证和设计确认可单独或以任意组合方式进行,以实现不同的控制目的。应对设计评审、设计验证和设计确认发现的问题进行收集、统计分析和相互作用的评价,形成组织的知识。 设计评审 应按设计策划的安排,在设计的适当阶段(一般在设计方案确定前或设计方案初稿完成后)实施设计评审活动,以评价工程设计结果是否满足能力的要求。 设计验证 应按策划的安排对设计输出结果进行验证,确保设计输出满足设计输入要求。 设计确认 应按策划的安排对工程设计实施确认活动,确保项目规定的用途得到满足。 设计质量控制 设计应遵循国家有关的法律法规和强制性标准,并满足合同约定的技术性能、质量标准和工程的可施工性、可操作性及可维修性的要求等。 设计进度控制 制定设计进度计划应充分考虑与采购、施工和试运行计划的衔接,制定设计进度计划主要控制点并实施控制。项目部应根据设计计划进行进度控制,检查设计计划的执行情况。当设计进度计划拖延影响合同规定或整体工程进度时,项目进度管理人员应及时报告项目经理,必要时报告项目发包人,系统地分析进度偏差并制定有效措施。生产和服务提供过程,直接影响产品或服务的质量。组织应确定要求,针对产品或服务的性质,对所有与生产服务提供过程相关的活动进行考虑和有效控制,以满足组织或顾客的各种要求。 05工程总承包项目设计输出 设计输出 设计输出包括设计图纸、计算书、说明书、各类设计表格等阶段性设计成果和最终设计成果等。设计输出应满足设计输入要求,以保证能够实现工程设计的预期目的,为后续的采购、施工、生产、检验和服务过程提供必要的信息。 设计输出的形式和深度要求 一是设计输出成果应符合行业通行要求,特殊形式的输出(如电子数据、BIM模型等)应与相关方沟通,确保输出的结果满足相关方的要求; 二是设计输出应满足规定的编制内容和深度要求,符合各类专项审查以及工程项目所在地的相关要求。当设计合同对设计文件编制深度另有要求时,应同时满足合同要求; 三是设计边界条件和选用的设计参数,必须在行业标准规范规定的范围内,对超出规定的某些尝试应进行严格的论证或评审,并经主管部门批准; 四是按照策划的安排实施设计评审、验证和确认,并满足预期的要求; 五是项目负责人应核验各专业设计、校核、审核、审定、会签等技术人员在相关设计文件上的签署,核验注册执业人员在设计文件上的签章,并对各专业设计文件验收签字; 六是应明确设计输出文件的批准要求等。组织应通过监视、测量、分析和评价、内部审核以及管理评审活动对绩效进行评价,确定和选择改进机会,并采取必要措施,以满足顾客要求和提升顾客满意度。工程总承项目应明确检查的内容、范围和频次,应分阶段、多维度地组织对项目实施的中间成果和最终成果实施检查。采取总结、统计分析、调查对标等方式,确定改进的需求并实施改进,以不断提升顾客的满意度。 06工程总承包项目设计变更 设计变更 工程总承包企业应对设计过程及后续施工安装期间所发生的更改进行适当的识别、评审和控制,以确保这些更改满足要求,不会产生不利影响。 设计变更记录 设计变更应按设计变更程序进行,并保留设计变更的记录: 一是变更的原因、依据、内容、时间等; 二是必要的评审、验证、确认记录; 三是批准设计变更的授权人; 四是为防止变更造成不利影响而采取措施的记录。 07工程总承包项目设计分包控制 识别外部提供的工程设计、过程或服务,并实施控制 其主要包括:由外部供方提供的工程设计(或其中的组成部分)、过程或服务;外部供方直接提供给顾客的工程设计、过程或服务;外部供方提供的工程设计、过程或服务。 分包方的评价与选择

并发编程之二——synchronized

1、Java中synchronized关键字的使用 synchronized关键字主要用于对java程序对共享资源的访问控制,可以在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized还可以保证一个线程对共享资源的修改被其他线程看到,完全可以替换volatile。 synchronized关键字在Java程序中主要有以下三种应用方式: (1) 修饰静态方法,相当于对类的class对象加锁。由于静态方法不专属于任何一个实例对象,是类的成员,当线程A访问加锁的静态方法时,线程B就只能等待,具体示例代码如下: public class SynchronizedForClass { static int i = 0; /* * 此方法是加了synchronized关键字的静态方法 */ public static synchronized void synStatic() { i++; } /* * 此方法是加了synchronized关键字的普通方法 */ public synchronized void synNoStatic() { i++; } public static void main(String[] args) throws InterruptedException { // 创建2个线程t1、t2 Thread t1 = new SynClass(new SynchronizedForClass()); Thread t2 = new SynClass(new SynchronizedForClass()); // 启动线程t1、t2 t1.start(); t2.start(); // 主线程等待t1、t2执行完成 t1.join(); t2.join(); // 调用的是静态加锁的方法,因此t1和t2执行完成后,i的值是20000 System.

md模板练习

文本样式 强调文本 强调文本 加粗文本 加粗文本 标记文本 删除文本 引用文本 H2O is是液体。 210 运算结果是 1024。 列表 项目 项目 项目 项目1项目2项目3 计划任务 完成任务 链接 链接: link. 图片: 带尺寸的图片: 居中的图片: 居中并且带尺寸的图片: 代码片段 下面展示一些 内联代码片。 // A code block var foo = 'bar'; // An highlighted block var foo = 'bar'; 表格 项目Value电脑$1600手机$12导管$1 Column 1Column 2centered 文本居中right-aligned 文本居右 注脚 一个具有注脚的文本。1 注释 Markdown将文本转换为 HTML。 自定义列表 Markdown Text-to- HTML conversion tool Authors John Luke 数学公式 Gamma公式展示 Γ ( n ) = ( n − 1 ) !

html表白特效源代码_程序员也有浪漫,用代码表白

今天情人节,程序员也有浪漫,在网上找了几个专属于程序员的浪漫告白代码 第一个HTML5 Canvas爱心飘动动画特效 当然中间那个字你可以换成你想要的,比如你老婆的名字,让她也感受感受程序员的浪漫呢 ...省略其他代码,只需找到这个中文,替换你想要的中文就可以,y="px Arial",v="老婆",q="♥",X=w/2,Y=h/2,T=4,p=_1){var e=this;e.g=_1){... 第二个jQuery情人节表白放烟花动画特效 第三个情侣浪漫表白js特效代码 同样,你可以修改源代码,将名字换成你和你老婆的,各种纪念日啥的 /** *2019—01-01, *2019-07-26. */ Boy name = 王 某某 Girl name = 刘 某某 最后源代码我都下载到压缩包了,大家可以下载 链接:https://share.weiyun.com/czPx8C5g 密码:g7vy8g #程序员##七夕表白创意##写代码#