有一种数据结构是神奇的,神秘的,它展现了位运算与数组结合的神奇魅力,太
一:讲故事看完官方文档,阅读了一些Newtonsoft源码,对它有了新的认识,先总结六个超经典又实用的特性,同大家一起分享,废话不多说,快来一起看看吧~~~二:特性分析1.代码格式化如果你直接使用JsonConvert.SerializeObject的话,默认情况下所有的json是挤压在一块的,特别不方便阅读,如下所示:staticvoidMain(string[]args){varreportM
这一篇我们来看树状数组的加强版线段树,树状数组能玩的线段树一样可以玩,而且能玩的更好,他们在区间求和,最大,平均等经典的RMQ问题上有着对数时间的优越表现。一:线段树线段树又称"区间树”,在每个节点上保存一个区间,当然区间的划分采用折半的思想,叶子节点只保存一个值,也叫单元节点,所以最终的构造就是一个平衡的二叉树,拥有CURD的O(logN)的时间。从图中我们可以清楚的看到[0-10]被
一:讲故事上一篇介绍的6个特性从园子里的反馈来看效果不错,那这一篇就再带来6个特性同大家一起欣赏。二:特性分析1.像弱类型语言一样解析json大家都知道弱类型的语言有很多,如:nodejs,python,php,它们有一个
在数据结构的世界里,我们会认识各种各样的数据结构,每一种数据结构都能解决相应领域的问题,每一种数据结构都像是降龙十八掌中的某一掌,掌掌毙命。。。当然每个数据结构,有他的优点,必然就有它的缺点,那么如何创造一种数据结构来将某两种数据结构进行扬长避短,那就非常完美了。这样的数据结构也有很多,比如:双端队列,还有就是今天讲的块状链表,我们都知道数组具有O(1)的查询时间,O(N)的删除,O(N)的插入。
一:背景1.讲故事.NET5终于在6月25日发布了第六个预览版,随之而来的是更多的新特性加入到了C#9Preview中,这个系列也可以继续往下写了,废话不多说,今天来看一下Top-levelprograms和ExtendingPartialMethods两大新特性。2.安装必备下载最新的.net5preview6。下载最新的VisualStudio2019version16.7Preview3.1
今天来小玩一下aforge.net套用官方的话就是一个专门为开发者和研究者基于C#框架设计的,这个框架提供了不同的类库和关于类库的资源,还有很多应用程序例子,包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,机器人等领域,下载网址:http://www.aforgenet.com/framework/downloads.html对了,不知道有多少公司是用得仕卡作为员工的福利卡,我们
昨天同事面试被问到了单链表倒置,这个题目玩的是技巧和你对单链表的理解,其实我们仔细想想也不是很难,既然是倒置,那肯定要走一遍单链表的,对吧。走单链表通常有两种形式:递归和循环,递归正是压栈和出栈,那么我们就想起来了,这不就是顺序和逆序的关系吗?第二种就是循环,还记得我们曾今学习单链表的时候有一种插法叫做头插法,这种插入复杂度为O(1),不好的地方就是顺序插入的数字,出来的时候却是反的,所以这个不就
前段时间在做用户画像的时候,遇到了这样的一个问题,记录某一个商品的用户购买群,刚好这种需求就可以用到Redis中的Set,key作为productID,value就是具体的customerid集合,后续的话,我就可以通过productid来查看该customerid是否买了此商品,如果购买了,就可以有相关的关联推荐,当然这只是系统中的一个小业务条件,这时候我就可以用到SADD操作方法,代码如下:s
经常在项目中遇到定时任务的时候,通常第一个想到的是Timer定时器,但是这玩意功能太弱鸡,实际上通常采用的是专业化的第三方调度框架,比如说Quartz,它具有功能强大和应用的灵活性,我想使用过的人都非常了解,那么本篇就来说说如何通过代码和配置文件来进行job和trigger的配置。一:常规的job,trigger配置方式这种常规的方式也是我们初步学习Quartz最先了解到的,即通过JobBuild
先结果导向,来看我在kibanadashborad中制作的几张监控图。一:先睹为快1.dashboard1监控几个维度的日志,这么点日志量是因为把无用的清理掉了,而且只接入了部分应用。每日日志总数。每日日志错误数,从log4net中level=ERROR抠出来的。每个应用贡献的日志量(按照应用程序分组)今日错误日志时间分布折线图。今日全量日志时间分布折线图。2.dashboard2这个主要用来监控
一:实际场景介绍我们在给用户做订单催付通知的时候,会有这样的一种场景,用户在系统后台设置一组可以催付的规则,比如说订单金额大于xx元,非黑名单用户,来自哪个地区,已购买过某个商品,指定某个营销活动的人等等这样的条件,如果这时用户在淘宝上下了一个订单,那程序要判断的就是看一下此订单是否满足这些规则中的某一个,如果满足,我们给他发送催付通知,这种场景是很多做CRM的同学都会遇到的问题,那针对这种场景,
首先说一下背景,在双十一的时候,我们系统接受X宝的订单推送,原先的实现方式是使用redis的List作为推送数据的承载,在非大促的场景下,一切运行正常,内存占用大概3-4G,机器是16G内存。由于提前预计不足,在双十一来临的时候,订单瞬时量达到了平时的10X倍,内存非常吃紧,情况算是非常紧急了,采取的临时解决方案就是再开一个redis,将程序中的redis地址指向这台新的,重启一下程序,把数据暂时
一般拿Timer和Quartz相比较的,简直就是对Quartz的侮辱,两者的功能根本就不在一个层级上,如本篇介绍的Quartz强大的集群机制,可以采用基于sqlserver,mysql的集群方案,当然还可以在第三方插件的基础上实现quartz序列化到nosql的mongodb,redis,震撼力可想而知,接下来本篇就和大家聊一聊怎么搭建基于sqlserver的quartz集群,实现这么一种双机热备
很多时候大家为了部署高可用方案都是前端配一个nginx,如果nginx挂掉怎么办,比如下面这张图:你可以清楚的看到,如果192.168.2.100这台机器挂掉了,那么整个集群就下线了,这个问题该怎么解决呢???简单的想想确实不大好处理,因为你的前端请求总得要访问一个ip地址,对吧。。这个问题怎么破呢?一:问题分析如果你有一些网络底子的话,就会明白,你给一个不在本网段的机器发送请求的话,这个请求会先
自从redis加入了module功能之后,redis的生态就很有意思了,每个领域的大佬都会以插件的形式给redis扩展一些新的功能,比如本篇说到的rediSQL,rebloom。一:rediSQL1.背景redis虽然是,但还是有很多人吐槽redis操作性太弱,比如你想要在redis上实现一个比较复杂的业务逻辑,可能对你来说是一个灾难,有些同学会说用redis的存储过程lua撒,但是lua不是每个
这篇我们来聊一下鸡尾酒排序,为了知道为啥取名为鸡尾酒,特意看了下百科,见框框的话,也只能勉强这么说了。要是文艺点的话,可以说是搅拌排序,通俗易懂点的话,就叫“双向冒泡排序”,我想作为码农的话,不可能不知道冒泡排序,冒泡是一个单向的从小到大或者从大到小的交换排序,而鸡尾酒排序是双向的,从一端进行从小到大排序,从另一端进行从大到小排序。从图中可以看到:第一次正向比较,我们找到了最大值9.第一次反向比较
一:背景1.讲故事最近因为各方面原因换了一份工作,去了一家主营物联柜的公司,有意思的是物联柜上的终端是用wpf写的,代码也算是年久失修,感觉技术债还是蛮重的,前几天在调试一个bug的时候,看到了一段类似这样的代码:vardt=newDataTable();SqlDataAdapteradapter=newSqlDataAdapter(newSqlCommand());adapter.Fill(dt
一:背景1.讲故事前段时间和一家公司联调api接口的时候,发现一个奇葩的问题,它的api返回的json会动态改变,简化如下:{"Code":101,"Items":[{"OrderTitle":"订单1"}]}{"Code":102,"Items":[{"ProductTitle":"商品1"}]}逻辑是这样的:Items中的内容会随的Code的改变而改变,里面有可能是订单列表又有可能是商品列表,
一:背景1.讲故事前几天看公司一个新项目的底层使用了dapper,大家都知道dapper是一个非常强大的半自动化orm,帮程序员解决了繁琐的mapping问题,用起来非常爽,但我还是遇到了一件非常不爽的事情,如下代码所示:publicclassUserDAL:BaseDAL{publicList<UserModel>GetList(){using(SqlConnectionconn=n
一:背景1.讲故事前几天公司一个妹子问我,事件和委托有什么区别?先由衷感叹一下,编码十余年,年轻的时候常被面试官问起,现在年长了,却被后辈们时常问候,看样子逃离编码生涯之前是跑不掉了,不过奇怪的是,这个问题被问起的时候,我发现有很多人用:事件是一种特殊的委托来进行总结,是不是挺有意思,我想这句话可能来自于网络上的面试题答案吧,这篇我就试着彻底总结一下。二:事件真的是特殊的委托吗?1.猫和老鼠经典案
一:背景1.讲故事前几天在调试物联柜终端上的一个bug时发现app.config中的数据库连接串是加密的,因为调试中要切换数据库,我需要将密文放到专门的小工具上解密,改完连接串上的数据库名,还得再加密贴到app.config中,烦的要死,内容如下:<appSettings><!--数据库连接字符串--><addkey="OLEDBConnStr"value="XfES
一:背景1.讲故事前段时间将公司的一个项目从4.5升级到了framework4.8,编码的时候发现Enumerable中多了三个扩展方法:Append,Prepend,ToHashSet,想必玩过jquery的朋友一眼就能看出这三个方法的用途,这篇就和大家一起来聊聊这三个方法的底层源码实现,看有没有什么新东西可以挖出来。二:Enumerable下的新扩展方法1.Append看到这个我的第一印象就是
一:背景1.讲故事前段时间有位朋友在微信群问,在向mongodb中插入的时间为啥取出来的时候少了8个小时,8在时间处理上是一个非常敏感的数字,又吉利又是一个普适的话题,后来我想想初次使用mongodb的朋友一定还会遇到各种新坑,比如说:插入的数据取不出来,看不爽的ObjectID,时区不对等等,这篇就和大家一起聊一聊。二:1号坑插进去的数据取不出来1.案例展示这个问题是使用强类型操作mongodb
原创一线码农聊技术一线码农聊技术1周前前段时间公司要整合服务器资源,刚好趁这次机会将这些乱七八糟的服务器做一次梳理和整合,断断续续一个月迁移完成大概优化掉了1/3的机器,完成之后遇到了一些问题,比如曾今零零散散部署在生产上一些可视化UI:apollo,kibana,grafana,jenkins等等要么采用80端口,要么对公开放了其他端口,为了安全,现在不再开放非80之外的公网端口,由于机器少了,
一:背景**讲故事**记的在上一家公司做全内存项目的时候,因为一些关键表会在程序startup的时候全量灌入到内存中,但随着时间的推移,内存和数据库的同步偶尔会出现数据差异的情况,伴随着就是运营那边报过来的bug,检查数据库的数据完整性很简单,直接写一些sql验证一下就好了,但校验内存中的数据就非常麻烦了,因为你不能像写sql一样直接去查生产中的内存集合,那怎么办呢?为了方便演示问题,先上一段演示
一:背景1.讲故事18年的时候在做纯内存项目的过程中遇到了这么一个问题,因为一些核心数据都是飘在内存中,所以内存空间对我们来说额外宝贵,但偏偏项目中有些数据需要缓存,比如说需要下钻的报表上的点,基于性能的考虑,不希望采用独立的缓存中间件,比如redis,mongodb,毕竟再怎么滴还是要走网络io,但直接放在本机内存中也不现实,那有没有均衡于nativecache和cacheserver之间的方案
一:背景1.讲故事.NET5终于在2020-08-25也就是前天发布了第八个预览版,这么多的预览版搞得我都麻木了,接踵而来的就是更多的新特性加入到了C#9中,既然还想呆在这条船上,得继续硬着头皮学习哈,这一篇跟大家聊聊新增的几个关键词。二:新增关键词1.init出来一个新语法糖,首先要做的就是去揭它的老底,这样可以方便推测它的应用场景,为了方便表述,我先上一个例子:publicclassPerso
一:背景1.讲故事await,async这玩意的知识点已经被人说的烂的不能再烂了,看似没什么好说的,但我发现有不少文章还是从理论上讲述了这两个语法糖的用法,懂得还是懂,不懂的看似懂了过几天又不懂了,人生如戏全靠记是不行的哈,其实本质上来说await,async只是编译器层面上的语法糖,在IL层面都会被打成原型的,所以在这个层面上认识这两个语法糖是非常有必要的。二:从IL层面认识1.使用WebCli
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号