idea 社区版设置 vm options 参数

目录 一、简介 二、社区版的解决方案 一、简介 项目开发中,很多时候会遇到一些乱码情况,这个时候我们就要进行编码修改,其他地方修改了之后还要修改一个地方,就是我们的虚拟机启动参数。打开我们的应用程序配置,找到 vm options,然后在里面输入参数: -Dfile.encoding=UTF-8 如果你使用的旗舰版的 idea,这个当然没问题,但是如果你使用的是社区版的,不好意思,你找不到这个 vm options。如图所示: 我的 idea 是安装了中文插件,所以会这么显示。我们看到,并没有虚拟机选项,或者 vm options选项。这个时候如果我们不知道怎么做的话,代码一旦出现乱码就真的无法解决了。我之前就遇到问题,几个月没解决,就一直那样了,就那一个项目打开是乱码的,其他的都好的,就是神奇。 二、社区版的解决方案 其实,我们可以自行添加这个选项,或者说把该选项给调出来。 如上图所示,点击 “修改选项” —> 添加 vm 选项 然后就变成如下界面: 此时,我们就可以在里面输入编码参数了: -Dfile.encoding=UTF-8 本篇文章,参考了这一篇文章,在此表示感谢: idea社区版设置vm options

【Alibaba编码规范】参照AlibabaJava开发手册记录一些IDEA相关设置方式

Alibaba编码规范,可以参照修改IDEA中的设置。 IDEA版本2021.1 后续继续补充中。。。 【强制】IDE 的 text file encoding 设置为 UTF-8; IDE 中文件的换行符使用 Unix 格式,不要使用 Windows 格式。 【强制】 采用 4 个空格缩进, 禁止使用 Tab 字符。 说明: 如使用 Tab 缩进, 必须设置 1 个 Tab 为 4 个空格。 IDEA 设置 Tab 为 4 个空格时, 请勿勾选 Use tab character; 【强制】 所有的类都必须添加创建者和创建日期。 说明: 在设置模板时, 注意 IDEA 的@author 为${USER}, 而 eclipse 的@author 为${user}, 大小写有区别, 而日期的设置统一为 yyyy/MM/dd 的格式。 【】接口方法javadoc规范 File Encodings 文件编码 【强制】IDE 的 text file encoding 设置为 UTF-8; 修改编码字符集

MacOS新晋神器——Raycast

正经学徒,佛系记录,不搞事情 前言 为什么说它神,因为它免费。。。 从系统自带的Spotlight到Alfred,感受到了什么是效率的提升,Raycast除了支持的脚本语言有限,其它别人有的它都有,而Alfred是收费的,即使下载破解版的,在MacOS升到12 monterey版本后也无法打开了,无奈不能白嫖寻找替代品,最终发现了这个神器Raycast 官网:https://www.raycast.com/ 个人的部分使用点 快速访问浏览器书签 由于不属于自带功能,可以直接option+空格输入store进Raycast store 搜索下载 进入首选项设置,切到extensions tab 右侧选中需要支持搜索的浏览器,设置Alias可以快速搜索,个人喜欢使用缩写BM 浏览器快速访问地址 例如添加一个百度快速搜索 使用snippet 快速获取 Google two-factor-authentication 安装扩展包 唤醒 随便输入一个没有的,右下角会提示去添加 获取2FA Secret参考 https://blog.csdn.net/qq_31748587/article/details/119108009 添加后就可快速获取动态密码了,再也不用拿出手机打开Authenticator Code App后手动输入密码了,你学废了吗

C# RabbitMQ使用

// 简单使用(一对一) class RabbitMQSimple { // 1. RabbitMQ实例broker重启时,所有未申明durable的交换器和队列都会被删除,交换器未声明durable不会影响队列的持久化。 // 2. RabbitMQ中消息都被保存在队列中,所以如果队列被删除,消息不管有没有设置deliveryMode=2都会被删除。 static void rabbitMQDeclare() { IModel channel = RabbitMQConnection.GetIConnection().CreateModel(); // durable: 队列在broker重启后是否还存在。 // exclusive: 1.仅声明的连接(连接下所有信道可访问)可访问;2.连接(不是信道)断开时队列会自动删除。 // autoDelete: 是否自动删除,所有消费者断开连接之后队列是否自动被删除。 // arguments: 配置队列中的消息什么时候会自动被删除。 channel.QueueDeclare("XXXXXX", true, false, false, null); } static void rabbitMQProducer() { IModel channel = RabbitMQConnection.GetIConnection().CreateModel(); for (int i = 0; i < 20; i++) { try { // 配置消息属性(是否持久化等) IBasicProperties properties = channel.CreateBasicProperties(); properties.DeliveryMode = 2; // 1非持久化,2持久化 channel.BasicPublish("", "

【Python】简体繁体转换

