列举你所了解的计算机存储设备类型?
- 随机存储器 RAM SRAM、DRAM(SDRAM、RDRAM、CDRAM 等)
- 只读存储器 ROM MROM、PROM、EPROM、EEPROM
一般代码存储在计算机的哪个设备中?代码在 CPU 中是如何运行的?
1.易失性执行之前,我们的代码主要
存储在内存中。
2.CPU 读取内存中的数据并放在寄存器内,将寄存器中的数据写入内存并进行有序的四则运算、相关指令,在此过程中,寄存器主要用于存放计算数据,运算器负责操作寄存器中的数据。
什么是指令和指令集?
在计算机科学中,指令(Instruction)是一条计算机程序中的基本操作命令。它是由计算机硬件所识别和执行的最小操作单位。指令描述了执行特定任务的操作,例如执行算术运算、数据传输、逻辑判断等。
指令集(Instruction Set)是计算机体系结构中定义的一组可执行指令的集合。它规定了计算机硬件所支持的所有指令的类型、格式和功能。指令集可以分为两种类型:
复杂指令集计算机(Complex Instruction Set Computer,CISC): CISC 指令集架构包含大量复杂的指令,每条指令可以执行较多的操作。这些指令通常具有不同的长度和格式,可以实现复杂的操作,如字符串处理、浮点运算等。x86 架构是一个常见的 CISC 指令集。
精简指令集计算机(Reduced Instruction Set Computer,RISC): RISC 指令集架构设计更为简洁,每条指令执行的操作较为简单。RISC 指令集通常具有固定的长度和格式,操作的数量相对较少,但执行速度较快。ARM 和 MIPS 架构是常见的 RISC 指令集。
指令集的选择与计算机体系结构紧密相关,不同的指令集架构在计算机性能、能耗、编程复杂性等方面会有不同的影响。指令集的设计需要平衡指令的功能和复杂性,以满足不同应用和系统的需求。
列举你所了解的编程范式?
下面列举了几种常见的编程范式:
面向对象编程(Object-Oriented Programming,OOP): 面向对象编程是一种以对象为核心的编程范式,通过封装、继承和多态等概念来组织和结构化代码。它将数据和操作数据的方法封装在对象中,追求代码的可重用性、可扩展性和可维护性。
函数式编程(Functional Programming,FP): 函数式编程是一种基于数学函数的编程范式,强调将计算视为函数求值的过程。它鼓励使用纯函数(无副作用、不修改状态)和不可变数据,避免共享状态和可变数据,通过函数的组合和高阶函数等技术来实现代码的模块化和抽象。
命令式编程(Imperative Programming): 命令式编程是一种以指令序列为主的编程范式,通过编写一系列的命令来描述程序的执行过程。程序员需要显式地控制计算机的状态和操作,使用变量、循环、条件语句等来实现算法和逻辑。
逻辑式编程(Logic Programming): 逻辑式编程是一种基于逻辑推理的编程范式,程序由一系列的逻辑语句组成,而非指令序列。程序员描述问题的逻辑关系,系统根据这些逻辑语句进行自动推导和求解。Prolog 是一种常见的逻辑式编程语言。
并行编程(Parallel Programming): 并行编程是一种利用多个处理单元(如多核处理器、分布式系统)并行执行任务的编程范式。它旨在提高程序的性能和效率,通过任务分割、并发控制和数据同步等技术来实现并行计算。
响应式编程(Reactive Programming): 响应式编程是一种处理异步数据流的编程范式,强调对数据流的响应和变换。它通过使用观察者模式、函数组合和管道操作等技术,以声明式的方式处理事件和数据流,提供对异步和事件驱动编程的支持。
声明式编程(Declarative Programming): 声明式编程是一种将计算过程描述为一组表达式或声明的编程范式。它着重于描述问题的逻辑和要求,而不是详细指定计算的步骤。在声明式编程中,程序员描述“做什么”,而非“怎么做”。常见的声明式编程范式包括关系型查询语言(如 SQL)、声明式模板(如 HTML、XAML)和函数式编程等。
这些编程范式并不是互斥的,很多编程语言和框架可以同时支持多种范式,甚至引入了新的范式或混合范式。选择适合的编程范式取决于具体的问题领域、需求和开发团队的偏好。
什么是面向切面(AOP)的编程?
面向切面编程(Aspect-Oriented Programming,AOP)是一种编程范式,旨在解决分散在应用程序中的横切关注点(Cross-cutting Concerns)的管理问题。横切关注点指的是与应用程序的核心业务逻辑无关,但又分布在整个程序中的功能,如日志记录、安全性、事务管理等。
AOP 的主要目标是将这些横切关注点从核心业务逻辑中分离出来,并将它们模块化、可重用地应用于整个应用程序。通过这种方式,AOP 提供了一种更好的代码组织方式,使得开发者能够更好地关注核心业务逻辑,同时将横切关注点的实现和管理集中在一个地方。
AOP 的核心概念是切面(Aspect)。切面是一个横跨多个对象的模块,它将横切关注点的行为和逻辑捕获到一个可重用的单元中。切面可以定义在哪些地方以及何时将横切关注点应用于目标对象,这称为切点(Pointcut)。切面可以在切点前、后、环绕等时机执行一系列的操作,这称为通知(Advice)。
AOP 的实现通常使用代理模式或者字节码操作来实现。代理模式可以通过动态代理或静态代理来为目标对象生成代理,代理对象拦截对目标对象的调用,并在适当的时机执行切面的通知。字节码操作则通过修改字节码来直接插入切面逻辑。
AOP 被广泛应用于日志记录、性能监测、事务管理、安全性控制等方面,它提供了一种可插拔的方式来实现这些横切关注点,减少了代码的重复性和冗余性,并提高了代码的可维护性和可扩展性。一些流行的 Java 框架,如 Spring,就提供了强大的 AOP 支持。
二进制、八进制、十进制、十六进制分别用字母什么表示?
在不同进制下,数字表示的方式如下:
二进制(Binary):使用数字 0 和 1 表示。在计算机科学中,二进制是最基本的进制,用于表示计算机中的数字和数据。没有特定的字母表示。
0b
八进制(Octal):使用数字 0 到 7 表示。在编程和计算机领域中,八进制常用于表示一些特殊的标记或权限。没有特定的字母表示。
0O
十进制(Decimal):使用数字 0 到 9 表示。十进制是我们通常使用的基本进制,用于表示日常生活中的数字。
0d
十六进制(Hexadecimal):使用数字 0 到 9 和字母 A 到 F(或小写字母 a 到 f)表示。十六进制常用于计算机领域,特别是在表示内存地址、颜色值和编码等方面。字母 A 到 F 表示 10 到 15 的十进制数字。
0x
常见的进制前缀包括:
- 二进制(binary):通常用 "0b" 或 "0B" 表示,例如:0b1010 或 0B1010。
- 八进制(octal):通常用 "0o" 或 "0O" 表示,例如:0o75 或 0O75。
- 十进制(decimal):通常用 "0d" 或 "0D" 表示,但这种表示方法并不常见,通常直接使用数字表 示。
- 十六进制(hexadecimal):通常用 "0x" 或 "0X" 表示,例如:0xA5 或 0Xa5。 这些前缀用于指示数字的进制,以便在编程、数据传输和其他需要指定数字系统的场合中正确解释数字
下面是十六进制数字与对应的十进制数字的映射:
- 0 表示 0
- 1 表示 1
- 2 表示 2
- 3 表示 3
- 4 表示 4
- 5 表示 5
- 6 表示 6
- 7 表示 7
- 8 表示 8
- 9 表示 9
- A(或 a)表示 10
- B(或 b)表示 11
- C(或 c)表示 12
- D(或 d)表示 13
- E(或 e)表示 14
- F(或 f)表示 15
例如,十六进制数字 "1F" 表示十进制数字 31,十六进制数字 "A5" 表示十进制数字 165。