自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 unordered_map 用 [] 访问不存在的元素

引用 unordered_map 中不存在的 key,unordered_map 首先会插入一个值被初始化过的 string 类型的对象,然后返回对该对象的引用,所以 result 会得到一个值被初始化过的 string 类型的对象。由此可见,引用 unordered_map 中不存在的 key,unordered_map 中会插入这个 key,并为其生成一个 value。使用 find 函数查找 unordered_map 中不存在的元素,不会向容器中引入元素,可以避免造成错误。

2022-12-29 19:12:53 2398

原创 VSCode 提示 Error using --file-write: EPERM: operation not permitted, open ‘XXX‘

经排查文件和文件夹的用户名和组名都是 root,VSCode 无法访问。虽然是在 VSCode 里创建的文件,但它不能访问,非常奇怪。然后就可以在 VSCode 随心所欲地编辑 WSL 内的代码啦。在 VSCode 里为 WSL。\home\用户名\。

2022-10-30 21:23:49 1640

原创 从 db_bench 分析 RocksDB 写流程(二)

分析 RocksDB 合适以及如何 Flush 内存数据(MemTable)到 SST的。在 RocksDB 中,每一个 column family 都有自己的 MemTable,当它超过固定大小时,会被设置为 immutable 然后会有后台线程启动来刷新这个 immutable memtable 到磁盘。触发 Flush 的条件在下面这几种条件下RocksDB会flush memtable到磁盘...

2022-06-04 16:21:15 1135

原创 利用 db_bench 的代码分析 RocksDB 写流程(一)

从 测试工具的源代码,分析 的写流程。位于 tools/db_bench_tool.cc 路径下的 函数,完成对主要参数和环境的初始化以后,创建基准测试对象 。接着, 函数会完成另一部分初始化工作,包含测试键值对条目、键值大小和是否开启写前日志等参数的设置。通过匹配传入的测试方法名称,设置并调用相应函数。这些写函数最终都调用了相同函数 接下来分析 函数的实现代码第 5037 - 5043 行,是当列族的数目 > 1时,进行 操作。使用 rand_num 绑定 column familie

2022-06-04 15:56:48 1676 2

原创 基于 ZNS 模式搭建并运行 FEMU

准备工具:Visual Studio Code 和 MobaXterm,远程连接服务器。linux-5.10.tar.gz,编译内核使用。使用 VS Code 远程连接服务器下载 Remote - SSH 扩展成功后,窗口左侧就会出现远程资源管理器。修改 config 文件点击远程资源管理器的小齿轮,弹出窗口点击 C:\Users\XXX.ssh\config 文件修改内容。Host 填名称 HostName 填IP User 填用户名 Forwar

2022-01-16 12:22:12 3422

原创 闪存的物理结构

固态硬盘的工作原理很多都是基于闪存特性的。比如,闪存在写之前必须先擦除,不能覆盖写,于是固态硬盘才需要垃圾回收(Garbage Collection,或者叫Recycle);闪存每个块(Block)擦写次数达到一定值后,这个块要么变成坏块,要么存储在上面的数据不可靠,所以固态硬盘固件必须做磨损平衡,让数据平均写在所有块上,而不是盯着几个块拼命写(不然很快固态硬盘就报废了)。...

2021-11-03 19:51:30 2149

原创 美团校招提前批 移动端开发 一面 & 二面 面经

美团提前批 移动端开发工程师 专业一面面试时间:2021年7月21日 14:001. OSI七层协议TCP和UDP属于哪一层:传输层HTTP属于哪一层:应用层2. TCP和UDP的区别TCP 面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。TCP 提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错、不丢失、不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。TCP通过校验和、重传控制、序号标识、滑动窗口、确认应答实现可靠传输。如丢

2021-10-23 16:14:42 1000

原创 Direct I/O 和 Buffered I/O

Page CachePage Cache以物理页为单位对磁盘文件进行缓存。对于Linux等类Unix操作系统,通常会把空闲的内存用作Page Cache,在有内存请求的时候逐步释放缓存。应用层对文件的访问一般有两种方式:mmap 创建直接访问的虚拟地址空间read/write 寻址访问...

2021-10-23 16:07:08 528

原创 分布式存储系统概述

定义:分布式存储系统是大量普通PC服务器通过Internet互联,对外作为一个整体提供存储服务。特性:可扩展、低成本、高性能、易用挑战:数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性。技术: 分布式系统和数据库。数据分布一致性容错负载均衡事务与并发控制易用性压缩/解压缩数据需求:非结构化数据结构化数据半结构化数据分类:...

2021-10-23 15:30:12 3845

原创 基于线程的并发编程

线程是运行在进程上下文中的逻辑流,所有运行在一个进程里的线程共享该进程的虚拟地址空间。

