自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yangzijiangac的博客

记录美好生活

  • 博客(440)
  • 收藏
  • 关注

原创 关于vscode 头文件有红波浪线的问题

如果你尝试了网上很多方法都不能解决,不妨试试这种方法。如果你下载有下面这个插件,请把他禁用掉,具体原因我也不知道,但我的就是这么好的:,或者你可以尝试禁用其他的,禁用后关掉vscode,然后重新打开看看结果。...

2020-08-26 15:06:48 9524

原创 HDU 3966 + 树链剖分复习 + 视频讲解

树链剖分学习 参考代码:#include <cstdio>#include <algorithm>#include <iostream>#include <vector>#include <map>#include <queue>#include <set>#include <cti...

2020-07-15 13:01:11 1878 4

原创 人生思考与感悟

摸鱼:最近一段时间经常摸鱼,为了应付考试,感觉什么也没学进去,每天为了应付考试的任务,刷刷视频,虽然考试的东西弄了点,但一天下来,感觉啥都没学到,当前感觉心里很空。学习目标学习课程学习计划1Mysql至少把买的那本书看完,再在leetcode 上刷50题2git操作至少把基本操作学会3操作系统至少熟悉Linux的基本操作4刷题leetcode上每天2~3题,加周赛补题5算法留出一段时间狂刷动态规划6C++ primer按学长推荐

2020-06-07 11:35:35 439 1

原创 博客上线

我的个人博客已经上线啦~~由于csdn的穿插广告和皮肤付费,让我有点难受,所以我决定自己弄一个适合自己的博客,可以放音乐,可以有自己喜欢的图片等等…虽然有点费精力,但也不枉努力之后的欣喜…Vain的博客...

2020-04-22 18:24:32 337

原创 二本程序员的向上之路——规划书

二本程序员的人生进阶之路

2023-04-09 11:54:57 1766 1

原创 Android 系统因挂载u盘导致的系统黑屏解决方案

Android 系统性问题

2023-03-14 17:43:30 503

原创 Android I/O Prefetch 学习

Android Iop 原理学习

2022-10-20 22:53:53 1600

原创 在ubuntu64下实现 小型 C 运行时库

实现c运行时库

2022-09-18 00:50:22 1039

原创 c++ 类的多态以及虚函数

多态与虚函数

2022-09-09 11:30:31 458

原创 Android 系统 使用blktrace的方法

Android 系统 配置 blktrace

2022-08-12 12:59:18 840

原创 gcc编译器包

gcc安装包

2022-06-26 21:24:21 347

原创 Andorid.bp文件和Anorid.rc文件入门

Andorid bp和rc文件初步了解

2022-06-13 14:22:16 1453

原创 Leetcode 第 80 场双周赛题解

刷题

2022-06-12 00:37:09 125

原创 CSAPP第四章 优化程序性能:循环展开

计算一个前缀和的用时,利用循环展开写法和非循环展开未循环展开代码:循环展开代码:性能对比:未循环展开性能耗时:循环展开性能耗时:可以看出相同的数据量下,循环展开的写法可以让程序性能更优,但注意处理边界问题。...

2022-05-16 15:05:56 310 2

原创 SEQ硬件结构(指令流水线)

SEQ硬件结构处理一条指令,包含多个阶段取指将程序计数器寄存器作为地址,从指令内存读取指令的字节,PC增加器计算valP,即增加了的程序计数器。译码寄存器文件有两个读端口A和B,从这两个端口同时读寄存器valA和valB。执行执行阶段会根据指令的类型,将算术/逻辑单元(ALU)用于不同的目的。对整数的操作,他要执行指令所指定的运算。对其他指令,他会作为一个加法器来计算增加或者减少栈指针,或计算有效地址,或者只是简单的加0,将一个输入传递到输出。条件码寄存器(CC)有三个条件码位。ALU负责

2022-05-15 16:22:25 493 4

原创 c语言测int32的最大阶乘和int64的最大阶乘

代码:#include <stdio.h>int main() { __int64_t MaxInt32 = __INT32_MAX__; __int64_t sum32 = 1; /*int32的最大阶乘, 不能溢出*/ for (__int64_t i = 1;; i++) { if (sum32 * i > MaxInt32) break; sum32 *= i; } __int128_t MaxInt64 = __INT

