自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 资源 (1)
  • 收藏
  • 关注

原创 从零开始学习CAN总线协议(一)

can协议基础

2022-06-22 15:32:30 3472 1

转载 计算机两种通信方式-----串行通信和并行通信

计算机两种通信方式及各自的特点

2022-06-07 10:12:18 7581

转载 http和https的区别

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

2020-09-07 22:37:17 237

转载 服务端不调用accept,客户端connect能否成功?

如题,服务端调用listen处于监听状态,假如其不调用accept函数,客户端的connect函数能否调用成功?我们做个试验试试: 1//服务端server.c 2#include <sys/types.h> 3#include <sys/socket.h> 4#include <stdio.h> 5#include <netinet/in.h> 6#include <arpa/inet.h> 7#include <unis

2020-09-07 22:21:40 805

转载 2020-09-07

对于开发人员来说,往往对各种测试方法感到疑惑。特别是在整合代码的时候,我们就能深刻感觉受到测试的重要性。很多开发人员只注重写代码,轻视测试的重要性。总是代码一写完提交然后就交给测试组测试了,没多久测试组发回测试报告。然后又苦恼的修改自己代码的bug,慢慢地就开始讨厌测试组人员。没有经过自己细心测试的代码,不仅浪费了别人时间更影响到了自己的心情。接下来为大家细心讲述一下各种测试应用的环境及作用一、测试环境和角色 黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试 : 这些测试的范围正好是逐步递

2020-09-07 18:46:21 345

原创 笔试题——分苹果

思路:1.判断奶牛的总苹果数是否能够平均分,若不能返回-12.用平均数和每个奶牛拥有的苹果数做比较,若差为奇数,返回-13.因为每一次只能拿俩,所以用差值除以2,计算拿苹果的次数,输出次数。#include<iostream>#include<vector>using namespace std;int main(){ int n; while(cin>>n){ int v[n]; int sum=0; ..

2020-09-05 14:45:01 338

原创 网易笔试真题——牛牛的闹钟

#include<iostream>#include<algorithm>using namespace std;struct node{ int a; int b;}a[110],temp,res;int cmp(node a,node b){ if(a.a==b.a) return a.b<b.b; else return a.a<b.a;}int main(){ int n;..

2020-09-05 14:27:06 122

原创 网易笔试真题——完美序列

思路:将sum初始化为数组第一个元素的值,遍历数组,判断当前元素的值是否大于sum,若是,则sum+=当前元素的值,将最大长度保存起来,若不是,更新sum的值,sum=当前元素的值,最后输出最大完美子序列的长度#include<iostream>#include<algorithm>using namespace std;int main(){ int t; cin>>t; while(t--){ int n; ..

2020-09-05 14:03:32 362

原创 网易笔试——小易的英语软件

#include<iostream>using namespace std;int main(){ double n; cin>>n; double a[10002]; for(int i=1;i<n+1;i++){ cin>>a[i]; } int q; cin>>q; int m; double y=0; double res; for...

2020-09-05 13:54:04 149

原创 网易笔试题——数字圆环

因为每个数字小于相邻只和,直接排序数组,然后只要操作最大数左右两边之和大于最大数,此时只需要将最大数和第二大数交换位置即可。#include<iostream>#include<algorithm>using namespace std;int main(){ int t; cin>>t; while(t>0){ long long n; cin>>n; if(n&lt..

2020-09-05 13:36:30 163

原创 网易笔试题-序列交换

思路:判断这一组数字是否全是奇数或者全是偶数,若是,则返回原数组,若不是则将这组数列排序,然后依次输出#include<iostream>#include<iostream>#include<algorithm>using namespace std;int main(){ int n; cin>>n; long int a[n]; int count=0; for(int i=0;i<n;i++...

2020-09-05 13:24:30 187

原创 stringstream常见用法介绍

本文主要介绍 C++ 中 stringstream 类的常见用法。1 概述 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。本文以 stringstream 为主,介绍流的输入和输出操作。 主要用来进行数据类型转换,由于 使用 string 对象来代替字符数组(snprintf方式),就避免缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符的问题。简单说,相比c库

2020-08-18 11:22:40 180

转载 生产者消费者模型

