自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++双重检测实现单例的潜在问题

#include <pthread.h>class single{public: static single *getSinle();private: single() {} ~single() {} static single *p; static pthread_mutex_t lock;};single *single::p = NULL;pthread_mutex_t single::lock = PTHREAD_MUTEX_IN

2021-05-10 17:49:31 1398

原创 C++对象静态变量的继承

如果父类中有静态变量,子类可以继承静态变量。也可以调用,子类如果对变量进行更改,那么父类的变量也会改变。二者共享同一份变量。当然子类也可以命名一个同名变量,此时如果子类再想调用父类的静态变量,则可以通过作用域来调用。#include <iostream>using namespace std;class Single{};class stest{ public: static int s;};int stest::s=10;class schld:pu

2021-05-10 16:31:46 1621 1

原创 CSAPP学习一:计算机系统漫游

unix 系统上,从源文件到目标文件的转化是由编译器驱动程序完成的。linux > gcc -o hello hello.cgcc编译器驱动程序读取源程序hello.c,并把他翻译成一个可执行目标文件hello。这个翻译阶段可分为四个阶段完成。预处理器,编译器,汇编器,链接器。进程是操作系统对一个正在运行的程序的一种抽象。...

2021-04-25 07:17:35 203

原创 高性能服务器开发项目框架

服务器模型为C/S模式。CS模型逻辑。服务器启动后,首先创建一个或多个监听socket,并调用bind函数将其绑定到服务器感兴趣的端口上,然后调用listen函数等待客户连接。服务器稳定运行后,客户端就可以调用connet函数向服务器发起连接。由若干客户连接是随机到达的异步事件,服务器需要使用某种IO模型来监听这一事件,当监听到连接请求后,服务器就调用accept函数接受它,并分配一个逻辑单元为新的连接服务。可以创建一个新的进程或线程作为逻辑单元。逻辑单元读取客户请求,然后处理该请求,然后将处理结果返

2021-04-21 15:53:00 230

原创 剑指offer 面试题4

一开始我以为很简单,但是实际做的时候发现自己还是有些没考虑到。当要删除的在中间的时候,我想的是把下个结点的值拷贝过来,然后删除下一个;但是等到要删除的是最后一个的时候,麻烦就出现了,怎么都解决不了。看了书上的解法,是用去找next的值。这个果然就能解决了。唉,年轻#include <iostream>#include <string>#include <string.h>using namespace std;struct LinkNode{ in

2021-04-18 09:23:29 53

原创 VSCODE无法使用unordered_map解决

因为这个一直困扰了好久。网上说的在setting里加-std=c++11的根本没用;最终解决方案是不是使用#include <unordered_map>而是使用#include<tr1/unordered_map>using namespace std::tr1;//原先的std命名空间也不能省using namespace std;...

2021-04-15 09:55:55 3307 2

原创 操作系统

2、线程同步的方式:互斥锁、自旋锁、读写锁、条件变量3、互斥锁与自旋锁的底层区别4、孤儿进程与僵尸进程5、死锁及避免10、线程上下文切换的流程11、进程上下文切换的流程12、进程的调度算法16、虚拟内存概念(非常重要)17、MMU地址翻译的具体流程18、缺页处理过程19、缺页置换算法:最久未使用算法、先进先出算法、最佳置换算法5、多版本并发控制实现机制(MCVV)原理内存页式管理int,short,long,long long类型大小。如何判断你的电脑是32位操作系统和64位操作

2021-04-13 16:06:05 203

原创 数据结构和算法

10万个数如何找中位数排序算法稳定性编程题1:链表倒数第K个元素编程题2:实现一个MinStack,push,pop,get_min都要是O(1)复杂度最小公共祖先王者荣耀的排位机制是什么?可能运用到哪些数据结构和算法LRUK个一组反转最大子数组和hash碰撞怎么解决?一个字符串链表中的指定字符串100亿个数中找出最大的1万个数,想到的方法及对应的复杂度快速排序的时间复杂度为什么最快只能到O(NlogN)10000个数找出最大的10个...

2021-04-13 16:05:34 71

原创 C++基础

1、空类有多大,都有什么函数构造,析构,拷贝构造,赋值运算符,取地址运算符,const取地址运算符2、struct内存对齐3、内存泄露的情况4、指针和引用的区别5、野指针产生与避免6、27、四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr28、shared_ptr中的循环引用怎么解决?(weak_ptr)8、vector迭代器失效...

2021-04-13 14:38:29 603

原创 数据库

1、数据库的范式2、数据库的引擎3、innodb的特性4、介绍一下MVCC实现机制4、b+是怎么保证平衡的5、联合索引最左匹配,原理

