面试官:实现一个带值变更通知能力的Dictionary

如题, 你知道字典KEY对应的Value什么时候被覆盖了吗?

最近大家都在追.Net6 update,咱还是保持节奏,通用语言聊技术。

没背景说个铲铲

       上文中 数据获取组件维护了业务方所有(在用)的连接对象,DBA能在后台无侵入的切换备份库。

如何主动清空.NET数据库连接池?

上文中:DBA在为某个配置字符串切换新的连接信息时,SDK利用ClearPool(DBConnection conn)方法清空与这个连接相关的连接池。

清空的时机:维护在用连接的字典键值发生变更。

今天本文就来实现一个带值变更通知能力的字典

五毛钱的编程实践

关键字:变更 通知 字典

using System;
using System.Collections.Generic;
using System.Text;
namespace DAL
{public class ValueChangedEventArgs<TK> : EventArgs{public TK Key { get; set; }public ValueChangedEventArgs(TK key){Key = key;}}public class DictionaryWapper<TKey, TValue>{public object  objLock = new object();private Dictionary<TKey, TValue> _dict;public event EventHandler<ValueChangedEventArgs<TKey>> OnValueChanged;public DictionaryWapper(Dictionary<TKey, TValue> dict){_dict = dict;}public TValue this[TKey Key]{get { return _dict[Key]; }set{lock(objLock){try{if (_dict.ContainsKey(Key) && _dict[Key] != null && !_dict[Key].Equals(value)){OnValueChanged(this, new ValueChangedEventArgs<TKey>(Key));}}catch (Exception ex){Console.WriteLine($"检测值变更或者触发值变更事件,发生未知异常{ex}");}finally{_dict[Key] = value;}}}}}
}

旁白:

1.定义值变更事件OnValueChanged 和变更时传递的事件参数ValueChangedEventArgs<TKey>2.如何定义值变更,也就是如何判定值类型、引用类型的相等性          #equalhashcode#3.DictionaryWapper的表征实现也得益于C#索引器特性


订阅值变更事件

var _dictionaryWapper = new DictionaryWapper<string, string>(new Dictionary<string, string> { });
_dictionaryWapper.OnValueChanged += new EventHandler<ValueChangedEventArgs<string>>(OnConfigUsedChanged);
//----
public static void OnConfigUsedChanged(object sender, ValueChangedEventArgs<string> e)
{Console.WriteLine($"字典KEY:{e.Key}的值发生了变更,请注意...");          
}

最后像正常Dictionary一样为DictionaryWapper添加键值对:

 _dictionaryWapper[$"{dbConfig}:{connectionConfig.Provider}"] = connection.ConnectionString;

五毛钱的结尾语

OK,本文实现了一个带值变更通知能力的字典,算是一个刚性需求。

通过本文,重温了C# event 、索引器的用法,基础不牢,地动山摇。

 性感豹纹

  三分钟掌握共享内存 & Actor并发模型

 如何主动清空.NET数据库连接池?

 鹅厂二面,Nginx回忆录

 Redis分布式锁抽丝剥茧

 看过这么多爆文,依旧走不好异步编程这条路?

 谁说docker-compose不能水平扩展容器、服务多实例?

 Kubernetes探针踩坑记

 难缠的布隆过滤器,这次终于通透了

由于微信公众号修改了推送规则,为便于大家及时收到我的不定时推送,加星标、一键三连互动、加好友(hihuangjun),不失为良策,就酱!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

颠覆认知!完美赌徒,到底是如何用数学打造经济神话?!

▲ 点击查看说起世界上最会赚钱的数学家&#xff0c;非詹姆斯西蒙斯莫属。1938年&#xff0c;西蒙斯出生于美国的马萨诸塞州&#xff0c;是一个鞋厂的儿子。在其他的孩子&#xff0c;还在听童话故事的时候&#xff0c;西蒙斯就已经开始展露出惊人的数学天赋了。3岁的时候&…

