首页 文章 精选 留言 我的

精选列表

搜索[官方镜像],共10000篇文章
优秀的个人博客,低调大师

官方火速回应

刚刚英国正式宣布,华为将与英国5G建设无缘!据英国BBC报道,英国政府将从2020年12月31日起停止购买新的华为设备,此外英国5G网络中目前所使用的华为设备须在2027年前拆除。 一直以来,英国对于是否在5G建设中使用华为设备就持“抵制”态度,而从昨天开始就有消息传出英国首相将于今天召开会议,给出最终答案。如今靴子落地,看来英国是铁了心要跟美国握手了。 宣布此事的英国文化大臣奥利弗·道登(Oliver Dowden)说:“这不是一个容易的决定,但无论是现在还是从长远来看,对于英国电信网络、对于我们的国家安全和经济来说,都是正确的选择。” ▲英国文化大臣奥利弗·道登 就在英国政府官宣禁用华为5G设备后,华为英国发言人对国内媒体表示,这个决定令人失望,可能会让英国落入数字发展的慢车道,增加消费者的通讯开支并加深数字鸿沟。我们敦促政府重新考虑这一决定。我们有信心,美国的新管制措施不会影响我们为英国提供的产品的韧性和安全。 就在北京时间14日下午,中国外交部发言人赵立坚就英国是否会禁止华为参与5G建设一事表示,能否为在英中国企业提供开放、公平、非歧视的营商环境,是脱欧后英国市场走向的试金石,也是中国在英投资是否安全的风向标,中方将密切关注。 ▲中国外交部发言人赵立坚 一、从占比不高于35%到“彻底决裂”,只半年 此次英国正式禁止华为参与英国5G网络建设,也标志着华为与英国最大电信运营商长达20年的合作关系宣告结束。 其实早在今年1月,英国通过了一项法案,允许华为在有限条件下参与英国的5G网络发展,条件是不得参与核心网络搭建,并且非核心部分华为设备占比不得高于35%,这一比例控制要在2023年之前完成。 但美国一直在敦促英国全面封锁华为,称华为设备存在安全风险,不要给华为留有机会。美国认为华为是一家中国公司,不可信任。 今年6月,英国首相约翰逊在被问及华为时表示,他将保护关键基础设施免受“敌对国家供应商”的攻击。英国司法部长罗伯特·巴克兰(Robert Buckland)周一表示,他们将优先考虑国家安全问题。 华为对于美国的指控曾做出回应,称“进行间谍活动”这样的指控是子虚乌有,认为美国希望借此打压华为在全球范围内的强劲增长势头,因为没有一家美国公司能够以具有竞争力的价格提供相同的技术。 华为还曾表示,美国制裁的影响目前尚不明确,现在华为仍然在为英国提供技术和产品方案,建议英国现在还是要耐心等待。 不过,英国这次显然是“不听劝”。 二、美国芯片制裁成导火索? 今年5月,美国对华为的制裁进一步升级,为华为生产芯片的公司,但凡其生产过程涉及美国技术,都需要得到美国商务部的批准,该政策的执行有120天的缓冲期。 据路透社报道,此次英国政策转变的直接理由是美国在芯片技术上对华为的制裁会影响华为设备的稳定供应能力。英国官员称,如果华为因为美国制裁不得不从第三方采购芯片用于其5G设备,那么设备的安全性就将无法得到保障。 目前华为受到限制的主要是比较先进的7nm工艺芯片,涉及智能手机SoC和通信基站芯片等。美国的制裁如果真正施行,的确会给华为5G设备的出货造成不小的麻烦。 除了芯片因素,也有路透社报道中使用了“新冷战”作为小标题之一,路透社评论认为,美国担心5G的主导地位被中国抢走,而5G是可以定义21世纪地缘政治的重要技术。 BBC认为,政治因素可能也会起到重要作用,例如英国迫切希望与美国达成贸易协定,中国与英国在香港相关事务方面的紧张关系等等。 三、英国电信CEO: 真正撤除华为,至少需要5到7年 毫无疑问,英国此次的举动将一定程度上赢得美国总统唐纳德·特朗普(Donald Trump)的支持。但这也标志着英国前总理戴维•卡梅伦(David Cameron)所谓的中英关系“黄金时代”的终结。 而此举在经济上对于英国本土电信行业的冲击也是十分显著的。 目前华为在英国的主要客户是英国电信(BT)、沃达丰(Vodafone)和Three。英国电信CEO菲利普·詹森(Philip Jansen)周一对英国广播公司(BBC)说,想要真正撤除华为设备,他们至少需要五年甚至七年。 他强调到,“如果政府要求我们非常快的落实政策要求,那么英国电信超过2400万的移动用户都可能面临一个严峻的问题——信号中断。” 詹森说,如果禁令的覆盖范围扩展到包括传统设备在内的所有移动和固定网络,那么剔除华为将需要至少十几年的时间。 沃达丰方面表示,移除所有华为设备将令公司损失“数十亿英镑”。 四、制裁中“愈挫愈勇”,下半年会更难 昨天,华为刚刚宣布了2020年上半年的经营业绩,其中销售收入为4540亿元人民币,同比增长13.1%,净利润率9.2%,其中运营商业务收入为1596亿元人民币。 可以说,华为上半年的业绩表现“可圈可点”,但美国的制裁和英国此次的行为无疑给华为下半年的业绩表现增加了许多“不确定性”。 根据市场调研机构Dell Oro公布数据来看,在2020年第一季度全球5G通信设备市场中,华为的市场份额为35.7%,位列第一,环比增长0.4%;爱立信第二、诺基亚第三,三星、中兴位列四、五。 目前爱立信在官网公开的5G订单数量为97个,华为在今年2月份公布的5G订单数量是91个,经过5个多月的时间,订单数量必然有所增加,但具体数字还未公布。 华为已经连续四个季度稳坐全球5G通信设备市场榜首。从2018年的第二名,到如今的第一名,华为在美国的制裁中可谓是“愈挫愈勇”。 除了英国之外,全球其他国家对于华为参与5G建设的态度各不相同,比如德国就明确了“力挺华为”的态度,不断加强与华为的5G合作,提出年内华为设备占比将超过65%。而像加拿大、澳大利亚、意大利等国则是明确的禁止华为5G设备的态度。 另外还有像法国、日本等国家,虽然政府的态度是抵制华为5G设备,但对于其他私有企业却没有做强制要求。 总结:英国禁令雪上加霜,华为5G出海如何破局? 此次英国正式禁止华为参与5G建设,为英国电信行业与华为的合作画上了终止符,也让中英关系中掺杂了更多的“火药味”,同时也可能增加了欧洲其他还未做出选择的小国向英美靠拢。 总体来看,目前华为5G出海的国际形势仍然较为不利。抵制方占多数,并且如英国这样的传统资本主义强国都表明了抵制态度。敢公然违抗美国意愿接受华为的仅有德国等极少数国家。 不过,虽然目前许多国家都在寻找华为的替代方案,但基本短时间内都无法找到比华为更具竞争力的5G通信基础设施解决方案,且需要巨额资本投入。华为在5G方面的技术优势仍然比较明显。 美国的制裁对于后续华为5G设备出货是否会有显著影响,会有多大影响,华为也没有给出明确回复,制裁是否会真正落地也还存在变数。 此次英国禁令生效有5个多月的缓冲期,并且正式移除全部华为设备的时限为7年。这七年,国际形势将发生怎样的变化,谁又能说的准呢?

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