简介 目前常用汉字大概2500左右,分别对应繁体形式一句话中,把所有的简体查表得到对应的繁体,就可以完成简体转繁体同样的,把所有的繁体都转换为简体,就可以完成繁体转简体以下是字库 简体字 万与丑专业丛东丝丢两严丧个丬丰临为丽举么义乌乐乔习乡书买乱争于亏云亘亚产亩亲亵亸亿仅从仑仓仪们价众优伙会伛伞伟传伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬俣俦俨俩俪俭债倾偬偻偾偿傥傧储傩儿兑兖党兰关兴兹养兽冁内冈册写军农冢冯冲决况冻净凄凉凌减凑凛几凤凫凭凯击凼凿刍划刘则刚创删别刬刭刽刿剀剂剐剑剥剧劝办务劢动励劲劳势勋勐勚匀匦匮区医华协单卖卢卤卧卫却卺厂厅历厉压厌厍厕厢厣厦厨厩厮县参叆叇双发变叙叠叶号叹叽吁后吓吕吗吣吨听启吴呒呓呕呖呗员呙呛呜咏咔咙咛咝咤咴咸哌响哑哒哓哔哕哗哙哜哝哟唛唝唠唡唢唣唤唿啧啬啭啮啰啴啸喷喽喾嗫呵嗳嘘嘤嘱噜噼嚣嚯团园囱围囵国图圆圣圹场坂坏块坚坛坜坝坞坟坠垄垅垆垒垦垧垩垫垭垯垱垲垴埘埙埚埝埯堑堕塆墙壮声壳壶壸处备复够头夸夹夺奁奂奋奖奥妆妇妈妩妪妫姗姜娄娅娆娇娈娱娲娴婳婴婵婶媪嫒嫔嫱嬷孙学孪宁宝实宠审宪宫宽宾寝对寻导寿将尔尘尧尴尸尽层屃屉届属屡屦屿岁岂岖岗岘岙岚岛岭岳岽岿峃峄峡峣峤峥峦崂崃崄崭嵘嵚嵛嵝嵴巅巩巯币帅师帏帐帘帜带帧帮帱帻帼幂幞干并广庄庆庐庑库应庙庞废庼廪开异弃张弥弪弯弹强归当录彟彦彻径徕御忆忏忧忾怀态怂怃怄怅怆怜总怼怿恋恳恶恸恹恺恻恼恽悦悫悬悭悯惊惧惨惩惫惬惭惮惯愍愠愤愦愿慑慭憷懑懒懔戆戋戏戗战戬户扎扑扦执扩扪扫扬扰抚抛抟抠抡抢护报担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捞损捡换捣据捻掳掴掷掸掺掼揸揽揿搀搁搂搅携摄摅摆摇摈摊撄撑撵撷撸撺擞攒敌敛数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权条来杨杩杰极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桊桠桡桢档桤桥桦桧桨桩梦梼梾检棂椁椟椠椤椭楼榄榇榈榉槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴毁毂毕毙毡毵氇气氢氩氲汇汉污汤汹沓沟没沣沤沥沦沧沨沩沪沵泞泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪漤潆潇潋潍潜潴澜濑濒灏灭灯灵灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烦烧烨烩烫烬热焕焖焘煅煳熘爱爷牍牦牵牺犊犟状犷犸犹狈狍狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珉珏珐珑珰珲琎琏琐琼瑶瑷璇璎瓒瓮瓯电画畅畲畴疖疗疟疠疡疬疮疯疱疴痈痉痒痖痨痪痫痴瘅瘆瘗瘘瘪瘫瘾瘿癞癣癫癯皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硷碍碛碜碱碹磙礼祎祢祯祷祸禀禄禅离秃秆种积称秽秾稆税稣稳穑穷窃窍窑窜窝窥窦窭竖竞笃笋笔笕笺笼笾筑筚筛筜筝筹签简箓箦箧箨箩箪箫篑篓篮篱簖籁籴类籼粜粝粤粪粮糁糇紧絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡翘翙翚耢耧耸耻聂聋职聍联聩聪肃肠肤肷肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑臜舆舣舰舱舻艰艳艹艺节芈芗芜芦苁苇苈苋苌苍苎苏苘苹茎茏茑茔茕茧荆荐荙荚荛荜荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莜莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒇蒉蒋蒌蓝蓟蓠蓣蓥蓦蔷蔹蔺蔼蕲蕴薮藁藓虏虑虚虫虬虮虽虾虿蚀蚁蚂蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衔补衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襁襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯詟誉誊讠计订讣认讥讦讧讨让讪讫训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郄郏郐郑郓郦郧郸酝酦酱酽酾酿释里鉅鉴銮錾钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钝钞钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铈铉铊铋铍铎铏铐铑铒铕铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗错锚锜锞锟锠锡锢锣锤锥锦锨锩锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镆镇镈镉镊镌镍镎镏镐镑镒镕镖镗镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镶长门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陧陨险随隐隶隽难雏雠雳雾霁霉霭靓静靥鞑鞒鞯鞴韦韧韨韩韪韫韬韵页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓魇魉鱼鱽鱾鱿鲀鲁鲂鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹯鹰鹱鹲鹳鹴鹾麦麸黄黉黡黩黪黾鼋鼌鼍鼗鼹齄齐齑齿龀龁龂龃龄龅龆龇龈龉龊龋龌龙龚龛龟志制咨只里系范松没尝尝闹面准钟别闲干尽脏拼 对应的繁体字 萬與醜專業叢東絲丟兩嚴喪個爿豐臨為麗舉麼義烏樂喬習鄉書買亂爭於虧雲亙亞產畝親褻嚲億僅從侖倉儀們價眾優夥會傴傘偉傳傷倀倫傖偽佇體餘傭僉俠侶僥偵側僑儈儕儂俁儔儼倆儷儉債傾傯僂僨償儻儐儲儺兒兌兗黨蘭關興茲養獸囅內岡冊寫軍農塚馮衝決況凍淨淒涼淩減湊凜幾鳳鳧憑凱擊氹鑿芻劃劉則剛創刪別剗剄劊劌剴劑剮劍剝劇勸辦務勱動勵勁勞勢勳猛勩勻匭匱區醫華協單賣盧鹵臥衛卻巹廠廳曆厲壓厭厙廁廂厴廈廚廄廝縣參靉靆雙發變敘疊葉號歎嘰籲後嚇呂嗎唚噸聽啟吳嘸囈嘔嚦唄員咼嗆嗚詠哢嚨嚀噝吒噅鹹呱響啞噠嘵嗶噦嘩噲嚌噥喲嘜嗊嘮啢嗩唕喚呼嘖嗇囀齧囉嘽嘯噴嘍嚳囁嗬噯噓嚶囑嚕劈囂謔團園囪圍圇國圖圓聖壙場阪壞塊堅壇壢壩塢墳墜壟壟壚壘墾坰堊墊埡墶壋塏堖塒塤堝墊垵塹墮壪牆壯聲殼壺壼處備複夠頭誇夾奪奩奐奮獎奧妝婦媽嫵嫗媯姍薑婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬡嬪嬙嬤孫學孿寧寶實寵審憲宮寬賓寢對尋導壽將爾塵堯尷屍盡層屭屜屆屬屢屨嶼歲豈嶇崗峴嶴嵐島嶺嶽崠巋嶨嶧峽嶢嶠崢巒嶗崍嶮嶄嶸嶔崳嶁脊巔鞏巰幣帥師幃帳簾幟帶幀幫幬幘幗冪襆幹並廣莊慶廬廡庫應廟龐廢廎廩開異棄張彌弳彎彈強歸當錄彠彥徹徑徠禦憶懺憂愾懷態慫憮慪悵愴憐總懟懌戀懇惡慟懨愷惻惱惲悅愨懸慳憫驚懼慘懲憊愜慚憚慣湣慍憤憒願懾憖怵懣懶懍戇戔戲戧戰戩戶紮撲扡執擴捫掃揚擾撫拋摶摳掄搶護報擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏撈損撿換搗據撚擄摑擲撣摻摜摣攬撳攙擱摟攪攜攝攄擺搖擯攤攖撐攆擷擼攛擻攢敵斂數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權條來楊榪傑極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒棬椏橈楨檔榿橋樺檜槳樁夢檮棶檢欞槨櫝槧欏橢樓欖櫬櫚櫸檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆毀轂畢斃氈毿氌氣氫氬氳彙漢汙湯洶遝溝沒灃漚瀝淪滄渢溈滬濔濘淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦濫瀠瀟瀲濰潛瀦瀾瀨瀕灝滅燈靈災燦煬爐燉煒熗點煉熾爍爛烴燭煙煩燒燁燴燙燼熱煥燜燾煆糊溜愛爺牘犛牽犧犢強狀獷獁猶狽麅獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽瑉玨琺瓏璫琿璡璉瑣瓊瑤璦璿瓔瓚甕甌電畫暢佘疇癤療瘧癘瘍鬁瘡瘋皰屙癰痙癢瘂癆瘓癇癡癉瘮瘞瘺癟癱癮癭癩癬癲臒皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確鹼礙磧磣堿镟滾禮禕禰禎禱禍稟祿禪離禿稈種積稱穢穠穭稅穌穩穡窮竊竅窯竄窩窺竇窶豎競篤筍筆筧箋籠籩築篳篩簹箏籌簽簡籙簀篋籜籮簞簫簣簍籃籬籪籟糴類秈糶糲粵糞糧糝餱緊縶糸糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線紺絏紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏絛繼綈績緒綾緓續綺緋綽緔緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨翹翽翬耮耬聳恥聶聾職聹聯聵聰肅腸膚膁腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏臢輿艤艦艙艫艱豔艸藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇檾蘋莖蘢蔦塋煢繭荊薦薘莢蕘蓽蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞蓧萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蕆蕢蔣蔞藍薊蘺蕷鎣驀薔蘞藺藹蘄蘊藪槁蘚虜慮虛蟲虯蟣雖蝦蠆蝕蟻螞蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁銜補襯袞襖嫋褘襪襲襏裝襠褌褳襝褲襇褸襤繈襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶讋譽謄訁計訂訃認譏訐訌討讓訕訖訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑說誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗諡謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郤郟鄶鄭鄆酈鄖鄲醞醱醬釅釃釀釋裏钜鑒鑾鏨釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鈍鈔鍾鈉鋇鋼鈑鈐鑰欽鈞鎢鉤鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鈰鉉鉈鉍鈹鐸鉶銬銠鉺銪鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺錯錨錡錁錕錩錫錮鑼錘錐錦鍁錈錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鏌鎮鎛鎘鑷鐫鎳鎿鎦鎬鎊鎰鎔鏢鏜鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔鑣鑞鑲長門閂閃閆閈閉問闖閏闈閑閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隉隕險隨隱隸雋難雛讎靂霧霽黴靄靚靜靨韃鞽韉韝韋韌韍韓韙韞韜韻頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飆飛饗饜飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢魘魎魚魛魢魷魨魯魴魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鯵鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鱉鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鴬鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鶤鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺鸇鷹鸌鸏鸛鸘鹺麥麩黃黌黶黷黲黽黿鼂鼉鞀鼴齇齊齏齒齔齕齗齟齡齙齠齜齦齬齪齲齷龍龔龕龜誌製谘隻裡係範鬆冇嚐嘗鬨麵準鐘彆閒乾儘臟拚 代码部分 因此,对应的代码为: # -*- coding: utf-8 -*- # @Time : 2020/10/16 16:05 # @Author : wanglb # @File : simple_change.py SIMPLE = "万与丑专业丛东丝丢两严丧个丬丰临为丽举么义乌乐乔习乡书买乱争于亏云亘亚产亩亲亵亸亿仅从仑仓仪们价众优伙会伛伞伟传伤伥伦伧伪伫体余佣佥侠侣侥侦侧侨侩侪侬俣俦俨俩俪俭债倾偬偻偾偿傥傧储傩儿兑兖党兰关兴兹养兽冁内冈册写军农冢冯冲决况冻净凄凉凌减凑凛几凤凫凭凯击凼凿刍划刘则刚创删别刬刭刽刿剀剂剐剑剥剧劝办务劢动励劲劳势勋勐勚匀匦匮区医华协单卖卢卤卧卫却卺厂厅历厉压厌厍厕厢厣厦厨厩厮县参叆叇双发变叙叠叶号叹叽吁后吓吕吗吣吨听启吴呒呓呕呖呗员呙呛呜咏咔咙咛咝咤咴咸哌响哑哒哓哔哕哗哙哜哝哟唛唝唠唡唢唣唤唿啧啬啭啮啰啴啸喷喽喾嗫呵嗳嘘嘤嘱噜噼嚣嚯团园囱围囵国图圆圣圹场坂坏块坚坛坜坝坞坟坠垄垅垆垒垦垧垩垫垭垯垱垲垴埘埙埚埝埯堑堕塆墙壮声壳壶壸处备复够头夸夹夺奁奂奋奖奥妆妇妈妩妪妫姗姜娄娅娆娇娈娱娲娴婳婴婵婶媪嫒嫔嫱嬷孙学孪宁宝实宠审宪宫宽宾寝对寻导寿将尔尘尧尴尸尽层屃屉届属屡屦屿岁岂岖岗岘岙岚岛岭岳岽岿峃峄峡峣峤峥峦崂崃崄崭嵘嵚嵛嵝嵴巅巩巯币帅师帏帐帘帜带帧帮帱帻帼幂幞干并广庄庆庐庑库应庙庞废庼廪开异弃张弥弪弯弹强归当录彟彦彻径徕御忆忏忧忾怀态怂怃怄怅怆怜总怼怿恋恳恶恸恹恺恻恼恽悦悫悬悭悯惊惧惨惩惫惬惭惮惯愍愠愤愦愿慑慭憷懑懒懔戆戋戏戗战戬户扎扑扦执扩扪扫扬扰抚抛抟抠抡抢护报担拟拢拣拥拦拧拨择挂挚挛挜挝挞挟挠挡挢挣挤挥挦捞损捡换捣据捻掳掴掷掸掺掼揸揽揿搀搁搂搅携摄摅摆摇摈摊撄撑撵撷撸撺擞攒敌敛数斋斓斗斩断无旧时旷旸昙昼昽显晋晒晓晔晕晖暂暧札术朴机杀杂权条来杨杩杰极构枞枢枣枥枧枨枪枫枭柜柠柽栀栅标栈栉栊栋栌栎栏树栖样栾桊桠桡桢档桤桥桦桧桨桩梦梼梾检棂椁椟椠椤椭楼榄榇榈榉槚槛槟槠横樯樱橥橱橹橼檐檩欢欤欧歼殁殇残殒殓殚殡殴毁毂毕毙毡毵氇气氢氩氲汇汉污汤汹沓沟没沣沤沥沦沧沨沩沪沵泞泪泶泷泸泺泻泼泽泾洁洒洼浃浅浆浇浈浉浊测浍济浏浐浑浒浓浔浕涂涌涛涝涞涟涠涡涢涣涤润涧涨涩淀渊渌渍渎渐渑渔渖渗温游湾湿溃溅溆溇滗滚滞滟滠满滢滤滥滦滨滩滪漤潆潇潋潍潜潴澜濑濒灏灭灯灵灾灿炀炉炖炜炝点炼炽烁烂烃烛烟烦烧烨烩烫烬热焕焖焘煅煳熘爱爷牍牦牵牺犊犟状犷犸犹狈狍狝狞独狭狮狯狰狱狲猃猎猕猡猪猫猬献獭玑玙玚玛玮环现玱玺珉珏珐珑珰珲琎琏琐琼瑶瑷璇璎瓒瓮瓯电画畅畲畴疖疗疟疠疡疬疮疯疱疴痈痉痒痖痨痪痫痴瘅瘆瘗瘘瘪瘫瘾瘿癞癣癫癯皑皱皲盏盐监盖盗盘眍眦眬着睁睐睑瞒瞩矫矶矾矿砀码砖砗砚砜砺砻砾础硁硅硕硖硗硙硚确硷碍碛碜碱碹磙礼祎祢祯祷祸禀禄禅离秃秆种积称秽秾稆税稣稳穑穷窃窍窑窜窝窥窦窭竖竞笃笋笔笕笺笼笾筑筚筛筜筝筹签简箓箦箧箨箩箪箫篑篓篮篱簖籁籴类籼粜粝粤粪粮糁糇紧絷纟纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵罂网罗罚罢罴羁羟羡翘翙翚耢耧耸耻聂聋职聍联聩聪肃肠肤肷肾肿胀胁胆胜胧胨胪胫胶脉脍脏脐脑脓脔脚脱脶脸腊腌腘腭腻腼腽腾膑臜舆舣舰舱舻艰艳艹艺节芈芗芜芦苁苇苈苋苌苍苎苏苘苹茎茏茑茔茕茧荆荐荙荚荛荜荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭荮药莅莜莱莲莳莴莶获莸莹莺莼萚萝萤营萦萧萨葱蒇蒉蒋蒌蓝蓟蓠蓣蓥蓦蔷蔹蔺蔼蕲蕴薮藁藓虏虑虚虫虬虮虽虾虿蚀蚁蚂蚕蚝蚬蛊蛎蛏蛮蛰蛱蛲蛳蛴蜕蜗蜡蝇蝈蝉蝎蝼蝾螀螨蟏衅衔补衬衮袄袅袆袜袭袯装裆裈裢裣裤裥褛褴襁襕见观觃规觅视觇览觉觊觋觌觍觎觏觐觑觞触觯詟誉誊讠计订讣认讥讦讧讨让讪讫训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豮贝贞负贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟赠赡赢赣赪赵赶趋趱趸跃跄跖跞践跶跷跸跹跻踊踌踪踬踯蹑蹒蹰蹿躏躜躯车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辞辩辫边辽达迁过迈运还这进远违连迟迩迳迹适选逊递逦逻遗遥邓邝邬邮邹邺邻郁郄郏郐郑郓郦郧郸酝酦酱酽酾酿释里鉅鉴銮錾钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钝钞钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿铀铁铂铃铄铅铆铈铉铊铋铍铎铏铐铑铒铕铗铘铙铚铛铜铝铞铟铠铡铢铣铤铥铦铧铨铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗错锚锜锞锟锠锡锢锣锤锥锦锨锩锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿镀镁镂镃镆镇镈镉镊镌镍镎镏镐镑镒镕镖镗镙镚镛镜镝镞镟镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镶长门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛队阳阴阵阶际陆陇陈陉陕陧陨险随隐隶隽难雏雠雳雾霁霉霭靓静靥鞑鞒鞯鞴韦韧韨韩韪韫韬韵页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟颠颡颢颣颤颥颦颧风飏飐飑飒飓飔飕飖飗飘飙飚飞飨餍饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟骠骡骢骣骤骥骦骧髅髋髌鬓魇魉鱼鱽鱾鱿鲀鲁鲂鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳛鳜鳝鳞鳟鳠鳡鳢鳣鸟鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹚鹛鹜鹝鹞鹟鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹯鹰鹱鹲鹳鹴鹾麦麸黄黉黡黩黪黾鼋鼌鼍鼗鼹齄齐齑齿龀龁龂龃龄龅龆龇龈龉龊龋龌龙龚龛龟志制咨只里系范松没尝尝闹面准钟别闲干尽脏拼" TRADITION = "萬與醜專業叢東絲丟兩嚴喪個爿豐臨為麗舉麼義烏樂喬習鄉書買亂爭於虧雲亙亞產畝親褻嚲億僅從侖倉儀們價眾優夥會傴傘偉傳傷倀倫傖偽佇體餘傭僉俠侶僥偵側僑儈儕儂俁儔儼倆儷儉債傾傯僂僨償儻儐儲儺兒兌兗黨蘭關興茲養獸囅內岡冊寫軍農塚馮衝決況凍淨淒涼淩減湊凜幾鳳鳧憑凱擊氹鑿芻劃劉則剛創刪別剗剄劊劌剴劑剮劍剝劇勸辦務勱動勵勁勞勢勳猛勩勻匭匱區醫華協單賣盧鹵臥衛卻巹廠廳曆厲壓厭厙廁廂厴廈廚廄廝縣參靉靆雙發變敘疊葉號歎嘰籲後嚇呂嗎唚噸聽啟吳嘸囈嘔嚦唄員咼嗆嗚詠哢嚨嚀噝吒噅鹹呱響啞噠嘵嗶噦嘩噲嚌噥喲嘜嗊嘮啢嗩唕喚呼嘖嗇囀齧囉嘽嘯噴嘍嚳囁嗬噯噓嚶囑嚕劈囂謔團園囪圍圇國圖圓聖壙場阪壞塊堅壇壢壩塢墳墜壟壟壚壘墾坰堊墊埡墶壋塏堖塒塤堝墊垵塹墮壪牆壯聲殼壺壼處備複夠頭誇夾奪奩奐奮獎奧妝婦媽嫵嫗媯姍薑婁婭嬈嬌孌娛媧嫻嫿嬰嬋嬸媼嬡嬪嬙嬤孫學孿寧寶實寵審憲宮寬賓寢對尋導壽將爾塵堯尷屍盡層屭屜屆屬屢屨嶼歲豈嶇崗峴嶴嵐島嶺嶽崠巋嶨嶧峽嶢嶠崢巒嶗崍嶮嶄嶸嶔崳嶁脊巔鞏巰幣帥師幃帳簾幟帶幀幫幬幘幗冪襆幹並廣莊慶廬廡庫應廟龐廢廎廩開異棄張彌弳彎彈強歸當錄彠彥徹徑徠禦憶懺憂愾懷態慫憮慪悵愴憐總懟懌戀懇惡慟懨愷惻惱惲悅愨懸慳憫驚懼慘懲憊愜慚憚慣湣慍憤憒願懾憖怵懣懶懍戇戔戲戧戰戩戶紮撲扡執擴捫掃揚擾撫拋摶摳掄搶護報擔擬攏揀擁攔擰撥擇掛摯攣掗撾撻挾撓擋撟掙擠揮撏撈損撿換搗據撚擄摑擲撣摻摜摣攬撳攙擱摟攪攜攝攄擺搖擯攤攖撐攆擷擼攛擻攢敵斂數齋斕鬥斬斷無舊時曠暘曇晝曨顯晉曬曉曄暈暉暫曖劄術樸機殺雜權條來楊榪傑極構樅樞棗櫪梘棖槍楓梟櫃檸檉梔柵標棧櫛櫳棟櫨櫟欄樹棲樣欒棬椏橈楨檔榿橋樺檜槳樁夢檮棶檢欞槨櫝槧欏橢樓欖櫬櫚櫸檟檻檳櫧橫檣櫻櫫櫥櫓櫞簷檁歡歟歐殲歿殤殘殞殮殫殯毆毀轂畢斃氈毿氌氣氫氬氳彙漢汙湯洶遝溝沒灃漚瀝淪滄渢溈滬濔濘淚澩瀧瀘濼瀉潑澤涇潔灑窪浹淺漿澆湞溮濁測澮濟瀏滻渾滸濃潯濜塗湧濤澇淶漣潿渦溳渙滌潤澗漲澀澱淵淥漬瀆漸澠漁瀋滲溫遊灣濕潰濺漵漊潷滾滯灩灄滿瀅濾濫灤濱灘澦濫瀠瀟瀲濰潛瀦瀾瀨瀕灝滅燈靈災燦煬爐燉煒熗點煉熾爍爛烴燭煙煩燒燁燴燙燼熱煥燜燾煆糊溜愛爺牘犛牽犧犢強狀獷獁猶狽麅獮獰獨狹獅獪猙獄猻獫獵獼玀豬貓蝟獻獺璣璵瑒瑪瑋環現瑲璽瑉玨琺瓏璫琿璡璉瑣瓊瑤璦璿瓔瓚甕甌電畫暢佘疇癤療瘧癘瘍鬁瘡瘋皰屙癰痙癢瘂癆瘓癇癡癉瘮瘞瘺癟癱癮癭癩癬癲臒皚皺皸盞鹽監蓋盜盤瞘眥矓著睜睞瞼瞞矚矯磯礬礦碭碼磚硨硯碸礪礱礫礎硜矽碩硤磽磑礄確鹼礙磧磣堿镟滾禮禕禰禎禱禍稟祿禪離禿稈種積稱穢穠穭稅穌穩穡窮竊竅窯竄窩窺竇窶豎競篤筍筆筧箋籠籩築篳篩簹箏籌簽簡籙簀篋籜籮簞簫簣簍籃籬籪籟糴類秈糶糲粵糞糧糝餱緊縶糸糾紆紅紂纖紇約級紈纊紀紉緯紜紘純紕紗綱納紝縱綸紛紙紋紡紵紖紐紓線紺絏紱練組紳細織終縐絆紼絀紹繹經紿綁絨結絝繞絰絎繪給絢絳絡絕絞統綆綃絹繡綌綏絛繼綈績緒綾緓續綺緋綽緔緄繩維綿綬繃綢綯綹綣綜綻綰綠綴緇緙緗緘緬纜緹緲緝縕繢緦綞緞緶線緱縋緩締縷編緡緣縉縛縟縝縫縗縞纏縭縊縑繽縹縵縲纓縮繆繅纈繚繕繒韁繾繰繯繳纘罌網羅罰罷羆羈羥羨翹翽翬耮耬聳恥聶聾職聹聯聵聰肅腸膚膁腎腫脹脅膽勝朧腖臚脛膠脈膾髒臍腦膿臠腳脫腡臉臘醃膕齶膩靦膃騰臏臢輿艤艦艙艫艱豔艸藝節羋薌蕪蘆蓯葦藶莧萇蒼苧蘇檾蘋莖蘢蔦塋煢繭荊薦薘莢蕘蓽蕎薈薺蕩榮葷滎犖熒蕁藎蓀蔭蕒葒葤藥蒞蓧萊蓮蒔萵薟獲蕕瑩鶯蓴蘀蘿螢營縈蕭薩蔥蕆蕢蔣蔞藍薊蘺蕷鎣驀薔蘞藺藹蘄蘊藪槁蘚虜慮虛蟲虯蟣雖蝦蠆蝕蟻螞蠶蠔蜆蠱蠣蟶蠻蟄蛺蟯螄蠐蛻蝸蠟蠅蟈蟬蠍螻蠑螿蟎蠨釁銜補襯袞襖嫋褘襪襲襏裝襠褌褳襝褲襇褸襤繈襴見觀覎規覓視覘覽覺覬覡覿覥覦覯覲覷觴觸觶讋譽謄訁計訂訃認譏訐訌討讓訕訖訓議訊記訒講諱謳詎訝訥許訛論訩訟諷設訪訣證詁訶評詛識詗詐訴診詆謅詞詘詔詖譯詒誆誄試詿詩詰詼誠誅詵話誕詬詮詭詢詣諍該詳詫諢詡譸誡誣語誚誤誥誘誨誑說誦誒請諸諏諾讀諑誹課諉諛誰諗調諂諒諄誶談誼謀諶諜謊諫諧謔謁謂諤諭諼讒諮諳諺諦謎諞諝謨讜謖謝謠謗諡謙謐謹謾謫譾謬譚譖譙讕譜譎讞譴譫讖穀豶貝貞負貟貢財責賢敗賬貨質販貪貧貶購貯貫貳賤賁貰貼貴貺貸貿費賀貽賊贄賈賄貲賃賂贓資賅贐賕賑賚賒賦賭齎贖賞賜贔賙賡賠賧賴賵贅賻賺賽賾贗讚贇贈贍贏贛赬趙趕趨趲躉躍蹌蹠躒踐躂蹺蹕躚躋踴躊蹤躓躑躡蹣躕躥躪躦軀車軋軌軒軑軔轉軛輪軟轟軲軻轤軸軹軼軤軫轢軺輕軾載輊轎輈輇輅較輒輔輛輦輩輝輥輞輬輟輜輳輻輯轀輸轡轅轄輾轆轍轔辭辯辮邊遼達遷過邁運還這進遠違連遲邇逕跡適選遜遞邐邏遺遙鄧鄺鄔郵鄒鄴鄰鬱郤郟鄶鄭鄆酈鄖鄲醞醱醬釅釃釀釋裏钜鑒鑾鏨釓釔針釘釗釙釕釷釺釧釤鈒釩釣鍆釹鍚釵鈃鈣鈈鈦鈍鈔鍾鈉鋇鋼鈑鈐鑰欽鈞鎢鉤鈧鈁鈥鈄鈕鈀鈺錢鉦鉗鈷缽鈳鉕鈽鈸鉞鑽鉬鉭鉀鈿鈾鐵鉑鈴鑠鉛鉚鈰鉉鉈鉍鈹鐸鉶銬銠鉺銪鋏鋣鐃銍鐺銅鋁銱銦鎧鍘銖銑鋌銩銛鏵銓鉿銚鉻銘錚銫鉸銥鏟銃鐋銨銀銣鑄鐒鋪鋙錸鋱鏈鏗銷鎖鋰鋥鋤鍋鋯鋨鏽銼鋝鋒鋅鋶鐦鐧銳銻鋃鋟鋦錒錆鍺錯錨錡錁錕錩錫錮鑼錘錐錦鍁錈錇錟錠鍵鋸錳錙鍥鍈鍇鏘鍶鍔鍤鍬鍾鍛鎪鍠鍰鎄鍍鎂鏤鎡鏌鎮鎛鎘鑷鐫鎳鎿鎦鎬鎊鎰鎔鏢鏜鏍鏰鏞鏡鏑鏃鏇鏐鐔钁鐐鏷鑥鐓鑭鐠鑹鏹鐙鑊鐳鐶鐲鐮鐿鑔鑣鑞鑲長門閂閃閆閈閉問闖閏闈閑閎間閔閌悶閘鬧閨聞闥閩閭闓閥閣閡閫鬮閱閬闍閾閹閶鬩閿閽閻閼闡闌闃闠闊闋闔闐闒闕闞闤隊陽陰陣階際陸隴陳陘陝隉隕險隨隱隸雋難雛讎靂霧霽黴靄靚靜靨韃鞽韉韝韋韌韍韓韙韞韜韻頁頂頃頇項順須頊頑顧頓頎頒頌頏預顱領頗頸頡頰頲頜潁熲頦頤頻頮頹頷頴穎顆題顒顎顓顏額顳顢顛顙顥纇顫顬顰顴風颺颭颮颯颶颸颼颻飀飄飆飆飛饗饜飣饑飥餳飩餼飪飫飭飯飲餞飾飽飼飿飴餌饒餉餄餎餃餏餅餑餖餓餘餒餕餜餛餡館餷饋餶餿饞饁饃餺餾饈饉饅饊饌饢馬馭馱馴馳驅馹駁驢駔駛駟駙駒騶駐駝駑駕驛駘驍罵駰驕驊駱駭駢驫驪騁驗騂駸駿騏騎騍騅騌驌驂騙騭騤騷騖驁騮騫騸驃騾驄驏驟驥驦驤髏髖髕鬢魘魎魚魛魢魷魨魯魴魺鮁鮃鯰鱸鮋鮓鮒鮊鮑鱟鮍鮐鮭鮚鮳鮪鮞鮦鰂鮜鱠鱭鮫鮮鮺鯗鱘鯁鱺鰱鰹鯉鰣鰷鯀鯊鯇鮶鯽鯒鯖鯪鯕鯫鯡鯤鯧鯝鯢鯰鯛鯨鯵鯴鯔鱝鰈鰏鱨鯷鰮鰃鰓鱷鰍鰒鰉鰁鱂鯿鰠鼇鰭鰨鰥鰩鰟鰜鰳鰾鱈鱉鰻鰵鱅鰼鱖鱔鱗鱒鱯鱤鱧鱣鳥鳩雞鳶鳴鳲鷗鴉鶬鴇鴆鴣鶇鸕鴨鴞鴦鴒鴟鴝鴛鴬鴕鷥鷙鴯鴰鵂鴴鵃鴿鸞鴻鵐鵓鸝鵑鵠鵝鵒鷳鵜鵡鵲鶓鵪鶤鵯鵬鵮鶉鶊鵷鷫鶘鶡鶚鶻鶿鶥鶩鷊鷂鶲鶹鶺鷁鶼鶴鷖鸚鷓鷚鷯鷦鷲鷸鷺鸇鷹鸌鸏鸛鸘鹺麥麩黃黌黶黷黲黽黿鼂鼉鞀鼴齇齊齏齒齔齕齗齟齡齙齠齜齦齬齪齲齷龍龔龕龜誌製谘隻裡係範鬆冇嚐嘗鬨麵準鐘彆閒乾儘臟拚" def to_tradition(st): # 简体转繁体 output_str_list = [] str_len = len(st) for i in range(str_len): found_index = SIMPLE.find(st[i]) if not (found_index == -1): output_str_list.append(TRADITION[found_index]) else: output_str_list.append(st[i]) return ''.join(output_str_list) def to_simple(st): # 繁体转简体 output_str_list = [] str_len = len(st) for i in range(str_len): found_index = TRADITION.

