前言

上一篇《我的技能树二》文章分享了我的技能中的前端技能和Java技能,今天继续跟大家分享的就是后端技能了。

我的技能树

我当前的技能树:

其中,标注为黄色旗帜的是基本掌握,标注为红色旗帜的为使用熟练。未标注的只是了解。

数据库

数据库

数据库是信息化系统编程的基础。因为我一直是做信息化系统的,所以这一块比较熟悉。最初熟悉的数据库是基于PB开发的Sybase,SQL Anywhere,现在已经不流行了。后来转到了SQL Server,再后来转到了Mysql,然后又熟悉了Sqlite。现在常用的数据库是Mysql和Sqlite的组合。这样选择的主要原因还是因为使用的人多,还免费。现在用这两种数据库也基本够用了,Mysql主管理系统端应用,而Sqlite主小型程序应用和Web前端应用。
对数据库的掌握,需要哪些基本知识点呢,我认为这些是必须的:

  • 标准SQL语法:掌握SQL语言中的DML,DDL,包括CRUD,多表关联,分组汇总等
  • 数据库性能调优:需要掌握对索引的基本理解,通过SQL执行计划对SQL语句进行优化。可以说不懂索引的话,就等于不会数据库编程,这样的系统是无法投入实用的,只是个玩具。
  • 数据库管理:初级DBA的一些能力,比如数据库对象的权限管理

ORM

ORM我使用Entity Framework(EF)和Dapper,一个重量级,一个轻量级,适用于各自不同的应用场景。我曾经对是否使用ORM很纠结,因为ORM确实对系统性能是有影响的。但后来我想开了,机器是为人服务的,我们使用ORM的目的,是为了解放人,能够使解放人释放出的红利,能覆盖机器开销增大而增加的成本。这个账,总体是算的过来的,否则ORM就不会流行了。同时,我们也要尽可能好的使用ORM,要细心研究,合理使用,使得ORM对性能的影响在可控的范围内尽量小,如果只做到菜鸟级别的使用,那可能是得不偿失的。
随着ORM的流行,我已经很少直接写SQL了。不过我也不喜欢EntityFramework的导航属性,觉得使用它时限制感比较严重,而且性能问题也比较明显,所以我的个人偏好的方式是,用“写SQL”的方式使用ORM,也就是使用LINQ,既利用了我对SQL熟悉的能力,也用上了LINQ的灵活性。
对于EF和Dapper的选型,我一般是:如果是做的是“产品”,那么使用EF,所以即使它只是一个单机版的小的系统,如果它是产品,我也会用EF+Sqlite来实现。而Dapper用于实现“接口”,比如产品系统要和外部系统对接,外部系统是项目型的,它的模型是不确定的,因此非常适合使用Dapper,一方面在外部接口端直接写SQL,在代码端又能用上对象化编程模型,两端的编程都得到了方便。

Ado.Net

对于传统的Ado.Net的使用,我现在已经不用了。对Ado.Net的了解,我只是在学习C#的时期,作为练手原因写一些demo,现实应用中已经完全没有必要使用它了。和它一起可以彻底淘汰的有:DataTable,DataSet。所以,但我看到还是使用DataTable的同学,我不禁想劝TA:该进步了同学!

设计模式

为什么要学习设计模式呢?其实对我来说,不能叫“学”,而是“了解”设计模式。在了解设计模式之前,我一直是按自己对OOP的本能理解在进行设计和开发。所谓“二十一种设计模式”,“二十四种设计模式”,源头都是来自于Java界。当我看到这些提法就有担心,自己的设计是不是遵循了设计模式的基本原则?有没有可改进的空间?因此觉得需要对设计模式有个全面的了解。
对照看过基本设计模式的书,一方面确实开阔了眼界,另外感觉对自己的实际编程帮助有借鉴,但其实也不大。一个原因是,自己平时的设计中,其实基本遵循了设计的一些原则,和某些设计模式类似。比如:工厂、单例、外观、装饰、组合等,自己下意识的就在用。另外,一些不常用的设计模式,自己其实平时也不会用到,原因可能是自己平时写的不是需要发布的那种第三方的类库,而都是项目的类库。这些类库,都是为了解决现场问题而设计的,而不会为了实际中没有发生的需求而进行预先设计。所以就没有必要精雕细琢,增加当前不需要的设计,这样对要遵循某种设计模式的必要性就降低了。
虽然看过设计模式的书后,现在我在编程过程中,大部分设计模式都不会有意识的去用,都还是凭对OOP的基本理解,代码怎么简洁,怎么容易阅读,怎么方便扩展这些基本原则来考虑,不会强求套用设计模式。我觉得这个思路也是对的。如果做什么设计都要去套用设计模式,可能适得其反,搞出不伦不类的设计架构。不过不管怎么样,不定期的回顾设计模式,将对设计模式的进一步的思考更好的融入到自己平时的设计中去,自己其实做的还不够,也需要加强。
我当前在产品中,用到的设计模式,我能想起来的,可能包括:简单工厂模式,单例,组合,桥接,外观,装饰,代理。

讲到这里,通过总共三篇文章的讲解,我也对我的整个技能进行了梳理,对自己的技能的进一步发展,也有了更清晰的规划,那应该包括:

  • 熟悉ionic:掌握包括angular,cordova这些跨平台的前端开发模式
  • 应用vue:现在vue越发流行,虽然前端我采用了angular,但可以将vue应用到我的产品后端,将传统的bootstrap+jquery+knockout的技术组合升级为bootstrap+vue的组合。
  • 需要一定程度的加强Android下的Java开发,学习IOS下的开发,能开发基于各平台的cordova插件
  • 不定期的回顾设计模式,将设计模式的优点内化为自己的能力。