Google地图官方API-在地图上绘图(自定义符号)

符号介绍当您想在标记上使用基于矢量的图标或将图像添加到折线时,符号非常有用 。 标记支持栅格图像和矢量图像的使用。请参阅有关自定义标记图标的文档 。A 是可以显示在或对象上的基于矢量的图像 。符号的形状由使用SVG路径符号的路径定义 。虽然是唯一必需的属性,但该 对象支持多种属性,使您可以自定义视觉外观,例如笔触和填充的颜色和粗细。请参阅下面的属性列表。 SymbolMarkerPolylinepathSymbol 通过SymbolPath 该类可以使用几个预定义的符号。请参阅下面的列表。 符号的属性请注意,a的默认行为Symbol取决于它出现在标记还是折线上而略有不同。这些差异在下面的属性列表中描述。 A Symbol支持以下属性: path(必填)是定义符号形状的路径。您可以在其中使用预定义的路径之一,也可以使用 SVG路径符号定义自定义路径 。注意:折线上的矢量路径必须适合22x22px的正方形。如果路径中包括该正方形以外的点,则必须将符号的属性调整为分数值(例如0.2),以使生成的缩放点适合正方形。 google.maps.SymbolPathscaleanchor设置符号相对于标记或折线的位置。符号路径的坐标分别通过锚点的x和y坐标向左和向上转换。默认情况下,符号锚定在(0, 0)。位置用与符号路径相同的坐标系表示。fillColor是符号填充的颜色(即笔触边界的区域)。支持所有CSS3颜色,但扩展的命名颜色除外。对于标记上的符号,默认值为“黑色”。对于折线上的符号,默认值为相应折线的笔触颜色。fillOpacity定义符号填充的相对不透明度(即缺乏透明度)。值的范围是0.0(完全透明)到1.0(完全不透明)。默认值为0.0。rotation是旋转符号的角度,顺时针以度表示。默认情况下,符号标记的旋转度为0,折线上的符号旋转了其所处边缘的角度。在多段线上设置符号的旋转将固定符号的旋转,使其不再跟随直线的曲线。scale设置符号缩放的数量。对于符号标记,默认比例为1。缩放后,符号可以为任意大小。对于折线上的符号,默认比例为折线的笔划粗细。缩放后,符号必须位于以符号锚点为中心的22x22px正方形内。strokeColor是符号轮廓的颜色。支持所有CSS3颜色,但扩展的命名颜色除外。对于标记上的符号,默认值为“黑色”。对于折线上的符号,默认颜色是折线的笔触颜色。strokeOpacity确定符号笔划的相对不透明度(即缺乏透明度)。值的范围是0.0(完全透明)到1.0(完全不透明)。对于符号标记,默认值为1.0。对于折线上的符号,默认值为折线的笔触不透明度。strokeWeight定义符号轮廓的粗细。默认值为scale符号的。预定义符号Maps JavaScript API提供了一些内置符号,您可以通过该类将其添加到标记或折线中 。 SymbolPath 默认符号包括一个圆圈和两种类型的箭头。向前和向后箭头均可用。这对于折线特别有用,因为折线上的符号方向是固定的。正向被认为是在多义线的终点方向。 您可以使用任何默认符号选项来修改预定义符号的笔触或填充。 包括以下预定义符号: 名称 描述 例google.maps.SymbolPath.CIRCLE 一个圆圈。 google.maps.SymbolPath.BACKWARD_CLOSED_ARROW 向后所有方向都闭合的箭头。 google.maps.SymbolPath.FORWARD_CLOSED_ARROW 在所有侧面均闭合的向前箭头。 google.maps.SymbolPath.BACKWARD_OPEN_ARROW 在一侧打开的向后箭头。 google.maps.SymbolPath.FORWARD_OPEN_ARROW 一侧打开的向前箭头。 向标记添加符号要在标记上显示基于矢量的图标 Symbol,请将具有所需路径的对象文字传递 到标记的 icon属性。 下面的示例使用预定义的矢量路径之一创建一个图标。 // This example uses a symbol to add a vector-based icon to a marker.// The symbol uses one of the predefined vector paths ('CIRCLE') supplied by the// Google Maps JavaScript API. function initMap() { var map = new google.maps.Map(document.getElementById('map'), { zoom: 4, center: {lat: -25.363882, lng: 131.044922} }); var marker = new google.maps.Marker({ position: map.getCenter(), icon: { path: google.maps.SymbolPath.CIRCLE, scale: 10 }, draggable: true, map: map }); } 查看示例。 以下示例使用 SVG路径符号 为标记创建自定义图标。 // This example uses SVG path notation to add a vector-based symbol// as the icon for a marker. The resulting icon is a star-shaped symbol// with a pale yellow fill and a thick yellow border. function initMap() { var map = new google.maps.Map(document.getElementById('map'), { zoom: 4, center: {lat: -25.363882, lng: 131.044922} }); var goldStar = { path: 'M 125,5 155,90 245,90 175,145 200,230 125,180 50,230 75,145 5,90 95,90 z', fillColor: 'yellow', fillOpacity: 0.8, scale: 1, strokeColor: 'gold', strokeWeight: 14 }; var marker = new google.maps.Marker({ position: map.getCenter(), icon: goldStar, map: map });} 查看示例。 向折线添加符号要在折线上显示符号,请设置对象的icons[]属性PolylineOptions。该icons[]数组采用一个或多个对象文字,具有以下属性: IconSequence icon(required)是要在线上渲染的符号。offset确定距要渲染图标的行的起点的距离。该距离可以表示为线条长度的百分比(例如,“ 50%”),也可以表示为像素(例如,“ 50px”)。默认值为“ 100%”。repeat确定行中连续图标之间的距离。该距离可以表示为线条长度的百分比(例如,“ 50%”),也可以表示为像素(例如,“ 50px”)。要禁用重复图标,请指定“ 0”。默认值为“ 0”。注意:如果折线是测地线(也就是说,如果其geodesic属性设置为true)offset,repeat 则默认指定为米和米的距离。将像素值offset或 设置为repeat像素值将导致在屏幕上以像素为单位计算距离。结合使用符号和PolylineOptions类,您可以对地图上折线的外观和感觉进行大量控制。以下是您可以应用的一些自定义示例。 箭使用该IconSequence.offset属性可将箭头添加到折线的起点或终点。 // Define a symbol using a predefined path (an arrow)// supplied by the Google Maps JavaScript API.var lineSymbol = { path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW}; // Create the polyline and add the symbol via the 'icons' property.var line = new google.maps.Polyline({ path: [{lat: 22.291, lng: 153.027}, {lat: 18.291, lng: 153.027}], icons: [{ icon: lineSymbol, offset: '100%' }], map: map}); 查看示例。 虚线通过将折线的不透明度设置为0,并以规则的时间间隔在该线上覆盖不透明的符号,可以实现虚线效果。 // Define a symbol using SVG path notation, with an opacity of 1.var lineSymbol = { path: 'M 0,-1 0,1', strokeOpacity: 1, scale: 4}; // Create the polyline, passing the symbol in the 'icons' property.// Give the line an opacity of 0.// Repeat the symbol at intervals of 20 pixels to create the dashed effect.var line = new google.maps.Polyline({ path: [{lat: 22.291, lng: 153.027}, {lat: 18.291, lng: 153.027}], strokeOpacity: 0, icons: [{ icon: lineSymbol, offset: '0', repeat: '20px' }], map: map}); 查看示例。 自定义路径自定义符号允许您向折线添加许多不同的形状。 // Define the custom symbols. All symbols are defined via SVG path notation.// They have varying stroke color, fill color, stroke weight,// opacity and rotation properties. var symbolOne = { path: 'M -2,0 0,-2 2,0 0,2 z', strokeColor: '#F00', fillColor: '#F00', fillOpacity: 1 }; var symbolTwo = { path: 'M -1,0 A 1,1 0 0 0 -3,0 1,1 0 0 0 -1,0M 1,0 A 1,1 0 0 0 3,0 1,1 0 0 0 1,0M -3,3 Q 0,5 3,3', strokeColor: '#00F', rotation: 45 }; var symbolThree = { path: 'M -2,-2 2,2 M 2,-2 -2,2', strokeColor: '#292', strokeWeight: 4 }; // Create the polyline and add the symbols via the 'icons' property. var line = new google.maps.Polyline({ path: [{lat: 22.291, lng: 153.027}, {lat: 18.291, lng: 153.027}], icons: [ { icon: symbolOne, offset: '0%' }, { icon: symbolTwo, offset: '50%' }, { icon: symbolThree, offset: '100%' } ], map: map }); 查看示例。 动画符号您可以通过使用DOM的window.setInterval()功能以固定间隔更改符号的偏移量来沿路径设置符号动画 。 // This example adds an animated symbol to a polyline. function initMap() { var map = new google.maps.Map(document.getElementById('map'), { center: {lat: 20.291, lng: 153.027}, zoom: 6, mapTypeId: 'terrain' }); // Define the symbol, using one of the predefined paths ('CIRCLE') // supplied by the Google Maps JavaScript API. var lineSymbol = { path: google.maps.SymbolPath.CIRCLE, scale: 8, strokeColor: '#393' }; // Create the polyline and add the symbol to it via the 'icons' property. var line = new google.maps.Polyline({ path: [{lat: 22.291, lng: 153.027}, {lat: 18.291, lng: 153.027}], icons: [{ icon: lineSymbol, offset: '100%' }], map: map }); animateCircle(line);} // Use the DOM setInterval() function to change the offset of the symbol// at fixed intervals.function animateCircle(line) { var count = 0; window.setInterval(function() { count = (count + 1) % 200; var icons = line.get('icons'); icons[0].offset = (count / 2) + '%'; line.set('icons', icons); }, 20);} 查看示例。

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

