
现代化程序开发笔记
EvianZhang
东南大学网络空间安全学院2017级本科生
展开
-
现代化程序开发笔记(17)——从HTTPS到iOS和Android的签名机制
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将从数字签名与证书开始,逐一介绍Web端、iOS端和Android端App的可信安全机制。不止于保密的三大问题我们知道,在现代科技领域,安全与密码学紧密相关。如果我们需要保证一个产品的安全,那么一定会去求助于密码学的工具。那么,密码学解决的究竟是什么问题?保密最基本的,密码学是为了保密。Alice和Bob在大庭广众下通信,但仍然不希望他人知道他原创 2020-07-12 15:32:05 · 410 阅读 · 0 评论 -
现代化程序开发笔记(16)——序列化与反序列化
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将介绍的是序列化与反序列化的相关技术与数据格式标准。需求背景众所周知,任何一个大型程序都需要和外界进行数据沟通交流,既需要接收外界传入的数据,也需要把内部计算得出的数据持久化。同时,随着程序规模的扩大和逻辑的复杂化,我们需要将数据妥善地组织才能进一步地接收或存储。比方说,我需要接收的数据同时包括一个人的姓名、性别、年龄,那么我们就需要与数据的发送方原创 2020-07-09 14:37:23 · 364 阅读 · 0 评论 -
现代化程序开发笔记(15)——各端数据库框架
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将介绍的是数据库在编程中的一些技术,以及iOS端和Android端的数据库框架。常见数据库众所周知,数据库就是我们在日常软件开发的时候用来存储、查询、修改持久性数据的技术。我通过之前自己做的几个小项目,积累了一些各个常见数据库的经验。键值对数据库要想记录数据,最最最直接的想法,就是使用键值对。我们可以把键值对数据库想象成一个字典,比如说,我要记原创 2020-07-06 14:35:21 · 646 阅读 · 0 评论 -
现代化程序开发笔记(14)——iOS+Android开发套件全解
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将介绍的是iOS和Android原生应用开发中所需要的套件。应用开发模式首先,我们要搞清楚,开发一个原生应用,究竟是一个怎样的模式。直白地说,就是:操作系统提供者将新系统的API和动态链接库打包成SDK发放给开发者开发者使用SDK开发应用开发者将应用投放到新系统中供用户使用这三步说起来很简单,但是在实际生产过程中,有许许多多的开发套件以原创 2020-07-02 13:59:52 · 381 阅读 · 0 评论 -
现代化程序开发笔记(13)——Git与Monorepo
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将简要介绍代码版本管理利器Git,同时谈一谈Monorepo的工作方式。代码版本管理工具作为开发者,我们通常会遇到两种写代码的场景:一种是写一个简单的程序或者demo,也许就几行,顶多也就两三个文件,要么用于自己的测试,要么用于展示,总之没有什么重要性,而且用完就被删了;另一种情况则是和他人合作,一起写一个很大的项目,并且会长期维护。第一种情况并不原创 2020-07-01 13:45:41 · 547 阅读 · 0 评论 -
现代化程序开发笔记(12)——泛型与多态
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将介绍的是泛型与多态。共性与标准我们为什么要使用泛型与多态?这些诡异的中文译名究竟指的是什么?我觉得,要解释这个问题,就需要指出我们实际编写项目时需要的共性与标准。假设我们在编写一个快餐店的程序。快餐店中,有服务员、薯条厨师、汉堡厨师和炸鸡厨师,在我们的程序中,这每一个职业都被实现为一个类,这个思路是很自然的。每个职业除了都有自己个性的工作,比如原创 2020-06-30 10:52:54 · 288 阅读 · 0 评论 -
现代化程序开发笔记(11)——异步编程杂谈
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将以我的理解从头开始梳理一遍异步编程。从网络IO开始作为一个服务器程序,最重要的就是维护网络的IO。我们知道,一个TCP连接对应一个TCP套接字,服务器程序需要做的,就是妥善处理这些套接字中的数据。粗略地说,一个服务器程序做的事如下:告诉内核自己监听了哪些套接字端点(socket endpoint)内核维护TCP连接,并将接收到的数据传递给服原创 2020-06-27 15:40:55 · 254 阅读 · 0 评论 -
现代化程序开发笔记(10)——空值处理
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将介绍的是空值的处理。问题的由来我们知道,程序中的大部分变量,要么分配在栈区要么分配在堆区。分配在堆区的变量,总是需要一个指针来管理。在C语言中,我们可以这么写:struct MyStruct *my_struct = (struct MyStruct *)malloc(sizeof(struct MyStruct));来在堆区创建一个变量,原创 2020-06-25 10:49:38 · 313 阅读 · 0 评论 -
现代化程序开发笔记(9)——异常处理
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将讨论的是主流的异常处理的方法。首先,我们要知道,异常处理通常分为两种:一种是比如把0作为分母,或者把NULL解引用,这类都属于操作系统或底层硬件告诉你这不该做的;而另一种则是开发者自己编写程序的时候,发现了不符合程序需求的地方,比如说从数据库查询一条数据,结果却返回了两条记录,这种是由开发者自己提醒自己做了不该做的事,程序出了问题。我这篇文章主要讨原创 2020-06-24 13:59:32 · 244 阅读 · 0 评论 -
现代化程序开发笔记(8)——通俗易懂的函数式编程入门
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将尽量用通俗易懂的方法,介绍函数式编程的入门知识。什么是函数式编程作为一个开发者,面对一个需求,我们掌握的知识常常是一定能完成这个需求,但是完成的方法多种多样,我们需要选择更好的技术来完成这些需求。就比如说我们是做汉堡的厨师,那么只要具有这方面的知识,这汉堡总能做成,无非是将制作好的肉、酱、蔬菜放在两片面包之间。但是,完成这个汉堡的手法有多种,比如原创 2020-06-23 16:26:09 · 425 阅读 · 0 评论 -
现代化程序开发笔记(7)——闭包
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将讨论的是现代语言中的闭包。函数起名之痛在现代语言中,函数是一等公民的思想几乎贯彻在了每一个编程语言中,函数应该和变量一样,能够自由地作为参数和返回值在函数间传递。比方说,一个游戏的开发者在写代码的时候发现,有好几种怪物的代码都极其类似,但只有其进行打斗的样子不同。因此,开发者将这几个怪物的代码封装成同一个函数monster,那么怎样区别这几种怪物原创 2020-06-22 14:05:31 · 267 阅读 · 0 评论 -
现代化程序开发笔记(6)——赋值语义
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将讨论的是现代语言的各种赋值语义。背景无论我们使用什么语言进行编程开发,都会遇到一个基本的问题,比如说以C++为例:struct MyStruct { int foo; };void foo() { MyStruct my_struct1, my_struct2; mystruct1.foo = 1; my_st原创 2020-06-21 14:39:46 · 336 阅读 · 0 评论 -
现代化程序开发笔记(5)——生命周期管理
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将讨论的是现代语言的变量生命周期管理机制。背景我们知道,在一个程序运行的时候,任何一个使用的变量在内存中都会占有一定的空间。而除去特殊的静态数据区,在大多数操作系统中,变量要么储存在栈上,要么储存在堆上。创造变量有两种方式,一种是直接在块级作用域内声明局部变量,这种变量是分配在栈上的,另一种则是调用操作系统提供的内存分配函数如malloc等,这种变原创 2020-06-20 16:22:12 · 245 阅读 · 0 评论 -
现代化程序开发笔记(4)——包管理工具
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我会就项目构建工具和包管理工具做一些讨论,先讨论一个理想的包管理工具应该做到什么,再就一些具体语言的相应工具作一些对比。刀耕火种的时代在编程语言最早出现的时代,大家写的项目都不大,开发者手边,只有用来写代码的编辑器,和用来编译结果的编译器(假设链接器已经包含在编译器内了)。打个比方来说,最早期的开发者,就像是刚开业的快餐店,只制作并售卖一种食物。开发原创 2020-06-19 15:47:50 · 292 阅读 · 0 评论 -
现代化程序开发笔记(3)——多文件与模块
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在这篇文章中,我将对现代编程语言的多文件和模块部分进行一些介绍。模块化编程随着现代编程开发项目的代码量越来越大,参与开发维护的人数越来越多,模块化编程这一理念变得十分重要。就像我所说的,模块化编程实际上是一个理念,它倡导的是开发者利用各种手段,将不同作用的代码块隔离。比方说,众所周知,巫师三的两个核心功能是昆特牌功能和与女术士增进感情的功能。假设我们是简陋版巫师三原创 2020-06-18 15:14:28 · 304 阅读 · 0 评论 -
现代化程序开发笔记[2]——编译方法
本系列文章以我的个人博客的搭建为线索(GitHub 仓库:Evian-Zhang/evian-blog),记录我在现代化程序设计中的一些笔记。在本篇文章中,我想就编译方法作一些讨论。运行平台简介我们的计算机执行一个程序,其本质的过程如下:我们告诉操作系统,要执行某个程序操作系统查看该程序,并告诉CPU如何执行这个程序CPU开始执行程序在这个过程中,我们可以发现,影响一个程序执行的因素有两个:操作系统决定这个程序该如何执行,以及CPU根据程序执行相应的指令。“操作系统决定这个程序该如何运行”原创 2020-06-17 11:31:25 · 323 阅读 · 0 评论 -
现代化程序开发笔记[1]——简介
转眼大学生活已经快过去三年了,我的程序开发知识也获得了许多。因此,正好这段时间比较轻松,我就重构了一下我原来很简陋的个人博客,并且开发了Web端(地址Evian张的博客)、iOS端和Android端,并将代码开源在GitHub上Evian-Zhang/evian-blog。在开发的过程中,我也对之前的知识进一步地巩固,并获得了新的经验。因此,我打算以我的博客开发为线索,记录现代化程序开发的笔记,并分享给大家。由于是个人博客,所以相比于比较老旧的语言、框架,我更加喜欢尝试一些全新的,口碑好的技术。目前我的博原创 2020-06-17 11:28:58 · 224 阅读 · 0 评论