首页 文章 精选 留言 我的

精选列表

搜索[零知识证明],共10002篇文章
优秀的个人博客,低调大师

从零开始入门 K8s | 应用存储和持久化数据卷:核心知识

作者 | 至天阿里巴巴高级研发工程师 一、Volumes 介绍 Pod Volumes 首先来看一下 Pod Volumes 的使用场景: 场景一:如果 pod 中的某一个容器在运行时异常退出,被 kubelet 重新拉起之后,如何保证之前容器产生的重要数据没有丢失? 场景二:如果同一个 pod 中的多个容器想要共享数据,应该如何去做? 以上两个场景,其实都可以借助 Volumes 来很好地解决,接下来首先看一下 Pod Volumes 的常见类型: 本地存储,常用的有 emptydir/hostpath; 网络存储:网络存储当前的实现方式有两种,一种是 in-tree,它的实现代码是放在 K8s 代码仓库中的,随着 K8s 对存储类型支持的增多,这种方式会给 K8s 本身的维护和发展带来很大的负担;而第二种实现方式是 out-of-tree,

优秀的个人博客,低调大师

阿里技术男的成长史:越想证明自己死得越快……

在上海工作8年后,身为部门经理的钱磊,管理着一家ERP公司的百十来号员工,“再往上爬就是老板和他儿子了……从这个领域的技术角度来讲算是做到了顶。”05年,钱磊就开始关注一家名字奇怪,做事也奇怪的公司。 要不要折腾一下?2008年5月的一天钱磊对新婚的妻子说,想去杭州发展,那里有个公司叫阿里巴巴…… 不扒层皮,你怎么知道自己是谁? 告别上海的家和妻子,钱磊拖着行李箱独自来了杭州。 豪情万丈地入职,不料压根没有“蜜月期”……“刚来的那两周,时时刻刻觉得自己是不是要背着包回上海了……”钱磊并不回避刚入职时的囧境。“不舒服,压力大。在原来的公司里,我就是拍板的人,来了以后发现其它人都挺厉害的。端着架子放不下,总想着自己好歹也是在业内干了八九年的人,在这里被刚毕业一两年的工程师挑战……” 像他这样外地来杭的人,一般入职后就开始着手找房子,钱磊则是在宾

优秀的个人博客,低调大师

IBM营收持续下滑 不过蓝色巨人证明自己非老矣

