bu

阅读 / 问答 / 标签

Rome wasn’t built in a day. Work harder and practice more. Your hardworking will be rewarded by Go

罗马不是一天建成的,工作努力并更多练习,你的努力总有一天上帝会回报给你的,上帝对每个人都是很公平的

Marker, DNA, EB, Loading buffer作用

这些电泳实验时常用的Marker:电泳时和目的片段一起跑胶,同maker片段位置相近的DNA大小相当。DNA:脱氧核糖核酸(DNA,为英文Deoxyribonucleic acid的缩写),又称去氧核糖核酸,是染色体的主要化学成分,同时也是组成基因的材料。EB(溴化乙锭):含有一个可以嵌入DNA堆积碱基之间的一个三环平面基团,它与DNA的结合几乎没有碱基序列特异性。在高离子强度的饱和溶液中,大约每2.5个碱基插入一个溴化乙锭分子。当染料分子插入后,其平面基团与螺旋的轴线垂直并通过范德华力与上下碱基相互作用;在凝胶成像仪中呈现紫色,进而判断目的片段大小等。Loading buffer:缓冲液里的指示剂溴酚蓝和二甲苯酚起到指示的作用,显示电泳的进程,以便我们适时终止电泳;缓冲液里的甘油成分可以加大样品密度,使样品密度大于TAE,从而沉降到点样孔中,防止样品飘出点样孔。

ubuntu16.04 怎么安装深度软件商店

其实ubuntu安装软件的方式非常简单(或者说你掌握了之后就觉得简单了)。通常的我们可以在ubuntu软件中心和新立得软件包管理器找到自己想要的软件,直接选择就可以自动下载并安装到电脑中,不想要的时候随时可以再从那里面卸载。这是第一种方法,也是最简便的方法。因为老大哥是Debain,所以ubuntu也支持deb快捷安装包。如果系统的软件包管理器源里没有你想要的软件,那么你从网上下载的ubuntu专用安装包就是这个格式(Debain的也是)。下载到本地直接双击就可以安装了,不过有时会碰到依赖问题。第三种是下载了一个压缩包,不能双击直接安装,里面都是些散装的文件。解压出来仔细找找通常能看到一个名为configure或者autogen.sh的文件,如果有,那就终端进入目录然后执行./configure或者./autogen.sh,然后照着三楼给出的步骤执行就可以了。加入你解压开文件夹发现没有这两个文件,那么里面应该有一个名为INSTALL的文本文件,没有后缀名,打开有关于安装方式的介绍,照着那上面说的做最保险了。第四种,*.bin文件,比如adobe air这样的软件。这种二进制安装包只有一个文件,双击不会执行,需要到终端下面执行chmod +x [文件名]为其提升权限,然后再./[文件名]执行即可。上面的是安装包的使用方法。但是有的软件没有提供安装包,而是只有一个源码下载选项。需要注意的是这种软件一般都是不稳定版本或者根本就没有后续支持。源码包下载下来解压能看到一个类似cmakelist的文件,如果有,那么就在该目录下终端运行cmake .(注意空格和点都要输入,该命令需要先安装了cmake软件包才可执行),接下来是自动编译,编译完成方法就同tar.gz安装包的一样了。另外还有些软件提供“源”,你只要将这个源添加到软件源里面就可以在包管理器中直接安装了。推荐你使用ubuntu tweak,许多常用源都包含在里面了,下载http://ubuntu-tweak.com/本人了解的就这些了,最后说一下ubuntu是不支持.rpm的,那是fedora使用的安装包格式,效果类似于deb。

prey刷资源bug修复了怎么办

正常刷资源。prey刷资源bug修复了,更新之后就打上补丁了,修复之后如果还想用BUG刷材料你会发现存档错误,读取存档不是当前版本,就会跳出游戏,需要玩家去正常参加刷资源的任务,不使用这些游戏漏洞。

雪佛兰suburban和凯雷德哪个大

雪佛兰萨博邦比凯迪拉克凯雷德还要大一些

suburban train是什么意思

市郊火车 或者是 城郊轨交。

suburbanlife有什么优点

1、优点:牵引力足。suburbanlife使用了v8发动机马力十分强劲,因此他的牵引能力非常足。2、缺点:使用资本高。这款车的各个方面都离不开燃油,十分费油,需要隔三岔五加油,因此他的使用成本高。

owe...to 和attribute to的区别?

都是归功于的意思,选A,B范围销,2,都是归功于的意思,选A,0,这里空中就只填一个owe就行了意思是归功于,0,owe...to 和attribute to的区别 有这么道题We ____Edison"s success to his intelligence and hard work. A.attribute to B.owe...to 应该选择哪个?这两个词组有何区别?它们都解释把什么归于什么. attribute to B.owe...to 归功于。我看不出有什么区别

Suburban War 歌词

歌曲名:Suburban War歌手:Arcade Fire专辑:The SuburbsArcade Fire - Suburban WarLet"s go for a drive, see the town tonightThere"s nothing to do but I don"t mind when I"m with youThis town"s so strange they built it to changeAnd while we sleep we know the streets get rearrangedMy old friends, we were so different thenBefore your war against the suburbs beganBefore it beganNow the music divides us into tribesYou grew your hair so I"ll grew mineYou said the past won"t restUntil we jump the fence and leave it behindMy old friends, I can remember whenYou cut your hair, I never saw you againNow the cities we live in could be distant starsAnd I searched for you in every passing carThe night"s so longYeah the night"s so longI"ve been living in the shadows of your songLiving in the shadows of your songIn the suburbs I, I learned to driveYou told me we would never survive,So grab your mother"s keys we leave tonightBut you started a war that we can"t winWe keep erasing all the streets we grew up inNow the music divides us into tribesChoose your side, I"ll choose my sideAll my old friends they don"t know me nowAll my old friends are staring through me nowAll my old friends they don"t know me nowAll my old friends they don"t know me nowThey don"t know me nowAll my old friends, waithttp://music.baidu.com/song/369798

雪弗兰Tahoe与suburban有什么区别嘛?是同一款车?

雪弗兰TAHOE与SUBURBAN不一样. 雪弗兰SUV家族共有五款车型,从上到下依次为TRACKER,BLAZER,TRAILBLAZER,TAHOE,SUBURBAN. 最大的是SUBURBAN车长超过5米3,是美国总统的保镖车,其次是TAHOE,车长5米05,基本用于警察配车,不过二者好像是同一底盘。 可参见百度百科仔细观察两者的区别还是挺大的

雪佛兰suburban价格多少?

雪佛兰suburban价格是148.89万左右:1、Suburban引擎可选择为Vortec家族代号L31的5.1升V型八缸引擎,采用OHV每缸变气门设计,此引擎的最大马力为255hp/4600rpm,最大扭力45.7kgm/2800rpm;2、除此之外车主还可以自行选择代号为L29、排气量更大的7.4升V-8引擎,此引擎同样采用OHV设计,最大马力290hp/4000rpm,最大扭力56.7kgm/3200rpm;3、各车系均为四速自排变速箱,然而也可根据负荷大小的差异,实际上采用不同类型的变速箱。百万购车补贴

雪佛兰suburban国内有卖的吗

雪佛兰suburban国内有的,不过比美国的贵,它的性能:1、Suburban前脸的样式反映了它的性能,包括斜度更大的挡风玻璃;一个凸出的电动弧形发动机盖;与轮毂相配的设计出色的新式挡泥板;一个标志性新隔栅和前照灯;以及一个全包防撞护板。防撞护板下部装有汽车牌照托架和拖钩,颇具气势就象一个滑板,加强了郊外粗犷的越野外形;2、与粗犷的外形相反,内部空间宽敞精致,形成鲜明的对比。仪表板和其它边饰使用了更柔软的低光泽新材料,仪表配备有LED背景灯,仪器和出气管也镀了铬。内置式附件和控制部件——如气候控制/无线电接收台——构成了无缝“整体式”的外观。几乎没有金属硬件或门锁外露,因为所有的车型都把外露部件隐藏在座位下和门栏饰板里。通过一些部件的设计,如独特的第二排放电翻折式座椅和同样能轻易移开的第三排座椅,增加了Suburban内部空间;3、标配的Suburban配备的是Vortec5.3升V-8发动机,具有320马力(238kw)和335磅-英尺扭矩(463N·m),融合了主动燃油管理排量自我调整省油技术。此项技术实现了八汽缸和四汽缸工作方式无缝转换,以达到省油目的。Vortec5.3升第四代V-8发动机推出了两个版本——包括一个四轮驱动车型标配的铝制缸体版本。Suburban将会是未来两年内通用公司力推的全尺寸SUV的代表之作。虽然作为一款大家不太熟知的车型被引进到中国市场,但相信有轰动一时的美国大片《越狱》的全面配合,Suburban必将在中国“粉丝”中掀起一股热销风潮。百万购车补贴

雪佛兰Suburban的介绍

曾经荣获2001年美“最佳厢车”称号的雪佛兰Suburban是由Yukon的长轴车型命名来的。无论在外表还是动力引擎都沿用着Yukon XL的技术指标。在美国这款车曾为外勤特工的标准坐驾,就连美国总统布什出行的车队也选择了该款Suburban。

雪佛兰Suburban的中文名字是什么?

这个车国内不进口 所以没有中国名字 非要起一个就是楼上告诉你的那个国内的名字 是国外引进以后 为了适应国内情况 音译或再起一次中文名字不一定和英文名字有直接关系 比如本田锋范 原车名叫CITY译为 城市,都市 和锋范两字没有任何关系

雪佛兰Suburban多少钱一辆?

我帮您查了一下,雪佛兰Suburban自从上市后就受到广大消费者欢迎,目前价格在148万元左右,希望我的回答能帮到您。

Trance (Album Version) 歌词

歌曲名:Trance (Album Version)歌手:Attila Csihar专辑:Attila Csihar... The Beast OftRANCE「黒神 OP2」作词:谷山纪章 / 作曲:饭冢昌明 / 编曲:饭冢昌明歌:GRANRODEO眩く光る汚れに 炫目闪亮的污秽瞬く事を忘れた 使我忘记了眨眼二度と访れない一瞬に 不会再降临的这一瞬间永远を感じさせた 让我感受到了永远death through trance 穿越了 死亡的 迷惑正しくなぞる规律は 正确地描写出的规律闭ざす今日の幻 封闭了今天的幻觉隠し切れないざわめきを 无法掩盖切断的嘈杂之声深渊に押し込めた 传递到深渊之中death through trance 穿越了 死亡的 迷惑小说を逆から読むようなXtasy 就像逆著读小说的陶醉感一般言叶と感情がリンクする 将言词和感情连接起来了爱したい夜に濡れたいfor me 想被爱的夜晚宛如想为我流泪消えないようにせめぎあう 为了不被消灭掉而互相争斗夺いたいのに远回りをして 明明想夺取却又兜远路而走足りないlogic溢れるtrick 不充足的逻辑充满著诡计见えないように络み合う 为了不被发现而互相缠绕もういっそこのままtrance 不如乾脆就这样被迷惑吧that"s right 就这样吧欲しいのは安心感で 我所渴望的是安心感キライなのは安定感 而讨厌的却是安定感つつ抜け猜疑心にまみれ 被穿堂而过的猜疑心所沾满抜け壳同然の 跟失神的人一样death through trance 穿越了 死亡的 迷惑新しい解放が支配するemergency 新型的解放模式支配著突发事件虚构と现実がF Kする 虚构和现实被掩饰了感じたい夜に壊したいfor me 想感触的夜晚宛如想摧毁我消えないようにせめぎ合う 为了不被消灭掉而互相争斗夺いたいのに远回りをして 明明想夺取却又兜远路而走青臭いstory欲しがるstormy 幼稚的谎言渴望著一场暴风雨见えないように络み合う 为了不被发现而互相缠绕そうきっとこのままtrance 不如乾脆就这样被迷惑吧TVアニメ「黒神 The Animation」OP2 テーマ爱したい夜に濡れたいfor me 想被爱的夜晚宛如想为我流泪消えないようにせめぎ合う 为了不被消灭掉而互相争斗夺いたいのに远回りをして 明明想夺取却又兜远路而走足りないlogic溢れるtrick 不充足的逻辑充满著诡计见えないように络み合う 为了不被发现而互相缠绕快楽果てるまで 直至快乐消失为止感じたい夜に壊したいfor me 想感触的夜晚宛如想摧毁我消えないようにせめぎ合う 为了不被消灭掉而互相争斗夺いたいのに远回りをして 明明想夺取却又兜远路而走青臭いstory欲しがるstormy 幼稚的谎言渴望著一场暴风雨见えないように络み合う 为了不被发现而互相缠绕そうきっとこのままtrance 不如乾脆就这样被迷惑吧that"s right 就这样吧just trance 只是迷惑get trance 获取迷惑终わりhttp://music.baidu.com/song/7529423

雪佛兰Suburban海外售价公布,折合人民币约37万起

