- 博客(29)
- 收藏
- 关注
原创 腾讯测试开发岗实习面试(流水账)
恩...很久没有更博,这次的博文就记录一下我最近最主要的一个经历吧。先说真的是运气好跻身鹅厂的实习生大军,最主要的感受就是大家都要勇于尝试,不要觉得BAT这种大公司很难很难(其实在几个月前我也是这么认为的...)其实可能还没有有些小点的公司难。下面进入正题吧~我走的是腾讯校招,正常步骤分为网申,网上笔试,一面,二面,HR面,如果顺利通过前面几关的话,那就需要耐心耐心再耐心的等待....网申从开学开...
2018-04-27 21:28:07 1815
原创 I/O复用
I/O复用作用:将获取数据的操作延后到数据到达以后。数据到达以后,有数据的文件描述符会有一个就绪事件,服务器只需要处理就绪事件就可以。这样服务器单进程,单线程就可以同时监听多个文件描述符。select:select函数的作用:在一段时间内,监听用户感兴趣的文件描述符上的可读,可写,异常事件。函数原型:int select(int nfds, fd_set *read, fd_s
2017-11-26 12:07:00 372
原创 C++函数返回值
一、返回值类型如果返回值为类类型,不管多大字节,全部由临时量带回。其他类型:4字节 由寄存器带回8字节 也是由寄存器带回>8字节 开辟一个临时量(由调用方函数开辟)寄存器带出临时量的地址,然后循环拷贝到接收返回值的变量地址空间。若有以下代码:Test fun1(Test rhs){int value=rhs.value;Test tmp(value);
2017-11-22 16:36:00 850
原创 C++中对象的生存周期
在C中有变量的生存周期,那么在C++中就有对象的生存周期。(1)普通对象的生存周期若有一个CObject类,属性是姓名和年龄。CObject gobject1;int main(){CObject object1;CObject object2("宝宝",10);return 0;}CObject gobject2;函数调用的先后顺序是:构造函数:g
2017-11-22 15:51:01 900
原创 C++中类和对象以及成员函数
一个实体拥有自己的属性和行为,属性是私有的,行为是共有的,在C++中实体对应的就是对象,实体抽象数据类型就是类,属性是成员变量,行为是成员函数。面向对象思想的三大特征:封装、继承、多态(静多态,动多态)访问限定符:public:任意位置都可以访问。protected:(继承和派生)一子类可以访问父类的保护成员。private:只有在类中才能被访问。如果在class类中没
2017-11-17 16:57:23 3961
原创 线程池
今天我们来看一下线程池的概念。首先什么是池呢?作用是什么?池:初始时,申请比刚开始要使用的资源大的多的资源空间。接下来使用时,直接从池中获取资源。线程池:多线程存在如果客户端链接,创建一个新的线程,客户端关闭,释放线程。服务器更多时间消耗在创建线程、释放线程。对于业务逻辑的处理,就会较少。所以,我们可以用线程池来改善问题。总的来说线程池就是在服务器运行初始时,创建n 个线程,将这个n
2017-11-16 23:25:33 323
原创 高性能服务器编程--多进程和多线程
今天我们来看看高性能服务器编程--多进程和多线程。有的人就会想高性能服务器高性能在哪里了?在之前的TCP和UDP编程中,链接的客户端如果没有断开链接,服务器则不能在连接别的客户端,导致服务器同时只能处理一个客户端,这样就大大降低了服务器的效率,所以为了解决这个问题,就提出了高性能服务器编程。下面我们就来看看具体是怎么实现的。一、高性能服务器编程--多进程思路: 父进程只负责acce
2017-11-16 22:51:23 421
原创 HTTP协议以及HTTP编程
HTTP协议是用于从万维网服务器传输超文本到本地浏览器的传输协议。HTTP协议是基于TCP/IP通信协议来传递数据的,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。HTTP的主要特点:1、简单快速: 客户向服务器请求服务时,只需要传送请求方法和路径。请求的方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类
2017-11-13 22:08:29 677
原创 网络编程--UDP
网络编程传输层选择一个数据控制模式:TCP或者UDP,前面我们已经介绍了TCP编程,这篇我们简单的来看看UDP编程。UDP是无连接的不可靠的数据流服务。首先我们先简单的了解一下UDP报文。UDP报头:TCP是字节流服务,UDP是数据报服务。这两个有什么区别呢?UDP 的编程流程:服务器: socket bind recvfrom/sendto
2017-11-08 17:16:39 438
原创 C++中的const
一、const与一级引用①const int a = 10;int &b = a;②const int a = 10;int &b = a;//error因为可能通过b进而修改a的值,a被const修饰值不可改,所以编译器会报错。③const int a = 10;int const &b = a;//取地址不参与类型,b的类型是int,const修饰的是&
2017-11-08 15:18:14 345
原创 C和C++的区别
1、默认值2、内联函数①C++中的内联函数,在调用点把代码直接展开(编译阶段)。感觉和#define类似,那么这两个之间有什么区别呢?宏:在预编译阶段进行替换,没有进行类型检查,所以不安全内联函数:在编译阶段处理,进行类型检查,安全性好,所以又叫更安全的宏例:#define Max(a,b) a>b ? a:b..int a=MAx(10,20)+20;//a=10>2
2017-11-06 21:31:52 338
原创 网络基础以及基础编程-TCP
前面的博客关于Linux的都是操作系统方面以及系统编程,从这篇开始,我们开始介绍了解学习一下关于网络方面的基础知识以及网络编程。我们既然要开始网络编程,那么学习了解网络的基础知识是必须的。什么是网络?网络就是将主机连接起来就可称之为网络。这样主机与主机之间就可以进行通讯了,那么在网络通信过程中的主角是什么?实质是进程和进程之间的通信。要进行通信那么就要知道它的IP地址和端口号,我们平时说的网卡
2017-11-06 20:36:59 378
原创 线程同步问题
多进程之间访问临界资源需要进行同步控制,那么线程也是一样的,多线程访问临界资源时也同样需要进行同步控制。多进程或者多线程的执行并不完全是绝对的并行运行,有可能主线程需要等待函数线程的某些条件的发生。进程间的全局变量,栈区,堆区的数据都不共享,只有文件描述符是共享的,而线程之间的全局变量,堆区,文件描述符都是共享的。多线程之间同步控制方式:(1)信号量获取: int
2017-11-01 16:10:41 280
原创 什么是线程
前面我们主要写了进程通讯方面的东西,基本告一段落,还有一种通讯方式叫套接字,这是应用于网络通信的后面会涉及到,今天我们来看看什么是线程,和进程又有什么区别?首先看一下线程的基本概念,相信很多朋友都不是很清楚线程是个什么东西,和进程有什么联系,又有什么不同。线程:是进程内部的一条执行序列(执行流),每个进程至少有一条执行序列:main的执行体。进程可以通过线程库创建N条线程,这些新创建的线程
2017-10-31 23:06:58 591
原创 C++编译链接
我们在编译器里面编写一段代码,点击一个键轻而易举就会生成结果,那么大家有没有想过,编译器是如何做的可以让这么一段代码运行起来的,内部是如何实现的,那么今天我们就来看看。流程如下:源代码-->预处理-->编译-->汇编-->链接-->生成可执行文件预处理阶段:主要做的就是删除注释,宏替换,处理预处理指令(#include编译阶段:进程词法分析,语法分析,语义分析以及代码优化,在此阶段
2017-10-30 11:10:35 297
原创 Linux进程间通信-几种通信方式的比较
前面几篇关于Linux进程间通信(单机通信)差不多就告一段落,以后有什么需要补充的再补充。既然写了几篇进程间通信,那么今天我们就来总结总结,比较一下这几种通信方式,看看在什么样的情况下适用于什么样的通信方式。这篇就不具体写函数实现和具体的参数了,大家可以在前面几篇看。第一种通讯方式:管道在内存中创建一个管道,它不属于任何区域或进程。有名管道:应用于任意两个进程之间数据的单向传递。无
2017-10-27 21:38:57 803
原创 Linux中进程间通信--共享存储
今天同样来看看进程间通信,前面几篇介绍了管道,信号量,消息队列,这篇是共享内存。共享存储允许两个或更多进程共享一给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,所以这是最快的一种IPC。使用共享存储时要掌握的唯一窍门是多个进程之间对一给定存储区的同步访问。若服务器进程正在将数据放入共享存储区,则在它做完这一操作之前,客户进程不应当去取这些数据。通常,信号量被用来实现对共享存储访问的
2017-10-24 13:52:01 461
原创 Linux进程间通信--消息队列
前面写了进程间通信的管道(无名管道,有名管道),信号量,今天我们来看看消息队列。消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的
2017-10-23 20:27:14 522
原创 Linux中进程通讯--信号量
前面写了Linux进程通讯中的管道(有名管道和无名管道),前两天学习了信号量,今天我们就来写一下信号量。首先要明确一点,信号量和信号不是一样的。信号量(Semaphore),有时被称为信号灯,是在多环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程
2017-10-21 13:16:49 394
原创 Linux中进程通讯--无名管道
上一篇更博是有名管道,今天我们来看看无名管道。无名管道:相对于有名管道而言的,无名管道在使用时产生,不使用后释放。并不会在系统上留下任何蛛丝马迹。无名管道因其使用前没有任何的标识,所以它只能应用于父子进程之间。因为父子进程会复制父进程的文件表数组。(浅拷贝)无名管道的操作:1、创建 int pipe(int fd[2]);//fd[o]表示读数据 fd[1表示写数据]
2017-10-20 10:39:09 440
原创 Linux进程间通讯--管道(有名管道
时隔很久,再来更博...今天主要写的是Linux中进程间通讯,进程间进行通讯的目的就是多个进程之间数据互相交换。进程间通讯方式有以下几种:信号管道:分为有名管道和无名管道信号量消息队列共享存储(共享内存)套接字(socket)其中套接字属于多机通讯(全双工通讯),其余的属于单机通讯(半双工通讯),所谓的半双工通讯就是在同一时刻里信息只能有一个传输方向,生活中的例
2017-10-19 22:08:11 431
原创 单链表的逆置(2)
过了个十一假期感觉颓废了,打开电脑不知道干嘛突然想到上次的博客还没有写完,今天就结束了它。上一篇说到单链表的逆置有两种方法,今天我们讲第二种方法:转变指针方向(反向指)2、转变指针的方法定义了3个指针(p,q,s)从第一个数据节点开始转变指针的方向,把第一个数据节点的nexr域置空,因为目前的第一个数据节点逆置后就成为最后一个数据节点,以此类推,移动p,q指针,当q==NULL
2017-10-09 18:48:18 814
原创 单链表的逆置
数据结构中的链表是面试和考试的重点,链表的逆置也是重点中的重点,所以我们今天就来具体看一下单链表的逆置。首先单链表的定义是一个结构体,因为一个节点要存储两个值所以定义为结构体更为合适。一个是数据域用来存储其数据,一个是next域,它是一个结构体指针,存储下一个结点的地址,用于指向下一个结点。typedef struct Node{ int data;//数据域 struct
2017-09-25 10:40:40 1394
原创 define和typedef区别
今天我们来看一下C语言里的宏定义define和typedef之间的区别。在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。#define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”
2017-09-23 22:48:36 272
原创 带头结点循环链表
上一个说的是单链表,其实循环链表跟单链表类似,单链表最后一个节点(p)的next域为NULL即p->next=NULL而循环链表(plist)的则为头结点的地址,即p->next=plist。其余的基本操作和单链表几乎一样,仅仅是单链表循环结束条件为!=NULL,而循环链表是!=plist。基本操作为:初始化,插入(头插、尾插),查找,删除,判空,求长,摧毁,逆置。.cpp:#incl
2017-09-20 22:56:53 1984
原创 单链表的基本操作
今天我们来看看单链表的基本操作:初始化,插入(头插、尾插),查找,删除,判空,求长,摧毁,逆置。#include #include #include #include "list.h"void InitList(List plist){ assert(plist != NULL); plist->next = NULL; //plist->data不用操作}//头插
2017-09-17 20:38:07 359
原创 fork()函数
刚刚接触Linux,感觉还蛮有意思的,Linux里一切皆文件,没有Windows系统的傻瓜式操作,在Linux里面用指令控制感觉逼格一下上了一个档次,刚刚学习了fork函数,感觉挺值得来写一写的,虽然会写的很烂... fork函数用于多进程编程,会产生父子进程,多个进程同时完成N个事务,提高执行效率。 说白了fork函数就是用来创建进程 pid_t fork(vo
2017-09-17 20:04:12 4032
原创 c语言中的const关键字
今天我们来看看C语言中的const关键字。const在英文中的意思是常数、不变的,const可以修饰定义常量,还可以修饰函数的参数、返回值。我们先来说说const在那代码中的作用:(1)可以定义const常量,具有不可变性。 例如:const int Max=100; int Array[Max];(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例
2017-09-13 22:06:36 476
原创 中缀表达式的转换
废话少说直入主题 表达式可分为三类:一、前缀表达式 二、中缀表达式 三、后缀表达式 前缀表达式又称为波兰式,对应的后缀表达式又称为逆波兰式,中缀表达式就是我们平时看到表达式,例如:2+5=7。 中缀变成前缀的步骤:1、初始化两个栈:s1(存放数字),s2(存放运算符)2、表达式从右边开始,遍历表达式3、遇到数字存放到s1中,运算符存放到s2中,存
2017-09-03 15:38:27 448
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人