计算机基础
文章平均质量分 90
Jeff_
面向Google和StackOverflow编程的小学生。
展开
-
计算机网络笔记(四):Socket编程
前言几种典型的应用编程接口Berkeley UNIX操作系统定义了一种API,称为套接字接口(socket interface),简称套接字Socket微软公司在其操作系统中采用了套接字API,形成了一个稍有不同的API,并称之为Windows Socket Interface,WinSockAT&T为其UNIX系统V定义了一种API,简写为TLI(Transport Layer Interface)Socket API最初设计:面向BSD Unix-Berkeley,面向TC原创 2021-11-13 17:42:07 · 584 阅读 · 0 评论 -
计算机网络笔记(三):应用层
网络应用的体系结构客户机/服务器结构(Client-Server,C/S):例子 - Web点对点结构(Peer-to-peer,P2P):例子 - BT优点:高度可伸缩缺点:难于管理混合结构(Hybrid):例子 - Napster-文件传输使用P2P结构文件的搜索使用C/S结构——集中式:1. 每个节点向中央服务器登记自己的内容。2. 每个节点向中央服务器提交查询请求,查找感兴趣的内容。...原创 2021-10-21 20:53:34 · 305 阅读 · 0 评论 -
计算机网络笔记(二)
计算机网络体系结构OSI参考模型数据封装:增加控制信息,构造协议数据单元(PDU)。控制信息主要包括:地址(Address):标识发送端 / 接收端。差错检测编码(Error-detecting code):用于差错检测或纠正。协议控制(Protocol control):实现协议功能的附加信息,如优先级、服务质量(Qos)、安全控制等。物理层:解决单一bit传输问题接口特性:机械特性、电气特性、功能特性、规程特性比特编码、数据率、比特同步(时钟同步)传输模式:单工(Simple原创 2021-10-19 20:58:57 · 241 阅读 · 0 评论 -
计算机网络笔记(一)
什么是计算机网络什么是计算机网络? 计算机网络就是互连(互联互通)的、自治(无主从关系)的计算机集合。那么,距离远、数据大如何保证互连?通过交换网络互连主机。什么 是 Internet ?组成:计算机设备、通信链路、分组交换(数据包转发分组)。服务:提供通信服务的通信基础设施、提供应用编程接口(API)。问题:仅有硬件(主机、链路、路由器…)连接,Internet能否顺畅运行?能保证应用数据有序交付吗? NO!还需要网络协议。计算机网络中的数据交换必须遵守实现约定好的规则。什么是网原创 2021-10-11 20:28:29 · 228 阅读 · 0 评论 -
关于typedef的用法总结
typedef的应用typedef是C 语言中用于为现有数据类型指定替代名称的关键字。它主要用于用户定义的数据类型,当数据类型的名称在程序中使用变得稍微复杂时。以下是使用的一般语法typedef <existing_name> <alias_name>应用一:结构体别名typedef也可用于为用户定义的数据类型命名。让我们看看它对结构体的使用。// ======== oldstruct type_name{ type member1; type me原创 2021-08-22 17:30:01 · 976 阅读 · 0 评论 -
笔记总结备份
目录文章目录目录前言版本控制操作系统系统架构图Linux线程 / 进程用户态内核态线程shell 脚本编程语言编译与调试通信算法专业名词前言文章源于工作内网原因只能记录在笔记本,最近打算换个工作环境,整理下资料,简单分个类,也顺便回顾下之前的内容,也相当于做个备份。回头看看,有些问题现在看有点简单了,但是有些问题好久没有处理也快忘了。有些地方因为是流程图,就不再用绘图软件在画了,直接拍张图片凑合看看吧。因为基本都是之前不懂的问题,肯定文章有些错误,如有人发现也希望能够指正。版本控制持续集成服务原创 2021-04-11 22:53:32 · 1644 阅读 · 0 评论 -
Linux搭建自己编译的工程
自己编写Makefile (工程简单)apt-get install make安装make工具。Makefile 主要的 5个部分 (显示规则, 隐晦规则, 变量定义, 文件指示, 注释)显示规则 :: 说明如何生成一个或多个目标文件(包括 生成的文件, 文件的依赖文件, 生成的命令)隐晦规则 :: make的自动推导功能所执行的规则变量定义 :: Makefile中定义的变量文件指...原创 2020-03-21 23:08:51 · 1129 阅读 · 1 评论 -
计算机组成原理笔记
一、计算机的基本组成完成一条指令分为了三个阶段:取指令-分析指令-执行指令。下面我们分析上图的取数指令。(取数指令 ≠ 取指令 , 取数指令需要实施取指令、分析指令)取指令要执行的指令的地址我们是保存在PC当中的,取数指令这条指令的地址是保存在存储体当中的。所以,取指令的第一个操作,就是PC(PC给出了取数指令这条指令它所在的内存单元地址)要把指令的地址送给MAR,再由MAR送给存储体。在控制器的控制下,存储体把指定存储体中保存那条取数指令取出送到MDR中。取出的指令送到IR(IR的功能就是原创 2020-07-05 15:51:29 · 12248 阅读 · 1 评论 -
使用SIMD(单指令流多数据流)技术来提高程序性能
背景单指令流多数据流(英语:Single Instruction Multiple Data,縮寫:SIMD)是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。在微处理器中,单指令流多数据流技术则是一个控制器控制多个平行的处理微元,例如Intel的MMX或SSE,以及AMD的3D Now!指令集。图形处理器...原创 2019-07-21 10:07:15 · 3995 阅读 · 0 评论 -
零拷贝( Zero-copy )
一、背景“零拷贝” 描述了计算机操作,其中CPU 不执行将数据从 一个存储区 复制到 另一个存储区 的任务。通过网络传输文件时,通常用于节省CPU周期和内存带宽。在传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。这样做最大的好处是可以减少磁盘 I/O 的操作,因为如果...原创 2020-01-11 19:07:44 · 894 阅读 · 0 评论 -
Data structure alignment (数据结构对齐 / 内存对齐)
开篇的话在比较老的编译器里,如果没有对变量取地址的操作,那么有些局部变量是通过寄存器保存的,不占栈上内存,根本不存在内存中如何排列的问题,比如TurboC 2.0这种。在一些较新的编译器里,局部变量排列顺序并不是从上到下一次排列,有些是根据使用频率来排列的,这样可以降低cache的miss率,所以怎么排列完全根据使用频率。大部分主流编译器的局部变量地址确实是从下到上,但也有反过来...原创 2020-03-23 01:08:15 · 980 阅读 · 0 评论 -
程序执行中的地址分配
EXE文件的运行机制EXE文件作为本地代码的程序,并没有指定变量及函数的实际内存地址。在类似于Windows操作系统这样的可以加载多个可执行程序的运行环境中,每次运行时,程序内的变量及函数被分配到的内存地址都是不同的。那么,EXE文件中,变量和函数的内存地址的值,是如何来表示的呢?下面就让我们来揭晓答案。那就是EXE文件中给变量及函数分配了虚拟的内存地址。 在程序运行时,虚拟的内存地址回转换成...原创 2020-03-12 23:23:39 · 1752 阅读 · 0 评论 -
CPU、内存、寄存器相关基础知识
计算机内部是由IC(Intergrated circuit,集成电路,其由很多晶体管组成)这种电子部件构成的。CPU和内存就是IC的一种。IC的一个引脚只能表示两个状态,因此计算机的信息只能用二进制来处理。CPU是什么从功能来看,CPU内部由寄存器、控制器、运算器和时钟四个部分构成,各部分之间由电流信号相互连通。寄存器可以暂存指令、数据等处理对象,可以将其看成内存 的一种。控制器负责把...原创 2020-03-11 22:34:35 · 1005 阅读 · 0 评论 -
Windows记事本编码反汇编分析
转载自:liam.page网上有一个流传多年的段子。这个段子大致是说,若你在简体中文版本的 Windows 系统下,用系统自带的记事本程序,以默认的 ANSI 编码保存「联通」两个字,那么重新打开后「联通」二字就消失了。如果我没记错的话,还曾有好事者据此编排,认定 Windows 背后的微软和联通有仇,故意不让联通二字正常显示。当然,这个说法肯定是假的。但是这一现象背后的原因究竟是什么呢?...转载 2020-03-08 18:01:17 · 4507 阅读 · 0 评论 -
Skip List(跳表)
转载自:lotabout.me正文跳表(skip list) 对标的是平衡树(AVL Tree),是一种 插入/删除/搜索 都是 O(log n) 的数据结构。它最大的优势是原理简单、容易实现、方便扩展、效率更高。因此在一些热门的项目里用来替代平衡树,如 redis, leveldb 等。跳表的基本思想首先,跳表处理的是有序的链表(一般是双向链表,下图未表示双向),如下:这个链表中,如...转载 2020-03-07 19:28:51 · 511 阅读 · 0 评论 -
补码/反码、零扩展和符号位扩展(Zero extension and Sign extension)
众所周知,每种基本数据类型都有一个固定的位数,比如byte占8位,short占16位,int占32位等。正因如此,当把一个低精度的数据类型转成一个高精度的数据类型时,必然会涉及到如何扩展位数的问题。这里有两种解决方案:(1)补零扩展:填充一定位数的0。(2)补符号位扩展:填充一定位数的符号位(非负数填充0,负数填充1)。对于无符号类型(相当于都是非负数)与有符号类型中的非负数部分,这两种方法...原创 2019-11-13 23:41:38 · 25931 阅读 · 7 评论 -
死锁产生的条件及其如何处理
一、原因与条件产生死锁的原因主要是:因为系统资源不足。 进程运行推进的顺序不合适。 资源分配不当等。发生死锁的四个必要条件:相互排斥:所涉及的资源必须不可共享;否则,将不会阻止进程在必要时使用资源。 保留并等待或部分分配:进程在等待其他(请求的)资源时必须保留已分配的资源。如果该进程必须在请求一个或多个新资源时释放其资源,则不会发生死锁,因为该进程不会阻止其他人使用它控制的资源...原创 2019-12-01 23:31:44 · 1902 阅读 · 0 评论 -
锁(Lock)、内存屏障(Memory barrier)与 缓存一致性( Cache coherence)
在应用层,关于锁的使用大家应该都很熟悉了,作用就是为了保护共享变量不被同时操作而导致无法预测的情况。然而深入到具体实现,锁仅仅只是锁定临界区吗?锁的实现其实还必须实现一个语义,也就是内存屏障。内存屏障主要用于防止指令重排而导致的无法预测的情况。代码经过编译器生成的指令并不一定都是按着我们原先的想法来生成的,可能经过优化等情况进行了指令的重排,然而这些重排在执行后的结果应当是一致的。其实及时编译器...原创 2020-02-07 21:27:04 · 7486 阅读 · 0 评论 -
代码的抽象三原则
软件开发是"抽象化"原则(Abstraction)的一种体现。所谓"抽象化",就是指从具体问题中,提取出具有共性的模式,再使用通用的解决方法加以处理。最近,我读到美国程序员Derick Bailey的一篇文章,谈到"抽象化"应该遵循的三个原则,觉得很有启发。一、DRY原则DRY是 Don’t repeat yourself 的缩写,意思是"不要重复自己"。软件工程名著《The Prag...转载 2020-02-14 19:13:09 · 543 阅读 · 0 评论 -
Big-endian and Little-endian (大小端)
字节序(Endianness)在计算中,字节序是指数字的二进制表示形式中字节(或有时是位)的顺序。它也可以更一般地用于指代任何表示形式的内部排序,例如数字系统中的数字或日期的各个部分。在最常见的用法中,字节顺序表示多字节数字中字节的顺序。big-endian顺序将最高有效字节排在最前面,最低有效字节排在最后,而little-endian的顺序则正好相反。例如,考虑无符号十六进制数0x1234,...原创 2020-03-07 16:58:28 · 971 阅读 · 0 评论