现如今国内SUV市场的销量可谓是火爆异常,各种各样的的车型让人眼花缭乱,一些追求大空间、驾驶乘坐感受的朋友更多的把眼光放在了中大型SUV上,比如说保时捷卡宴、大众途昂、丰田普拉多在中国市场销量都非常好。不过真正说到巨无霸SUV,非美系莫属。在美国最受欢迎的车都是以“大”取胜,大尺寸、大空间、大马力、大扭矩,简单粗暴的肌肉车和移动堡垒一样的全尺寸SUV甚至代表了粗犷的美国文化。基于此,在美国诞生了不少全尺寸SUV车型,再加上这些车型在好莱坞大片中超高的出镜率,所以给人留下了很深的印象。凯迪拉克凯雷德、林肯领航员、GMC育空、雪佛兰Suburban,都是美式全尺寸SUV的代表作,自诞生之日起就受到了广泛的关注。尤其是凯迪拉克凯雷德,它的存在本身,似乎就能带给其他车一种深深的压迫感,而“总统座驾”的称号更是提高了凯雷德的“江湖地位”。前不久,凯雷德推出了第5代车型,这是距离2013年推出第4代之后,时隔7年的全新换代。近日,与凯迪拉克凯雷德采用相同平台打造的雪佛兰Suburban也全新亮相,还使用了同款发动机。同时,海外媒体也曝光了2021款雪佛兰Suburban在美国的售价,起售价为52,995美元(折合人民币约为37万元),比凯迪拉克凯雷德75,195美元(折合人民币约为52.6万元)的起售价相比亲民了很多。外观方面,全新雪佛兰Suburban保留了全尺寸SUV一如既往的霸气身材。新车前脸依然采用了盾形格栅的家族式设计,在传承美式全尺寸SUV方方正正的造型的基础上,前脸大量使用了金属镀铬饰条进行排列,显得更加霸气。搭配两侧的“C”型LED日间行车灯极大提升了辨识度。车身侧面,硬朗的线条贯穿了头尾,凸显美国硬汉的气息,亮银多辐式铝合金轮毂也为车身增添了几分霸气。车尾部分,宽大的扰流板与尾箱盖中部及黑色保险杠上沿的镀铬饰条配合起来,为新车增添了更加分明的层次感;双边四出的镀铬排气管为新车带来的更加动感的外观。内饰方面,新车将标配10英寸悬浮式中控屏,同时在高配车型上还将提供包括8英寸彩色数字仪表、15英寸抬头显示、第二排双12.6英寸多媒体娱乐系统在内的一系列配置,并且取消了上一代的怀挡设计,取而代之的是档次感更强的按键式设计。同时,经典的联排仪表、四辐式方向盘、空调控制区域等细节都有所调整,耐看了不少。尺寸上,2021款的Suburban(萨博班)比上一代加长了33mm,达到5733mm,轴距增加了104mm,达到3404mm。无论是储物空间还是乘客空间都有了大幅增长,雪佛兰Suburban最实用的配置要数第二、三排座椅可以自动收放,不需要一张一张手动放倒。后两排座椅放倒之后,装载容积增加了19%,容量达到了4106L,可以说是非常惊人的程度。动力方面,根据不同的车型,新车将搭载5.3升V8自吸(355马力)、6.2升V8自吸(420马力)和3.0升涡轮增压(柴油版,277马力)共三款动力。传动方面,新车全系标配10速自动变速箱。值得一提的是,2021款的Suburban与凯迪拉克凯雷德采用同一个最新的平台,这也使得他们获得了相同的后桥多连杆以及独立后悬架。这一变化增强了整车舒适性,也让新车可以增配电磁空气悬架,提升悬架的平顺性。作为雪佛兰旗下的优秀全尺寸SUV,雪佛兰Suburban一直都被消费者们喜爱,而在这次升级之后,更多样的动力选择、更大的车内空间、更优秀的外观样式,相信会为消费者们带去更好的驾驶体验。据悉,新款Suburban将于今年年中正式交付。本文来源于汽车之家车家号作者,不代表汽车之家的观点立场。

suburban车身材质

全钢材质。最初的雪佛兰suburban车型于1935年推出,以其全钢车身结构而闻名,使用木材作为车辆的结构部件是很常见的,与木质旅行车相比,全金属是一个主要的卖点,以提高坚固性。

雪佛兰Suburban的主要参数

引擎:5.3升V型8缸发动机最大马力:255hp/4600rpm最大扭力:45.7kgm/2800rpm厂商指导价格:380,000(元)车险指导价格:8,400(元)燃油类型/标号:汽油/93#厂商公布油耗:16.4(L/100km)真实油耗:待定(L/100km)排量(L):5.3排放标准: 欧Ⅱ

suburbanlife有什么优点

牵引力足。雪佛兰Suburban是由是由Yukon的长轴车型命名来的。无论在外表还是动力引擎都沿用着YukonXL的技术指标,雪佛兰Suburban曾经荣获2001年美“最佳厢车”称号。优点:牵引力足。suburbanlife使用了v8发动机马力十分强劲,因此他的牵引能力非常足。缺点:使用资本高。这款车的各个方面都离不开燃油,十分费油,需要隔三岔五加油,因此他的使用成本高。

SubUrban为什么叫傻本

名字读音和作品。SubUrban的读音的谐音就是傻本命,并且SubUrban的所有的作品也都给人一种傻乎乎的感觉,所以叫它傻本。

雪佛兰suburban参数怎么样?

雪佛兰suburban参数:1、雪佛兰SuburbanHDZ71是广受欢迎的Suburban2500HD和同样广受欢迎的Z71越野套件的结晶;2、这辆雪弗兰SuburbanHDZ71引起我们的注意是因为它换上了更省油的4.5L柴油引擎;3、这辆概念车还用了很多量产的部件,包括来自雪弗兰HD卡车的前脸,和与前脸相协调的后翼子板;4、这辆车的亮点还包括:新的后轴,铬合金托钩,特别版的内饰。通用还推出了附件套装,包括20英寸轮圈,铬合金发动机盖窗,行李架,两种方式的遥控启动等。百万购车补贴

雪佛兰suburban 怎么读?

音译过来叫萨博班。

suburban是什么意思

suburban英 [su0259"bu025cu02d0b(u0259)n]美 [su0259"bu025dbu0259n]n. 郊区居民adj. 郊区的,城郊的;土气的;见闻不广的[网络短语]Suburban 郊区居民,萨伯曼,郊外Suburban County 郊区县,郊县suburban carriage 市郊客车希望我的回答能帮助到你。

是didyoubuy还是boujht

did you buy anything?no I didn"t,but jim did. or no I didn"t,but Jim bought something.

请翻译下面的: pete:can l please buy your straw?

我能买你的稻草吗?

flammable 和 combustible的区别?

combustible A substance that ignites and burns readily. 通常翻译为“可燃物” flammable Easily ignited and capable of burning rapidly; inflammable. 通常翻译为“易燃物” 很多文献中没有太大区别。发现一个国外文献中的资料供参考:Flammable liquids(for example, gasoline) have a flash point below 100 F.or 38 C. Combustible liquids (for example, diesel fuel) have a flash point at or above 100 F or 38 C.很明显,易燃与可燃的区别。

villages have been built in

答案是对的. what 在引导宾语从句的时候,即表示 先行词,有表示链接词.相对于 the thing that 在这里相对于 a place that 其他的连接词,没有这个作用.

pnas contribute 和edit 什么区别

PNAS是美国科学院院报。 是被引用次数最多的综合学科文献之一,周刊。它是美国国家科学院的院刊,亦是公认的世界四大名刊(Cell,Nature,Science,PNAS)之一,百年经典期刊。自1914年创刊至今,PNAS提供具有高水平的前沿研究报告、学术、。

nordic hamburg

nordic hamburg 北欧汉堡

21世纪大学英语读写教程第四册(vocabulary英译汉 翻译)

unit11.无论你是多么富有经验的演说家,无论你做了多么充分的准备,你都很难在这样嘈杂招待会上发表演讲Nomatterhowexperiencedaspeakeryouare,andhowwellyouhavepreparedyourspeech,youwillhavedifficultymakingaspeechatsuchanoisyreception.2.就像吉米妹妹的朋友都关心吉米一样,吉米也关心他们Justasallhissister"sfriendscaredabouthim,Jimmycaredaboutthem.3.汽车的生产商在新车的几处都印有汽车识别号码,以便帮助找回被盗车辆Carmanufacturersstampavehicleidentificationnumberatseveralplacesonnewcarstohelptrackdownstolenvehicles.4.老师回来时你敢告我状的话,我就不再和你说话了IfyoudaretellonmewhentheteachergetsbackIwon"tsayawordtoyouanymore.5.有些老年人愿意独自过日子,但大多数老人选择和儿女一起生活Someelderlypeopleprefertoliveontheirownwhilethegreatmajoritychoosetolivewiththeirchildren.6.现在需要面对的事情是:如何筹集创建公司所需的资金Hereissomethingthatneedstobereckonedwith:howtogetthenecessaryfinancestoestablishthecompany.unit2XI1.被告是位年仅30岁的女子,她坚持称自己无罪Thedefendant,awomanofonly30,keptinsistingonherowninnocence.2.总体来看,枣、豆类以及一些多叶的绿色蔬菜是最好的铁质来源Alltingsconsidered,dates,beansandsomeleafygreenvegetablesarethebestsourcesofiron.3.正餐时不供应饮料,饮料会影响消化Nobeveragesareservedwithmealsbecausetheyinterferewithdigestion.4.考虑到那个地方受欢迎的程度,提前订旅馆是明智的Takingthepopularityoftheregionintoconsideration,itisadvisabletobookhotelsinadvance.5.服药后若有呕吐感,请立即停止服用并尽快咨询医生Ifyouhaveafeelingofwantingtothrowupaftertakingthisdrug,stoptakingitimmediatelyandconsultyourdoctorsassoonaspossible.6.总结这次讨论时,他说双方都要好好考虑怎样以最有效的方法来解决这一问题Summingupthediscussion,hesaidbothpartiesshouldconsiderthemosteffectivewaytosolvetheproblem.unit3XI1.在思维方面,与他的行为一样,他是非常传统的Inhisthinking,asinhisbehavior,heisverytraditional.2.教师一旦同意接受新的教学计划。他们就得面对新计划所带为他们的压力Oncetheteachersagreetoacceptthenewteachingprogram,theyhavetofacethestrainitputsonthem.3.从长远看,大学毕业后继续深造而不是直接参加工作是值得的Inthelongrun,itisworthwhiletopursueone"sstudyaftergraduatingfromuniversityinsteadofgoingtoworkdirectly.4.由于这所学校的学宗旨是品德第一,所以道德观和学习成绩受到同样的重视AstheschooloperatesontheCharacterFirstprinciple,moralvaluesandacademicachievementsarestressedequally.5.据说,原定于这个月召开的会议将推迟到下个月召开Itissaidthatthemeeting,whichisscheduledtobeheldthismonth,willbeputofftillnextmonth.6.这所学校把为学生做好人生准备当作其职责,法是倡导一整套能使所有学生受益的道德标准Theschoolseesitsjobaspreparingitsstudentsforlifebycultivatingacomprehensivesetofprinciplesthatcanbenefitallofthem.unit4XI1.从各方面考虑,这座城市都是世界上最令人激动的城市Everythingconsidered,thiscityistheworld"smostexcitingcity.2.尽管没有得到父母的赞同,他还是继续他的计划出国学习Thoughwithnoapprovalfromhisparents,hewentaheadwithhisplantostudyabroad.3.这座桥是以一位英雄的名字,这位英雄为人民的事业献出了生命Thebridgewasnamedaftertheherowhogavehislifeforthecauseofpeople.4.据说,画家是以他母亲为模特的,他母亲的面容沧桑却不失坚定Itissaidthatthepainterusedhismotherasthemodelinthepaintingwhosefacerepresentedsufferingyetstrength.5.这位作家于1950年因出版一本小说而一举成名,小说的灵感来自于他和一位姑娘在农场的经历Thewriterinstantlyrosetofamein1950withthepublicationofanovelinspiredbyhisexperiencewithagirlonafarm.6.有个故事说,US是“山姆大叔”的缩写,“山姆大叔”原名叫山姆,威尔逊,他曾和一名男子一起工作,这名男子和美国政府签订了一份合同,给军队提供肉食Onestorysaysthat“US”wasshortfor“UncleSam”whoserealnamewasSamWilson,whohadonceworkedwithamanwhohadsignedacontractwiththegovernmenttoprovidemeattotheUSArmy.unit5XI1.直到看到弥留之际躺在床上的母亲,他才意识到自己是多么地爱她Notuntilhesawhismotherlyinginbed,dying,didherealizehowmuchhelovedher.2.考虑到他最近的身体状况,我认为他这次考试成绩还不错Takingintoaccountofhisrecentphysicalcondition,Ithinkhehasdonequitewellintheexam.3.克拉克夫人躺在床上一动不动,一时间我都纳闷她是否和活着Mrs.Clarkliesinbedmotionless,andIwonderedbrieflyifsheisstillalive.4.整栋楼一片黑暗,只有三楼的某个窗户透出一丝光Thebuildingwasdarkenedexceptforasinglelightburninginathird-storeywindow.5.这些士兵接受了严格的训练,并且对完成这项新任务有充分的准备Thesesoldiershavereceivedverystricttrainingandarewellequippedtofulfillthenewtask.6.他伸手拿起电话,拨通了宾馆的号码Hereachedforthephone,pickeditup,anddialedthehotel"snumber.unit6XI1.我们应该尽最大努力预测地震,这样地震造成的财产破坏才会被尽可能的避免Weshouldtryourbesttoforecastearthquakessothatdestructionofpropertycausedbythemcouldbepreventedasmuchaspossible.2.一个农民注意到有很多鱼在水面上游动,他说这预示着可能有地震发生Afarmernoticedlargeschoolsoffishswimmingnearthesurfaceofthewater,which,hesaid,indicatedthepossibleoccurrenceofanearthquake.3.要将英英词典放在手边,当你不能准确地理解单词时,你就能随时查阅KeepanEnglish-Englishdictionaryhandy,andwhenyoucannotunderstandawordwithaccuracy,youmayrefertoitanytime.4.如有必要,生活在将要发生地震地区的人可以睡在帐篷里Ifnecessary,peoplewholiveintheareawhereanearthquakeisabouttooccurmaysleepintents.5.对一个想找工作的学生来说,有没有硕士学位的确有很大影响Amaster"sdegreedoesmakeagreatdifferencetoastudentwhowantstogetajob.6.这本书除了告诉我们地震方面的知识外,还告诉我们如何做好预防工作Inadditiontotheknowledgeaboutearthquakes,thebooktellsushowtoprepareforthem.Unit71.AninterestingquestionthereforeremainsastohowfarMicrosoftcangowithGatesasitsCEO.2.There"s/It"snousecomplainingsincenothingeverchangesastheresultofacomplaint.What"simportantistotakemeasurestopreventsimilareventsfromhappiness.3.Learntoacceptthefactthatsomepeopleyouthoughtwerefriendsturnouttobeenemies.4.Asyouwouldexpectfromthebook"stitle,therearemanyreferencestowhatkindofmanGatesis.5.Theprosperityofthecompanystemsfromhardworkingandthriftyoftheentirestaff.6.HesaidnothingatallonthesubjectoftheplaywhichwasputonforthefirsttimeSaturdaynight.unit81.Itsoundslikeagoodidea,butwhatifit"satrick?2.CitiesandtownsinthisareasufferedalotfromtheearthquakewithJiujiangandRuichangamongtheworst-hit.3.Hecomplainedthattheyshouldnothavegotinvolvedinitinthefirstplace.4.ForMary"ssake,Icanlendyoumycartogetaroundyourtransportproblem.5.Intheoryit"sfeasibletocloneachildtoharvestorgans,butinpracticeitwouldbepsychologicallyharmfultothechild.6.HepublishedanarticleunderthenameofBraverwhichstressestheideathattheprocessofcloninganimalswouldworkforhumansaswell.unit91.Wordcameyesterdaythattheywerekilledwhiletryingtoreachthesummit.2.UndernocircumstancesshallImentiontoanyonethatIhaveturneddowntheinvitationtoherwedding.3.Itmadetheheadlinesthatthepresident"swifethreatenedherhusbandwithpublicexposure.4.Thatwealthylady"srepeateddemandforapremaritalagreementgreatlyharmedherprospectivehusband"sself-esteemandendedupinhisrefusaltogetmarried.5.Makenomistakeaboutit,somewomenwouldinsistontherighttogetadivorceiftheirhusbandsdidnotearnasmuchastheyexpected.6.Thecasualdiscoveryofthefingerprintshedsomelightonthemurderhehadbeenlookinginto.

