大家好,我是 shixin
最近看完了专栏《超级访谈:对话毕玄》,这个专栏和年初看的《超级访谈:对话汤峥嵘》类似,都是对阿里 P10(程序员金字塔顶端大佬)的访谈,介绍了他们的成长经历和人生感悟,让我受益颇多。这篇文章里我将对这两个专栏的内容做一个对比总结。
本文主要包括这些内容:
可能很多人对阿里 P10 是什么概念还不清楚,这一节我们来简单了解下。
P 序列是阿里内部评价研发等职能人员的级别体系。
一般来说刚毕业是 P4(本科) 或者 P5(研究生);工作三年左右达到要求者可以升至 P6 高级工程师;工作五年左右、技术达到一定深度可以升至 P7 技术专家,这个阶段确定性还是很强的,一般只要投入一定的努力就可以实现。
再往上走就不单单是个人努力这么简单,天时(大环境和业务所属赛道前景)、地利(业务发展情况)、人和(个人能力和领导)缺一不可,运气不好可能一辈子都没机会再往上升,因此 P7 是大部分程序员的职级天花板。据统计,阿里停留在 P7 级别的开发约有万人。
如果足够优秀并且幸运,可以负责较大业务的一端技术(比如 Android/iOS/前端/后端),就能达到 P8 技术主管级别。据统计,阿里 P8 级别的开发约有五千人。
再往上,不仅具备某一端的技术能力和管理能力,还具备跨端沟通协作和商业思维,可以为业务整体技术保驾护航,就达到了 P9 总监级别。据统计,阿里 P9 级别的开发约一千余人。
再往上走就到了我们今天要学习的两位大佬的级别:P10 研究员/资深总监。P10 不仅在公司内很有话语权,同时在行业内也有很大的影响力。据统计,P10 在阿里大概只有五百人。
通过以上数据我们可以看到,在二十多万员工的阿里集团中只有几百人可以达到 P10 级别,几乎可以算的上千里挑一、人中龙凤。他们的身上一定有很多优秀的习惯和个人素质值得我们学习。
相信不少人和我一样,对这些高段位大佬的成长经历有很强的好奇心,想知道他们是如何达到这一步的,这期间有什么关键的选择。这一节我们来看下他们的成长经历,通过了解前辈是如何成长的,可以帮助我们站在更高的角度审视自己。
首先来看下汤峥嵘前辈成长的关键节点和值得我们参考的点。
汤峥嵘在读书时就很优秀,90 年代在清华读书,大学期间选择退学去美国留学,在美国半工半读的经历,让他逐渐学会自己做选择、对结果负责。
汤峥嵘提到,在大学时他知道中国的计算机水平比美国差的很远,于是选择去更发达的美国去看看。当时(九十年代)国内的互联网刚起步,在美国学习、工作会比在国内机会更多。
中国互联网大事记
值得我们参考的:
汤峥嵘之所以能够去国外留学,一方面是因为他知道国外计算机更好,另一方面是因为他有很强的“选择更先进的环境“的思维,即使换个环境会面临很多不确定和孤独,但他更关注确定的一面。这一点值得我们学习。
有时候我们只知道低头做事,却不知道环境对结果的影响,同样的力气,在平地上走和在自动人行道上走,明显后者速度更快。
在成长阶段,去更发达的环境里会让我们事半功倍,比如去更好的学校、更大的公司、更发达的国家/城市。环境的影响虽然短期内可能没有那么明显,但假以时日,差异便会凸显出来。
那如何知道“什么是更好的“呢?这其实有点“马太效应”,所处的环境越好,有效信息密度越大,知道的好东西、好方向更多,于是“富人“越富。
过去已然无法改变,我们能做的就是在日常生活里,主动去参与一些有价值的活动、项目,在其中认识更多的人,从而获取更多有效的信息,并且调整自己的行动。
1995 年硕士毕业后,汤峥嵘选择留在美国工作。前六年在匹兹堡,后四年在硅谷。
在找第一份工作时,汤峥嵘投了两百份简历,并且每份都做了个性化修改。他把这种行为叫“过度努力”,就是把 60 分就可以的事做到八九十分。
第一份工作中他很快就做到了技术主管的职位,究其原因主要是亮点:
在匹兹堡工作时,业务发展经历了快速发展(招了很多人)、钱烧完(裁员)、被收购(又招人)多个阶段,由于汤对业务和代码的熟悉程度,始终没有影响到他的工作。
第一份工作让他明白:做技术编程能力是第一位的,只要有能力,公司倒了都不怕。
后来汤峥嵘去硅谷工作了四年,在那里换了好多家小公司。相较于第一份工作中的踏实做事成长,在硅谷他遇到职业发展的迷茫:是做管理还是往技术上发展。最终由于没有适合的工作,决定回国加入淘宝。
值得我们参考的:
首先值得学习的一点是“利用优势打出价值”。
我们需要知道自己当下在什么方面是比普通人有优势的,趁着自己优势还在,选择能够发扬优势的方向,而不是丢掉优势和别人同起点竞争。
汤峥嵘毕业后的第一份工作年薪四万美金,在当时这是相当高的,要知道同一时期的北京平均年薪只有 8144元。
北京历年平均工资
在 1995 年,美国 GDP 大约是中国的十倍,能够在更发达的国家做互联网,这就是汤当时的优势。如果他毕业时选择回国工作,就相当于丢掉了优势,浪费了一把好牌。
中国、美国历年GDP数据比较
另外一个值得学习的点是“过度努力”思维。
汤峥嵘说“做所有事总是喜欢多做一点,我才放心”,这其实是他个人素质的外在表现,说明他是一个有高标准的人,事事力求做到较好,不随便,用常说的话就是“很靠谱”。
在读书时,我们的努力程度可以通过成绩和排名看出来,因此有时候会迫于外界压力逼着自己做一些事。但工作以后,很少有人会直接告诉你,你做的事可以得几分。在标准变得模糊后,事情要做到什么程度,就完全看做事者的内在要求。
对公司来说,肯定希望员工都尽职尽责把事情做到更好。在招聘的时候之所以优先选择学历更好的人,一部分原因也是因为能够上好学校的人,往往对自己要求比较高,做事有高标准。
对个人来说,我们需要积累一个个成功案例,让别人可以快速的知道自己是靠谱的。因此在面临“随便一点还是认真一点“时,尽可能的认真一点吧!
2003 年看到吴炯(阿里第一任 CTO)在清华 Email 群组发的招聘广告,由于当时处于职业发展的迷茫期,看到国内互联网的氛围越来越好,汤峥嵘决定参加面试,最终也通过了。
在保留一年 offer 后,2004 年汤峥嵘决定回国加入淘宝,作为主架构师,负责架构迁移工作。在当年 10 月转到支付宝部门负责技术,带领 Sun 外包开发项目。后来做了六年 B2B 业务,前三年负责国际网站的技术,三年后任日本阿里巴巴 CTO。
阿里大事记
加入阿里后,汤峥嵘的职业发展不再迷茫,走上了管理路线。
在阿里的几年里他逐渐认识并接受了阿里文化,在专栏里分享了很多关于管理的话题,后面的部分我们会具体查看。
值得我们参考的:
首先一点是获取高质量信息。
汤峥嵘能够看到淘宝的招聘广告,源自他的清华 Email ,这本质上就是高质量信息渠道。这让我开始反思自己平时关注的信息,有多少信息是对以后有价值的,信息来源是否是高质量的。现在我获取信息主要来自公众号、新闻网站、书籍、付费课程网站、技术网站,很多是二手信息,并且还局限在某一技术领域,少了些更高层面的信息,比如国内外互联网行业发展等。
还有一点是有意识的积累信心。
汤峥嵘认为阿里给他最大的价值是让他积累了很多信心:“一个人往前走,你的信心是怎么来的很重要,我想就是因为我过去做成功的几件小事情,然后复用这个经验,或者凭借这些成功给我的信心,不断向前”。
当我们做成一件事后,即使这件事很小,心里也会有微小而充实的幸福感。这个时候,我们最好有意识地记录下这件事的因与果,在大脑中不断强化选择和结果的映射,这样在后面遇到类似的事情后,可以最快的做出选择。
比如前段时间在公司内的黑客马拉松获奖后,我及时复盘并记录下偶然背后的必然,这样后面遇到类似的比赛,我就会多一些经验。
2013 年汤峥嵘离开阿里,加入了途牛担任 CTO。之所以选择途牛,是因为他觉得途牛创始人比较年轻(80后),对移动互联网的机会更有敏感度。汤峥嵘选择的时间点很好,一年后途牛就在纳斯达克上市了。
途牛 2013 年前后大事记
在途牛任职期间公司高速增长,技术团队从 200 人扩张到 1500 人。作为 CTO,汤有很大的发挥空间。他的核心任务:
在这个过程中,除了思考如何招到这么多优秀的人、能在队伍快速增长的时候保持好队形(招培育留),还需要不断地根据业务发展调整技术架构和组织架构。
离开途牛后,汤峥嵘加入了 VIPABC,在专栏里他聊了很多关于 2018 年裁员的事情。
为什么公司要裁员?一方面是公司为了应对市场变化防御性调整,另一方面也是由于每个主管的淘汰惰性(没有压力不会主动淘汰人),需要公司层面出压力逼着去劣存优。
当外部环境要求企业快速扩张的时候,管理者要冷静思考招什么样的人,怎么搭组织结构。企业快速扩张起来以后,一定要花足够精力去管理团队,并且不断灌输危机感,告诉大家随时会裁员。当真的遇到需要收缩的时候,同样要冷静思考让哪些人离开。
关于招人和裁人,他总结了这几点:
值得我们参考的:
作为程序员,我们在换工作或者加入新项目组时,很多时候可能只考虑了项目盈利情况、工资和职责,汤峥嵘给了一个更高层面的思考内容:考虑“要加入的领域在这段时间内,技术能否发挥重要价值”。
在回顾途牛那段时间的快速增长时,汤峥嵘说到:“我们做出来的东西能产生商业价值,因为它确实改变了原来旅游业的商业模式”,比如发明新模式“目的地成团”,改变原有的出发地成团模式,提升成团概率。
如果在这个行业里,技术做的只不过是线下转线上,并没有带来实质性的改变,那发展空间可能就不大。
“互联网应该是解决长尾资源的问题,假如这个资源多出来了,互联网可以帮你卖掉,但是如果本身就是个稀缺资源,就不适合放在互联网上,互联网恰恰是要卖那些不太好卖的东西”。
上一节我们了解了汤峥嵘的成长经历,相较于汤的高起点(清华、美国留学),毕玄的起点更接近普通人。在阿里工作十四年中,毕玄主导实现了三个非常牛的技术项目。这一节我们来看下他的成长经历。
毕玄大学专业是生物。虽然不是计算机本专业,但他从大二开始就为外面的公司写商业网站,这让他有了行业经验,让后面入行多了些优势。
2002 年毕业后,进入一家做政府项目的公司。一开始由于不会 VB(Visual Basic),做项目实施(现在叫交付工程师)。半年后组里缺程序员,经理出了道编程题,答出的可以转岗。毕玄在截至日期前解决了问题,成功转为程序员。
在小厂的第五年,他花半年写了 OSGi(Open Service Gateway Initiative,开放服务网关协议,基于插件体系,拓展能力强,Eclipse 就是一个例子) 的 OpenDoc,由于当时 OSGi 在国内关注度很大,但是相关文章比较少,他的文章获得了比较大的关注,因此被称为“国内 OSGi 第一人”。
值得我们参考的:
毕玄在淘宝多年工作中做了很多高价值的项目,其中很多都是转方向以后做的,技术方向的判断力着实让人佩服。
回过头来看他锋芒初露时,我们会发现他之所以能够在 OSGi 领域有知名度,是因为他在国内对 OSGi 还没那么了解时就已经对 OSGi 很熟悉,并且花时间撰写了开放文档。这种学习一手知识、紧跟国外的技术趋势并及时引进国内的思维值得我们学习。
2007 年年底,毕玄加入淘宝。加入淘宝是通过熟人内推,而熟人就是通过 OSGi 文章认识他。
虽然面试回答的不怎么样,但当时淘宝招聘要求没有那么高,只要有一个点是非常专业的就可以,毕玄的专业点就是 OSGi。
进淘宝后他负责 HSF(High-speed Service Framework,分布式 RPC 服务框架) 的设计和实现,现在 HSF 每天还都承担着百亿次以上的服务调用。这个复杂的项目让毕玄认识到:
反思当时的技术选型时,毕玄认为 HSF 使用 OSGi 是错误的选择:
值得我们参考的:
在淘宝面试时,虽然毕玄很多问题没答上来、算法问题也没写出来,最终还是由于深入了解 OSGi 被录取。
今天很多公司的面试其实也是这样,除了考察基本技能,更重要的是确定面试者是否有某个方向很擅长。只要有一个方向掌握的很好,那就说明他具备深入学习的态度和方法,工作里遇到问题需要学习新知识时应该也不会花太多时间。
当我们为了换更好工作而学习时,什么都学不如找一个有价值的方向深入了解。
在 HSF 比较成熟后,毕玄又去做了 NoSQL 数据库 HBase 的改进和落地。HBase 推广落地一段时间后,觉得自己对团队帮助不大,又开始迷茫自己到底该干点啥。
2011 年他从《Web 容量规划的艺术》中找到灵感,决定去做容量成本优化的事。找运维同事拉了份数据发现机器的利用率有很大提升空间,于是转岗去负责淘宝私有云 T4 的设计和落地。
虽然毕玄对 T4 的相关技术也不是很了解,但他知道目标和价值,于是找了很多专业的人组成一个虚拟团队。因为大家对目标理解完全一致并且认可,因此愿意花时间在这个项目中,最终真的做成了。
复盘这个项目时,毕玄做了这些总结:
值得我们参考的:
最近几年,降本增效成了各个公司的普遍口号。让人敬佩的是,毕玄从 2011 年就开始关注企业的运维成本,在互联网业务高速发展的当时能够关注这点,足以证明他的先见性。
对于企业来说,需要攻守双管齐下。除了关注业务拓展、收入增加,我们也可以向毕玄学习,多关注公司的支出成本,从日常的资源使用出发,思考如何降低成本提高效率。
2013 年毕玄决定从研发转到运维,之所以转变,是为了从全局了解公司的技术运维情况。正好当时要做淘宝异地多活,于是花了几年时间做了广为外界所熟知的淘宝异地多活改造。
在当时做异地多活的难点是全世界完全没有可参考方案,花了半年多才逐步把方案试出来。毕玄感慨道:“技术圈子的人,见过猪跑太重要了”。做这种大的架构,一般是先有一个系统全貌,然后有解决的思路,就可以大概知道需要哪些人来做。然后去找各领域的人,告诉他我的思路是这个,你看这个系统里怎么改能做成这样。
异地多活项目,涉及的人太多,必须要先提一个思路,然后大家开始探讨,最重要的是,参与的各方都要获得利益。
运维这段经历,一方面让大家觉得他是能做整个大系统架构的人,另一方面也拓宽了他的知识面,让他知道了一个系统真正的全貌。做系统设计,不可能忽视下面的基础设施完全当它是个黑盒。研发作为一个系统的掌控者,这些应该要掌握的。
值得我们参考的:
做异地多活后毕玄刚好做 P10 晋升面试,有人问他这些人都不向你汇报,为什么要听你的?他说最关键的就一点:“因为我还掌握着所有人的机器“。
话糙理不糙,在做内部的架构升级或者优化时,如何推动业务改造、使用,是个让人头疼的话题。很多时候业务方都会忙着做需求,对于依赖的基础功能漠不关心。
毕玄的经历告诉我们,要想真的推动改革,必须把控核心资源,通过资源限制才能强推落地。
2016 年毕玄开始带系统软件事业部跟研发效能部,一开始大概三四百人,后面有五六百人。
当时的两个目标(本质都是成本):
第一个目标最终实现的比较好,从 2016 年到 2018 年,大概跑到了 1 万台机器,相当于在线有 1 万台可以给离线用,那一年离线少采购了 5000 多台机器,1 台假设 10 万,一年省了 5 个亿。
第二个目标做的比较艰难,本质上是因为研发效率无法直接量化,公司层面只会看到最后的人员增长。研发效率提升是个复杂的问题,因为它其实是个协作问题:
为什么很多公司想提升研发效能?
值得我们参考的:
做技术选型的时候,如果开源界已经有一个很成功的东西,自己又没有什么很颠覆性的思想,还是拥抱开源比较好,没必要挑战。
毕玄在 2022 年创立贝联珠贯公司,担任创始人和 CEO,主要做资源调度产品。对于现在很多公司而言,人员和 IT 资产是最主要的两块成本投入。他们选择的赛道是提升 IT 资产利用效率,降低成本。
谈到创业方向的选择,他给了三个建议:
谈到 CEO 的工作内容,他说 CEO 就是一个打杂的,公司什么事没人干就是 CEO 干,如果有人干,你最好就不要干了。
虽然梦想很重要,但盈利是第一要事:
对于 ToB 业务要想盈亏平衡需要积累多久,他认为至少需要三年以上:
上一节我们了解了汤峥嵘和毕玄的成长经历,从关键节点中学到很多。除了成长经历,专栏中还有很多话题的讨论,这里我摘录几个感兴趣的话题,看看大佬们的见解,主要包括:
关于个人成长,汤峥嵘有这些建议:
毕玄的建议:
汤峥嵘:
毕玄:
汤峥嵘:
毕玄:
汤峥嵘:
毕玄:
好了,这篇文章到这里就结束了。
本篇文章介绍了阿里 P10 的大概概念,回顾了两位 P10 前辈成长过程中的关键节点,然后针对一些年轻人关注的话题记录了两位前辈的感悟。
通过两位前辈的分享,我们可以对如何成长为阿里 P10 有更多的认识。
成长最快的方式是从前辈身上学习,相信在将来的某天,他们的话语会给我们带来启发。
一、malloc()和free()的基本概念以及基本用法:1、函数原型及说明:void*mallocC/C++一、malloc()和free()的基本概念以及基本用法:1、函数原型及说明:void*malloc(longNumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。关于分配失败的原因,应该有多种,比如说空间不足就是一种。voidfree(void*FirstByte):该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。2、函数的用法: 其实这两个函数用起来倒不是很难,也就是malloc()之后觉得用够了就甩了它把它给free()了,举个简单例子: //Code... char*Ptr=NULL; Ptr=(char*)malloc(100*sizeof(char)); if(NULL==Ptr) { exit(1); } gets(Ptr); //code... f
1.使用Iterator遍历HashMapEntrySet2.使用Iterator遍历HashMapKeySet3.使用For-each循环遍历HashMap4.使用Lambda表达式遍历HashMap5.使用StreamAPI遍历HashMap6.最后在本文中,我们将通过示例讨论在Java上遍历HashMap的五种最佳方法。 使用Iterator遍历HashMapEntrySet使用Iterator遍历HashMapKeySet使用For-each循环迭代HashMap使用Lambda表达式遍历HashMap使用StreamAPI遍历HashMap1.使用Iterator遍历HashMapEntrySetpackage com.java.tutorials.iterations; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; /** * 在 Java 中遍历 HashMap 的5种最佳方法 * @author Rame
本文来自于2018年09月19日在AdobeSystemsInc举行的ApacheSparkMeetup。即将发布的ApacheSpark2.4版本是2.x系列的第五个版本。本文对ApacheSpark2.4的主要功能和增强功能进行了概述。新的调度模型(BarrierScheduling),使用户能够将分布式深度学习训练恰当地嵌入到Spark的stage中,以简化分布式训练工作流程。添加了35个高阶函数,用于在SparkSQL中操作数组/map。新增一个新的基于Databricks的spark-avro模块的原生AVRO数据源。PySpark还为教学和可调试性的所有操作引入了热切的评估模式(eagerevaluationmode)。SparkonK8S支持PySpark和R,支持客户端模式(client-mode)。StructuredStreaming的各种增强功能。例如,连续处理(continuousprocessing)中的有状态操作符。内置数据源的各种性能改进。例如,Parquet嵌套模式修剪(schemapruning)。支持Scala2.12。点击示说网,即可下载此PPT。
李志宇,腾讯云后台开发工程师,日常负责集群节点和运行时相关的工作,以及containerd、docker、runc等运行时组件的定制开发和问题排查。前一段时间发现有一些containerd集群出现了Pod卡在Terminating的问题,经过一系列的排查发现是containerd对底层异常处理的问题。最后虽然通过一个短小的PR修复了这个bug,但是找到bug的过程和对问题的反思还是值得和大家分享的。本文中会借由排查bug的过程来分析kubelet删除Pod的调用链,这样不仅仅可以了解containerd的bug,还可以借此了解更多Pod删除不掉的原因。在文章的最后会对问题进行反思,来探讨OCI出现的问题。一个删除不掉的Pod可能大家都会遇到这种问题,就是集群中有那么几个Pod无论如何也删除不掉,看起来和下图一样。当然可有很多可能导致Pod卡在Terminating的原因,比如mount目录被占用、dockerd卡死了或镜像中有“i”属性的文件。因为节点上复杂的组件(docker、containerd、cri、runc)和过长的调用链,导致很难瞬间定位出现问题的位置。所以一般遇到此类问题
转自行云博客https://www.xy586.top/原理CSRF(Cross-siterequestforgery)跨站请求伪造:通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。 尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。 与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。 CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括: 个人隐私泄露以及财产安全。过程csrf过程复现靶场某finecms,该源码存在xss以及csrf漏洞下载地址finecms安装教程文件里有,这里不再说明步骤代码审计加抓包发现构造点在这里插入图片描述在这里插入图片描述在这里插入图片描述利用burp自带功能,生成csrf的payload在这里插入图片描述本地保存下来并访问<html>
几个概念broker:集群中的每一台服务器,称为Brokertopic或者subject:队列名partition:一个队列中的消息可以存储到多台broker上面,一个broker中的分区,称为partitionkafka的架构消息队列的流程从生产者生产消息,通过TCP协议的网络请求发送到Kafka集群,然后Consumers来进行消费,具体如下图:其中生产者和消费者都相当于客户端。Topic/Log/PartitionTopic是一个类别的名称,所有的Message都发送到Topic下面。对于每一个topic,都会有一个或者多个Partition.具体的写入方式如下partition也可以看成一个有序的Message序列,这个message按顺序调价到一个叫commitlog的文件。kafka的消息生产流程当生产者通过TCP协议向kafka服务器发送消息的时候,kafka会选择对应的Partition,选择机Partition制有三种:根据partitionId进行选择没有partitionId,则根据key的haskValue来选择没有id和key的情况下,会采用round-rob
很久没更新过APS系列文章了,这段时间项目工作确实非常紧,所以只能抽点时间学习一下运筹学的入门知识,算是为以后的APS项目积累点基础。看了一些运筹学的书(都是科普级别的)发现原来我目前面对的很多排产、排班、资源分配和路线规划问题,都是运筹学上的典型案例。与此同时,除了继续使用Optaplanner来做我们的规划类项目外,还花点时间去研究了一下GoogleOR-Tools开源规划引擎,这是Google旗下的一个开源求解器,接下来我会专门写一些关于GoogleOR-Tools应用的文章,并与Optaplanner作些关联对比。本篇先向大家展示一下两个规划工具,在求解线性规划问题上的应用方法,分别是MicrosoftOffice的Excel里的”规划求解”组件和GoogleDos中的Spreadsheet上提供的LinearOptimization插件。这两个工具都可以作为规划问题的求解器。因为它们是以插件或软件功能形式提供的,在灵活性和扩展性方面限制还是比较大,但是因为不涉及软件开发的技能,普通用户都能很好地应用它们来解决一些现实业务中遇到的规则问题。因为Google的LinearOpti
1.添加Icon在标题前:假设要在站点的每个标题上添加一个icon,可以采用如下代码:h1{ padding-left:30px; background:url(你的图片)no-repeatleftcenter; }复制运行结果如下:实现的原理即将内容添加padding属性,再将图片放置在该位置。在使用背景图像进行定位时,也可以用像素或者百分比,两者有所不同。像素为图片的左上角距离元素的左上角的距离。百分比则为使用对应点,假设设left:20%;则浏览器会在距离图片左边20%,同时设为距离元素左边的20%;如图:所以上面的例子的background:leftcenter;也可以改为background:050%;2.float收缩。使用float时可以收缩框。div{ background:#333; } <body> <divid="test"> <h1>测试H1</h1> <p>测试文本内容</p> </div> </body>复制使用f
文|曾响铃来源|科技向令说(xiangling0815)后厂村真是一个神奇的地方,比如这次,它居然走在了CBD、大望京等一票首都高端商区之前,抢先落地了智能城市。10月16日,百度与海淀区西北旺镇人民政府签订合作协议,共建“智慧西北旺”,这意味着百度正式全盘搭建智能城市。但对行业的意义远不止于此。都在喊“智能城市”,百度为什么能领先一步一直以来,智能城市中,智能基础设施都是建设重点。根据ICA报告显示,智能城市建设需包含三大核心技术能力,即万物互联所构建的智能城市神经网络、云+边+端+芯的无处不在的计算能力以及人工智能强大的数据处理能力。相关技术占优的百度、腾讯、阿里、华为以及亚马逊、微软、谷歌等大企业纷纷入局,试水智能城市。不过大家可能会好奇,都在喊“智能城市”,为什么会是百度领先一步? 在响铃看来,主要有这几个原因。1、百度在能力实现上做了更多事实上,百度在智能城市的建设和布局上已经做出了一些成绩。就拿城市治理中最常见也颇为复杂的公共交通来说,目前,通过百度地图交通云平台就能与江苏、广东、深圳等超过20家政府交管部门共建交通大数据生态,从而提供便捷的出行方案,并且还能以出行大数据等
区块链资产多币种钱包系统多是类似于imtoken那样的钱包系统,这种钱包主要就是为了方便用户,让他们能够不用下载多个区块链资产的钱包。区块链资产多币种钱包系统用于储存区块链资产,就像某宝储存我们的资金一样,它的安全是重中之重,因为这也关乎到每个用户的切身利益,所以区块链资产多币种钱包系统开发的技术公司一定要选择可靠的。深圳区块链资产多币种钱包系统开发的技术公司深圳源中瑞科技对于区块链资产多币种钱包开发这块有一定的研究并有一定的突破,深圳源中瑞科技有限公司是一家专业从事区块链应用研发的技术公司,对于区块链资产多币种钱包系统这方面我们有一些突破性的功能点:1、支持大多数的区块链资产:搜索,存储,发送和接收市场上的大部分区块链资产2、支持多个区块链资产拓展列表。3、支持指纹识别密码:快速安全使用。深圳区块链资产多币种钱包系统开发的技术公司。4、联系人管理:常用交易地址的存储,方便选择。5、提高速度:区块链网关全天候时维护更新实现快速交易6、交易备忘录:精确记录保存每一笔交易。7、多钱包:多钱包间无缝隙自由转换可实现无障碍交易与资产管理。8、导出所有交易历史:导出交易历史生成CSV文档并且发送
Python算法设计篇(7)Chapter7:Greedisgood?Proveit!It’snotaquestionofenough,pal. ——GordonGekko,WallStreet 本节主要通过几个例子来介绍贪心策略,主要包括背包问题、哈夫曼编码和最小生成树贪心算法顾名思义就是每次都贪心地选择当前最好的那个(局部最优解),不去考虑以后的情况,而且选择了就不能够“反悔”了,如果原问题满足贪心选择性质和最优子结构,那么最后得到的解就是最优解。贪心算法和其他的算法比较有明显的区别,动态规划每次都是综合所有子问题的解得到当前的最优解(全局最优解),而不是贪心地选择;回溯法是尝试选择一条路,如果选择错了的话可以“反悔”,也就是回过头来重新选择其他的试试。这个算法想必大家也都很熟悉了,我觉得贪心法总是比较容易想到,但是很难证明它是正确的,所有对于一类问题,条件稍有不同也许就不能使用贪心策略了。这一节采用类似上节的形式,记录下原书中的一些重点难点内容[果然贪心我领悟的不够,很多问题我貌似都讲不到点子上,大家将就着看下]1.匹配问题matchingproblem(maximum-weig
AR游戏《Mossland》通过ICO完成500万美元融资 近日,游戏开发商RealityReflection成功为其开发的AR游戏《Mossland》,完成了超过500万美元的Pre-ICO。据悉,成功完成Pre-ICO后,RealityReflection计划通过以太坊区块链技术来进行Main-ICO,为游戏的进一步开发募集资金。《Mossland》是一款利用地理位置“签到”技术,来进行购买、销售虚拟房地产的AR游戏。VRPinea独家点评:AR游戏筹资新姿势。已有开发者收到消费版OculusGo,或发售在即据悉,已有部分开发者收到了VR一体机OculusGo。收到设备的开发者发布的图片显示,这是一款32GB版本的OculusGo,其包装盒底部印有了不同体验和不同公司的标志,或主打观影体验。此前曝光的OculusGo为64GB版本的,这意味着OculusGo将分为32GB/64GB两种版本。但目前,官方尚未公布OculusGo的上市日期及相关信息。VRPinea独家点评:看样子,离发售也不远了,期待地搓搓手。联想财报:AR套件Mirage全球销量近50万套今日,联想发布了2017/
Windows上安装MySQL也就不讲了,基本上一路点击下一步就可完成,现在讲讲Linux上布署Mysql,虽然也有很多网友列出了详细的步骤,可能是因为版本过老的问题导致即使按照上面一步步来也还是出现不少问题,所以在此列出以作防坑指南。 至于Mysql是什么,能做什么那就不用介绍了,主要讲安装。环境 CentOS7.0 Mysql-5.7.17 用root用户安装 关闭防火墙或让涉及到的端口通过。-AINPUT-mstate--stateNEW-mtcp-ptcp--sport3306-jACCEPT -AOUTPUT-mstate--stateNEW-mtcp-ptcp--dport3306-jACCEPT 然后执行下面命令,使防火墙立即生效。 serviceiptablesrestart复制下载 去官网下载:http://dev.mysql.com/downloads/mysql/ 下载后放进CentOS中的/usr/local/文件夹中,并解压到当前文件中/usr/local/mysql,Mysql有很多版本,没选对可能也会出现各种问题。准备系统帐户g
本文要阐述的主要有两点,一是介绍自动化测试框架JBehave,二是介绍如何在Github上拉项目,编译成myeclipse环境中的项目,并最终导入Myeclipse中运行。JBehave是何物? JBehave是基于BDD框架的开源自动化测试框架。提供Web集成的BDD层扩展。JBehave特征:JBehave是纯Java实现,可以利用Java丰富的API为己所用;具有基于文本的story,可以对其进行定义并执行,比较灵活和易扩展;基于注解(Annotation)的运行配置信息,指定story对一个的steps类文件;支持依赖注入;具有多种不同呈现方式HTML、XML、TXT等的story report;支持多种IDE编辑环境;支持Ant、Maven集成;可以使用Junit或者任何基于annotation的测试框架运行story测试。JBehave Web特征:JBehave Queue:允许stories异步运行Web Runner:允许stories同步运行Selenium Integration:支持使用Selenium进行网页自动化测试 构建一个JBehave的应用的5大步
本章重点: 1、软件测试的基本概念 2、软件测试的分类 3、自动化测试 4、BUG管理流程 围绕本章重点展开论述的读书报告: 1、软件测试的基本概念 IEEE给出的软件测试的定义:使用人工或自动的手段来运行测试某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清结果与实际效果之间的区别。 1-1、软件缺陷:(5点定义)(产品说明书==SPEC) · 产品未达到spec标明功能 · 软件中出现了spec指明不会出现的错误 · 软件功能未达到spec虽然未指出但应达标的目标 · 软件测试人员认为软件难以理解、不易使用、运行缓慢,或者用户觉得不好 · spec本身不正确或有错误 · 软件庞大,功能十分复杂 · 编程过程出错 · 个别功能要求改变而影响其他部分 · 与要开发对接的软件有缺陷 · 人为因素 1-2、软件测试的原则 (1)不可能完
用户:CRJDATA,ZZ 场景:用户CRJDATA有用户ZZ指定表的查询权限。 1.给他一些权限,包括连接权限,因为他要创建同义词,还需要给他同义词 grantconnecttoCRJDATA; grantcreatesynonymtoCRJDATA; grantcreatesessiontoCRJDATA; grantcreatesequenceto CRJDATA; 2.因为需要把ZZ的所有表的查询权限给CRJDATA。所以需要所有表的grantselectontable_nametoCRJDATA语句,不可能一句一句去写,因此用select吧所有的grant语句查出来直接执行 select'grantselecton'||owner||'.'||object_name||'toCRJDATA;' fromdba_objects whereownerin('ZZ') andobject_type='TABLE'; 把所有结果复制出来,在UserB下执行一遍 grantselectonZZ.Table1toCRJDATA; grantsele
LOB字段存放在指定表空间清理CLOB字段及压缩CLOB空间 把LOB字段的SEGMENT存放在指定表空间、清理CLOB字段及压缩CLOB空间 1、创建LOB字段存放表空间:createtablespacelob_testdatafile'/oracle/data/lob_test.dbf'size500mautoextendonnext10mmaxsizeunlimited 2、移动LOB字段到单独存放表空间:ALTERTABLECENTER_ADMIN.NWS_NEWS MOVELOB(ABSTRACT) STOREAS(TABLESPACElob_test); ABSTRACT---为一CLOB类型的字段lob_test---为新创建的表空间。 3、清空指定时间段CLOB字段的内容:update CENTER_ADMIN.NWS_NEWS setABSTRACT=EMPTY_CLOB() wheresubstr(t
Swagger相关 控制台warn提示IllegalDefaultValuenullforparametertypeintegerjava 出现这个问题主要是使用了ApiModelProperty注解修饰了非String类型的变量,而此时,example未赋值造成。 @ApiModelProperty(value="用户id",dataType="int",example="1") privateintid; 复制 上面这种写法就不会报警告了。 除了上面这种方式,还可以使用如下配置避免看到warn的警告: logging.level.io.swagger.models.parameters.AbstractSerializableParameter=error 复制 PS:example的值不是简单的示例值简单,你不能不符合数据格式的随便写写: @ApiModelProperty(notes="返回数据内容",required=true,example="[{}...{}]") privateTdata; 复制 上面这种写法,会报如下错误,swagger都无法正常预览接口: Error
思量很久,总想写些东西来记录这几年我的编程经历。但由于我文采一般,写起来总是力不从心,不能达到自己心目中所想的效果。从而写了又删,删了又写。如标题所示,只希望大家看了不要笑话。在这里我只是想陈述这些年经过的事情,并没有其他意思。 如今的我已年过24,工作7年,编程事业进行了2.5年。记得06年我中考落榜,万分沮丧,而后到了一所一般的学习念高中。当时感觉我不太适合读书,于是读了一个月在06年10月1号便回家了。往事回首,总有说不出的感觉,之后半年一直呆在家里,不是干活就是去网吧上网。一直到07正月初八来到深圳,那时候我17岁不到。进了一家小电子厂打工,每天上12个小时,一个月放一天假,工资才2000,上班是站着的,还要上夜班。现在想来,不知是什么滋味。不知道有多少次是饿着肚子上班的,匆匆忙忙,糊里糊涂的过了一年,农历12月我自动离职回家,08年正月12我又来到深圳,和几个同村的兄弟找了一个月的工作,直到口袋没有了生活费了,不知怎么了,又跑到了这家工厂。稀里糊涂的又干了一年,09年又是初7来到深圳,初八上班,还在去年这
#!/bin/python #coding=utf-8 ###eg:mgotool.py-i127.0.0.1-p10001-axxxxx-uroot-rc #importsys #sys.path.append('../') #reload(sys) #importMySQLdb #importredis importdatetime importpymongo importargparse importcommands importos,sys,glob,re,time importConfigParser fromtempfileimportTemporaryFile classmymongo: host=None port=None passwd=None user=None def__init__(self,host,port,user,passwd,dbname): self.host=host self.port=port self.passwd=passwd self.user=user self.dbname=dbname try: self.conn=self.m
1.SpringBoot结合策略模式实战套路 1.1.前言 我们都知道设计模式好,可以让我们的代码更具可读性,扩展性,易于维护,但大部分程序猿一开始都学过至少一遍设计模式吧,实战中不知用到了几成。接下来让我介绍一个结合SpringBoot的策略模式套路,让你的代码少些if-else 1.2.开撸 废话不多说,直接告诉你今天的核心是@autowired,看到这个是不是很熟悉,你每天都在用,不就是自动注入Spring管理的Bean吗?但我们对它的用法很多时候就局限在全局变量的注入了,忘记了,它其实还可以构造器注入,类型注入或命名注入,那么结合策略模式会绽放怎样的火花呢?跟着我的代码来看 1.2.1.计算策略接口 /** *@authorlaoliangliang *@date2019/10/2810:10 */ publicinterfaceCalculateStrategy{ intdoOperation(intnum1,intnum2); } 复制 1.2.2.实现类 分别实现加减乘三个运算,可以看到我用了spring的注解@Component,也就是实例由spring管理了 @Com