abs函数的使用方法 oracle_SQL Server 常用函数使用方法

1、SubString()&#xff1a;用于截取指定字符串的方法。该方法有三个参数&#xff1a;参数1&#xff1a;用于指定要操作的字符串。参数2&#xff1a;用于指定要截取的字符串的起始位置&#xff0c;起始值为 1 。参数3&#xff1a;用于指定要截取的长度。select substring(abcde…

高考落榜怎么办,奉劝学弟学妹们一些事情,请一定要擦亮眼睛

在目前这个社会情况Java技术是当前社会的一个热门专业&#xff0c;无论是pc端还是移动端对java的需求都是最多的&#xff0c;大学生学java正好顺应时代的发展&#xff0c;不仅有钱途还有前途&#xff0c;Java也适合零基础的人学习。 最近看见一句话 高考不努力&#xff0c;学习…

神仙打架!一人公开单挑全欧洲数学家,却惨遭4位数学家大反转,66年的难题被一晚破解......

全世界只有3.14 % 的人关注了青少年数学之旅两点之间直线最短&#xff0c;这家喻户晓的数学名言&#xff0c;就算是学渣也能倒背如流。但学渣们不知道的是&#xff0c;这条直线并不是最快的。为了让学渣们真正理解这句话&#xff0c;今天&#xff0c;超模君决定科普一波起源关于…

基于事件驱动架构构建微服务第4部分:repositories

原文链接&#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part4-repositories/在本文中&#xff0c;我将实现Repositories的命令端。存储库属于Clean架构的接口适配器在这一步中&#xff0c;我将开始实现基础设施的命令端&#x…

小松

之前做过一次小小的介绍(没看过的请参看此文&#xff1a;闲话小松)&#xff0c;相信不少老朋友应该都知道我是谁了。还不认识我的朋友可以称呼我小松(这名号有年头了&#xff0c;听习惯了^_^)&#xff0c;当然你喜欢怎么喊都成&#xff1a;)偶是个是理想主义的倡导者&#xff0…

vlan后 出现 outlook 正在试图从服务器检索数据

vlan后 出现 outlook 正在试图从服务器检索数据 cisco vlan outlook 正图试从Microsoft Exchange Server 检索数据。cisco 3750 vlan outlook is retrieving data from Microsoft Exchange Server mail.abc.com 最近对公司的网络按需要划分了基出802.1q的VLAN&#xff0c;…

二面京东,面试官直接问我JVM,我心里一阵暗爽~

二面京东&#xff0c;面试官直接问我JVM&#xff0c;我心里一阵暗爽~简直了&#xff0c;hhhh明人不说暗话&#xff0c;直接进入主题&#xff01;&#xff01;&#xff01;一、什么是JVM二、JAVA代码编译和执行过程类加载机制类执行机制三、JVM内存管理和垃圾回收垃圾回收按照基…

最后的代课老师———漆红玉[转]

1月31日凌晨6点我们从渭源县城出发&#xff0c;天还未亮。1月的甘肃干冷干冷的&#xff0c;我们是在半路上接的漆老师&#xff0c;刚开始我以为是寇筱茜老师的一个熟人&#xff0c;路上寇老师才和我说漆老师也是代课老师。寇筱茜老师有一句名言&#xff1a;每一个代课老师都有一…

ae渲染出现错误是什么问题_[Switch]解决OPENWRT路由,使用UU加速器等出现相同IP,DNS解析错误问题...

本文在之上添加DNS解析错误的解决方案解决 NS openwrt路由器 开腾讯 UU之类的加速器无法上网的问题​tieba.baidu.com将子网掩码转换为二进制&#xff0c;即为11111111.11111111.0.0&#xff0c;1有16位&#xff0c;令x16&#xff1b;IP地址若为aaa.bbb.ccc.ddd&#xff0c;设置…

程序员从入门到升级,或许可以看一看这几个公众号

全世界只有3.14 % 的人关注了青少年数学之旅快节奏的现代社会中&#xff0c;每个人都疲于奔命&#xff0c;“丧、累、太难了”已成为成年人的生活主题。难得的闲暇时间&#xff0c;公众号是不可或缺的消遣方式。但我们被海量数据淹没&#xff0c;越来越多的公众号只是消耗情绪&…

C# 向Main函数传递参数(程序启动时传递参数)

代码 staticvoidMain(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false);if(args.Length!0) { Application.Run(newF_WebIE(args[0])); }else{ Application.Run(newF_WebIE(null)); } }注意&#xff1a;不能把 参数 s…

