《码农翻身》之技术之路

《码农翻身》读书笔记之技术之路

这是我的后端读书笔记系列文章的第四三篇,选取的是最近刚刚圈粉的知名博主刘欣创作的《码农翻身》。这篇文章只是最后一部分内容。

本文内容主要根据知名博主刘欣一作《码农翻身》的内容总结而来,本书的内容风趣幽默,讲解计算机理论原理也是十分透彻,由于书中常常以小故事的形式出现,为了方便学习和回顾,我把它们进行了一些改编和整理,便于自己和跟多人阅读。

本篇文章主要讲述的书中的第四章,第五章,第六章。

本文首发于我的个人博客:https://h2pl.github.io/

同时发表在csdn技术博客上:https://blog.csdn.net/a724888

也欢迎来我的GitHub中交流学习:https://github.com/h2pl/

代码管理那些事

版本控制工具

很早以前代码还在使用人肉管理,比如一个毕业论文可以有几十个名称和副本。

后来出现了代码管理工具,最早是使用文件锁避免文件互相覆盖,每次只能有一个程序访问文件,效率低下。

后来的VSS开始允许代码冲突,要求用户到代码仓库下载最新版本,并且在更新代码时如果有冲突则需要手动处理。

为了支持一个项目的多版本同时开发和发布,开始出现了分支的概念,分支可以从一个版本开始继续后续开发,不影响主干分支。必要的时候再进行分支合并即可。

集中式代码库比如svn,需要用户每次进行版本管理时都进行联网操作,比较低效。

分布式管理工具git出现了,它允许用户有一个本地仓库,现在本地进行修改和版本发布,然后必要的时候再和远程仓库进行同步,开发效率更高,并且可以在发布前就进行代码评估。

项目构建工具

手动构建和部署

项目构建可能分为很多步,先拉代码,再编译源码,然后修改配置文件,导出war包,上传服务器,进行测试。。等等

自动化代码或脚本

手动完成这些操作显然是低效睿智的,所以我们可以写一些自动化代码来完成这一步骤。

xml配置

如果直接用Java代码开发自动化API,固然也可以,但是使用xml这样的描述性语言更能够支持多种语言,而且达到自解释性。

ant就是这么做的。

约定大于配置

由于构建的步骤大多大同小异,主要的区别在于每个项目的路径不同,依赖不同等等。

为了求同存异,我们可以约定编译路径,测试类路径,以及web文件路径等等。然后再灵活地使用xml配置依赖包,项目名称等等。

这样的话大量的重复配置可以被约定所取代,只需要少量的配置就可以解决。

maven使用了这样的方式,于是马上超越了ant。使用pom.xml文件进行少量配置就可以完成自动化地编译,打包,单元测试以及部署等等功能。

代码重构

单元测试

我的编程语言简史

JavaScript

HTML会在浏览器被解析为DOM树。

而JavaScript可以在不改动html代码的情况下改变DOM树的节点,以实现动态更改页面的效果。

除此之外js还可以控制浏览器,打开窗口,等等。

由于js没办法访问网络,所以后来推出了xmlhttprequest实现了向服务器发送异步请求的功能,并且使用回调函数接收数据,并且只需要局部刷新就可以完成数据获取。后来被叫做ajax。

为了优化数据传输速度,xml渐渐被json取代

node js

nodejs的出现使得js不仅可以运行在浏览器,还可以运行在服务端,他也采用了js的异步编程模型,并且使用单线程处理请求,同时是基于事件驱动的,不会阻塞在耗时操作上。

nodejs的出现使得js全栈工程师成为可能。

c和Java

1 c实在是一门很古老的语言,他很贴近底层,代码可以跨平台编译运行,如果有和操作系统强耦合的api,则可以使用条件编译来支持跨平台。

2 c语言非常贴近硬件,可以直接操作内存,使用指针。
而Java则不行。

3 c语言一旦编译连接后就是一个独立运行的进程,拥有独立的地址空间,cpu独立调度。而Java的class类只是字节码,没有jvm就无法运行,jvm本质上是java.exe进程,而每个类则必须让进程中的一个线程来执行。可谓是天差地别。

4 c语言编译过程有一个步骤是链接,比如一个c程序中调用了另一个程序的方法,在编译过程中两个c程序都会变成中间代码,第一个程序必须把方法的实际地址改成第二个程序的地址,这样才能真的执行到其方法。这个过程叫做静态连接,在编译期完成。

而Java的class类也有连接的过程,只不过一般是动态连接,只有用到某个类的方法时,才会把链接真正进行链接。

当然c也可以使用dll动态链接库,原理是把共享代码预先编译好,需要用到的时候才进行连接,而不是一开始就写在源程序里进行静态链接。

c++学习之路

c和c++

c很接近硬件,适合做系统编程,却不适合新手入门去做一些简单的应用,因为它没有gui。

vb是个简单gui编程工具。但是由于是单机的语言,很快就被互联网时代淘汰了。

c++的学习门槛很高,要真正掌握c++技术实在是非常困难。要么是c++专家,要么是一窍不通。

Java和后起之秀

Java比起c++来说实在简单多了,没有指针,只有简单的api,以及易懂的语法,不用担心内存方面的事。

Java适合作为后端语言,除了作为框架填充员以外,后端还有很多有意思的技术,负载均衡,灾备,缓存,消息,分布式,数据备份,搜索等,大后端技术栈深不可测。

Java适合做大型项目,并且也深入到移动端以及大数据方面,相信还能保持年轻很长一段时间。

Ruby和Python的出现大大滴改变了web应用开发的效率,简直是颠覆性地塑造了web应用的快速开发流程。虽然动态语言有一些问题,但是快速开发的效率赢得了很多的青睐。

命令式编程与声明式编程的区别:

命令式就是根据计算机的编程方式进行代码编写。
声明式就是类似sql这种更符合语言习惯的操作描述。

声明性的一个体现来自于函数式编程,简单的语法可以表达很多的意思。

老司机的精进

凡事必先骑上虎背

计算机世界的大道理

局部性原理

局部性原理用于缓存,页面缓存,以及JNI预编译等需要预先加载数据,方便后续访问的场景。

缓存

缓存也利用了局部性原理,加快热点数据的读写,加快系统速度。

抽象

抽象是计算机最重要的概念之一,很多东西都被我们抽象成某个名词。

1 比如指令集,实际上是对cpu的抽象,我们只要根据指令集来编写机器码,然后cpu的实际的电路运行情况我们一无所知。

2 文件则是对输入输出设备的抽象,磁盘和磁盘里的文件都是计算机定义的抽象,本质上他们只是磁盘的一个小小的区域,我们不需要知道磁盘的构造是怎么样的。

3 进程是对一个正在运行程序的抽象,我们知道与进程相关的数据结构,pcb等,而不必知道这些数据在内存上是怎样的一种存在形式。

4 虚拟存储器是对程序存储的抽象,可能是物理硬盘上的一个页,也可能是内存中的一个实际页。

5 虚拟机则是对整个计算机的抽象,包括操作系统,处理器和程序等。

分层

比如网络7层模型,MVC模型。
每层只与相邻层有关系,不至于牵一发动全身

异步调用

同步的调用往往需要线程或进程的阻塞等待返回,而异步的调用则一般提供一个回调函数,等待对方执行完调用时通过执行该函数返回结果。

比如JavaScript,nodejs都喜欢使用异步回调。
nginx,netty等服务端技术也喜欢使用异步回调

架构师

写作

编程学习

猜你喜欢

转载自blog.csdn.net/a724888/article/details/81362735