自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一个人的孤落时辰

本博客不再重点维护,新博客请移步至: https://blog.yuanpei.me.。另:5年.NET后端、熟悉.NET Core、微服务,坐标西安,求一份工作...

原创 一个西漂打工人的求职心路

其实,这段故事说出来,多少有一点难为情,因为我实在没有想到,这一切会变得这样艰难。 10月份从上一家公司离职的时候,当时,我手上有两个Offer,一家是做旅游类产品的创业公司,一家则是声名狼藉的中软国际。因为刚来西安时,面对人生地不熟的新环境,曾经在这里有过一段时间的工作经历,所以,我从本能上排斥...

2020-11-19 13:27:30 113 1

原创 使用dotTrace对.NET应用进行性能分析

前几天,有位朋友问我,你平时都是怎么去排查一个程序的性能问题的啊。不要误会,这位朋友不是我啦,因为我真的有这样一位叫做 Toby 的朋友。说到性能问题,可能大家立马会想到类似并发数、吞吐量、响应时间、QPS、TPS等等这些指标,这些指标的确可以反映出一个系统性能的好坏。可随着我们的系统结构变得越来...

2020-11-02 15:59:18 3711 12

原创 一道HashSet面试题引发的蝴蝶效应

没错,我又借着“面试题”的名头来搞事情了,今天要说的是 HashSet ,而这确实是一个实际面试中遇到的问题。当时的场景大概是这样的,面试官在了解了你的知识广度以后,决心来考察一番你的基本功底,抛出了一个看起来平平无奇的问题:说一说你平时工作中都用到了哪些数据结构。你心想,这还不简单,Array、...

2020-10-26 10:10:37 3801 0

原创 基于选项模式实现.NET Core的配置热更新

最近在面试的时候,遇到了一个关于 .NET Core 配置热更新的问题,顾名思义,就是在应用程序的配置发生变化时,如何在不重启应用的情况下使用当前配置。从 .NET Framework 一路走来,对于 Web.Config 以及 App.Config 这两个配置文件,我们应该是非常熟悉了,通常情况...

2020-10-13 00:33:20 1905 2

原创 .NET Core中对象池(Object Pool)的使用

在此前的博客中,博主参考 eShopOnContainers 实现了一个基于RabbitMQ的事件总线(EventBus)。在这个项目中,它提供了一个持久化连接的类DefaultRabbitMQPersistentConnection,主要解决了RabbitMQ在连接断开后自动重连的问题,可实际上...

2020-08-25 17:54:54 610 0

原创 利用MySQL的Binlog实现数据同步与订阅(下)

终于到这个系列的最后一篇,在前两篇博客中,我们分别了介绍了Binlog的概念和事件总线(EventBus)的实现,在完成前面这将近好几千字的铺垫以后,我们终于可以进入正题,即通过EventBus发布Binlog,再通过编写对应的EventHandler来订阅这些Binlog,这样就实现了我们“最初...

2020-08-25 17:21:07 610 0

原创 利用MySQL的Binlog实现数据同步与订阅(中)

紧接上一篇博客中的思路,这次我们来说说事件总线(EventBus),回首向来,关于这个话题,我们可能会联想到发布-订阅模式、观察者模式、IObservable与IObserver、消息队列等等一系列的概念。所以,当我们尝试着去解释这个概念的时候,它到底是什么呢?是一种设计模式?是一组API接口?还...

2020-08-25 17:16:22 679 0

原创 利用MySQL的Binlog实现数据同步与订阅(上)

终于等到了周末,在经历了一周的忙碌后,终于可以利用空闲写篇博客。其实,博主有一点困惑,困惑于这个世界早已“堆积”起人类难以想象的“大”数据,而我们又好像执着于去“造”一个又一个“差不多”的“内容管理系统”,从前我们说互联网的精神是开放和分享,可不知从什么时候起,我们亲手打造了一个又一个的“信息孤岛...

2020-08-25 16:55:22 1407 2