在学习过程中,我在网络上收集过一些学习资料,在经过阅读后也甄选出比较经典的一些资料。有需要的朋友,可以在后台回复关键字“获取技能树”,可获得包括《C#高级编程》第七版,《Java编程思想》第四版,和《大话设计模式》的下载链接。

欢迎关注本人微信公众号,更及时的关注最新文章(每周多篇原创文章,以及多篇专题文章):


扫描二维码关注

基于.Net进行前端开发的技术栈发展路线(三)的更多相关文章

  1. 基于.Net进行前端开发的技术栈发展路线(二)

    前言 上一篇<我的技能树>文章分享了我的技能成长过程,还未完成,今天继续跟大家分享. 01 我的技能树 我的当前的技能树: 其中,标注为黄色旗帜的是基本掌握,标注为红色旗帜的为使用熟练.未 ...

  2. 基于.Net进行前端开发的技术栈发展路线(一)

    前言 今天想讲讲的是我的技术树.我最初是做CS开发的,第一阶段的技术经历是以Powerbuilder来做CS开发,第二阶段开始基于C#做winform开发,眼看前端开发越来越流行,需要更广泛的技术栈势 ...

  3. 网络统计学与web前端开发基础技术

    网络统计学与web前端开发基础技术 学习web前端开发基础技术(网页设计)需要了解:HTML.CSS.JavaScript三种语言.下面我们就来了解一下这三门技术在网页设计中的用途: HTML是网页内 ...

  4. 【web开发】web前端开发常用技术总结归纳

    技术选型规范规范 • Vue版本:2.x • 前端路由:vue-route • 异步请求:Axios • 全局状态管理:VueX • css预处理器:sass/less • h5项目移动端适配规则:使 ...

  5. web前端开发必备技术

    1.Vue.js是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注 ...

  6. 装饰器的初识,基于bootstrap的前端开发

    1装饰器的初识 概念:不改变函数原来的调用方式,动态地给函数添加功能 开放封闭的原则:1>对添加的新功能是开放的,32>不要在元代码进行修改(封闭) 1.1>函数的定义:对代码块和功 ...

  7. 快速了解“云原生”(Cloud Native)和前端开发的技术结合点

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 后端视角,结合点就是通过前端流控缓解后端的压力,提升系统响应能力. 从一般意义理解,Cloud Native 是后端应用的事情,要搞的是系统解耦.横 ...

  8. Web前端开发--JS技术大梳理

    什么是JS      JavaScript是一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语 ...

  9. 学习web前端开发基础技术需要掌握:HTML、CSS、JavaScript语言

    1. HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 2. CSS样式是表现.就像网页的外衣.比如,标题字体.颜色变化,或为标题加入背景图片. ...

随机推荐

  1. ajax源代码

    //**********第一步, 获得一个xhr对象************* var xmlHttpReq = null; //声明一个空对象用来装入XMLHttpRequest if (windo ...

  2. JAVA---MYSQL 基本知识点 第一部分

     一 :  什么是数据库? 数据库就是数据的仓库,用来存取数据的,也是一个文件系统,但是访问这个这个文件需要通过标准的SQL语句(统一的规则), 二 : 什么是关系型数据库?  关系型数据库通常保存的 ...

  3. d3.js,初遇

    接触d3完全是由兴趣所致,废话不多说看代码: var dataArray = [23, 13, 21, 14, 37, 15, 18, 34, 30];这是这个图所需要的数据,其实这个柱状图最初不长这 ...

  4. SpringBoot项目的创建流程(初步)

    小伙伴们在学习的过程中大概也发现了这两个框架需要我们手动配置的地方非常多,不过做JavaEE开发的小伙伴们肯定也听说过“约定大于配置”这样一句话,就是说系统,类库,框架应该假定合理的默认值,而非要求提 ...

  5. LeetCode编程训练 - 合并查找(Union Find)

    Union Find算法基础 Union Find算法用于处理集合的合并和查询问题,其定义了两个用于并查集的操作: Find: 确定元素属于哪一个子集,或判断两个元素是否属于同一子集 Union: 将 ...

  6. Javascript高级编程学习笔记(85)—— Canvas(2)2D上下文

    2D上下文 使用2D上下文提供的方法可以绘制简单的2D图形,如矩形,弧线和路径; 2D上下文的坐标开始域<canvas>元素的左上角,原点坐标为(0,0) 后续所有操作的计算都基于原点,x ...

  7. Python学习笔记【Supervisor】:使用Supervisor监控Tornado进程

    Linux常见应用服务配置模式nginx和supervisor:采用主配置文件+项目配置文件 安装(如果使用pip安装注意看是否需要指定使用python2版本) 第一步:在Linux中使用apt-ge ...

  8. 执行find / -name *.sh时报错 find: 路径必须在表达式之前: start-ressvr-release.sh

    想查找一个包含4000多文件的目录下所有.sh结尾的文件 使用命令     find  ./ -name *.sh     (本身已经在要查找的目录里了) 结果报错:  解决方法一:find ./ - ...

  9. 10 个深恶痛绝的 Java 异常。。

    异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题. 什么是异常及异常的分类请看这篇文章:一张图搞清楚 Java ...

  10. Spring多线程批量发送邮件(ThreadPoolTaskExecutor)

    1,需求:使用多线程批量发送邮件 需要批量发送邮件大概400封左右,但是因为发送邮件受网络限制,所以经常导致等待超时.所以就想到了使用多线程来发邮件,因为是异步的所以返回结果不受发邮件影响. 2,思路 ...