Finisky Garden

NLP, 软件工程, 产品设计

2021-06-20: 使用Hexo扩展的方式可以更简洁地定制页面,避免了本文实现的一些弊端。Hexo添加自定义分类菜单项并定制页面布局(简洁版)

2020-07-22: 更新hexo-generator-category到v1.0.0后,对应的generator.js代码进行了修改。 2019-11-27: 更新NexT v7.5.0的customcategory.swig文件,与老版本v6.6.0不同。

希望在Hexo的NexT主题中增加自定义分类的菜单,即一个指向特定分类的链接,且页面显示的是类似主页的标题+摘要形式。Hexo的可定制化很强,绝大多数需求都可以直接通过配置满足。真的有额外需求,因为它开源,可以直接在源码上折腾。:-)

阅读全文 »

实际工程中有时需要将同步方法包装在异步方法之中。比如一个类实现了异步接口,而实际实现可能是本地计算的同步操作,也可能是需要HTTP请求的异步操作。对于前者,如果实现中没有await关键字,编译器会提示该方法缺少await运算符,将以同步方式运行。将二者统一的解决方案是使用Task.FromResult将结果包装成一个已完成的Task返回。举例:

阅读全文 »

TCP为什么需要三次握手

简单答案:

  1. client与server需要交换各自的Initial Sequence Number (ISN),至少需要三次交换。
  2. 若采用两次握手,server可能会浪费资源为延迟到达的SYN包建立连接。
阅读全文 »

简介

面向对象软件设计中,如何使软件易读、易维护和灵活适应需求是一个永恒的话题。SOLID原则即为大家在概念上指明了我们应如何达到这些设计目标。相较于设计模式,SOLID是高层次的抽象思想指导,可以说具体的设计模式是SOLID原则的实现。

在具体讨论这些原则之前,需要说明SOLID并不是软件设计中必须遵从的铁律,落地的软件开发还需要根据实际需求进行折衷与取舍。在我看来,软件架构与设计并不完全是技术,而更像是艺术。一个巧夺天工的设计常令人拍案叫绝,生搬硬套地应用所谓设计原则只能是弄巧成拙。

阅读全文 »

简介

C# 5引入了async/await异步编程模型,旨在进一步简化异步编程的难度,让异步执行的代码看起来像同步代码一样简洁和容易理解。但初学者往往会将此异步编程模型与多线程编程模型混淆,以致引起一些不必要的错误如死锁或性能损失。

简而言之,Task是对异步操作的抽象,而非对线程的抽象。 可以认为await关键字暂时释放了线程控制权给界面或主线程,而待较为耗时的异步操作完成之后继续执行下面的代码。一般来说,此处所谓的释放控制权并不一定另起一个线程进行异步操作,这也是许多新接触async/await关键字的开发者最容易疑惑的地方。

阅读全文 »
0%