计算机组成原理面试问题整理

Read more →

计算机网络面试问题整理

网络模型 五层体系结构 在 TCP/IP 网络模型中共分为 5 层,从上到下分别是 应用层 我们使用的软件都是工作在应用层的,专注于为用户提供应用服务,不考虑如何传输。应用层是工作在用户态,而其他层是内核态。 传输层 传输层是给应用层提供数据传输支持的,在传输层有两个协议 网络层 数据链路层 物理层 OSI 网络模型(七层体系结构) 在 TCP/IP 协议模型的基础上,将应用层拆分成了应用层,表示层和会话层 各层都有哪些常见的协议 应用层:HTTP、FTP、TELNET、SMTP、DNS 等 传输层:TCP 和 UDP 网络层:IP、ICMP、ARP 什么是 HTTP 协议 HTTP 协议全称是 Hyper-Text Transfer Protocl 超文本传输协议,所谓超文本就是超越了普通文本的文本,是文本,图片,音视频等的混合体,所以总的来说,HTTP 协议就是用于在计算机中传输文本、图片、音频和视频等超文本数据的规范。 HTTP 协议具有以下特性: 简单 灵活易用 应用广泛且跨平台 无状态 明文传输 不安全 针对 HTTP 协议明文传输和不安全的缺点,可以使用 HTTPS 来解决,即引入 SSL/TLS 协议,提高安全性。 HTTPS 解决了什么风险 窃听风险 篡改风险 伪装风险 HTTPS 如何解决的 混合加密:通过对信息加密避免数据被窃听的风险 在通信建立前采用非对称加密的方式交换会话密钥,之后的数据传输都采用对称加密。因为对称加密本质上就是位运算,而非对称加密采用了大量的数学运算,我们都知道计算机执行位运算的效率要远高于数学运算,所以对于相同文本对称加密的效率远高于非对称加密。 摘要算法:提供了数据校验的能力避免被篡改 发送数据时使用摘要算法计算出明文的指纹,并把指纹和明文一起加密成密文发送到对方,对方解密后用相同的摘要算法算出明文的指纹,并和发送时携带的指纹进行比较。
Read more →

MySQL 面试问题整理

数据库的三大范式 第一范式:表中的每一列都不可再拆分 第二范式:在第一范式的基础上,表中的每一列都和主键相关 第三范式:在第二范式的基础上,表中的每一列都和主键直接相关,不能间接相关 MySQL 常见的存储引擎 存储引擎 存储引擎是在数据库中进行创建、读取、修改和删除数据的底层组件。不同的存储引擎提供不同的存储机制,而且还有许多不同的功能,在 MySQL 中我们可以使用show engines;来查看所支持的存储引擎状况。 MyISAM MyISAM 是 MySQL 5.5 之前默认的存储引擎,性能高但不支持事务,也不支持外键。 高性能读取 保存了表内记录条数,使用count时不会查全表 只支持表锁,虽然开销小、加锁快,但容易发生冲突 InnoDB InnoDB 是一个支持事务的存储引擎,是现在 MySQL 的默认存储引擎。 支持事务、外键 支持行级锁,粒度小,并发处理能力更强 数据库事务 事务是指具有 ACID 特性的一组操作,使用commit来提交一个事务,用rollback来回滚一个事务。 原子性(Atomicity) 原子性是指事务被视为不可分割的最小执行单元,简单地说就是一个事务要么全成功,要么全失败,失败时会利用回滚日志(Undo Log)将数据会滚到事务发生之前的状态。 一致性(Consistency) 一致性是指在事务执行前后,数据库的完整性约束没有被破坏。 A(100元) 向 B(0元) 转账 100 元,转账前后 A 和 B 两人共 100 元不变 隔离性(Isolation) 隔离性是指一个事务所修改的内容在提交之前对其他事务是不可见的,InnoDB 依靠 MVCC 多版本并发控制来保证隔离性。 持久性(Durability) 持久性是指当事务提交后,这些修改应该永久性的保存到数据库(文件系统)中,即使系统崩溃,执行结果也不能丢失。当系统发生崩溃时使用重做日志(Redo Log)来恢复数据。
Read more →

JVM 知识简记

什么是 JVM JVM 是 Java Virtual Machine 的缩写,意为 Java 虚拟机,一种可以运行 Java 编译后生成的字节码的虚拟机。有了 JVM 可以使我们不用修改代码就能运行在各个操作系统上。众所周知在 C/C++ 中是需要开发人员手动管理内存的申请以及释放,稍有不慎就造成了内存泄露或者内存溢出,而 JVM 提供的自动内存管理机制极大的简化了我们的开发过程。 而 JVM 不只有一种,大家都可以按照《Java虚拟机规范》开发自己的虚拟机,常见的虚拟机有: HotSpot VM JRockit VM Sun Classic VM J9 VM Exact VM 其中HotSpot 是使用最广泛的虚拟机 注:JVM 可以运行任何符合规范的字节码文件,不仅限于 Java 语言编译后的字节码,其他语言可以参照规范自己实现编译器编译。 Java 内存区域 上面提到的 JVM 内存管理机制本质上就是在程序运行的过程中把内存分成若干不同的区,这就是 Java 内存区域。 先来看这两块不属于 JVM 的内存区域 本地内存 是随着 JVM 进程一起从操作系统申请的内存空间,也就是运行 JVM 所使用的内存。 直接内存 直接内存是 NIO(New Input/Out)使用 Native 函数库开辟的内存空间,通过堆中的 DirectByteBuffer 与该内存空间进行操作。 上面两块内存区域不受 Java 堆的大小限制,只与机器的内存相关,但如果配置不当,也会使程序出现 OOM 异常。
Read more →

记录使用 Nginx Proxy Manager 替换 Nginx

Nginx 是一款优秀的 HTTP 服务器,同时提供了丰富的功能,其中最常使用的就是反向代理,可以通过配置让我们使用不同的域名在同一个端口访问不同的服务。而 Nginx Proxy Manager 是一个可以通过在 Web UI 中配置内部的 Nginx 实现类似我们所需要的功能的工具。

Read more →