这几天一直在琢磨在我现有技术认知基础上,未来如何做技术提升。

日思夜想,我整理出了我自己的一套学习规划方案,并希望在实施过程中能够不断调整学习方案与方式,以接近自我提升的效率最大化。

从以下几个大的方面来得到提升:

  1. 看源码
  2. 算法与数据结构
  3. 经典书籍

如果我切实能从以上方面有所收获并不断深入遇到瓶颈时,我可以考虑:

  1. 看基础(操作系统,计算机组成原理...)
  2. 数学
  3. ...

一切看起来都是那么庞大...,每一个点都可以琢磨三五年,成长是需要从长计议的,上面的方案也需要在一个合适的时间(初版先体验,感受)写出细节。人是矛盾的,有时候我总担心过度思考,最终得不到一个好的执行;有时候直接拿起来做又担心战略方向错误,这又需要不断磨练精进自我的思维能力。不过现在来说,我最需要拿出执行力。

如果是看源码的话,我能够得到的了解/提升:

  1. 扎实语言基础知识,所以我在看源码过程中,如果涉及到比较生疏的知识点,我也会动手coding并做记录
  2. 某个概念的底层实现(如依赖倒置、并发模型)
  3. 某个组件的工作流
  4. 优秀的代码设计

我会怎么做:

  1. 带着问题看
  2. 记录看的过程
  3. 了解源码后,能够在此源码基础上添加新功能

看源码过程中涉及到的比较生疏的知识点

=>

  1. lambda
  2. get属性的简写 _age == _age01:

    使用_age => a * b 而不是 _age = a * b的好处是:前者可以在被调用前再计算右边的算式,后者需要在全局变量被加载时,就计算出右边的算式。换句话说,前者是懒加载,后者是预加载。前者可以做到比较好的性能管理。

using语句在哪里?

.net6默认采用的c#语法版本是c# 10,所以在asp .net 6 mvc的program.cs中看不到using语句。c#支持global using,意思是可以将可能在多个类文件中同时引用的程序集写在一个地方,如using.cs。但是我看了每一个文件,都没看到我想看到的那个“using.cs”,其实是asp .net 6把这个配置写在了项目模版中(.csproj)

启用此配置,global using默认会有:

看源码实现时,方法内容全是throw null?

这是因为微软在C# 7.1开始,引入了“引用程序集”的概念,源码有具体实现说项目引用的是实现程序集。引用程序集更轻量化、兼容性更强。微软对引用程序集的说明:引用程序集。微软就不能给个配置方式,可以让我们引用实现程序集,方便调试与代码理解..

那么如果我们想看源码应该怎么破?

  1. 找到对应的dll,反编译

    1. .net的反编译工具:ILSpy
  2. .net core为开源项目,可以从github获取源码
    1. 源码地址:aspnetcore(注意通过切换分支/tag的方式切换到当前框架版本)

new():

new关键字可以作为运算符、修饰符以及约束。

作为运算符时,可以创建对象。

C# 9之前和c# 9之后的写法:

//c# 9 before
private List<int> ints01 => new List<int>();
//C# 9 later
private List<int> ints02 => new();

新的写法可以达到简化代码的目的。

if (args is { Length: > 0 })

这段代码用到了模式匹配的概念,模式匹配需要系统性学习,上述代码看起来和if (args != null && args.Length > 0)效果是一样的

源码内容

通过抛出问题的方式来看源码,目的性会更强,理解会更深刻。

1.我最关心的,ASP .NET MVC的工作流?或者说 项目启动会做哪些事情?

这个问题解决起来比较直观,ASP .NET作为控制台项目,自然启动项为Program.Main,只是ASP .NET 6简化了写法,Program中不再包含main函数,那么我们只需要看Program所有代码执行逻辑,深入了解底层实现,就可以知道项目做了什么事情

var builder = WebApplication.CreateBuilder(args);

通过这段代码,我们可以拿到一个builder对象。

首先看看WebApplication类,定义是:

The web application used to configure the HTTP pipeline, and routes.

解释:被用来配置HTTP管道和路由的web应用。

然后看看CreateBuilder(string []args)是如何创建这个builder对象的:

  1. 入参args传递了一个环境变量ASPNETCORE_ENVIRONMENT
public static WebApplicationBuilder CreateBuilder(string[] args) =>new(new() { Args = args });

new一个WebApplicationBuilder类的实例对象,传入一个入参WebApplicationOptions类实例。

WebApplicationBuilder类的定义:

A builder for web applications and services.

解释:web应用和服务的创建者

  1. 什么应用和服务?

WebApplicationBuilder类构造函数实现说明:

internal WebApplicationBuilder(WebApplicationOptions options, Action<IHostBuilder>? configureDefaults = null)

