• 关于

    不是内部或外

    的搜索结果

回答

升序:按从小到大的顺序排列(如1、3、5、6、7、9)。降序:就是按从大到小的顺序排列(如9、8、6、4、3、1)。 拓展资料: 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。 反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。 常见排序算法 快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。-------------------------升序:按从小到大的顺序排列(如1、3、5、6、7、9)。降序:就是按从大到小的顺序排列(如9、8、6、4、3、1)。如果是在表格中,就从表格上面按升序或降序往下排(也可以是从左往右排)。
liujae 2019-12-02 01:17:56 0 浏览量 回答数 0

问题

优势与挑战并存着,网络虚拟化的6大要点

网络中的虚拟化,不仅是在虚拟环境中的管理网络,它实际上是这样的开关是一个物理网络和它的组件,诸如路由器端口或抽象。使用网络虚拟化抽象的物理网络到多个物理网络,可以有多个逻辑网络被划分成...
hamtyb 2019-12-01 20:27:33 9831 浏览量 回答数 0

回答

Django在通常的SQL意义上不支持“联接”-它支持对象导航。 请注意,关系联接(内部或外部)会创建一个新的实体“类”。在Django中没有定义的代码。因此,没有适当的“结果集”,因为对于返回的内容没有类定义。您能做的最好的事情就是定义一个元组,该元组将与None组合在一起以存储缺失的组合。 左(或右)外部联接看起来像这样。它创建两个不相交的子集,一个具有一组关联的相关实体,另一个没有。 for obj in Model1.objects.all(): if obj.model2_set().count() == 0: # process (obj, None) -- no Model2 association else: for obj2 in obj.model2_set.all(): # process (obj, obj2) -- the "inner join" result “完全”外部联接是没有关系的其余项的并集。 for obj2 in Model2.objects.all(): if obj2.model1_set().count() == 0: # process (None, obj2) -- no Model1 association 问题始终是,您对三个不同的对象子集的怪异集合正在处理什么? 对象数据库的重点是将处理重点放在对象及其关联的对象上。 原始对象模型中从未存在称为“关系联接”的特殊集合。它是由两个(或多个)原始对象构建的新型对象。 更糟糕的是,外部联接会创建具有多个子类的集合(内部联接,左外部联接和右外部联接)。那东西集合是什么意思? 等一下,情况可能会变得更糟。如果处理过程包括检查缺失的属性(即if someObj.anObj2attribute is None:我们本质上是在寻找Model1没有Model2对象关联的项目。嗯……为什么我们将它们放在外部联接中,仅使用if语句对其进行过滤?为什么不做呢?单独的查询和正确处理每个子集? 编辑:当您显示“不完整”状态时,它根本不是外部联接。这要简单得多。您需要在视图函数中创建一个(或两个)单独的集合,以显示模板。 首先,您应该使用状态码,而不要使用是否存在外键。可选的外键没有“理由”-它们在那里或不在那里。状态代码可以提供有用的含义阴影(“不完整”,“错误”,“损坏”,“不适用”,“要删除”等) errorList1 = Model1.objects.filter( status="Incomplete" ) errorList2 = Model2.objects.filter( status="Incomplete" ) 这两个是完全外部联接的两个非联接部分。然后,您可以在模板中显示这两个错误列表,其中包含适当的列标题和状态代码以及所有内容。 您甚至可以将它们放在一个表中,以模仿人们过去看到的旧的完整外部联接报告 Model1Model2 {% for e1 in errorList1 %} e1NULL {% endfor %} {% for e2 in errorList2 %} NULLe2 {% endfor %} 看起来像一个完整的外部联接报告。没有完整的外部联接。
保持可爱mmm 2019-12-02 03:17:29 0 浏览量 回答数 0

问题

喷下可配置:配置报错 

这里我得支持一下@张子游 的态度或观点。 软件开发就开发,到处可动态,美其名曰“客户需求存在多样性”或“提升模块与模块的耦合度的动态条件”等等,就是扯淡的说法。 扯开编程,说下...
kun坤 2020-06-02 14:38:35 3 浏览量 回答数 1

问题

企业应如何集成SaaS CRM和ERP应用

你选择集成SaaSCRM系统与其它企业应用的战略取决于你的SaaS部署的先进程度。对于使用大型SaaS CRM系统的企业来说,将SaaSCRM与ERP和财务系统的集成可能是IT部门优先考虑的一个事情。然而,小型S...
赛思salesnow 2019-12-01 21:32:52 2081 浏览量 回答数 0

回答

错误的含义:该方法showOpenDialog需要一个类型的参数,Component但正在使用调用ActionListener。更确切地说,给定参数是实现的匿名类,ActionListener而不是Component: new ActionListener() { ... } 在声明的使用. . .关键字的方法内部,this指向该匿名类的实例。 请参阅的文档showOpenDialog(),它需要父母或null: 弹出“打开文件”文件选择器对话框。请注意,批准按钮中显示的文本由L&F确定。 参数: parent - the parent component of the dialog, can be null; see showDialog for details 以及以下相关文件showDialog(): 父参数确定两件事:打开对话框所依赖的框架以及放置对话框时外观应考虑其位置的组件。...如果父级为null,则对话框不依赖于可见窗口,而是放置在与外观相关的位置,例如屏幕中心。 通``` 常,传递的参数是JFrame或JPanel应该在视觉上包含对话框的参数,但可以是null: ```js int returnVal = db.showOpenDialog(null);
游客ufivfoddcd53c 2020-01-04 11:03:23 0 浏览量 回答数 0

问题

聊聊JStorm的最佳实践

在3月1日 首届阿里开源峰会上 ,阿里巴巴中间件技术专家 卫乐 将为大家分享JStorm的相关话题。 JStorm是阿里基于Storm开发的纯Java的实时计算框架,自开源以来历经了多个版本的更新和演化&#...
爵霸 2019-12-01 21:54:49 3569 浏览量 回答数 0

回答

偏移 offsetWidth width + padding + border offsetHeight height + padding + border offsetLeft offsetTop offsetParent 注意:没有offsetRight和offsetBottom ************************************************************************************************ 卷曲 scrollWidth width + padding scrollHeight 当内部的内容溢出盒子的时候, 顶边框的底部,计算到内容的底部;如果内容没有溢出盒子,计算方式为盒子内部的真实高度(边框到边框) scrollLeft 这个scroll系列属性不是只读的 scrollTop scroll() 此函数可以获取卷曲的高度和卷曲的宽度 function myScroll() { return { top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0, left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0 }; } 滚动滚动条的时候触发事件 box(window).onscroll = function () {} ************************************************************************************************ 可视 clientWidth 获取的是元素内部的真实宽度 width + padding clientHeight 边框之间的高度 clientLeft 相当于左边框的宽度 如果元素包含了滚动条,并且滚动条显示在元素的左侧。这时,clientLeft属性会包含滚动条的宽度17px clientTop 相当于顶边框的宽度 client() 此函数可以获取浏览器可视区域的宽高 function myClient() { return { wid: window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0, heit: window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0 }; } ---------------------------------------------------------------------------------------------- @offsetHeight和style.height的区别 demo.style.height只能获取行内样式,如果样式写到了其他地方,甚至根本就没写,便无法获取 style.height是字符串(而且带单位),offsetHeight是数值 demo.style.height可以设置行内样式,offsetHeight是只读属性 因此,一般用demo.offsetHeight来获取某元素的真实宽度/高度,用style.height来设置宽度/高度 ---------------------------------------------------------------------------------------------- @offsetLeft和style.left的区别 一、style.left只能获取行内样式 二、offsetLeft只读,style.left可读可写 三、offsetLeft是数值,style.left是字符串并且有单位px 四、如果没有加定位,style.left获取的数值可能是无效的 五、最大区别在于offsetLeft以border左上角为基准,style.left以margin左上角为基准 ---------------------------------------------------------------------------------------------- @scrollHeight和scrollWidth 标签内部实际内容的高度/宽度 不计算边框,如果内容不超出盒子,值为盒子的宽高(不带边框) 如果内容超出了盒子,就是从顶部或左部边框内侧一直到内容a的最外部分 ---------------------------------------------------------------------------------------------- @scrollTop和scrollLeft 被卷去部分的 顶部/左侧 到可视区域 顶部/左侧 的距离
茶什i 2019-12-02 03:17:00 0 浏览量 回答数 0

问题

我理解中的SLB最大的几个问题

我理解中的SLB最大的几个问题 最近云服务器打折,所以一口气买了十几台,打算把公司的相关的业务转移到SLB上。 但是昨天看了SLB的产品经理的集中答复之后,我觉得SLB的易用性还是存在很...
lxepoo 2019-12-01 21:33:06 8718 浏览量 回答数 5

回答

