自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于框架,到底什么是框架?

首先考虑,如果没有框架,我们该如何去写这个后台服务?最直观想,我们要考虑监听端口、建立socket套接字,考虑浏览器请求过来的HTTP包中的信息、然后提取信息作相应的业务相应、请求后台数据等等一系列操作,同时还有考虑对于不同的请求应用哪套html模板等等。框架可以帮助我们做到上述事情(不同框架实现的功能种类和复杂度也不一样),比如百度的odp,整合了nginx进行http通信,采用了mvc结构进行路由,我们更多只需要关注自己的业务代码即可。因此如果每次开发一个项目都去考虑这些重复性的问题是很麻烦的。....

2022-07-16 00:51:27 527 1

原创 回溯到底是否需要进行pop操作

之前在lc刷题的时候,dfs或者回溯的思路大致懂了,但是因为基础不牢固导致有几个小细节一直搞混了,现在整理一下。核心思路是:1)判断是否满足终止条件?满足则做出处理 2)不满足,则进行选择->调用下一层->撤销选择。伪代码模板如下。//...//...void dfs() { if(条件满足) { 执行策略; } for() { push_back(); dfs(); pop_back(); }}//...之前一直向不太清这个p

2022-03-03 14:57:38 623

原创 inline函数的定义要放在头文件

因为inline会实现内联替换,inline是要加到函数是线上而非声明,加到声明上编译器也会忽略的。内联展开是在编译时进行的,只有链接的时候源文件之间才有关系。**所以内联要想跨源文件必须把实现写在头文件里。如果一个inline函数会在多个源文件中被用到,那么必须把它定义在头文件中。**不然在编译的时候,编译器会找不到那个内联函数的。...

2022-02-24 21:39:43 2191

原创 C++ const常量成员函数,this指针的本质