IBM今日公布了2016财年第一财季的财报,财报显示IBM第一财季的营收达186.84亿美元,同比下滑5%,净利润20.14亿美元,同比下滑13%。IBM的季度营收已经是连续第16个季度下滑,对于挣扎在转型泥沼中的蓝色巨人并不好看,加上持有IBM股票最多的单一股东巴菲特此前也表示大量购买IBM的股票造成了伯克希尔公司的亏损,作为过去数十年最成功的科技公司之一,IBM还能挽回投资人和市场的信心吗? 巴菲特投资IBM账面巨亏 市场质疑股神能否保住英名 “股神”巴菲特在过去数十年很少碰科技类的股票,因为他不做不熟悉的领域,不过数年内他一直买入并持有IBM的股票,有分析师认为巴菲特发现了IBM的股价已经见底,在低谷时购入赚取股价报复反弹的红利。不过没想到“打猎”几十年没有失手的“股神”也有看走眼的时候(截止至2015年底,因为巴菲特是长期持股,未来是否能盈利并不确定)。在IBM的市值比5年前减少1000亿美元的过程中,逐渐逢低买入持有8.59%的IBM股权的伯克希尔公司账面上的亏损也超过了27亿美元,对于巴菲特来说这也是很大的一笔账面浮亏了。即使巴菲特是坚持长期持有并不断降低成本的策略,也架不住IBM的股价一直萎靡不振,所以巴菲特在上个月表示对IBM公司的信心的时候,还是有声音冒出来:耄耋之年的巴菲特接触科技股是不是做错了? IBM在过去的十年中一直在适应从PC硬件制造和服务走向移动互联网服务和云服务的转型,在此过程中IBM不断卖出已经非核心的制造业务和低端服务器业务等,这些业务在20年之前可还是给蓝色巨人带来丰厚回报的业务,随之也带来大规模的裁员,IBM首席执行官Ginni Rometty壮士断腕的决心可见一斑。不过被巴菲特寄予厚望的IBM管理和“五年计划”都未能拯救IBM不断下滑的营收。巴菲特在2011年购买IBM股票的时候,可能有会出现账面浮亏的准备,不过也没能预测到IBM的营收会连续16个季度下滑,公司转型迟迟未能见效的状况,只能眼睁睁的看着伯克希尔公司持有的IBM股票出现巨亏。 IBM转型缓慢 不断割舍旧业务押注云服务和人工智能 Rometty女士在年初的CES上表示,IBM已经不是硬件制造公司,已经成功转型为为第三方公司提供解决方案的云平台公司。Rometty女士带领下的IBM押宝物联网和人工智能,其超级电脑Watson可以说是最优秀的人工智能之一,不过可惜这两个有着前景的领域还没有到开花结果的时刻。尤其是建立在Watson系统基础之上的医疗服务和物联网,在演示和描绘中有着很广阔的前景,不过还处于初期阶段,除了吸引眼球外未能给IBM带来多少利润。 IBM其实现在最被看好的业务是云服务,这也是因为IBM本身就生产大量高端服务器而衍生出来的业务,不过在云服务平台,也有亚马逊和微软等公司的激烈竞争,IBM并不轻松。IBM在过去10年中建立起覆盖41个国家的云平台BlueMix,并且放低身段和很多新创公司合作,为很多需要调取大量数据的公司提供云平台的服务,不过这还是一样处于初期的项目,未能带来丰厚的回报。 IBM公司还是有着很高营收和盈利的,只不过未能保持增长,而科技公司没有成长性就会被华尔街的投资人和分析师调低PE估值,所以在IBM一路走低的营收中,IBM的股价也持续低迷。 市场认为IBM仍有价值 距离底部也许很近 认同巴菲特的投资人还认为IBM有价值,有如下几点: 1.IBM是老牌公司,有着很好的管理体系,转型虽然缓慢不过整体的业务已经升级了,作为一个“高龄”的科技公司,IBM也在很快适应新的时代。Rometty女士等高管在裁员、出售业务等方面毫不手软,对于公司执行发展的“五年计划”也还有一定信心。 2.IBM的股票虽然走低,不过分红和内在价值并不低,对于持有者也是有回报的。 3.IBM在2015年获得7355项美国注册的新专利,而这是IBM公司连续23年蝉联美国公司申请专利数量排行榜的第一名,研发和专利是一个科技公司的生命线,持有大量专利的IBM可以在专利许可费上获利,并且在开拓新业务时也有一定领先优势。 4.大摩等投行的分析师认为IBM的转型有成效了,以云服务和数据服务为例,已经占据公司2015年营收的35%,高于2014年的27%,随着这些业务规模的扩大,IBM在盈利的潜力将极大提高,经常性收入增长会提升IBM的现金流和应收。 IBM目前的市值接近1472亿美元,仍然是美股超大市值科技公司的一员,不过此前被看跌的比率最高所以卖空的压力最大,就目前来说股价已经从2月的地点反弹30%,就是公司盈利预期改善和逼空共同作用的结果。 虽然IBM的营收还在下跌,不过华尔街已经预期IBM股价的下滑趋势将在两年内结束,IBM的快速并购为公司转型增加新的动力,并且持续裁员已经告一段落,对公司盈利的持续压力在减轻,所以市场对IBM重估的声音开始占上风。也许不久的将来巴菲特就能在IBM股票上取得浮盈了,IBM也能用百年不断适应新市场的转型成功,为商业教科书再添一个案例。 本文转自d1net(转载)

优秀的个人博客,低调大师

Python基础知识细节点总结,零基础一分钟也能掌握