2022-05-02 14:03:56 2188

原创 c输入数据溢出和c++输入数据溢出的区别

对于c++来说,前提条件,c++版本不易过低,太低的和c的机制差不多。看下面两个程序:cpp代码#include <cstdio>int main() { int u; scanf("%d", &u); printf("%d\n", u); return 0;}c代码#include <stdio.h>int main() { int u; scanf("%d", &u); printf("%d\n", u); ret

2022-04-24 10:21:01 822

原创 Linux 静态库和动态库的制作

静态库的制作:Lib.h#ifndef LIB_H#define LIB_Hvoid show();#endifLib.c#include "Lib.h"#include <stdio.h>void show() { printf("Hello Wrold!\n");}Program.c#include "Lib.h"int main() { show(); return 0;}首先将Lib.c编译成Lib.ogcc -c Lib.c -o Li

2022-04-19 20:37:35 250

原创 《程序员的自我修养——装载、链接与库》段地址对齐

根据上面的例子我们看它是如何对齐的。以上方案采用了一页为单位向上取整的方案,但是这个方案有一个缺点,当一页是4096,但是我们呢这个段有4097个字节,那难道要用一页占一个字节?显然这种方案效率十分低。以下是UNIX解决这个方案的方法。由上图,从我的理解角度,可以得出一个一个结论来,为了减少页内碎片,提高内存利用率,UNIX采取了在一个物理页可以存储多个段,多个段被映射到虚拟内存空间上,提高内存的利用率。...

2022-04-09 11:12:48 391

原创 UNIX环境高级编程ls的实现

如上图,由于apue.h是作者自己实现的,所以我们可以去网上拷贝一份apue.h/* Our own header, to be included before all standard system headers */#ifndef _APUE_H#define _APUE_H#if defined(SOLARIS)#define _XOPEN_SOURCE \ 500 /* Single UNIX Specification, Version 2 for Solaris 9 *.

2022-04-08 21:42:29 144

原创 旷视科技面经

感慨一下:大厂就是不一样,面试官的态度都好好啊!一面:1.说一下项目的具体实现:epoller和线程池配合实现reactor模型的Web服务器(吧啦吧啦…)2.说一下实习经历(吧啦吧啦…)3.用伪代码实现一个回声服务器:server:sockfd=socket()sock的信息初始...bind()/*sockfd和sock的初始化信息进行绑定*/listen()/*监听的客户端的最大数量*/cfd=accept()read(cfd,buf...) printf(buf)write

2022-04-07 10:57:28 1708 3

原创 Common块和Bss段的区别

昨天看《程序员的自我修养——链接,装载与库》发现不是很理解为什么要用common块,然后仔细看了一番,有了自己的理解。common块:用来存放弱符号,而全局未初始化变量是弱符号,但是难道不是应该存放在.bss段吗,为什么要有common块呢?原因:首先链接器是无法识别符号的类型的,它支持存在多个相同的弱符号存在,但是如果存在多个相同的弱符号,没有强符号存在的情况下,会默认最大的弱符号的内存大小是我们要分配的内存。但是在多文件链接的时候,可能在其他文件中会存在相同的弱符号但是类型可能会不同,所以当一个文件

2022-04-05 11:47:55 852

原创 《程序员的自我修养——链接,装载与库》内联汇编实现printf在终端打印字符串