鸿蒙系统引出一个巨大骗局,华为官方进行辟谣

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 鸿蒙系统作为我国一套自主研发的手机操作系统,不仅承载着全体中国人民和国内企业的希望和自豪,也承载着国内手机操作系统的使命。如果鸿蒙系统能够成功地满足我们的期望,那么鸿蒙系统未来会因此成名。相反,一旦鸿蒙体系不令人满意,我认为就会很少有人为此买单。即使是一个爱国的公民,也可能没有多少人愿意为这种爱国主义付出代价。 万事开头难,华为鸿蒙系统不可能一开始就达到如今安卓和iOS已达到的高度,所以未来的生态建设仍然困难,不过好在有消息称鸿蒙系统会很快发布,因为网站也都建立了,那么这个全新的为鸿蒙系统建立的网站如何呢。 进入以后,网站十分的简陋,网站页面的优化也不是很好,主要提供了一些有关鸿蒙系统的信息,包括系统的白皮书,并且还有鸿蒙系统文件下载的入口,另外,方舟编译器作为华为系统层面的自主研发底层代码,也有相关的下载信息出现在了网站上。 但是网站整体看上去很别扭,有些图片出现了拉伸的现象,果不其然,这个华为鸿蒙系统的官网是个假的,冒充的,已经被华为内部人员否定。 说实话,很多人都以为网站是真的,因为对于一个新的操作系统,而且是国产的,很多人都非常期待,所以就会出现很多人容易相信的现象。大家都知道,现如今的手机操作系统市场是被安卓和iOS统治的,鸿蒙系统要想进入这么一个生态,虽寄予厚望,但出现夭折的可能性非常大。 华为的副董事长胡厚��在此次的MWC 2019大会旗舰表示,华为手机目前都在使用安卓系统,华为也一直是安卓生态的支持者,现在能使用的华为手机系统都不会受到影响,鸿蒙系统发布时间暂时还未定;这就表明鸿蒙系统仍然处于孕育期,至于孕育的时间,也就是发布的时间还没有定下来。

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