vue项目的docker部署

很久没有接触前端了,最近需要发布一个前端小项目,好不犹豫的选择了docker,方便啊!(其实原始nginx也很方便) 下面记录一下: 开发环境vscode 发布环境 centos7 项目工程结构 我们需要一个dockerfile文件,一个nginx的配置文件 dockerfile文件配置内容如下,我们以一个nginx镜像为基础镜像打包我们自己的镜像,内容如下图所示 # 基础镜像使用Nginx FROM nginx # 作者 MAINTAINER llp # 添加时区环境变量,亚洲,上海 ENV TimeZone=Asia/Shanghai # 将前端dist文件中的内容复制到nginx目录 COPY ./dist/ /usr/share/nginx/html/ # 用本地的nginx配置文件覆盖镜像的Nginx配置 COPY nginx.conf /etc/nginx/nginx.conf # 暴露端口 EXPOSE 80 对生产环境变量的定义,如下图所示,请求的接口我们统一用一个指定的url前缀代理,这样方便等会使用nginx做一个重定向的代理 nginx.conf配置文件,代理部分,通过对prod-api的重定向代理,完成对后台接口的数据请求 ![在这里插入图片描述](https://img-blog.csdnimg.cn/fcbe0a8a6c0b447c8591deb3cd8c2a2d.png到此我们基本工作就准备完毕了,接下来就是打包镜像和运行容器了npm run build 前端打包发布将发布后的目录 和2个配置文件,上传到安装有docker的服务器中,如下图 进入该目录后 构建镜像 docker build -t i_llpcml . 构建成功后,运行容器,这里为了方便修改nginx的配置,我们将nginx的配置挂载出来,方便修改,nginx.conf本地配置如下所示 docker run -di -v /home/llp_docker/llpcml/nginx.conf:/etc/nginx/nginx.conf --name=llpcml -p 8099:80 i_llpcml 访问8099端口,就可以看见我们的项目了,收工!

selenium打开谷歌浏览器

很多小伙伴在知道了selenium这个工具之后就想使用它来打开浏览器。今天我就来给大家分享一下怎样使用Python+Selenium打开谷歌浏览器。 1. 打开谷歌浏览器,先查看谷歌浏览器版本号,右上角三个点-帮助-关于Google Chrome 可以看到我这里版本是92.0.4515.107 2. 下载谷歌浏览器驱动 下载地址:http://chromedriver.storage.googleapis.com/index.html 选择对应版本即可 3.下载完后是个压缩包,里面有个chromedriver.exe文件,我们解压出来 4.然后将chromedriver.exe放到python安装目录下(即python.exe所在目录)。 我们有时可能不知道python安装目录,网上有很多查找方法,我这里列举一个: ① 点击开始菜单,打开IDLE ② 点击左上角File-Save(保存)按钮 ③ 复制上面的链接,这就是python安装目录 (我这个是C:\Users\wkl\AppData\Local\Programs\Python\Python39) ④ 打开我的电脑,链接复制到地址栏查看一下,可以看到python.exe ⑤ 放入chromedriver.exe 这样以后就可以用selenium自动化框架来操作谷歌浏览器了。 关注公众号【天耀数码】,获取更多常用黑科技软件、壁纸下载。

系统分析师【系统规划案例分析汇总】

系统规划 项目选择和确定 (1)选择有核心价值的项目 (2)评估所选择的项目 (3)项目优先级排序 (4)评估项目的多种实施方式 (5)平衡地选择合适的方案 可行性研究步骤 (1)复查系统目标和规模 (2)分析现有系统 (3)导出新系统的高层逻辑模型 (4)用户复核 (5)提出并评价解决方案 (6)确定最终推荐的解决方案 (7)草拟开发计划 (8)编制和提交可行性研究报告 可行性研究报告的内容 引言、引用文件、可行性研究的前提、可选的方案、所建议的系统、经济技术法律用户使用可行性、其他与项目有关的问题、注解、附录。 可行性包括两个方面:必要性和可能性 软件系统的可行性分析包括四个方面 (1)经济可行性>收益、成本 (2)技术可行性>企业现有技术能力能否完成 (3)法律可行性>是否符合国家法律法规 (4)用户使用可行性>管理可行性、运行可行性 经济可行性也称为投资收益分析或成本效益分析,主要评估项目的建设成本、运行成本和项目建成后可能的经济收益。 技术可行性也称为技术风险分析,研究的对象是信息系统需要实现的功能和性能,以及技术能力约束。 法律可行性也称为社会可行性,具有比较广泛的内容,它需要从政策、法律、道德、制度等社会因素来论证信息系统建设的现实性。 用户使用可行性也称为执行可行性,是从信息系统用户的角度来评估系统的可行性,包括企业的行政管理和工作制度、使用人员的素质和培训要求等,可以细分为管理可行性和运行可行性。 系统规划步骤,各个子步骤具体含义 1、对现有系统进行初步调查 2、分析和确定系统目标 3、分析子系统的组成和基本功能 4、拟定系统的实施方案 5、进行系统的可行性研究,编写可行性研究报告,召开可行性论证会 6、制定系统建设方案 项目机会选择步骤 1、立项目标和动机 2、立项价值判断 3、项目选择和确定 4、初步调查 5、可行性分析 项目立项的目标和动机 1、进行基础研究 2、进行应用研究 3、提供技术服务 4、产品的使用者 项目的选择和确定 (1)选择有核心价值的项目 (2)评估所选择的项目 (3)项目优先级排序 (4)评估项目的多种实施方式 (5)平衡地选择合适的方案 初步调查 目标:掌握用户的概况,从整体上了解企业信息系统建设的现状,对用户提出的各种问题和初始需求进行识别,明确系统的初步目标,为可行性研究提供工作基础。 方式:最佳方式是与企业高层管理人员座谈,通过座谈了解企业高层对信息系统所设定的目标和系统边界,计划的资金投入和对工期的要求。 内容:初步需求分析,企业基本状况,管理方式和基础数据管理状况,现有系统状况。 成本效益分析技术 (1)固定成本:是指其总额在一定期间和一定业务量范围内,不受业务量变动的影响而保持固定不变的成本。例如,管理人员的工资、办公费、固定资产折旧费、员工培训费等。 (2)变动成本:也称为可变成本,是指在一定时期和一定业务量范围内其总额随着业务量的变动而成正比例变动的成本。例如,直接材料费、产品包装费、外包费用、开发奖金等。 (3)混合成本:就是混合了固定成本和变动成本的性质的成本。例如,水电费、电话费等。这些成本通常有一个基数,超过这个基数就会随业务量的增大而增大。 (4)直接成本:直接投入在项目上。 (5)间接成本:分摊到项目上。 (6)沉没成本:已经投入到项目中,无法挽回的成本,不需要再去考虑。 净现值计算 静态收益计算方式:不考虑金钱的时间价值,只看项目周期内投入和产出的绝对数字。 动态收益计算方式:考虑金钱具有时间价值,现在的钱比未来值钱,有以下相关概念和公式: 现值:设每年折现率为i,原价值为F的东西,在n年后的价值为: 净现值NPV是考虑了金钱的时间价值计算出来的净利润,公式为: 其中,CI是第t年的收入利益,CO是第t年的支出成本,i是折现率。项目周期内每一年都这样计算再累加,得出总的NPV,就是考虑了时间价值的净利润, NPV有助于公司判断项目是否盈利。

uniapp开发移动端上传指南

介绍 Uniapp是 DCloud公司于2012年开始研发的能够一次代码开发,生成H5、小程序(微信、支付宝、百度、华为等)、APP等应用的技术的统称,开发工具是HBuilderX,功能非常强大,由此引申出许多技术社区与生态环境。 引言 Uniapp开发移动端上传,需要前端、后台接口的配合,是比较常见和通用的需求场景,包括许多细节的实现,如:前端上传页面ui,选择文件(图片或视频等),选择时上传文件大小的判断、上传状态的设定,上传后调用后台服务器上传接口上传到服务器,上传成功后回传参数处理等。还有些页面包括要上传多个图片、多个视频,混合搭配,如果没有好的代码封装,往往使得代码不易读、维护很困难。Uniapp提供的前端封装、以及我们使用相应后端接口,搭配好,可以形成一套比较简洁通用的实现方式。笔者根据以往经验进行总结如下。 实例 本文使用Uniapp开发(使用uview ui组件技术)前端微信小程序,后端接口采用TP6,实现移动端上传的功能 需求场景 发布内容管理资讯,包含上传图片、上传视频的表单,提交文件上传到服务器。 实现 前端页面 前端页面代码 <template> <view> <u-navbar :autoBack="true" title="文章发布" title-width="500"></u-navbar> <view class="top_box"></view> <u--text text="上传图片"></u--text> <u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" @oversize="oversize" name="1" multiple :maxCount="2" :previewFullImage="true" maxSize="5024000" ></u-upload> <u--text text="上传视频"></u--text> <u-upload :fileList="fileList2" @afterRead="afterRead" @delete="deletePic" @oversize="oversize" name="2" multiple :maxCount="2" accept="video" :previewFullImage="true" maxSize="10240000" ></u-upload> </view> </template> export default { data() { return { ... fileList1: [], fileList2: [], } }, ... methods:{ ... // 删除图片 deletePic(event) { this[`fileList${event.

clickhouse物化视图详解