原创 原生JavaScript实现Hexo博客推荐功能

有时候,我不禁在想,我们到底处在一个什么样的时代呢?而之所以会有这样的疑问,则是因为我们的习惯在不断地被这个时代向前推进,就像我用了两年多的魅蓝Note6屏幕出现了问题,扫视了一圈新手机,居然再找不出一款带实体键的手机,刘海屏、水滴屏、破孔屏、异形屏、曲面屏等等简直令人眼花缭乱,唯独没有一款让我感...

2020-06-22 11:44:11 567 0

原创 .NET Core原生DI扩展之基于名称的注入实现

接触 .NET Core 有一段时间了,最大的感受无外乎无所不在的依赖注入,以及抽象化程度更高的全新框架设计。想起三年前 Peter 同学手写 IoC 容器时的惊艳,此时此刻,也许会有不一样的体会。的确,那个基于字典实现的 IoC 容器相当“简陋”,就像 .NET Core 里的依赖注入,默认(原...

2020-06-22 11:39:00 787 0

原创 通过EF/Dapper扩展实现数据库审计功能

相信大家都有过周末被电话“吵醒”的经历,这个时候,客服同事会火急火燎地告诉你,客户反馈生产环境上某某数据“异常”,然后你花费大量时间去排查这些错误数据,发现这是客户使用某一种“骚”操作搞出来的“人祸”。可更多的时候,你不会这么顺利,因为你缺乏有力的证据去支持你的结论。最终,你不情愿地去处理了这些错...

2020-05-11 11:04:45 377 0

原创 .NET Core + ELK搭建可视化日志分析平台(上)

Hi,各位朋友,大家好!欢迎大家关注我的博客,我的博客地址是: https://blog.yuanpei.me。今天是远程办公以来的第一个周末,虽然公司计划在远程两周后恢复正常办公,可面对着每天都有人离开的疫情,深知这一切都不会那么容易。窗外的阳光透过玻璃照射进屋子,这一切都昭示着春天的脚步渐渐近...

2020-03-04 11:08:57 1371 0

原创 使用 jsDelivr 为 Hexo 博客提供高效免费的CDN加速

最近给博客做了升级,从3.x升级到了4.x,主要是在官网看到了关于静态页面生成效率提升的内容。众所周知,Hexo在文章数目增加以后会越来越慢。博主大概是从14年年底开始使用Hexo这个静态博客的,截止到目前一共有176篇博客,其中的“慢”可想而知,中间甚至动过使用Hugo和VuePress的念头,...

2020-03-04 11:06:40 1415 0

原创 从 .NET Core 2.2 升级到 3.1 的踩坑之旅

有时候,版本更新太快并不是一件好事。虽然,两周一个迭代的“敏捷”开发依然被客户嫌弃交付缓慢,可一边是前端领域“求不要再更新了,学不动了”的声音,一边则是.NET Core从1.x到2.x再到3.x的高歌猛进。版本更新太快,带来的是API的频繁变动,无法形成有效的知识沉淀,就像转眼到了2020年,P...

2020-01-23 10:52:46 4241 0

原创 使用Liquid实现简单的数据交换

在平时的开发工作中,接口对接是一件无可避免的事情。虽然在“前后端分离”的大趋势下,后端的角色逐渐转换为数据接口的提供者,然而在实际的应用场景中,我们面对的往往是各种不同的“数据”,譬如企业应用中普遍使用的企业服务总线(ESB),这类服务要求服务接入者必须使用WebService来作为数据交换格式;...

2019-12-29 14:44:08 730 0

原创 Referrer还是Referer? 一个迷人的错误

诗人郑愁予曾经在一首诗中写道:我达达的马蹄是个美丽的错误,我不是归人,是个过客。而对我来说,十九岁之前的我,一样是个沉浸在诗歌中的文艺少年。十九岁之后的我,作为一名程序员,更多的是邂逅各种错误。可偏偏人类世界对待错误从来都不宽容,所以,错误本身既不美丽,亦不浪漫。接近中年的我,无论如何,都写不出年...

2019-12-29 14:43:01 742 1

原创 浅析网站PV/UV统计系统的原理及其设计

国庆节前有段时间,新浪的“图床”一直不大稳定,因为新浪开启了防盗链,果然免费的永远是最贵的啊。为了不影响使用,我非常粗暴地禁止了浏览器发送Referer,然后我就发现了一件尴尬的事情,“不蒜子”统计服务无法使用了。这是一件用脚后跟想都能想明白的事情,我禁止了浏览器发送Referer,而“不蒜子”正...

2019-12-29 14:41:21 2386 1

原创 使用Python开发插件化应用程序

插件化应用是个老话题啦,在我们的日常生活中更是屡见不鲜。无论是多年来臃肿不堪的Eclipse,亦或者是扩展丰富著称的Chrome,乃至近年来最优秀的编辑器VSCode,插件都是这其中重要的组成部分。插件的意义在于扩展应用程序的功能,这其实有点像iPhone手机和AppStore的关系,没有应用程序...

2019-12-29 14:39:55 1319 2

原创 百度地图加载海量标注性能优化策略

在上一篇博客中关于Vue表单验证的话题里,我提到了这段时间在做的城市配载功能,这个功能主要着眼于,如何为客户提供一条路线最优、时效最短、装载率最高的路线。事实上,这是目前物流运输行业智能化、专业化的一个趋势,即面向特定行业的局部最优解问题,简单来说,怎么样能在装更多货物的同时满足运费更低的条件,同...

2019-11-26 17:48:37 4907 0

原创 Vue快速实现通用表单验证

本文开篇第一句话,想引用鲁迅先生《祝福》里的一句话,那便是:“我真傻,真的,我单单知道后端整天都是CRUD,我没想到前端整天都是Form表单”。这句话要从哪里说起呢?大概要从最近半个月的“全栈工程师”说起。项目上需要做一个城市配载的功能,顾名思义,就是通过框选和拖拽的方式在地图上完成配载。博主选择...

2019-11-26 17:10:54 8483 10

原创 在WSL中使用Linux桌面环境的尝试与总结

最近忙里偷闲的博主,再次迷恋上折腾Linux。话说自从微软推出WSL以后,我就彻底地停止了Windows + Linux 的双系统组合。回想起从前使用过的各种Linux发行版,基本上每隔一段时间就会崩溃一次,所以,面对WSL这种近乎应用级别的方案,我个人是非常愿意去接受的。因为一不小心玩坏了的话,...

2019-08-25 11:22:03 7677 5

原创 通过ApiExplorer为Swagger提供MVC扩展

我一直想吐槽下运维同事提供的Jekins项目模板,因为它居然不支持含有多个项目的解决方案。作为一个有追求的程序员,每个解决方案下最少应该含有两个项目,即项目本身和项目对应的单元测试。可惜在这样一种情形下,我没法再去坚持这样的原则,而这真正让我感到难过的是,为了在编译环节向Jekins妥协,大家在一...

2019-08-25 11:20:53 811 4

原创 .NET Core POCOController在动态Web API中的应用

Hi,大家好,我是Payne,欢迎大家关注我的博客,我的博客地址是:https://blog.yuanpei.me。在上一篇文章中,我和大家分享了ASP.NET中动态Web API的实现,这种方案的现实意义是,它可以让我们把任意一个接口转换为Web API,所以,不单单局限在文章里提到的WCF迁移...

2019-08-25 11:19:24 719 0

原创 长安十二时辰随想

年少时未见长安,难以想象万国来朝的盛唐气象,心中最为仰慕的人物,是那个“好剑术、喜任侠“、二十五岁“仗剑去国、辞亲远游”的李白。人在年少轻狂的时候,容易因为一个人的豪迈不羁,而选择性地模糊一个时代的印象。于是,长安就蓦地变成了李太白大放异彩的舞台。印象里的长安,是一个可以让人吟咏“安能摧眉折腰事权...

2019-08-25 11:17:35 934 3

原创 使用ASP.NET Core和Hangfire实现HTTP异步化方案

Hi,大家好,我是Payne,欢迎大家一如既往地关注我的博客。今天这篇博客里的故事背景,来自我工作中的一次业务对接,因为客户方提供的是长达上百行的XML,所以一度让更喜欢使用JSON的博主感到沮丧,我这里不是想讨论XML和JSON彼此的优缺点,而是我不明白AJAX里的X现在基本都被JSON替代了,...

2019-07-14 23:27:23 2815 0

原创 通过动态Controller实现从WCF到Web API的迁移.

在《又见AOP之基于RealProxy实现WCF动态代理》这篇文章中,我和大家分享了关于使用动态代理来简化WCF调用过程的相关内容,当时我试图解决的问题是,项目中大量通过T4生成甚至手动编写的“代理方法”。今天,我想和大家分享的是,如何通过动态的Controller来实现从WCF到Web API的...

2019-07-14 23:23:05 450 0

原创 《Web API 的设计与开发》读书笔记

设计优美的Web API: 易于使用、便于更改、健壮性好、不怕公开 REST的两层含义: 指符合Fielding的REST架构风格的Web服务系统 指使用符合RPC风格的XML或JSON + HTTP接口的系统(不使用SOAP) 端点的基本设计: 短小便于输入的URI- 人可以读懂的URI ...

2019-07-14 23:20:09 1193 1

原创 又见AOP之基于RealProxy实现WCF动态代理

最近一直在研究Mongodb和ElasticSearch之间同步数据的问题,苦于到目前为止,并没有取得任何实质性的进展。偶尔“趁得浮生半日闲暇”,看一看Web API设计方面的书籍,和前辈交流下项目中的历史遗留问题,最为直观的感受就是,这个世界上任何方案的最终落地,都经过理想和现实的无数次挣扎,比...

2019-07-14 23:15:57 477 0

原创 WSL下Docker使用踩坑小记

众所周知,Win10中开始提供Linux子系统,即Windows Subsystem for Linux,简称WSL,它可以让我们在Windows系统使用Linux系统,自从有了这个新功能以后,博主果断地放弃双系统的方案,因为折腾起来实在花费时间。关于如何使用WSL,网上有非常多的文章可以参考,这...

2019-05-03 23:05:26 9906 4

原创 由DBeaver与PL/SQL引发的数据库吐槽

因为工作中需要同时面向MySQL、Oracle和SQLServer三种数据库进行开发,所以,大概从去年国庆节开始,我开始使用一个开源的数据库管理工具——DBeaver。 使用这个工具的初衷,是因为我不想在同一台电脑上安装三个客户端工具,尤其是Oracle和SQLServer这种令人恐惧的、动辄需要...

2019-04-28 16:48:57 3701 4

原创 聊聊前端跨域的爱恨情仇

今天是过完春节以后的第二周啦,而我好像终于回到正常工作的状态了呢,因为突然间就对工作产生了厌倦的情绪,Bug就像无底洞一样吞噬着我的脑细胞。人类就像一颗螺丝钉一样被固定在整部社会机器上,除了要让自己看起来像个正常人一样,还要拼命地让所有人都像个正常人一样。过年刚经历过被催婚的我,面对全人类近乎标准...

2019-04-08 08:30:25 26728 5

原创 基于Server-Sent Events实现服务端消息推送

前段时间,为客户定制了一个类似看板的东西,用户可以通过看板了解任务的处理情况,通过APP扫面页面上的二维码就可以领取任务,而当任务被领取以后需要通知当前页面刷新。原本这是一个相对简单的需求,可是因为APP端和PC端是两个不同的Team在维护,换句话说,两个Team各自有一套自己的API接口,前端页...

2019-02-22 13:39:58 2932 0

原创 博客图片迁移折腾记

  去年国庆的时候,七牛官方开始回收测试域名,这直接导致博客中大量图片出现无法访问的情况,虽然博主第一时间启用了新的域名:https://blog.yuanpei.me,可是因为七牛官方要求域名必须备案,所以,这件事情一直耽搁着没有往下进行。至于为什么会一直拖到2019年,我想大家都能猜到一二,没...

2019-01-18 11:24:01 1052 0

原创 基于WebSocket和Redis实现Bilibili弹幕效果

  嗨,大家好,欢迎大家关注我的博客,我是Payne,我的博客地址是https://qinyuanpei.github.io。在上一篇博客中,我们使用了.NET Core和Vue搭建了一个基于WebSocket的聊天室。在今天这篇文章中,我们会继续深入这个话题。博主研究WebSocket的初衷是,...

2018-08-27 12:49:33 4170 0

原创 使用.NET Core和Vue搭建WebSocket聊天室

  Hi,大家好,我是Payne,欢迎大家关注我的博客,我的博客地址是:https://qinyuanpei.github.io。今天这篇博客,我们来说说WebSocket。各位可能会疑惑,为什么我会突然间对WebSocket感兴趣,这是因为最近接触到了部分“实时”的业务场景,譬如:用户希望在远程...

2018-08-27 12:46:57 8510 2

原创 声明式RESTful客户端WebApiClient在项目中的应用

  自从项目上采用敏捷开发的流程以后,我们的开发任务中出现了不少“联调”的任务,而所谓的“联调”任务,完全是拜前后端分离所赐。通常来讲,按照前后端分离的思想,我们的团队会被分成前端和后端两个组,前端负责页面内数据的展示,后端负责提供相关服务的接口。这样听起来非常合理,对吧?可问题在于,后端常常在等...

2018-07-17 18:20:23 6479 1

原创 基于Docker构建-NET持续集成环境

  最近在考虑将整个项目组的产品,努力向着持续集成(CI)/持续部署(CD)的方向靠拢,因为目前我们仅仅实现了基于Docker的自动化部署,而部署包的构建依然依赖于人工打包,而每个版本的测试和部署,基本上都要给所有相关人员发一遍邮件,而写邮件无非是填写版本号和变更历史。身处在这样一个社会化分工逐渐...

2018-06-13 12:43:15 2989 0

原创 一个由服务器时区引发的Bug

  太阳照常升起,在每个需要挤公交车上班的日子里,即使窗外早已大雨如注。想来只有在周末,太阳会陪着我一起起床,所谓睡觉睡到自然醒,在雨天里保持晴天的心情,相当大的程度上,是因为今天不必上班。因此,一周里的心情晴雨表,简直就是活生生的天气预报,可惜我并不能预测我的心情,因为Bug会在某一瞬间发动突然...

2018-06-12 17:34:56 3153 0

原创 关于电影《暗杀》背后的故事和想法

  最近看过了由全智贤主演的电影《暗杀》,虽然说这是一部我们早已熟稔的抗战题材电影,可是在全女神颜值和演技的诱惑下,我终于还是花了点时间来看这部电影。或许是因为我们见识过了太多的“抗日神剧”,所以在面对这样一部电影的时候,我们难免带着某种不屑的眼光去审视它。可是当你看完了这部电影,突然间兴奋到难以...

2018-06-12 17:34:22 1435 0

原创 使用SonarCloud为.NET-NET-Core项目集成静态检查

  Hi,朋友们,大家好,欢迎大家关注我的博客,我是Payne,我的博客地址是http://qinyuanoei.github.io。在不知不觉间,5月份已然度过大半,最近无论是读书还是写作均停滞不前,被拖延症支配的我深感有虚度时光之嫌。今天这篇文章,我将为大家介绍如何使用SonarCloud,来...

2018-05-14 09:52:12 881 0

提示
确定要删除当前文章?
取消 删除