2018-05-14 代码考古-Python3官方教程字典例程

知乎原链 Data Structures中的第一个例程: >>> tel = {'jack': 4098, 'sape': 4139} >>> tel['guido'] = 4127 >>> tel {'sape': 4139, 'guido': 4127, 'jack': 4098} >>> tel['jack'] 4098 >>> del tel['sape'] >>> tel['irv'] = 4127 >>> tel {'guido': 4127, 'irv': 4127, 'jack': 4098} >>> list(tel.keys()) ['irv', 'guido', 'jack'] >>> sorted(tel.keys()) ['guido', 'irv', 'jack'] >>> 'guido' in tel True >>> 'jack' not in tel False 大多数读者也许都认为这些字符串和数字并没有特别意义. 如果真是这样, 这个例程还不如用 dict = {'aa': 100, 'bb': 200} 之类来的一目了然, 省去多余的猜度. 不巧发现"guido"是Python创作者的名字(Guido van Rossum), 就觉得不该这么简单. 根据python源码27年前的commit6fc178f46d40aa068a713b509904d343ee55cfa6, 这个教程中的示例代码是Guido本人编写的. 因此与他1991年8月附近的经历应该有关. 接着找到他的简历中的: From 1986 till 1991 I was with the Amoeba project, headed by Sape Mullender 发现Sape也是人名, 基本可以确定是他的同事的名字. 接下去搜到这里"Open Software Foundation"文末, Sape Mullender的电话是+20-592 4139, 可以印证例程中的变量tel应该指的是当时他们的电话号码后四位. 接着找到Jack的号码: +31 20 592 4098 另外还找到Guido用过4127这一号码, 也许这是CWI那时的一个多人号码, 如此文, 就能解释这个代码示例中还有"irv"也映射到了这个号码. 原来, 这是一个电话簿. 考虑到Python创造之初, 主要用户都是Guido的同事, 也是当时他写教程的读者, 这个示例代码对于他们来说是很容易理解的. 但随着几十年Python的推广, 它的含义也就被掩埋了. 英文代码风格中不提倡缩写名词挺合理的. 如果原例程中的变量名是phone或者telephone, 也会比tel好理解一些. 字符串的首字母大写也会更易于理解它们是人名. 汉化示例代码时, 打算就用"电话簿"作变量名.

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