maverick-buying是什么意思

maverick-buying网络独立购买;采买

有哪些单词与nurse、hamburger 中的ur相同?

汉堡里有很多和ur发音一样的单词。我们常用的词有:烧、打扰、看护、星期四、转、爆、幕、伤害、卷曲、投掷、谋杀、低语、苗圃、钱包、火鸡、芜菁、毛皮、潜伏、培育、乖戾、急迫、纯粹、目的、教会、占领、乌龟、返回、调查、表面、城市、紧急、绝对、家具、家具、姓氏、cur、土耳其、跨栏、cur、冲浪、汉堡、进一步、紧急等。抱歉,我现在只能想到这些。

翻译!buy supplies是买东西的意思吗?

补充供给

It Is You (Thrive Album Version) 歌词

歌曲名:It Is You (Thrive Album Version)歌手:Newsboys专辑:ThriveDANA GLOVER------ It is you (I Have Loved)There is something that I see从你看我的眼神中In the way you look at me我发现了一些东西There"s a smile你的眼神里充满了微笑There"s a truth in your eyes和信任But an unexpected way但是以一中想不到的方式On this unexpected day 在意想不到的一天Could it mean this is那是不是就意味着Where I belong你是我的归属It is you I have loved all along我一直爱着的就是你It"s no more mystery没有比这更神奇的了It is finally clear to me最后我明白了一切You"re the home my heart你是我心灵的归属Searched for so long 你是我一直所要寻找的人And it is you是你I have loved all along我一直都爱的人There were times I ran to hide以前我还去掩饰Afraid to show the other side我害怕把另一面展示给你看Alone in the night without you在没有你的孤独的夜晚But now I know just who you are但是我现在知道你对我意味着什么And I know you hold my heart我知道占据着我的灵魂Finally this is where I belong这是我最后的归属It is you I have loved all along你是我一直都爱的人It"s no more mystery没有比这更神奇的了It is finally clear to me最后一切都明白了You"re the home my heart你是我的心灵的寄居地Searched for so long是我一直要找寻的And it is you是你I have loved all along我一直爱的人Over and over一次又一次I"m filled with emotion我满是激情Your love, it rushes你给我的爱Through my veins在我的血液里奔涌澎湃And I am filled 我陶醉于这With the sweetest devotion甜蜜爱情As I, I look into当我看着你Your perfect face你那完美的面颊It"s no more mystery没有比这更神奇的了It is finally clear to me最后我明白了一切You"re the home my heart你是我心灵的归属Searched for so long你是我一直所要寻找的人And it is you 是你I have lovedIt is you I have loved all along 我一直都爱的人It is you是你I have loved all along我一直都爱的人PILLAGER 凌苇景云想你http://music.baidu.com/song/2876714

Peter Buffett的《Spike》 歌词

歌曲名:Spike歌手:Peter Buffett专辑:Lost FrontierSpike-The Network-Money Money 2020Hey this Brandon but my friends call me Spike now.I just moved out my parents" house in DanvilleTo this wicked warehouse in Oakland.Anyway I spent most of the day spare-changing on the avenue.I started out in front of the MedBut everyone kept saying I looked too young and healthySo I went up the street to the Gap where all theYuppie college kids shopI was there until about 5:30 or 6I scored about 10 bucksSo me and my girlfriend, you met her, she"s from La JollaAnyway, we got some money from her parentsSo we"re gonna stop by becauseI need a fixWhat"s that?Now"s not a good time?What do you mean there"s none left?Well what the fuck dude?If I would have known that I would have gone to Concord.What do you mean go back to Concord then?Dude you don"t even know who you"re talking to.Don"t make me get all Blackhawk on your ass.Wait man I didn"t mean that.C"mon dude, please?Alright man.Wait wait wait waitDo you know anyone that"s got any?Do you got a number?What do you mean you won"t give it to me?I didn"t call for a shitty conversation,I called becauseI need a fixMan I got it roughWhen drinking cough syrupJust ain"t enoughOn and onI"m a teenage rebelI"m fucking boredMom, this is Spi, I mean Brandon.I got kicked out of my place in Oakland.I don"t really have any place to go soI was just wondering if I could stay with you or Grandma or something?I don"t know.My girlfriend dumped me she moved back to La Jolla, it"s kind of a drag.I guess she"s gonna go back to school or something.Anyway call me back.Oh, one more thing Mom,I was wondering if I could borrow $200 becauseI need a fixI"m a teenage rebel---END---http://music.baidu.com/song/2573029

protobuf报错command not found: protoc和Brew Link失败

因为安装其他东西动了环境导致protobuf的命令无法执行。报错 command not found: protoc 。没找到原因,想着就直接卸载重装了protobuf。 $ brew uninstall protobuf //然后重新安装 $ brew install protobuf 安装之后link失败了,报错如下 网上找了一圈,执行下就可以重新link了。 然后protobuf指令也正常了。 指令来源

SpringBoot使用protobuf生成的model进行传参无法序列化

配置后不生效,报错信息如下: 最开始怀疑是ProtobufHttpMessageConverter没有注册到HttpMessageConverter的列表中,于是开始跟踪源码发现HttpMessageConverter列表中已经添加上了: 既然已经添加进去了,那为什么不走转换器的逻辑,继续往下走发现: converter.canWrite(valueType, selectedMediaType)这个方法返回false导致body没有进行适配,下面进行判空逻辑后就会抛出异常: 继续跟下去,canWrite是调用了父类org.springframework.http.converter.AbstractHttpMessageConverter#canWrite: 而ProtobufHttpMessageConverter其实已经重写了supports与canWrite方法: 这里发现根源其实是Message.class.isAssignableFrom(clazz)返回的false。那么难道protobuf生成的model不是com.google.protobuf.Message的子类吗? 查看生成的java文件发现model确实不是继承的GeneratedMessageV3,而是继承了GeneratedMessageLite。至此发现了导致问题的根源。

go的protobuf这个问题是不是一个bug

客户端lua,通信协议是protobuf,以前用网易的proto-gen-lua,使用过程遇到些问题需要绕,比如: 1、每次更改、增加proto都要生成新的文件,代码规模剧增 2、由于lua本身,每个文件最大文件内全局local变量不能超过200个,所以当proto规模太大时。

解决protobuf忽略空返回值的问题

最近在用Kratos开发项目的时候遇到了问题,repeated类型的字段在值为空的情况下,字段被直接忽略掉了。 我希望的是即使为空的情况下也能返回一个空数组,而不是直接把整个字段忽略掉,就像下面这样: 经过多方排查之后找到了问题所在,google会在生成pb.go文件时在json标签里插入 omitempty 属性,而json库在转换json时一旦遇到这个标签就会忽略掉空字段,这不符合我的需求,所以把这个字段去掉就好了。 先写一个shell脚本来递归遍历api目录下的pb.go文件: 接着修改Makefile文件: 在api的最下面添加替换脚本,流程就是遍历scandir脚本查出来的pb.go文件,替换掉文件里所有的omitempty,然后将文件暂存为.tmp,最后再覆盖原文件。 今后每次执行make api时就会连带自动替换掉所有生成文件中的omitempty,免得每次手动替换麻烦又容易出错。 参考: https://ld246.com/article/1591110788411

如何对 protobuf-lite编程,c++ android

protocol buffer编译器生成 Foo 类,公开地(publicly)派生自 google::protobuf::Message。Foo类是一个实体类;禁止遗留下纯虚的方法没有被实现。除了 Message 中的虚方法之外,非纯虚的方法可以由 Foo 类重载也可以不重载,取决于优化模式。缺省,为了最高的速度, Foo 实现特定protocol buffer版本的所有方法。不管怎样,如果 .proto 文件包含下列行:1 option optimize_for = CODE_SIZE;Foo 将仅重载运行必需的最小方法集合,和依赖于基于反射实现的剩余部分。这意味着减小了生成代码的大小,但也减小了性能。或者,如果 .proto 文件包含:1 option optimize_for = LITE_RUNTIME;Foo 将包含所有方法的快速实现(fast implementations),但是是实现 google::protobuf::MessageLite 接口,仅包含 Message 中所有方法的一个子集。尤其,它不支持描述符(descriptors)或反射。不管怎样,以这种方式生成的代码只需要连接 libprotobuf-lite.so (Windows上是 libprotobuf-lite.lib) 而不是 libprotobuf.so(libprotobuf.lib)。"lite"库比 "full"库(完整的库)要小很多,更适用于资源受限的系统,比如手机。你不应该创建 Foo 的子类。如果你子类化 Foo ,并且重载虚方法,重载可能被忽略,就像很多生成的方法为了提高性能被去虚拟化(de-virtualized)。

but i think 后为什么要加talking?

But I think后面如果接了宾语从句或宾语的话。动词作宾语就要加上ing。是它起名词的作用。给你举一个例子。 I think talking is very interesting.在这里talking必须使用动名词。因为他在这里做了宾语。

protobuf 生成的变量会不会自动销毁

