- 博客(48)
- 资源 (3)
- 收藏
- 关注
原创 第二章 套接字类型与协议设置
《TCP/IP网络编程》 尹圣雨P26~P32协议:计算机之间对换必备通信规则。协议就是为了完成数据交换而定好的约定。第一章 理解网络编程和套接字创建套接字 #includeint socket(int domain ,int type, int protocol);//成功时返回文件描述符,失败返回-1domain:套接字使用的协议族信息;typ
2017-07-31 22:40:15 468
原创 第一章 理解网络编程和套接字
《TCP/IP网络编程》 尹圣雨P2~ 网络编程就是编写程序使两台联网的计算机相互交换数据。如何编写数据传输软件?操作系统会提供名为“套接字”的部件。“套接字”socket:网络数据传输用的软件设备。套接字本身带有“连接”的含义,如果将其引申,则还可以表示两台计算机之间的网络连接。网络编程值接受请求的套接字创建过程:调用socket函数(安装电话机)创建套接字;
2017-07-31 21:49:46 296
原创 C++学习(63)
1 float x与“零值”比较的if语句为:if(fabs(x)分析:folat类型的还有double类型的,这些小数类型在趋近于0的时候直接等于0的可能性很小,一般都是无限趋近于0.因此不能用==来判断。应该用|x-0|不可将浮点变量用“==”或“!=”与任何数字比较。 千万要留意,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或
2017-07-31 21:22:37 467
原创 史上最全最丰富的“最长公共子序列”、“最长公共子串”问题的解法与思路
花了一天时间把一直以来的“最大子序列”、“最大递增子序列“、”最大公共子序列“、“最长公共子串”等问题总结了一下。其中参考了若干博文,都备注引用。首先子序列是指一个一个序列中,由若个数(字母)组成,然后从中任意删掉几个数(字母),保留剩下的数(字母)构成了一个序列,即称子序列。(或者从一个序列中,任意选取若干数或字符,按照这些数或字符原来的排序组成新的序列,即称子序列)子串是指在一个字符串
2017-07-31 20:12:32 29317 6
原创 C++学习(62)
1 C语言允许函数值尅下缺省定义,此时该函数值隐含的类型是整型。 2. 预定义的操纵算子使用成员函数控制格式化输入输出时,每个函数调用需要写一条语句,尤其是它不能用在插入或提取运算符的表达式中,而使用操纵算子,则可以在插入和提取运算符的表达式中控制格式化输入和输出。在程序中使用操纵算子必须嵌入头文件iomanip.h C++提供了大量的用于执行格式化输入/输出的流操纵算子。流操
2017-07-31 11:07:01 284
原创 C++学习(61)
1. 析构函数没有参数,无返回值。名字和类名相同。前面加一个~。2. 以下程序的K最终值为:90inti=10;intj=20;intk=3;K *=i+j’*=表示将第一个操作数的值与第二个操作数的值相乘;将结果存储在第一个操作数指定的对象中.而且根据运算符优先级:+优先级 大于*=优先级, 3.下面的C语言语句,哪一个可以把一个32位变量的最高位置为
2017-07-30 14:20:52 560
原创 常量折叠
分析下列程序:#includeusing namespace std;int main() { const int a=10; int *p=(int *)(&a); *p=20; cout<<"a="<<a<<",*p"<<*p<<endl; return 0;}输出结果: a=10,*p=10;分析:因为a 和p都指向相同的内存地址,所以输出的前两个结果是相同的,但
2017-07-30 14:10:28 249
转载 C编译器、链接器、加载器详解
C编译器、链接器、加载器详解一、概述 C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可加载、可执行代码的过程。过程图解如下: 预处理器:将
2017-07-30 13:42:28 271
原创 实现二进制代码块的复制
(单选题) 以下哪个函数可以在源地址和目的地址的位置任意的情况下,在源地址和目的地址的空间大小任意的情况下实现二进制代码块的复制? A memcpy() B memmove()C memset() D strcpy()memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中。 但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmo
2017-07-30 12:55:40 1059
原创 第十章 进程与僵尸进程 (上)
《TCP/IP网络编程》 尹圣雨P155~并发服务器端的实现方法网络程序中数据通信时间比CPU运算时间占比更大,因此向多个客户端提供服务是一种有效利用CPU的方式。具有代表性的并发服务器端实现模型与方法:多进程服务器:通过创建多个进程提供服务。 (不适合window平台,主要放在Linux平台)多路复用服务器:提供捆绑并统一管理I/O对象提供服务。多
2017-07-30 02:27:43 375 2
原创 百度2016研发工程师笔试题(六)
百度2016研发工程师笔试题(六)1.HTTP的会话有四个过程,请选出不是的一个()A.建立连接B.发出响应信息C.发出请求信息D.传输数据分析:HTTP协议客户端连上web 服务器后,若想获得 web 服务器中的某个 web 资源,需遵守一定的通讯格式, HTTP 协议用于定义客户端与 web 服务器通迅的格式。WEB浏览器与 WE
2017-07-29 18:47:56 868 1
原创 如何确认同一网段
IP和子网掩码、同一网段中提到 如何通过计算IP地址和 子网掩码来验证网络是否在同一段中,在此处都提到了同一个例子。同一网段指的是IP地址和子网掩码相与得到相同的网络地址。想在同一网段,必需做到网络标识相同。各类IP的网络标识算法都是不一样的,需要根据子网掩码的位数来判断。算法只要把IP和子网掩码的每位数AND就可以了。AND方法:0和1=0 0和0
2017-07-29 18:37:01 7855
转载 IP和子网掩码
IP和子网掩码6. 命令 subnet166.173.197.131 netmask 255.255.255.192{range166.173.197.10 166.173.197.107;default-lease-time600;max-lease-time7200;}表示?()A.向166.173.197.10网
2017-07-29 16:48:47 510
原创 关于堆排序的一些思考
最近在做个堆排序的时候有点疑惑,疑惑在于对一个乱序数组利用堆排序使之有序。先了解两个概念:小顶堆(根结点的值小于子结点的值)和大顶堆(根结点的值大于子结点的值)。n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki 2i 且ki 2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1
2017-07-29 11:50:24 364
原创 C++学习(60)
1. 在构造函数XB的下列定义中,正确的是(B) B XB::XB(int a,int b):Xa(a),y(b){}分析:引用A类型的变量,必须初始化列表。 2. 以下代码中,A的构造函数和析构函数分别执行了几次:10、10A *pa = new A[10];delete []pa;A*pa = new A[10]; 调用new分配原始未类型化的内存,在分配的内
2017-07-27 23:10:36 477
原创 动态内存和智能指针
《C++ Primer》第五版P399全局对象在程序启动时分配,程序结束时销毁。局部变量,进去其定义所在的程序块时被创建没在离开块时销毁。局部static对象在第一次使用前分配,在程序结束时销毁。动态分配的对象的生存期与它们在哪里创建是无关的,只有当显式地被释放时,对象才会销毁。为安全使用动态对象,标准库定义了两个智能指针类型来管理动态分配的对象。当一个对象一个被释放时,指
2017-07-27 18:02:02 284
原创 类的静态成员
《C++ Primer》第五版P268~P271静态成员(静态数据成员和静态成员函数)可以是public、private。静态数据成员的类型可以是常量、引用、指针、类类型。类的静态成员存在于任何对象之外,对象中不包含任何与静态数据成员有关的数据。静态成员函数不与任何对象绑定在一起,它们不包含this指针。作为结果,静态成员函数不能声明为const,也不能在stati
2017-07-27 15:47:29 663
转载 Linux下fork函数及pthread函数的总结
forkLinux多进程编程中的可以使用fork函数来创建子进程。fork函数定义在头文件unistd.h中(uni表示unix,std当然是标准库,所以很好记),该函数的声明为pid_t fork(void)其中函数的返回值类型为pid_t,可以理解为一个整型,返回值具体为:在父进程中,fork返回新创建的子进程的进程ID;在子进程中,fork返回0;如果创建子进程失败,则返
2017-07-27 13:14:14 3747
原创 关于 *(&a+1) 与 *(a+1)区别
关于一个int *ptr=(int *)(&a+1)问题的探讨#includeusing namespace std;main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出为:2,5请解释以上代码的输出结果。答案如下:
2017-07-27 10:40:15 2741
原创 C++学习(59)
1. char a[5],*p=a;以下说法正确的是 AA p=”abcd” Ba=”abcd”; C *p=”abcd”; D *a=”abcd”分析:p里面存的是数组a的首元素的地址,p是一个指针变量,指向字符型数据,指向字符变量,不是把“abcd”这些字符存放到p中,也不是把字符串赋给*p,只是把“abcd”的第一个字符的地址赋给指针变量p。 2. 指针变量的值是
2017-07-27 10:34:12 310
原创 单列模式
1. 下面说法正确的是(A)A 一个空类默认一定生成构造函数,拷贝构造函数,赋值操作符,引用操作符,析构函数。B可以有多个析构函数C 析构函数可以为virtual,可以被重载D 类的构造函数如果都不是public访问属性,则类的实例无法创建分析: A 不严谨,参考《深度探索C++对象模型》第二章 构造函数语义学。“在需要的时候被编译器生产出来”’ 一个类是空类,没有
2017-07-27 09:46:40 308
原创 阿里巴巴2017实习生笔试(一)
1.内联函数: A 项错误,因为使用 inline 关键字的函数只是用户希望它成为内联函数,但编译器有权忽略这个请求,比如:若此函数体太大,则不会把它作为内联函数展开的。B 项错误,头文件中不仅要包含 inline 函数的声明,而且必须包含定义,且在定义时必须加上 inline 。【关键字 inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起
2017-07-27 00:17:44 1395
原创 系统调用
关于系统调用的描述,错误的是:(B)A 系统调用把应用程序的请求传输给系统内核执行;B 系统调用中被调用的过程运行在“用户态”中;C 利用系统调用能够得到操作系统提供的多种服务D 是操作系统提供给编程人员的接口E 系统调用给用户屏蔽了设备访问的细节F 系统调用保护了一些智能在内核模式执行的操作指令分析:用户空间与系统空间所在的内存区间不一样,同样,对于这两种区间
2017-07-26 22:17:16 5530
转载 TCP/IP协议三次握手与四次握手
三次握手 所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示:(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SE
2017-07-26 20:09:08 520
原创 TCP/IP协议的学习
IP协议:IP(Internet protocol),这里的IP不是值得我们通常所说的192.168.1.1.这个IP指的是一种协议,而后面的数字值得是IP地址。IP协议的作用在于把各种数据包准确无误的传递给对方,其中两个重要的条件是IP地址,和MAC地址(Media Access Control Address)。由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常的IP地址
2017-07-26 18:51:19 746
原创 OSI模型与TCP/IP参考模型
OSI模型OSI模型OSI模型,即开放式通信系统互联参考模型(Open System Interconnection,OSI/RM,Open Systems Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI。OSI是一个定义良好的
2017-07-26 18:04:54 8435
原创 概率学习(1)
1. 甲乙两个人比试射箭,两人射术水平一样。如果甲射了101次,乙射了100次。求甲射中次数比乙射中次数多的概率?A 1/4 B1/2 C 3/4 D 1/3分析:这道题出的不严谨,应该再加一句:二人射中的概率均为0.5然后前一百次可以分为三种情况:甲多、乙多、一样多;因为水平一样,所以甲多、乙多的概率相等;因为射中概率为0.5,所以前一百次一样多并且最后一次甲
2017-07-26 11:31:38 3103 1
原创 字符串的旋转
对于一个字符串,和字符串中的某一位置,请设计一个算法,将包括i位置在内的左侧部分移动到右边,将右侧部分移动到左边。给定字符串A和它的长度n以及特定位置p,请返回旋转后的结果。测试样例:"ABCDEFGH",8,4返回:"FGHABCDE"fgets(buf,sizeof(s),stdin)stdin表示标准输入,是一个FILE类型。fge
2017-07-25 23:16:14 302
原创 C++学习(58)
1. 在C++语言中,对函数参数默认值描述正确的是:D 在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值。 2. 以下关于头文件说法正确的是(B)A. #include,编译器寻找头文件时,会从当前编译的源文件所在的目录去找B. #include“filename.h”,编译器寻找头文件时,会从通过编译选项指定的目录去找C. 多个源文件同时用到
2017-07-25 17:42:00 480
原创 C++学习(57)
1.若有 C 语言表达式 2+3*4+7/3, 以下选项中叙述正确的执行顺序是(B )。 A 先执行3*4=12,再执行7/3=2.5,最后执行2+12+2.5=16.5B 先执行3*4=12,再执行2+12=14,再执行7/3=2,最后执行14+2=16C 先执行7/3=2,再执行3*4=12,再执行12+2=14,最后执行2+14=16D 先执行2+3=5,再执行5*4=20,
2017-07-25 16:46:00 339
原创 C++学习(56)
1.分析下述程序执行的结果:#includeusing namespace std;class cla{ static int n; public: cla() { n++; } ~ cla() { n--; } static int get_n() { return n; }};int cla::n=0; int main() {
2017-07-25 16:01:20 1490
转载 STL容器学习
标准库中的容器分为顺序容器和关联容器。顺序容器(sequential container)内的元素按其位置存储和访问,顾名思义,这些内部元素是顺序存放的;顺序容器内的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。而关联容器的元素按键(key)排序。顺序容器类型:vector、list、deque,顺序容器适配器类型:stack、queue、priority_queue。
2017-07-25 15:16:01 283 1
原创 对象和类
《C++ Primer Plus》第五版 P297~P309 抽象和类面向对象编程OOP特性:抽象、封装和数据隐藏、多态、继承、代码的可重用性。为了实现这些特性并将它们组合在一起,C++所作的最重要的改进就是提供了类。过程性编程,首先考虑要遵循的步骤,然后考虑如何表示这些数据(注意:并不需要程序一直运行,用户可能希望能够将数据存储在一个文件中,然后从这个文件中读取数
2017-07-25 13:37:16 180
原创 指针和const
《C++ Primer Plus》第五版 P200~P202两种不同方式将const关键字用于指针。第一种是让指针指向一个常量对象,可以防止使用该指针来修改所指向的值。第二种是将指针本身声明为常量,可以防止改变指针指向的位置。int age=39;const int *pt=&age;声明一个指向常量的指针pt,pt指向一个const int(39),因此不能使用pt来修改来
2017-07-25 12:08:03 178
原创 自动存储、静态存储、动态存储
《C++ Primer Plus》第五版 P107~P108自动存储在函数内部定义的常规变量使用自动存储空间,被称为自动变量(automatic variable),意味着它们所属的函数被调用时自动产生,在该函数结束时消亡。自动变量是一个局部变量,其作用域为包含它的代码块。代码块是被包含在花括号中的一段代码。静态存储是整个程序执行期间都存在的存储方式。使变量成为静态的方
2017-07-25 10:54:43 479
原创 使用new来创建动态数组
《C++ Primer Plus》第五版 P94~P98使用new来创建动态数组在编译时给数组分配内存被称为静态联编static binding,意味着数组是在编译时加入到程序中的。但使用new时,如果在运行阶段需要数组,则创建它;如果不需要,则不创建。可以在程序运行时选择数组的长度,称为动态联编dynamic binding,意味着数组是在程序运行时创建的。这种数组称为动态数组
2017-07-25 10:35:15 1429
原创 【牛客网】网易有道2017内推选择题
网易有道2017内推选择题1、[单选题]关于数据解析以下说法正确的是:A、XML数据结构有且只有一个根节点,并且不能嵌套B、JSONObjetWithData:options:error:使用文件流C、writeJSONObject:toStream:options:error:使用缓冲区数据解析jsonD、XML解析分为两种:SAX解析和DOM
2017-07-24 21:51:14 815
原创 查找算法学习(4)
1. 设顺序线性表的长度为30,分成5块,每块6个元素,如果采用分块查找并且索引表和块内均采用顺序查找,则其平均查找长度为6.5.分析:总的平均查找长度为:分块查找的平均长度+顺序查找的平均长度;前者为:(1+2+3+4+5)/5=3,后者为:(1+2+3+4+5+6)/6=3.5。 2. 采用深度优先搜索或拓扑排序算法可以判断出一个有向图是否有环(回路)。(对)分析:深度优先搜索
2017-07-24 20:46:21 1261
原创 分析程序调用几次函数
int f(int x) { if(x<=2) return 1; return f(x-2)+f(x-4)+1;}当x=10时候,程序共调用几次?分析:针对这样的题目在别的地方看到的比较好的方法是用树来表示 10
2017-07-24 20:21:23 590
原创 爬楼梯
有一段楼梯台阶共有15级,小明一步最多只能跨3级,请问小明登上这段台阶有多少种不同走法?#include#includeusing namespace std;int f(int n) { int a=0; if(n==1) return 1; if(n==2) return 2; if(n==3) return 4; return a=f(n-1)+f(n-2)+f(n-3)
2017-07-24 19:59:21 315
MySql必知必会
2017-09-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人