clickhouse物化视图有常见的两种模式 假设源表定义如下: create table source_table(id int32, age int32, create_time DateTime) engine=mergeTree() partition by toYYMMDD(create_time) order by id 模式一 隐式创建目标表: CREATE MATERIALIZED VIEW hide_agg_mv_view( id int32, min_age AggregateFunction(min, int32), max_age AggregateFunction(max,int32) ) ENGINE = AggregatingMergeTree() PARTITION BY tuple() ORDER BY (id) POPULATE AS SELECT id, minState(age) as min_age, maxState(age) as max_age FROM source_table GROUP BY id 模式一会隐式的创建目标表,使用show table命令可以看到和物化视图相关的两张表: a. 物化视图定义表:hide_agg_mv_view b. 实际数据存放表:inner.hide_agg_mv_view 使用这种模式创建的物化视图的优点是支持populate初始化操作,也就是可以把源表数据初始化到物化视图中,不过这个初始化的过程中,源表中所有的数据insert操作都会丢失,生产环境中使用务必注意。 模式二: 显示定义目标表 定义目标数据表 CREATE TABLE target_data_table ( id int32, min_age AggregateFunction(min, int32), max_age AggregateFunction(max,int32) ) ENGINE = AggregatingMergeTree() PARTITION BY tuple() ORDER BY (id) 物化视图定义表

python使用python-jenkins插件操作jenkins

