Linux
多路复用机制
面试常考Java NIO和Linux多路复用机制(Reactor模型、select/poll/epoll)
网络编程
IO模型都有什么?
Netty学习前基本知识 — BIO 、NIO 、AIO 总结
线程模型都有哪些
线程隔离是什么?
线程隔离浅析
计算机图形学
屏幕缓冲区
关于屏幕缓冲区的
由汇编语言程序可知,内存B8000H-BFFFFH共32kb的区域是25*80彩色字符模式的显示缓冲区。
进入DEBUG
查看内存段
因为在已知输入指令,屏幕上的字状态时刻在改变,所以一敲下指令就显示 的是敲下指令的后的屏幕
25*80彩色字符模式下,一共有2000个字符,每个字符2个字节,这样第三行就是160个字符,(320)10=(A0)16个字节,从B8000+A0=B8A00起就是-d, b0:00 0的显示
可以看到
就是这样的显示,说明我们的理解和计算就是正确的
操作系统QA
编译型语言和解释型语言的区别
编译型语言是指其高级语言全部转化为机器码再到操作系统分配资源, 分配到资源后到计算机(CPU, 内存, 硬盘)上进行执行, 而解释型语言是指程序每将一条高级语言转化成机器码, 就立即执行.
优点 | 缺点 | 举例 | ||
---|---|---|---|---|
编译型语言 | 一次编译, 多次运行 | 1. 执行效率高 2. 脱离编译器可以运行 3. 可以闭源 |
||
解释型语言 | 每编译一条语句执行一条语句 | 1. 跨平台性能好 |
什么叫做跨平台?
跨平台泛指编程语言、软件或硬件设备可以在多种操作系统或不同硬件架构的电脑上运作。无论解释型语言还是编译型语言编译的代码要在一台计算机上执行有如下过程:
- 编译器将源代码编译成机器代码(可执行程序)
- 用户将机器代码(可执行程序)交给操作系统请求分配资源(CPU, 内存, 硬盘等所需要的资源)
- 操作系统调度CPU执行程序
所以与三个因素有关: 编译器, 操作系统, CPU, 而某种语言是否支持跨平台就指的无论在哪个操作系统还是哪种CPU(x64, x86, AMD)都可以执行出同样的结果.
C++是跨平台的语言, Java也是跨平台的语言, 但是他们两实现的跨平台的方法不一样, C++的源程序是跨平台的, C++的可执行文件不是跨平台的,C++的源程序在不同的OS下使用对应的编译器可以编译成可执行文件进行执行, 但是它的可执行文件不能移植. 而java的字节码是跨平台(当然字节码的上一级源程序也是跨平台的), 字节码可以经过JVM对应不同的CPU解释为可执行的程序.
另外, 操作系统的功能有提供系统调用
的功能, 而windows系统和linux系统的一些系统级别的操作就是通过提供系统调用给语言, 语言再使用的, 所以操作系统对同一种系统操作提供的库文件(API)就可能不同, 比如C++11前, C++语言层面是不支持多线程的,想利用C++实现并发程序,每个人根据操作系统提供的API想怎么写就怎么写, 但是C++11进行规范之后, 就可以通过#include <thread>
编写跨平台的多线程代码了.
Linux下开发C++和Windows下开发C++有什么不同
[分为三点](Linux 下的 C++ 开发和 Windows 环境下的开发有什么区别? - 张杰的回答 - 知乎 https://www.zhihu.com/question/19855539/answer/55005646):
开发环境, 系统API, 第三方库
静态链接库和动态链接库的区别
源程序编译为可执行文件的过程为:
graph LR 源文件-->预编译 预编译-->编译 编译-->汇编 汇编-->链接 链接-->可执行文件
而静态链接库就是将静态链接库文件全部一股脑的包装成可执行文件, 好处就是程序运行时再无关系, 移植方便, 但是坏处浪费空间, 并且静态链接库如果变了的话得重新编译, 后缀名为.a
(linux), .lib
(windows).
动态链接库就是在编译时并不连接到目标代码中, 而是在程序运行时才载入, 不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例, 这样就解决了静态链接库的缺点, 但也并且了静态链接库的优点.
.h, .lib, .dll三者的关系
.h: 声明函数接口
.dll(动态链接库): 函数可执行代码, 这是被包装好的, 我们不能看到其源码, 只能调用其接口.
.lib(附加依赖项): 告诉链接器调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置.
C/C++语言的编译器有哪些
C++的常用编译器由: GCC(GNU Compiler Collection), llvm+clang, msvc.
GCC: GCC原本只是一个C语言编译器, 解释为(GNU C Complier), 但是随着发展, 还可以编译C++, Go, Objective -C 等多种编译语言, 所以现在被解释为(GNU Compiler Collection), 即GNU编译器套件
.Gcc支持很多个硬件和其上的操作系统, 无论是Intel x86上的Debian Linux 2.2、Red Hat Linux 6.2 和 FreeBSD 4.5, 还是MIPS上的IRIX 6.5.而g++
和gcc
的区别是, g++可以编译.c和.cpp, 但是都统一当成c++文件, 但是gcc可以编译.c和.cpp, 但是会分别当作.c文件和.cpp文件编译, 在linux下使用, 而MINGW包含gcc和一系列工具,是windows下的gnu环境,让开发者在windows下可以写gnu的c/c++代码, 编译的结果是windows的可执行文件exe,PE格式的,在windows下运行。
CLang+LLVM: CLang是编译器的fron
t end
, 将C
, C++
, Objective C
通过语法分析, 词法分析, 语义分析在经过语义检查生成抽象语法树(abstract syntax tree, AST)
交给LLVM.LLVM(Low Level Virtual Machine)是编译器的back end
, 负责分析抽象语法树, 优化中间代码以及生成机器代码.
msvc: 与Visual Studio集成发布,微软自己的编译器, 在windows下使用.
编译C++和编译python过程有什么不同
字节码和机器码指的是什么
编译原理中的编译器和真正的C++,python,java编译器的联系
ARM架构和X86架构有什么不同
主流的芯片架构有: X86, ARM, RISC-V, MIPS
X86 | ARM | RISC-V | MIPS | |
---|---|---|---|---|
指令集 | CISC | RISC(32位) | RISC | RISC(最早32位, 现在64位) |
特点 | 性能高, 兼容性好 | 成本低, 低功耗 | 开源, 模块化, 极简, 可扩展 | 种简洁、优化、具有高度扩展性, 低能耗 |
主要使用领域 | 家用PC, 服务站 | 移动设备 | 嵌入式设备 | 嵌入式设备 |
代表厂商 | AMD 英特尔 | 苹果,谷歌,IBM,华为 | 三星,英伟达,西部数据 | 龙芯 |
代表芯片 | 英特尔酷睿 | 苹果M1 高通骁龙 华为麒麟 |
龙芯 |
概率论
《概率论与数理统计》中第七章参数估计和假设检验,其中的参数估计包含点估计和区间估计,假设检验是根据样本提供的信息来检验我们对总体做出的假设是否成立.
点估计指的是用样本统计量的值估计未知参数的值(这其实就是机器学习中的一点点数学基础,机器学习中,我们有的就是样本的值,要求的就是未知参数的值),而点估计的的方法常见的有矩估计法和最大似然估计.
区间估计使用样本确定一个区间,而这个区间很大概率包含所估计的未知参数,这个区间就叫做置信区间.
似然函数是联合概率密度,因为随机变量$x_i$都是假设独立同分布的,所以形式才是连乘的形式,又最大似然函数法可以求偏导等于0直接求出数值解,但是据
一般不用这种方法直接计算,因为计算速度特别慢,而且有些情况根本无法求解,特别是基于矩阵计算的时候,所以通常使用梯度下降等优化算法不断地迭代和优化.
《PyTorch深度学习实战》p71
通常使用梯度下降法.
sofrmax函数通常的意义:对向量进行归一化,凸显其中最大的值并抑制远低于最大值的其他分量。
高斯分布: 也成为正态分布
其他
欢迎在评论区中进行批评指正,转载请注明来源,如涉及侵权,请联系作者删除。