创建一个BootstrapHostBuilder类实例,为的是进行一些环境相关的配置,如根据ASPNETCORE_ENVIRONMENT环境变量确定读取哪一个appsettings.json文件配置

ASP .NET(基于.NET 6.0)源码解读相关推荐

  1. Android6.0源码解读之ViewGroup点击事件分发机制

    本篇博文是Android点击事件分发机制系列博文的第三篇,主要是从解读ViewGroup类的源码入手,根据源码理清ViewGroup点击事件分发原理,明白ViewGroup和View点击事件分发的关系 ...

  2. AFNetworking 3.0 源码解读(十)之 UIActivityIndicatorView/UIRefreshControl/UIImageView + AFNetworking...

    我们应该看到过很多类似这样的例子:某个控件拥有加载网络图片的能力.但这究竟是怎么做到的呢?看完这篇文章就明白了. 前言 这篇我们会介绍 AFNetworking 中的3个UIKit中的分类.UIAct ...

  3. AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager

    做ios开发,AFNetworking 这个网络框架肯定都非常熟悉,也许我们平时只使用了它的部分功能,而且我们对它的实现原理并不是很清楚,就好像总是有一团迷雾在眼前一样. 接下来我们就非常详细的来读一 ...

  4. vue修改节点class_Vue2.0 源码解读系列 来自 Vue 的神秘礼盒

    鄢栋,微医云服务团队前端工程师.有志成为一名全栈开发工程师甚至架构师,路漫漫,吾求索.生活中通过健身释放压力,思考问题. 目前 Vue3.0 打的很火热,都已经出了很多 Vue3.0 源码解析系列的博 ...

  5. Vue3.0源码解读 - 响应式系统

    一.目标对象标识 ** 类似于渲染系统,vue3.0的响应式系统也有自己的一套flag,用于标记目标对象target(通常是我们传入的数据源)的一些特性 export const enum React ...

  6. Asp.Net Core Authorize解析(源码解读)

    一.前言 IdentityServer4已经分享了一些应用实战的文章,从架构到授权中心的落地应用,也伴随着对IdentityServer4掌握了一些使用规则,但是很多原理性东西还是一知半解,故我这里持 ...

  7. Ext4.0源码解读(分享二)

    源码: core/src/Ext-more.js L 44 一来就 44 行? 我也没办法, 上面都是注释. Ext中的注释是非常多的.然这些注释都是文档注释.关键的注释很少. L 45 Ext.us ...

  8. cakephp 2.0 源码解读(一)

    lib - Cake -basic.php -bootstrap.php -Cache -Config -Configure -Controller -Core -Error -Event -I18n ...

  9. nodeJS之eventproxy源码解读

    1.源码缩影 !(function (name, definition) { var hasDefine = typeof define === 'function', //检查上下文环境是否为AMD ...

  10. Activiti源码解读之TaskService

    activiti-5.17.0源码解读之TaskService 源码路径:activiti-5.17.0\modules\activiti-engine\src\main\java\org\activ ...

最新文章

  1. tomcat配置相关总结
  2. 大数据为智慧城市建设添砖加瓦
  3. xman的思维导图快捷键_这个良心好用的思维导图软件,居然不用氪金充钱
  4. python编程基础_月隐学python第2课
  5. server2012 AD域 radius 802.1x认证
  6. 监控摄像机的区别和分类
  7. Pytest学习-如何在用例代码中调用fixtrue时传入参数
  8. 52_并发编程-线程-线程池
  9. 【Tensorflow】【损失函数】交叉熵数据验证(下)---BinaryCrossentropy二分类
  10. android获取手机联系人信息(电话,邮箱,姓名,头像)
  11. linux终端清除命令,清除Linux终端的6个命令
  12. 软件测试考证:ISTQB、软件评测师
  13. 剖析矩阵的本质及其意义
  14. Dubbo超详细学习笔记
  15. tracking里面几种常见图的画法
  16. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第39讲:PHP数据库编程MySQLi扩展库
  17. 小白科研总结:总结自己科研若干条建议
  18. 软件工程大一新生一些感悟与理解
  19. JAVA窗体程序调用图片、音频、字体资源
  20. 毕设 JAVA JSP家庭理财论文

热门文章

  1. 争渡读屏,做最好用的读屏软件 免费的盲人电脑和手机读屏软件
  2. Win7启动时黑屏很久才进入桌面的原因
  3. moviepy音视频剪辑:TextClip不支持中文字符以及OSError: magick.exe: unable to read font 仿宋_GB2312.ttf的解决办法
  4. 【22考研】国家线/34所自划线 集合!【计算机和软件专业】
  5. IHE测试系列之二:报名及参与过程
  6. python随机抽号器_python 随机抽取数据
  7. 自动化采矿的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. 十日谈 (share)
  9. 文件搜索工具android,Search Everything下载
  10. 快速迭代的互联网研发模式下测试如何突破?