既然要开始学习Python,那么就首先就得不官网下载个Python,小编使用的是3.6的 安装教程百度经验里面还是很详细的。 那么正题开始吧! 两种格式化输出的方式 第一种是用%操作格式化输出字符串 代码如下: 运行上面的代码输出的结果: 第二种使用format()方法去格式化输出字符串 代码直接一行语句搞定 你运行后发现结果还是一样的! Python中类型的转换 很多初学者在刚开始学习Python的对于数据类型有点弄不清楚,比如: a = 666 这是一个定义a为666,默认是整型 B = '666' 这是也直接定义,然后默认是字符串 在Python中有三个内建的函数可以让我们进行类型转换,他们分别是int(),float()和str()函数 int()函数接收一个浮点型或者合适的字符串 比如:int(3.1415)、int('1314')、int('3.1415') 那么他们的运行结果是不是一样呢? 结果很明显了,int()函数接收一个浮点型或者合适的字符串! float() 函数接收一个整数和一个合适的字符串 比如:float(23),float('3.1415') str( ) 函数是把一个整型或者浮点型的数变为字符串 比如:str(1231)、str(3.1415) 那么对于类型的转换了解了么,可以自己动手亲自去试一试呀 关于列表的一些操作 例如 age = [1,2,3,4,5,6] #其实这里面也可以放不同类型的数据 列表是可以更改的,如进行单个元素的添加及删除。 我们后面将会介绍元组,它是不能修改的。 下面列举一些列表的操作 age[2] =13 age[-1]=23 someage = age[2:4] someage = age[0:5:2] del age[1] age.append('没粉丝的程序狗')

优秀的个人博客,低调大师

Mavenjar包冲突的问题解决(亲测有效、实力证明)

一、今天在Pom中添加了一个依赖,导致Jar包冲突。 在启动项目的时候,会包jar包冲突的问题。下面以SpringBoot项目为例。 我在Pom.xml文件中添加了一个依赖: <dependency> <groupId>org.ethereum</groupId> <artifactId>ethereumj-core</artifactId> <version>1.6.3-RELEASE</version> </dependency> 二、在启动项目的时候就会报一个错误 Connected to the target VM, address: '127.0.0.1:57577', transport: 'socket' SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/Users/wangdong/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.7/log4j-slf4j-impl-2.7.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/Users/wangdong/.m2/repository/ch/qos/logback/logback-classic/1.1.11/logback-classic-1.1.11.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] The Class-Path manifest attribute in /Users/wangdong/.m2/repository/com/sun/xml/bind/jaxb-core/2.3.0/jaxb-core-2.3.0.jar referenced one or more files that do not exist: file:/Users/wangdong/.m2/repository/com/sun/xml/bind/jaxb-core/2.3.0/jaxb-api.jar The Class-Path manifest attribute in /Users/wangdong/.m2/repository/com/sun/xml/bind/jaxb-impl/2.3.0/jaxb-impl-2.3.0.jar referenced one or more files that do not exist: file:/Users/wangdong/.m2/repository/com/sun/xml/bind/jaxb-impl/2.3.0/jaxb-core.jar Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) Caused by: java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.apache.logging.slf4j.Log4jLoggerFactory loaded from file:/Users/wangdong/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.7/log4j-slf4j-impl-2.7.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.apache.logging.slf4j.Log4jLoggerFactory at org.springframework.util.Assert.instanceCheckFailed(Assert.java:389) at org.springframework.util.Assert.isInstanceOf(Assert.java:327) at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:274) at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:98) at org.springframework.boot.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:230) at org.springframework.boot.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:209) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:122) at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:69) at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:48) at org.springframework.boot.SpringApplication.run(SpringApplication.java:292) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) at com.gws.GwsWebApplication.main(GwsWebApplication.java:19) ... 5 more Disconnected from the target VM, address: '127.0.0.1:57577', transport: 'socket' Process finished with exit code 0 三、仔细看一下这里面的报错 关于日志的两个冲突了,我自己用的是log4j,结果还有一个slf4j SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/Users/wangdong/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.7/log4j-slf4j-impl-2.7.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/Users/wangdong/.m2/repository/ch/qos/logback/logback-classic/1.1.11/logback-classic-1.1.11.jar!/org/slf4j/impl/StaticLoggerBinder.class] 四、定位一下冲突的这个slf4j在哪里。 通过下面这个找: /Users/wangdong/.m2/repository/ch/qos/logback/logback-classic/1.1.11/logback-classic-1.1.11.jar 五、下面看看红线框部分的jar包是不是刚刚引入的 把刚刚引入Maven项注释掉,重新编译导下包。 六、发现第四部的那两个jar包消失了,那么就说明是刚刚添加的依赖产生了jar包冲突的问题了。 七、那么现在就开始来排除依赖 八、这个一定要放到对应的依赖里面 groupId和artifactId一定要根据IDEA的提示写正确。 <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> 九、写完后就会发现,冲突的包不见了,就解决啦 最后再启动项目,就会成功了。

