自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 散记01:计算机的三大原则

但由于计算机在设计时,面临和人类完全不同的限制,采用的独特设计使得它的底层对于信息的处理机制和我们人类不尽相同(当然,也和其他机器不同,就如同放大镜和显微镜在设计上的不同,使得它们对于事物的观察尺度发生了根本的不同),因此,如果想要让计算机替代我们的手工作业,我们要做的顺应它的处理机制,就如同顺应自然规律。正因为计算机硬件上这样的特点,由于计算机是执行程序的机器,所以无论我们是编写简单或是复杂的程序,在头脑都要有一套输入、运算、输出的流程,而这一套过程又包含了诸多更小层次的输入、运算、输出的流程。

2024-07-02 21:58:40 272

原创 散记04:切片

因为切片实质是用数组指针指向数组地址,而它本身是没有数据内容的,因此我们通过判断一个切片为nil并不能表示切片的长度为0,虽然切片为nil时,该切片的长度和容量均为0,但是,如果数组指针指向一个无数据的空数组,虽然该切片不为nil,但却依然是长度为0,如果是通过判断一个切片为nil就认定该切片为空,那么很显然这种情况就是不为空,这就有逻辑错误。切片是基于数组做的一层封装。还有一种表达式为“待切片数组[low:high:max]”,其中max-low可以看做是新切片定义的容量,但也并不超过原切片的容量。

2024-06-29 21:22:03 239

原创 散记03:数组

多维数组是指它的元素也是数组(且是比它更低一维的数组),所谓“维数”,实际上就是数组嵌套的层数,A数组是B数组的元素,那么B数组就是比A数组更高层的数组。二维数组就是用最基本的数组作元素的数组。在Go语言中,数组是值类型,也就是说在函数传参时,传递是一个副本,而非数组首地址,这也就意味着,在函数中对数组作的任何改变只是会影响到副本,而不会影响要原数组。在定义数组时,要考虑数组长度的适宜,而在使用时,不能把两个长度不同的数组混在一起使用,譬如在函数定义时使用A长度的数组,但传入时用的是B长度的数组。

2024-06-29 16:48:17 101

原创 散记02:运算符、流程控制

与平常的if写法不同,这里score变量只是if语句块中的局部变量,并不能在外部使用。在只需要从开头到结束的遍历场景中,使用for range显然更加便捷,无需手动管理各类索引变量,当然有时也可以通过添加if语句判断使其遍历出条件需要的元素。该语法对于多层嵌套中的代码结构有良好的效果,可以免去多个break,以及多个break条件判断的编写,避免重复退出,能够一步到位。在多层嵌套的代码结构中,通过结束外层循环来一并结束内层循环,也不失为一种简洁的方法,且要比goto更有逻辑性和简明。map返回的是键和值。

2024-06-29 16:05:40 346

原创 散记01:基本数据类型

string类型实际上可以视作是一个固定化的、不能修改的byte数组,选用byte作为底层,而不用rune的主要原因是byte虽然不能表示多字节下的字符,但由于其单字节的特性使其更紧凑,占用内存更少,不会像rune那样可能会有许多空闲字节。在整数类型中,有两类,一类是指定长度的(如:uint8、int8、uint16、int16等等),一类是不指定长度的特殊整型(如int、uint、uintptr),它的长度是随所在平台不同而不同,在32位的计算机上则长度为32位,在64位的计算机上则长度为64位。

2024-06-29 12:02:28 379

原创 体系梳理01:计算机组成原理之迷思

这样的计算机虽然是可编程的,但编写好的程序不能存储下来供下一次加载使用,不得不每次要用到和当前不同的程序的时候,重新插板子,重新编程,而当我们想要使用上次的程序时,又要重新插线。而对于手机、服务器这类的设备,较于个人计算机来说,会在主板的设计和硬件的集成度上做出不同的调整。计算机是由各种门电路组合而成的,然后通过组装出一个固定的电路板,来完成一个特定的计算程序,对于“不可编程”的计算机而言,程序在计算机硬件层面是写死了的,做不了任何固定计算逻辑之外的事情,一旦需要修改功能,就要重新组装电路。

2024-06-17 16:34:15 943

原创 01 包的基本概念

A2:也就是说包下的每个文件因为有了包的标记而获得独特性,即便是两份同名为a.go的文件,也会因为一个属于b包,一个属于c包,而被标记为b/a.go和c/a.go,这让它的全称是不同的,这表明,即使相对路径下的文件名相同,包名的加入使得它们在编译器眼中具有了独一无二的身份,这通过包名的前缀在编译器层面实现了标识符的唯一性,使用包内部的标识需要添加包名前缀就体现了这一点。包位于Go的标准库路径中。S2:在同一个包内部声明的标识符都位于同一个命名空间下,在不同的包内部声明的标识符就属于不同的命名空间。

2024-06-11 16:40:26 453

原创 01 为什么要学习网络协议?