京东一天离职 400 员工,官方表示系有人造谣

此前有消息称京东员工一天之间离职 400 人,京东 28 日对此做出回应,表示该消息纯属谣言,并指出有个别人员和机构有组织地将企业正常人员流动进行夸大,严重侵害了京东的名誉权,给京东造成了极其严重的负面影响,直接违反多项法律规定。 京东还表示目前仅 2019 届大学应届毕业生签约人数就超过 1300 人,并将于未来三个月内陆续入职,同时京东今年还将扩招 1.5 万个岗位。 “谣言的散布者罔顾事实、抹黑民营企业,严重影响了行业健康发展,我们呼吁国家相关主管机构对此一查到底,给企业一个健康、透明与公平的发展环境。” 附声明全文:

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

Redisson官方文档 - 8. 分布式锁和同步器

8.1. 可重入锁(Reentrant Lock) 基于Redis的Redisson分布式可重入锁RLock Java对象实现了java.util.concurrent.locks.Lock接口。 RLock lock = redisson.getLock("anyLock"); // 最常见的使用方法 lock.lock(); 大家都知道,如果负责储存这个分布式锁的Redis节点宕机以后,而且这个锁正好处于锁住的状态时,这个锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。 另外Redisson还通过加锁的方法提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。 // 加锁以后10秒钟自动解锁 // 无需调用unlock方法手动解锁 lock.lock(10, TimeUnit.SECONDS); // 尝试加锁,最多等待100秒,上锁以后10秒自动解锁 boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS); ... lock.unlock(); Redisson同时还为分布式锁提供了异步执行的相关方法: RLock lock = redisson.getLock("anyLock"); lock.lockAsync(); lock.lockAsync(10, TimeUnit.SECONDS); Future<Boolean> res = lock.tryLockAsync(100, 10, TimeUnit.SECONDS); RLock对象完全符合Java的Lock规范。也就是说只有拥有锁的进程才能解锁,其他进程解锁则会抛出IllegalMonitorStateException错误。但是如果遇到需要其他进程也能解锁的情况,请使用分布式信号量Semaphore 对象. 8.2. 公平锁(Fair Lock) 基于Redis的Redisson分布式可重入公平锁也是实现了java.util.concurrent.locks.Lock接口的一种RLock对象。它保证了当多个Redisson客户端线程同时请求加锁时,优先分配给先发出请求的线程。 RLock fairLock = redisson.getFairLock("anyLock"); // 最常见的使用方法 fairLock.lock(); 大家都知道,如果负责储存这个分布式锁的Redis节点宕机以后,而且这个锁正好处于锁住的状态时,这个锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。 另外Redisson还通过加锁的方法提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。 // 10秒钟以后自动解锁 // 无需调用unlock方法手动解锁 fairLock.lock(10, TimeUnit.SECONDS); // 尝试加锁,最多等待100秒,上锁以后10秒自动解锁 boolean res = fairLock.tryLock(100, 10, TimeUnit.SECONDS); ... fairLock.unlock(); Redisson同时还为分布式可重入公平锁提供了异步执行的相关方法: RLock fairLock = redisson.getFairLock("anyLock"); fairLock.lockAsync(); fairLock.lockAsync(10, TimeUnit.SECONDS); Future<Boolean> res = fairLock.tryLockAsync(100, 10, TimeUnit.SECONDS); 8.3. 联锁(MultiLock) 基于Redis的Redisson分布式联锁RedissonMultiLock对象可以将多个RLock对象关联为一个联锁,每个RLock对象实例可以来自于不同的Redisson实例。 RLock lock1 = redissonInstance1.getLock("lock1"); RLock lock2 = redissonInstance2.getLock("lock2"); RLock lock3 = redissonInstance3.getLock("lock3"); RedissonMultiLock lock = new RedissonMultiLock(lock1, lock2, lock3); // 同时加锁:lock1 lock2 lock3 // 所有的锁都上锁成功才算成功。 lock.lock(); ... lock.unlock(); 大家都知道,如果负责储存某些分布式锁的某些Redis节点宕机以后,而且这些锁正好处于锁住的状态时,这些锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。 另外Redisson还通过加锁的方法提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。 RedissonMultiLock lock = new RedissonMultiLock(lock1, lock2, lock3); // 给lock1,lock2,lock3加锁,如果没有手动解开的话,10秒钟后将会自动解开 lock.lock(10, TimeUnit.SECONDS); // 为加锁等待100秒时间,并在加锁成功10秒钟后自动解开 boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS); ... lock.unlock(); 8.4. 红锁(RedLock) 基于Redis的Redisson红锁RedissonRedLock对象实现了Redlock介绍的加锁算法。该对象也可以用来将多个RLock对象关联为一个红锁,每个RLock对象实例可以来自于不同的Redisson实例。 RLock lock1 = redissonInstance1.getLock("lock1"); RLock lock2 = redissonInstance2.getLock("lock2"); RLock lock3 = redissonInstance3.getLock("lock3"); RedissonRedLock lock = new RedissonRedLock(lock1, lock2, lock3); // 同时加锁:lock1 lock2 lock3 // 红锁在大部分节点上加锁成功就算成功。 lock.lock(); ... lock.unlock(); 大家都知道,如果负责储存某些分布式锁的某些Redis节点宕机以后,而且这些锁正好处于锁住的状态时,这些锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。 另外Redisson还通过加锁的方法提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。 RedissonRedLock lock = new RedissonRedLock(lock1, lock2, lock3); // 给lock1,lock2,lock3加锁,如果没有手动解开的话,10秒钟后将会自动解开 lock.lock(10, TimeUnit.SECONDS); // 为加锁等待100秒时间,并在加锁成功10秒钟后自动解开 boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS); ... lock.unlock(); 8.5. 读写锁(ReadWriteLock) 基于Redis的Redisson分布式可重入读写锁RReadWriteLock Java对象实现了java.util.concurrent.locks.ReadWriteLock接口。同时还支持自动过期解锁。该对象允许同时有多个读取锁,但是最多只能有一个写入锁。 RReadWriteLock rwlock = redisson.getLock("anyRWLock"); // 最常见的使用方法 rwlock.readLock().lock(); // 或 rwlock.writeLock().lock(); 大家都知道,如果负责储存这个分布式锁的Redis节点宕机以后,而且这个锁正好处于锁住的状态时,这个锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个监控锁的看门狗,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。 另外Redisson还通过加锁的方法提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。 // 10秒钟以后自动解锁 // 无需调用unlock方法手动解锁 rwlock.readLock().lock(10, TimeUnit.SECONDS); // 或 rwlock.writeLock().lock(10, TimeUnit.SECONDS); // 尝试加锁,最多等待100秒,上锁以后10秒自动解锁 boolean res = rwlock.readLock().tryLock(100, 10, TimeUnit.SECONDS); // 或 boolean res = rwlock.writeLock().tryLock(100, 10, TimeUnit.SECONDS); ... lock.unlock(); 8.6. 信号量(Semaphore) 基于Redis的Redisson的分布式信号量(Semaphore)Java对象RSemaphore采用了与java.util.concurrent.Semaphore相似的接口和用法。 RSemaphore semaphore = redisson.getSemaphore("semaphore"); semaphore.acquire(); //或 semaphore.acquireAsync(); semaphore.acquire(23); semaphore.tryAcquire(); //或 semaphore.tryAcquireAsync(); semaphore.tryAcquire(23, TimeUnit.SECONDS); //或 semaphore.tryAcquireAsync(23, TimeUnit.SECONDS); semaphore.release(10); semaphore.release(); //或 semaphore.releaseAsync(); 8.7. 可过期性信号量(PermitExpirableSemaphore) 基于Redis的Redisson可过期性信号量(PermitExpirableSemaphore)是在RSemaphore对象的基础上,为每个信号增加了一个过期时间。每个信号可以通过独立的ID来辨识,释放时只能通过提交这个ID才能释放。 RPermitExpirableSemaphore semaphore = redisson.getPermitExpirableSemaphore("mySemaphore"); String permitId = semaphore.acquire(); // 获取一个信号,有效期只有2秒钟。 String permitId = semaphore.acquire(2, TimeUnit.SECONDS); // ... semaphore.release(permitId); 8.8. 闭锁(CountDownLatch) 基于Redisson的Redisson分布式闭锁(CountDownLatch)Java对象RCountDownLatch采用了与java.util.concurrent.CountDownLatch相似的接口和用法。 RCountDownLatch latch = redisson.getCountDownLatch("anyCountDownLatch"); latch.trySetCount(1); latch.await(); // 在其他线程或其他JVM里 RCountDownLatch latch = redisson.getCountDownLatch("anyCountDownLatch"); latch.countDown();

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