优秀的个人博客,低调大师

JAVA知识

**classloaderJVM装载** 在说java的ClassLoader机制之前,我先了解下jvm的装载过程和其中的原理。装载就是寻找一个类或者一个接口的二进制形式并且用二进制形式构造代表这个类或者是这个接口的class对象的过程。 类的生命周期是从被加载到虚拟机内存中开始,到卸载出内存结束。 加载->验证->准备->解析->初始化->使用->卸载 在java中,类装载器把一个类装入java虚拟机中,要经过三个步骤完成:装载、链接和初始化 这是java的装载流程,后面要说下java中,类的表现形式。 在java中,一个类代表着这个类要执行的代码,但是这个类可以有对应的各种不同的实例,不同的实例就是通过类中数据的表示状态来区分。状态是动态的,但是代码则不会。当我们将一个特定的状态和一个类对应起来,也就是意味着将一个类实例化。尽管相同的类呢,对应的实例有各种各样不同的状态,但是其基本底层还都是同一份代码,只是其中的数据状态有不同。jvm一般只加载一次类,以后相同的类就不会再加载。 下面就讲下JVM是如何区分不同的类的: 在Java中,一个类用其完全匹配类名(fully qualified class name)作为标识,这里指的完全匹配类名包括包名和类名。但在JVM中一个类用其全名和一个加载类ClassLoader的实例作为唯一标识。因此,如果一个名为Pg的包中,有一个名为Cl的类,被类加载器KlassLoader的一个实例kl1加载,Cl的实例,即C1.class在JVM中表示为(Cl, Pg, kl1)。这意味着两个类加载器的实例(Cl, Pg, kl1) 和 (Cl, Pg, kl2)是不同的,被它们所加载的类也因此完全不同,互不兼容的。 JVM规范定义了两种类型的类装载器:启动内装载器(bootstrap)和用户自定义装载器(user-defined class loader)。JVM在运行时会产生三个ClassLoader:Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader。Bootstrap是用C++编写的,我们在Java中看不到它,是null,是JVM自带的类装载器,用来装载核心类库,如java.lang.*等。AppClassLoader的Parent是ExtClassLoader,而ExtClassLoader的Parent为Bootstrap ClassLoader。 package javatest; public class TestClassLoader{ public static void main(String[] args){ Class cl = null; ClassLoader cLoader; cLoader = ClassLoader.getSystemClassLoader(); System.out.println(cLoader); while(cLoader != null){ cLoader = cLoader.getParent(); System.out.println(cLoader); } try{ cl = Class.forName("java.lang.Object"); cLoader = cl.getClassLoader(); System.out.println("java.lang.Object loader is "+cl); cl = Class.forName("javatest.TestClassLoader"); cLoader = cl.getClassLoader(); System.out.println("LoadTest loader is "+cl); }catch(Exception e){ e.printStackTrace(); } } } output:sun.misc.Launcher$AppClassLoader@73d16e93// 系统的类装载器来自类sun.misc.Launcher$AppClassLoader@73d16e93的实例化,sun.misc.Launcher$ExtClassLoader@15db9742// 系统的类装载器的parent来自sun.misc.Launcher$ExtClassLoader@15db9742的实例化null//系统的类装载器的爷爷是由上面的Bootstrap ClassLoader实例而来,但是呢,这个Bootstrap ClassLoader是由C++实现的(嘿嘿嘿,混血儿),在java中是看不到滴。java.lang.Object loader is null//核心类都是由Bootstrap ClassLoader进行装载滴LoadTest loader is sun.misc.Launcher$AppClassLoader@73d16e93//用户自己的类都是由AppClassLoader进行加载滴。 那么问题来了,JAVA为啥需要这么多类加载器(当然是多层负责每层对应的类系统,而且多态这个磨人的妖精很是厉害,需要多层加载机制进行处理。–个人理解) 因为java是动态加载类的,这样的话,用到什么类就加载什么类,不用的就不加载(模仿Linux的内存管理机制!!!也让我想起了C++里面的内存申请,如果申请内存,先不分配实际物理内存,当需要访问的时候,再进行分配内存进行操作) 点击关注阿里云科技快讯,跟多精美礼品等你来拿! 参考:兔子哥哥