2021-04-13 14:14:51 134

原创 C字符串函数

比较1、strcasecmp2、strcmp3、strncasecmp

2021-04-12 16:45:27 51

原创 网络相关每日回顾

1、为什么IP不可靠,可能发生哪些错误。发生错误如何处理?2、TCP连接握手三次如果没有建立会怎样,为什么要三次,如何应对syn攻击?3、TCP四次回收如何没有建立会怎样?为什么要四次,主要应对?4、TCP状态转移,连接过程中的状态,断开过程中的状态。服务器和客户端有什么不同。MSL5、什么是nagle算法6、TCP超时重传和超时重连7、拥塞控制8、代理服务器作用9、浏览器键入www.google.com后发生什么9、HTTP协议11、HTTP请求报文和回复报文12、长连接和短连接1

2021-04-12 16:45:14 94

原创 半同步半反应堆线程池

pthread_create陷阱:pthread_create的原型为#include <pthread.h>int pthread_create (pthread_t *thread_tid, //返回新生成的线程的id const pthread_attr_t *attr, //指向线程属性的指针,通常设置为NULL void * (*start_routine

2021-04-07 19:05:17 354

原创 HTTP基础知识

HTTP报文分为请求报文和响应报文。请求报文从浏览器端发送到服务器端,响应报文从服务器端发送到浏览器端。HTTP请求报文由请求行、请求头部、空行和请求数据四个部分组成。请求分为两种,GET和POST。HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。请求分为GET和POST 1 GET /562f25980001b1b106000338.jpg HTTP/1.1 2 Host:img.mukewang.com 3 Us

2021-04-07 18:45:18 125

原创 服务器框架

服务器框架:主要由I/O单元,逻辑单元和网络存储单元组成,其中每个单元之间通过请求队列进行通信,从而协同完成任务。其中I/O单元用于处理客户端连接,读写网络数据;逻辑单元用于处理业务逻辑的线程;网络存储单元指本地数据库和文件等。五中IO模型:阻塞IO:调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有没有返回,必须等这个函数返回才能进行下一步动作。非阻塞IO:非阻塞等待,每隔一段时间就去检测IO事件是否就绪。没有就绪就可以做其他事。非阻塞I/O执行系统调用总是立即返回,不

2021-04-07 16:00:22 566

原创 C++static关键字作用

static的作用有:1、局部变量在函数体内,静态变量具有记忆功能,被声明为静态的变量在函数调用过程中,值不变;也就是静态变量只初始化一次,即使函数返回,重新进入,它的值也会保持不变。2、全局变量普通全局变量对整个工程可见,其他文件使用extern声明后就可以使用。所以需要注意变量的命名。而静态全局变量仅对当前我呢间可见,其他文件不可访问。函数静态函数也是只能在声明它的文件中可见,其他文件不能引用该函数对于C++面向对象又有对于变量而言1、最好是类内声明,类外初始化(为什么?)2、无

2021-04-07 13:30:29 223 1

原创 线程同步机制相关

RAII全称是“Resource Acquisition is Initialization”,直译过来是“资源获取即初始化”.简单来说就是构造函数中申请资源,析构函数释放资源,智能指针就是如此。RAII的核心思想是将资源或者状态与对象的生命周期绑定信号量:信号量是一种特殊的变量,它只能取自然数值并且只支持两种操作:等待§和信号(V).实际上信号量就是当额度用完的时候,<=0的时候挂起执行。每次申请执行都会减一。可以为负。当有执行执行完时,要归还,此时如果<=0,那么就从挂起队列找到

2021-04-07 08:23:29 110

原创 单例模式

单例模式最常用的设计模式之一,保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。实现思路:私有化它的构造函数,以防止外界创建单例类的对象;使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。懒汉模式:即非常懒,不用的时候不去初始化,所以在第一次被使用时才进行初始化(实例的初始化放在getinstance函数内部)经典的线程安全懒汉模式,使用双检测锁模式(p == NULL检测了两次)利用局部静态变量实现线程安全懒汉模式饿汉模式:即迫不及待,在

2021-04-06 21:49:15 63

原创 进程与线程

线程与进程区别:1、进程拥有独立的堆栈空间和数据段,系统开销大,而线程仅有独立的堆栈空间,但是数据段是共享的。因此系统开销小。2、进程之间相互独立,因此进程的通信机制比较复杂,如管道,信号,消息队列,共享内存,套接字等。而线程由于共享数据段所以通信方便。同样,因为进程独立,所以一个进程崩溃不会对其他进程产生影响,而线程是进程中的一个执行路径,线程死掉,进程就会死掉。3、线程使得CPU更有效,因为当线程数不大于CPU数目时,不同的线程运行于不同的CPU上,可以使程序更高效执行。进程间通信方式:1)管