python-jenkins插件 python中有python-jenkins插件,用来实现python和jenkins交付。 使用如下命令,即可安装该模块 pip3 install python-jenkins 该模块的文档,可以参见: Python Jenkins — Python Jenkins 1.1.1.dev1 documentation 创建jenkins token 为了方便后续python连接jenkins,需要在jenkins中,使用某一用户,创建token 首先进入到自己的用户设置,点击右上角自己的用户名,然后从下拉菜单中,选择设置 在api-token选项中,创建一个新的token即可。 需要注意,token一旦创建之后,需要自己进行记录,后续该页面刷新之后,就看不到了 python操作jenkins 连接jenkins python中,通过jenkins这个模块,来连接jenkins。代码如下: server = jenkins.Jenkins(jenkins_server, username=user_id, password=api_token) 其中: jenkins_server:jenkins的网站链接 username:用户名 password: 该用户的token 如果jenkins的网站是https的方式,那么连接过程中会有证书认证。如果jenkins的证书是自签发的,那么是可能连接失败的。 可以在连接jenkins之前,加入如下代码,不认证证书 import os os.environ['PYTHONHTTPSVERIFY'] = '0' 连接成功后,就可以通过server这个类实例,来对jenkins进行操作了。 job操作 job的操作,主要使用以下方法 方法参数说明get_job_infojob_name获取指定job的信息build_jobjob_name,parameters构建指定的job,并且传入参数。参数是一个字典get_build_infojob_name,number获取指定job的指定构建number的构建信息get_build_console_outputjob_name, numer获取指定job的指定构建number的console打印信息 获取job信息 获取job的信息,使用get_job_info方法。该方法会返回一个字典,该字典中,存储了该job的相关所有信息。 信息如下所示: { '_class': 'org.jenkinsci.plugins.workflow.job.WorkflowJob', 'actions': [ {}, {}, {}, {}, {}, {}, {}, {}, {'_class': 'org.jenkinsci.plugins.displayurlapi.actions.JobDisplayAction'}, {}, {}, {'_class': 'com.cloudbees.plugins.credentials.ViewCredentialsAction'} ], 'buildable': True, 'builds': [ { '_class': 'org.

`MyBatis`各种查询功能

MyBatis各种查询功能【非常重要】 1.查询一个实体类对象 若查询出的数据只有一条: 可以通过实体类对象接收可以通过List集合接收可以通过Map集合接收,在select的resultType或resultMap要传入别名为map【用于json数据传输】 案例: Mapper接口 /** *当查询的返回只有一条记录时, * 1.可以用JavaBean类进行接收 * 2.可以用List集合进行接收 */ // 根据ID查询用户信息 , 用User实体类进行接收 User getUserByID(@Param("id") Integer id); // 根据ID查询用户信息 , 用List集合进行接收 List<User> getUserByID2(@Param("id") Integer id); Mapper.xml文件 <!--getUserByID根据ID查询用户信息--> <select id="getUserByID" resultType="User"> select * from t_user where id = #{id}; </select> <!--List<User> getUserByID2(@Param("id") Integer id);根据ID查询用户信息--> <select id="getUserByID2" resultType="User"> select * from t_user where id = #{id}; </select> Test类 // 查询返回一条记录的情况 @Test public void testGetUserByID(){ SqlSession sqlSession = SqlSessionUtils.

项目十大管理(六)人力资源管理

项目人力资源管理主要包括规划人力资源管理、组建项目团队、建设项目团队和管理项目团队四个子过程: 一、规划人力资源管理 主要是识别和记录项目角色、职责、所需技能、报告关系,并编制人员配备管理计划。本过程的主要作用是建立项目角色与职责、项目组织图,以及包含人员招募和遣散时间标的人员配备管理计划。 1.1 规划人力资源管理的输入 1.1.1 项目管理计划 1.1.2 活动资源需求 进行人力资源时,也需要根据活动资源需求来确定项目所需的人力资源。在规划人力资源管理过程中,明确对项目团队成员及其能力的初步需求 1.1.3 事业环境因素 能够影响的事业环境因素包括: 组织文化和结构现有人力资源情况团队成员的地理位置分布人事管理政策 1.1.4 组织过程资产 能够影响的组织过程资产包括: 组织的标准流程、政策和角色描述组织图和职位描述模板以往项目中与组织结构有关的经验教训团队和执行组织内问题解决的升级程序 1.2 规划人力资源管理的工具与技术 1.2.1 组织图与职位描述 1.2.2 人际交往 人际交往是指在组织、行业或职业环境中与他人的正式或非正式互动。通过在本单位内或本行业内的人际交流,有助于了解那些能影响人员配备方案的各种因素。通过成功的人际交往,可以获取与人力资源有关的各种信息,增加获取人力资源的途径。 1.2.3 组织理论 组织理论阐述个人、团队和组织部门的行为方式。有效利用组织理论中的通用知识,可以节约编制人力资源管理计划的时间、成本及人力投入,提高规划工作的效率。 在不同的组织架构中,人们可能有不同的表现、不同的业绩,可能展现出不同的交际特点 1.2.4 专家判断 专家判断被用于制定人力资源管理计划的有: 列出人力资源的初步要求根据组织的标准化角色描述,分析项目所需的角色 1.2.5 会议 在会议中,使用工具和技术,使所有项目管理团队成员对人力资源管理计划达成共识 1.3 规划人力资源管理的输出 1.3.1 人力资源管理计划 二、组建项目团队 组建项目团队是确认人力资源的可用情况,并为开展项目活动而组建团队。作用是指导团队选择和职责分配,组建一个成功的团队。 2.1 组建项目团队的输入 2.1.1 人力资源管理计划 提供了如何定义、配备、管理和最终遣散人力资源的指南 2.1.2 事业环境因素 影响的因素包括: 现有人力资源情况,包括可用性、能力水平、以往经验等等人事管理政策,如人员外包的政策组织的结构集中办公或多个工作地点 2.1.3 组织过程资产 组织的标准政策、流程和程序会影响组建项目团队过程 2.2 组建项目团队的工具与技术 2.2.1 预分派 也就是事先选定的,预分派可在下列情况下发生:在竞标过程中承诺分派特定人员进行项目工作;项目成功取决于特定人员的专有技能;或者项目章程中指定了某些人员的工作分派 2.2.2 谈判 项目有可能会通过谈判完成人员分派,项目管理团队影响他人的能力很重要,如同在组织中的政治能力一样重要。 2.2.3 招募 从外部获取相应的人员,或把相关工作分包给其他组织 2.2.4 虚拟团队 对于很少或没有时间面对面工作的一群人。能够组织内部地处不同地理位置的员工之间组建团队。 2.2.5 多标准决策分析 也就是在组建项目团队过程中,经常需要使用团队成员选择标准,通过多标准决策分析,制定选择标准,并据此对候选团队成员进行定级或打分。根据各种因素对团队的不同重要性,赋予选择标准不同的权重。大致有如下几种标准:

Spring AuthorizationServer 新版

Spring Oauth2-Authorization-Server 介绍 基于 spring-security-oauth2-authorization-server 0.2.3 序言 由于 spring-security-oauth 这个工程 已经被废弃了, oauth-client, oauth-resource 的内容都被移进了 spring-security 工程,在社区的强烈要求下,由spring牵头,spring社区主导的 spring-security-oauth2-authorization-server 被开发 spring-security-oauth2-authorization-server 校之前的 spring-security-oauth 有了较大的变化 ,工程地址 spring-projects/spring-authorization-server 常用组件 oauth表 oauth2-registered-client-schema.sql mysql> select * from oauth2_registered_client\G; *************************** 1. row *************************** id: c10f37cb-ae08-4fb7-9f4f-27b3c3298158 client_id: apple client_id_issued_at: 2022-05-02 09:31:47 client_secret: $2a$10$Nlq7EjfwjiS6bAOsxF8fY.gBmSkJLDNJTOwxgQwwKKKRuFvalZQUK client_secret_expires_at: NULL client_name: c10f37cb-ae08-4fb7-9f4f-27b3c3298158 client_authentication_methods: basic authorization_grant_types: refresh_token,client_credentials,password,authorization_code redirect_uris: https://www.baidu.com scopes: user.photos,user.userInfo client_settings: {"@class":"java.util.Collections$UnmodifiableMap","settings.client.require-proof-key":false,"settings.client.require-authorization-consent":true} token_settings: {"@class":"java.util.Collections$UnmodifiableMap","settings.token.reuse-refresh-tokens":true,"settings.token.id-token-signature-algorithm":["org.springframework.security.oauth2.jose.jws.SignatureAlgorithm","RS256"],"settings.token.access-token-time-to-live":["java.time.Duration",3600.000000000],"settings.token.access-token-format":{"@class":"org.springframework.security.oauth2.core.OAuth2TokenFormat","value":"refrence"},"settings.token.refresh-token-time-to-live":["java.time.Duration",259200.000000000]} 1 row in set (0.00 sec) oauth2-authorization-consent-schema.sql mysql> desc oauth2_authorization_consent; +----------------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------------+---------------+------+-----+---------+-------+ | registered_client_id | varchar(100) | NO | PRI | NULL | | | principal_name | varchar(200) | NO | PRI | NULL | | | authorities | varchar(1000) | NO | | NULL | | +----------------------+---------------+------+-----+---------+-------+ 3 rows in set (0.

hive中substr和regexp_replace的使用

substr 从指定位开始截取字符串 SELECT SUBSTR('2022-05-04',2) #这里以年月日作为测试数据,SUBSTR(column, start_index),这种用法会从start_index位置开始截取字符串到最后一位,这里要注意,索引是从1开始而不是0 从指定位置开始截取,截取到指定的最后一位 SELECT SUBSTR('2022-05-04',1,4) #SUBSTR(column, start_index, length),这里start_index还是截取字符串的起始位置, length指的是从start_index位置开始截取的长度 3. 从字符串后面开始截取 SELECT SUBSTR('2022-05-04',-3,2) #如果指定从SUBSTR(column, start_index, length),如果start_index为负数就是从字符串的后面开始截取指定长度的字符串 regexp_replace regexp_replace函数的作用就是根据指定的正则表达式替换字符串 SELECT REGEXP_REPLACE('2022-05-04','[0-9]','A') #REGEXP_REPLACE(column, regular_expression, replace_string),第一位就是要进行匹配的字符串,regular_expression就是正则表达式, replace_string就是用来替换的字符串

如何在安卓APP中添加分享按钮?

最近想给一个APP添加分享屏幕截图的功能,就尝试找了一圈相关的Package,最后找倒是没找到,倒是在StackOverflow找到了一个解决方法。 布局及相关权限 AndroidManifest.xml权限添加 <!-- STORAGE PERMISSION FOR SCREEN SHOT--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> 存储路径配置provider_paths.xml <?xml version="1.0" encoding="utf-8"?> <paths> <external-path name="external_files" path="."/> </paths> 布局 ... <LinearLayout android:id="@+id/shared_preferences_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#7E03A9F4"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAlignment="center" android:layout_weight="10" android:text="@string/share_info"/> <Button android:id="@+id/share" android:background="@drawable/ic_share" android:layout_weight="1" android:layout_width="32dp" android:layout_height="32dp" android:layout_marginRight="10dp"/> </LinearLayout> ... Code 主要引用 ... Button share = (Button) findViewById(R.id.share); share.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Bitmap bitmap = takeScreenshot(gameWeb); saveBitmap(bitmap); shareIt(GameActivity.

光伏并网发电及低电压穿越技术

1、内容简介 随着工业社会的发展,科学技术的不断进步,人口的迅速增长,人们对能源的需求也不断增加,地球上的不可再生资源正在减少。此外,煤炭等化石燃料的大量使用己经对人类的生存环境造成严重危害,并导致生态恶化。此时全世界都开始关注可再生能源,希望通过可再生能源改变目前的能源结构,实现人类社会的可持续发展。太阳能作为储量无限、存在普遍、开发利用清洁以及经济性等优势,其开发利用将最终解决常规能源特别是化石能源带来的能源短缺、环境污染和温室效应等问题,符合人类社会可持续发展的理想绿色能源。 随着我国光伏设备装机容量在区域电网中所占的比重越来越高,光伏设备对电网安全稳定运行的影响日益显现。当电网故障或扰动引起发电场并网点的电压波动时,光伏发电设备的应对措施若不当,将加剧电网波动,甚至导致电网大面积瘫痪,带来无法估量的损失。因此,在大中型电站,必须能够实现低电压穿越,即保证光伏电站在电网故障期间保持不间断地并网运行。与此同时,针对不同情况,并网的要求与方式也会有所不同。这些都是大规模光伏并网发电需要进一步研究的课题。 传统上,电网更多的将光伏并网系统作为一个辅助电源甚至负荷考虑,当电网发生故障或其他特殊情况,造成并网点电压波动明显时,要求光伏系统立即停止对电网供电,以减小其对大电网的影响。然而,随着光伏发电渗透率的不断增加,其并入电网之后对当地配电网的影响越来越不容忽视,在电网发生故障时,大量光伏系统同时脱网,极易给主网造成冲击,使故障扩大化,影响向负载及时供电,延迟电网恢复时间。因此,在我国最新的并网标准中,对光伏电站的低电压穿越能力提出了要求,指出当电力系统事故或扰动引起光伏系统并网点电压跌落(Voltage dip 或 Voltage Sag)时,在一定的电压跌落范围和时间间隔内,光伏并网发电系统能够继续保持并网,必要时可以向电网注入一定的无功功率以抬升并网点电压,直至电网恢复正常。 因此,有必要研究电网发生故障,造成并网点电压跌落时光伏并网逆变器的低电压穿越技术,增强并网逆变器承受冲击的能力,通过补偿无功功率抬升并网点电压,帮助电网故障恢复,使光伏并网发电系统成为大电网的有力支撑,以实现分布式电源与大电网的协调控制[3]。 2、内容说明 3、仿真分析 4、参考论文 光伏并网发电系统的低电压穿越控制技术研究_陈晓婧.caj 光伏并网发电系统的低电压穿越控制策略_张明光.caj 光伏电池实用仿真模型及光伏发电系统仿真_焦阳.caj 光伏电池最大功率跟踪器的模糊控制及其应用_叶秋香.caj 单级式光伏并网发电零电压穿越技术研究_胡广.caj 基于模糊PID控制的光伏电池最大功率跟踪控制_梁奇峰.caj

实时读取屏幕识别指定颜色

背景 在GBA测评中有一个关卡是解锁(如下图所示),需要在转盘到指定区间时按下空格键,后期会越来快,难度比较高,因此想要提出一种能够识别屏幕、当转盘到达指定区间时自动按空格的方法。 思路 首先想到的思路就是通过颜色来进行区分,明显看到当轮盘转到指定区间会出现一种不同的颜色。如果能够识别这种颜色大概的数量,当超过一定阈值时就可以认为处于正确状态(即轮盘转到指定位置)。具体流程如下: 截取正确状态下特殊的颜色,识别该特殊颜色。截取正确状态与错误状态图片,分别识别两种状态下该颜色的数量,计算得到一个特殊颜色数量的阈值,当大于该阈值时就认为处于正确状态。捕获屏幕中的当前图片。识别当前图片中特殊的数量,与阈值做比较,判断是否属于正确状态。 方法 cv2提供有方法可以进行指定颜色提取,参照这篇文章使用OpenCV和Python检测特定颜色,关键代码如下: import cv2 # 读取图片 cv2img = cv2.imread(true_case_dir) # 格式转换 hsv = cv2.cvtColor(cv2img, cv2.COLOR_BGR2HSV) # 颜色区间选择 mask = cv2.inRange(hsv, lower_range, upper_range) # 通过按位与筛选得到指定颜色部分的图像 res = cv2.bitwise_and(cv2img, cv2img, mask=mask) ImageGrab提供有方法可以进行屏幕捕获,参照这篇文章用python进行屏幕截图,只用两行代码搞定,关键代码如下: from PIL import ImageGrab img = ImageGrab.grab() pyautogui提供有方法可以进行模拟键入空格,关键代码如下 import pyautogui as pg pg.press('space') tips 使用屏幕截取的图像,颜色格式为RGB;cv2在读取图像时默认格式为BGR读入,参照这篇文章关于opencv读取图片时,颜色发生变化后,如何修改 结果 使用目标颜色进行遮罩,可以得到以下结果。 代码 from PIL import ImageGrab import pyautogui as pg import numpy as np import cv2 import time def get_color_range(target_color_dir): "

Latex论文表格画法

参考 Latex论文表格画法 - 云+社区 - 腾讯云 1、基本表格画法 \begin{table}[htbp] 表示表格的开始。中括号中的 htbp 表示的是表格的浮动格式。当然这个基本参数不仅仅只是对表格有用。需要注意的是,一般使用 [htb] 这样的组合,这样组合的意思就是Latex会尽量满足排在前面的浮动格式,就是 h-t-b 这个顺序,让排版的效果尽量好。 [h] 表示将表格放在当前位置。 [t] 表示将表格放置在页面的顶部。 [b] 表示将表格放置在页面的底部。 [p] 将表格放置在一只允许有浮动对象的页面上。 \caption{my table} 表示表格的标题,该设置可以放在 \begin{tabular} \end{tabular} 环境的前后,使得表格的标题显示在表格的上面或下面。\label{table1} 表示表格名字,用于正文中引用表格。 若要插入跨栏图表, 可以用浮动环境 table* 。\begin{table}[htbp] 变成 \begin{table*}[htbp] ,\end{table} 变成 \end{table*} 。 \begin{tabular}[位置]{列} 和 \begin{tabular*}{宽度}[位置]{列} 设置表格环境参数格式。 \begin{tabular}{|c|c|c|} 。一个 c 表示有一列,格式为居中显示,这是列必选参数。通过添加 | 来表示是否需要绘制竖线。|| 表示画二条紧相邻的竖直线。 l 表示该列左对齐。 c 表示该列居中对齐。 r 表示该列右对齐。 如果只需要某几列的宽度发生改变,可以使用 p{宽度} (以 cm 为单位或以 pt 为单位或 0.2\textwidth)来代替 c 参数,但是表格中的文字是默认左对齐的。因此此时可以添加 p{宽度}<{\centering} 来改变文本对齐方式,但此时需要添加包 \usepackage{array} 。在这里 \centering 参数可以被 \raggedleft 和 \raggedright 替换,分别表示为左对齐和右对齐。

详解 —— 常见锁策略及ABA问题

目录 一、常见锁策略 1、悲观锁VS乐观锁 2、读写锁VS普通互斥锁 3、重量级锁VS轻量级锁 4.挂起等待锁VS自旋锁 5、公平锁VS非公平锁 6、可重入锁VS不可重入锁 小结 二、CAS 1、CAS的作用 2、ABA问题 三、synchronized的锁优化机制 1.锁膨胀/锁升级 2、锁粗化 3、锁消除 一、常见锁策略 一般来说,锁策略和普通的程序员基本没啥关系,跟实现锁的人有紧密的联系。这里提到的锁策略也不是局限于Java这门语言的,是适用于所有跟锁相关的情况的。 1、悲观锁VS乐观锁 悲观锁:预期锁冲突的概率很高 乐观锁:预期锁冲突的概率很低 悲观锁需要做的事情更多,那么效率也越低。乐观锁则刚好相反,做的事更少,效率更高 2、读写锁VS普通互斥锁 普通互斥锁:只有两个操作,加锁和解锁;只要两个线程针对同一个对象加锁,就会产生互斥。 读写锁:分成了三个操作:加读锁,加写锁,解锁;其中读锁和读锁之间是不会产生互斥关系的,而读锁和写锁以及写锁和写锁之间才会产生互斥关系。 3、重量级锁VS轻量级锁 重量级锁和轻量级锁的概念跟悲观乐观锁是有一定的重叠的,我们可以这样认为:乐观悲观锁是看待问题的态度,而这个态度决定的结果是重量级和轻量级锁。 重量级锁就是做了更多的东西,开销更大 轻量级锁做的事更少,开销更少 一般悲观锁都是重量级锁,乐观锁一般都是轻量级锁(当然这也不是绝对的) 在使用的锁当中,如果该锁是基于内核的一些功能来实现的,此时一般认为该锁是重量级锁;如果该锁是纯用户态(用户态代码更可控,也更高效)实现的,一般认为这把锁是轻量级锁。 4.挂起等待锁VS自旋锁 挂起等待锁往往是通过内核的一些机制来实现的,一般都比较重(重量级锁的典型实现);而自旋锁往往是通过用户态代码来实现的,一般较轻(轻量级锁的经典实现)。 5、公平锁VS非公平锁 公平锁:遵循先来后到的原则 非公平锁:不讲究先来后到,不管是不是先来的,获取这把锁的概率是相同的 6、可重入锁VS不可重入锁 同一个线程针对同一把锁连续加锁两次,如果不会造成死锁的就是可重入锁;反之就是不可重入锁。 小结 以synchronized来举例: 1.既是一个乐观锁也是一个悲观锁(根据锁冲突的激烈程度自适应) 2.不是读写锁,只是一个普通的互斥锁 3.既是重量级锁也是轻量级锁(同1) 4.轻量级的部分基于自旋锁,重量级部分基于挂起等待锁 5.是非公平锁 6.是可重入锁 二、CAS CAS是compre and swap的缩写,我们假设内从中的原数据V,旧的预期值A,需要修改的值B: 1.比较A与V是否相同 2.如果相同则将B写入V 3.返回操作是否成功 此处的CAS是CPU提供的一条指令,通过这一条指令(原子操作)就完成了上述的三个步骤。 1、CAS的作用 1.基于CAS可以实现一些原子类:Java标准库中提供了一组原子类,针对常用的例如:int、long....进行了封装,可以基于CAS进行修改,并且线程安全 2.基于CAS实现自旋锁 2、ABA问题 CAS中的关键就是先比较再交换。这里的比较其实是在比较当前值和旧值是否相同。如果这两个值相同就会认为中间并没有发生过变化。但是这里其实是有bug的,当前值和旧值相同,可能中间并没有发生变化,但还有一种极端情况就是中间变过,然后又变回来了。 举个例子: 假设滑稽去取款机取钱,账户上有100,滑稽想要取出50.但是当他按下取款按钮时取款机卡了一下,于是他又按了一下取款(一次取钱操作执行了两次,我们预期的效果是取走50还剩50),下面我们来分析一下执行的过程: 1. t1线程将账户余额读取至寄存器与原值100比较 2. t1发现原值与账户余额相等 3. 执行CAS操作将账户余额修改为50,返回取款成功 4. t2线程将账户余额读取至寄存器与原值100比较

系统发育树操作神器-TreeTools-持续更新

文章目录 TreeTools能做什么安装常用功能对系统发育树指定根查看是否是root tree按照叶子名称指定root按照Node名称root将root tree保存取消root 按照tip label或者node删除某些树枝转换成newick文本格式 TreeTools全部函数 系统发育树是生物学最常涉及到的内容,有多种软件(MEGA、iQtree、raxML等)以及多种算法(贝叶斯、最大似然法、邻接法等)生成多种格式(newick、nexus、phylip)的系统发育树。我们常常通过iTOL、ggtree进行可视化或者其他操作,这里介绍一个可以批量对树进行编辑、删除操作的R包-TreeTools。 TreeTools能做什么 TreeTools "是一个R软件包,它提供了用于创建、修改和分析系统发育树等多种功能。 主要功能包括:生成具有指定形状的树;分析树的形状;树的根系和提取子树;计算和描述节点支持度;计算祖先-后裔关系;从Newick、Nexus和TNT格式导入和导出树;以及分析进化树分块和clade信息。 它是对’ape’、'phangorn’和’phytools’等软件包的补充,旨在实现高效和稳健的功能,通常应用于非加权树(即那些没有边长的树)。 安装 从CRAN安装并载入包 install.packages('TreeTools') library('TreeTools') 或可从最新的github下载最新版 if(!require(devtools)) install.packages("devtools") # 借助devtools从github安装最新版包 devtools::install_github('ms609/TreeTools') 常用功能 对系统发育树指定根 RootTree():按照指定叶子(tips)root RootOnNode():按照内部节点(node)root UnrootTree():可以折叠一个根节点,而不会出现在预排序的树上使用 ape::unroot() 时遇到的未定义行为 首先需要说明一下什么是tips和node,如下图所示,tips是指的是每个参与建树的最小元素(t1-t8),是树的叶子;node则是指按照树的结构,一个node下有包含多个叶子或者子node(9-15)。 library('ape') library('TreeTools') tree <- PectinateTree(8) # 生成梳状的t1-t8叶子的树 tree plot(tree) # 绘制树 ape::nodelabels() # 添加node lables 因此,在root的时候可以按照这两种方式来指定。 查看是否是root tree TreeIsRooted(tree) [1] TRUE 按照叶子名称指定root 使用RootTree, plot(RootTree(tree, outgroupTips = 't8')) # t8 单个物种作为外支 plot(RootTree(tree, outgroupTips = c('t7', 't8'))) # t7、t8两个物种作为外支 plot(RootTree(tree, outgroupTips = c('t1', 't5', 't8'))) # t1、t5、t8 三个物种作为外支,注意由于这3个tips在原来的树结构中就是外侧,因此指定root后也不会变 按照Node名称root 指定t7、t8的祖先节点15作为root,并且不解析根节点,也就是说t8和t7不在合并在一起作为一支。

jupyter 无法定位程序输入点 Anacond\libary\bin\pythoncom37.dll(安装jupyter过程中报错)

先说起始原因 在安装完pytorch,后再pytorch中进行安装jupyter过程中进行报错 首先说安装 打开 anaconda prompt 进入pytorch环境 activate pytorch 输入以下代码 conda install nb_conda 然后安装过程中就报错 解决办法 定位出错文件位置 将pythoncom37.dll文件删除(直接删除,就到回收站,记得别动) 关闭上边窗口,再重新打开,然后在执行上边的安装 还会报错 再去回收站将文件还原 在安装 安装成功 然后输入 jupyter notebook 竟然还报错 没关系,我们直接点击确定 会发现浏览器直接跳出来 安装成功 虽然还有问题还存在,但是能使用。 如果以后不能使用了,再来更新。

单细胞测序数据整合(Seurat V4.0) vignettes

Introduction to scRNA-seq integration • Seurathttps://satijalab.org/seurat/articles/integration_introduction.html Introduction to scRNA-seq integration Compiled: January 11, 2022 Source: vignettes/integration_introduction.Rmd 基于R seurat v4.0的内置整合数据方法的R包进行的翻译学习 scRNA-seq整合简介 单细胞数据大量产出使得联合分析两个或多个单细胞数据集成为了独特的挑战。特别是在标准工作流下,识别存在于多个数据集中的细胞群可能会有问题。Seurat v4包含一组方法来匹配(或“对齐”)跨数据集的共享细胞群。这些方法首先识别处于匹配生物状态的跨数据集细胞对(“锚定”),既可用于校正数据集之间的技术差异(即批效应校正),也可用于对跨实验条件进行比较性scRNA序列分析。 ps: 锚定:选择相对保守的细胞群,计算样本间的差异成为迁移标准,继而将之用于校正数据集的差异。 下面,我们展示了Stuart*、Butler*等人2019年所述的scRNA-seq整合方法,以对静息状态或干扰素刺激状态下的人类免疫细胞(PBMC)进行比较分析。 整合目标 以下教程旨在向您概述使用Seurat整合程序可能对复杂细胞类型进行的比较分析。在这里,我们讨论几个关键目标: 构建“整合”数据以进行下游分析确定两个数据集中存在的细胞类型获得在对照细胞和干预细胞中都保守存在的细胞类型标记比较数据集,以找出基于特定细胞类型对刺激所产生的特异性反应 设置Seurat对象 为了方便起见,我们使用SeuratData包的ifnb数据集。 library(Seurat) library(SeuratData) library(patchwork) # install dataset InstallData("ifnb") # load dataset LoadData("ifnb") # split the dataset into a list of two seurat objects (stim and CTRL) ifnb.list <- SplitObject(ifnb, split.by = "stim") # normalize and identify variable features for each dataset independently ifnb.

哈夫曼树以及哈夫曼算法

目录 一、哈夫曼树的定义 二、哈夫曼树的特点 三、哈夫曼算法(构造哈夫曼树的方法) 四、哈夫曼树的构造过程 五、哈夫曼树构造算法的实现 一、哈夫曼树的定义 1、哈夫曼树:最优树即带权路径长度(WPL)最短的树 “带权路径长度最短”是在"度相同”的树中比较而得的结果,因此有最优二叉树、最优三叉树之称等等。 2、哈夫曼树:最优二叉树即带权路径长度(WPL)最短的二叉树 因为构造这种树的算法是由哈夫曼教授于1952年提出的,所以被称为哈夫曼树,相应的算法称为哈夫曼算法。 二、哈夫曼树的特点 1、满二叉树不一定是哈夫曼树 2、哈夫曼树中权越大的叶子离根越近 3、具有相同带权结点的哈夫曼树不唯一 三、哈夫曼算法(构造哈夫曼树的方法) 1、算法步骤 (1)根据n个给定的权值{W1, W2,...,Wn}构成n棵二叉树的森林,F={T1, T2,...,Tn},其中Ti只有一个带权为Wi的根结点。 构造森林全是根 (2)在F中选取两棵根结点的权值最小的树作为左右子树,构造一棵新的二叉树,且设置新的二又树的根结点的权值为其左右子树上根结点的权值之和。 选用两小造新树 (3)在F中删除这两棵树,同时将新得到的二叉树加入森林中, 删除两小添新人 (4)重复(2)和(3),直到森林中只有一棵树为止,这棵树即为哈夫曼树。 重复2、3剩单根 2、哈夫曼算法口诀:①构造森林全是根;②选用两小造新树;③删除两小添新人;④重复2、3剩单根。 四、哈夫曼树的构造过程 如下图所示 由上图的过程可得出以下三个结论: ①包含n棵树的森林要经过n-1次合并才能形成哈夫曼树,共产生n-1 个新结点。 ②包含n个叶子结点的哈夫曼树中共有2n- 1个结点。 ③经过n-1次合并产生n-1个新结点,且这n-1个新结点都是具有两个孩子的分支结点。 ④哈夫曼树的结点的度数为0或2,没有度为1的结点。 五、哈夫曼树构造算法的实现 1、顺序存储结构的节点类型以及存储结构图如下图所示 2、算法思路 3、算法描述 void CreatHuffmanTree (HuffmanTree HT, int n){ //构造哈夫曼树——哈夫曼算法 if(n<= 1) return; m=2*n-1; //数组共2n-1个元素 HT= new HTNode[m+1]; //0号单元未用,HT[m]表示根结点 for(i=1;i<=m;++i){ //将2n-1个元素的lch、 rch、 parent置为0 HT[i].lch=0; HT[i].rch=0; HT[i].parent=0; } for(i=1;i<=n;++i) cin>>HT[i].weight; //输入前n个元素的weight值 //初始化结束,下面开始建立哈夫曼树 for(i=n+1;i<=m;i++){//合并产生n-1个结点——构造Huffman树 Select(HT, i-1, s1, s2); //在HT[k](1≤k≤i-1)中选择两个其双亲域为0, //且权值最小的结点并返回它们在HT中的序号s1和s2 HT[s1].

超分之DRCN

这篇文章是2016年的CVPR,虽然目前来说在性能和计算效率上并不佳,但是在当时来说是一种通过较少模型参数加深网络来提升SR表现力的新方法——Deeply-Recursive Convolutional Network(DRCN)。不同于通过增加卷积层数来加深模型,DRCN通过一个递归子模块在共享模型参数下加深网络(类似于循环神经网络RNN),从而可以提取到更多不同层级的用于重建高分辨率图像的特征。 参考文档: ①文章转载于博主暖风的一篇文章——超分算法DRCN。 Deeply-Recursive Convolutional Network for Image Super-Resolution Abstract1 Introduction2 Related Work3 Proposed Method3.1 Basic Model3.2 Advanced Model3.3 Training 4 Experiments4.1 Datasets4.2 Training Setup4.3 Study of Deep Recursions4.4 Comparisons with SOTA Methods 5 Conclusion Abstract 作者采用递归的方式来增加超分网络的深度,该结构不仅带来了深度优势来增加表现力,而且由于共享参数来较少计算复杂度和存储资源。作者指出本文提出的DRCN实现了较深的网络,实现了16个递归块。但是类似于RNN,这种递归结构天然存在梯度消失或者梯度爆炸问题,故作者又引入了递归监督、skip connection来缓解递归结构难以训练的问题。DRCN就是一种基于递归结构,使用递归监督和跳跃连接的SISR深度网络模型,其在Set4、Set14、B100、Urban100上较之前的算法拥有更好的表现能力。 1 Introduction 发现问题: 超分就是恢复图像细节的过程,而这些细节的推断很大程度取决于网络的感受野大小,较大的感受野拥有更多的信息,可以被用来重建图像。而感受野的增加往往取决于网络的深度,为了增加深度,一般的做法是堆叠卷积层或者块(residual block、dense block等),但是这种做法会增加网络的模型量,而且在有限的数据集下很难训练出较高表现力的网络参数。 Note: 在超分中,一般不使用池化层,因为池化会丢失图像信息,而细节对于图像重建是至关重要的。 解决办法: DRCN为了增加感受野,也是朝着增加网络深度方向走的。具体而言,为了增加感受野同时避免较大的模型参数,作者提出了一个递归结构,类似于RNN中的细胞,该递归结构重复使用同一套参数来不断提取特征信息,作者指出DRCN的感受野可以达到 41 × 41 41\times 41 41×41,比SRCNN的 13 × 13 13\times 13 13×13要高出3倍还要多!但是递归结构会存在梯度爆炸或梯度消失现象,因此光一个递归结构还不足以实现一个高表现力的超分网络,故作者在递归子网络的基础上,增加了递归监督和跳跃连接来缓解这一现象。 Note: Skip connection除了缓解梯度消失爆炸问题以外,还可以进行多特征信息的跨层融合以及迫使网络学习残差结构部分的信息。 小结一下: DRCN的核心就是通过递归结构来加深网络,提取更多层次的特征信息;用递归监督和跳跃连接缓解梯度爆炸或梯度消失问题。 2 Related Work 略

PyQt5 环境搭建,并写一个模型转换工具,并导出为exe格式

一,环境配置 1.安装pyqt 注:基于python3.8.5 pip install PyQt5 pip install PyQt5-tools 2.wheel下载 存在没有安装wheel的情况,所以先安装wheel。同上一步,打开命令提示符,键入pip install wheel,即可自动下载wheel。 3.Pyinstaller下载 同上一步,打开命令提示符,键入pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz(这里不建议使用pip install pyinstaller指令,因为就算成功安装,打包也会出现错误),耐心等待安装完成 4.pip install auto-py-to-exe 解决Connection to pypi.org timed out问题 pip install 想要下载的库名 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 5.pycharm配置qtdesigner 6.编写pyqt.ui 7.用PyUIC转换为py代码 8.编写槽函数,实现功能 9.使用auto-py-to-exe打成exe格式

(一)Eclipse学习总结

一、Eclipse版本问题 1、Eclipse IDE for Java EE Developers 该版本集成了Java ee开发常用插件,方便动态web网站开发。适合Java web开发者使用。集成了XML编辑器、数据库查看工具,提供jsp可视化编辑器。 2、Eclipse IDE for Java Developers 该版本适合Java开发者,集成CVS、Git、XML编辑器、Mylyn、Maven integration和WindowBuilder等插件 3、Eclipse-JDK ---Eclipse-JDK 就是JDK包,只是加了一个前缀,里面包含众多的java基础库,支撑java运行 ---Eclipse-java 普通的eclipse编辑工具,一个编辑器,方便开发 ---Eclipse-jee,在普通eclipse编辑器基础上进行了集成和强化,能够方便开发J2EE类型的项目。 二、配置问题 1、查看jdk包 Window--->Java--->Installed JREs 、 三、java的几种工程 普通工程--->动态web工程--->maven普通工程--->聚合工程 1、普通工程 包的平铺与继承 eclipse 智能提示 智能填充,需要写入main函数,直接输入main即可显示其他内容 从外部复制包到lib文件夹后,需要将包加入到项目中,右键----build path --- add to build path 多出了reference library 外部参考库 src 与resource: 一般src中存放java代码,resource中存放配置文件 2、配置Tomcat (1)下载appache-tomccat包 (2)eclipse中服务器环境设置 (3)选择与下载对应的版本,下载Tomcat解压,选择压缩包中bin的上一级 (4)所有项目应该发布到Tomcat解压文件夹(也即为上面导入的路径)的webapps文件下,需要在eclipse中找到修改的窗口 3、动态Web工程 不同编辑器下面默认生成的文件不同 eclipse:webcontent myeclipse:webroot idea:webapp 4、maven工程 (1)更改jdk的版本 项目上面右键----build path----configure build path----删去以前的版本 Add library---JRE System Library---next---execution environment

Python Qt GUI设计:QTimer计时器类、QThread多线程类和事件处理类(基础篇—8)

目录 1、QTimer计时器类 2、QThread多线程类 3、事件处理类 一般情况下,应用程序都是单线程运行的,但是对于GUI程序来说,单线程有时候满足不了需求。例如,如果需要执行一个特别耗时的操作,在执行过程中整个程序就会卡顿,效果就非常不理想或者Windows系统也认为程序运行出错,自动关闭了程序。要解决这种问题就涉及多线程的知识。 一般来说,多线程技术涉及三种方法,其中第一种是使用计时器模块QTimer;第二种是使用多线程模块QThread;最后是使用事件处理的功能。 1、QTimer计时器类 如果要在应用程序中周期性地进行某项操作,比如周期性地检测主机的CPU值,则需要用到QTimer(定时器),QTimer类提供了重复的和单次的定时器。要使用定时器,需要先创建一个QTimer实例,将其timeout信号连接到相应的槽,并调用start()。然后,定时器会以恒定的间隔发出timeout信号。 当窗口控件收到timeout信号后,它就会停止这个定时器。这是在图形用户界面中实现复杂工作的一个典型方法,随着技术的进步,多线程在越来越多的平台上被使用,最终QTimer对象会被线程所替代。 QTimer类中的常用方法如下表所示: QTimer类中的常用信号如下表所示: 通过一个示例,了解QTimer计时器类的使用方法,效果如下所示: 示例中,初始化一个定时器,把定时器的timeout信号与showTime()槽函数连接起来。使用连接的槽函数显示当前时间,并在标签上显示系统现在的时间。单击“开始"按钮,启动定时器,并使"开始"按钮失效。单击“结束"按钮,停止定时器,并使“结束"按钮失效。 实现代码如下所示: from PyQt5.QtWidgets import QWidget, QPushButton , QApplication ,QListWidget, QGridLayout , QLabel from PyQt5.QtCore import QTimer ,QDateTime import sys class WinForm(QWidget): def __init__(self,parent=None): super(WinForm,self).__init__(parent) self.setWindowTitle("QTimer demo") self.listFile= QListWidget() self.label = QLabel('显示当前时间') self.startBtn = QPushButton('开始') self.endBtn = QPushButton('结束') layout = QGridLayout(self) # 初始化一个定时器 self.timer = QTimer(self) # showTime()方法 self.timer.timeout.connect(self.showTime) layout.addWidget(self.label,0,0,1,2) layout.addWidget(self.startBtn,1,0) layout.addWidget(self.endBtn,1,1) self.startBtn.clicked.connect( self.startTimer) self.endBtn.clicked.connect( self.endTimer) self.setLayout(layout) def showTime(self): # 获取系统现在的时间 time = QDateTime.

CSS第三部分——过渡与动画

一、过渡(transition) 过渡(transition)是CSS3中具有颠覆性的特性之一,我们可以在不使用Flash动画或JavaScript的情况下,当元素从一种样式变换为另一种样式时为元素添加效果。 过渡动画:是从一个状态渐渐的过渡到另外一个状态。 可以让我们页面更好看,更动感十足,虽然低版本浏览器不支持(ie9以下版本)但是不会影响页面布局。 经常和:hover一起搭配使用。 语法:transition:要过渡的属性 花费时间 运动曲线 何时开始; 属性(必须写):想要变化的css属性,宽度高度,背景颜色,内外边距都可以。如果想要所有的属性都变化过渡,写一个all就可以了。如果是多个属性(非全部属性)可以写完一个后用逗号隔开写第二个。花费时间(必须写):单位是 秒(必须写单位),比如:0.5s。运动曲线:默认是ease(逐渐慢下来,默认),linear(匀速),ease-in(加速),ease-out(减速),ease-in-out(先加速后减速)何时开始:单位是秒(必须写单位)可以设置延迟触发时间。默认是0s。 二、动画 1.2D转换 2D转换基于二维坐标系,向右是x轴正方向,向下是y轴正方向。 1)移动(translate) 语法:transform:translate(x,y); 或者分开写: 语法: transform:translateX(n); transform:translateY(n); 注意: 定义2D转换中的移动,沿着X和Y轴移动元素translate最大的优点:不会影响到其他元素的位置translate中的百分比单位是相对于自身元素的translate:(50%,50%)对行内标签没有效果 可以实现居中,配合定位使用:top:50%;transform:translateY(-50%); <html> <head> <style> .one, .two, .three, .four { width: 250px; height: 250px; float: left; } .one { background-color: aqua; transform: translate(100px,80px); } .two { background-color: crimson; } .three { background-color: chartreuse; transform: translateX(50px); /* transform: translateY(150px); */ /* translateX和translateY一次只能写一个 */ } .four { background-color: fuchsia; } </style> </head> <body> <div class="

Win10+Anaconda3+python3.6+cuda10.1+cudnn7.6.0+pytorch1.7.0+torchvision0.8.0安装

Win10+Anaconda3+python3.6+cuda10.1+cudnn7.6.0+pytorch1.7.0+torchvision0.8.0安装 一、下载Anaconda二、安装python3.6三、安装Cuda四、安装cudnn五、安装pytorch六、报错处理1. 添加cuda环境变量报错2. torch和torchvision出现False3.torch.cuda.is_available()在Anaconda Prompt中为True,在pycharm中为False4.pycocotools报错 一、下载Anaconda 1.打开Anaconda清华镜像网站:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 选择合适的Anaconda版本,python3.6对应的是Anaconda3-5.2.0,5.3以后的都是python 3.7的,按需求下载。如下图所示: 2.下载好后打开exe文件,点击next。 3.点击I agree 4.选择Just Me 5.默认安装路径,点击next 6.勾选第二条,点击Install,等待安装。 二、安装python3.6 1.下载好Anaconda后,打开Anaconda prompt,输入如下语句,进行安装: conda create -n pytorch python=3.6 # pytorch为虚拟环境名,可任意取 安装过程中出现如下选择,都选择y。 2.验证是否安装成功:输入语句 conda activate pytorch 出现如下界面,即表示安装成功。 三、安装Cuda 1.首先查看电脑的英伟达显卡支持的cuda版本,具体步骤如下: ①打开控制面板,点击硬件和声音 ②点击NVIDIA控制面板 ③点击上方的帮助,再点击系统信息。 ④点击组件,可查看支持的cuda版本 2.下载cuda:https://developer.nvidia.com/cuda-toolkit-archive 选择显卡对应版本的cuda,请确保C盘有足够的空间。 3.选择相应的配置进行下载。 4.下载好后,双击exe文件 ①默认路径 ②点击同意并继续 ③选择精简 ④勾选I understand… ⑤等待安装完成 ⑥测试安装成功: cmd输入: nvcc -V 出现如下界面,即安装成功。 5.添加环境变量(参考:https://zhuanlan.zhihu.com/p/158900161) 打开电脑->属性->高级系统设置->环境变量: ①将下面的内容新建到系统变量之中: CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.1 CUDA_LIB_PATH = %CUDA_PATH%\lib\x64 CUDA_BIN_PATH = %CUDA_PATH%\bin CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64

【OK】创建新节点实现四则运算及单元测试

创建新节点实现四则运算 一.所需的几个文件二.各个文件的代码1.package.json文件2.four-arithmetic.js3.four-arithmetic.htmlremote-server.html4.remote-server.js5.test文件夹下的fourarithmeti_spec.js文件(用于单元测试)(貌似已经实现了)6.mocha测试 三.单元测试(一).最简单方法(二).第二种方法1.具体的程序实现:2.程序的简单详解:3.结束和结果 一.所需的几个文件 package.json four-arithmetic.js four-arithmetic.html remote-server.html remote-server.js test文件夹下的fourarithmeti_spec.js文件(用于单元测试) 二.各个文件的代码 1.package.json文件 //package.json文件是不能有注释的,使用时要将注释全部去掉; { "name": "node-red-contrib-example-my-four-arithmetic", "version": "1.0.0", "description": "", "main": "index.js",//如果想要在终端运行,需要主函数是对应的.js文件;; //(手动)在脚本部分的 package.json 文件中添加一个测试脚本。 要在测试目录中运行所有带有 _spec.js 前缀的文件; "scripts": { "test": "mocha \"test/**/*_spec.js \"" }, //测试脚本完毕; //以下是构建node-red节点所需要的部分; "node-red": { "nodes": { "four-arithmetic": "four-arithmetic.js", "remote-server": "remote-server.js" } }, //构建node-red节点部分添加完毕; "author": "", "license": "ISC", //一下是单元测试时才会出现、用到的部分; //执行过程:在VS Code中打开package.json文件,ctrl+`打开终端,定位到桌面上的Creat文件(项目文件)所在路径,执行以下命令) //"npm install node-red-node-test-helper node-red --save-dev"(不带双引号)即可 "devDependencies": { "node-red": "^2.2.2", "node-red-node-test-helper": "^0.2.7" } //单元测试的依赖添加完毕; } 2.

vue2.x+vantUI搭建移动端并适配750设计稿

文章目录 前言一、学习目标二、创建vue项目1.windows环境下搭建vue开发环境2.安装和引入vant3.适配处理 前言 本文在已安装node、npm、vue-cli等前提下进行,请确保自己的node -v,npm -v和vue -V是正常显示版本的,具体操作可查看下面链接 一、学习目标 搭建vue移动端项目框架 vantUI按需引入开发 设配750设计稿 二、创建vue项目 1.windows环境下搭建vue开发环境 windows环境下搭建vue开发环境 2.安装和引入vant vant官网 # 安装 vue2.x:npm i vant@latest-v2 -S vue3:npm i vant -S # 引入——按需引入(按需引入之后就不能再进行全局引入) npm i babel-plugin-import -D // 在.babelrc 中添加配置 { "plugins": [ ["import", { "libraryName": "vant", "libraryDirectory": "es", "style": true }] ] } 3.适配处理 //vue页面,只有div适配了 <template> <div class="main"> <div class="fz">适配了吗?</div> <van-button plain type="info" size="small">一个按钮</van-button> <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> <van-cell v-for="item in list" :key="

Vue中使用Mock模拟get和post请求

Mock模拟post请求 很多时候,前端的开发需要配合后端接口数据,但是后端开发未完成的时候,前端不能苦等,可以先用mock来进行数据模拟和调试。 使用方法如下: 1、安装mockjs npm install mockjs 2、在vue项目中mock创建文件夹 创建mock文件夹之后.还需要创建json文件.作为pots请求数据源 3、在index.js中写如下代码 一般情况是在src文件夹下创建api文件夹,用来管理整个项目的接口数据,然后我们需要接着在api文件夹下创建index.js,作为入口请求文件 const Mock = require('mockjs'); //格式: Mock.mock( url, post/get , 返回的数据); 下面的userInfo是指mock目录下的json目录下的userInfo.json文件 Mock.mock('/user/userInfo', 'get', require('./json/userInfo.json')); Mock.mock('/api/addgoods', 'post', require('./json/userInfo.json')); // 下边这个模拟post请求也行 /*Mock.mock('/api/addgoods', 'post', function (option) { let $name=JSON.parse(option.body).name; if($name){ return Mock.mock({ status: 200, message: '提交成功!!!' }) }else{ return Mock.mock({ status: 400, message: '未提交参数' }) } })*/ 在userInfo.json中写如下代码,记着这个是.json格式的不是js格式的,注意json格式一定要标准! { "result": "success", "data": { "userSn": "3785521", "username": "不求甚解", "age": 25, "imgUrl": "https://avatar.csdn.net/8/5/D/3_bocongbo.jpg" }, "

MySQL基础学习(六)——聚合函数

目录 1、聚合函数类型 (1)AVG(x) (2)SUM(x) (3)MAX(x) (4)MIN(x) (5)COUNT(x) 2、聚合函数的基本使用 (1)单列分组 (2)多列分组 (3)WITH ROLLUP 关键字 3、HAVING的使用 聚合函数:作用于一组数据,并对一组数据返回一个值。 1、聚合函数类型 (1)AVG(x) SELECT AVG(salary) FROM employees (2)SUM(x) SELECT SUM(salary) FROM employees (3)MAX(x) SELECT MAX(salary) FROM employees (4)MIN(x) SELECT MIN(salary) FROM employees (5)COUNT(x) SELECT COUNT(salary) FROM employees 计算表中的记录数有三种方法: count(*) count(1) count(具体字段):不一定对 因为计算指定个数的字段时,是不计算null值 SELECT COUNT(commission_pct) FROM employees 2、聚合函数的基本使用 (1)单列分组 可以使用GROUP BY子句将表中的数据分成若干组 SELECT column FROM table [ WHERE condition] [ GROUP BY group_by_expression] [ ORDER BY column]; SELECT department_id,avg(salary),sum(salary) FROM employees GROUP BY department_id 此时就会以department_id进行分组。展示每个组的最大最小值

自动化测试之:python各种测试用库

测试开发 来源:https://www.jianshu.com/p/ea6f7fb69501 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装。 链接selenium - web UI自动化测试。 链接 --推荐mechanize- Python中有状态的程序化Web浏览。链接selene - 使用Python + Ajax支持+ PageObjects + Widgets进行简明UI测试 链接hitch - 基于服务的应用程序的高级集成测试框架。链接Needle - Css 自动化测试框架。链接seleniumbase - 端到端自动化测试框架。链接pytest_splinter - pytest spinter和selenium集成。 链接Browsermob Proxy - Browsermob Proxy的python包装器。 链接Selenium-Requests - 扩展Selenium WebDriver类以包含请求库中的请求函数,同时完成所有需要的cookie和请求头处理。链接 移动测试自动化 appium - 移动端UI自动化测试。 链接 --推荐uiautomator- 安卓UI自动化测试。 链接ATX - 智能手机自动化工具。支持iOS,Android,WebApp和游戏。 网易出品 链接 --推荐uiautomator2- Android Uiautomator2 Python Wrapper。 链接 --推荐facebook-wda Facebook WebDriverAgent Python Client Library (not official) 可用于IOS应用测试。 链接 --推荐 Windows UI测试自动化 Winium.

ARM 编译器 C 库启动和初始化

1 介绍 本文档描述了 C 库启动代码和在使用 ARM 编译器编译的应用程序启动期间可能调用的初始化函数。该文档概述了启动代码中的功能的作用以及它们存在的原因。您可以使用此文档来验证您的应用程序的启动代码。 1.1 版本 本文档描述了 ARM 编译器的启动代码。启动代码中的函数可能会在工具链的不同版本和补丁之间发生变化。本文档不保证库启动代码在后续版本或工具链补丁中的持续运行。 1.2 补充阅读 本节列出了 ARM 和第三方的出版物。请参阅 Infocenter,http://infocenter.arm.com,以访问 ARM 文档。 1.2.1 ARM 出版物 以下文档包含与本文档相关的信息: • ARM 编译器工具链 ARM 处理器开发软件 (ARM DUI 0471) • ARM 编译器工具链 ARM C 和 C++ 库和浮点支持参考 (ARM DUI 0492) • 使用 ARM 的 ARM 编译器工具链C 和 C++ 库和浮点支持 (ARM DUI 0475) • ARM 编译器工具链链接器参考 (ARM DUI 0493)。 2 启动代码 嵌入式应用程序需要在用户定义的 main() 函数启动之前进行初始化序列。这称为启动代码或引导代码。 ARM C 库包含启动应用程序所需的预编译和预汇编代码部分。链接您的应用程序时,链接器会根据应用程序从 C 库中包含必要的代码,以便为应用程序创建自定义启动代码。

关于acrobat登录弹窗解决办法

最近acrobat出了点问题,得重装,然后找了好多帖子重新安装。 六维空间: 鹏少资源: @vposy 教程是一个个尝试,但是过不了半小时都不行了。起初我以为是卸载问题,没有卸载干净,就按照 下面两个方式,但是还是不行。 卸载原来的acrobat,并删除这两个文件夹:“C:\Program Files (x86)\Common Files\Adobe\SLCache”,“C:\ProgramData\Adobe\SLSto 后来发现是实时更新的问题,参考帖子win10系统禁止Adobe photoshop自动联网验证的操作步骤 - 电脑公司 (dngswin10.com) 禁用了几个app 现在就好了,不弹窗了。万岁万岁万岁。

离散LQR与iLQR的推导思路

离散LQR与iLQR的推导思路 一、最优控制最优控制定义数学基础里程碑工作 二、LQR问题LQR定义极小值原理方法求解动态规划方法求解两种方法的比较 三、iLQR框架 一、最优控制 最优控制定义 首先介绍一下LQR的背景,也就是最优控制,最优控制的背景在之前介绍HJB方程的时候也有介绍:HJB方程的一些简单理解和过程推导。假设现在有一辆自动驾驶汽车,我们要设置控制方法,让其沿着指定路线到达某一个位置。要完成这项工作,首要的任务就是了解这辆车当前的“状态”和关于“控制”的变化规律:比如我们一般最关心当前的位置和车速,通过当前位置和速度去进行控制,比如打方向盘,踩刹车,踩油门等,从而又会引起当前位置和车速的变化。与此同时,我们可能还希望省油,车速平稳,不超速等要求。要满足以上的需求,需要合理的设计控制方法,以上问题我们就可以把它写成一个最优控制问题。 最优控制问题的四个基本元素: 状态方程:描述系统(自动驾驶汽车)的运动学或动力学方程 x ˙ ( t ) = f ( x ( t ) , u ( t ) , t ) , t ∈ [ t 0 , t f ] . x ( t 0 ) = x 0 \dot{x}(t)=f(x(t),u(t),t) , t\in[t_0,t_f]. x(t_0)=x_0 x˙(t)=f(x(t),u(t),t),t∈[t0​,tf​].x(t0​)=x0​ 容许控制:控制与状态满足的约束 u ∈ U , x ∈ X . u\in U , x\in X. u∈U,x∈X. 目标集:在结束时间 t f t_f tf​,被控对象的状态 x ( t f ) x(t_f) x(tf​)应符合的条件

MySQL基础学习(五)——单行函数

目录 一、数值函数 1、ABS(x):返回x的绝对值 2、SIGN(x):返回x的符号 3、PI():圆周率的值 4、CEIL(x)、CEILING(x):向上取整 5、FLOOR(x):向上取整 6、LEAST(n1,n2.....n):返回列表中的最小值 7、GREATEST(n1,n2.....n):返回列表中的最大值 8、MOD(x,y):返回x除以y之后的余数 9、RAND():返回0~1的随机值 10、RAND(x):返回0~1的随机值,其中x的值用作种子值,相同的x值会产生相同的随机数 11、ROUND(x):返回一个对x的值进行四舍五入后,最接近于x的整数 12、ROUND(x,y):返回一个对x的值进行四舍五入后最接近x的值,并保留到小数点后面Y位 13、TRUNCATE(x,y):返回数字x截断为y位小数的结果 14、SQRT(x):返回x的平方根。当x的值为负数时,返回NULL 二、角度和弧度互换函数 1、RADIANS(x):将角度转化为弧度,其中,参数x为角度值 2、DEGREES(x):将弧度转化为角度,其中,参数x为弧度值 三、三角函数 1、SIN(x):返回x的正弦值,其中,参数x为弧度值 ​2、ASIN(x):返回x的反正弦值,即获取正弦为x的值。 ​3、COS(x):返回x的余弦值,其中,参数x为弧度值 ​4、ACOS(x):返回x的反余弦值,即获取余弦为x的值。 5、TAN(x):返回x的正切值,其中,参数x为弧度值 ​6、ATAN(x):返回x的反正切值,即返回正切值为x的值 ​7、ATAN2(m,n):返回两个参数的反正切值 ​8、COT(x):返回x的余切值,其中,x为弧度值​ 四、指数与对数 1、POW(x,y),POWER(X,Y):返回x的y次方 2、EXP(X):返回e的x次方 3、LN(X),LOG(X):返回以e为底的x的对数 4、LOG10(X):返回以10为底的x的对数 5、LOG2(X):返回以2为底的x的对数 五、进制间的转换 1、BIN(x):返回x的二进制编码 2、HEX(x):返回x的十六进制编码 3、OCT(x):返回x的八进制编码 4、CONV(x,f1,f2):返回f1进制数变成f2进制数 六、字符串函数 1、ASCI(S):返回字符串s中的第一个字符的ASCII码值 2、CHAR_LENGTH(s):返回字符串s的字符数。 3、LENGTH(s):返回字符串s的字节数,和字符集有关 4、CONCAT(s1,s2,.......sn):连接s1,s2....n为一个字符串 5、CONCAT_WS(x,s1,s2,......sn):同CONCAT(s1,s2,...)函数,但是每个字符串之间要加 6、INSERT(str, idx, len,replacestr):将字符串str从第idx位置开始,len个字符长的子串替换为字符串replacestr 7、REPLACE(str, a, b):用字符串b替换字符串str中所有出现的字符串a 8、UPPER(s)或UCASE(s):将字符串s的所有字母转成大写字母 9、LOWER(s)或LCASE(s):将字符串s的所有字母转成小写字母 10、LEFT(str,n):返回字符串str最左边的n个字符 11、RIGHT(str,n):返回字符串str最右边的n个字符 12、LPAD(str, len, pad):用字符串pad对str最左边进行填充,直到str的长度为len个字符 13、RPAD(str ,len, pad)用字符串pad对str最右边进行填充,直到str的长度为len个字符 14、LTRIM(s)去掉字符串s左侧的空格 15、RTRIM(s)去掉字符串s右侧的空格 16、TRIM(s)去掉字符串s开始与结尾的空格 17、TRIM(s1FROM s)去掉字符串s开始与结尾的s1 18、TRIM(LEADING s1 FROM s)去掉字符串s开始处的s1

C++实用案例:整数四则运算计算器

前言 很多学习C++的人都想过要编一个计算器吧,有可能你没有想过,但你肯定对这个感兴趣。如果你再CSDN上搜一下,出来的一定是双栈啊,class啊什么的,因此你看不懂,所以你感觉没必要copy下来,因为自己不会。那这期我会带大家深度剖析用简单的字符串就能解决的整数四则运算计算器。 一、整体框架 ①思路框架 一个合格的计算器,就必须有处理多项式的功能,那么我们遇到一个多项式,会怎么算呢?比如:3 * 3 + 2 / 2 * 5 - 4 * 10 / 5. 首先,我们应该想到的是将多项式化为单项式,也就是以+ -为分界线: 比如:3*3 + 2/2*5 + 4*10/5 然后依次算出: 比如:9 + 5 + 8 最后求和: 比如:22 ②代码框架 代码框架大概是这样的: 我们用math函数算单项式,main分离多项式。 #include<......> using namespace std; int math(string n){ 算单项式;(分离各位) } int main(){ 分离多项式; 依次调用math() 输出ans; } 二、 自定义函数math详解 刚刚我们了解到要用一个自定义math函数来求一个单项式的值,那我们来具体分析一下: 在程序中计算一个单项式,该怎么做呢? 设这个字符串变量名为a,则: char now='*'; string s; for(int i=0;i<a.size();i++){ if(当前一位是符号){ 统计目前s的数据,并根据now做相应的运算,然后清零,并统计当前符号至now }else{//当前一位是数字 统计这一位的数据,加到字符串s中 } } 于是,我们补全代码,就是:

实践数据湖iceberg 第二十九课 如何优雅高效获取flink的jobId

系列文章目录 实践数据湖iceberg 第一课 入门 实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式 实践数据湖iceberg 第三课 在sqlclient中,以sql方式从kafka读数据到iceberg 实践数据湖iceberg 第四课 在sqlclient中,以sql方式从kafka读数据到iceberg(升级版本到flink1.12.7) 实践数据湖iceberg 第五课 hive catalog特点 实践数据湖iceberg 第六课 从kafka写入到iceberg失败问题 解决 实践数据湖iceberg 第七课 实时写入到iceberg 实践数据湖iceberg 第八课 hive与iceberg集成 实践数据湖iceberg 第九课 合并小文件 实践数据湖iceberg 第十课 快照删除 实践数据湖iceberg 第十一课 测试分区表完整流程(造数、建表、合并、删快照) 实践数据湖iceberg 第十二课 catalog是什么 实践数据湖iceberg 第十三课 metadata比数据文件大很多倍的问题 实践数据湖iceberg 第十四课 元数据合并(解决元数据随时间增加而元数据膨胀的问题) 实践数据湖iceberg 第十五课 spark安装与集成iceberg(jersey包冲突) 实践数据湖iceberg 第十六课 通过spark3打开iceberg的认知之门 实践数据湖iceberg 第十七课 hadoop2.7,spark3 on yarn运行iceberg配置 实践数据湖iceberg 第十八课 多种客户端与iceberg交互启动命令(常用命令) 实践数据湖iceberg 第十九课 flink count iceberg,无结果问题 实践数据湖iceberg 第二十课 flink + iceberg CDC场景(版本问题,测试失败)

OpenCV(C++版本)基础相关(5):多边形填充与绘制、鼠标操作与响应、图像像素类型的转换与归一化、图像的放缩与插值、图像的旋转

文章目录 十六、多边形填充与绘制16.1 quickopencv.h16.2 QuickDemo.cpp16.3 test.cpp 十七、鼠标操作与响应17.1 quickopencv.h17.2 QuickDemo.cpp17.3 test.cpp 十八、图像像素类型的转换与归一化18.1 quickopencv.h18.2 QuickDemo.cpp18.3 test.cpp 十九、图像的放缩与插值19.1 quickopencv.h19.2 QuickDemo.cpp19.3 test.cpp 二十、图像的旋转20.1 quickopencv.h20.2 QuickDemo.cpp20.3 test.cpp 知识来源:哔哩哔哩。以下内容仅为学习笔记,不做其他用途。 续前节OpenCV(C++版本)基础相关(4):通道的分离与合并、图像色彩空间转换、图像像素值统计、图像几何形状的绘制、随机数与随机颜色 十六、多边形填充与绘制 知识点: fillPoly(canvas, pts, Scalar(255, 0, 255), 8, 0);//填充多边形。参数1为图像,参数2为多边形顶点,参数3为颜色。polylines(canvas, pts, true, Scalar(0, 0, 255), 2, LINE_AA, 0);//绘制多边形。参数1为图像,参数2为多边形顶点,参数3为矩形是否闭合,参数4为颜色,后面为线型参数。drawContours(canvas, contours, -1, Scalar(0, 0, 255), -1);//多边形轮廓绘制。参数1表示在哪个底图上绘制;参数2表示图像轮廓顶点;参数3指定绘制轮廓list中的哪条轮廓,如果是-1,则绘制其中的所有轮廓;参数4为颜色;参数5的-1为填充模式。 16.1 quickopencv.h #include<opencv2/opencv.hpp> using namespace cv; class QuickDemo //QuickDemo对象 { public: void polyline_drawing_demo(Mat &image); }; 16.2 QuickDemo.cpp #include<quickopencv.h> #include<iostream> void QuickDemo::polyline_drawing_demo(Mat &image) { Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3);//定义画布 Point p1(100, 100);//5个坐标点 Point p2(350, 100); Point p3(450, 280); Point p4(320, 450); Point p5(80, 400); std::vector<Point>pts;//容器方式载入 pts.

【Matlab读取图片提取RGB分量并将图片转化为二维三维数据作图】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 情况说明一、读取图片二、对图片进行处理1. 图片转成数据2. 画三维二维图像 总结 情况说明 提示:这里可以添加本文要记录的大概内容: 在拿到一张图片时,想使用matla读取图片并做相应分析时,比如提取CCD获得的光强信息时,可以从bmp、tif或png图片格式中分解出RGB红绿蓝分量的图片,分别进行分析,把分解出的R值图,导入matlab中作三维或者二维图像进行数据分析。 提示:以下是本篇文章正文内容,下面案例可供参考 一、读取图片 先使用Matlab进行图片的读取 clc clear close all %---------读取图片----------% image = imread('图片名称.tif'); figure('Name','读取的图片') imshow(image) %显示读取的图片 %---------分别提取图片的r,g,b并分别显示rgb和原图----------% image = imread('图片名称.tif'); imager = image(:,:,1); imageg = image(:,:,2); imageb = image(:,:,3); figure('Name','图片的RGB图和原图') subplot(221); imshow(imager); title('r') subplot(222); imshow(imageg); title('g') subplot(223); imshow(imageb); title('b') subplot(224); imshow(image); %---------对r,g,b分量加和----------% figure('Name','图片的RGB图和') % imshow(imageg+imageb+imager);%这是rgb加和 二、对图片进行处理 将读取好的图片用Matlab转化成三维二维数据进行分析 1. 图片转成数据 点击主页—导入数据—选择自己要导入的图片—完成 导入数据 由图片生成的三维数组 2. 画三维二维图像 代码如下(示例): d1=double(三维数据名称(:,:,1));%d1是二维数据了 figure mesh(d1) %根据三维数组画三维图 colormap jet %三维图颜色 figure contour(d1) %二维平面图 a1=double(三维数据名称(:,88,1)); %88是图像峰值的中心位置,可根据三维图大概确定,此时a1是一维数据了 a1=a1(10:20); %截取前十个数据赋给a1,此时a1长度为11 x=-1:0.

【vscode插件】安装Tabnine使vscode能像JetBrains全家桶一样追踪方法,类,变量(不支持查看源码)

前言: 我们在使用vscode时,在通过类.方法()时,我们没办法直接通过ctrl+单击进入到对应模块中的类及调用的方法,就类似JetBrains旗下的软件idea,pycharm等,都可以直接通过ctrl+单击进入到对应模块下类的方法,不过不用担心,vscode强大的插件可以帮助我们完成,下面就说下如何下载和使用Tabnine插件来帮助我们完成这个动作. 1.安装插件Tabnine 在扩展商店中搜索Tabnine 选择上图的插件,点击安装就好,注意它看它的title,上面会写支持那些语言,js,python,ruby这些都有安装完成之后,会在右下脚出现提示,让你重启vscode,重启就好了 2.使用 windows用户可以按住ctrl然后把鼠标移动到对应方法上,如果此时发现鼠标样式改变,变成小手,说明安装成功.成功后你可以单击,它会自动跳转过去,如果有两个同名文件会让你选择Mac用户可以按住command(⌘)然后移动鼠标到对应方法上,如果发现鼠标样式变为小手,说明安装成功.成功后可以单击方法,会跳转过去,如果有同名的文件会让你选择,你根据实际情况选择就好.注意: 要等初始化完成,在查看效果 此插件只对自己写的包引入后可追踪,不支持查看源码.

dubbo实现同时请求所有节点并返回

实现该功能需要先了解dubbo的运行流程,在请求的时候需要获取所有可用的服务invoker,通过实现LoadBalance和AbstractClusterInvoker都能获取到所有的invoker,但是LoadBalance是返回一个合适的invoker,但是AbstractClusterInvoker是容错机制的实现父类,此处会针对LoadBalance返回的invoker执行调用,如果失败在去执行对应的策略,所以我们可以对AbstractClusterInvoker方法进行重新。 在源码中有一个ForkingCluster类 也是会全部调用一遍,但是只是返回最快的一个请求结果,所以我们实现一个自己的类 import org.apache.dubbo.rpc.RpcException; import org.apache.dubbo.rpc.cluster.Directory; import org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker; import org.apache.dubbo.rpc.cluster.support.wrapper.AbstractCluster; public class MyForking extends AbstractCluster { //命名为myForking public final static String NAME = "myForking"; @Override public <T> AbstractClusterInvoker<T> doJoin(Directory<T> directory) throws RpcException { return new MyForkingClusterInvoker<T>(directory); } } import com.google.common.collect.Lists; import org.apache.dubbo.rpc.Invocation; import org.apache.dubbo.rpc.Invoker; import org.apache.dubbo.rpc.Result; import org.apache.dubbo.rpc.RpcException; import org.apache.dubbo.rpc.cluster.Directory; import org.apache.dubbo.rpc.cluster.LoadBalance; import org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker; import java.util.List; public class MyForkingClusterInvoker<T> extends AbstractClusterInvoker<T> { public MyForkingClusterInvoker(Directory<T> directory) { super(directory); } @Override protected Result doInvoke(Invocation invocation, List<Invoker<T>> invokers, LoadBalance loadbalance) throws RpcException { //存放所有集群节点的返回结果 List list = Lists.

访问者模式及其应用场景

访问者模式(Visitor Pattern)指将作用域某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作。借用《Java设计模式》中的例子说明:在医院医生开具药单后,划价人员拿到药单后会根据药单上的药品名称和数量计算总价,而药房工作人员则根据药品名称和数量准备药品。如下图所示: 那么药品处方可以看成是一个药品信息的集合,里面包含了一种或多种不同类型的药品信息,不同类型的工作人员在操作统一药品信息集合时将提供不同的处理方式,而且可能还会增加新类型的工作人员来操作处方单。这就是访问者模式的典型应用场景。 一、访问者模式介绍 1.1 访问者模式的结构 访问者模式是一种较为复杂的行为型模式,它包含访问者(Visitor)和被访问元素(Element)两个主要组成部分。下面就来看看访问者模式的具体结构: Visitor:抽象访问者,为对象结构中的每个具体元素类声明一个访问操作ConcreteVisitor1、ConcreteVisitor2:具体访问者,实现抽象访问者声明的操作Element:抽象元素,定义一个accept()方法ConcreteElement1、ConcreteElement2:具体元素,实现抽象元素中的accept()方法,在accept()方法中调用访问者的访问方法以便完成对一个元素的操作。ObjectStructure:对象结构,它是一个元素的集合,用于存放元素对象,并且提供了遍历其内部元素的方法。Client:客户端 1.2 访问者模式的实现 根据上面的类图,首先是抽象访问者,为每一种具体类型对象都会提供一个访问方法: public interface Visitor { void visit(ConcreteElementA elementA); void visit(ConcreteElementB elementB); } 接下来是具体访问者,实现抽象访问者的声明方法 public class ConcreteVisitor1 implements Visitor{ @Override public void visit(ConcreteElementA elementA) { System.out.println("ConcreteVisitor1 访问 ConcreteElementA: " + elementA.operationA()); } @Override public void visit(ConcreteElementB elementB) { System.out.println("ConcreteVisitor1 访问 ConcreteElementB: " + elementB.operationB()); } } public class ConcreteVisitor2 implements Visitor { @Override public void visit(ConcreteElementA elementA) { System.out.println("ConcreteVisitor2 访问 ConcreteElementA: "

Matlab论文插图绘制模板第21期—三维散点图(特征渲染赋色)

在上一篇文章中,分享了Matlab三维散点图的绘制模板: 假如我们有这样一组数据,其每个离散点(x, y, z)都对应着一个特征,比如高程、温度、湿度、密度、曲率、坡度、粗糙度等。 如果我们想在绘制这些离散点的同时,根据这些特征进行赋色,应该怎么操作呢? 来看一下成品效果: 特别提示:Matlab论文插图绘制模板系列,旨在降低大家使用Matlab进行科研绘图的门槛,只需按照模板格式添加相应内容,即可得到满足大部分期刊以及学位论文格式要求的数据插图。如果觉得有用可以分享给你的朋友。 模板中最关键的部分内容: 1. 数据准备 此部分主要是读取数据,定义x,y,z以及特征向量f。 % 读取数据load data.mat% x坐标x = data(:,1);% y坐标y = data(:,2);% z坐标z = data(:,3);% 特征向量f = data(:,3); 2. 颜色定义 由于需要根据特征的大小进行赋色,所以应采用渐变色配色。 这里直接用之前分享的addcolorplus工具的渐变色: %% 颜色定义map = addcolorplus(300); 3. 三维散点图(特征渲染赋色)绘制 使用‘scatter3’命令,绘制未经美化的三维散点图。 figurescatter3(x, y, z, 5, f, 'Marker', '.')hTitle = title('Scatter3Feature');hXLabel = xlabel('XAxis');hYLabel = ylabel('YAxis');hZLabel = zlabel('ZAxis'); 4. 细节优化 为了插图的美观,使用colormap命令赋上之前选择好的颜色。 % 赋色colormap(map) 进一步,对坐标区边框、视角、颜色条、字体字号等进行调整: % 坐标区调整axis equalset(gca, 'Box', 'on', ... % 边框 'XGrid', 'on', 'YGrid', 'on', .

【Java学习笔记】API:I/O流

File类 File类中每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径) 使用File可以做到: (1)访问其表示的文件或目录的属性信息,例如:名字,大小,修改时间等等 (2)创建和删除文件或目录 (3)访问一个目录中的子项 但是File不能访问文件数据 快捷键:光标指向->Alt+回车->自动import ctrl+alt+L 自动格式化(自动对齐代码) 使用File访问文件及其属性信息 创建File时要指定路径,而路径通常使用相对路径。 相对路径的好处在于有良好的跨平台性。 实际开发中我们很少使用绝对路径,虽然清晰明了,但是不利于跨平台;绝对路径是从根开始的(E盘、D盘等盘符开始的:"C:/Users/TEDU/IdeaProjects/CGB2202_SE/demo.txt") ".\\demo.txt"写法与"./demo.txt"相同,但是为了更好的跨平台性,使用后面一种写法(因为linux只支持"/"普通斜杠) "./"或"."是相对路径中使用最多的,表示“当前目录”,而当前目录是哪里取决于程序运行环境而定,在idea中运行java程序时,这里指定的当前目录就是当前程序所在的项目目录。 "./"在相对路径中是可以忽略不写的,默认就是从"./"开始的 无参方法 getName():获取名字------输出String类型 length():获取长度------输出long类型 补充:在一个文件中,字母数字占用1个字节,汉字占用3个字节 在java的char数据类型中,1个字符占用2个字节 canRead():是否可读----输出boolean类型 canWrite():是否可写----输出boolean类型 isHidden():是否隐藏----输出boolean类型 import java.io.File; File file1 = new File("c:/xxx/xxx/xx/xxx.txt"); //新建了一个File实例,表示一个绝对路径下的文件(引用名file1装的是一个地址) File file = new File("./demo.txt"); //新建了一个File实例,表示一个相对路径下的文件(引用名file的地址指向./demo.txt文件) //获取名字 String name = file.getName(); System.out.println(name); //获取文件大小(单位是字节) long len = file.length(); System.out.println(len+"字节"); //是否可读可写 boolean cr = file.canRead(); boolean cw = file.canWrite(); System.out.println("是否可读"+cr); System.out.println("是否可写"+cw); //是否隐藏 Boolean ih = file.isHidden(); System.out.println("是否隐藏"+ih); 创建一个新文件 无参方法:

在ubuntu18安装php7.4

php7.4版本已经出来几年了,但是ubuntu 18 里不能直接通过sudo apt install php7.4命令安装。 因此,安装php7.4时首先需要添加PHP PPA存储库。 1.添加PHP PPA存储库 首先,在终端添加命令 sudo apt-get update 接着,在终端添加命令 sudo apt install software-properties-common 最后,在终端添加命令 sudo add-apt-repository ppa:ondrej/php 下面是我在ubuntu18安装的截图 2.安装php7.4 在终端输入命令 sudo apt install php7.4 但提示:Do you want to continue? [Y/n] 时,输入Y就可以了。 安装截图如下: 3.等php7.4安装完成后,一般还需要安装php的扩展包,下面安装常用的扩展包。 在终端输入命令: sudo apt install php7.4-fpm php7.4-mysql php7.4-xml php7.4-curl php7.4-gd php7.4-json php7.4-mbstring php7.4-intl php7.4-bcmath php7.4-bz2 php7.4-zip 还有其他的扩展包,自己根据具体情况来安装,安装命令为 sudo apt install php7.4-xxx (xxx要替换成具体的安装包名称)