自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 收藏
  • 关注

原创 C++中的异常处理技术及个人理解(2)

五、CRT 错误处理除了 SEH 异常和 C++ 类型异常之外,C 运行时库 (CRT) 还提供了属于自己的错误处理机制,应该在程序中加以考虑。当发生 CRT 错误时,通常会看到一个 CRT 错误消息窗口。1、终止处理程序set_terminate()当 CRT 遇到未处理的 C++ 类型异常时,它会调用该terminate()函数。要拦截此类调用并采取适当的措施,应该使用该set_terminate()函数设置错误处理程序。示例代码:void my_terminate_handler(){

2021-08-20 15:46:25 1130

原创 C++中的异常处理技术及个人理解(1)

一、简介一个 exception ( 或者是critical error, 或者是crash) 通常意味着你的程序停止正常工作,需要停止执行。例如,由于序访问了无效的内存地址(例如NULL指针),无法分配内存缓冲区(内存不足),C 运行时库 (CRT) 检测到错误并请求程序,可能会发生异常终止等情况。C++ 程序可以处理多种类型的异常:通过操作系统的结构化异常处理机制产生的 SEH 异常;由 C 运行时库产生的 CRT 错误;信号每种错误类型都需要配置一个异常处理函数来拦截异常并执行一些错误

2021-08-20 15:43:38 665

原创 C++ make_shared智能指针的使用

​ C++使用模板函数 std::make_shared 可以返回一个指定类型的 std::shared_ptr1、为何使用动态内存如果事先知道所需内存空间,使用静态内存是最简单的解决方案。但是,在程序设计的过程中,往往会遇到需要开辟一个未知大小的内存空间,该空间根据程序所需发生大小的变化,此空间称为动态内存。程序设计中使用动态内存的原因可能如下:程序不知道自己需要多少对象;程序不知道所需对象的准确类型;程序需要在多个对象之间共享数据。2、make_shared用法make_share

2021-07-30 15:00:30 4202

原创 Windows程序crash该怎么分析?

一、crash率1、计算公式日crash率 = 每日上报crash设备数 / 每日联网设备数crash率 = 统计周期内每日crash率的平均值统计周期:默认BSC统计周期默认是按月统计2、过滤规则有效上报crash设备 = 上报crash设备 - 日活低于1%非测试版本上报设备数有效联网设备 = 联网设备总数 - 日活低于1%的非测试版本联网上报设备数当天crash率 = 有效上报crash设备数/有效联网设备数月度crash率 = 当月每天crash率累计/当月

2021-07-15 17:45:09 1413

原创 Windows基于窗口的程序设计

流程图:示例代码:#include <windows.h>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ static TCHAR szAppName[] = TEXT("MyWindows"); HW

2021-07-12 20:09:35 178

原创 Git常用命令

1、git initGit 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。git init//该命令执行完后会在当前目录生成一个 .git 目录。使用我们指定目录作为Git仓库。git init newrepo初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据.

2021-07-09 16:15:14 140

原创 QT使用单按钮/双按钮实现开关子窗口

QT使用单按钮/双按钮实现开关子窗口逻辑倒是不难,难的在于有一个写Java的来写这个,解耦就挺难受的项目目录:1、双按钮实现开关子窗口(相对较简单)widget.h:子窗口类对象声明(添加newWidget.h头文件)newWidget.h:保持原样widget.cpp:实例化2个按钮及已声明的子窗口类(使用库函数及lambda表达式)newWidget.cpp:保持原样//newWidget.h#ifndef NEWWIDGET_H#define NEWWIDGET_H#

2021-07-01 22:21:46 925

原创 QT自定义信号和槽

首先,新建一个Project,名为02_SignalAndSlot,与此同时新建一个widget类。为了自定义信号和槽,新建两个类:Teacher类,Student类。【实现需求】老师饿了,说下课,学生请客吃饭建立的项目结构如下:解决需求的流程图:核心代码://student.h#ifndef STUDENT_H#define STUDENT_H#include <QObject>class Student : public QObject{ Q_OBJ

2021-07-01 19:49:15 143

原创 BFS算法框架

BFS的核心思想:把一些问题抽象成图,从一个点开始向四周扩散。一般来说,BFS都是用队列这种数据结构,每次将一个节点向周围的所有节点加入队列一、BFS常见使用场景走迷宫问题,有的格子是围墙,不能走有两个单词,要求通过最少次数的替换,从一个变成另一个解开密码锁的最少次数【问题的本质】:在一幅图中,找到从起点到终点的最近距离二、BFS算法框架// 计算从起点 start 到终点 target 的最近距离int BFS(Node start, Node target){

2021-06-27 16:38:00 302

原创 回溯算法解题框架

解决一个回溯问题,实际就是一个决策树的遍历过程:过程:已经做出的选择选择列表:当前可以做出的选择结束条件:到达决策树底层,无法再做出选择的条件回溯其实就是DFS,属于深度优先遍历一、回溯代码框架result = []def backtrack(路径,选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径,选择列表) 撤销

2021-06-27 16:00:35 343 2

原创 MVVM框架

由于最近在某厂实习,接触到了这个玩意,所以了解一哈~1、MVC框架简介模型-视图-控制器 (MVC) 设计模式为应用程序中的对象分配三个角色之一:模型、视图或控制器。该模式不仅定义了对象在应用程序中扮演的角色,还定义了对象相互通信的方式。这三种类型的对象中的每一种都通过抽象边界与其他对象分开,并通过这些边界与其他类型的对象进行通信。应用程序中特定 MVC 类型的对象集合有时称为*层,*例如模型层。MVC 是 Cocoa 应用程序良好设计的核心。采用这种模式的好处很多。这些应用程序中的许多对象往往更.

2021-06-25 23:24:37 2200

原创 C++文件操作

文件操作程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件可以将数据持久化C++中对文件操作需要包含头文件 < fstream >文件类型分为两种:文本文件 - 文件以文本的ASCII码形式存储在计算机中二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们操作文件的三大类:ofstream:写操作ifstream: 读操作fstream : 读写操作1.1文本文件1.1.1写文件写文件步骤如下:包含

2021-06-21 16:54:05 703

原创 C++引用

1.1 引用的基本使用作用: 给变量起别名语法: 数据类型 &别名 = 原名示例:int main() { int a = 10; int &b = a; cout << "a = " << a << endl; cout << "b = " << b << endl; b = 100;//修改的是同一块内存 cout << "a = " << a << e

2021-06-21 16:45:58 83

原创 C++内存分区模型

最近因为实习的原因,部门用的技术栈主要是C++,所以苦逼学C++中,淦内存分区模型C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收内存四区意义:不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程1.1 程序运行前​ 在程序编译后,生成了exe可执行程序,未执行.

2021-06-21 16:36:49 64

原创 【面试题】如何从日志分析 PV、UV?

很多时候,我们观察程序是否如期运⾏,或者是否有错误,最直接的⽅式就是看运⾏日志,当然要想从日志快速查到我们想要的信息,前提是程序打印的⽇志要精炼、精准。但⽇志涵盖的信息远不⽌于此,⽐如对于 nginx 的 access.log ⽇志,我们可以根据⽇志信息分析⽤户⾏为。什么⽤户⾏为呢?⽐如分析出哪个⻚⾯访问次数(PV)最多,访问⼈数(UV)最多,以及哪天访问量最 多,哪个请求访问最多等等。用⼀个⼤概几万条记录的 nginx 日志⽂件作为案例,看看如何分析出「⽤户信息」。一、预热当我们要分析⽇志的时候

2021-06-16 20:30:19 809

原创 【面试题】如何查看网络的性能指标?

Linux 网络协议栈是根据 TCP/IP 模型来实现的,TCP/IP 模型由应⽤层、传输层、网络层和网络接⼝层, 共四层组成,每⼀层都有各⾃的职责。应⽤程序要发送数据包时,通常是通过 socket 接⼝,于是就会发⽣系统调⽤,把应⽤层的数据拷⻉到内核⾥的 socket 层,接着由⽹络协议栈从上到下逐层处理后,最后才会送到⽹卡发送出去。⽽对于接收⽹络包时,同样也要经过⽹络协议逐层处理,不过处理的⽅向与发送数据时是相反的,也就是 从下到上的逐层处理,最后才送到应⽤程序。⽹络的速度往往跟⽤户体验是挂钩的

2021-06-16 20:19:30 334 1

原创 【操作系统】文件 I/O

【操作系统】文件 I/O⽂件的读写⽅式各有千秋,对于⽂件的 I/O 分类也⾮常多,常见的有:缓冲与⾮缓冲 I/O直接与⾮直接 I/O阻塞与⾮阻塞 I/O VS 同步与异步 I/O一、缓冲与非缓冲 I/O⽂件操作的标准库是可以实现数据的缓存,那么根据「是否利⽤标准库缓冲」,可以把⽂件 I/O 分为缓冲I/O 和⾮缓冲 I/O:缓冲 I/O,利⽤的是标准库的缓存实现⽂件的加速访问,⽽标准库再通过系统调⽤访问⽂件。⾮缓冲 I/O,直接通过系统调⽤访问⽂件,不经过标准库缓存。这⾥所说的「

2021-06-15 20:39:15 141

原创 【面试题】哲学家就餐问题

先来看看哲学家就餐的问题描述:5 个⽼⼤哥哲学家,闲着没事做,围绕着⼀张圆桌吃⾯;巧就巧在,这个桌⼦只有 5 ⽀叉⼦,每两个哲学家之间放⼀⽀叉⼦;哲学家围在⼀起先思考,思考中途饿了就会想进餐;奇葩的是,这些哲学家要两⽀叉⼦才愿意吃⾯,也就是需要拿到左右两边的叉⼦才进餐;吃完后,会把两⽀叉⼦放回原处,继续思考;那么问题来了,如何保证哲 学家们的动作有序进⾏,⽽不会出现有⼈永远拿不到叉⼦呢?1、方案一:信号量⽤信号量的⽅式,也就是 PV 操作来尝试解决它,代码如下:上⾯的程序,好似很⾃.

2021-06-15 16:13:26 779 1

原创 【操作系统】磁盘调度算法

一、先来先服务算法先来先服务(First-Come,First-Served,FCFS),顾名思义,先到来的请求,先被服务。那按照这个序列的话:98,183,37,122,14,124,65,67那么,磁盘的写⼊顺序是从左到右,如下图:先来先服务算法总共移动了 640 个磁道的距离,这么⼀看这种算法,⽐较简单粗暴,但是如果⼤量进程竞争使⽤磁盘,请求访问的磁道可能会很分散,那先来先服务算法在性能上就会显得很差,因为寻道时间过⻓。二、最短寻道时间优先算法最短寻道时间优先(Shortest Se.

2021-06-15 15:15:59 953

原创 【操作系统】内存页面置换算法

一、缺页异常(缺页中断)当 CPU 访问的⻚⾯不在物理内存时,便会产⽣⼀个缺⻚中断,请求操作系统将所缺⻚调⼊到物理内存。那它与⼀般中断的主要区别在于:缺⻚中断在指令执⾏「期间」产⽣和处理中断信号,⽽⼀般中断在⼀条指令执⾏「完成」后检查和处理中断信号。缺⻚中断返回到该指令的开始重新执⾏「该指令」,⽽⼀般中断返回回到该指令的「下⼀个指令」执 ⾏。缺⻚中断的处理流程,如下图:在 CPU ⾥访问⼀条 Load M 指令,然后 CPU 会去找 M 所对应的⻚表项。如果该⻚表项的状态位是「有效的」.

2021-06-15 15:08:23 1965

原创 【计算机网络】IP面试知识(2) IP 地址分类

在 TCP/IP ⽹络通信时,为了保证能正常通信,每个设备都需要配置正确的 IP 地址,否则⽆法实现正常的通信。IP 地址(IPv4 地址)由 32 位正整数来表示,IP 地址在计算机是以⼆进制的⽅式处理的。⽽⼈类为了⽅便记忆采⽤了点分⼗进制的标记⽅式,也就是将 32 位 IP 地址以每 8 位为组,共分为 4 组,每组以「 . 」隔开,再将每组转换成⼗进制。那么,IP 地址最⼤值也就是2的32次方,接近43亿,也就说,最⼤允许 43 亿台计算机连接到⽹络。实际上,IP 地址并不是根据主机台数来配

2021-06-11 22:52:34 414

原创 【计算机网络】IP面试知识(1) IP 基本认识

IP 在 TCP/IP 参考模型中处于第三层,也就是网络层。⽹络层的主要作⽤:实现主机与主机之间的通信,也叫点对点(end to end)通信。网络层与数据链路层有什么关系呢?在上⾯我们知道 IP 的作⽤是主机之间通信⽤的,⽽ MAC 的作⽤则是实现「直连」的两个设备之间通信,⽽ IP 则负责在「没有直连」的两个⽹络之间进⾏通信传输。在区间内移动相当于数据链路层,充当区间内两个节点传输的功能,区间内的出发点好⽐源 MAC 地址,⽬标地点好⽐⽬的 MAC 地址。如果只有⾏程表⽽没有⻋票,就⽆法

2021-06-11 22:35:42 311

原创 【计算机网络】IP面试知识(6)IP协议相关技术②

NAT ⽹络地址转换ICMP 互联⽹控制报⽂协议IGMP 因特⽹组管理协议一、NATIPv4 的地址是⾮常紧缺的,在前⾯我们也提到可以通过⽆分类地址来减缓 IPv4 地址耗尽的速度,但是互联⽹的⽤ 户增速是⾮常惊⼈的,所以 IPv4 地址依然有被耗尽的危险。于是,提出了⼀种⽹络地址转换 NAT 的⽅法,再次缓解了 IPv4 地址耗尽的问题。简单的来说 NAT 就是同个公司、家庭、教室内的主机对外部通信时,把私有 IP 地址转换成公有 IP 地址。那不是 N 个私有 IP 地址,就要 N .

2021-06-11 21:38:37 239 2

原创 【计算机网络】IP面试知识(5) IP 协议相关技术①

DNS 域名解析ARP 与 RARP 协议DHCP 动态获取 IP 地址一、DNS在上⽹的时候,通常使⽤的⽅式是域名,⽽不是 IP 地址,因为域名⽅便⼈类记忆。那么实现这⼀技术的就是 DNS 域名解析,DNS 可以将域名⽹址⾃动转换为具体的 IP 地址。1、域名的层级关系DNS 中的域名都是⽤句点来分隔的,⽐如 www.server.com ,这⾥的句点代表了不同层次之间的界限。 在域名中,越靠右的位置表示其层级越⾼。毕竟域名是外国⼈发明,所以思维和中国⼈相反,⽐如说⼀个城市地点的时候,.

2021-06-11 21:23:46 318 3

原创 【计算机网络】IP面试知识(4)IPv6与IPv4

一、IPv6 基本认识IPv4 的地址是 32 位的,⼤约可以提供 42 亿个地址,但是早在 2011 年 IPv4 地址就已经被分配完了。但是 IPv6 的地址是 128 位的,这可分配的地址数量是⼤的惊⼈,说个段⼦ IPv6 可以保证地球上的每粒沙⼦都能被分配到⼀个IP地址。但 IPv6 除了有更多的地址之外,还有更好的安全性和扩展性,说简单点就是 IPv6 相⽐于 IPv4 能带来更好的⽹络体验。但是因为 IPv4 和 IPv6 不能相互兼容,所以不但要我们电脑、⼿机之类的设备⽀持,还需要⽹络

2021-06-11 21:15:17 976 1

原创 【计算机网络】IP面试知识(3)IP地址

一、公有 IP 地址与私有 IP 地址在 A、B、C 分类地址,实际上有分公有 IP 地址和私有 IP 地址。平时我们办公室、家⾥、学校⽤的 IP 地址,⼀般都是私有 IP 地址。因为这些地址允许组织内部的 IT ⼈员⾃⼰管 理、⾃⼰分配,⽽且可以重复。因此,你学校的某个私有 IP 地址和我学校的可以是⼀样的。就像每个⼩区都有⾃⼰的楼编号和⻔牌号,你⼩区家可以叫 1 栋 101 号,我⼩区家也可以叫 1 栋 101,没有任何 问题。但⼀旦出了⼩区,就需要带上中⼭路 666 号(公⽹ IP 地址),是

2021-06-11 20:49:16 469

原创 【计算机网络】TCP面试知识(5)拥塞控制

1、为什么要有拥塞控制呀,不是有流量控制了吗?前⾯的流量控制是避免「发送⽅」的数据填满「接收⽅」的缓存,但是并不知道⽹络的中发⽣了什么。⼀般来说,计算机⽹络都处在⼀个共享的环境。因此也有可能会因为其他主机之间的通信使得⽹络拥堵。在⽹络出现拥堵时,如果继续发送⼤量数据包,可能会导致数据包时延、丢失等,这时 TCP 就会重传数据,但是⼀重传就会导致⽹络的负担更重,于是会导致更⼤的延迟以及更多的丢包,这个情况就会进⼊恶性循环被不断地放⼤…所以,TCP 不能忽略⽹络上发⽣的事,它被设计成⼀个⽆私的协议,当⽹

2021-06-09 21:18:33 573 1

原创 【计算机网络】TCP面试知识(4)流量控制

发送⽅不能⽆脑的发数据给接收⽅,要考虑接收⽅处理能⼒。如果⼀直⽆脑的发数据给对⽅,但对⽅处理不过来,那么就会导致触发᯿发机制,从⽽导致⽹络流量的⽆端的浪费。为了解决这种现象发⽣,TCP 提供⼀种机制可以让「发送⽅」根据「接收⽅」的实际接收能⼒控制发送的数据量,这就是所谓的流量控制。举例说明,首先假设:客户端是接收⽅,服务端是发送⽅假设接收窗⼝和发送窗⼝相同,都为 200假设两个设备在整个传输过程中都保持相同的窗⼝⼤⼩,不受外界影响根据上图的流量控制,说明下每个过程:客户端向服务端发

2021-06-09 21:13:27 267

原创 【计算机网络】TCP面试知识(3)滑动窗口

1、引入窗口概念的原因我们都知道 TCP 是每发送⼀个数据,都要进⾏⼀次确认应答。当上⼀个数据包收到了应答了, 再发送下⼀个。这个模式就有点像我和你⾯对⾯聊天,你⼀句我⼀句。但这种⽅式的缺点是效率⽐较低的。如果你说完⼀句话,我在处理其他事情,没有及时回复你,那你不是要⼲等着我做完其他事情后,我回复你,你才能说下⼀句话,很显然这不现实。所以,这样的传输方式有⼀个缺点:数据包的往返时间越⻓,通信的效率就越低。为解决这个问题,TCP 引⼊了窗⼝这个概念。即使在往返时间较⻓的情况下,它也不会降低⽹络通信

2021-06-09 21:04:11 539 3

原创 【计算机网络】TCP面试知识(2)TCP重传机制有哪些?

TCP 实现可靠传输的⽅式之⼀,是通过序列号与确认应答。在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回⼀个确认应答消息,表示已收到消息。但在错综复杂的⽹络,并不⼀定能如上图那么顺利能正常的数据传输,万⼀数据在传输过程中丢失了呢?所以 TCP 针对数据包丢失的情况,会⽤重传机制解决。常⻅的重传机制:超时重传快速重传SACKD-SACK1、超时重传重传机制的其中⼀个⽅式,就是在发送数据时,设定⼀个定时器,当超过指定的时间后,没有收到对⽅的 ACK确认应答报⽂,就会重传该数

2021-06-09 17:51:54 375

原创 【计算机网络】Socket 编程

1、针对 TCP 应该如何进行 Socket 编程?服务端和客户端初始化 socket ,得到⽂件描述符;服务端调⽤ bind ,将绑定在 IP 地址和端⼝服务端调⽤ listen ,进⾏监听;服务端调⽤ accept ,等待客户端连接;客户端调⽤ connect ,向服务器端的地址和端⼝发起连接请求;服务端 accept 返回⽤于传输的 socket 的⽂件描述符;客户端调⽤ write 写⼊数据;服务端调⽤ read 读取数据;客户端断开连接时,会调⽤ close ,那么服务端 re

2021-06-08 21:19:16 183 2

原创 【计算机网络】如果已经建立了TCP连接,客户端突然发生故障了怎么办?

TCP 协议有一个保活机制。 这个机制的原理是这样的:定义⼀个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP 保活机制会开始作⽤,每隔⼀个时间间隔,发送⼀个探测报⽂,该探测报⽂包含的数据⾮常少,如果连续⼏个探测报⽂都没有得到响应,则认为当前的TCP 连接已经死亡,系统内核将错误信息通知给上层应⽤程序。在 Linux 内核可以有对应的参数可以设置保活时间、保活探测的次数、保活探测的时间间隔,以下都为默认值:net.ipv4.tcp_keepalive_time=7200net.ipv4.t

2021-06-08 21:12:15 2320

原创 【计算机网络】TCP4次挥手中的TIME_WAIT状态(面试题小结)

1、为什么 TIME_WAIT 等待的时间是 2MSL?MSL 是 Maximum Segment Lifetime,报⽂最⼤⽣存时间, 它是任何报⽂在⽹络上存在的最⻓时间,超过这个时间报⽂将被丢弃。因为 TCP 报⽂基于是 IP 协议的,⽽ IP 头中有⼀个 TTL 字段,是 IP 数据报可以经过的最⼤路由数,每经过⼀个处理他的路由器此值就减 1,当此值为 0 则数据报将被丢弃,同时发送 ICMP 报⽂通知源主机。MSL 与 TTL 的区别: MSL 的单位是时间,⽽ TTL 是经过路由跳数。所以 M

2021-06-08 20:18:46 513

原创 【计算机网络】TCP连接为什么是3次,而不是2次或者4次?(详细解答)

什么是 TCP 连接:⽤于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗⼝大小称为连接。所以,重要的是为什么三次握⼿才可以初始化Socket、序列号和窗⼝⼤⼩并建⽴ TCP 连接。接下来以三个⽅⾯分析三次握⼿的原因:三次握⼿才可以阻⽌重复历史连接的初始化(主要原因)三次握⼿才可以同步双⽅的初始序列号三次握⼿才可以避免资源浪费(1)避免历史连接简单来说,三次握手的首要原因是为了防⽌旧的重复连接初始化造成混乱。⽹络环境是错综复杂的,往往并不是如

2021-06-08 16:04:10 2056

原创 【图解法】字符串匹配之KMP算法(画图多少有点累)

一、暴力搜索法假设目标匹配字符串为蓝色所示的字符串,源字符串为黄色所示的字符串。暴力搜索的流程图:示例代码:public class ViolenceMatch { public static void main(String[] args) { String str1 = "BBC ABCDAB ABCDABCDABDE"; String str2 = "ABCDABD"; int index = violenceMatch(str1, .

2021-06-08 11:23:00 561

原创 【操作系统】进程间通信

每个进程的⽤户地址空间都是独⽴的,⼀般⽽⾔是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。一、管道1、管道如何创建呢,背后原理是什么?匿名管道的创建,需要通过下⾯这个系统调⽤:int pipe(int fd[2])这⾥表示创建⼀个匿名管道,并返回了两个描述符,⼀个是管道的读取端描述符 fd[0] ,另⼀个是管道的写⼊端描述符 fd[1] 。注意,这个匿名管道是特殊的⽂件,只存在于内存,不存于⽂件系统中。其实,所谓的管道,就是内核⾥⾯的⼀串缓存。从管道的⼀段.

2021-06-04 22:29:36 245

原创 【操作系统】进程调度

一、调度时机在进程的⽣命周期中,当进程从⼀个运⾏状态到另外⼀状态变化的时候,其实会触发⼀次调度。⽐如,以下状态的变化都会触发操作系统的调度:从就绪态 -> 运⾏态:当进程被创建时,会进⼊到就绪队列,操作系统会从就绪队列选择⼀个进程运⾏;从运行态 -> 阻塞态:当进程发⽣ I/O 事件⽽阻塞时,操作系统必须另外⼀个进程运⾏;从运行态 -> 结束态:当进程退出结束后,操作系统得从就绪队列选择另外⼀个进程运⾏;因为,这些状态变化的时候,操作系统需要考虑是否要让新的进程给 CPU.

2021-06-04 16:00:11 2014

原创 网易2021校招笔试题节选个人解答(题目来源:牛客)

1、字典序最小排列import java.util.*;public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); //所求序列的个数 int m = sc.nextInt(); //T序列的个数 int[] T = new int[m];

2021-06-03 22:30:14 877

原创 【操作系统】内存管理

一、虚拟内存单⽚机是没有操作系统的,所以每次写完代码,都需要借助⼯具把程序烧录进去,这样程序才能跑起来。另外,单片机的 CPU 是直接操作内存的「物理地址」在这种情况下,要想在内存中同时运⾏两个程序是不可能的。如果第⼀个程序在 2000 的位置写⼊⼀个新的值,将会擦掉第⼆个程序存放在相同位置上的所有内容,所以同时运⾏两个程序是根本行不通的,这两个程序会⽴刻崩溃。1、操作系统是如何解决这个问题呢?关键的问题是这两个程序都引⽤了绝对物理地址,⽽这正是我们最需要避免的。我们可以把进程所使⽤的地址「.

2021-06-03 17:12:01 169

原创 【操作系统】Linux 内核 vs Windows 内核

一、内核计算机是由各种外部硬件设备组成的,⽐如内存、cpu、硬盘等,如果每个应⽤都要和这些硬件设备对接通信协议,那这样太累了,所以这个中间⼈就由内核来负责,让内核作为应⽤连接硬件设备的桥梁,应⽤程序只需关心与内核交互,不⽤关⼼硬件的细节。说白了,内核就是应用程序与硬件进行交互的一个桥梁1、内核所拥有的的功能如下:进程调度:管理进程、线程,决定哪个进程、线程使⽤ CPU内存管理:管理内存,决定内存的分配和回收硬件通信:管理硬件设备,为进程与硬件设备之间提供通信能⼒用户程序与操作系统之间.

2021-06-03 16:02:15 259

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除