12c oracle 修改内存_关于Oracle数据库12c 新特性总结

概述今天主要简单介绍一下Oracle12c的一些新特性&#xff0c;仅供参考。参考&#xff1a;http://docs.oracle.com/database/121/NEWFT/chapter12102.htm#NEWFT003https://docs.oracle.com/database/121/NEWFT/chapter12101.htm#NEWFT3481、不可见字段(Invisible columns)在 12c…

华为面试官问我:你真的明白Java垃圾回收器吗?我生气了!!(︶︿︶)

[第一阶段]&#xff1a;串行垃圾回收器&#xff1a;jdk1.3.1之前Java虚拟机仅仅只支持Serial收集器 [第二阶段]&#xff1a;并行垃圾回收器&#xff1a;随着多核的出现&#xff0c;Java引入了并行垃圾回收器&#xff0c;充分利用多核性能提升垃圾回收效率 [第三阶段]&#xff1…

看OpenCV如何在python中实现图像检测!

全世界只有3.14 % 的人关注了爆炸吧知识在我们生活中&#xff0c;常见的图像处理软件有Adobe Photoshop、Adobe Illustrator等。然而&#xff0c;并非只有软件才能实现图像处理&#xff0c;通过编程手段也是能实现的&#xff01;今天&#xff0c;小天将要带着大家走进计算机视觉…

dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人

是不是大家也会觉得代码审查里面审查代码格式化问题是无意义的&#xff0c;但是不审查又觉得过不去&#xff1f;是否有个专门的工具人&#xff0c;用来协助修复代码格式化的问题&#xff1f;本文来安利大家一个特别好用的方法&#xff0c;使用 dotnet 完全开源的专业格式化工具…

[导入]ASP.NET MVC的WebSite模式(with mvc membership)

一直极其讨厌web application,感觉不干净&#xff0c;不符合个人喜好完美纯净的代码的癖好&#xff0c;再加上不是单页程序集&#xff0c;性能也大打折扣。所以这次在决定用asp.net MVC写这个网站的时候花了一点时间移到Web site模式下面来。 其实不是很麻烦&#xff0c;修改We…

学妹面试拼刀刀被问Java策略模式是什么鬼?哈哈哈哈

学妹面试拼刀刀被问Java策略模式是什么鬼&#xff1f;哈哈哈哈 学妹跟我讲怎么机智面对的 我呆了&#xff01; &#x1f9fe;1.策略模式到底是什么鬼捏&#xff1f;&#xff1f;&#xff1f;&#x1f440; 策略模式属于对象的行为模式。其用意是针对一组算法&#xff0c;将每一…

基于Visual C++2010与windows SDK fo windows7开发windows7平台的tabletpc应用(1)-手写数学公式输入...

搭建好Visual C2010与windows SDK fo windows7的开发平台以后&#xff0c; 小试牛刀&#xff0c;检验下开发windows7的下的tabletpc应用&#xff0c;这个东西财务记账比较多&#xff0c; 大家先看效果&#xff0c;然后讲解详细代码 详情请见代码注释 // Windows 头文件 #includ…

你所阅读的,决定你是什么样的人

全世界只有3.14 % 的人关注了爆炸吧知识真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内心的格局&#xff0c;见识的深浅决定人生的深浅&#xff0c;格局的大小决定了人生之路是宽是窄。今天给大家推荐几个有深度、有想法的公众号&#xff0c;希望能够给你带…