要看具体变量的类型,看个例子吧:在网络游戏中,游戏玩家之间的同步是一个最基本的功能,而同步是通过对坐标的广播进行的,因此我们假设一个简单的模型,当一个玩家的位置发生变化时,将玩家的新位置发给地图内所有玩家,根据这个情况写出以下proto文件。message PlayerPos{ required uint32 playerID = 1; required float posX = 2 ; required float posY = 3 ;}这样就有一个问题,现在的游戏都是3D游戏,因此需要xyz来表示位置,还需要另一组xyz来表示朝向,如果用简单变量的话就会显的很乱,而且无论是位置还是朝向其实都是一组xyz,因此可以将xyz抽出来成为一个复合数据类型,单独放在一个文件中。这样就构成以下文件。file vector.protomessage vector3D{required float x = 1;required float y = 2;required float z = 3;};file Player.protoimport "vector.proto";message PlayerPos {required uint32 playerID = 1;required vector3D pos = 2;};编译的时候先编译vector文件,采用import时需要注意路径,本例中两文件在同一目录下。protoc --cpp_out=. vector.proto Player.protoproto对应的文件已经生成了,但是该怎么赋值呢,查API查了半天有点不知所以,干脆来看生成的类文件的源代码吧 // required uint32 playerID = 1; inline bool has_playerid() const; inline void clear_playerid(); static const int kPlayerIDFieldNumber = 1; inline ::google::protobuf::uint32 playerid() const; inline void set_playerid(::google::protobuf::uint32 value); // required .vector3D pos = 2; inline bool has_pos() const; inline void clear_pos(); static const int kPosFieldNumber = 2; inline const ::vector3D& pos() const; inline ::vector3D* mutable_pos(); inline ::vector3D* release_pos(); inline void set_allocated_pos(::vector3D* pos);上面列出了生成的部分源代码,主要是PlayerPos的操作变量的函数,第一个playID很简单,可以看到直接使用set_playerid ( ) 即可,但是对于嵌套的pos 发现没有对应的set_pos方法,不过发现了一个set_allocated_pos() 函数,这个函数也是set开头的,看看这个函数是干嘛的。 inline void PlayerPos::set_allocated_pos(::vector3D* pos) { delete pos_; pos_ = pos; if (pos) { set_has_pos(); } else { clear_has_pos(); }}看上去可以赋值,直接调用set_allocated_pos() 进行赋值看一看PlayerPos player;vector3D tmp;tmp.x = 1;tmp.y = 2;tmp.z = 3;player.set_allocated_pos(&tmp)编译没问题,但是运行时出现错误,而且是很奇怪的错误,仔细了查看一下PlayerPos的源码,发现一个问题::vector3D* pos_; ::google::protobuf::uint32 playerid_;上面是PlayerPos中变量的保存形式,发现pos是作为一个指针存储的,如果按照之前的赋值 tmp 是一个局部变量,函数返回时局部变量自动销毁,而pos_保存的仍然是已被销毁的tmp的位置,因此会出错,如果采用new的话就可以解决这个问题,即赋值方法如下PlayerPos player;vector3D *tmp = new Vector3D;tmp->x = 1;tmp->y = 2;tmp->z = 3;player.set_allocated_pos(tmp)这样即可,编译运行都没有问题。如此之外,还有一种赋值方法,就是调用mutable_pos()inline ::vector3D* PlayerPos::mutable_pos() { set_has_pos(); if (pos_ == NULL) pos_ = new ::vector3D; return pos_;}mutable_pos () 中自己new出了一个vector3D 对象,而vector3D中又实现了赋值的重载,因此可以这样解决PlayerPos player;vector3D *tmp = player.mutable_pos();tmp->x = 1;tmp->y = 2;tmp->z = 3;

为什么Protobuf的默认序列化格式没有包含消息的长度与类型

Protobuf 是经过深思熟虑的消息打包方案,它的默认序列化格式没有包含消息的长度与类型,自然有其道理。哪些情况下不需要在 protobuf 序列化得到的字节流中包含消息的长度和(或)类型?我能想到的答案有:如果把消息写入文件,一个文件存一个消息,那么序列化结果中不需要包含长度和类型,因为从文件名和文件长度中可以得知消息的类型与长度。如果把消息写入文件,一个文件存多个消息,那么序列化结果中不需要包含类型,因为文件名就代表了消息的类型。如果把消息存入数据库(或者 NoSQL),以 VARBINARY 字段保存,那么序列化结果中不需要包含长度和类型,因为从字段名和字段长度中可以得知消息的类型与长度。如果把消息以 UDP 方式发生给对方,而且对方一个 UDP port 只接收一种消息类型,那么序列化结果中不需要包含长度和类型,因为从 port 和 UDP packet 长度中可以得知消息的类型与长度。如果把消息以 TCP 短连接方式发给对方,而且对方一个 TCP port 只接收一种消息类型,那么序列化结果中不需要包含长度和类型,因为从 port 和 TCP 字节流长度中可以得知消息的类型与长度。如果把消息以 TCP 长连接方式发给对方,但是对方一个 TCP port 只接收一种消息类型,那么序列化结果中不需要包含类型,因为 port 代表了消息的类型。如果采用 RPC 方式通信,那么只需要告诉对方 method name,对方自然能推断出 Request 和 Response 的消息类型,这些可以由 protoc 生成的 RPC stubs 自动搞定。对于最后一点,比方说 sudoku.proto 定义为:service SudokuService {rpc Solve (SudokuRequest) returns (SudokuResponse);}那么 RPC method Sudoku.Solve 对应的请求和响应分别是 SudokuRequest 和 SudokuResponse。在发送 RPC 请求的时候,不需要包含 SudokuRequest 的类型,只需要发送 method name Sudoku.Solve,对方自知道应该按照 SudokuRequest 来解析(parse)请求。这个例子来自我的半成品项目 evproto。对于上述这些情况,如果 protobuf 无条件地把长度和类型放到序列化的字节串中,只会浪费网络带宽和存储。可见 protobuf 默认不发送长度和类型是正确的决定。Protobuf 为消息格式的设计树立了典范,哪些该自己搞定,哪些留给外部系统去解决,这些都考虑得很清楚。只有在使用 TCP 长连接,且在一个连接上传递不止一种消息的情况下(比方同时发 Heartbeat 和 Request/Response),才需要我前文提到的那种打包方案。(为什么要在一个连接上同时发 Heartbeat 和业务消息?请见陈硕《分布式系统的工程化开发方法》 p.51 心跳协议的设计。)这时候我们需要一个分发器 dispatcher,把不同类型的消息分给各个消息处理函数,这正是本文的主题之一。

Protobuf语法介绍

我们先看看官方文档给出的定义和描述 简单来讲, ProtoBuf 是结构数据序列化方法,可简单类比于,其具有以下特点: 在protobuf中,协议是由一系列的消息组成的。因此最重要的就是定义通信时使用到的消息格式。一个Protobuf 消息(对应JAVA类),由至少一个字段(对应Java类属性)组合而成。 消息的定义很简单,就是message关键字加上消息的名字 字段定义格式: 限定修饰符 | 数据类型 | 字段名称 | = | 字段编码 required: 表示是一个必须字段,必须相对于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。发送之前没有设置required字段或者无法识别required字段都会引发编解码异常,导致消息被丢弃。 optional: 表示是一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或者不设置该字段的值。对于接收方,如果能够识别可选字段就进行相应的处理,如果无法识别,则忽略该字段,消息中的其它字段正常处理。---因为optional字段的特性,很多接口在升级版本中都把后来添加的字段都统一的设置为optional字段,这样老的版本无需升级程序也可以正常的与新的软件进行通信,只不过新的字段无法识别而已,因为并不是每个节点都需要新的功能,因此可以做到按需升级和平滑过渡。 repeated: 表示该字段可以包含0~N个元素。其特性和optional一样,但是每一次可以包含多个值。可以看作是在传递一个数组的值。类比于Java这边的List protobuf定义了一套基本的数据类型,几乎都映射了Java语言的基础数据类型(主要以Java为例) 详见下面表格 字段的命名方式与Java的命名方式大致一致 字段编码是一个序列化和反序列化的标记值,有了该值,通信双方才能互相识别对方的字段。当然相同的编码值,其限定修饰符和数据类型必须相同。编码值的取值范围为 1~2^32(4294967296) 其中 1~15的编码时间和空间效率都是最高的,编码值越大,其编码的时间和空间效率就越低(相对于1-15),当然一般情况下相邻的2个值编码效率的是相同的,除非2个值恰好实在4字节,12字节,20字节等的临界区。比如15和16 1900~2000编码值为Google protobuf 系统内部保留值,建议不要在自己的项目中使用。protobuf 还建议把经常要传递的值把其字段编码设置为1-15之间的值 完整的消息定义示例 枚举的定义和Java 相同,使用 enum 关键字,但是有一些限制。 枚举值必须大于等于0的整数。 使用分号 ; 分隔枚举变量而不是Java 语言中的逗号 , 示例: 你可以将其他消息类型用作字段类型。已我们现在IM的为例,在每一个CSSendLiveRoomMsgReq消息中包含ImMsgBody消息,此时可以在相同的.proto文件中定义一个ImMsgBody消息类型,然后在CSSendLiveRoomMsgReq消息中指定一个ImMsgBody类型的字段 示例: 如果你的消息中有很多可选字段, 并且同时至多一个字段会被设置, 你可以加强这个行为,使用oneof特性节省内存,Oneof字段就像可选字段, 除了它们会共享内存, 至多一个字段会被设置。 设置其中一个字段会清除其它字段。 为了在.proto定义Oneof字段, 你需要在名字前面加上oneof关键字, 比如下面例子的ImMsgBody: oneof的特性

protocol buffer的service接口生成问题