2021-04-06 21:26:28 60

原创 HTTP中get和post区别

最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。GET请求在URL中传送的参数是有长度限制。(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送he

2021-04-06 21:26:24 66

原创 线程相关问题

为什么要使用线程池?当你需要限制你应用程序中同时运行的线程数时,线程池非常有用。因为启动一个新线程会带来性能开销,每个线程也会为其堆栈分配一些内存等。为了任务的并发执行,我们可以将这些任务任务传递到线程池,而不是为每个任务动态开启一个新的线程。线程池出现的原因在于创建某种对象的代价太高,而且该对象又需要反复使用。对于大多数网络服务器,他们都有共同点就在于单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短。传统的多线程方案是接收到客户请求后,创建一个新的线程,等到任务执行完毕后,线程退出。也就是即

2021-04-06 20:59:05 53

原创 select、poll和epoll

1、对于select和poll来说,所有文件描述符都是在用户态被加入其文件描述符集合的,每次调用都需要将整个集合拷贝到内核态;epoll则将整个文件描述符集合维护在内核态,每次添加文件描述符的时候都需要执行一个系统调用。系统调用的开销是很大的,而且在有很多短期活跃连接的情况下,epoll可能会慢于select和poll由于这些大量的系统调用开销。2、select使用线性表描述文件描述符集合,文件描述符有上限;poll使用链表来描述;epoll底层通过红黑树来描述,并且维护一个ready list,将事件表

2021-04-06 20:36:08 182

原创 Reactor与Proactor模式

Reactor模式:要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生(可读、可写),若有,则立即通知工作线程(逻辑单元),将socket可读可写事件放入请求队列,交给工作线程处理。Proactor模式:将所有的I/O操作都交给主线程和内核来处理(进行读、写),工作线程仅负责处理逻辑,如主线程读完成后users[sockfd].read(),选择一个工作线程来处理客户请求pool->append(users + sockfd)。以读为例,reactor是可读了通知你,proactor

2021-04-06 20:02:21 74

原创 华为机试第二题 统计最小帽子

思路有了,卡在输入上#include <iostream>#include <vector>#include <unordered_map>using namespace std;int main() { unordered_map<int, int> hash; int n; cin >> n; for (int i = 0; i < n; ++i) { int x; cin >> x; has

2021-03-31 21:38:20 143

原创 华为机试第一题,统计球队比分

一直卡在输入和输出上不知道怎么办#include <iostream>#include <vector>#include <string>#include <algorithm>#include <sstream>#include <functional>using namespace std;class Compare{ public: bool operator()(vector<int&gt

2021-03-31 21:37:19 158

原创 linux学习笔记:调整时间/ip配置

如果只是用date 修改时间,重启后总会失效。因为linux中有系统时间还有硬件时间平时使用的date显示的就是系统时间如果要显示硬件时间,就是hwclock (hardware clock)–show接下来是把硬件时间和系统时间同步hwclock --hctosys (hc to sys)最后把系统时间写入 cmosclock -w需要注意的是,硬件时间只有在root权限下才可以操作...

2021-03-30 11:09:58 86

原创 linux学习:压缩命令

tar -cvf examples.tar files|dir#说明:-c, --create create a new archive 创建一个归档文件-v, --verbose verbosely list files processed 显示创建归档文件的进程-f, --file=ARCHIVE use archive file or device ARCHIVE 后面要立刻接被处理的档案名,比如–file=examples.tar#举例:tar -cvf file.tar file1

2021-03-30 09:03:15 103 1

原创 linux学习:获得帮助文件

manwhatisapropos–helphelp

2021-03-30 08:09:49 39

原创 linux学习:查找命令

find使用格式 : find [指定查找目录] [查找规则] [查找完后执行的action]-iname 根据文件名查找,但不区分大小写-a 表示&&与-o 表示|| 或–not 表示!非 #-atime a代表access #-mtime m代表modify #-ctime c代表change #-amin #-mmin #-cmin所以这里atime,mtime,ctime就是分别对应的“最近一次访问时间”“最近一次

2021-03-29 22:10:30 124 1

原创 linux学习:权限修改

一、chmod作用:修改文件、目录的权限二、语法:chmod [对谁操作] [操作符] [赋予的权限] 文件名三、操作对象:u 用户user,表现文件或目录的所有者 g 用户组group,表现文件或目录所属的用户组 o 其他用户other a 所有用户all四、操作符:+ 添加权限 - 减少权限 =直接给定一个权限五

2021-03-29 21:04:44 57

原创 linux文件处理命令

以下命令,如果不是文件名前包含绝对路径,则表示当前目录下的文件touch命令所在路径:/bin/touch执行权限:所有用户功能描述:创建空文件语法:touch [文件名]命名名称:cat命令所在路径:/bin/cat执行权限:所有用户功能描述:显示文件内容语法:cat [文件名]-n 显示行号cat > file 可以在当前目录创建文件并在命令行输入文件内容,按ctrl+d退出输入内容(注意:若文件已经存在,会丢弃原文件的内容)cat >> file 也可以在当

2021-03-29 08:36:09 138 1

原创 linux学习笔记:linux常用命令 命令格式与目录处理命令

ls命名名称:ls命令英文原意:list命令所在路径:/bin/ls执行权限:所有用户功能描述:显示文件目录语法:ls 选项[-ald] [文件或目录]-a (all)可以显示隐藏文件,Linux中隐藏文件以”.”开头-l (long) 显示文件引用技术、所有者、所属组、文件大小、文件修改时间、文件名等详细信息-h (human)人性化显示文件大小,以K为单位-i 显示文件的 i结点 (inode)(类似于key)-d 显示目录信息-表示二进制文件,d表示目录,l表示软链接cp即

2021-03-29 08:05:37 71 1

原创 简单http学习:5 excute_cgi调用

void execute_cgi(int client, const char *path, const char *method, const char *query_string){ char buf[1024]; int cgi_output[2]; int cgi_input[2]; pid_t pid; int status; int i; char c; int numchars = 1; int content_lengt

2021-03-27 21:13:07 165

原创 简单http学习:4 server_file 函数

void serve_file(int client, const char *filename){FILE *resource = NULL;int numchars = 1;char buf[1024];buf[0] = ‘A’;buf[1] = ‘\0’;//这里设置的意义是什么,保证进入循环while ((numchars > 0) && strcmp("\n", buf)) /* read & discard headers */numchars =

2021-03-27 21:11:13 343

原创 简单http学习:3 accept_request 函数

重头void accept_request(int client){ char buf[1024]; int numchars; char method[255]; char url[255]; char path[512]; size_t i, j; struct stat st; /* int stat(  const char *filename //文件或者文件夹的路径  , struct stat *buf //获取的信息保存在内存中)

2021-03-27 21:10:46 459 1

原创 简单http学习:2 错误函数

void unimplemented(int client){//回答不能执行的方法 char buf[1024]; //sprintf格式化输出字符串,printf的兄弟,区别在于spintf是输出到了目标缓冲区 //状态行 //http/1.1版本号 501错误代码 及原因 /* 状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别: 1xx:指示信息--表示请求已接收,继续处理 2xx:成功--表示请求已被成功接收、理解、接受 3xx:重定向--要完

2021-03-27 21:06:15 102

原创 简单http学习:1 总体概述

#include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <ctype.h>#include <strings.h>#include <string.h>#include

2021-03-27 21:03:13 67

原创 Leetcode第239题 滑动窗口最大值 单调队列与优先队列C++解法

才了解到STL还有这种容器可以用优先队列去做class Solution{public: vector<int> maxSlidingWindow(vector<int> &nums, int k) { priority_queue<pair<int,int>> q; int i=0; for(;i<k;++i) q.push({nums[i],i}

2021-03-24 14:15:15 196

原创 STL的less<>在容器中的应用

STL的set(map)中默认小的在前面;而priority_queue却是大的在前面。set和map:底层都是红黑树 less<> 最小堆,greater<>是最大堆。 默认是less。make_heap: less<>() 展现出来的是最大堆, greater<>()展现出来是最小堆。 默认是less。priority_queue: 底层是使用heap实现的,所以表现出来的特性和heap一致。less<>() 展现出来的是最大

2021-03-24 10:12:38 376

原创 百度3.21后端研发笔试题 第二道角色分配

牛牛任职于一家演艺公司,这一天他率领着一共n个小伙伴去某知名剧组面试,在戏中,往往以戏份多少来定义角色的重要性。现在这n个小伙伴对自己都有一个定你位,想要拿一个多少细分的角色。假设将戏份多少量化,以1~100来衡量,那么也就是说,每个人在心中都有一个指标,自己签订的合约角色戏份绝对不能少于这个指标。在n个小伙伴都进入剧组面试之后,牛牛得到该剧组剩余m个角色的戏份值。牛牛想提前知道,在能够选角的人数最多的情况下,每个人的角色分配,请你输出一种可能的分配方案,给定案例1(测试案例数目)3 6(分别为n

2021-03-22 15:07:51 715

空空如也

空空如也

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

TA关注的人

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