2021-10-11 20:48:15 232

原创 2022届秋招笔试题小结:图

2022届秋招笔试题小结:图图的遍历算法最小生成树算法最短路径拓扑排序

2021-08-21 15:04:21 383

原创 最小生成树:Kruskal算法

题目来源于:华为提前批机考20210630 求图是否连通,如果连通则求出最小权值和 (leetcode hard)本题难点:图结构的构建最小生成树的算法

2021-08-21 11:18:09 227

原创 743. 网络延迟时间

原题:743. 网络延迟时间这一题可以使用 dijkstra 算法求最短时间,与标准的 dijkstra 算法求最短路径存在区别的地方在于没有指定 dst 节点,题目询问是否可以从 src 出发走完所有的节点,如果可以输出走完所有节点所需的最短时间,不能则输出 -1 。解决方法:可以将 distance 数组整个返回,如果其中有数值为 -1 (代码提前预处理过)的节点则表示从 src 无法到达此节点。没有的话就取 distance 数组中的最大值即为走完所有节点所需最短时间。struct cmp{

2021-08-20 16:31:07 223

原创 NC158 有向无环图的单源最短路径问题:Dijkstra算法

描述在一个有向无环图中,已知每条边长,求出1到n的最短路径,返回1到n的最短路径值。如果1无法到n,输出-1示例1输入:5,5,[[1,2,2],[1,4,5],[2,3,3],[3,5,4],[4,5,5]]返回值:9备注:两个整数n和m,表示图的顶点数和边数。一个二维数组,一维3个数据,表示顶点到另外一个顶点的边长度是多少每条边的长度范围[0,1000]。注意数据中可能有重边#include <vector>#include <iostream>#in

2021-07-24 15:53:54 675

原创 Shopee2022届校园招聘提前批笔试

岗位:Android开发工程师单选题和多选题:C++基础(引用与指针、const)操作系统(进程与线程、并发)数据结构(二叉树的前中后序遍历、栈、链表)计算机网络(TCP、OSI模型)编程题:(AC 20’)第一题:最大整数值给定一个正整数数组,用其中的整型数字组成最大的整型值。class Solution {public: /** * Note: 类名、方法名、参数名已经指定,请勿修改 * * * 最大正整数 * @pa

2021-07-24 15:49:14 193

原创 拓扑排序:编译依赖问题

一个完整的软件项目往往会包含很多由代码和文档组成的源文件。编译器在编译整个项目的时候,可能需要按照依赖关系来依次编译每个源文件。比如,A.cpp 依赖 B.cpp,那么在编译的时候,编译器需要先编译 B.cpp,才能再编译 A.cpp。 假设现有 0,1,2,3 四个文件,0号文件依赖1号文件,1号文件依赖2号文件,3号文件依赖1号文件,则源文件的编译顺序为 2,1,0,3 或 2,1,3,0。现给出文件依赖关系,如 1,2,-1,1,表示0号文件依赖1号文件,1号文件依赖2号文件,2号文件没有依赖,3号文

2021-07-06 19:56:55 1213

原创 拓扑排序:LC 207. 课程表 & 210. 课程表 II

207. 课程表

2021-07-06 16:09:20 355

原创 01 背包问题

有 n 种物品,物品 j 的体积为vjv_{j}vj​,价值为 wiw_{i}wi​,有一个体积限制 V。每种物品只有 1 个,只有选或者不选,而没有选几个的问题,此问题称为 01 背包问题。一个朴素的想法是,只考虑价值尽量大,状态设计是单串线性 DP 中最经典的状态设计,如下:dp[i] 表示考虑区间 [0..i] 里的物品可以取得的最大价值...

2021-07-06 10:12:21 120

转载 牛客网 ACM模式单行输入输出规范

题目描述:求a+b的和。输入的数据有多组,每一行有两个数a和b:0< a,b <100000.要求每行输出一个结果。编译器信息:版本:clang++3.9,采用c++11标准,编译的时候采用-O2级优化,支持万能头文件 <bits/stdc++.h>。输入输出处理:核心代码模式处理不需要处理任何输入输出,直接返回值即可。ACM 模式你的代码需要处理输入输出,请使用如下样例代码读取输入和打印输出:#include <iostream>using na

2021-07-05 21:09:10 6072

原创 C++:DFS求最优路径

vivo游戏中心的运营小伙伴最近接到一款新游戏的上架申请,为了保障用户体验,运营同学将按运营流程和规范对其做出分析评估。经过初步了解后分析得知,该游戏的地图可以用一个大小为 n*n 的矩阵表示,每个元素可以视为一个格子,根据游戏剧情设定其中某些格子是不可达的(比如建筑、高山、河流或者其它障碍物等),现在请你设计一种算法寻找从起点出发到达终点的最优抵达路径,以协助运营小伙伴评估该游戏的可玩性和上手难度。输入描述:第一行表示矩阵大小 n,5 <n < 10000第二行表示起点和终点的坐标第

2021-07-05 20:35:09 677

原创 HJ77 火车进站

描述给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号,火车站只有一个方向进出,同时停靠在火车站的列车中,只有后进站的出站了,先进站的才能出站。要求输出所有火车出站的方案,以字典序排序输出。输入描述:有多组测试用例,每一组第一行输入一个正整数N(0输出描述:输出以字典序从小到大排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见sample。示例1:输入:31 2 3输出:1 2 31 3 22

2021-06-29 09:54:38 780

原创 C++:表达式求值(四则运算)实现

请写一个整数计算器,支持加减乘三种运算和括号。示例1输入:“1+2”返回值:3示例2输入:“(2*(3-4))*5”返回值:-10示例3输入:“3+2* 3* 4-1”返回值:26#include<string>#include<stack>#include<iostream>using namespace std;#define N_OPTR 6typedef enum { ADD, SUB, MUL, L_P,

2021-06-25 17:23:21 2746

原创 C++:数组的输入、排序与去重操作

知识点:数组描述:明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据(用于不同的调查),希望大家能正确处理)。注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。当没有新的输入时,说明输入结束。

2021-06-23 17:53:50 1587

原创 C++:以空格分隔的字符串的输入输出

vivo2022届提前批校招笔试题幸运员工题目描述:选出工号中含有数字7或是7的倍数的幸运员工。输入描述:

2021-06-19 10:58:32 3155

原创 回文字符串

回文字符串就是正读和反读都一样的字符串,如“viv”、“nexen”、“12321”、“qqq”、“翻身把身翻” 等。给定一个非空字符串 str,在最多可以删除一个字符的情况下请编程判定其能否成为回文字符串;如果可以则输出首次删除一个字符所能得到的回文字符串,如果不行则输出字符串 “false” 。和LeetCode这一题相似:680. 验证回文字符串 Ⅱ...

2021-06-17 16:33:27 6970

原创 剑指 Offer 29. 顺时针打印矩阵

原题:剑指 Offer 29. 顺时针打印矩阵与主站 54 题相同:54. 螺旋矩阵方法:边界约束自写报错原因分析class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { int row=matrix.size(),col=matrix[0].size(); if(!row) return result;

2021-06-04 19:18:14 70

原创 剑指 Offer 26. 树的子结构

原题:剑指 Offer 26. 树的子结构在实现当中主要分为两个函数:isSubStructure:的主要作用是从当前两个根结点开始判断Tree2是否是Tree1的子结构,传入参数为Tree1中的任意一个非空结点和Tree2的根结点。作用就是将Tree1拆分成若干个子树与Tree2进行逐个对比。DoesTree1HaveTree2:一旦找到两个相同值的结点,就可以接着往下进行对比了。这里就要调用DoesTree1HaveTree2,它的作用就是帮助判断值相同的根结点所形成的两个子树是否具有相同结构。

2021-06-03 19:51:57 144

原创 剑指 Offer 07. 重建二叉树

原题:剑指 Offer 07. 重建二叉树

2021-06-02 19:59:20 106

原创 剑指 Offer 16. 数值的整数次方

原题:剑指 Offer 16. 数值的整数次方浮点数误差问题我们在判断底数x(double类型)是否等于0的时候,不能直接写x==0,这是因为计算机在表示浮点数的时候存在误差。我们不能用等号判断两个小数是否相等。如果两个小数的差的绝对值很小,就可以认为他们相等。计算机只能处理0、1代码,浮点数在计算机中存储的时候也采用的是二进制。将十进制小数转换成二进制小数的方法为基数乘法 :如果某个十进制小数乘2操作的最终结果始终无法得到1.0,表示它的二进制小数就是一个无限小数。由于double类型和flo

2021-05-29 18:06:16 80

原创 浮点型变量的误差问题

剑指Offer面试小提示:由于计算机表示小数(包括float和double型小数)都有误差,我们不能直接用等号(==)判断两个小数是否相等。如果两个小数的差的绝对值很小,比如小于0.0000001,就可以认为它们相等。要明白这个提示,首先我们需要弄清楚这两种类型的变量,在计算机当中是如何存储的?float类型在机器中存储为4个字节,double类型存储为8个字节。虽然存储字节数不同,但却都可分成三个部分:符号位指数部分尾数部分如图所示,float类型具有1位符号位,8位指数位和23位尾.

2021-05-28 20:42:03 876

原创 剑指 Offer 05. 替换空格

前情提要:在网络编程中,如果URL参数中含有特殊字符,如空格、’#‘等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在’%‘后面跟上ASCII码的两位十六进制的表示。比如空格的ASCII码是32,即十六进制的0x20,因此空格被替换成"%20"。再比如’#'的ASCII码为35,即十六进制的0x23,它在URL中被替换为"%23"。方法一:在原字符串上做替换由原来的一个空格,替换后变成'%'、'2'和'0'三个字符,字符串会因此变长,那么就需要.

2021-05-23 20:18:47 85

原创 26. 删除有序数组中的重复项

思路使用双指针遍历一次数组。左右指针的初始位置为0,左指针用来定位,右指针用来找元素。左指针与右指针的元素不相同的时候,左指针先自加一次,然后将右指针所指元素放在左指针指向的位置。左右指针元素相同或者不相同,右指针都需要向后移动一位。实现自写class Solution {public: int removeDuplicates(vector<int>& nums) { int left=0,right=0,n=nums.size();

2021-05-19 19:46:11 68

原创 剑指 Offer 50. 第一个只出现一次的字符

思路字符串s只包含小写字母,因此可以用数组模拟一个哈希表。因为可能出现的字符只有26个,因此数组大小设置为26。用cr[a]记录字符a出现的次数,遍历一次字符串s,统计完成cr[26]数组。第二次遍历字符串s,直接判断当前字符出现次数是否为1,第一次出现的字符直接使用return语句返回。关键词:数组细节初始化数组直接使用 int cr[26]={ };,初始化数组元素为0.如果不初始化数组,就会被随机赋值,程序结果会出错。没有字符字符串s为空串的时候,直接返回单空格。调用s.lengt

2021-05-18 19:25:50 83

原创 算法:排序

冒泡排序 bubble sort选择排序 selection sort插入排序 insertion sort归并排序 merge sort快速排序 quick sort随机快速排序 random quick sort技术排序 counting sort基数排序 radix sort

2021-04-29 16:22:15 106

原创 剑指 Offer 45. 把数组排成最小的数

实现class Solution {public: bool compareXY(int x,int y){ string xy,yx; string xs=to_string(x); string ys=to_string(y); xy.append(xs); xy.append(ys); yx.append(ys); yx.append(xs);

2021-04-20 16:25:36 87

转载 Linux字符设备和块设备的区别

Linux的字符设备和块设备系统中能够随机(不需要按顺序)访问固定大小数据片(chunks)的设备被称作块设备,这些数据片就称作块。最常见的块设备是硬盘,除此以外,还有软盘驱动器、CD-ROM驱动器和闪存等等许多其他块设备。注意,它们都是以安装文件系统的方式使用的——这也是块设备的一般访问方式。另一种基本的设备类型是字符设备。字符设备按照字符流的方式被有序访问,像串口和键盘就都属于字符设备。如果一个硬件设备是以字符流的方式被访问的话,那就应该将它归于字符设备;反过来,如果一个设备是随机(无序的)访问的,

2021-04-09 10:18:13 271

原创 C++:vector二维数组初始化

在刷 LeetCode 的时候需要初始化创建一个行大小为r、列大小为c的 vector 二维数组,具体的实现方法如下:vector<vector<int>> num(r, vector<int>(c));初始化创建r个类型为vector<int>,大小为c的vector向量。例如:num = [[1,2], [3,4]]即为r=2,c=2的vector<vector<int>>类型的向量。[1,2],[3,4]分别为

2021-03-31 15:21:36 5247

原创 C++:swap函数

在许多应用程序中,都有交换相同类型的两个变量内容的需要。例如,在对整数数组进行排序时,将需要一个函数来交换两个变量的值,如下所示:void swap(int &a, int &b){ int temp = a; a = b; b = temp;}而在对一个数组字符串对象进行排序的时候,会需要以下函数:void swap(string &a, string &b){ string temp = a; a = b; b

2021-03-30 15:40:12 10789

转载 C++:字符串转换成整数

from atoi()描述C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。声明下面是 atoi() 函数的声明。int atoi(const char *str)参数str – 要转换为整数的字符串。返回值该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。实例下面的实例演示了 atoi() 函数的用法。#include <stdio.h>#include <stdlib

2021-03-23 09:54:27 5316

原创 C++:stack.pop() error: cannot initialize a variable of type ‘char‘ with an rvalue of type ‘void‘

LeetCode 中程序的报错位置如下for(int i=0; i<sz; i++){ char c=s.pop(); str.push_back(c);}执行结果:编译出错Line 14: Char 18: error: cannot initialize a variable of type ‘char’ with an rvalue of type ‘void’ char c=s.pop(); ^ ~~~~~~~1 erro

2021-03-21 19:49:56 5476

空空如也

空空如也

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

TA关注的人

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