什么是protocol bufferProtocolBuffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。1.2 他们如何工作你首先需要在一个 .proto 文件中定义你需要做串行化的数据结构信息。每个ProtocolBuffer信息是一小段逻辑记录,包含一系列的键值对。这里有个非常简单的 .proto 文件定义了个人信息:message Person { required string name=1; required int32 id=2; optional string email=3; enum PhoneType { MOBILE=0; HOME=1; WORK=2; } message PhoneNumber { required string number=1; optional PhoneType type=2 [default=HOME]; } repeated PhoneNumber phone=4;}有如你所见,消息格式很简单,每个消息类型拥有一个或多个特定的数字字段,每个字段拥有一个名字和一个值类型。值类型可以是数字(整数或浮点)、布尔型、字符串、原始字节或者其他ProtocolBuffer类型,还允许数据结构的分级。你可以指定可选字段,必选字段和重复字段。你可以在( gle.com/apis/protocolbuffers/docs/proto.html )找到更多关于如何编写 .proto 文件的信息。一旦你定义了自己的报文格式(message),你就可以运行ProtocolBuffer编译器,将你的 .proto 文件编译成特定语言的类。这些类提供了简单的方法访问每个字段(像是 query() 和 set_query() ),像是访问类的方法一样将结构串行化或反串行化。例如你可以选择C++语言,运行编译如上的协议文件生成类叫做 Person 。随后你就可以在应用中使用这个类来串行化的读取报文信息。你可以这么写代码:Person person;person.set_name("John Doe");person.set_id(1234);person.set_email("jdoe@example.com");fstream.output("myfile",ios::out | ios::binary);person.SerializeToOstream(&output);然后,你可以读取报文中的数据:fstream input("myfile",ios::in | ios:binary);Person person;person.ParseFromIstream(&input);cout << "Name: " << person.name() << endl;cout << "E-mail: " << person.email() << endl;你可以在不影响向后兼容的情况下随意给数据结构增加字段,旧有的数据会忽略新的字段。所以如果使用ProtocolBuffer作为通信协议,你可以无须担心破坏现有代码的情况下扩展协议。你可以在API参考( oogle.com/apis/protocolbuffers/docs/reference/overview.html )中找到完整的参考,而关于ProtocolBuffer的报文格式编码则可以在( .google.com/apis/protocolbuffers/docs/encoding.html )中找到。1.3 为什么不用XML?ProtocolBuffer拥有多项比XML更高级的串行化结构数据的特性,ProtocolBuffer:更简单小3-10倍快20-100倍更少的歧义可以方便的生成数据存取类例如,让我们看看如何在XML中建模Person的name和email字段:<person> <name>John Doe</name> <email>jdoe@example.com</email></person>对应的ProtocolBuffer报文则如下:#ProtocolBuffer的文本表示#这不是正常时使用的二进制数据person { name: "John Doe" email: "jdoe@example.com"}当这个报文编码到ProtocolBuffer的二进制格式( .google.com/apis/protocolbuffers/docs/encoding.html )时(上面的文本仅用于调试和编辑),它只需要28字节和100-200ns的解析时间。而XML的版本需要69字节(除去空白)和 5000-10000ns的解析时间。当然,操作ProtocolBuffer也很简单:cout << "Name: " << person.name() << endl;cout << "E-mail: " << person.email() << endl;而XML的你需要:cout << "Name: " << person.getElementsByTagName("name")->item(0)->innerText() << endl;cout << "E-mail: " << person.getElementsByTagName("email")->item(0)->innerText() << end;当然,ProtocolBuffer并不是在任何时候都比XML更合适,例如ProtocolBuffer无法对一个基于标记文本的文档建模,因为你根本没法方便的在文本中插入结构。另外,XML是便于人类阅读和编辑的,而ProtocolBuffer则不是。还有XML是自解释的,而 ProtocolBuffer仅在你拥有报文格式定义的 .proto 文件时才有意义。1.4 听起来像是为我的解决方案,如何开始?下 er编译器,用于生成你需要的IO类。构建和安装你的编译器,跟随README的指令就可以做到。一旦你安装好了,就可以跟着编程指导( ogle.com/apis/protocolbuffers/docs/tutorials.html )来选择语言-随后就是使用ProtocolBuffer创建一个简单的应用了。1.5 一点历史ProtocolBuffer最初是在Google开发的,用以解决索引服务器的请求、响应协议。在使用ProtocolBuffer之前,有一种格式用以处理请求和响应数据的编码和解码,并且支持多种版本的协议。而这最终导致了丑陋的代码,有如:if (version==3) { ...}else if (version>4) { if (version==5) { ... } ...}通信协议因此变得越来越复杂,因为开发者必须确保,发出请求的人和接受请求的人必须同时兼容,并且在一方开始使用新协议时,另外一方也要可以接受。ProtocolBuffer设计用于解决这一类问题:很方便引入新字段,而中间服务器可以忽略这些字段,直接传递过去而无需理解所有的字段。格式可以自描述,并且可以在多种语言中使用(C++、Java等)然而用户仍然需要手写解析代码。随着系统的演化,他需要一些其他的功能:自动生成编码和解码代码,而无需自己编写解析器。除了用于简短的RPC(Remote Procedure Call)请求,人们使用ProtocolBuffer来做数据存储格式(例如BitTable)。RPC服务器接口可以作为 .proto 文件来描述,而通过ProtocolBuffer的编译器生成存根(stub)类供用户实现服务器接口。ProtocolBuffer现在已经是Google的混合语言数据标准了,现在已经正在使用的有超过48,162种报文格式定义和超过 12,183个 .proto 文件。他们用于RPC系统和持续数据存储系统。2 语言指导本指导描述了如何使用ProtocolBuffer语言来定义结构化数据类型,包括 .proto 文件的语法和如何生成存取类。这是一份指导手册,一步步的例子使用文档中的多种功能,查看入门指导( m/apis/protocolbuffers/docs/tutorials.html )选择你的语言。2.1 定义一个消息类型@waiting …2.2 值类型@waiting …2.3 可选字段与缺省值@waiting …2.4 枚举@waiting …2.5 使用其他消息类型@waiting …2.6 嵌套类型@waiting …2.7 更新一个数据类型@waiting …2.8 扩展@waiting …2.9 包@waiting …2.10 定义服务@waiting …2.11 选项@waiting …2.12 生成你的类@waiting …3 代码风格指导本文档提供了 .proto 文件的代码风格指导。按照惯例,你将会,你将会生成一些便于阅读和一致的ProtocolBuffer定义文件。3.1 消息与字段名使用骆驼风格的大小写命名,即单词首字母大写,来做消息名。使用GNU的全部小写,使用下划线分隔的方式定义字段名:message SongServerRequest { required string song_name=1;}使用这种命名方式得到的名字如下:C++: const string& song_name() {...} void set_song_name(const string& x) {...}Java: public String getSongName() {...} public Builder setSongName(String v) {...}3.2 枚举使用骆驼风格做枚举名,而用全部大写做值的名字:enum Foo { FIRST_VALUE=1; SECOND_VALUE=2;}每个枚举值最后以分号结尾,而不是逗号。3.3 服务如果你的 .proto 文件定义了RPC服务,你可以使用骆驼风格:service FooService { rpc GetSomething(FooRequest) returns (FooResponse);}4 编码本文档描述了ProtocolBuffer的串行化二进制数据格式定义。你如果仅仅是在应用中使用ProtocolBuffer,并不需要知道这些,但是这些会对你定义高效的格式有所帮助。4.1 一个简单的消息@waiting …4.2 基于128的Varints@waiting …4.3 消息结构@waiting …4.4 更多的值类型@waiting …4.5 内嵌消息@waiting …4.6 可选的和重复的元素@waiting …4.7 字段顺序@waiting …5 ProtocolBuffer基础:C++@waiting …6 ProtocolBuffer基础:Java@waiting …7

了解一下ProtoBuf

我们在进行网络通信调用的时候,总是需要将内存的数据块经过序列化,转换成为一种可以通过网络流进行传输的格式。而这种格式在经过了传输之后再经过序列化,能还原成我们预想中的数据结构。 那么我们对于这种用于中间网络传输的数据格式就有一定的要求。首先它可以准确地描述数据内容,在此基础上我们则希望它尽量的小。 最开始流行起来的是XML,可扩展标记语言。由于它可以用来标记数据、定义数据类型,所以用户可以自己定义数据自己的语言,从而让对不同的数据结构化成统一的格式称为了可能。 而另外一个我们熟知的则是JSON(JavaScript Object Notation, JS 对象简谱)。尽管JSON中缺少了XML中的标签属性等描述方式,但是足够简介和清晰的层次结构使得其成为了必XML更受欢迎的数据交换格式。 同一份数据显然JSON的数据量比XML所使用的空间更少。那么空间省略在哪里呢?一方面是json使用更简单的字符来定义数据间的关联关系;另一方面是JSON减少了对数据类型的描述。但是丢少的数据类型再哪里呢? 以Java中的 OpenFeign 举例,JSON中缺少的类型定义被定义道程序中的接口中了。当进行序列化与反序列化时,JSON格式并不记录数据的类型,具体的数据类型在序列化方与反序列化方通过事先约定的接口来进行定义。这样就减少了信息传输过程中的信息量,从而让数据得以压缩。 但是JSON由于没有定义数据类型,所以在传输的过程中实际上就都是文本流,那么这种方法还可以进一步压缩吗? 结合上文的讨论,我们先说结论:方法是有的,并写当前的实现方式是ProtoBuf。但在此之前我们先来了解一下ProtoBuf。 我们可以先看看官方给出的定义与描述: 同样的,ProtoBuf也是一种支持序列化反序列化的方法,并且他具有很多优点: 实际上,ProtoBuf提供了一种通用的数据描述方式,这种定义数据的方式是通用的,就如同JSON或者XML一样。 接下来我们来来回答本节一开始的问题,针对JSON来说,ProtoBuf是如何将体积变得更小的呢?答案很简单,就是为数据序列化反序列化提供更多的先验知识。 本文暂不过度深入ProtoBuf原理,但是可以通过一张图来进行简要说明(): ProtoBuf中的数据是按顺序进行排列,而整体的结构为若干个field,每一个field中由 Tag-[Length]-Value 组成。Length是可选的,而是否存在Length是通过Tag的类型来决定的。也就是说如果是指定的类型,比如int64,那我们就可以知道Value的长度,也就不用在依靠Length来对其空间进行描述(redis中的压缩列表也是这个思想)。 那么field应该对应的是什么字段呢?这个则是在序列化与反序列化时在ProtoBuf的服务端与客户端之间进行预先定义的。而因为提前定义了field的类型、排序,所以field本身可以不用对字段名、字段位置进行描述,只需要根据字段类型选用合适的二进制序列化方法,将字段本身的value值进行序列化传输即可。 稍微总结一下: ProtoBuf通过对传输字段的名称、顺序进行预定义,从而在传输结构中只需要顺序的记录每个字段的类型标签和二进制值。 尽管上文和官方中都是以XML或者JSON来对ProtoBuf进行对比。但是因为ProtoBuf本身就是二进制序列化方式,所以从压缩比上比较感觉有点欺负人。 对应的在Java中二进制常用的序列化器有Kryo和Hessian。但事实上,由于Kryo和Hessian中都需要对Java类名和字段信息进行存储。而ProtoBuf则只有Tag-Length-Value的数据对,且Value更是有针对性的特殊编码,所以空间占用小的很多。 Kryo是专门针对Java进行优化了的。所以在使用的便捷性上来说Kryo则更加方便。但ProtoBuf是跨平台的,且由于进行了字段的顺序定义,所以似的ProtoBuf定义后的接口是可以向前兼容的(只向后追加字段),而这种优势是Kryo所没有的。 ProtoBuf是跨语言的,使用ProtoBuf的第一步是先定一个 proto 文件 ,而由于ProtoBuf 2和3语言版本的不同,其定义格式会有所不同,具体的细节还是得参考官方文档:https://developers.google.cn/protocol-buffers/docs/proto3 对于ProtoBuf 3 的定义文档我们可以按如下方法定义: 其中message关键字是定义的文件名,而 string、int32则是预定的字段类型,repeated则是描述字段为可重复任意多次的字段。 ProtoBuf通过这种形式的文件定义了传输信息的文件结构。 但是之前小节中我们知道了ProtoBuf是通过 Tag-[Length]-Value 组成的数据组来进行信息传输的,那么proto文件中定义的内容如何转换为实际传输的对象呢? ProtoBuf的做法是,为每一种语言提供一个生成器protoc。通过使用protoc则可以根据.proto文件生成为一组java文件。对应的官方语法演示样例为: 官方的生成参考为:https://developers.google.com/protocol-buffers/docs/reference/java-generated 生成后的java文件将提供对应的实体以及数据的构造方法等文件,从而支持后续的使用。 需要注意的是,ProtoBuf是本质上是序列化方法,具体是通过Spring Cloud 的OpenFeign进行接口调用,还是通过grpc进行接口调用,都是可以的。 本文对ProtoBuff进行了概念的整理,并没有对每个细节都进行深入的梳理,可以当作概念科普来进行阅读。

protobuffer 怎么输出

在网上查了一下,虽然有很多文章介绍Protocol Buffer,但是实际使用起来,还是会遇到很多问题,所以我想应该有一个指南一样的东西,让新手很快就能使用它。Protocol Buffer简写为Protobuf,是Google开发的一种储存数据的方式,功能与XML一样,但更方便,数据量更小,速度更快,在序列化和反序列化的时候使用,有很大的优势。比如,网络游戏的通讯协议编写。更重要的是,它是一个开源项目。由于Protobuf不能生成C#代码,所以就要用到另外一个开源项目protobuf-net,用法是,在命令行用protoc.exe依据你自己定义的.proto文件,来生成.cpp文件用protobuf-net的protogen.exe来生成.cs文件,可以写一个批处理,如下:protoc -I=. --cpp_out=. Net.proto //在当前目录下,以cpp方式编译Net.protoprotogen -i:Net.proto -o:Net.cs //在当前目录下,用Net.proto生成Net.cs其实两句功能是一样,只是分别生成了Net.proto的cpp文件和cs文件,这样就可以在两种语言编写的应用程序间通信了。

ProtocolBuffer浅析