由于我的虚拟机是64位Ubunt20.04,所以和书中所述环境不一致,系统调用号,不一致,所以我看了一遍知乎上的内容,了解了关于64位系统下的环境,然后实现这个过程。先看代码:nomain.cchar* str = "Hello World!\n";void exit() { asm("movq $42,%rdi \n\t" "movq $60,%rax \n\t" "syscall \n\t");}void printf() { asm("movq $13,

2022-04-03 13:26:29 5893

原创 深入理解C++中虚函数的实现原理

首先来看我今天思考的找个问题,我想取到类非静态成员的地址,但是一直报错!由于对类没有一个深入的理解,我查找了很多资料,发现了问题所在。类创建一个对象,他的普通成员函数,也称动态成员函数并不是属于这个对象的,而是属于类的(原谅我很菜,刚知道这一点),那么既然不属于对象,我以上写法是不合理的。但是我觉得这样写也没啥问题,毕竟 a.plays 应该是指向了这个成员函数的地址,但是c++规定了如下规则:也就是说类的动态成员函数只能被对象调用。那现在我就是想知道plays()的地址呢? 那其实我们已经知道了

2022-03-27 16:26:33 3478

原创 Leetcode三数之和

思路:由于他让求不包含重复的三元组,那么我们其实可以使用一个双指针来求,我们先把数组派个续,固定一端,然后从剩下的序列中开始进行枚举答案,即可。注意去重。class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { if(nums.size()<3){ return {}; } sort.

2022-03-26 17:41:35 664

原创 linux 无法导入 import rpool的问题已解决

变成如下原因是,电脑死机了,非主动关机磁盘数据丢失了!报如上错误时首先输入一个 zpool import然后会显示你的rpool的信息,我的电脑显示的时bpool,然后使用 zpool import bpool,再重启就完成了,最后变成如下:...

2022-03-21 19:19:42 1366 1

原创 (Linux) 使用裸ld手动链接c程序

最近在看《程序员的自我修养——链接,装载与库》,然后看到了链接部分,当然之前看csapp某一章节时,也看到了链接部分,本想手动实验一下,但是,到关键的链接部分了给了如下程序:!!!ld -o prog [system object files and args] /tmp/main.o /tmp/sum.o[system object files and args]? 这玩意是个啥,咋不说清楚?然后我就从《程序员的自我修养——链接,装载与库》跳章节开始找答案,找到这一章,看了他说Linux 的/u

2022-03-18 18:06:41 2092 1

原创 《程序员的自我修养——链接,装载与库》读后总结

第一章 温故而知新1.1 从Hello World说起一开始从打印一个“hello world”这个程序说起,不仅仅停留在表面,给我提出了一个疑问?打印出 “hello world”是如何实现的,提出了一系列的问题,这部分问题的大部分答案,我也不清楚,这里留下了一个悬念,问题放到了下面。1.2 万变不离其宗这一部分将抽象的计算机概念,进行了具体化,一个计算机的组成最重要的三个部件,中央处理器CPU,内存和I/O控制芯片。为了协调CPU,内存和高速的图形设备,人们想到了一系列的方法,设计南桥和北桥,

2022-03-17 00:40:18 1223

原创 进程的虚拟地址空间

进程的虚拟地址空间分为两部分:内核空间和用户空间每个进程都有各自的虚拟地址空间,这个是说用户空间,而内核空间是所有进程共享的,内核在初始化时,就创建内核空间的映射(因为所有进程共享,有一份就够了),并且,采用的就是线性映射,所谓线性, 就是内核一整块内核空间页, 一对一地映射到一块物理内存上。当程序进行系统调用时,产生中断,从用户态切换到内核态,切换用户栈为内核栈,将用户栈信息放到内核栈里,中断结束后恢复现场,这里内核空间的资源都是共享的。...

2022-03-14 21:52:31 2409

原创 c++11新特性:move的用法和右值引用

首先我们来思考拷贝和移动的区别,这样你能更深刻的理解c++11为什么要推出右值引用和move了。现来说说拷贝,以下面的例子来说明:int f(){ int tmp=10; return tmp;}int mian(){ int b=f(); return 0;}在主函数中,调用f()函数,为临时变量tmp申请了一块内存用来存储数据,当函数即将结束时,临时申请的这块内存要被释放掉,所以需要拷贝一份用于作为 f()函数的返回值。此时涉及了一次拷贝,还有一次拷贝是在主函数中,需要为b申请一块

2022-03-04 11:44:12 1730 1

原创 计算机组成原理:用c++实现汉明码

今天学习计组时,学习到了一个新知识海明码,一般用于网络传输中对数据进行校验,如果出差,可以通过海明码这个算法实现查找一个出错位,通过取反的方式纠错,实现原理是在信息位中加入校验位,组成新的二进制串,形成海明码。海明码的校验原理每个校验组分别利用校验位和参与形成该校验位的信息进行奇偶校验检查,构成k个校验方程s1,s2,s3。若其中一个答案为1说明这个校验方程出错,通过出错的方程下标累加可以得到出错的位置。实现代码:这里并无提供检验,若想实现校验,函数中以提供函数存储数据,对数据进行操作即可。#in

2022-02-28 21:50:07 1172

原创 计算机组成原理:十进制非负浮点数转为二进制

求123.6875的二进制整数部位用除基取余法,小数部位用乘基取整法#include <algorithm>#include <iostream>#include <string>using namespace std;int main() { float s, ks; int zs; cin >> s; zs = static_cast<int>(s); ks = s - zs; string pres, ff

2022-02-28 16:47:32 190

原创 ROM和RAM和硬盘的区别

今天看计组的时候,看到这些东西,感觉不是很熟悉,但是明白他的大致含义,决定好好搜一下,记录一下。RAM:属于内存,就是我们平时说的电脑里面的主存。可以进行随机存储,是与cpu直接进行数据交换的内部存储器。它可以随时读写(刷新时除外),而且速度很快,但是当断电后,数据会丢失。ROM:也属于内存,内存分ROM和RAM两部分,ROM只是很小的一部分,ROM有一段程序是来启动电脑的,计算机通电后,ROM启动程序,进行必要的硬件检测后,寻找DOS,找到DOS后将DOS装入内存,将控制权交给DOS,结束自己的

2022-02-27 17:34:04 3744

原创 Leetcode删除元素后的最小差

思路:我们先枚举能组成第一部分的最小值,将答案记录在数组中再枚举能组成第二部分的最大值,将答案记录在数组中,最后在枚举最小值即可,利用优先队列+前缀和实现class Solution {public: long long minimumDifference(vector<int>& nums) { priority_queue<long long>_bg; priority_queue<long long , vect..

2022-02-25 15:03:17 7046

原创 王道408操作系统:虚拟内存技术的实现

虚拟内存技术允许将一个作业分多次调入内存。采用连续分配方式时,会使相当一部分内存空间处于暂时或永久性 “空闲状态",造成内存资源的严重浪费,而且也无法从逻辑上扩大内存容量。因此虚拟内存的实现需要建立在离散分配的内存管理方式基础上。虚拟内存的实现有一下三种方式:请求分页式存储管理。请求分段式存储管理。请求段页式存储管理。不管哪种方式,都需要一定的硬件支持。一般需要的支持有以下几个方面:一定容量的内存和外存。页表机制(或段表机制),作为主要的数据结构。中断机构,当用户要访问到的部分尚未.

2022-02-09 18:18:48 545

原创 考研 操作系统:银行家算法

最近复习到死锁这一张了,之前找工作背八股的时候,这个知识点,背的挺溜的,但是思想什么的虽然都理解了,但是不如动手实现一下来的方便,所以用编程语言实现了一个银行家算法来解决死锁问题。编写的代码:#include <iostream>#include <queue>#include <vector>/*进程个数和资源个数*/int n, m;class Bank { public: Bank(int pid, std::vector<

2022-01-27 16:32:48 897

原创 考研 操作系统:吸烟者问题

#include <pthread.h>#include <semaphore.h>#include <unistd.h>#include <iostream>int num = 0;sem_t psem[4];void* Producer(void* args) { while (1) { if (num % 3 == 0) { sleep(1); std::cout << "Producer c

2022-01-24 22:07:24 699

原创 考研 操作系统:哲学家问题

经典哲学家问题:在linux下实现(用线程反应进程):#include <pthread.h>#include <unistd.h>#include <iostream>pthread_mutex_t chopsticks[5], mutex;void* zxj(void* args) { while (true) { pthread_mutex_lock(&mutex);/*哲学家之间互斥*/ /*筷子之间互斥*/

2022-01-24 20:36:15 571

原创 考研 操作系统:读者-写者问题

在linux下实现读写竞争问题#include <pthread.h>#include <semaphore.h>#include <unistd.h>#include <condition_variable>#include <fstream>#include <iostream>#include <mutex>#include <thread>/*共享资源*/pthread_mutex_

2022-01-24 17:50:57 333

原创 生产者-消费者模型

考研例题:生产者-消费者例题桌子上有一个盘中,每次只能向其中放入一个水果。爸爸专门向盘子里放苹果,妈妈专门向盘子里放橘子。儿子专门拿苹果。女儿专门拿橘子。仅当盘子里有自己要拿的水果,才去拿。实现代码:#include <semaphore.h>#include <iostream>#include <mutex>#include <thread>using namespace std;/*共享资源*/sem_t PlateEmpty, P

2022-01-20 22:56:09 339

空空如也

空空如也

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

TA关注的人

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