优秀的个人博客,低调大师

GCC知识

像C语言这样的静态语言,运行的步骤是先将C经过编译器转化成汇编语言,汇编语言再经过汇编器转化成机器语言模块,然后链接器将程序的机器语言模块和库程序的机器语言模块和起来,生成可执行文件,最后再由加载器加载这个可执行文件,产生输入输出。 在这个环节中,gcc就是扮演着编译器的角色。gcc原本只能编译C语言,但是后来,经过扩展之后也能处理JAVA/OC等语言了。GCC现在已经成为类Unix操作系统的标准编译器了。所以在linux上源码编译软件前大都要先安装gcc。 gcc只是编译器吗? gcc可以完成从高级语言C变为和执行文件.out的过程。它默认也是有编译链接的功能。gcc有个参数-c 是来控制是否要链接成可执行文件。编译C之后会生成.o的目标文件,链接之后会生成.out的可执行文件。 gcc在这个过程中虽然只是完成编译工作,但是它会调用汇编器(as),链接器(ld)来完成整个代码编译解释过程。 GNU其他工具? gdb(GNU除错器)也是GNU工程开发出来的调试工具。能对GCC编译链接出来的可执行文件进行定点调试。 gprof(GNU测量器)是测试程序中函数的性能的工具。 g++(C++编译器)和gcc差不多,只是目标语言是c++。 参数 网上的gcc参数的例子很多,比如:http://www.shanghai.ws/gnu/gcc_1.htm。我们直接拿一个例子看一下 比如go/src/make.bash中有一个gcc生成dist的例子: gccmflag−O2−Wall−Werror−ggdb−ocmd/dist/dist−Icmd/dist"mflag−O2−Wall−Werror−ggdb−ocmd/dist/dist−Icmd/dist"DEFGOROOT" cmd/dist/*.c 将其中的参数按照上下文转换后如下: gcc -m64 -O2 -Wall -Werror -ggdb -o cmd/dist/dist -Icmd/dist -DGOROOT_FINAL="$GOROOT_FINAL" cmd/dist/*.c gcc的参数很多,种类分为几种: 上图参考自http://www.shanghai.ws/gnu/gcc_1.htm 参考文章:http://tigcc.ticalc.org/doc/comopts.html -m64:配置相关选项,代表这个程序的宿主机器cpu架构是amd64 -O2: 优化选项,对程序进行O2级别的优化 -Wall: 警告选项,生成所有警告信息 -Werror: 警告选项,将所有warning当作error处理 -ggdb: 调试选项,编译过程生成调试信息,以便gdb进行调试。 -o: 总体选项,制定生成的可执行文件。如果不指定的话,就默认是xx.out -I: 目录选项,进行头文件查询的时候被指定的目录也需要进行搜索 -DGOROOT_FINAL="$GOROOT_FINAL" 这个是在预处理过程的时候设置GOROOT_FINAL 最后的cmd/dist/*.c就是源文件了,表示源文件是这个目录下的所有.c文件 本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2013/01/17/2863903.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册