自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 文件的编译过程

原问题:将一个.cpp文件编译成一个.out文件的过程?首先.cpp文件是一个高级语言编写的文件,我们需要通过编译将其转换为机器识别的机器语言,即机器码(二进制文件),然后将其和库函数进行相应的链接,形成一个完整的可执行文件。链接的方式:静态链接:装入内存前先链接成一个完整的可执行文件,再装入内存,不再拆开。装入时动态链接:需要装入内存时再链接,一遍装一边链接。方便实现模块共享,将一个模块连接到多个应用程序,每个应用程序需要有不同的拷贝;方便实现软件版本的修改更新,但是执行过程中该模块的装入

2022-03-02 21:16:08 629

原创 fork理解

fork()是c++创建进程的最常用方式,创建一个子进程,和父进程共享内存空间和代码段。一次创建两次返回,其中父进程返回的是子进程的PID,子进程结束返回0,这种方式来区分父进程和子进程。fork()采用copyOnWrite(写时复用)技术,在创建之初,父子进程默认是readOnly的,当发生write时,复制页,父子进程各自拥有自己的内存区;fork()的底层是clone实现的。创建子进程之后,通过exec()将一个可执行文件放进该进程,执行一个新的任务。...

2022-03-02 20:48:35 195

原创 系统调用write,read执行过程

原问题:vim打开一个文件,并对其做了修改,esc+:wq保存,这个过程发生了什么?答:发生了write 系统调用,定义如下:#include<unistd.h>size_t write(int filedes,const char* buf,size_t nbytes);首先查看task_struct ,根据文件标识符fd 找到其对应的file结构体,然后在file结构体里面找到文件的索引结点,根据索引结点(inode)查找到磁盘地址,然后写。inode里面包含了文件名以外

2022-03-02 20:38:59 969

原创 阿里云块存储二面凉经(60mins)

1.面试官上来先介绍部门业务大概4-5分钟2.自我介绍,项目为主(4-5mins)3.开始问项目,有什么难点,他比较关心工程上的难点,简历上的项目都过了一遍,感觉这个面试官非常看重项目,贯穿全程。4.tcp三次握手过程,就client请求服务端考察了SYN洪范攻击,问相同端口和不同端口的多个相同seq请问服务端,服务端会怎么处理?4.Linux内核的一些东西有了解吗?5.cpp文件编译到执行的过程?6.vim中修改了文件,比如增加了两行代码,esc:wq保存这个过程发生了什么?调用系

2022-02-28 23:52:18 453

原创 字节飞书一面凉经(50mins)

1.自我介绍2.项目中讲到了通信,说一下为什么你们用udp,你们怎么解决udp不可靠的,tcp可靠,tcp可靠怎么实现的,为什么udp快;3.进程和线程4.地址变换怎么实现的5.用过数据库没,mysql底层实现和索引结构,区别,讲到了覆盖索引,讲一下6.事务特性,讲一下隔离性级别?讲一下什么情况会触发锁?7.http请求的状态码讲一下,3开头具体讲一下先搞一个算法题吧:(大概15-20分钟)写一个16进制的字符串相加;(本地ide写然后写几个测试用例)...

2022-02-28 17:25:54 359

原创 阿里云块存储一面(75mins)

首先打开白板写两道算法题(你写的时候他会检查,25分钟,在白板上写)1.两个有序数组找中位数(写了一个简单的on,他说有优化方法吗?讲了一下logn的算法思想)2.给了一组有序对,然后分辨出每层的元素(unordered_multimap<v,k>查找到第一个元素,然后BFS),他问为什么不用DFS,感觉DFS比较好。Q2:input:dog catcat tigerhouse dogdog buffet output:house dog ..

2022-02-27 16:43:17 218

原创 字符串相乘

