《码农翻身》之技术之路

article/2025/9/21 13:59:39

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

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

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

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

本文首发于我的个人博客: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等服务端技术也喜欢使用异步回调

架构师

写作

编程学习

微信公众号

个人公众号:程序员黄小斜

微信公众号【程序员黄小斜】新生代青年聚集地,程序员成长充电站。作者黄小斜,职业是阿里程序员,身份是斜杠青年,希望和更多的程序员交朋友,一起进步和成长!专注于分享技术、面试、职场等成长干货,这一次,我们一起出发。

关注公众号后回复“2019”领取我这两年整理的学习资料,涵盖自学编程、求职面试、算法刷题、Java技术学习、计算机基础和考研等8000G资料合集。

技术公众号:Java技术江湖

微信公众号【Java技术江湖】一位阿里 Java 工程师的技术小站,专注于 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!

关注公众号后回复“PDF”即可领取200+页的《Java工程师面试指南》强烈推荐,几乎涵盖所有Java工程师必知必会的知识点。


http://chatgpt.dhexx.cn/article/ICZH13KJ.shtml

相关文章

给大忙人看的码农翻身记

码农翻身记个人读后感 文章目录 码农翻身记个人读后感本书介绍大纲启发分享个人的能力欠缺的地方书中比较棒的建议 本书介绍 《码农翻身》用故事的方式讲解了软件编程的若干重要领域,侧重于基础性、原理性的知识。 非常适合刚入门大学生或者 计算机领域入行 一两年左…

码农翻身之编程语言的巅峰

“哇塞,怎么可能这么简单!” 当C语言老头儿还是小伙子的时候,第一次见到了汇编,发出了这么一声感慨。 在C语言看来,这汇编的指令实在是太简单了,简单到了令人发指的地步,只有这么几类指令&…

《码农翻身》

大话编程 我是一个线程 我是一个Java class Javascript: 一个屌丝的逆袭 Java:一个帝国的诞生 JSP:一个装配工的没落 TCP/IP 之 大明王朝的邮差 TCP/IP 之 大明内阁 TCP/IP 之 蓟辽督师 CPU 阿甘 CPU 阿甘之烦恼 CPU 阿甘:函数调用的秘密 我是一个网卡 …

码农翻身 各章节链接

大话编程 我是一个线程 我是一个Java class Javascript: 一个屌丝的逆袭 Java:一个帝国的诞生 JSP:一个装配工的没落 TCP/IP 之 大明王朝的邮差 TCP/IP 之 大明内阁 TCP/IP 之 蓟辽督师 CPU 阿甘 CPU 阿甘之烦恼 CPU 阿甘:函数调用的秘密 我是一个网卡 …

读书笔记(一)《码农翻身》

好久都没有写技术博客了,大概有一年左右没有开始写了,原因是自己弄了一个日志博文,当然这不是重点,重点是心态发生了改变,从心里上感觉技术兴趣不大了,后来又发现,并不是对技术失去了兴趣&#…

写给初学者:编程的本质

俗话说,开卷有益, 前几天又翻了下《计算机程序的构造和解释》,看到一个采用牛顿法求平方根的例子,产生了点新的感想,和大家分享下。 平方根的数学定义是这样的,对于一个数x , 如果有另外一个数r, r大于等于…

码农翻身全年文章精华

在码农翻身公众号写了一年多, 最大的体会就是:原创真心不易! 每天思考的最大问题就是: 下一篇文章写啥? 在大家的支持和鼓励下,还是坚持了下来, 回头看看走过的路,这一年过得还算…

如何还原保存的训练模型

训练模型的还原 之前把训练模型存盘,实际上保存的是模型里所有变量当前运行的值。这相当于是训练模型的快照,把保存的时间点的所有变量都变成存盘文件保存起来。如果要还原这个模型,我们需要从存盘的模型中把所有变量的值读取出来&#xff0…

VisionPro 9.5中的工具调用和工具组(ToolBlock)调用