生产者消费者模型:一个场景,两种角色(生产者、消费者),三种关系(生产者与消费者同步互斥,生产者与生产者互斥,消费者与消费者互斥)功能:解耦(耦合度:数据之间的依赖度)、支持忙闲不均、支持并发实现:1、实现线程安全的队列,对外提供线程安全的数据入队、出队操作2、创建线程,分别为生产者与消费者数据入队或数据出队。/********************************************************** * Author : WangWei * Email

2020-08-03 10:18:08 731

转载 单例模式

什么是单例模式单例模式,顾名思义就是只有一个实例,并且她自己负责创建自己的对象,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。下面我们来看下有哪几种实现方式吧。单例模式的实现方式懒汉模式:懒汉式,顾名思义就是实例在用到的时候才去创建,“比较懒”,用的时候才去检查有没有实例,如果有则返回,没有则新建。有线程安全和线程不安全两种写法,区别就是synchronized关键字。public class Lhan{ private static Lhan instance;

2020-08-03 09:14:36 129

转载 详解coredump

1、什么是coredump:我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下会产生一个叫做core的文件。通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成的一个文件,许多的程序出错的时候都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所

2020-08-02 16:03:22 3106

转载 http请求方法(GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT)

根据HTTP标准,HTTP请求可以使用多种请求方法。HTTP的1.0版本中只有三种请求方法: GET, POST 和 HEAD方法。到了1.1版本时,新增加了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。GET请求指定的页面信息,并返回实体主体。GET请求请提交的数据放置在HTTP请求协议头中,GET方法通过URL请求来传递用户的输入,GET方式的提交你需要用Request.QueryString来取得变量的值。GET方法提交数据,可能会带来安全性

2020-08-01 14:59:09 889

原创 HTTP1.0、HTTP1.1、HTTP2.0的关系和区别

Http1.0、Http1.1、Http2.0对比Http1.0无状态、无连接HTTP1.1持久连接请求管道化增加缓存处理(新的字段如cache-control)增加Host字段、支持断点传输等(把文件分成几部分)HTTP2.0二进制分帧多路复用(或连接共享)头部压缩服务器推送一、Http1.0浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)。二、Http1.1HTTP/1.0中

2020-08-01 14:24:06 406

转载 TCP(HTTP)长连接和短连接区别和怎样维护长连接

一、HTTP协议和TCP协议HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。二、HTTP协议的长连接和短连接在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏

2020-08-01 13:56:26 820

转载 TCP、UDP的区别和分别使用的场合

TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。UDPUDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥堵的行为。此外,传输途中如果出现了丢包,UDP也不负责重发。甚至当出现包的到达顺序乱掉时也没有纠正的功能。如果需要这些细节控制,那么不得不交给由采用UDP的应用程序去处

2020-08-01 13:01:51 845

原创 十大排序算法

快速排序找基准数,大数放右边,小数放左边,递归排序从后往前找小数,从前往后找大数#include<iostream>#include<vector>#include<algorithm>void quicksort(vector<int>&nums,int low,int high){ int i=low,j=high; int temp=nums[low]; while(i<j){ while(nums[j]<te

2020-07-29 23:01:01 110

原创 Cookie和Session区别详解

参考文章:简书Cookie浏览器保存用户信息的文件我们浏览网页使用的HTTP协议是无状态的协议,就是说网页一关闭,浏览器和服务端的连接就会断开,下次打开网页又要重新连接,服务器无法从你一打开的连接上恢复上一次的会话,服务器不知道是你又回来了。有了cookie情况就不同了,除非我们之前把你的信息记录在cookie里,在你打开网页和服务器建立连接的时候,把cookie记录的你的信息一起发送给服务器,这样服务器就能从cookie接收到的信息里识别你的身份,让页面为你提供特别属于你的内容。我们访问浏览器的

2020-07-29 22:27:20 3779

原创 进程间通信方式总结(2)

liunx六大进程间通信方式管道,消息队列,共享内存,信号量,socket,信号,文件锁1,管道匿名管道:概念:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,一般使用fork函数实现父子进程的通信。命名管道:概念:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,没有血缘关系的进程也可以进程间通信。**特点:1,面向字节流,2,生命周期随内核3,自带同步互斥机制。4,半双工,单向通信,两个管道实现双向通信。2,消息队列概念:在内核中创建一队列,队列中每个元素

2020-07-29 15:40:06 130

转载 进程间通信方式总结(1)

liunx六大进程间通信方式管道,消息队列,共享内存,信号量,socket,信号,文件锁一. 管道匿名管道概念:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,一般使用fork函数实现父子进程的通信1 #include <unistd.h>2 int pipe(int fd[2]); // 返回值:若成功返回0,失败返回-1特点它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄

2020-07-29 15:33:27 171

原创 线程的同步与互斥

我们先来谈谈进程线程间互斥相关背景概念:临界资源:多线程执行流共享的资源叫做临界资源。临界区:每个线程内部访问临界资源的代码叫做临界区。互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用。原子性:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成。互斥量大部分情况下,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线程,其他线程无法获得这种变量。但有时候很多变量都需要在线程间共享,这样的变量称为共享变量

2020-07-29 11:17:34 776

原创 死锁

死锁概念死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。生活中例子(借鉴)办公室有一台公用的电脑用于查询资料,还有一台公用打印机用于打印。一天,Tom自己临时需要使用一下公用电脑,并用它打印一份材料;但是不巧的事,此时打印机已经损坏,而Jack正在维修。Tom并不知道是Jack正在维护,唯一能看到的就是打印机的状态显示在占用中,于是他就坐在电脑

2020-07-29 11:00:44 396

转载 线程详解

线程概念线程是一个进程内部的控制序列,是程序里的一个执行线路一切进程至少都有一个执行线程,线程在进程内部运行,本质上是在进程的地址空间内运行。在CPU眼中,看到的PCB要比传统的进程更加轻量化。透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。总而言之,线程是在进程内部运行的一个执行流,Linux系统没有真正意义上的线程,而是用PCB模拟的。进程是承担分配系统资源的基本实体,线程是调度的基本单位。在线程组里面,所有的线程都是对等的关系,没有父线程的概念

2020-07-29 09:37:49 202

转载 DNS域名解析全过程

整理一下,作为以后复习用偷笑,如有不对的地方,还望指正。解析大致过程如图(不喜欢看图的可以直接跳过大笑):当一个用户在地址栏输入www.taobao.com时,DNS解析有大致十个过程惊恐,如下:浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时域名被缓存的时间也可通过TTL属性来设置。如果浏览器缓存中没有(专业点叫还没命中),浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。在windows中可通过c盘里一个叫host

2020-07-28 21:10:22 105

原创 linux系统根据端口号查找项目路径的两种方法

linux系统根据端口号查找项目路径的两种方法有时候项目部署的太多,都忘了放到哪里,只知道项目的访问端口,如何找到项目的位置呢?1、如果知道项目部署在tomcat里如果你的项目在linux 中是部署到tomcat容器里,可以输入下边的命令找到,如下:ps anx|grep tomcat它的意思是查找运行中的tomcat 程序。输入之后,如果有运行中的tomcat的话,会有下边的结果:当然它不仅仅只是用来看tomcat 的,比如你想看一下nginx 运行的位置,也可以ps anx|grep n

2020-07-28 20:54:26 6119

原创 剑指 Offer 15. 二进制中1的个数

剑指 Offer 15. 二进制中1的个数请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。1&1为1,0&1为0,先将n&1,再将n>>1,可以得到二进制的n中1的个

2020-07-27 10:51:30 121

原创 多线程的优缺点

线程的优点和进程相比,它是一种非常"节俭"的多任务操作方式。对进程而言,创建一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间;与进程相比,线程间的通信机制更方便。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通

2020-07-26 17:19:52 252

原创 TCP流量控制和拥塞控制区别理解

流量控制是为了解决发送方和接收方速度不同而导致的数据丢失问题,当发送方发送的太快,接收方来不及接受就会导致数据丢失,流量控制用滑动窗口的形式解决问题拥塞控制是为了解决过多的数据注入到网络,导致网络奔溃,超过负荷.当发送方发送数据大量的数据会注入到网络,如果没有限制,网络就会超负荷变卡,拥塞控制的用的是拥塞窗口解决的问题的组成拥塞控制四部分:慢启动 拥塞避免 快重传 快速恢复窗口的意义窗口就是缓冲区,用来暂时存储数据等待发送和接收,其实就是对每一次发送的数据大小进行限制,每个窗口的都有大小限制,超过部

2020-07-26 16:47:07 921

原创 TCP与UDP

TCP与UDP基本区别1.基于连接与无连接2.TCP要求系统资源较多,UDP较少;3.UDP程序结构较简单4.面向字节流(TCP)与面向数据报(UDP);5.TCP保证数据正确性,UDP可能丢包6.TCP保证数据顺序,UDP不保证UDPUDP应用场景:1.面向数据报方式2.网络数据大多为短消息3.拥有大量Client4.对数据安全性无特殊要求5.网络负担非常重,但对响应速度要求高UDP特点1.无连接:知道对端的IP和端口号就直接进行传输, 不需要建立连接。2.不可靠:没有确认

2020-07-26 16:15:04 83

原创 左值引用和右值引用

1.左值和右值在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。举个例子,int a = b+c, a 就是左值,其有变量名为a,通过&a可以获取该变量的地址;表达式b+c、函数int func()的返回值是右值,在其被赋值给某一变量前,我们不能通过变量名找到它,&(b+c)这样的操作则不会通过编译。左值是可以放在赋值号左边可以被赋值的值;左值必须要在内存中有实体;右值当在赋值号右边取出值赋给其他变量的值;右值可以在内存也可以在CPU寄存

2020-07-25 17:23:08 8714 3

原创 c++11新特性

参考c++11新特性1、关键字及新语法1.1、auto关键字及用法1.2、nullptr关键字及用法1.3func,static_assert,final,override关键字1.4 for循环语法2、STL容器2.1、std::array2.2、std::forward_list2.3、std::unordered_map2.4、std::unordered_set3、多线程3.1、std::thread3.2、st::atomic3.3、std::condition_variable4、智能指针内存

2020-07-25 16:35:11 523

原创 虚函数的作用

虚函数的作用:可以让成员函数操作一般化,用基类的指针指向不同的派生类的对象时,基类指针调用其虚成员函数,则会调用其真正指向对象的成员函数,而不是基类中定义的成员函数(只要派生类改写了该成员函数)。若不是虚函数,则不管基类指针指向的哪个派生类对象,调用时都会调用基类中定义的那个函数。程序1:#include <iostream>using namecpace std;class B0 //基类B0声明{ public: void display(){cout<&

2020-07-24 18:15:43 5900

原创 epoll的底层实现

epoll的底层实现epoll机制是通过红黑树和双向链表实现的1 int epoll_create(int size);2 int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);3 int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout);首先epoll_create创建一个epoll文件描述符,底层同时创建一个

2020-07-24 17:17:54 1437

转载 Epoll的本质(内部实现原理)

转载知乎从事服务端开发,少不了要接触网络编程。epoll作为linux下高性能网络服务器的必备技术至关重要,nginx、redis、skynet和大部分游戏服务器都使用到这一多路复用技术。因为epoll的重要性,不少游戏公司(如某某九九)在招聘服务端同学时,可能会问及epoll相关的问题。比如epoll和select的区别是什么?epoll高效率的原因是什么?如果只靠背诵,显然不能算上深刻的理解。网上虽然也有不少讲解epoll的文章,但要不是过于浅显,就是陷入源码解析,很少能有通俗易懂的。于是决定编写

2020-07-24 16:57:57 165

原创 c++类和对象

类的六个默认成员函数构造函数类的特殊成员函数,函数名和类名相同,无返回值,在创建对象期间,由编译器自动调用,完成对象的初始化工作,并在整个对象的生命周期只调用一次。构造函数的特性无返回值可以重载用户没有显示调用,编译器会自动调用一个默认的构造函数不能用const,virtual,static修饰具有初始化列表只有构造函数才具有初始化列表,只能在初始化列表中非静态成员类成员变量在初始化列表中只能初始化一次初始化顺序与类成员列表中顺序相同避免成员初始化成员必须在初始化列表中初始化的

2020-07-24 14:50:00 76

原创 c++ 函数重载和宏替换

函数重载函数重载指的是,在同一作用域中,几个同名函数拥有不同的参数个数,类型或顺序,编译器会推演函数实参类型,选择合适的函数进行调用,若没有的话就会报错,注意:仅仅返回类型不同不能构成函数重载调用原理编译器为了区分每一个函数,对每一个函数的名字进行了修饰,使它成为全局唯一的函数。c++为什么支持函数重载即使函数名字相同,也会因为不同的参数个数,类型和顺序,产生不同的函数名字,对应着不同的函数,从而实现函数重载宏替换预处理的一种,它根据一系列预定义的规则,替换一定的文本模式宏常量#defi

2020-07-24 14:29:57 468

原创 模拟oj项目

项目介绍本项目仿照leetcode的形式,自行模拟了一个在线编译系统,基本框架在线编译器题目管理

2020-07-20 14:11:29 464

11898-1 can协议

11898-1 can协议

2022-06-22

空空如也

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

TA关注的人

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