ProtocolBuffer是google 定义的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。ProtocolBuffer类似于xml、json,不过它更小、更快、也更简单。 目前使用最广泛的数据传输协议为JSON,JSON是一种轻量级的数据交换格式而且层次和结构比较简单和清晰,这里主要对比一下Protocol Buffer和JSON的对比,给出优势和劣势: 优势 劣势 实际数据对比 Protocol Buffer的使用流程总体可以分为三步,如下图所示: google推荐在Android项目中使用lite版,lite版本生成的java文件更加轻量,其配置如下: 首先创建一个.proto文件,并且在文件中声明如下内容: 在整个proto文件中数据类型分为基本类型和结构类型,其中结构类型主要为: 下面分别介绍一下不同结构的作用及规定: message表示一个结构,类似于java中类,一个proto文件中可以声明多个message结构: message可以引用不同proto文件中的message,只要在proto文件中的最上面声明import即可,如下所示: enum使用很简单,直接在message中声明enum结构体并且将属性声明为对应的enum即可: 在proto3中,enum第一个值必须为0,主要是为了和基础类型的默认值保持一致 map是proto3新加的,使用也很简单: 如下 repeated修饰的属性类似于jsonArray,也类似于java中的List,该修饰符在格式正确的消息中可以重复任意次(包括0次) 日常开发过程中,由于需求的变更,往往需要增加字段,这就涉及到字段的扩充,字段扩充需要达到一个目的: 兼容 所以Protocol Buffer在字段扩充中定义了如下规则: 只要记住上述规则,就能完成字段扩充且老版本也能兼容 Protocol Buffer 更快更小的主要原因如下: 上面这个例子中,在序列化时,"name" 、"count"的key值不会参与,由编号1、2代替,这样在反序列化的时候直接通过编号找到对应的key就可以。需要注意的是编号一旦确定就不可以更改,服务端和客户端通过proto通信的时候需要提前定义号数据格式。 其中Length不一定有,依据Tag确定,例如int类型的数据就只有Tag-Value,string类型的数据就必须是Tag-Length-Value。 Protocol Buffer定义了如下的数据类型,其中部分数据类型已经不再使用: 上面已经介绍了Protocol Buffer的数据结构及Tag的类型,但是Tag块并不是只表示数据类型,其中数据编号也在Tag块中,Tag的生成规则如下: 其中Tag块的后3位表示数据类型,其他位表示数据编号 Java中整数类型的长度都是确定的,如int类型的长度为4个字节,可表示的整数范围为-2 31——2 31-1,但是实际开发中用到的数字均比较小,会造成字节浪费,可变长度编码就能很好的解决这个问题,可变长度编码规则如下: 举个例子: 其中第一个字节由于最高位为1,则后面的字节也是前面的数据的一部分,第二个字节最高位为0,则表示数据计算终止,由于Protocol Buffer是低位在前,整体的转换过程如下: 10000001 00000011 ——> 00000110000001 表示的10进制数为:2^0 + 2^7 + 2^8 = 385 通过上面的例子可以知道一个字节表示的数的范围0-128,上面介绍的Tag生成算法中由于后3位表示数据类型,所以Tag中1-15编号只占用1个字节,所以确保编号中1-15为常用的,减少数据大小。 可变长度编码唯一的缺点就是当数很大的时候int32需要占用5个字节,但是从统计学角度来说,一般不会有这么大的数. 上面介绍了Protocol Buffer的原理,现在通过实例来展示分析过程,我们定义的proto文件如下: 其序列化后的字节数据如下: 前面介绍过Protocol Buffer的 数据结构为TLV,其中L不是必须的,根据T的类型来确定 先看下第一个字节: 这里字节最高位为0,所以该Tag就用这一个字节表示,其中后3位表示类型,前面表示字段编号,所以: 这里字节最高位为0,所以该Tag就用这一个字节表示,其中后3位表示类型,前面表示字段编号,所以: file_num = 0001 = 1 type = 010 = 2 上面介绍过type=2,则后面有Length,按照可变长度编码规则,知道表示长度的字节为: 所以Length=4,则value的长度是4个字节,直接取出后面4个字节: 这4个字节对应的就是test 再看下一组: 由上面的Tag知道: file_num=2 type=0 前面介绍过type=0,后面没有Length,直接就是value, value=1,通过上面的解析可以知道 上面介绍了Protocol Buffer的原理,解释了为什么Protocol Buffer更快,更小,这里再总结一下: 参考资料: proto3官网指南: https://developers.google.com/protocol-buffers/docs/proto3 protobuf-gradle-plugin: https://github.com/google/protobuf-gradle-plugin 博客: https://juejin.im/post/5dcbf630e51d451bfe5bb21b

Protobuf 数据格式

简单来说, Protocol Buffers 是一种和语言平台都没关的数据交换格式。 关于 Protobuf 在iOS下的使用请看上篇文章 iOS 的 Protocol Buffer 简单使用 Protobuf 序列化后的二进制数据消息非常的紧凑,这得益于 Protobuf 所采用的 Varint Varint 是一种紧凑的表示数字的方法,它用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数。这能减少用来表示数组的字节数。 比如对于 int32 类型的数字,一般需要4个 byte 来标识。但是采用 Varint,对于很小的 int32 类型的数字,也能用1个 byte 来标识。如果数字很大,也就需要5个 byte 来表示了。但是,一般情况下很少会出现数字都是大数的情况下。 正常情况下,每个 byte 的8个 bit 位都用于存储数据用,而在 Varint 中,每个 byte 的最高位的 bit 有着特殊的含义,如果该位为1,表示后续的 byte 也是该数据的一部分;如果该位为0,则结束。其他的7个 bit 位都用来表示数据。因此小于127的 int32 数字都可以用一个 byte 表示,而大于等于 128 的数字:如128,则会用两个字节表示: 1000 0000 0000 0001 (采用的是小端模式),311则表示: 1011 0111 0000 0010 下图演示了 Protobuf 如果通过2个 byte 解析出 128。Protobuf 字节序采用的是 little-endian(小端模式) int32 数据类型能表示负数,负数的最高位为1,如果负数也使用这种方式表示会出现一个问题,int32 总是需要5个字节,int64 总是需要10个字节。所以 Protobuf 定义了另外一种类型 sint32, sint64,采用 ZigZag 编码,所有的负数都使用正数表示,计算方式为: Protobuf 消息是一系列的键值对组成。消息的二进制版本仅使用 field 数字当作 key,不同 field 的属性和类型只能通过消息类型的定义 (即 .proto 文件) 在解码端确定。如果消息中不存在该 field,那么序列化后的 Message Buffer 中也不会有该 field,这些特性都有助于节约消息本身的大小。 Key 用来标识具体的 field,在解包的时候,Protobuf 根据 key 就能知道相应的 Value 对应于消息中的哪一个field,数据类型是哪个类型。 Key 的定义如下: Key 由两部分组成:第一个部分是 field_number,比如上篇文章定义的消息 FooSimpleMessage 中的 msgId 属性的 field_number 为1;第二部分为 wire_type,表示 Value 的传输类型 表1. Wire Type 在之前的例子中,msgId 采用的数据类型为 int32,因此对应的 wire_type 为0,所以对应的 tag 为 FooSimpleMessage 的 msgContent,field_number 为2,wire_type 为2,所以对应的 tag 为 对应 Length-delimited 的 wire type,后面紧跟着的 Varint 类型表示数据的字节数。所以 msgContent 的 key 后面紧跟着的 0x1a 表示后面的数据长度为10个字节,"A protobuf message content" 的 ASCII 值即为: 0x41 0x20 0x70 0x72 0x6f 0x74 0x6f 0x62 0x75 0x66 0x20 0x6d 0x65 0x73 0x73 0x61 0x67 0x65 0x20 0x63 0x6f 0x6e 0x74 0x65 0x6e 0x74 在 Demo 里面定义的 msg 对象,其序列化后的数据的十六进制表示应该为 0801121a 41207072 6f746f62 7566206d 65737361 67652063 6f6e7465 6e74 运行demo,打印一下结果和猜想的一样: 参考地址: Protocol-buffers Encoding

wireshark内置支持protobuf吗

只要你装了WINPCAP 就可以自己编程抓包,或使用wireshark抓包了。但是无线网卡好像无法通过winpcap抓包,具体如何实现无线网卡抓包,还没有研究过。6930p自带网卡绝对可以抓包,我开发网络抓包程序就是通过笔记本实现的,网卡也是我的三星笔记本自带的。

Swift 安装protobuf

1、官方项目地址: https://github.com/apple/swift-protobuf 2、拉取项目到本地 3、进入项目本地路径,查看版本 4、根据项目需要,选择版本编译 如:1.5.0 5、构建项目 6、构建完成之后会生成一个 protoc-gen-swift 执行路径:swift-protobuf/.build/release/protoc-gen-swift7、把protoc-gen-swift文件直接拷贝到/usr/local/bin目录下 8、swift版本的protobuf已安装完成,现在可以来测试使用 准备一个proto文件(Book.proto) 9、生成swift文件 10、把生成的Book.swift文件拖入到项目中就可以使用了

为什么google protobuf不支持map的序列化和反序列化

现在它是支持的。proto2的文档就已经提到了Maps(Language Guide),但我用protoc2.6编译的时候,map关键字无法通过编译,protoc3.0编译正常,proto举例:message Person { required int32 id = 1; required string name = 2; optional string email = 3; map<string, string> values= 4; } 另外,官方文档(https://developers.google.com/protocol-buffers/docs/proto#Maps)说了:The map syntax is equivalent to the following on the wire, so protocol buffers implementations that do not support maps can still handle your data:message MapFieldEntry { key_type key = 1; value_type value = 2;}repeated MapFieldEntry map_field = N;

怎么将protobuf string类型

2.下载一个protobuf-java-2.4.1.jar文件(注意,要与你刚才下的proto.exe版本相同)然后就开始开发了。步骤:1.用记事本编写一个.proto文件:}如:编写的是test.proto package protobuf; option java_package = "com.sq.protobuf"; option java_outer_classname = "FirstProtobuf"; message testBuf { required int32 ID = 1; required string Url = 2; }将其放在与刚解压的protoc.exe同级目录中。2.在cmd中,到protoc-2.4.1-win32文件夹下,执行E:protoc-2.4.1-win32> protoc.exe --java_out=./ test.proto 则可以找到的一个生成的FirstProtobuf.java文件。3.在MyEclipse中新建一个java project,建立包com.sq.protobuf,然后将刚才生成的FirstProtobuf.java文件放在其下面。此时会报错,因为没有引入jar包,在package视图下,将protobuf-java-2.4.1.jar引入,即可解决问题。

protobuf repeated 怎么用的