Q1:浮动和定位本就属于CSS两大“定位”技术,浮动之后用绝对定位是什么鬼?一般来说浮动和定位是搭配使用的。举个例子,float可以用来布局,类似2列布局3列布局之类的,而定位则多用来实现布局内部视图模块的多样性,比如轮播图底部的轮播控制按钮。Q2:《CSS权威指南》浮动章节有详细记载。浮动元素的确脱离正常文档流,这里且不说BFC,像你这种浮动方式的确div1会在div2上面,但对于文本框而言,它会避开浮动的元素,也就是你说的div2里面内容会挤到下面,而不是正常被正常左浮动的div1覆盖。这是浏览器对标准的执行,建议多看一些基础书,当然最好是W3C的草案。Q3: clear属性木有bottom...在HTML中,每个元素都是一个相对独立的个体,这些元素按照语言习惯(一般是从左往右)排列,能放在一行的就不会换行,当一行实在放不下时默认会另起一行,所以一个浮动元素设置clear应该明确指明它的左边或右边不能有浮动元素(相当于有浮动元素的那一行已经满了,告诉浏览器从第二行开始渲染元素)所以clear的bottom值是没有必要存在的。存手打,个人意见,有错误欢迎指正。------10/14 更新 --------最近有了解一些关于z-index的知识,发现可以回答你q2的问题,z-index相当于在z轴对css视图的层次进行了描述。详情可以看这里这里只贴出你这个问题的分析-浏览器的部分绘制顺序:1 根元素的背景与边框2 位于普通流中的后代块元素按照它们在 HTML 中出现的顺序堆叠3 浮动块元素4 常规流中的后代行内元素5 后代中的定位元素按照它们在 HTML 中出现的顺序堆叠所以浏览器先绘制浮动的div1,接着绘制常规流中的后代行内元素,也就是你这里面所说的div2/div3的内容(这个内容姑且认为是文本内容,也就是行内元素),对于div2/3的行内元素,因为已经被div1占据了位子,只能避开div1的内容进行内容的绘制(但是div2/3的背景是在div1绘制之前绘制的,所以和div1发生重叠,见顺序2和3)。不知你有没有听懂我的意思,总之对于浏览器来说,除了对水平面的元素进行放置计算外,对于z轴的渲染顺序也得明白,建议你多看多写写实验一下。有疑意欢迎提出。
杨冬芳 2019-12-02 02:34:13 0 浏览量 回答数 0

回答

简述重排的概念 浏览器下载完页面中的所有组件(HTML、JavaScript、CSS、图片)之后会解析生成两个内部数据结构(DOM 树和渲染树),DOM 树表示页面结构,渲染树表示 DOM 节点如何显示。重排是 DOM 元素的几何属性变化,DOM 树的结构变化,渲染树需要重新计算。 简述重绘的概念 重绘是一个元素外观的改变所触发的浏览器行为,例如改变 visibility、outline、背景色等属性。浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。由于浏览器的流布局,对渲染树的计算通常只需要遍历一次就可以完成。但 table 及其内部元素除外,它可能需要多次计算才能确定好其在渲染树中节点的属性值,比同等元素要多花两倍时间,这就是我们尽量避免使用 table 布局页面的原因之一。 简述重绘和重排的关系 重绘不会引起重排,但重排一定会引起重绘,一个元素的重排通常会带来一系列的反应,甚至触发整个文档的重排和重绘,性能代价是高昂的。 什么情况下会触发重排? - 页面渲染初始化时;(这个无法避免) - 浏览器窗口改变尺寸; - 元素尺寸改变时; - 元素位置改变时; - 元素内容改变时; - 添加或删除可见的 DOM 元素时。 重排优化有如下五种方法 - 将多次改变样式属性的操作合并成一次操作,减少 DOM 访问。 - 如果要批量添加 DOM,可以先让元素脱离文档流,操作完后再带入文档流,这样只会触发一次重排。(fragment 元素的应用) - 将需要多次重排的元素,position 属性设为 absolute 或 fixed,这样此元素就脱离了文档流,它的变化不会影响到其他元素。例如有动画效果的元素就最好设置为绝对定位。 - 由于 display 属性为 none 的元素不在渲染树中,对隐藏的元素操作不会引发其他元素的重排。如果要对一个元素进行复杂的操作时,可以先隐藏它,操作完成后再显示。这样只在隐藏和显示时触发两次重排。 - 在内存中多次操作节点,完成后再添加到文档中去。例如要异步获取表格数据,渲染到页面。可以先取得数据后在内存中构建整个表格的 html 片段,再一次性添加到文档中去,而不是循环添加每一行。
茶什i 2019-12-02 03:19:56 0 浏览量 回答数 0

问题

OSS如何投递到CSV存储?

本文介绍日志服务投递OSS使用CSV存储的相关细节,其它内容请参考 投递日志到 OSS。 CSV存储字段配置 配置页面 可以在日志服务数据预览或索引查询页面查看一条日志的多个Key-Value,...
轩墨 2019-12-01 21:56:39 1550 浏览量 回答数 0

问题

如何使用SELECT数据操作语言

