1.使用Copyonwrite改造本地缓存
2.**出门是附近什么动物
3.ç©¿è¶ç±»ççµå½±ï¼
4.成品网站源码入口隐藏通道很多劲爆资源?半职业玩家不敢怨尤认可都是最新一手信息!
5.开发一个app 需要多少钱
使用Copyonwrite改造本地缓存
背景
周四下午正在吃的小姐下午茶,偷闲刷了一会手机(光明正大的),突然就有客服中心的**姐找上门来说xxx操作又出现失败了,但是多点几次又没问题了(之前也出现过,可是代码中没有任何异常处理和日志的输出很难排查,没办法老代码,前任写的我也没办法,只能加上等复现的时候再看看),看着**姐焦急的表情,下午茶瞬间就不香了,找bug去!
产生原因定位在rancher上输入账号找到对应的服务,根据关键字找到相关日志映入眼帘的是java.lang.NullPointException跟随报错的行数找到了相关代码块:
if(StringUtils.isNotEmpty(feeSetting.getFileId())){ returnschoolService.deal(sysConfigService.getString("url"));}其中报错的是
schoolService.deal(sysConfigService.getString("url"));定位问题,应该是调用StringgetString(Stringkey);空指针导致的.
分析相关代码:
publicStringgetString(Stringkey){ if(configs==null){ initConfig();}returnconfigs.get(key);}其中initConfig()的实现:
privatevoidinitConfig(){ synchronized(lock){ if((configs==null)||configs.isEmpty()){ configs=newHashMap<String,String>();//从db中加载到configsloadSysConfig();}}}其中configs是个成员变量
privatestaticMap<String,String>configs=null;复制代码查了一下数据库,有对应的数据存在,不是数据的问题
getString(Stringkey)接口内部没报错,说明这个程序没报错
抓了抓头(有点意思),只有Map中没有相应的数据才有可能报空指针,查找了相关方法,找到了如下代码:
publicvoidreload(){ if((configs!=null)&&!configs.isEmpty()){ configs.clear();this.initConfig();}}只有一处调用该方法
@ComponentpublicclassSysConfgMQListenerimplementsMessageListenerConcurrently{ protectedfinalLoggerlog=LoggerFactory.getLogger(SysConfgMQListener.class);@AutowiredprivateISysConfigServicesysConfigService;@OverridepublicConsumeConcurrentlyStatusconsumeMessage(List<MessageExt>msgs,ConsumeConcurrentlyContextcontext){ log.info("SysConfgMQListenerretrieving...");for(MessageExtmsg:msgs){ log.info("messageExt,body:{ }",newString(msg.getBody()));this.sysConfigService.reload();}returnConsumeConcurrentlyStatus.CONSUME_SUCCESS;}}这是RocketMq的消费者这里调用了,而且还是广播模式,所有节点都能消费,这个Mq的生产者是在后台触发刷新时候产生的.
真相只有一个首先触发Mq的消费,导致Map刷新,重新加载调用reload()
当执行configs.clear();之后Map就是一个空对象,没有任何数据
如果这个时候是有多个线程访问getString(Stringkey)获取到的值就是null
改造第一个想到的是用Redis来替换,但是很快就自我否定了,这个接口在没有触发刷新机制的前提下运行了几年是好好的,而且基础配置放Redis的话过期时间的设置不好判断,并且还要多个IO的传递,性能没有本地的Map好.
第二个想到的方案就是在getString(Stringkey)方法中加锁,这只能当做下下策
正在一筹莫展的时候,突然灵光一闪,这不是跟注册中心很像吗?各个客户端去拉取数据,而nacos为了高性能就是用了Copyonwrite的思想来实现的,越想越行,干!
代码改造如下:
publicvoidreload(){ if((configs!=null)&&!configs.isEmpty()){ //先清除再加载会出现,在两个操作之间请求的接口获取都为空//configs.clear();//this.initConfig();this.reloadForConfigs();}}其中this.reloadForConfigs();
privatevoidreloadForConfigs(){ Map<String,String>newConfigs=newHashMap<>();try{ List<Config>datas=configDao.listConfigs();if(datas!=null){ for(Configcf:datas){ newConfigs.put(cf.getKey(),cf.getValue());}}}catch(Exceptione){ LogUtil.exception(log,e);}if(CollectionUtil.isNotEmpty(newConfigs)){ //替换旧的this.configs=newConfigs;}}这改造完上线之后,跟踪了一段时间日志中也没发现空指针(**姐也不来找我了-_-,不开森),有那么一点点的成就感.
总结开发的时候要考虑多线程和并发场景
遇到问题别慌,认真分析
好的方案不是一蹴而就的
多读好的代码如框架源码,不断的积累,现在用不上,某一时刻就用上了
作者:董懂**出门是什么动物
1. 标题:《MATLAB源码-第期》基于matlab的变色龙群优化算法CSA)机器人栅格路径规划,输出做短路径图和适应度曲线。源码(发布时间:-- ::)
摘要:变色龙群优化算法(Chameleon Swarm Algorithm,附近CSA)是小姐一种新颖的群体智能优化算法,其灵感来源于自然界中变色龙捕食和社交行为的源码spark源码调试独特适应能力和策略。该算法主要应用于解决复杂的附近优化问题。
2. 标题:《变色龙童绘历险》评测:巧妙地借鉴(发布时间:-- ::)
摘要:《变色龙童绘历险》是小姐一款借鉴了《蔚蓝》灵感的平台跳跃游戏,其地图设计有着诸多相仿的源码设计痕迹。然而,附近这款游戏拥有自己独特的小姐玩法机制,这让《蔚蓝》没有成为它的源码全部,玩起来也别有一番风味。附近
3. 标题:全新手绘风独立游戏《变色龙童绘历险》将于6月6日上线(发布时间:-- ::)
摘要:《变色龙童绘历险》是小姐一款最新的手绘画风独立游戏,正式定档在6月6日上线steam。源码该游戏以吸引人的故事情节及创新性的体感操作模式赢得了众多玩家的喜爱。玩家将化身为一只诞生于孩子画作的变色小龙,游走在丰富多彩的幻想世界中,接受各种各样的api接口源码ddos挑战。
4. 标题:Meta 推出新型多模态 AI 模型“变色龙”(Chameleon),挑战 GPT-4o,引领多模态革命(发布时间:-- ::)
摘要:Meta 近日发布了一款名为“变色龙”(Chameleon)的新型多模态 AI 模型,旨在挑战 OpenAI 的 GPT-4o,并刷新了当前的技术标准(SOTA)。这款拥有 B 参数的模型通过 万亿 token 的训练,不仅展现了强大的跨模态处理能力,还预示着多模态模型未来的发展方向。
5. 标题:木偶剧《变色龙》用中国语言讲述世界故事(发布时间:-- ::)
摘要:改编自俄国文学巨匠契诃夫同名小说的android交友app源码木偶剧《变色龙》日前在上戏上演。上戏木偶专业师生通力合作,进行了本土化改编,将故事发生的时间和地点放在中国古代,在不失经典本意下,深入浅出地让观众理解到该剧精髓:要做一个真诚的人!”
ç©¿è¶ç±»ççµå½±ï¼
æãéè¿å²ãããåç®çå°ãããææ¥è¾¹ç¼ãããæºä»£ç ãããæ å§ä¹äººãçç1ããåç®çå°ã
ãåç®çå°ãæ¯è¿å å°Â·æ¯æ´¾çãå½¼å¾Â·æ¯æ´¾çå å¼èè¢ç¼å§å¹¶æ§å¯¼çä¸é¨ç§å¹»ææçï¼ç±ä¼æ¡Â·éå ãèæ·æ¯åªå ã诺äºÂ·æ³°åãå¼é·å¨ ·æ¯å¡ç¦ãä¼èæ¯Â·è©¹æ£®ä¸»æ¼ãå½±çæ¹ç¼èªç½ä¼¯ç¹Â·A·海å è±å å°è¯´ãä½ ä»¬è¿äºè¿éå°¸ãï¼è®²è¿°ä¸ä¸ªæ¶é´ç¹å·¥ç©¿æ¢æ¶ç©ºæåé»æ¢ç¯ç½ªçç¥ç§ç»ç»æåï¼ä»ç©·å°½ä¸ç追踪ä¸åè¿ç¯çç¸ç¯ï¼ä½æç»ç´é¢å¯¹ææ¶ï¼çç¸å´è®©ä»ç ç®ç»èã
2ããææ¥è¾¹ç¼ã
ãææ¥è¾¹ç¼ãï¼Edge of Tomorrowï¼æ¯éæ ¼Â·éæ¼æ§å¯¼çç§å¹»å¨ä½çµå½±ï¼ç±æ±¤å§Â·å é²æ¯åè¾ç±³è·å¸æç¹ç主æ¼ï¼æ¹ç¼èªæ¨±åæ´å¹´æèæ¥æ¬è½»å°è¯´ãAll You Need Is Killãã该ç以ç¥ç§å¤æçç©è¢å»å°ç为èæ¯ï¼å°æ ¡æ¯å°Â·å¯å¥é¦æ¬¡åºæå°±âæææ²åºâæ¨ççºç²ï¼ä½ä»å´ç±äºæç§ä¸æåå éè·æ°çï¼å¨ä¸æ¬¡ä¸æ¬¡ççæ»å¾ªç¯ä¸ï¼æ¯å°è¶æ¥è¶æäºå¶ææ¹æ³ï¼æç»èµ°åèå©ã
3ããæºä»£ç ã
ãæºä»£ç ãæ¯ç±éè¯Â·ç¼æ¯æ§å¯¼ï¼æ°å ·å伦åå°ãç»´æ·æ³ç±³å ãç±³æå°Â·è«å¨æ±ç人èè¢åºæ¼ãå½±çäºå¹´4æ1æ¥å¨ç¾å½ä¸æ ãå½±ç讲述äºä¸ä½å¨é¿å¯æ±æ§è¡ä»»å¡çç¾å½ç©ºåé£è¡åæ¯å°ç¹Â·å²èææ¯ï¼éæ¥æ¶åç°èªå·±æ£å¤å¨ä¸è¾åå¾èå å¥çç«è½¦ä¸ï¼å¹¶å°±æ¤ç»åçä¸ç³»åæå¿å¨éçäºä»¶ã
4ããéè¿å²ã
ãéè¿å²ãæ¯ä¸é¨ä¸é©åä½åºåçå¥å¹»åå§çµå½±ãç±éæ£éæ§å¯¼ï¼æ¨åå§ãéæéãå½äºè¾ã鹿æä¸»æ¼ ãå½±ç讲述äºä¸ä½ä¸æ¬è太太ä¸å¯æè®®å身为å¦é¾å¥³ååï¼ä»¥æ°èº«ä»½åå°æ¥å¸¸çæ´»ï¼å¼åçä¸ç³»åå¼ç¬çéçå¥å¹»æ äºã
5ããæ å§ä¹äººã
ãæ å§ä¹äººãæ¯ç±é å ·è·å¤æ¢ å°æ§å¯¼çç§å¹»ç±æ çï¼ æ°ç德·è±æï¼è¨æ·波èï¼é»å®Â·å é²æ ¼ç主æ¼ãå½±ç讲述äºç±æ°çå¾·æ®æ¼çå²ç·ä¸»äººå ¬å°¼è«Â·è¯ºä¼¯è¿ªæç»åçä¸åºç©¿è¶ç离ç°å®å ³ç³»è迷失çç±æ æ äºï¼å¨è®°å¿é¿æ²³ä¸å¯»æ¾ä¸ä¸ªç·äººç人çä¹è°ã
成品网站源码入口隐藏通道很多劲爆资源?半职业玩家不敢怨尤认可都是最新一手信息!
成品网站源码入口隐藏通道是一款能够让用户们免费使用VIP会员视频订阅功能,成品网站源码入口隐藏通道支持用户们一键订阅精品精选音视频的多功能手机软件,成品网站源码入口隐藏通道支持用户们免费看各类超清晰的国外影视站源码丰富音视频,你能够很好一键点播各类超清晰的品质**大片,你可以非常方便的看视频打发消遣时间。每天都可以邀请身边的小伙伴们一起进入相同的视频直播房间,在里面能够让你很好的进入喜欢的女神主播的房间中和**姐们面对面聊天。用户可以使用视频剪辑功能截取视频的精彩片段,通过视频音频渲染服务和字幕调整功能,可以让你自由调整喜欢的字幕音频,喜欢这款视频软件就赶快下载到手机上面吧!
开发一个app 需要多少钱
根据年月的仿土豪漫画源码最新数据,开发一个app大概需要几万到几百万不等。开发一个安卓app软件,需要考虑因素很多。如果是一款功能简单不是很全面,客户几乎没有什么要求的APP,只需要让美工对前台ui页面进行一定程度的修改,最短一两天就能完成的,费用大致需要几千元。
而开发一个完整的安卓app,简单的需要几万左右,复杂的几十上百万,安卓难度不比IOS大,很多团队都可以承包。
扩展资料:
软件维护
1、安装App后没有用的安装包apk及时删除
手机和个人计算机有很大的相似之处,在维护方法方面很多是相通的。现在许多经过手机厂商改进过的ROM都十分贴心,一般安装完某个App后会提醒是否删除安装包,如果没有其他用途了就可以立即删除,如果手机没有此项功能,也可手动删除。
2、定期清理缓存
长期使用社交应用会产生非常多的缓存,而且应用自己不会删除,长时间会积累许多的缓存,占用存储空间且造成卡顿,因此,可以使用手机设置里的应用程序管理里的清除缓存功能删除。还可以使用有清理垃圾功能的系统维护App。也可以卸载后重装一次。
3、使用时及时关闭不用的程序
虽然安卓系统会在内存紧张时自动结束一些进程,但在实际的应用中,应该有未雨绸缪的意识,平时就随手在多任务切换界面结束当前用不到的App,释放手机当时的运行内存,不仅有利于手机高效的运转,也防止其后台软件运行时的流量白白流失。
百度百科-APP