VisionPro是Cognex的机器视觉算法软件,通常的做法是使用VS做二次开发。 这里主要分享VisionPro中通过ToolBlock实现一个视觉检测,以及通过调用单个Tool实现一个视觉检测。 最终实现一个硬币数量检测以及坐标位置输出的应用: 使用ToolBlock的…

未能找到任何适合于指定的区域性或非特定区域性的资源

未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“WindowsFormsDemo.UnifiedConfigListControl.resources”正确嵌入或链接到程序集“设备配置助手”,或者确保所有需要的附属程序集都可加载并已进行了完全签名 之前写过一篇这个问题&…

超强Video深度学习开源工具集,来了!

01 导读 广大人工智能算法工程师,有没有感觉到近几年AI程序员数量激增,公司新来的程序员也可以轻松实现图像分类、目标检测等基本深度学习任务,资深算法工程师岗位如何自保?广大内容平台的后台开发者,视频理解&a…

opencv上设置摄像头曝光参数的经验

实际应用中我们需要调整摄像头的参数比如曝光,由于opencv的后端是一般编译是支撑多种插件,详细信息请参考OpenCV: Video I/O with OpenCV Overview,这里引用里面的图: 对于VideoCaputure,后端有ffmpge,V4L&…

VS 配置 openCV 、Python 、Pytorch

VS 配置 openCV 和 Python 1、VS配置opencv1.1 系统环境PATH增加1.2 复制到Sysmtem32下1.3 配置项目1.3.1 包含目录添加1.3.2 库目录添加1.3.3 附加属性依赖项 2、VS配置Python2.1 复制include和libs文件夹复制到vs项目路径下面2.2将你需要调用的python脚本也存放在该目录下面2…

做机器视觉哪个软件好?

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 机器人视觉有接触,但是不多,这里我推荐一下一个详细介绍的视觉软件。 在构建机器视觉系统时,开发人员可以选择众多知名公司的商用软件…

康耐视Visionpro脚本编写教程一

theme: github ​本文已参与「新人创作礼」活动,一起开启掘金创作之路。 康耐视visionpro脚本编写 visionpro目前来说在工业中的应用时非常的广泛的,而且作为苹果手机厂指定的视觉厂家来说,他的实力是毋庸置疑的。 康耐视VisionPro的优势&…

visionpro联合c#二次开发二

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 本次康耐视联合C#文档是最后一篇visionpro与C#联合的文章,后续我们将开始c#与halcon的编写或者vidi的文章。 首先我们定义所需要的变量 //定义作业CogToolBlock job;//定义作业VPP的路径string p…

Visionpro联合c#二次开发

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 本文已参与「新人创作礼」活动,一起开启掘金创作之路。 本次文章将会在最近半个月一直出关于康耐视的软件的应用的介绍,前期先是vp, 后续如果大家有兴趣,也会…

Segmentation-Based Deep-Learning Approach for Surface-Defect Detection-论文阅读笔记

Segmentation-Based Deep-Learning Approach for Surface-Defect Detection 基于分割的表面缺陷深度学习检测方法 //2022.7.20下午12:49开始阅读笔记 论文速览 文中提出了一个基于分割的两阶段的表面缺陷检测方法。第一阶段包括在缺陷的像素级标签上训练的分割网络&…

论文阅读:Segmentation-Based Deep-Learning Approach for Surface-Defect Detection

PDF\CODE 基于深度学习分割的表面缺陷检测 Domen Tabernik(domen.tabernik@fri.uni-lj.si); Samo Šela; Jure Skvar; Danijel Skoaj(danijel.skocaj@fri.uni-lj.si) part of Springer Nature 2019 摘要:基于机器学习的表面缺陷自动检测已经成为一个有趣且有发展…

Segmentation-based deep-learning approach for surface-defectdetection(基于分割的表面缺陷深度学习检测方法)

论文地址:https://arxiv.org/abs/1903.08536v3 摘要 基于机器学习的表面异常自动检测已经成为一个有趣且有前途的研究领域,对视觉检测的应用领域有着非常直接的影响。深度学习方法已经成为完成这项任务最合适的方法。它们允许检查系统学习通过简单地显示…