并且,并非是因为有了协议,所以计算机之间才能传输数据,计算机之间本身就可以通过各种物理线路进行传输,并不需要什么网络分层和它囊括的协议,而是因为仅仅能够传输数据是不够的,当一段数据从A电脑传输到B电脑,也许它在A电脑上是我发送的有意义的数据,但是这种有意义是主观的,B电脑作为一个没有思想的机器,它只能按照客观接受到的数据以及它固有的解析数据的程序进行解析,结果可能只是一堆乱码,我们需要通过人为规范交流的格式,并将这种格式内置成设备的程序,才能让主观变成客观,让你所理解的,正是我所传达的。

2024-06-11 13:45:36 378

原创 05 数组:为什么很多编程语言中数组都从0开始编号?

A1:也就当且仅当:数组只是一个存储数据的集合,里面的元素之间没有强关联的先后关系,也就是随意和无序存放,当我们想要要将指定值插入某位置时,由于并非有强关联的先后关系,所以该位置的元素就可以随意放在其他任何位置,而复杂度最低的情况就是将该位置的元素直接插在末尾(直接赋值即可),然后再将指定值赋值给该位置的存储空间,覆盖原值,完成插入。现在,我们要依次删除 a,b,c 三个元素。S1:如果数组中的数据是有序的,我们在某个位置插入一个新的元素时,就必须按照刚才的方法搬移 k 之后的数据。

2024-06-10 22:44:37 249

原创 03 你可以把Linux内核当成一家软件外包公司的老板

但因为一定要能够触及这些资源,不然管理就无从谈起,因此,作为最初就执行的程序,操作系统拥有最初没有操作系统时的程序通用的能力——可以直接操作底层,在现在,为了隔绝其余程序触及计算机资源,以防止其破坏自己统筹一切的目标,它在自身的程序逻辑上就阻止了其他程序,但同时,程序的运行必然需要一些计算机资源的支持,因此,操作系统就将它操作底层的一些代码通过系统调用(但实质应该就是函数接口)的形式供其余的程序调用(这似乎与main函数调用其他函数并无二致)。项目执行计划书是静态的,项目的执行是动态的。

2024-06-10 15:46:23 786

原创 01 冯·诺依曼体系结构:计算机组成的金字塔

A1:虽然说作者的意思是一台计算机不必需要配备显示器、鼠标、键盘和硬盘等设备,毕竟只需要CPU,内存,主板就完全可以运行程序和处理数据,从最狭义的角度来说,计算机的核心概念确实与该类输入输出设备无关,比如服务器,但从本质上来说,作为“可编程存储计算机”来说,这些设备还是一台计算机必须的部分,哪怕从物理连接上主机和输入输出设备并不在一起,但从抽象概念上,二者还是互相依靠,只有主机,没有输入输出设备,那么计算机不能为人类做任何事情。这里面其实暗含了两个概念,一个是“可编程”计算机,一个是“存储”计算机。

2024-06-10 14:59:44 741

原创 03 密码学基础:如何让你的密码变得“不可见”?

非对称加密似乎也可以用在对称加密的场景上,但由于非对称加密算法是基于各种难解的数学难题进行设计的,所以耗时巨大,特别是应对大量数据包时,性能成本或许将增加到无法忍受的地步,而对称加密则显然更加实用,因此对于双方建立通道、收发信息的过程中:首先使用非对称加密安全地交换一个临时的对称密钥,之后利用这个对称密钥进行大量数据的快速加解密。A1:我个人感觉加密算法对黄金法则的支撑体现在:首先认证上提供了身份的唯一性,其次,在授权上,数据只能被拥有解密手段的人使用,而审计所依赖的日志则是认证和授权操作的集合。

2024-06-08 19:52:51 398

原创 01 安全的本质:数据被窃取后,你能意识到问题来源吗?

但实际上,完整性还包括确保即使是授权的修改也是正确且预期的,只有既是“授权主体发出的”,又是“符合系统要求的”操作才能进行,也就是说系统需要有能力验证修改是否符合预设的规则或业务逻辑。A1:我个人认为,虽然CIA原则中,二者在作者的描述中似乎同为一种概念,但仍然可以从用词上看出区别,机密性是确保“数据只被授权的主体的访问”,可用性是确保“数据能够被授权的主体访问到”,前者强调的是授权这个机制所保证的效果,后者则是强调这个机制所保证的效果可以实现,数据在用户主体进行操作时,能够被看到或者使用。

2024-06-08 16:29:01 321

原创 01 存储:一个完整的数据存储过程是怎样的?

可以来考察,一个数据存储过程应该是怎么样的,再来看作者说的这四步是否成立,首先要存储数据,一定要有一个存储地,那么创建数据库和创建表就已经在一大一小两个层次上创建了管理和存储数据的两级结构,其次要存入数据,插入数据就是存入数据的手段,但为了确保数据可以成功和正确的插入,我们需要设计与待存储数据格式相同的表结构,这就涉及到了确认字段,而这一步是需要在创建数据表之前就完成了。同时也有效隔离了不同项目人员对其他项目的数据表的操作,A项目的人员只能操作他数据库下的数据表,而不能操作B项目下的数据表,增强安全。

2024-06-03 21:01:59 329

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除