C++ const常量成员函数,this指针的本质C++ pririmer第七章:默认情况下,this的类型是指向类类型非常量版本的常量指针。也就是说如果现在有一个类student,那么其this指针类型为student *const,这是一个常量指针,不能用this去指向其他对象。根据c++规则:想存放常量对象的地址,只能使用指向常量的指针,也就意味着其不能在一个常量对象上调用普通的成员函数。如下情况是不允许的:class people{public: people(){} peop

2022-02-23 17:56:22 693

原创 操作系统学习 更新中

清华os课,跟着视频,整理一下学习内容。

2022-02-22 21:46:13 81

原创 Redis设计与实现笔记 更新中

简单动态字符串redis没有直接用C语言的传统字符串表示(空字符串结尾的字符数组),而是自己构建了SDS(Simple Dynamic String)的抽象类型,用作sds的默认字符表示。struct sdshdr { //记录buf数组已使用的字节数量 //等于SDS保存字符串长度 int len; //记录未使用字节数 int free; //字符串数组,保存字符串 char buf[];}优点:可常熟复杂度获取字符串长度,O(N)–>O(1),不卡性能底层a

2022-02-22 21:44:01 288

原创 值传递,引用传递和指针传递代码直观展示

#include<iostream>using namespace std;//值传递 void change1(int n){ cout<<"值传递--函数操作地址"<<&n<<endl; //显示的是拷贝的地址而不是源地址 n++;}//引用传递,形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主

2022-02-22 16:03:43 75

原创 c++关于回调函数和typedef

先看看typedef的用法tepdef是系统保留字,可以为指针定义简介的名称,如typedef int (*MyFUN)(int a,intb);int Max(int a,int b);MyFUN pMyFun;pMyFun= Max;其中MyFUN代表指向函数的指针类型的新名称,为指向函数的指针的类型别名。再说一下复杂声明的分析理解复杂声明可用的“右左法则”:从变量名看起,先往右,再往左,碰到一个圆括号就调转阅读的方向;括号内分析完就跳出括号,还是按先右后左的顺序,如此循环,直到整个

2021-11-30 12:46:12 1179

原创 c++协程(todo)

什么是协程传统的C++服务器框架,一般是同步I/O或者异步I/O。同步 I/O 框架同步I/O框架往往使用的是多进程模式:一个父进程负责 accept 传入连接,然后 fork 一个子进程处理;或者是一个父进程创建了一个 socket 之后,fork 出多个子进程同时执行 accept 和处理。最基本的,从socket, bind, connect, accept, read, write 等等一路下来的 API,按顺序这样调用下来,然后写了一个 server / client 的话,可以算是一种同

2021-11-30 00:20:15 2355

原创 c++ thread_local

C++线程储存持续性(C++11)关键字 thread_local,其生命周期与所属的线程一样长。thread_specific_ptr代表了一个全局的变量,而在每个线程中都各自new一个线程本地的对象交给它进行管理,这样,各个线程就可以各自独立地访问这个全局变量的本地存储版本,线程之间就不会因为访问同一全局对象而引起资源竞争导致性能下降。而线程结束时,这个资源会被自动释放。还有一种实现方式,比如我不把某一资源生命为静态变量,我在每个线程调用函数中声明局部变量,然后通过传参的方式来实现。不过这.

2021-11-25 23:47:54 2617

原创 关于指针数组和数组指针 strlen sizeof

自己之前一直对int main(int argc, char* argv[])参数有点一知半解,导致今天有点迷糊。先从一个很简单的程序开始。https://www.cnblogs.com/dzry/archive/2011/05/12/2044835.html

2021-11-24 16:25:23 560

原创 关于SSH

事情的起因是隔壁实验室服务器被黑后拿来挖矿,询问了一番,对方是直接ssh登录服务器后直接wget挖矿脚本,由于密码设置的比较简单,可能在ip暴露情况下直接暴力破解了,来看一下SSH和非对称密钥吧。非对称加密:它包含两套秘钥 - 公钥以及私钥,**其中公钥用来加密,私钥用来解密,**并且通过公钥计算不出私钥,因此私钥谨慎保存在服务端,而公钥可以随便传递,即使泄露也无风险。保证SSH安全性的方法,简单来说就是客户端和服务端各自生成一套私钥和公钥,并且互相交换公钥,这样每一条发出的数据都可以用对方的公

2021-11-20 00:07:00 868

原创 shared_ptr

template <typename T> 5 class shared_ptr { 6 public: 7 shared_ptr(T* p) : count(new int(1)), _ptr(p) {} 8 shared_ptr(shared_ptr<T>& other) : count(&(++*other.count)), _ptr(other._ptr) {} 9 T* operator->() { return _p

2021-09-15 23:21:24 53

原创 单例模式等

https://blog.csdn.net/crayondeng/article/details/24853471?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163163491516780262566416%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=163163491516780262566416&biz_id=0&am

2021-09-15 09:23:50 60

原创 c++ 01 完全 背包

#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<climits>using namespace std;int N, V;int W[20];int Value[20];int f[20]; int main(){ scanf("%d%d", &N, &

2021-09-10 00:58:38 80

原创 面试的一些记录

虾皮客户端开发框架,语言了解没死锁,条件总之八股问得很全面算法:摩尔排序b站:虚函数表保存在内存的哪里,面试官说是表在全局区,表里的内容在代码段区内存对齐说一下面相对象三大特性说一下,多说点细节对称、非对称加密说一下,常用的算法说一下拷贝构造函数和默认构造函数的区别,哪些场景会用到拷贝构造算法:链表有环,查找矩阵数组(右上角搜索,类似二叉树)字节(测开)测试发红包设计用例get、post、tcp、udp输入,看到,网页,过程,懂?sql 题,考点是窗口函数算法:

2021-08-30 16:31:59 93

原创 c++ string 和 char相互转换问题

char转换成string直接赋值char a = 40;string b = a; /*错误。因为string是一个指针,存储的值是所指向的地址,而char型存储的是内容,所以不可以直接用赋值号赋值*/ const char* a = "hello";string b = a; //正确 const char[] a = "hello";string b = a; //正确利用string构造函数char a = 48;string

2021-08-21 19:29:54 189

原创 输入输出记录

#include<iostream>#include<vector>#include<sstream>using namespace std;int main(){ string s; vector<int> v; vector<int> w; getline(cin, s); istringstream is1(s); int inter; char ch; while

2021-06-17 21:39:47 106

原创 网络以及服务器项目相关知识整理

项目介绍在linux环境下使用C++开发一个轻量级的服务器,通过线程池、epoll,以及模拟Proactor模型实现并发,采用状态机解析GET与POST请求,经Webbench压力测试可以实现上万的并发连接数据交换。为什么要做这样一个项目:可结合测开实习经历,接触网络与架构较多,但一直没有较多实际深入上手的机会,同时做该项目也能够比较系统的巩固和完备c++,网络,操作系统相关知识。线程池相关服务器编程基本框架单元与单元之前通过请求队列通讯。具体的,I/O处理单元与逻辑单元之间,用的一个双向

2021-04-08 14:09:16 452

原创 linux

linux学习准备工作gcc静态库制作动态库制作准备工作sudo apt install openssh-server安装ssh服以便xshell连接上,vscode装remote相关远程服务插件,可以连接到开发机,这样比较方便开发。gcc例:比如运行 gcc -S main.c -o main.s,相当于同时进行了预处理、编译两步不带参数: gcc main.c -o test 进行预处理、编译、汇编、链接。gcc不能自动和c++程序用的库链接,通常用g++链接,统一起见,编译+

2021-03-31 00:08:21 118 1

原创 C++后台开发知识点总结

说一说内存泄漏内存泄漏主要是由于疏忽导致未能正确释放掉程序中已经不使用的内存。主要来源有两块:一是没能够正确使用free/delete释放malloc/new出的内存,导致堆内存泄漏。第二是系统资源泄露。主要指程序使用系统分配的资源比如SOCKET等没有使用相应的API释放掉,导致系统资源的浪费,严重可导致系统效能降低,系统运行不稳定。内存管理栈:编译器自动管理、释放,主要存放局部变量,函数参数堆:malloc/new free/delete 程序员自行分配的内存代码区:存放函数体的二进制代码字

2021-03-29 17:12:57 835

原创 操作系统相关知识点整理

操作系统内存管理虚拟内存虚拟内存:虚拟内存的基本思想是,每个进程有用独立的逻辑地址空间,内存被分为大小相等的多个块,称为页(Page).每个页都是一段连续的地址。对于进程来看,逻辑上貌似有很多内存空间,其中一部分对应物理内存上的一块(称为页框,通常页和页框大小相等),还有一些没加载在内存中的对应在硬盘上。直接使用物理地址会有以下三个问题:地址空间不隔离程序运行时候的地址不确定内存使用率低下分段能解决前两个问题,分页能解决三个问题,差别主要在于粒度。缺页中断的细节硬件陷入内核,离开

2021-03-27 00:13:33 155

原创 关于计算机网络,我与面试官的一场博弈

说一下OSI七层模型和TCP/IP五层模型TCP五层模型是物理层、数据链路层、网络层、传输层、应用层。七层模型中应用层下会有表示层和会话层,更深入来说一点会话层就是在发送方和接收方之间进行通信时创建、维持、之后终止或断开连接的地方。表示层主要是管理数据传输的表示方式。说一下TCP与UDP他们都是传输层的协议。TCP是面向字节流的,UDP是面向数据报的:因为UDP只是把应用层交下来的报文加上首部后就向下层传输,应用层交给UDP多长的报文,UDP就照样发送。而TCP是把应用层交下来的数据看成无结构的字节流

2021-03-25 17:24:26 101

原创 二分查找模板和例题

模板int bsearch_1(int l, int r) { while (l < r) { int mid = (l+r)>>1; if (check(mid)) { r = mid; // check()判断mid是否满足性质 } else { l = mid + 1; } } return l;}例题:给定n个猴子 每个猴子有个食量

2021-03-21 22:32:20 65

原创 数据库相关知识整理(更新中)

数据库相关知识整理事务及事务的四大特征1、事务2、事务四大特征关系型数据库、非关系型数据库简介、区别MySql的索引如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入事务及事务的四大特征1、事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作

2021-03-20 10:35:55 195 1

空空如也

空空如也

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

TA关注的人

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