《富爸爸穷爸爸》Summary


比较经典的一本理财入门书:《富爸爸穷爸爸》,2013 年左右读过一次,这次算是二刷,有新的感悟,已经分不清日常操作中的一些方法和思维方式是否是从这本书中悟得,但着实不错,做了点摘要分享下。

《买基金为自己加薪》Summary

绩效导向:挑选中、长期绩效好的基金

  • 中长期指:近 3 年绩效都在前 1/4 的基金。(因为经济走完一个循环差不多就是 3 年的时间,只要基金在这个周期内绩效都能稳居前列,说明无论在什么景气阶段,该基金都能打败其他基金)
    • 也可以直接按照是否连续 6~8 个月跌出 1/2 来判断是否需要考虑换基金。
  • 如果是单笔投资,可以看短一点,如 1 年的绩效,同样是看是否是前 1/4 的基金,之后再看 6 个月, 3 个月的绩效,删掉跌出 1/4 的基金。
  • 不要迷恋第一名,要投资稳居前列的。

定额投资方法:

【不到获利心不死,绝不轻易提分手】

.NET CORE 下通过 SmtpClient 发送邮件

通过本文你可以实现:使用 .NET SmtpClient 来发送邮件

  • 基础使用:仅含有邮件内容,无附件;
  • 发送含有附件的邮件;
  • 以及抄送等功能。

通过使用 epplus 来动态生成 excel 表单

Summary:

  • 本文旨在说明通过建立本地模型类,通过 EPPlus,来统一生成 excel,模型类见下方代码块。
    • 适合需要动态生成整个 excel 表单的业务。
    • 如果无需动态生成,则可以直接给出物理excel文件硬编码即可。
  • 因涉及到公司业务,这里仅给出和业务无关部分代码。

环境说明:

在 .net core 2.1 和 3.1 中使用 autofac

通过本文你可以获得如何用 autofac 替换 .NET CORE(2.1,3.1) 默认 IOC 容器。

生命周期说明

  • 每个依赖一个实例(Instance Per Dependency) (默认) —-InstancePerDependency()
  • 单一实例(Single Instance) 单例 —-SingleInstance()
  • 每个生命周期作用域一个实例(Instance Per Lifetime Scope)—-InstancePerLifetimeScope()
  • 每个匹配的生命周期作用域一个实例(Instance Per Matching Lifetime Scope)—-InstancePerMatchingLifetimeScope()
  • 每个请求一个实例(Instance Per Request) asp.net web请求—-InstancePerRequest()
  • 每次被拥有一个实例(Instance Per Owned) —-InstancePerOwned()

注册方式

  • 反射
  • 使用实例
  • lambda 表达式

示例代码说明:

美化windows下的VSC:通过集成 cmder 来使用 zsh

  • MAC OS 中 iterm2 结合 zsh 对于开发而言,日常操作相当友好,同时对 MAC OS 下的 VSC 也相当友好,基本零配置。
  • 在 windows 环境下,除了通过 WSL 安装 ZSH 嵌入 VSC 外,如果你平时有使用 cmder,那么可以直接将 cmder 集成到 VSC 中。

最终在 VSC 终端的效果图:

日常 CMDER 效果如图下:

我已经集成 zsh,并设置了 cmder 一些快捷键跟 iterm2 保持一致,你可以根据自己的需要来定制自己的 cmder。

在 worker service 中使用 quartz.net

  • 以下示例基于 Quartz.Net 3.0.7(在最新的 3.1-beta2 中已经包含了支持 Microsoft DI 的方法)

在 worker service 中,通过官网示例,会发现 quartz.net 并未生效,究其原因系 DI 未注入导致,原生 quartz.net(3.0.7)是通过 CreateInstance 来创建实例的,本文旨在解决在 Worker Service、Console 中使用 quartz.net 无效的问题。

项目结构如下:

初始化

JobSchedule.cs

用来配置 Job,如果需要更多配置,可以扩展该类。

public class JobSchedule
{
    public JobSchedule(Type jobType, string cronExpression)
    {
        JobType = jobType;
        CronExpression = cronExpression;
    }

    public Type JobType { get; }
    public string CronExpression { get; }
}