该语句用于查询表中的内容。 基本查询 格式 SELECT    [ALL | DISTINCT]    selectexpr [AS othername] [, selectexpr ...]    [FROM table_refe...
云栖大讲堂 2019-12-01 21:28:48 1030 浏览量 回答数 0

回答

Re如何用IIS建立高安全性Web服务器 5.IP地址的控制   IIS可以设置允许或拒绝从特定IP发来的服务请求,有选择地允许特定节点的用户访问服务,你可以通过设置来阻止除指定IP地址外的整个网络用户来访问你的Web服务器。具体设置:   (1) 启动ISM(Internet服务器管理器);   (2) 启动Web属性页中“高级”选项卡;   (3) 进行指定IP地址的控制设置。   6.端口安全性的实现   对于IIS服务,无论是WWW站点、FTP站点,还是NNTP、SMTP服务等都有各自监听和接收浏览器请求的TCP端口号(Post),一般常用的端口号为:WWW是80,FTP是21,SMTP是25,你可以通过修改端口号来提高IIS服务器的安全性。如果你修改了端口设置,只有知道端口号的用户才可以访问,但用户在访问时需要指定新端口号。   7.IP转发的安全性   IIS服务可提供IP数据包转发功能,此时,充当路由器角色的IIS服务器将会把从Internet接口收到的IP数据包转发到内部网中,禁用这一功能不失为提高安全性的好办法。具体设置如下:   (1) 启动“网络属性”并选择“协议”选项卡;   (2) 在TCP/IP属性中去掉“路由选择”。   8.SSL安全机制   IIS的身份认证除了匿名访问、基本验证和Windows NT请求/响应方式外,还有一种安全性更高的认证:通过SSL(Security Socket Layer)安全机制使用数字证书。   SSL(加密套接字协议层)位于HTTP层和TCP层之间,建立用户与服务器之间的加密通信,确保所传递信息的安全性。SSL是工作在公共密钥和私人密钥基础上的,任何用户都可以获得公共密钥来加密数据,但解密数据必须要通过相应的私人密钥。使用SSL安全机制时,首先客户端与服务器建立连接,服务器把它的数字证书与公共密钥一并发送给客户端,客户端随机生成会话密钥,用从服务器得到的公共密钥对会话密钥进行加密,并把会话密钥在网络上传递给服务器,而会话密钥只有在服务器端用私人密钥才能解密,这样,客户端和服务器端就建立了一个惟一的安全通道。具体步骤如下:   (1) 启动ISM并打开Web站点的属性页;   (2) 选择“目录安全性”选项卡;   (3) 单击“密钥管理器”按钮;   (4) 通过密钥管理器生成密钥对文件和请求文件;   (5) 从身份认证权限中申请一个证书;   (6) 通过密钥管理器在服务器上安装证书;   (7) 激活Web站点的SSL安全性。   建立了SSL安全机制后,只有SSL允许的客户才能与SSL允许的Web站点进行通信,并且在使用URL资源定位器时,输入https:// ,而不是http:// 。   SSL安全机制的实现,将增大系统开销,增加了服务器CPU的额外负担,从而降低了系统性能,在规划时建议仅考虑为高敏感度的Web目录使用。另外,SSL客户端需要使用IE 3.0及以上版本才能使用。 ------------------------- Re如何用IIS建立高安全性Web服务器
中南时代 2019-12-02 01:16:10 0 浏览量 回答数 0

回答

微服务 (MicroServices) 架构是当前互联网业界的一个技术热点,圈里有不少同行朋友当前有计划在各自公司开展微服务化体系建设,他们都有相同的疑问:一个微服务架构有哪些技术关注点 (technical concerns)?需要哪些基础框架或组件来支持微服务架构?这些框架或组件该如何选型?笔者之前在两家大型互联网公司参与和主导过大型服务化体系和框架建设,同时在这块也投入了很多时间去学习和研究,有一些经验和学习心得,可以和大家一起分享。 服务注册、发现、负载均衡和健康检查和单块 (Monolithic) 架构不同,微服务架构是由一系列职责单一的细粒度服务构成的分布式网状结构,服务之间通过轻量机制进行通信,这时候必然引入一个服务注册发现问题,也就是说服务提供方要注册通告服务地址,服务的调用方要能发现目标服务,同时服务提供方一般以集群方式提供服务,也就引入了负载均衡和健康检查问题。根据负载均衡 LB 所在位置的不同,目前主要的服务注册、发现和负载均衡方案有三种: 第一种是集中式 LB 方案,如下图 Fig 1,在服务消费者和服务提供者之间有一个独立的 LB,LB 通常是专门的硬件设备如 F5,或者基于软件如 LVS,HAproxy 等实现。LB 上有所有服务的地址映射表,通常由运维配置注册,当服务消费方调用某个目标服务时,它向 LB 发起请求,由 LB 以某种策略(比如 Round-Robin)做负载均衡后将请求转发到目标服务。LB 一般具备健康检查能力,能自动摘除不健康的服务实例。服务消费方如何发现 LB 呢?通常的做法是通过 DNS,运维人员为服务配置一个 DNS 域名,这个域名指向 LB。 Fig 1, 集中式 LB 方案 集中式 LB 方案实现简单,在 LB 上也容易做集中式的访问控制,这一方案目前还是业界主流。集中式 LB 的主要问题是单点问题,所有服务调用流量都经过 LB,当服务数量和调用量大的时候,LB 容易成为瓶颈,且一旦 LB 发生故障对整个系统的影响是灾难性的。另外,LB 在服务消费方和服务提供方之间增加了一跳 (hop),有一定性能开销。 第二种是进程内 LB 方案,针对集中式 LB 的不足,进程内 LB 方案将 LB 的功能以库的形式集成到服务消费方进程里头,该方案也被称为软负载 (Soft Load Balancing) 或者客户端负载方案,下图 Fig 2 展示了这种方案的工作原理。这一方案需要一个服务注册表 (Service Registry) 配合支持服务自注册和自发现,服务提供方启动时,首先将服务地址注册到服务注册表(同时定期报心跳到服务注册表以表明服务的存活状态,相当于健康检查),服务消费方要访问某个服务时,它通过内置的 LB 组件向服务注册表查询(同时缓存并定期刷新)目标服务地址列表,然后以某种负载均衡策略选择一个目标服务地址,最后向目标服务发起请求。这一方案对服务注册表的可用性 (Availability) 要求很高,一般采用能满足高可用分布式一致的组件(例如 Zookeeper, Consul, Etcd 等)来实现。 Fig 2, 进程内 LB 方案 进程内 LB 方案是一种分布式方案,LB 和服务发现能力被分散到每一个服务消费者的进程内部,同时服务消费方和服务提供方之间是直接调用,没有额外开销,性能比较好。但是,该方案以客户库 (Client Library) 的方式集成到服务调用方进程里头,如果企业内有多种不同的语言栈,就要配合开发多种不同的客户端,有一定的研发和维护成本。另外,一旦客户端跟随服务调用方发布到生产环境中,后续如果要对客户库进行升级,势必要求服务调用方修改代码并重新发布,所以该方案的升级推广有不小的阻力。 进程内 LB 的案例是 Netflix 的开源服务框架,对应的组件分别是:Eureka 服务注册表,Karyon 服务端框架支持服务自注册和健康检查,Ribbon 客户端框架支持服务自发现和软路由。另外,阿里开源的服务框架 Dubbo 也是采用类似机制。 第三种是主机独立 LB 进程方案,该方案是针对第二种方案的不足而提出的一种折中方案,原理和第二种方案基本类似,不同之处是,他将 LB 和服务发现功能从进程内移出来,变成主机上的一个独立进程,主机上的一个或者多个服务要访问目标服务时,他们都通过同一主机上的独立 LB 进程做服务发现和负载均衡,见下图 Fig 3。 Fig 3 主机独立 LB 进程方案 该方案也是一种分布式方案,没有单点问题,一个 LB 进程挂了只影响该主机上的服务调用方,服务调用方和 LB 之间是进程内调用,性能好,同时,该方案还简化了服务调用方,不需要为不同语言开发客户库,LB 的升级不需要服务调用方改代码。该方案的不足是部署较复杂,环节多,出错调试排查问题不方便。 该方案的典型案例是 Airbnb 的 SmartStack 服务发现框架,对应组件分别是:Zookeeper 作为服务注册表,Nerve 独立进程负责服务注册和健康检查,Synapse/HAproxy 独立进程负责服务发现和负载均衡。Google 最新推出的基于容器的 PaaS 平台 Kubernetes,其内部服务发现采用类似的机制。 服务前端路由微服务除了内部相互之间调用和通信之外,最终要以某种方式暴露出去,才能让外界系统(例如客户的浏览器、移动设备等等)访问到,这就涉及服务的前端路由,对应的组件是服务网关 (Service Gateway),见图 Fig 4,网关是连接企业内部和外部系统的一道门,有如下关键作用: 服务反向路由,网关要负责将外部请求反向路由到内部具体的微服务,这样虽然企业内部是复杂的分布式微服务结构,但是外部系统从网关上看到的就像是一个统一的完整服务,网关屏蔽了后台服务的复杂性,同时也屏蔽了后台服务的升级和变化。安全认证和防爬虫,所有外部请求必须经过网关,网关可以集中对访问进行安全控制,比如用户认证和授权,同时还可以分析访问模式实现防爬虫功能,网关是连接企业内外系统的安全之门。限流和容错,在流量高峰期,网关可以限制流量,保护后台系统不被大流量冲垮,在内部系统出现故障时,网关可以集中做容错,保持外部良好的用户体验。监控,网关可以集中监控访问量,调用延迟,错误计数和访问模式,为后端的性能优化或者扩容提供数据支持。日志,网关可以收集所有的访问日志,进入后台系统做进一步分析。 Fig 4, 服务网关 除以上基本能力外,网关还可以实现线上引流,线上压测,线上调试 (Surgical debugging),金丝雀测试 (Canary Testing),数据中心双活 (Active-Active HA) 等高级功能。 网关通常工作在 7 层,有一定的计算逻辑,一般以集群方式部署,前置 LB 进行负载均衡。 开源的网关组件有 Netflix 的 Zuul,特点是动态可热部署的过滤器 (filter) 机制,其它如 HAproxy,Nginx 等都可以扩展作为网关使用。 在介绍过服务注册表和网关等组件之后,我们可以通过一个简化的微服务架构图 (Fig 5) 来更加直观地展示整个微服务体系内的服务注册发现和路由机制,该图假定采用进程内 LB 服务发现和负载均衡机制。在下图 Fig 5 的微服务架构中,服务简化为两层,后端通用服务(也称中间层服务 Middle Tier Service)和前端服务(也称边缘服务 Edge Service,前端服务的作用是对后端服务做必要的聚合和裁剪后暴露给外部不同的设备,如 PC,Pad 或者 Phone)。后端服务启动时会将地址信息注册到服务注册表,前端服务通过查询服务注册表就可以发现然后调用后端服务;前端服务启动时也会将地址信息注册到服务注册表,这样网关通过查询服务注册表就可以将请求路由到目标前端服务,这样整个微服务体系的服务自注册自发现和软路由就通过服务注册表和网关串联起来了。如果以面向对象设计模式的视角来看,网关类似 Proxy 代理或者 Façade 门面模式,而服务注册表和服务自注册自发现类似 IoC 依赖注入模式,微服务可以理解为基于网关代理和注册表 IoC 构建的分布式系统。 Fig 5, 简化的微服务架构图 服务容错当企业微服务化以后,服务之间会有错综复杂的依赖关系,例如,一个前端请求一般会依赖于多个后端服务,技术上称为 1 -> N 扇出 (见图 Fig 6)。在实际生产环境中,服务往往不是百分百可靠,服务可能会出错或者产生延迟,如果一个应用不能对其依赖的故障进行容错和隔离,那么该应用本身就处在被拖垮的风险中。在一个高流量的网站中,某个单一后端一旦发生延迟,可能在数秒内导致所有应用资源 (线程,队列等) 被耗尽,造成所谓的雪崩效应 (Cascading Failure,见图 Fig 7),严重时可致整个网站瘫痪。 Fig 6, 服务依赖 Fig 7, 高峰期单个服务延迟致雪崩效应 经过多年的探索和实践,业界在分布式服务容错一块探索出了一套有效的容错模式和最佳实践,主要包括: Fig 8, 弹性电路保护状态图 电路熔断器模式 (Circuit Breaker Patten), 该模式的原理类似于家里的电路熔断器,如果家里的电路发生短路,熔断器能够主动熔断电路,以避免灾难性损失。在分布式系统中应用电路熔断器模式后,当目标服务慢或者大量超时,调用方能够主动熔断,以防止服务被进一步拖垮;如果情况又好转了,电路又能自动恢复,这就是所谓的弹性容错,系统有自恢复能力。下图 Fig 8 是一个典型的具备弹性恢复能力的电路保护器状态图,正常状态下,电路处于关闭状态 (Closed),如果调用持续出错或者超时,电路被打开进入熔断状态 (Open),后续一段时间内的所有调用都会被拒绝 (Fail Fast),一段时间以后,保护器会尝试进入半熔断状态 (Half-Open),允许少量请求进来尝试,如果调用仍然失败,则回到熔断状态,如果调用成功,则回到电路闭合状态。舱壁隔离模式 (Bulkhead Isolation Pattern),顾名思义,该模式像舱壁一样对资源或失败单元进行隔离,如果一个船舱破了进水,只损失一个船舱,其它船舱可以不受影响 。线程隔离 (Thread Isolation) 就是舱壁隔离模式的一个例子,假定一个应用程序 A 调用了 Svc1/Svc2/Svc3 三个服务,且部署 A 的容器一共有 120 个工作线程,采用线程隔离机制,可以给对 Svc1/Svc2/Svc3 的调用各分配 40 个线程,当 Svc2 慢了,给 Svc2 分配的 40 个线程因慢而阻塞并最终耗尽,线程隔离可以保证给 Svc1/Svc3 分配的 80 个线程可以不受影响,如果没有这种隔离机制,当 Svc2 慢的时候,120 个工作线程会很快全部被对 Svc2 的调用吃光,整个应用程序会全部慢下来。限流 (Rate Limiting/Load Shedder),服务总有容量限制,没有限流机制的服务很容易在突发流量 (秒杀,双十一) 时被冲垮。限流通常指对服务限定并发访问量,比如单位时间只允许 100 个并发调用,对超过这个限制的请求要拒绝并回退。回退 (fallback),在熔断或者限流发生的时候,应用程序的后续处理逻辑是什么?回退是系统的弹性恢复能力,常见的处理策略有,直接抛出异常,也称快速失败 (Fail Fast),也可以返回空值或缺省值,还可以返回备份数据,如果主服务熔断了,可以从备份服务获取数据。Netflix 将上述容错模式和最佳实践集成到一个称为 Hystrix 的开源组件中,凡是需要容错的依赖点 (服务,缓存,数据库访问等),开发人员只需要将调用封装在 Hystrix Command 里头,则相关调用就自动置于 Hystrix 的弹性容错保护之下。Hystrix 组件已经在 Netflix 经过多年运维验证,是 Netflix 微服务平台稳定性和弹性的基石,正逐渐被社区接受为标准容错组件。 服务框架微服务化以后,为了让业务开发人员专注于业务逻辑实现,避免冗余和重复劳动,规范研发提升效率,必然要将一些公共关注点推到框架层面。服务框架 (Fig 9) 主要封装公共关注点逻辑,包括: Fig 9, 服务框架 服务注册、发现、负载均衡和健康检查,假定采用进程内 LB 方案,那么服务自注册一般统一做在服务器端框架中,健康检查逻辑由具体业务服务定制,框架层提供调用健康检查逻辑的机制,服务发现和负载均衡则集成在服务客户端框架中。监控日志,框架一方面要记录重要的框架层日志、metrics 和调用链数据,还要将日志、metrics 等接口暴露出来,让业务层能根据需要记录业务日志数据。在运行环境中,所有日志数据一般集中落地到企业后台日志系统,做进一步分析和处理。REST/RPC 和序列化,框架层要支持将业务逻辑以 HTTP/REST 或者 RPC 方式暴露出来,HTTP/REST 是当前主流 API 暴露方式,在性能要求高的场合则可采用 Binary/RPC 方式。针对当前多样化的设备类型 (浏览器、普通 PC、无线设备等),框架层要支持可定制的序列化机制,例如,对浏览器,框架支持输出 Ajax 友好的 JSON 消息格式,而对无线设备上的 Native App,框架支持输出性能高的 Binary 消息格式。配置,除了支持普通配置文件方式的配置,框架层还可集成动态运行时配置,能够在运行时针对不同环境动态调整服务的参数和配置。限流和容错,框架集成限流容错组件,能够在运行时自动限流和容错,保护服务,如果进一步和动态配置相结合,还可以实现动态限流和熔断。管理接口,框架集成管理接口,一方面可以在线查看框架和服务内部状态,同时还可以动态调整内部状态,对调试、监控和管理能提供快速反馈。Spring Boot 微框架的 Actuator 模块就是一个强大的管理接口。统一错误处理,对于框架层和服务的内部异常,如果框架层能够统一处理并记录日志,对服务监控和快速问题定位有很大帮助。安全,安全和访问控制逻辑可以在框架层统一进行封装,可做成插件形式,具体业务服务根据需要加载相关安全插件。文档自动生成,文档的书写和同步一直是一个痛点,框架层如果能支持文档的自动生成和同步,会给使用 API 的开发和测试人员带来极大便利。Swagger 是一种流行 Restful API 的文档方案。当前业界比较成熟的微服务框架有 Netflix 的 Karyon/Ribbon,Spring 的 Spring Boot/Cloud,阿里的 Dubbo 等。 运行期配置管理服务一般有很多依赖配置,例如访问数据库有连接字符串配置,连接池大小和连接超时配置,这些配置在不同环境 (开发 / 测试 / 生产) 一般不同,比如生产环境需要配连接池,而开发测试环境可能不配,另外有些参数配置在运行期可能还要动态调整,例如,运行时根据流量状况动态调整限流和熔断阀值。目前比较常见的做法是搭建一个运行时配置中心支持微服务的动态配置,简化架构如下图 (Fig 10): Fig 10, 服务配置中心 动态配置存放在集中的配置服务器上,用户通过管理界面配置和调整服务配置,具体服务通过定期拉 (Scheduled Pull) 的方式或者服务器推 (Server-side Push) 的方式更新动态配置,拉方式比较可靠,但会有延迟同时有无效网络开销 (假设配置不常更新),服务器推方式能及时更新配置,但是实现较复杂,一般在服务和配置服务器之间要建立长连接。配置中心还要解决配置的版本控制和审计问题,对于大规模服务化环境,配置中心还要考虑分布式和高可用问题。 配置中心比较成熟的开源方案有百度的 Disconf,360 的 QConf,Spring 的 Cloud Config 和阿里的 Diamond 等。 Netflix 的微服务框架Netflix 是一家成功实践微服务架构的互联网公司,几年前,Netflix 就把它的几乎整个微服务框架栈开源贡献给了社区,这些框架和组件包括: Eureka: 服务注册发现框架Zuul: 服务网关Karyon: 服务端框架Ribbon: 客户端框架Hystrix: 服务容错组件Archaius: 服务配置组件Servo: Metrics 组件Blitz4j: 日志组件下图 Fig 11 展示了基于这些组件构建的一个微服务框架体系,来自 recipes-rss。 Fig 11, 基于 Netflix 开源组件的微服务框架 Netflix 的开源框架组件已经在 Netflix 的大规模分布式微服务环境中经过多年的生产实战验证,正逐步被社区接受为构造微服务框架的标准组件。Pivotal 去年推出的 Spring Cloud 开源产品,主要是基于对 Netflix 开源组件的进一步封装,方便 Spring 开发人员构建微服务基础框架。对于一些打算构建微服务框架体系的公司来说,充分利用或参考借鉴 Netflix 的开源微服务组件 (或 Spring Cloud),在此基础上进行必要的企业定制,无疑是通向微服务架构的捷径。 原文地址:https://www.infoq.cn/article/basis-frameworkto-implement-micro-service#anch130564%20%EF%BC%8C
auto_answer 2019-12-02 01:55:22 0 浏览量 回答数 0

回答

Arraylist和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加插入元素,都允许直接序号索引元素,但是插入数据要涉及到数组元素移动等内存操作,所以插入数据慢,查找有下标,所以查询数据快,Vector由于使用了synchronized方法-线程安全,所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项前后项即可,插入数据较快。线性表,链表,哈希表是常用的数据结构,在进行java开发时,JDK已经为我们提供了一系列相应的类实现基本的数据结构,这些结构均在java.util包中,collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMapCollection接口Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(elements),一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:    Iterator it = collection.iterator(); // 获得一个迭代子    while(it.hasNext()) {      Object obj = it.next(); // 得到下一个元素    }  由Collection接口派生的两个接口是List和Set。List接口  List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和下面要提到的Set不同,List允许有相同的元素。  除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。  实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。ArrayList类  ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。  每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。  和LinkedList一样,ArrayList也是非同步的(unsynchronized)。Vector类  Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。Stack 类  Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。Map接口  请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。Hashtable类  Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。  添加数据使用put(key, value),取出数据使用get(key),这两个基本操作的时间开销为常数。Hashtable通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。使用Hashtable的简单示例如下,将1,2,3放到Hashtable中,他们的key分别是”one”,”two”,”three”:    Hashtable numbers = new Hashtable();    numbers.put(“one”, new Integer(1));    numbers.put(“two”, new Integer(2));    numbers.put(“three”, new Integer(3));  要取出一个数,比如2,用相应的key:    Integer n = (Integer)numbers.get(“two”);    System.out.println(“two = ” + n);  由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作。  如果相同的对象有不同的hashCode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个。  Hashtable是同步的。HashMap类  HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。WeakHashMap类  WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。总结  如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。  如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。  要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。  尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。同步性Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。数据增长从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。使用模式在ArrayList和Vector中,从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是其他操作,你最好选择其他的集合操作类。比如,LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的?O(1),但它在索引一个元素的使用缺比较慢-O(i),其中i是索引的位置.使用ArrayList也很容易,因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。最后,在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。
wangccsy 2019-12-02 01:48:37 0 浏览量 回答数 0

问题

供应链协同:基于核心能力理论的分析

一、企业核心能力理论 20世纪90年代以来,企业核心能力理论的研究一直是企业管理理论研究的一个热点问题。本文追踪国内外的研究成果,并在此基础上进行了深入的分析探讨,得出了一些结论。 表中结论...
hua2012h 2019-12-01 20:16:59 8862 浏览量 回答数 0

问题

小白用户ECS使用实践【持续连载中】

         与阿里云ECS服务器打交道三年了,作为ECS小白用户走来,也分享下自己使用ECS云服务器的主要教程,希望更多的小白用户一起在阿里云成长。 连载一小白起飞篇 ​    ...
qilu 2019-12-01 22:00:42 69070 浏览量 回答数 77

问题

线性表 7月8日 【今日算法】

线性表的定义: 由零个或多个数据元素组成的有限序列 注意: 首先它是一个序列,也就是说元素之间是有先来后到之分。若元素存在多个,则第一个元素无前驱,而最后...
游客ih62co2qqq5ww 2020-07-09 07:47:37 504 浏览量 回答数 1

问题

如何正确设置PDO连接

我不时看到有关连接数据库的问题。 大多数答案不是我做的方式,否则我可能只是无法正确获得答案。无论如何; 我从未考虑过,因为我的工作方式对我有效。 但是这里有个疯狂的想法;也许我做错了所有ÿ...
保持可爱mmm 2020-05-08 11:08:06 0 浏览量 回答数 1

回答

每一个进程都有自己的内存虚拟地址空间,内存最小的单位是页(page).虚拟地址通过页表(Page Table)映射到物理内存,页表由操作系统维护并被CPU引用.Linux默认的栈(stack)大小为8MB.用户进程部分分段存储内容如下所示(从内存高地址到低地址):栈(stack): 函数参数、返回地址、局部变量等堆(heap): malloc(C)/new(C++)动态分配的内存BSS段(bss): 未初始化或初值为0的全局变量和静态局部变量数据段(data): 已初始化且初值非0的全局变量和静态局部变量代码段(text): 可执行代码、字符串字面值、只读变量详细解释:1.内核空间内核总是驻留在内存中,是操作系统的一部分。内核空间为内核保留,不允许应用程序读写该区域的内容或直接调用内核代码定义的函数。2.栈(stack)栈又称堆栈,由编译器自动分配释放,行为类似数据结构中的栈(先进后出)。堆栈主要有三个用途:(1)为函数内部声明的非静态局部变量(C语言中称“自动变量”)提供存储空间。(2)记录函数调用过程相关的维护性信息,称为栈帧(Stack Frame)或过程活动记录(Procedure Activation Record)。它包括函数返回地址,不适合装入寄存器的函数参数及一些寄存器值的保存。除递归调用外,堆栈并非必需。因为编译时可获知局部变量,参数和返回地址所需空间,并将其分配于BSS段。(3)临时存储区,用于暂存长算术表达式部分计算结果或alloca()函数分配的栈内内存。持续地重用栈空间有助于使活跃的栈内存保持在CPU缓存中,从而加速访问。进程中的每个线程都有属于自己的栈。向栈中不断压入数据时,若超出其容量就会耗尽栈对应的内存区域,从而触发一个页错误。此时若栈的大小低于堆栈最大值RLIMIT_STACK(Linux通常是8M),则栈会动态增长,程序继续运行。映射的栈区扩展到所需大小后,不再收缩。Linux中ulimit -s命令可查看和设置堆栈最大值,当程序使用的堆栈超过该值时, 发生栈溢出(Stack Overflow),程序收到一个段错误(Segmentation Fault)。注意,调高堆栈容量可能会增加内存开销和启动时间。堆栈既可向下增长(向内存低地址)也可向上增长, 这依赖于具体的实现。本文所述堆栈向下增长。堆栈的大小在运行时由内核动态调整。3.内存映射段(mmap)此处,内核将硬盘文件的内容直接映射到内存,任何应用程序都可通过Linux的mmap()系统调用或Windows的CreateFileMapping()/MapViewOfFile()请求这种映射。内存映射是一种方便高效的文件I/O方式,因而被用于装载动态共享库。用户也可创建匿名内存映射,该映射没有对应的文件,可用于存放程序数据。在Linux中,若通过malloc()请求一大块内存,C运行库将创建一个匿名内存映射,而不使用堆内存。“大块”意味着比阈值MMAP_THRESHOLD还大,缺省为128KB,可通过mallopt()调整。该区域用于映射可执行文件用到的动态链接库。在Linux 2.4内核中,若可执行文件依赖共享库,则系统会为这些动态库在从0x40000000开始的地址分配相应空间,并在程序装载时将其载入到该空间。在Linux 2.6内核中,共享库的起始地址被往上移动至更靠近栈区的位置。从进程地址空间的布局可以看到,在有共享库的情况下,留给堆的可用空间还有两处:一处是从BSS段到0x40000000,约不到1GB的空间;另一处是从共享库到栈之间的空间,约不到2GB。这两块空间大小取决于栈、共享库的大小和数量。这样来看,是否应用程序可申请的最大堆空间只有2GB?事实上,这与Linux内核版本有关。在上面给出的进程地址空间经典布局图中,共享库的装载地址为0x40000000,这实际上是Linux kernel 2.6版本之前的情况了,在2.6版本里,共享库的装载地址已经被挪到靠近栈的位置,即位于0xBFxxxxxx附近,因此,此时的堆范围就不会被共享库分割成2个“碎片”,故kernel 2.6的32位Linux系统中,malloc申请的最大内存理论值在2.9GB左右。4.堆(heap)堆用于存放进程运行时动态分配的内存段,可动态扩张或缩减。堆中内容是匿名的,不能按名字直接访问,只能通过指针间接访问。当进程调用malloc(C)/new(C++)等函数分配内存时,新分配的内存动态添加到堆上(扩张);当调用free(C)/delete(C++)等函数释放内存时,被释放的内存从堆中剔除(缩减) 。分配的堆内存是经过字节对齐的空间,以适合原子操作。堆管理器通过链表管理每个申请的内存,由于堆申请和释放是无序的,最终会产生内存碎片。堆内存一般由应用程序分配释放,回收的内存可供重新使用。若程序员不释放,程序结束时操作系统可能会自动回收。堆的末端由break指针标识,当堆管理器需要更多内存时,可通过系统调用brk()和sbrk()来移动break指针以扩张堆,一般由系统自动调用。使用堆时经常出现两种问题:(1) 释放或改写仍在使用的内存(“内存破坏”);(2) 未释放不再使用的内存(“内存泄漏”)。当释放次数少于申请次数时,可能已造成内存泄漏。泄漏的内存往往比忘记释放的数据结构更大,因为所分配的内存通常会圆整为下个大于申请数量的2的幂次(如申请212B,会圆整为256B)。注意,堆不同于数据结构中的”堆”,其行为类似链表。5.BSS段BSS(Block Started by Symbol)段中通常存放程序中以下符号:未初始化的全局变量和静态局部变量.初始值为0的全局变量和静态局部变量(依赖于编译器实现).未定义且初值不为0的符号(该初值即common block的大小).C语言中,未显式初始化的静态分配变量被初始化为0(算术类型)或空指针(指针类型)。由于程序加载时,BSS会被操作系统清零,所以未赋初值或初值为0的全局变量都在BSS中。BSS段仅为未初始化的静态分配变量预留位置,在目标文件中并不占据空间,这样可减少目标文件体积。但程序运行时需为变量分配内存空间,故目标文件必须记录所有未初始化的静态分配变量大小总和(通过start_bss和end_bss地址写入机器代码)。当加载器(loader)加载程序时,将为BSS段分配的内存初始化为0。在嵌入式软件中,进入main()函数之前BSS段被C运行时系统映射到初始化为全零的内存(效率较高)。注意,尽管均放置于BSS段,但初值为0的全局变量是强符号,而未初始化的全局变量是弱符号。若其他地方已定义同名的强符号(初值可能非0),则弱符号与之链接时不会引起重定义错误,但运行时的初值可能并非期望值(会被强符号覆盖)。因此,定义全局变量时,若只有本文件使用,则尽量使用static关键字修饰;否则需要为全局变量定义赋初值(哪怕0值),保证该变量为强符号,以便链接时发现变量名冲突,而不是被未知值覆盖。某些编译器将未初始化的全局变量保存在common段,链接时再将其放入BSS段。在编译阶段可通过-fno-common选项来禁止将未初始化的全局变量放入common段。此外,由于目标文件不含BSS段,故程序烧入存储器(Flash)后BSS段地址空间内容未知。U-Boot(一个嵌入式操作系统引导程序)启动过程中,将U-Boot的Stage2代码(通常位于lib_xxxx/board.c文件)搬迁(拷贝)到SDRAM空间后必须人为添加清零BSS段的代码,而不可依赖于Stage2代码中变量定义时赋0值。BSS段不包含数据,仅维护开始和结束地址,以便内存能在运行时被有效地清零。BSS所需的运行时空间由目标文件记录,但BSS并不占用目标文件内的实际空间,即BSS节段应用程序的二进制映象文件中并不存在。6.数据段(data)数据段通常用于存放程序中已初始化且初值不为0的全局变量和静态局部变量。数据段属于静态内存分配(静态存储区),可读可写。数据段保存在目标文件中(在嵌入式系统里一般固化在镜像文件中),其内容由程序初始化。例如,对于全局变量int gVar = 10,必须在目标文件数据段中保存10这个数据,然后在程序加载时复制到相应的内存。数据段与BSS段的区别如下: (1) BSS段不占用物理文件尺寸,但占用内存空间;数据段占用物理文件,也占用内存空间。对于大型数组如int ar0[10000] = {1, 2, 3, ...}和int ar1[10000],ar1放在BSS段,只记录共有10000*4个字节需要初始化为0,而不是像ar0那样记录每个数据1、2、3...,此时BSS为目标文件所节省的磁盘空间相当可观。(2) 当程序读取数据段的数据时,系统会发出缺页故障,从而分配相应的物理内存;当程序读取BSS段的数据时,内核会将其转到一个全零页面,不会发生缺页故障,也不会为其分配相应的物理内存。运行时数据段和BSS段的整个区段通常称为数据区。某些资料中“数据段”指代数据段 + BSS段 + 堆。7.代码段(text)代码段也称正文段或文本段,通常用于存放程序执行代码(即CPU执行的机器指令)。一般C语言执行语句都编译成机器代码保存在代码段。通常代码段是可共享的,因此频繁执行的程序只需要在内存中拥有一份拷贝即可。代码段通常属于只读,以防止其他程序意外地修改其指令(对该段的写操作将导致段错误)。某些架构也允许代码段为可写,即允许修改程序。代码段指令根据程序设计流程依次执行,对于顺序指令,只会执行一次(每个进程);若有反复,则需使用跳转指令;若进行递归,则需要借助栈来实现。代码段指令中包括操作码和操作对象(或对象地址引用)。若操作对象是立即数(具体数值),将直接包含在代码中;若是局部数据,将在栈区分配空间,然后引用该数据地址;若位于BSS段和数据段,同样引用该数据地址。代码段最容易受优化措施影响。8.保留区(reservd)位于虚拟地址空间的最低部分,未赋予物理地址。任何对它的引用都是非法的,用于捕捉使用空指针和小整型值指针引用内存的异常情况。它并不是一个单一的内存区域,而是对地址空间中受到操作系统保护而禁止用户进程访问的地址区域的总称。大多数操作系统中,极小的地址通常都是不允许访问的,如NULL。C语言将无效指针赋值为0也是出于这种考虑,因为0地址上正常情况下不会存放有效的可访问数据。在32位x86架构的Linux系统中,用户进程可执行程序一般从虚拟地址空间0x08048000开始加载。该加载地址由ELF文件头决定,可通过自定义链接器脚本覆盖链接器默认配置,进而修改加载地址。0x08048000以下的地址空间通常由C动态链接库、动态加载器ld.so和内核VDSO(内核提供的虚拟共享库)等占用。通过使用mmap系统调用,可访问0x08048000以下的地址空间。
a123456678 2019-12-02 02:41:17 0 浏览量 回答数 0

回答

_而%不是通配符在MySQL一般,而且不应该被转义,将它们放入普通的字符串字面量的目的。mysql_real_escape_string是正确的,足以满足此目的。addcslashes不应该使用。 _并且%仅在LIKE-matching 上下文中是特殊的。当您想为LIKE语句中的文字使用准备字符串时,要100%匹配百分之一百,而不仅仅是以100开头的任何字符串,都需要担心两种转义。 首先是喜欢转义。LIKE处理完全在SQL内部进行,如果要将文字字符串转换为文字LIKE表达式,即使使用参数化查询,也必须执行此步骤! 在此方案中,_并且%是特殊的,必须进行转义。转义字符也必须转义。根据ANSI SQL,除这些字符外,不得转义:'这是错误的。(尽管MySQL通常会让您摆脱它。) 完成此操作后,您进入第二个转义级别,这是普通的旧字符串文字转义。这发生在SQL之外,创建SQL,因此必须在LIKE转义步骤之后完成。对于MySQL,这mysql_real_escape_string和以前一样。对于其他数据库,它将具有不同的功能,您可以只使用参数化查询来避免这样做。 这里引起混乱的问题是,在MySQL中,两个嵌套转义步骤都使用反斜杠作为转义字符!因此,如果要将字符串与文字百分号匹配,则必须双反斜杠转义并说出LIKE 'something\%'。或者,如果在PHP "文字中也使用反斜杠转义,则"LIKE 'something\\%'"。啊! 根据ANSI SQL,这是不正确的,它表示:在字符串文字中,反斜杠表示文字反斜杠,而转义单引号的方式为'';在LIKE表达式中,默认情况下根本没有转义符。 因此,如果要以可移植的方式进行LIKE逸出,则应覆盖默认(错误)行为,并使用该LIKE ... ESCAPE ...构造指定自己的逸出字符。为了理智,我们将选择除该死的反斜杠以外的其他东西! function like($s, $e) { return str_replace(array($e, '', '%'), array($e.$e, $e.'', $e.'%'), $s); } $escapedname= mysql_real_escape_string(like($name, '=')); $query= "... WHERE name LIKE '%$escapedname%' ESCAPE '=' AND ..."; 或带有参数(例如在PDO中): $q= $db->prepare("... WHERE name LIKE ? ESCAPE '=' AND ..."); $q->bindValue(1, '%'.like($name, '=').'%', PDO::PARAM_STR); (如果您希望有更多的可移植性聚会时间,那么尝试考虑MS SQL Server和Sybase也可能会很有趣,因为其中的[字符在LIKE语句中也是不正确的,并且必须转义。argh。)来源:stack overflow
保持可爱mmm 2020-05-11 16:19:53 0 浏览量 回答数 0

问题

权限管理

权限管理概述 权限管理的基本概念 权限管理包括数据对象管理和行级权限管理。 数据对象包括 数据源、数据集、工作表、仪表板、数据门户等。 数据对象的管理又分 个人空间下数据对象的管理 和群空间中数据对象的管理。 群空间中数...
反向一觉 2019-12-01 21:05:45 1249 浏览量 回答数 0

回答

解决方案 远程连接并登录到 Windows 实例。 右击计算机图标,单击管理。 在服务器管理器页面,选择配置>服务。找到并双击 Software Protection。  在弹出的窗口选择启动。 说明:如果 Software Protection 服务启动异常或者启动的时服务丢失,按照以下方法来重建 Software Protection 服务。 运行   regedit,打开注册表,定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sppsvc,右键选择 导出,备份当前文件到 C:\sppsvc_bak.reg。 在一台相同版本的正常 Windows 实例上采用上述方法,将 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sppsvc 导出为 sppsvc_good.reg。 将上一步骤中得到的 sppsvc_good.reg 文件拷贝到问题机器,然后双击此文件。当系统提示您是否确认导入注册表时,单击 是。之后会有提示说明已经成功导入注册表。启动服务后再次尝试激活。 如果失败,请将双击之前备份的 C:\sppsvc_bak.reg 文件重新导回到系统。 网络异常导致激活失败 问题现象 在激活时,桌面右下角出现 “Windows 不是正版”的激活提示。然后根据微软自助正版激活教程进行手动激活的时候,出现错误提示:0xC004F074 软件授权服务报告无法激活计算机,密钥管理服务(KMS)不可用。 问题分析 出现这个报错一般都是由于服务器到 KMS 之间的网络存在问题,导致服务器无法跟 KMS 进行通讯。网络存在问题可能是由于 Windows 实例中系统防火墙、IP 安全策略,或其它网络安全管理软件阻断了服务器与 ECS 激活服务器(KMS.aliyun-inc.com TCP 1688 端口)之间的通信导致的。 解决方案 查看系统防火墙是否对 KMS.aliyun-inc.com TCP 1688 端口做了拦截。如果您的防火墙内设置了拦截 TCP 1688 端口的出入站规则,您需要右键选择删除该规则。查看出入站规则,参考设置 Windows 实例远程连接防火墙中的添加端口规则章节。 查看是否配置了 IP 安全策略,阻断了对 KMS.aliyun-inc.com 解析出的 IP 的访问。运行 ping KMS.aliyun-inc.com解析 IP,然后查看 IP 安全策略中是否有阻止该 IP 的策略。如果有相关策略,对该策略进行删除。查看 IP 安全策略,参考 服务器 ping 外网提示一般故障处理方法中 查看是否设置了 IP 安全策略章节。 查看是否有其它安全软件对 KMS.aliyun-inc.com TCP 1688 端口的访问做了拦截。 执行 route print命令查看服务器内部的路由是否正常,如果缺失内网路由需要手动加上。 上面 4 项都排查了以后,在实例运行 telnet KMS.aliyun-inc.com 1688,成功后对实例进行激活。 服务器时钟不同步导致激活失败 问题分析 服务器时钟需要跟 KMS 服务器的时钟一致,如果时钟出现偏差也会导致激活失败。 解决方案 用户可以在系统桌面右下角确认当前系统时间是否正常。如果确认系统时间明显有很大偏差,用户可以在系统桌面右下角手工修改系统时间配置,也可以通过下面命令同步时钟,同步完成以后再执行激活。 net start W32Time w32tm /resync 磁盘空间满了导致激活失败 问题现象 尝试激活的时候,提示“找不到产品”。 问题分析 出现这个报错可能是服务器的系统盘空间满了,导致没有足够的空间用于激活。 解决方案 清理 C 盘释放磁盘空间,再次重新手动激活即可。 激活码不正确导致激活失败 问题现象 激活的时候报错,错误代码为“C004F015”。 问题分析 这种情况可能是由于系统使用的激活码跟系统的版本不匹配,一般都是人为激活修改导致的。 解决方案 查看微软官方信息。根据操作系统的实际版本来查询激活码。 执行slmgr /ipk <setup key>替换匹配的激活码,然后执行slmgr -ato命令激活系统。 说明:本文仅供用户使用 ECS Windows 时参考,文中引用的微软官方链接,版权归属微软。请注意文章适用的操作系统范围,以及微软 Windows 产品迭代或者文档未及时更新可能带来的问题,阿里云官方不对引用的微软官方链接内容负责。 望采纳,谢谢🙏
元芳啊 2019-12-02 00:12:47 0 浏览量 回答数 0

问题

八大排序算法

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有...
琴瑟 2019-12-01 20:54:01 14297 浏览量 回答数 5

回答

呼叫 @中山野鬼######叫我做什么?这些都是教科书的东西。哈。。。基本无视。答的好的未必干的好,干的好的未必答的好。中国有中国的国情。如果要我回答,没有什么异议的我就不说了,我说说可能和标准答案结果不对的我的态度(当然我也不知道标准答案)。 第1题,我没什么异议。不过,在中国,非语言传递的信息,能有5%是可靠的就不错了。纸面上的东西无论再怎么正确,客户决策者的态度,不会在纸面上摆着,不吃饭,不吹牛,怎么摸的清楚? 第2题,比较扯淡,标准学院派的。因为“缺陷”的定义是动态的。同样的问题,对于不同的客户关注点是不同的。例如OA系统,报表是个大头,但对于数据库,LOG足够。即便有BUG,重要性才决定它是否算是个缺陷。这种动态的东西怎么可能后面有个基本排序原则。   例如,第4题,更接近实际情况的是a,进度问题。但我不知道上面的标准答案是什么。 例如第7题,这个题目称述有问题,因为客户在扩大项目范围时,项目经理要做的是递烟,泡澡,塞纸钱而使得甲方另起项目,而不是在原有项目中扩充,或修改合同。项目经理看到的并不是个计划的实施,而是一个合同。对合同外的描述内容,应该以增补和另立合同为主此已经超出了项目经理的职权范围。项目范围扩大65%,成本增加4倍(也就老外想的出,项目范围扩大4倍,成本增加65%倒更贴近实际,否则更本就是不能接的单子),这就不是一个项目内可接受的现实。如果甲方非要如此,还是上面的三个步骤,不然就死破脸走官司路线。公司就是关门,也不能自己贴钱这么给甲方耍,没底线的乙方,是做不成甲方认可的东西的,也是活不长久的乙方。 第8题表示,整个题目是老外出的,哈。以我的经验,大头是项目计划实施。 简答题中,第5题也是有问题的,至少我有很大异议,原型更本就不应该在项目中出现。除非原型设计就是项目本身,此时也就不存在针对项目的原型一说。 国内,很多问题不是问题,只要问题本身不是人的问题。是问题的,都是人的思想问题。国内从老板到一线员工,出了问题,感性的很多,就是屁股决定意识的很多。所以国内做项目经理,最要紧的还是靠嘴巴说。要么中国怎么“厚黑”能成个学问呢。######主要想看你对简答那块的经验######如果是简答题,上面没有说的题目我补充一下,也当给这里的朋友提点片面的意见,以后要面试或许能用上,无论正面还是反面。 1、这个题目比较虚。得看什么类型的项目。但无非是计划、实施(执行),验收,三个环节。我说了,不能出现变更,当然实际情况不能没有变更。项目经理和其他人员要和甲方互动到,形式变更实质没变更的程度才行。项目实施不存在规划问题,这个是售前的事情。计划属于售前规划后的细化。实施是计划的落地和推进。验收这块存在调整,但在计划和实施中需要提前和甲方互动,项目实施的整体其实就围绕一个核心,就是合同的履行,所以所有工作都是围绕验收来忙。 2、这个问题很小白。工期是计划时间表,工作量是执行量。两个东西毛关系没有。而且工作量和业务本身的形态有关,有些东西先进场,有些东西后才到,比如你代码没写好,测个毛啊?当然这里说的不是测试代码本身的构造,只是基于测试代码已经存在的情况。工期和工作量没有对等关系。 3、这个问题问的比较好。就我的经验,明确谈什么,这是第一。明确想要什么,这是第二。余下就是开会。开会其实有三种。一种是传达信息。一种是说服别人,一种是汇总信息。每种不一样。传达信息,确认大家明确就OK。说服别人重点不在于用谁的意见说服,重点在于大家一致认可。汇总信息重点在明确大家说清楚了该说的内容。 4、这个我个人觉得是挺白痴的问题,可能对有些企业有些项目经理的考核是需要的。这个问题如同有次我去算法的面试,有人问我XX版本管理工具会不会?确实不会。当时不仅有种弱智感,同时还有种BS惜BS的感觉。我还没无聊到靠工具来维护自己的技术水平证明的低级趣味阶段。 6、这个问题,只有一个结论。就是硬抗过去。没有它法。因为资源不足,你分包,或者卖掉都不切合实际。 7、项目经理主要做哪些内容,其实也很简单,首先是协调,组内协调,甲乙双方的协调。其次是决策调整,根据组内和甲乙双方的情况调整规划和审核内容,最后是审核阶段情况。 不能反过来做,先审核内部,再去协调和和调整。项目实施是有时间期限的,多拖一天,公司多投入一份,回款的变数也多一份。好的项目经理在于先能搞清楚哪些是需要拖的问题,哪些是需要解决的问题。前者尽快留资源准备,后者尽量掩盖以回避。 虽然上面有些话说的很负面,但实际上都是中立的话。做事情就是做事情。把事情做好皆大欢喜,而不存在什么吭蒙拐骗一说。而好和不好,对乙方就是少投入,收回款。对甲方就是保护好甲方投入的价值存在。 后面一句话可能很多人又不理解了。我先说个做人的道理,你不考虑对方,对方就不会考虑你。再简单举个例子:比如客户要上个项目,那么你搞不清楚客户上项目的更本动力在哪,你就无法从客户的角度来判断,你所带的项目,哪些是能给你客户带来价值的。哪些对他是没价值的。客户投钱,不是你的钱,也只是给你所在公司的,但是既然你是做项目经理,你就要对这笔钱的投入保护好,也就是让该展现的展现。什么是该展现的?不是客户的某个代表认为有价值的,而是确实对客户有价值的。 如果你只以客户的某个代表的喜好来判断客户(抽象的)投入的价值点,那么迟早会倒霉。如果你真从客户的角度来判断价值点,你也迟早会说服客户。###### 引用来自“中山野鬼”的答案 如果是简答题,上面没有说的题目我补充一下,也当给这里的朋友提点片面的意见,以后要面试或许能用上,无论正面还是反面。 1、这个题目比较虚。得看什么类型的项目。但无非是计划、实施(执行),验收,三个环节。我说了,不能出现变更,当然实际情况不能没有变更。项目经理和其他人员要和甲方互动到,形式变更实质没变更的程度才行。项目实施不存在规划问题,这个是售前的事情。计划属于售前规划后的细化。实施是计划的落地和推进。验收这块存在调整,但在计划和实施中需要提前和甲方互动,项目实施的整体其实就围绕一个核心,就是合同的履行,所以所有工作都是围绕验收来忙。 2、这个问题很小白。工期是计划时间表,工作量是执行量。两个东西毛关系没有。而且工作量和业务本身的形态有关,有些东西先进场,有些东西后才到,比如你代码没写好,测个毛啊?当然这里说的不是测试代码本身的构造,只是基于测试代码已经存在的情况。工期和工作量没有对等关系。 3、这个问题问的比较好。就我的经验,明确谈什么,这是第一。明确想要什么,这是第二。余下就是开会。开会其实有三种。一种是传达信息。一种是说服别人,一种是汇总信息。每种不一样。传达信息,确认大家明确就OK。说服别人重点不在于用谁的意见说服,重点在于大家一致认可。汇总信息重点在明确大家说清楚了该说的内容。 4、这个我个人觉得是挺白痴的问题,可能对有些企业有些项目经理的考核是需要的。这个问题如同有次我去算法的面试,有人问我XX版本管理工具会不会?确实不会。当时不仅有种弱智感,同时还有种BS惜BS的感觉。我还没无聊到靠工具来维护自己的技术水平证明的低级趣味阶段。 6、这个问题,只有一个结论。就是硬抗过去。没有它法。因为资源不足,你分包,或者卖掉都不切合实际。 7、项目经理主要做哪些内容,其实也很简单,首先是协调,组内协调,甲乙双方的协调。其次是决策调整,根据组内和甲乙双方的情况调整规划和审核内容,最后是审核阶段情况。 不能反过来做,先审核内部,再去协调和和调整。项目实施是有时间期限的,多拖一天,公司多投入一份,回款的变数也多一份。好的项目经理在于先能搞清楚哪些是需要拖的问题,哪些是需要解决的问题。前者尽快留资源准备,后者尽量掩盖以回避。 虽然上面有些话说的很负面,但实际上都是中立的话。做事情就是做事情。把事情做好皆大欢喜,而不存在什么吭蒙拐骗一说。而好和不好,对乙方就是少投入,收回款。对甲方就是保护好甲方投入的价值存在。 后面一句话可能很多人又不理解了。我先说个做人的道理,你不考虑对方,对方就不会考虑你。再简单举个例子:比如客户要上个项目,那么你搞不清楚客户上项目的更本动力在哪,你就无法从客户的角度来判断,你所带的项目,哪些是能给你客户带来价值的。哪些对他是没价值的。客户投钱,不是你的钱,也只是给你所在公司的,但是既然你是做项目经理,你就要对这笔钱的投入保护好,也就是让该展现的展现。什么是该展现的?不是客户的某个代表认为有价值的,而是确实对客户有价值的。 如果你只以客户的某个代表的喜好来判断客户(抽象的)投入的价值点,那么迟早会倒霉。如果你真从客户的角度来判断价值点,你也迟早会说服客户。 请问先生,这些知识或者叫经验,你是怎么学到的,或者说知道的? 我想学习你的学习能力。 ######我奇怪的是如果世上所有的项目经理都是这个标准来考核那将没有经理可言,因为这些题都是针对那些有丰富经验的项目经理,刚上任的经理能答出这些题目算见鬼了。######对单选题表示无语。###### 引用来自“李渊”的答案 引用来自“中山野鬼”的答案 如果是简答题,上面没有说的题目我补充一下,也当给这里的朋友提点片面的意见,以后要面试或许能用上,无论正面还是反面。 1、这个题目比较虚。得看什么类型的项目。但无非是计划、实施(执行),验收,三个环节。我说了,不能出现变更,当然实际情况不能没有变更。项目经理和其他人员要和甲方互动到,形式变更实质没变更的程度才行。项目实施不存在规划问题,这个是售前的事情。计划属于售前规划后的细化。实施是计划的落地和推进。验收这块存在调整,但在计划和实施中需要提前和甲方互动,项目实施的整体其实就围绕一个核心,就是合同的履行,所以所有工作都是围绕验收来忙。 2、这个问题很小白。工期是计划时间表,工作量是执行量。两个东西毛关系没有。而且工作量和业务本身的形态有关,有些东西先进场,有些东西后才到,比如你代码没写好,测个毛啊?当然这里说的不是测试代码本身的构造,只是基于测试代码已经存在的情况。工期和工作量没有对等关系。 3、这个问题问的比较好。就我的经验,明确谈什么,这是第一。明确想要什么,这是第二。余下就是开会。开会其实有三种。一种是传达信息。一种是说服别人,一种是汇总信息。每种不一样。传达信息,确认大家明确就OK。说服别人重点不在于用谁的意见说服,重点在于大家一致认可。汇总信息重点在明确大家说清楚了该说的内容。 4、这个我个人觉得是挺白痴的问题,可能对有些企业有些项目经理的考核是需要的。这个问题如同有次我去算法的面试,有人问我XX版本管理工具会不会?确实不会。当时不仅有种弱智感,同时还有种BS惜BS的感觉。我还没无聊到靠工具来维护自己的技术水平证明的低级趣味阶段。 6、这个问题,只有一个结论。就是硬抗过去。没有它法。因为资源不足,你分包,或者卖掉都不切合实际。 7、项目经理主要做哪些内容,其实也很简单,首先是协调,组内协调,甲乙双方的协调。其次是决策调整,根据组内和甲乙双方的情况调整规划和审核内容,最后是审核阶段情况。 不能反过来做,先审核内部,再去协调和和调整。项目实施是有时间期限的,多拖一天,公司多投入一份,回款的变数也多一份。好的项目经理在于先能搞清楚哪些是需要拖的问题,哪些是需要解决的问题。前者尽快留资源准备,后者尽量掩盖以回避。 虽然上面有些话说的很负面,但实际上都是中立的话。做事情就是做事情。把事情做好皆大欢喜,而不存在什么吭蒙拐骗一说。而好和不好,对乙方就是少投入,收回款。对甲方就是保护好甲方投入的价值存在。 后面一句话可能很多人又不理解了。我先说个做人的道理,你不考虑对方,对方就不会考虑你。再简单举个例子:比如客户要上个项目,那么你搞不清楚客户上项目的更本动力在哪,你就无法从客户的角度来判断,你所带的项目,哪些是能给你客户带来价值的。哪些对他是没价值的。客户投钱,不是你的钱,也只是给你所在公司的,但是既然你是做项目经理,你就要对这笔钱的投入保护好,也就是让该展现的展现。什么是该展现的?不是客户的某个代表认为有价值的,而是确实对客户有价值的。 如果你只以客户的某个代表的喜好来判断客户(抽象的)投入的价值点,那么迟早会倒霉。如果你真从客户的角度来判断价值点,你也迟早会说服客户。 请问先生,这些知识或者叫经验,你是怎么学到的,或者说知道的? 我想学习你的学习能力。 吹水的说一句,无论你信不信,曾经在一家公司,我只是个技术人员。做算法写代码。不过平时对于公司管理的东西也带这思考。公司整体的每月运营支出,我的估算和外面朋友做的调研基本上接近。我觉得没什么刻意学吧,如同你对数字感兴趣,对很多数学问题就会很敏感。如果你对管理有兴趣,对很多组织化的东西就会很敏感。沉淀久了,多少也能算水多。。。 ######学习了######请参考 信息系统项目管理师 这本教材,虽然这是理论,现实项目中不一定这样,但是你要去应聘一个比较大的项目的项目经理时,还是要有一定的理论支撑的,项目越大作用越明显######哈。水平的深度是由理论的高度决定的嘛。希望我关于对学院派的鄙夷不要误导大家理解理论。######嗯 项目越大越明显######PMP例题?######这个是考试题,不是面试题######回复 @dedenj : 呵呵 专业的PM 这是基础######个人觉得,如果我去应聘PM,别人甩一张这个试卷来,我直接闪人。至少说明一点,这个公司的HR不知道到底如果招聘PM。。 我们不是来考PM证的,要考证至少要加几题,PM主要职责是什么,关键路径和成本控制,沟通原则,呵呵######就是面试时做的一份简单试卷
kun坤 2020-06-08 11:13:54 0 浏览量 回答数 0

问题

grails最佳实践:报错

我工作于IntelliGrape, 一个专用Groovy&Grails开发项目的公司. 本文列举了我们Grails项目遵循的几个基本的最佳实踐, 它们通过邮件, Stack Overflow, 博客, podcasts, 和公司内部...
kun坤 2020-06-14 15:53:05 0 浏览量 回答数 1

问题

grails最佳实践:配置报错 

我工作于IntelliGrape, 一个专用Groovy&Grails开发项目的公司. 本文列举了我们Grails项目遵循的几个基本的最佳实踐, 它们通过邮件, Stack Overflow, 博客, podcasts, 和公司内部...
kun坤 2020-06-02 15:16:24 0 浏览量 回答数 1

回答

首先,需要告诉楼主的是:无论SLB是否是一个已经正式商用的产品,我们对外所能提供的服务质量与已经正式商用的其他产品都是没有区别的。并不会存在非正式商用的产品存在稳定性差或服务标准低的说法。 其次,关于SLB的性能和所能达到的对外服务能力,这个除了SLB系统本身所能支持的范畴有关外,也与SLB后端的ECS云服务器本身性能有着密切的关系。但是,可以确保的是SLB系统本身是以集群的方式工作的,当我们系统还没有达到服务瓶颈的时候我们就会做横向的扩容从而确保系统本身的稳定性和可用性。所以,建议楼主在实际使用前可以根据自己的实际应用场景测试一下相关的服务,从而做到心里有数。 关于问题中涉及到的一些细节,比如SLB的转发、SLB的健康检查回报等问题,我看到@vpsmm已经做了较为详细的解答,也请楼主了解,同时感谢@vpsmm的热心回答。 另,关于SLB的流量监控问题,后续我们会通过与云监控结合的方式由云监控来统一进行核心监控指标的监控、性能图表展示和报警。 最后,关于博客园提到过的问题,如果关注该事件的用户从头到尾的浏览过所有博客园官方博客的话可以发现,目前问题的定位并没有最终指向是由于SLB系统不稳定导致的,这个还请大家了解并持续关注,我们也会最大程度的配合博客园最终查明问题原因的。 最后的最后,感谢大家对SLB的支持和关注,也希望大家都能像楼主一样把对SLB产品的看法、建议和疑惑反馈给我们,以促进我们更好的改进我们的产品,更好的服务于大家! ------------------------- 回 6楼(billz) 的帖子 如果SLB系统真的像楼主描述的那样存在当后端云服务器出现CPU利用率达到60-70%就会出现SLB访问不稳定的情况,那么我的建议是楼主可以通过工单提供一下你的VIP信息,我们的工作人员会帮助你针对这个情况进行核实和问题定位的。 ------------------------- 回 12楼(billz) 的帖子 那楼主是否方便把发生在你身上和你对外提供服务身上的问题直接提交给我,我们首先针对这个问题进行分析呢?这样至少可以先解决楼主自身的疑惑和困扰,从而确保楼主对外的服务问题得到妥善的解决。 另,关于客服工单服务质量的问题,我们内部已经在进一步加强对客服人员的培训和处理流程的优化,相信通过我们的努力一定会提升服务质量和专业度,从而保证所有用户通过工单提交的问题都能得到明确的定位、准确的解答和妥善的解决。 ------------------------- 回 14楼(billz) 的帖子 既然不稳定的问题已经出现在了你的对外应用服务中,我的建议还是希望你能够配合我们一起把问题查一下,这样对于我们自身系统的成长和你本身对外服务的稳定性来说都是有益的。如果通过定位分析,问题真的是由SLB系统造成的,那么我们肯定会尽快给予解决和修复。因为很多问题在没有复现和最终定位的情况下只是通过简单的通用性测试是没有办法涵盖所有case和应用场景的(随着客户的逐渐增加,客户本身的应用场景越来越复杂和个性化,我们也需要大家的帮助来不断的完善我们的平台和服务),所以还是希望你能够协助我们一并解决问题,而不是采取变相的手段来掩盖问题本身。 阿里云的成长需要大家一起的努力来达成,感谢你及其他用户的支持! ------------------------- 回 16楼(qw6789) 的帖子 关于这位朋友的说法我有一点补充意见,SLB系统本身除了可以做到负载均衡外,还有一个更有价值的功能是提供容灾避免单点故障,这个是单个ECS实例无法保障的。如果你对服务的对外可用性要求非常之高,那么可以通过SLB的方式来做到单点故障发生时自动的将请求分发到正常的服务节点,从而确保对外服务的不中断。 关于SLB的稳定性,一直都是我们努力提升和保障的核心,2011年底SLB服务刚上线,所以可能出现了像这位朋友所说的不稳定的情况,但是随着我们的不断优化目前这种情况也已经得到了有效的抑制。同时,在SLB服务还达不到一个非常高的标准之前,我们也不会对其做商业化开发的。所以,我们也是在不断的加强我们的服务,确保他早一日能够达到最好的状态并为大家带来更大的价值。 ------------------------- 回 52楼(cn0555) 的帖子 请确保作为SLB后端的工作的两台云服务器的web server配置和程序文件/数据库文件保持一致,这两台云服务器在SLB中的地位是一样的(可以设定权重),不存在主从的关系。 ------------------------- 回 54楼(cn0555) 的帖子 关于数据同步,请参考这个帖子: http://bbs.aliyun.com/read.php?tid=118907
billlee 2019-12-02 01:08:30 0 浏览量 回答数 0

问题

Web测试方法

在Web工程过程中,基于Web系统的测试、确认和验收是一项重要而富有挑战性的工作。基于Web的系统测试与传统的软件测试不同,它不但需要检查和验证是否按照设计的要求运行,而且还要测试系统在不同用户的浏...
技术小菜鸟 2019-12-01 21:41:32 7022 浏览量 回答数 1

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务