首页
学习
活动
专区
工具
TVP
发布

蘑菇先生的技术笔记

专栏成员
75
文章
97633
阅读量
28
订阅数
Go中链路层套接字的实践
接上次的博客,按照约定的划分,还有一层链路层socket。这一层就可以自定义链路层的协议头部(header)了,下面是目前主流的Ethernet 2(以太网)标准的头部:
蘑菇先生
2018-07-24
1.7K0
Go中原始套接字的深度实践
原始套接字(raw socket)是一种网络套接字,允许直接发送/接收更底层的数据包而不需要任何传输层协议格式。平常我们使用较多的套接字(socket)都是基于传输层,发送/接收的数据包都是不带TCP/UDP等协议头部的。 当使用套接字发送数据时,传输层在数据包前填充上面格式的协议头部数据,然后整个发送到网络层,接收时去掉协议头部,把应用数据抛给上层。如果想自己封装头部或定义协议的话,就需要使用原始套接字,直接向网络层发送数据包。 为了便于后面理解,这里统一称应用数据为 payload,协议头部为 header,套接字为socket。由于平常使用的socket是建立在传输层之上,并且不可以自定义传输层协议头部的socket,约定称之为应用层socket,它不需要关心TCP/UDP协议头部如何封装。这样区分的目的是为了理解raw socket在不同层所能做的事情。
蘑菇先生
2018-07-24
2.9K0
Windows10-UWP中设备序列显示不同XAML的三种方式[3]
Windows10-UWP(Universal Windows Platform)增加一个新特性设备序列(DeviceFamily)特定视图,它允许开发者为指定的设备序列定义指定的XAML显示,(Desktop、Mobile、tablet、Iot等)。 如果你想为不同的设备序列显示较多不一样的UI时,它是非常有用的。当然,使用RelativePanel、VisualStateTriggers也是非常好用的。但倘若你的UI有非常多的不一样时,XAML代码会变的非常臃肿。 这时就可以单独使用一个完整的XAML页面,然后和其他XAML页面共享后台逻辑代码。
蘑菇先生
2018-07-24
7100
揭秘Windows10 UWP中的httpclient接口[2]
作为一个Universal Windows Platform (UWP)开发者,如果你尝试使用http与web服务或其他服务端通讯时,有多个API可以选择。 UWP中最常见并推荐使用的HTTP客户端API实现是System.Net.Http.HttpClient和Windows.Web.Http.HttpClient。 这些APIs相比旧的应该优先使用,比如旧APIs的WebClient和HttpWebRequest(尽管它的子集在UWP中是向后兼容的)。
蘑菇先生
2018-07-24
1.3K0
Windows10自适应和交互式toast通知[1]
创建灵活的toast通知,包括内嵌图片及更多的内容,不在局限于之前Windows 8.1和Windows Phone 8.1提供的toast模板。
蘑菇先生
2018-07-24
7060
topshelf和quartz内部分享
topshelf是创建windows服务的一种方式,相比原生实现ServiceBase、Install.Installer更为简单方便, 我们只需要几行代码即可实现windows服务的开发。topshelf本身支持windows及linux下mono上部署安装,同样也是开源的。
蘑菇先生
2018-07-24
1K0
探索c#之storm的TimeCacheMap
最近在看storm,发现其中的TimeCacheMap算法设计颇为高效,就简单分享介绍下。 思考一下如果需要一个带过期淘汰的缓存容器,我们通常会使用定时器或线程去扫描容器,以便判断是否过期从而删除。但这样性能并不友好,在数据量较大时O(n)检查是一笔不小的开销,并且在大量过期数据删除时需要频繁对容器加锁,这会多少会影响到正常的数据读写删除。 Storm设计了一种比较高效的时间缓存容器TimeCacheMap,它的算法可以在某个时间周期内将数据批量删除,一次批量删除只需要加一次锁即可,并且其读写删除复杂度均为O(1)。
蘑菇先生
2018-07-24
3550
clojure基础入门(一)
最近在看storm的源码,就学习分享下clojure语法。 阅读目录: 概述 变量 运算符 流程控制 总结 概述 clojure是一种运行在JVM上的Lisp方言,属于函数式编程范式,它和java可以方便的互相调用,这样开发的程序可以很好的结合java和clojure的优点(storm),这跟Net中C#和F#的角色一样。 安装java1.6以上的JDK,下载地址。 下载clojure的环境 包,下载地址。 解压后用命令行进入到clojure目录下,输入下面命令进入REPL命令行交互界面: jav
蘑菇先生
2018-06-20
1.5K0
Redis性能问题排查解决手册(七)
性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 info命令输出的
蘑菇先生
2018-05-21
2.9K1
Net作业调度(五)—quartz.net动态添加job设计
介绍 在实际项目使用中quartz.net中,都希望有一个管理界面可以动态添加job,而避免每次都要上线发布。  也看到有园子的同学问过。这里就介绍下实现动态添加job的几种方式, 也是二次开发的核心模块。 阅读目录: 传统方式 框架反射方式 进程方式 URL方式 框架配置方式 传统方式  继承IJob,实现业务逻辑,添加到scheduler。 public class MonitorJob : IJob { public void Execute(IJobExecutionCont
蘑菇先生
2018-05-21
9370
那些年我们一起追过的缓存写法(二)
感谢园子里的同学对上一篇的支持,很高兴楼主的一些经验及想法能够对大家有一些帮助。 上次主要讨论缓存读写这块各种代码实现,本篇就上次的问题继续来,看看那些年折腾过的各种缓存做法。 缓存预热 上次有同学问过,在第一次加载时缓存都为空,怎么进行预热。 单机Web情况下一般使用RunTimeCache,这种情况下: 可以在启动事件里面刷新 void Application_Start(object sender, EventArgs e) { //刷新 } 另
蘑菇先生
2018-05-21
7930
探索c#之递归APS和CPS
接上篇探索c#之尾递归编译器优化 累加器传递模式(APS) CPS函数 CPS变换 CPS尾递归 总结 累加器传递模式(Accumulator passing style) 尾递归优化在于使堆栈可以不用保存上一次的返回地址/状态值,从而把递归函数当成一个普通的函数调用。 递归实际上是依赖上次的值,去求下次的值。 如果我们能把上次的值保存起来,在下次调用时传入,而不直接引用函数返回的值。 从而使堆栈释放,也就达到了尾递归优化的目的。 下面我们增加了一个acc的参数,它存储上次的值,在下次调用时传入。 sta
蘑菇先生
2018-05-21
1.2K0
探索c#之函数创建和闭包
动态创建函数 大多数同学,都或多或少的使用过。回顾下c#中动态创建函数的进化: C# 1.0中: public delegate string DynamicFunction(string name); public static DynamicFunction GetDynamicFunction() { return GetName; } static string GetName(string name) { return name; } va
蘑菇先生
2018-05-21
7730
探索c#之不可变数据类型
不可变对象 不可变(immutable): 即对象一旦被创建初始化后,它们的值就不能被改变,之后的每次改变都会产生一个新对象。 var str="mushroomsir"; str.Substring(0, 6) c#中的string是不可变的,Substring(0, 6)返回的是一个新字符串值,而原字符串在共享域中是不变的。另外一个StringBuilder是可变的,这也是推荐使用StringBuilder的原因。 var age=18; 当存储值18的内存分配给age变量时,它的内存值也是不可以被
蘑菇先生
2018-05-21
1K0
探索c#之跳跃表(SkipList)
基本介绍 SkipList是William Pugh在1990年提出的,它是一种可替代平衡树的数据结构。 SkipList在实现上相对比较简单,比如在限定时间条件下,能非常轻松的实现SkipList,但却实现不了B树、红黑树、AVL树等,想一想单B树的删除,就要考虑非常多的细节。虽说SkipList简单,但性能却非常高,在平均情况下,其插入、删除、查找数据时间复杂度都是O(log(N)),其最坏情况下都为O(N),这点要低于平衡树。 SkipList依赖随机生成数以一定概率来保持数据在树上的平衡分布,
蘑菇先生
2018-05-21
1.1K0
Windows10-UWP中设备序列显示不同XAML的三种方式[3]
概述 Windows10-UWP(Universal Windows Platform)增加一个新特性设备序列(DeviceFamily)特定视图,它允许开发者为指定的设备序列定义指定的XAML显示,(Desktop、Mobile、tablet、Iot等)。 如果你想为不同的设备序列显示较多不一样的UI时,它是非常有用的。当然,使用RelativePanel、VisualStateTriggers也是非常好用的。但倘若你的UI有非常多的不一样时,XAML代码会变的非常臃肿。 这时就可以单独使用一个完整的X
蘑菇先生
2018-05-21
7470
浅谈分布式计算的开发与实现(二)
阅读目录: 实时计算 storm简介 流式计算 归纳总结 高容错性 实时计算 接上篇,离线计算是对已经入库的数据进行计算,在查询时对批量数据进行检索、磁盘读取展示。 而实时计算是在数据产生时就对其进行计算,然后实时展示结果,一般是秒级。 举个例子来说,如果有个大型网站,要实时统计用户的搜索内容,这样就能计算出热点新闻及突发事件了。 按照以前离线计算的做法是不能满足的,需要使用到实时计算。 小明作为有理想、有追求的程序员开始设计其解决方案了,主要分三部分。 每当搜索内容的数据产生时,先把数据收集到消息队列,由
蘑菇先生
2018-05-21
6260
topshelf和quartz内部分享
阅读目录: 介绍 基础用法 调试及安装 可选配置 多实例支持及相关资料 quartz.net 上月在公司内部的一次分享,现把PPT及部分交流内容整理成博客。 介绍 topshelf是创建windows服务的一种方式,相比原生实现ServiceBase、Install.Installer更为简单方便, 我们只需要几行代码即可实现windows服务的开发。topshelf本身支持windows及linux下mono上部署安装,同样也是开源的。 topshelf相对原生来说,调试起来比较方便,可以在开发时以控制台
蘑菇先生
2018-05-21
1K0
qt5中信号和槽的新语法
qt5中的连接 有下列几种方式可以连接到信号上 旧语法 qt5将继续支持旧的语法去连接,在QObject对象上定义信号和槽函数,及任何继承QObjec的对象(包含QWidget)。 connect(sender, SIGNAL (valueChanged(QString,QString)),receiver, SLOT (updateValue(QString)) ); 新语法:连接到QObject成员 下面是一种新的方式来连接两个QObjects: connect(sender, &Sender::val
蘑菇先生
2018-05-21
1.8K0
探索C#之微型MapReduce
MapReduce近几年比较热的分布式计算编程模型,以C#为例简单介绍下MapReduce分布式计算。 阅读目录 背景 Map实现 Reduce实现 支持分布式 总结 背景 某平行世界程序猿小张接到Boss一项任务,统计用户反馈内容中的单词出现次数,以便分析用户主要习惯。文本如下: const string hamlet = @"Though yet of Hamlet our dear brother's death The memory be green, and that it u
蘑菇先生
2018-05-21
9810
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档