input:string s1("12");string s2("12");output:"144";class Solution {public: string multiply(string num1, string num2) { if(num1.size()==1&&num1[0]=='0'||num2.size()==1&&num2[0]=='0')return "0";//边界条件 int num

2022-02-26 18:46:16 127

原创 基于α,β剪枝算法的有禁手五子棋AI小游戏

https://github.com/Mafans123/wuziqi_AI/commit/403f97bda142e3938c29c5fa6174478bdaccc9c5

2022-02-25 14:44:51 3752

原创 IP黑名单匹配(华为2021实习笔试)

题目:找出n个IP中的黑名单IP黑名单定义:给定了m个IP,mask采用CIDR表示,网段相同则判定为黑名单example:illegal_ip_01: 192.168.254.121/24illegal_ip_02: 116.7.221.23/16test_ip_01: 192.168.254.11test_ip_02: 116.7.222.1上述给定的两个test IP均不合法。下面提供了c++解法注:批量IP检查可以直接调用下面接口暴力循环,也可以...

2021-12-01 15:42:08 2030

原创 内核级线程&用户级线程理解

先看几个概念:1.引入线程的目的:一个进程的工作可以由多个线程完成,如果操作系统能够直接对这些线程进行调度,就能更好的实现并行操作。另外,一个进程中某个线程阻塞之后,不会影响其他线程的执行,这是内核级线程的绝对优势。2.操作系统在内核中提供线程支持,即内核线程3.cpu内核数是指cpu芯片上集成的内核单元,现代cpu都是多核心的4.内核线程数是指逻辑上的处理单元,intel的超线程技术,让操作系统能够识别到多个处理单元,一个处理单元对应一个内核级线程。也就是说不支持这种虚拟技术的操作系统,一

2021-11-12 20:54:05 2068

原创 括号组合数

LeetCode上面的一道中难题,题目描述如下:题解的方法相对比较复杂,这里提出一种简单的解法。递归,n对 "()" 的组合情况,基于n-1对 "()" 的扩充,n-1对() 组成的字符串中有2*(n-1)个空位可以插入"()".c++实现代码如下:class Solution {public: vector<string> generateParenthesis(int n) { if(n==1)return {"()"}; ve.

2021-09-28 16:59:53 1257

原创 map、multimap 基础知识整理

以下示例包含了map最基本的用法,增删查改#include<iostream>#include<map>#include<unordered_map>using namespace std;void print(pair<multimap<int ,string>::iterator,multimap<int ,string>::iterator>iter){ auto tempIter=iter.first;

2021-09-26 15:24:01 139

原创 求二叉树的最大深度

递归方法:非常简洁 int maxDepth(TreeNode* root) { if(root&&!root->left&&!root->right)return 1; if(!root)return 0;//根结点为空的情况 else return max(1+maxDepth(root->left),1+maxDepth(root->right)); }...

2021-09-14 17:36:46 76

原创 字符串Z字变换

这个例题其实是一个倒立的N字变换,不过不重要,重要的是这类题目的接替方法。方法1:万能解法,模拟变换流程进行分配,再合并。string convert(string s, int numRows) { if(numRows==1){ return s; } vector<string>str(numRows); bool tag=1;//正向移动为1,反向为0 int i=0; auto iter=str.begin...

2021-09-06 11:57:26 168

原创 求一个字符串的最长回文子串

查找最长回文字符串子串,考虑从中间向两边比对查找,并记录最长子串的边界。注意:比对时,将中间相同的字符当作一个中间点。string longestPalindrome(string s) { if(s.length()==0)return ""; int s_begin=0,s_end=0; for(int i=0;i<s.length();i++){ int high=i,low=i; while(high+1<s.length

2021-09-03 00:00:09 258

原创 c++ 容器 <vector>,<string>中对象增长时,空间分配原则

为了支持快速随机访问,部分容器如vector和string在内存中连续存储元素,当所在连续内存空间大小不足以存放这块需要连续存放的数据时,系统将为其分配一块更大的连续内存空间,然后将之前内存空间中的数据依次复制过来。为了防止频繁的整块复制操作,系统不应每次都按需分配;同时也不能分配过大的连续空间导致浪费,导致需要较大连续存储空间的数据找不到合适的连续空闲区域。那么,c++中的这些容器在实际应用中时如何分配的呢?c.capacity() //不重新分配内存空间的话,容器c最多保存多少元素。多次尝试发.

2021-08-23 20:22:47 338

空空如也

空空如也

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

TA关注的人

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