WiseCloud成为全球首批Kubernetes官方认证平台产品-睿云智合

11月13日美国时间,CNCF在旧金山正式对外发布Kubernetes软件一致性项目,并对外公布了包括睿云智合WiseCloud在内的全球32家率先通过认证测试的平台产品及Kubernetest分发版。这意味着,睿云智合的容器云平台产品在云原生领域受到国际权威机构认可。 CNCF基金会由谷歌联合其他20家公司在2015年成立,现在是隶属于Linux基金会的非营利性组织。CNCF致力于开源云原生云项目的管理,旨在发展合作伙伴和开源社区,共同推动Kubernetes以及容器计算的发展,其成员包括Docker、Google、Intel、RedHat、IBM等国际知名科技公司。 KubernetesConformanceProgram是CNCF刚刚推出的Kubernetes分发版或云平台的一致性测试项目。通过测试的Kubernetes的认证平台产品可以为企业组织带来信心。意味着他们所使用的平台产品紧跟Kubernetes快速发展的步伐,同时也表明他们可以使用原生Kubernetes最新的通用功能。该计划还包括提供强有力的保证,保证通过Kubernetes认证商业供应商将继续发布新版本,以确保客户能够享受快速发展的Kubernetes功能。 WiseCloud支持Docker、Kubernetes等主流容器调度引擎,也引入Rancher等企业级容器管理平台,提供开发、测试、发布、持续运营等容器化应用的全生命周期管理。面对多容器集群管理平台,WiseCloud能提供完善的容器管理平台基础性服务,包括容器网络,存储服务等,对各种容器集群平台的资源进行统一抽象。此外,WiseCloud未来将逐步支持行业应用架构和接口标准/规范,比如常用行业应用中间件、基于微服务的行业应用商店、已开发好的行业应用SaaS服务等。

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

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

腾讯云软件源

腾讯云软件源

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。