protobuf repeated类型的使用protobuf是Google开发的一个序列化框架,类似XML,JSON,基于二进制,比传统的XML表示同样一段内容要短小得多。通过protobuf,可以很轻松的调用相关方法来完成业务数据的序列化与反序列化。protobuf repeated类型相当于std的vector,可以用来存放N个相同类型的内容,文章将简单介绍protobuf repeated的使用。首先定义一个protobuf结构,如下:message Person { required int32 age = 1; required string name = 2;}message Family { repeated Person person = 1;}下面以例子简单说明如何使用:int main(int argc, char* argv[]){ GOOGLE_PROTOBUF_VERIFY_VERSION; Family family; Person* person; // 添加一个家庭成员,John person = family.add_person(); person->set_age(25); person->set_name("John"); // 添加一个家庭成员,Lucy person = family.add_person(); person->set_age(23); person->set_name("Lucy"); // 添加一个家庭成员,Tony person = family.add_person(); person->set_age(2); person->set_name("Tony"); // 显示所有家庭成员 int size = family.person_size(); cout << "这个家庭有 " << size << " 个成员,如下:" << endl; for(int i=0; i<size; i++) { Person psn = family.person(i); cout << i+1 << ". " << psn.name() << ", 年龄 " << psn.age() << endl; } getchar(); return 0;}

protobuf 怎么查看版本

protobuf版本需要在protobuf程序中查看。在protobuf程序中查看版本步骤如下所示:1、点击打开计算机,进入分区列表。2、在计算机分区列表中选择protobuf程序所在的文件夹。3、点击打开protobuf程序。4、如图所示在protobuf程序中,即可完成protobuf版本查看。

protobuf可变长度原理

这篇文章在你已经了解protobuf使用的基础上,更进一步的学习,如果不知道protobuf是什么?请查阅这篇文章 【golang-protobuf使用】 官网说明地址: https://developers.google.com/protocol-buffers/docs/proto3 proto文件的可变长度类型有:int32、int64、uin32、uin64、sint32、sint64 Protobuf 用的是连续位标识技术,使用每个字节的第一位来标识是否需要继续向后读。每个字节低7位用于实际的编码。 举例: 十进制:300 二进制(4个字节):00000000 00000000 00000001 1000000 protobuf编码过程 所以最终编码结果为 1 0000000 0 1100000,这样将4字节存储大小转化为2字节存储大小 目标:将10^32bit的二进制进行编码 proto文件格式 测试结果: 由测试结果可得如果高位(左边)字节为0,编码结果大小相应减少

protobuf 怎么查看版本

protoc --version

Protocol Buffers(Objective-C)踩坑指南

这篇文章是讲如何把protobuf文件的编译工作集成到Xcode中,达到在Xcode中就像添加一般的OC文件一样不进行任何多余的操作直接编译运行.proto文件的目的。 牛逼,这么智能吗?是的,就是这么智能! 笔者的公司现在所有端都在统一使用一套protobuf数据结构,免除了多端重复定义同一套数据结构的重复工作,效率很高,非常值得推荐。并且Xcode 10进行了一些小优化来增加了对Protobuf的支持,相信不久以后,Xcode对Protobuf的支持将更加智能! 至于什么是 Protobuf 和 Protobuf 语法教程,不是这篇文章的主题,请自行Google。 环境:Xcode 10+ 语言:Objective-C 话不多说,正题开始: 首先,真正的企业级项目,并不只是网上很多教程里面演示的一两个 .proto 文件,而是一批 .proto 文件目录的集合,并且是多端共享的。你会发现按照那些教程里面的讲的去做写个demo或许可以,但是真正要达到企业级别的使用的时候,还远远不够,你会遇到各种各样的坑。别问我是怎么知道的,我都是靠自己一个个踩出来的。 首先,要能编译Protobuf文件,我们得安装官方的编译器。你可以选择下面任意一种你喜欢的安装方式: 安装好后,在terminal中输入 which protoc 检测是否安装成功,如安装成功会返回文件路径: /usr/local/bin/protoc 如有问题,请自行google,不在本教程范围内。 没什么好说的,新建一个Xcode工程。使用Cocoapods引入Protobuf的库: Pod search Protobuf 选择最稳定的版本即可。 这里有两种创建.proto文件的方式: 至于文件内容,如果你熟悉protobuf语法,那随便写几行即可,如果不熟悉,那么可以copy我的测试内容: A.proto 文件内容: B.proto 文件内容: Xcode 自己并不认识 .proto文件,所以并不会自动编译它们,我们需要把 .proto编译器 自己集成到项目当中,集成的方式如下: Project --> Build Rules --> 点击+号 ,生成一个特定文件类型编译脚本。 比如: 到此处,我们有几个注意事项: 我们试试把 --proto_path 换成相对路径,看会发生什么,也就是把脚本换成 编译运行,咦~报错了。查看日志,我们可以看到这么一条log信息: 翻译过来就是在--proto_path这个参数中你必须指定.proto源文件的精确路径, protoc 太笨了,它无法搞清楚这个相对路径是不是我们要的绝对路径。google的工程师说这太他么难了。所以这里很明确了, --proto_path 的参数值,只能是proto文件根目录的绝对路径。 我们上面说了,${INPUT_FILE_PATH} 是代表编译输入源文件的绝对路径。 文档里面给的demo是: protoc --proto_path=src --objc_out=build/gen src/foo.proto src/bar/baz.proto 什么意思呢? 它说,最终编译器会把 src/foo.proto 文件编译成: build/gen/Foo.pbobjc.h 和 build/gen/Foo.pbobjc.m 文件。 而会把 src/bar/baz.proto 文件编译成 build/gen/bar/Baz.pbobjc.h 和 build/gen/bar/Baz.pbobjc.m 。 而不是 build/gen/Baz.pbobjc.h 和 build/gen/Baz.pbobjc.m 也就是说protobuf编译器最终生成的文件会自动按照文件源目录结构存放。 特别强调 并不会 自动创建 build/gen 目录,这个目录需要你提前建好。 并且,查看最终编译生成的.m文件,你会发现一些有趣的事情;比如我在A.proto中引入了B.proto文件,你会看到Protobuf最终编译出来的A.pbobjc.m文件导入文件的格式是包含文件路径的,例如: 我们注意到,上面设置的proto文件的编译输出路径是 $DERIVED_FILE_DIR , 这是为何呢? 答案是为了方便Xcode的集成。 对于自定义的编译脚本,都需要设置一个文件的输出路径. 我们点脚本框下面的Output Files下面的 + 号, 指定文件输出路径。 因为OC文件分为.h和.m文件,所以我们指定2个。 点了之后,你会发现,xcode默认给出的是 $(DERIVED_FILE_DIR)/newOutputFile , 我们将其改为 $(DERIVED_FILE_DIR)/${INPUT_FILE_BASE}.pbobjc.h 和 $(DERIVED_FILE_DIR)/${INPUT_FILE_BASE}.pbobjc.m ,并且在.m文件的 Compiler Flags 中指定为 -fno-objc-arc 代表该.m文件采用mrc编译。 编译运行,大功告成,是不可能的!!!! 你会发现又报错了: 什么意思呢? 其实就是在 DerivedSources 下找不到 A.pbobjc.m 文件。因为我们指定这个编译的输出路径在这个目录下,所以Xcode在进行OC文件的编译时会去这个目录下找,但是它找不到。为什么找不到呢?我们去这个目录下看,这个目录下确实没有 A.pbobjc.m 这个文件,但是确发现有 a/A.pbobjc.m 。原因我们已经说了,protoc最终的编译文件会自动加上目录前缀。 有人可能会说,能不能把输出文件改成 $(DERIVED_FILE_DIR)/*/${INPUT_FILE_BASE}.pbobjc.h 呢?那我们就来试下。 编译运行 what the hell? 原来,Xcode的Output Files特别蠢,它不支持类似这种通配符写法: $(DERIVED_FILE_DIR)/*/${INPUT_FILE_BASE}.pbobjc.h 。 也不支持传入任何的自定义变量。 只能是明确的文件路径和Xcode自带的环境变量,但是实际项目中,可能不只一层路径,有可能是文件夹下嵌套文件夹。 靠,那这怎么办呢? 实在没办法了,就在打算放弃的时候,咨询了我们的脚本大神,我们尝试了以下在脚本末尾再加了两行: 是不是很机智? 什么意思呢?就是说我们cd到该目录,然后找到该文件对应生成的oc文件,将其copy一份儿到根目录。怀着求神拜佛的意志,运行了以下,Perfect,终于不再报错了,到目录中查看,也正是我们想要的,所有文件都被copy出来了。 下一步,就是正常的在项目中import和使用了。 你以为到此就没有坑了吗?到此还有坑。有2点需要注意: 好了,就讲到这里吧,如果觉得文章看得不是很明白,需要一个demo。或者大神有更好的建议,请在评论区留言~ 如果文章对你有帮助,请不要吝啬你的点赞哦,你的支持是我分享的动力~ 如果大家喜欢,有时间再讲讲怎么改改AFNetworking,能直接请求后端给的 Protobuf 格式的数据~

vue使用protobuf+websocket

我的教程是用protobuf生成了proto.js文件 1、运行npm install protobufjs --save 安装 2、拿到后台给的proto文件,在src里创建一个proto目录,用于存放proto文件及编译后的js文件 proto 3、运行命令 生成proto.js文件,如图 4、使用 websocket返回的数据是model.data 官方git教程 https://github.com/protobufjs/protobuf.js

为什么google protobuf不支持map的序列化和反序列化

现在它是支持的。proto2的文档就已经提到了Maps(Language Guide),但我用protoc2.6编译的时候,map关键字无法通过编译,protoc3.0编译正常,proto举例:message Person {required int32 id = 1;required string name = 2;optional string email = 3;map<string, string> values= 4;} 另外,官方文档(https://developers.google.com/protocol-buffers/docs/proto#Maps)说了:The map syntax is equivalent to the following on the wire, so protocol buffers implementations that do not support maps can still handle your data:message MapFieldEntry {key_type key = 1;value_type value = 2;}repeated MapFieldEntry map_field = N;

python如何通过protobuf实现rpc

由于项目组现在用的rpc是基于google protobuf rpc协议实现的,所以花了点时间了解下protobuf rpc。rpc对于做分布式系统的人来说肯定不陌生,对于rpc不了解的童鞋可以自行google,这里只是做个简单的介绍。rpc的主要功能是让分布式系统的实现更为简单,为提供强大的远程调用而不损失本地调用语义的简洁性。为了实现这个目标,rpc框架需要提供一种透明调用机制让使用者不必显示区分本地调用还是远程调用。rpc架构涉及的组件如下:客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理RpcProxy 。代理封装调用信息并将调用转交给RpcInvoker 去实际执行。在客户端的RpcInvoker 通过连接器RpcConnector 去维持与服务端的通道RpcChannel,并使用RpcProtocol 执行协议编码(encode)并将编码后的请求消息通过通道发送给服务方。RPC 服务端接收器 RpcAcceptor 接收客户端的调用请求,同样使用RpcProtocol 执行协议解码(decode)。解码后的调用信息传递给RpcProcessor 去控制处理调用过程,最后再委托调用给RpcInvoker 去实际执行并返回调用结果。protobuf rpc在上面组件中主要扮演RpcProtocol的角色,使得我们省去了协议的设计,并且protobuf协议在编码和空间效率都是上非常高效的,这也是很多公司采用protobuf作为数据序列化和通信协议的原因。同时protobuf rpc定义了一个抽象的rpc框架,如下图所示:RpcServiceStub和RpcService类是protobuf编译器根据proto定义生成的类,RpcService定义了服务端暴露给客户端的函数接口,具体实现需要用户自己继承这个类来实现。RpcServiceStub定义了服务端暴露函数的描述,并将客户端对RpcServiceStub中函数的调用统一转换到调用RpcChannel中的CallMethod方法,CallMethod通过RpcServiceStub传过来的函数描述符和函数参数对该次rpc调用进行encode,最终通过RpcConnecor发送给服务方。对方以客户端相反的过程最终调用RpcSerivice中定义的函数。事实上,protobuf rpc的框架只是RpcChannel中定义了空的CallMethod,所以具体怎样进行encode和调用RpcConnector都要自己实现。RpcConnector在protobuf中没有定义,所以这个完成由用户自己实现,它的作用就是收发rpc消息包。在服务端,RpcChannel通过调用RpcService中的CallMethod来具体调用RpcService中暴露给客户端的函数。介绍了这么多,对于怎么样用protobuf rpc来实现一个rpc肯定还是一头雾水吧,下面就用protobuf rpc来实现一个简单的python版rpc demo吧。下面直接给出demo描述PRC的proto文件,至于proto文件的编写规则可以参考protobuf官网。common.proto文件:package game;message RequestMessage{ required string message = 1;}message ResponseMessage{ required string message = 1;}game_service.proto文件:package game;import "common.proto";option py_generic_services = true;service GameService{ rpc connect_server(RequestMessage) returns(RequestMessage);}common.proto文件描述了RPC中收发的消息;game_service.proto描述了服务器导出的connect_server函数,该函数接受RequestMessage对象作为参数,并返回RequestMessage对象。在使用PRC协议时,必须加上option py_generic_services = true;可选项,要不然编译器不会生成包含connect_server函数的GameService描述。使用编译器protoc编译proto文件,具体命令为:protoc.exe --python_out=. game_service.proto编译后生成的文件为game_service_pb2.py,该文件主要是实现了GameService和GameService_Stub类。GameService_Stub类用于客户端调用者来调用GameService的服务。前面已经说了,在客户端,RpcChannel只实现了一个空的CallMethod,所以需要继承RpcChannel重新这个函数来encode消息和发送消息。在服务端RpcChannel需要调用CallMethod来调用Service中的函数。具体实现如下:class MyRpcChannel(service.RpcChannel): def __init__(self, rpc_service, conn): super(MyRpcChannel, self).__init__() self.logger = LogManager.get_logger("MyRpcChannel") def CallMethod(self, method_descriptor, rpc_controller, request, response_class, done): """"protol buffer rpc 需要的函数,用来发送rpc调用""" self.logger.info("CallMethod") cmd_index = method_descriptor.index assert(cmd_index < 65535) data = request.SerializeToString() total_len = len(data) + 2 self.conn.send_data("".join([pack("最后就是继承GameService,并实现connect_server函数了。class GameService(game_service_pb2.GameService): def __init__(self): self.logger = LogManager.get_logger("GameService") def connect_server(self, rpc_controller, request, callback): self.logger.info("%s", request.message) 至于用于网络收发消息的RpcConnector,可以使用python的asyncore库实现,具体实现在这就不讨论了。从上面的实现来看,protobuf rpc的实现主要包括编写proto文件并编译生成对应的service_pb2文件,继承RpcChannel并实现CallMethod和调用Service的CallMethod,继承Service来实现暴露给客户端的函数。

为什么Protobuf的默认序列化格式没有包含消息的长度与类型

编译后protobuf形成对应的文件,加入工程,创建你的消息对象,给里面的成员赋值,然后将这个对象转化为字节流,用socket函数直接write出去即可。

Google protobuf中的ByteString怎么转化成为string类型

2.下载一个protobuf-java-2.4.1.jar文件(注意,要与你刚才下的proto.exe版本相同)然后就开始开发了。步骤:1.用记事本编写一个.proto文件:}如:编写的是test.protopackage protobuf;option java_package = "com.sq.protobuf";option java_outer_classname = "FirstProtobuf";message testBuf {required int32 ID = 1;required string Url = 2;}将其放在与刚解压的protoc.exe同级目录中。2.在cmd中,到protoc-2.4.1-win32文件夹下,执行E:protoc-2.4.1-win32> protoc.exe --java_out=./ test.proto则可以找到的一个生成的FirstProtobuf.java文件。3.在MyEclipse中新建一个java project,建立包com.sq.protobuf,然后将刚才生成的FirstProtobuf.java文件放在其下面。此时会报错,因为没有引入jar包,在package视图下,将protobuf-java-2.4.1.jar引入,即可解决问题。

怎么样编写Protobuf的.proto文件

ProtoBuf java 包编译ProtoBuf的官方下载包并不包含jar文件,需要用户自己configure/make….来自行编译。由于Windows上没有编译环境,就用了一个笨一点方法处理了。分别下载:protobuf-2.4.1.zip ProtoBuf的源文件(包含了C++/Java/Python)的源文件protoc-2.4.1-win32.zip 已经编译过的用于Windows平台的protoc命令(该命令用于将.proto文件转化为Java或C++源文件)。分别解析这两个文件,你可以在protoc-2.4.1-win32.zip解压后的文件中找到一个protoc.exe文件,将其copy到protobuf-2.4.1/src目录下,然后进入protobuf-2.4.1/java,执行:mvn install

ProtoBuf简介

ProtoBuf是一种无关语言,无关平台的序列化结构数据的方法,可用于通信协议、数据存储等 XML:数据较为冗余,需要成对的闭合标签 JSON:使用键值对方式,压缩了一定的数据空间并且具有可读性 ProtoBuf:适合高性能,对响应速度有要求的数据传输场景,ProtoBuf是二进制数据格式,需要解码和编码,数据本身不具有可读性,只能反序列化后才能读到真正的数据。序列化后的数据相比json和xml很小,适合网络传输;序列化和反序列化比json的处理速度更快。 XML、JSON 更注重数据结构化. ProtoBuf更注重数据序列化,关注效率、空间、速度 数据类型分为两大类: 复合数据类型:枚举和message类型 标准数据类型:整型,浮点,字符串 规则的修饰符: required 字段必须出现1次 optional 字段可出现0次或1次 repeated 字段可出现多次(包括0) 标准数据类型: proto与python类型对应 例如:

在项目中使用Protobuf协议实现数据传输(二)

上篇已经简单的分析了什么是ProtoBuf协议的优缺点、简单的环境配置、项目中的简单使用和一些编写.Proto文件的注意点,下面我们更加深入一下ProtoBuf的语法及高级使用(非常感谢Carson_Ho大神的博文指导) 作用 :防止不同 .proto 项目间命名 发生冲突 ProtoBuf包的解析过程如下 : 作用 :影响 特定环境下 的处理方式,但不改变整个文件声明的含义 常用Option选项 :(因为使用有限,简单列举常见的) 作用 :真正用于描述 数据结构 在.proto消息模型中主要有 消息对象&字段 组成 :字段 = 字段修饰符 + 字段类型 +字段名 +标识号(主要针对proto2以前版本) 字段 = 字段类型 +字段名 +标识号(主要针对proto3及以后版本) 一个消息对象 可以将 其他消息对象类型 用作字段类型 关于ProtoBuf在项目中的实践的高级用法请关注:下一篇博客:在项目中使用Protobuf协议实现数据传输(三)

Parcel之build方法

首先清空dist文件夹 方法一:parcel build 路径(文件夹)/文件 --no-minify --pubilc-url 相对路径 方法二:parcel build 路径(文件夹)/文件 --no-minify --pubilc-url github绝对路径 git操作(不清楚的小伙伴请查看我的之前的文章) 注意:进行到git init即可,先不要提交 本地git仓库操作: 操作添加-提交-查看 远程git仓库操作 : 建立联系-推送到远程git仓库 yarn build一键发布 在package.json开头写入 完成!!一键build

请问空运中 BUP是什么意思? 散货拼装 还是 货物打托盘 ?

怎么说呢,BUP一般来说,是指当remark上标注目的港不是目前停靠空港,并打上BUP标示,说明该货物为整箱或整托转运的意思。因为在空运中一般使用ULDrelease货物,都是指的是用ULD来装运的空运货物,所以BUP就是指这个ULD是用来转运的。

人力资源bu,hrbp,gm是什么意思

人力资源bu,hrbp,gm是什么意思 这些都是在矩阵制的,事业部制等组织结构下,高大上的外企才有的名词吧。 bu:人力资源高级专员 hrbp:人力资源业务合作伙伴 gm:人力资源总经理 人力资源里面有个头衔叫“HRBP”是什么意思? HRBP(HRBUSINESSPARTNER):人力资源业务合作伙伴 含义:实际上就是企业派驻到各个业务部门或事业部的人力资源管理者,主要协助各业务单元高层及经理在员工发展、人才发掘、能力培养等方面的工作。 作用:就是要做好人力资源部与业务部门之间的沟通桥梁,帮助业务部门设定人力资源的工作目标和计划,并树立起对业务部门的内部客户服务意识,为他们提供专业的人力资源解决方案。主要关注于提供人事管理的咨询来支持业务部门的战略,他们的行为模式是关键的成功要素。 如何成为HRBP:如果想成为人力资源业务合作伙伴,需具备以下条件:1)战略贡献2)专业信用3)人力资源部门领导力4)个人信誉 人力资源是什么意思,有人力资源公司吗? 人力资源,又称劳动力资源或劳动力,是指能够推动整个经济和社会发展、具有劳动能力的人口总和。 现在做人力资源服务的公司有很多,唯仕旗就是做人力资源服务的,在业内的口碑很好,知名度挺高的。 人力资源中hp是什么意思 人力资源(Human Resources ,简称HR)指在一个国家或地区中,处于劳动年龄、未到劳动年龄和超过劳动年龄但具有劳动能力的人口之和。或者表述为:一个国家或地区的总人口中减去丧失劳动能力的人口之后的人口。人力资源也指一定时期内组织中的人所拥有的能够被企业所用,且对价值创造起贡献作用的教育、能力、技能、经验、体力等的总称。狭义讲就是企事业单位独立的经营团体所需人员具备的能力(资源)。 人力资源,又称劳动力资源或劳动力,是指能够推动整个经济和社会发展、具有劳动能力的人口总和。经济学把为了创造物质财富而投入于生产活动中的一切要素通称为资源,包括人力资源、物力资源、财力资源、信息资源、时间资源等,其中人力资源是一切资源中最宝贵的资源,是第一资源。人力资源包括数量和质量两个方面。人力资源的最基本方面,包括体力和智力,从现实应用的状态,包括体质、智力、知识、技能四个方面。人力资源与其他资源一样也具有特质性、可用性、有限性。 人力资源奖是什么意思 一般事业单位才设劳资科,各单位劳资科岗位职责也大同小异,一般来说有以下几块: 1. 员工工资正常晋升、晋档、调整及转正定级 2. 奖金及津贴的管理和发放 3. 缴纳养老、失业保险金 4. 劳保用品的管理和发放 5. 工人技术登记考核晋级 6. 职工退休年龄的审核及办理退休手续 7. 临时工的使用和管理 8. 退职职工、遗属生活费的发放及伤残病亡事宜的处理 9. 员工考勤统计管理 10. 教职工探亲路费报销 11. 处理、函复、接待有关工资、福利方面的来信、来访。 12. 劳资统计报表 人力资源招聘是什么意思? 招聘与配置 企业要发展就一定要招聘更优秀的人才加盟,让整个人力资源流程呈现出良性循环发展,然而在中国尤其是北方,招聘和人力的配置显的并不是那么合理。当准备好了相关职位的招聘工作的同时我们的很多HRM忘记了一个最重要的问题就是我们招聘的人员他们应该具备什么样的人生观、价值观、世界观?因为他们和企业文化的融合时间和速度是检测招聘效果的一项重要依据。 招聘管理 1.人员需求以何种方式确认?如何提交? 2.人员甄别主要采取哪些方式?主要关注人才的那些特征? 3.如何解决主考人员繁重的面试任务与日常工作在时间上的矛盾? 4.新员工上岗引导(至胜任工作)的主要流程是什么? 5.如何使招聘更高效? 6.如何建立内部招聘机制?如何处置人才输出部门的用人矛盾? 具体的招聘实施,其实是一套完整的流程,需要根据公司的实际情况进行不断完善,主要目标是为公司的发展提供符合标准与要求的人才。 人力资源中的TDR是什么意思 TDR(Talent Directional Remand)人才定向推荐是北京易程伟才科技有限公司推出的一种新服务,旨在有偿为中高端人才主动寻找工作岗位。TDR为个人节省了海投简历,频繁参加初试的时间, TDR保证用户信息保密,保证推荐人才资料的真实性,让您省去简历包装,代写求职信,求职技巧,求职宝典,面试题库,面试培训等一系列的过程,主动帮助用户挖掘潜在才能。 人力资源保障圈是什么意思 只能说明一个问题,又有人在炒作概念了,我的理解是,现在人不好招聘了,从认识一些人,这些人能够保障一些企业人员的正常流动,把这些提供保障的单位或个人或组织统称为人力资源保障圈。比如:职介所、招聘网站、各地的劳务输出组织 人力资源PC值8:2是什么意思 国际上有一种公认的企业法则,叫“马特莱法则”,又称“二八法则”。其基本内容如下: 一是“二八管理法则”。企业主要抓好20%的骨干力量的管理,再以20%的少数带动80%的多数员工,以提高企业效率。二是“二八决策法则”。抓住企业普遍问题中的最关键性的问题进行决策,以达到纲举目张的效应。三是“二八融资法则”。管理者要将有限的资金投入到经营的重点项目,以此不断优化资金投向,提高资金使用效率。四是“二八营销法则”。经营者要抓住20%的重点商品与重点用户,渗透营销,牵一发而动全身。 总之,“二八法则”要求管理者在工作中不能“胡子眉毛一把抓”,而是要抓关键人员、关键环节、关键用户、关键项目、关键岗位。 人力资源中的IBM是什么意思 是经济管理学硕士的意思,假如你有这个学位的话相信前途无量的,加油杨儿。

meetsb可以理解为picksbup还是seesboff

都不可理解。meetsb意为遇见某人,picksbup意为开车去接某人,seesboff意为替某人送行,其三个短语的意思都不同。meetsb可以理解为confrontsb,encountersb。

outbreak和 outburst的区别,及相关词组

outbreak n.(战争、疾病等的)爆发;突然发生 vi.爆发 an outbreak of disease 疾病的爆发; an outbreak of rain 大雨的突降; an outbreak of war/ fighting/hostilities/violence 战争的/ 战斗的/ 敌对行为的/ 暴力的爆发 outburst n.(感情,蒸汽,能量或粒子的等的)爆发;破裂;(火山的)喷发 ~ against 对…的发作: A player was cautioned for his angry outburst against the referee. 一名运动员因对裁判发怒而受到警告。 ~ of …的发作: an outburst of anger/laughter/temper/violence 突然一阵大怒/ 大笑/ 发火/ 暴力行为 祝你学习进步,更上一层楼! (*^__^*) 不明白的再问哟,请及时采纳,多谢!

outbreak和 outburst的区别,及相关词组

outbreak n.(战争、疾病等的)爆发;突然发生 vi.爆发 an outbreak of disease 疾病的爆发; an outbreak of rain 大雨的突降; an outbreak of war/ fighting/hostilities/violence 战争的/ 战斗的/ 敌对行为的/ 暴力的爆发 outburst n.(感情,蒸汽,能量或粒子的等的)爆发;破裂;(火山的)喷发 ~ against 对…的发作: A player was cautioned for his angry outburst against the referee. 一名运动员因对裁判发怒而受到警告。 ~ of …的发作: an outburst of anger/laughter/temper/violence 突然一阵大怒/ 大笑/ 发火/ 暴力行为 祝你学习进步,更上一层楼! (*^__^*) 不明白的再问哟,请及时采纳,多谢!

outbreak和 outburst的区别,及相关词组

outbreak n.(战争、疾病等的)爆发;突然发生 vi.爆发 an outbreak of disease 疾病的爆发; an outbreak of rain 大雨的突降; an outbreak of war/ fighting/hostilities/violence 战争的/ 战斗的/ 敌对行为的/ 暴力的爆发 outburst n.(感情,蒸汽,能量或粒子的等的)爆发;破裂;(火山的)喷发 against 对…的发作: A player was cautioned for his angry outburst against the referee. 一名运动员因对裁判发怒而受到警告. of …的发作: an outburst of anger/laughter/temper/violence 突然一阵大怒/ 大笑/ 发火/ 暴力行为

gaspbursthushoutbreak区别

gasp喘息;(尤指由于惊讶或疼痛而)喘气;倒抽气;透不过气;气喘吁吁地说;渴望(尤指饮料或香烟)n.(常指由强烈情感引起的)深吸气;倒抽气这些动词均含“打破、弄碎”之意。break : 常用词,含义广泛,多指猛然用力将坚硬物打破或损坏。burst : 指某物因内部外部压力过大而出现严重破裂、爆开或账破。crack : 多指因长期使用或经受压力,物体表现呈现裂纹、裂口或破裂、裂开,但一般没成碎片。crush : 指用力把东西压破或变形。

outbreak和 outburst的区别,及相关词组

outbreak n.(战争、疾病等的)爆发;突然发生 vi.爆发 an outbreak of disease 疾病的爆发; an outbreak of rain 大雨的突降; an outbreak of war/ fighting/hostilities/violence 战争的/ 战斗的/ 敌对行为的/ 暴力的爆发 outburst n.(感情,蒸汽,能量或粒子的等的)爆发;破裂;(火山的)喷发 against 对…的发作: A player was cautioned for his angry outburst against the referee. 一名运动员因对裁判发怒而受到警告. of …的发作: an outburst of anger/laughter/temper/violence 突然一阵大怒/ 大笑/ 发火/ 暴力行为

The students ususally hate()questions.But the teachers()them to do

B. asking, likeThe students usually hate (asking) questions. But the teachers (like) them to do. 学生们通常不喜欢提问,但老师喜欢他们这么做。

电脑高手来啊:开机时出现updating escd ...success buiding dmi pool ..success

像这种问题一般重装系统就可以了,如果还是这样的话就应该把BIOS里面的设置还原成初始设置,如果再不行就是硬件的问题了。

在手机系统里看到更新号码归属地的英文是 updating number attributions。

这应该是词性变化吧,update是不是动词啊,加ing变名词啊,因为系统里肯定是做名词陈述的? 此答案来自语法学渣的YY。

一道推理题: GHVYVFURUHBQBATQVQVNA bUNBYBHeYBHJNVbWVNBFUV 会的高手快来啊

按字母的排列顺序写吧,我也不知道
 1 2 3 4 5 6  下一页  尾页