- 博客(35)
- 收藏
- 关注
原创 详谈面向对象
这篇文章中我们静态类型系统中基于类的面向对象介绍了面向对象的四大基本特性——封装、继承、多态和抽象,但这并不意味着动态类型系统中的面向对象不具备这四大基本特征,只是其表现形式上和静态类型系统中的面向对象有所差别,所以我们也简单介绍了动态类型系统中的面向对象的四大基本特征的表现形式。同时我们对基于类和基于原型的面向对象做了简单的对比介绍,其中基于原型的面向对象只有少数动态类型系统的编程语言才支持。
2023-05-08 03:02:51
196
原创 以面向对象为核心的多范式编程
我个人的编码风格就已经形成了——整体上,代码的组织方式是面向对象的;实现对象内部的算法的时候,使用面向过程的编程方式,同样的,在实现某个具体的功能的时候,也是使用面向过程的方式进行思考,但是过程中的核心功能是由一个个对象负责的,而不是由函数承载;在实现算法的时候辅以函数式编程来提高算法的通用性和灵活性。
2023-03-19 21:06:28
236
原创 设计要有度——KISS、YAGNI和简单设计原则
YAGNI 原则跟 KISS 原则并非一回事儿。KISS 原则讲的是“如何做”的问题(尽量保持简单),而 YAGNI 原则说的是“要不要做”的问题(当前不需要的就不要做)
2022-09-18 23:31:35
547
原创 Java中的表达式和语句
Java中我们可以用不带break的switch语句来实现一个简单的状态模式,可以用带标签的break和带标签的continue语句来实现更加精细的流程控制。
2022-07-21 23:57:35
709
原创 Java中的数据类型和字面值
Java提供了数字、布尔和字符串这三种最基本的字面值语法。在数字原始类型的运算中,会根据把值集较小的变量或者字面值的数据类型自动进行提升,这种提升是类型安全的。
2022-07-20 00:33:35
617
原创 文字相关的样式
文字是构成网页的关键,是信息的主要载体之一,在指定文字样式的时候要充分考虑文字的功能。如果是正文,则通常不建议添加太多花哨的样式,否则很有可能华而不实,反而影响阅读,这个时候样式就会成为信息噪音。反之,如果是有特殊功能的文字,如标题、连接、帮助信息......则建议是当添加标题以起到突出信息的作用,在视觉上与其他内容区别开来。...
2022-07-07 00:51:52
800
原创 CSS选择器
其实css选择器是一种表达式,其被浏览器解析用来选中符合规则的DOM节点。而一个DOM元素可能会被多个选择器同时命中,这个时候我们就需要计算选择器的优先级。
2022-07-07 00:50:24
671
原创 RPM软件管理机制和YUM在线升级机制
RPM是一种软件管理机制,我们可以直接使用rpm命令来进行软件的管理,也可以使用基于RPM软件管理机制的YUM机制所提供的yum命令来在线管理我们的软件
2022-06-26 20:20:32
1168
原创 Linux下软件管理方式
在Linux下安装软件的方式大体是类似的,我们可以使用发行版提供的包管理工具来进行软件的安装,也可以通过直接编译源代码的方式来进行软件的安装。
2022-06-26 20:19:13
470
原创 软件设计第一步——分离关注点和单一职责原则
分离关注点是软件设置中至关重要的第一步,在分解的过程中,单一职责原则可以指导我们避免分解粒度过大的问题。
2022-06-05 02:48:15
1080
1
原创 什么是代码质量
算法和软件设计其实是一样的,二者对抗的都是规模问题,只不过,算法对抗的是处理数据的规模,而软件设计对抗的需求的规模和代码量的规模。
2022-04-25 01:09:33
1933
原创 高级语言是如何运行的——语言的运行方式
高级语言的运行方式有两大类,一类是直接把我们的高级语言的代码翻译为机器码,由机器直接运行,采用这种方式运行的语言我们称之为编译运行的语言;另一种就是再为我们的高级语言专门写一个程序,这个程序的作用就是解释执行我们的高级语言的代码;采用这种方式运行的语言我们称之为解释执行的语言。
2022-03-14 01:02:04
12974
原创 计算机是如何读懂高级语言的——编译过程简述
从上面的图中我们可以看出,编译器的前端就是编译器对程序代码的分析和理解过程,它通常只和语言的语法有关,跟目标机器无关;而与之对应的后端则是生成目标代码的过程,这是跟目标机器有关的。
2022-03-14 00:42:37
1794
2
原创 如何写出更优雅的代码——编程范式简述
编程范式本质是从某方面对程序员编程能力的限制和规范,很多编程范式已经被熟知禁止使用哪些技术,同时允许使用哪些。例如,结构化编程不允许使用goto;纯粹的函数式编程不允许有副作用。
2022-03-14 00:26:20
924
原创 高级语言中的成语——函数
而在高级程序设计语言中,通过子程序,我们可以把一些常用的功能封装起来,在需要的地方去调用它。那么就可以做到用一行代码实现非常丰富的功能
2022-03-09 23:35:28
535
原创 静态类型语言中类型的灵活性——泛型和变型
协变与逆变(Convariance and contravariance)是在计算机科学中,描述具有父/子型别关系的多个数据类型通过型别构造器构造出的多个复杂数据类型之间是否有父/子型别关系的用语。
2022-03-09 23:28:32
399
原创 高级语言基本世界观——类型系统
不同语言的类型规则可能天差地别,但是我们往往会从两个维度来描述一门语言类型系统的基本特征,分别是: 动/静、强/弱
2022-03-09 22:48:11
600
原创 终端相关的概念
Linux中与命令行终端相关的术语非常多,比如控制台(Console)、终端(Terminal)、Shell、Bash、命令行(Cli)、tty等等,这些术语的使用往往非常混乱,甚至在日常的使用中往往指代同一个东西——一个黑乎乎的命令行界面。...
2022-02-27 02:10:15
1235
1
原创 高级语言中的短语和句子——表达式和语句
了解完基本的语言结构token之后,下一步就是学习语言的语法,然后使用特定的语法结构排列token来构成更加高级的语法结构,类似于英文中的短语和句子,高级程序设计语言中更高级的语言结构是表达式和语句。
2022-01-29 22:43:16
1240
原创 学习环境安装
刚开始学习Linux操作系统,使用虚拟机搭建学习环境是成本最低也是最好的选择,这里我选择的虚拟机软件是VMware,大家也可以选择VirtualBox,根据自己的喜好选择适合自己的虚拟机软件就可以了。
2022-01-16 04:36:46
1185
1
原创 最好、最坏、平均、均摊时间复杂度
对一个算法进行时间复杂度分析的时候,我们也要考虑同规模数据的不同情况对算法效率造成的影响,也就是我们需要对输入数据的具体情况进行分类讨论,才能比较准确地评估一个算法的实际情况,甚至,在数据规模相同的情况下,数据的实际情况会决定我们对算法的选型。
2021-12-12 21:04:17
1198
原创 算法复杂度分析
复杂度分析就是算法世界基本的是非观,只有掌握了复杂度分析,我们才能对代码的效率好坏有一个基本的判断能力。如果你只是掌握了数据结构和算法的特点、用法,但是没有学会复杂度分析,那就相当于学武功只学习了招式,而没有掌握内功心法,只有把心法了然于胸,才能做到无招胜有招
2021-12-12 03:54:14
348
原创 数据结构中的原子、分子和物质
结构分为三个层次,分别为标量数据,基本数据结构和高级数据结构。标量数据是数据结构中的原子,它是不可再分的,是最终的信息载体;基本数据结构是数据结构层级中的分子,它具提供了组合原子和其他分子的基本能力;而高级数据结构,所聚焦的问题其实也是把大量同构的数据组合成一个群体的问题。到了高级数据结构这个层次,基本上对应的就是数据结构中的逻辑结构了。
2021-12-08 23:09:22
820
原创 高级语言中的单词——5种类型的token
《高级语言中的单词——5种类型的token》原文链接,阅读体验更佳特别感谢李文塔工程师,这篇文章中借鉴了《Go语言核心编程》中第一章的许多内容,其实在写这篇文章的时候我卡了很长一段时间,也重新写了很多遍,但是总觉得思路不对,这本书让我茅塞顿开。上篇文章《编程语言的自举之路——从机器码到高级语言》中提到过,现在高级程序设计语言已经有几百种了,每一门编程语言所面向的问题领域都是不同的,那么每一门语言也就都具有自己的特性,它们的语法形式也是千差万别。但是,不同高级语言最终都是需要转换成计算机可以运行的二进
2021-11-08 22:28:52
2341
原创 编程语言的自举之路——从机器码到高级语言
《编程语言的自举之路——从机器码到高级语言》原文链接,阅读体验更佳语言是协议在中国,大多数人使用汉语进行交流,我对你说一句汉语你能听懂并做出回应;如果有人对你说一句英语,而你又正好学习了英语,那么你也能听懂并做出回应。可见我们平常所使用的自然语言是人与人之间交流的一种协议,不同的语言就是不同的协议,但是因为不同的语言都有一个统一的物理基础——地球,所有文明的诞生环境都是地球,所有语言的目的也都是一样的,那就是描述地球,记录一些物或者事,所以不同的自然语言之间可以相互翻译。而如果我们掌握了多门自然语言也
2021-11-08 22:24:59
1553
原创 指令也是数据?浅谈计算机体系结构
《指令也是数据?浅谈计算机体系结构》原文链接,阅读体验更佳我从大学期间开始接触编程,接触的第一门编程语言是C语言,后来也进过实验室,玩过单片机,还接触过汇编,但是最终都没有走下去。到大四下学期的时候由于毕业设计和工作的需要,开始接触JavaWeb,从此踏上了一条不归路。现在也已经工作两年多的时间了,接触的语言也越来越多,我也成功脱离的语言之争的低级趣味。学习更多的编程语言,熟练使用甚至精通多门编程语言已经成为了我长期的目标。不知为何,我对编程有一种特别的执念,总想总结出一套自己的方法论和思维体系,在编
2021-11-08 22:18:20
670
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人