- 博客(559)
- 收藏
- 关注
原创 《程序员面试笔试宝典》学习笔记(三)程序设计基础
二、内存分配1、内存分配的形式有哪些?一个C/C++编译的程序所占用的系统内存一般分为以下几个部分:1)由符号起始的区块(BBS, Block Started by Symbol)段:存放程序中未初始化的全局数据和静态数据的一块内存区域。BSS段属于静态内存分配,程序结束后静态变量资源由系统自动释放。2)数据段:存放程序中已初始化的全局变量和静态数据。数据段也属于静态内存分配。3)代码段:也叫文本段
2016-05-19 23:45:19
3851
原创 《程序员面试笔试宝典》学习笔记(二)程序设计基础
1、 static (静态)变量有什么作用1、静态成员特点1)对于非静态成员,每个类对象都有自己的复制品。被static修饰的成员变量和成员方法独立于该类的任何对象,只有一份复制品。也就是说,它不依赖类特定的实例,被类的所有实例共享。2)静态数据成员存储在全局数据区,在定义时要分配空间,故不能在类声明中定义。由于静态数据成员属于本类的所有对象共享,所以,它不属于特定的类对象,在没有产生
2016-05-19 17:27:10
3222
转载 《程序员面试笔试宝典》学习笔记(一)
1、extern的作用区分extern在C语言中和C++语言中的作用: (1)C语言中extern声明的函数和变量可以被该文件外部模块引用。 (2)C++语言中除了该作用还可以声明extern “C”声明一段代码编译连接的方法为C语言的方法。(a)extern是C/C++语言中声明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量在本模块或其他模块中使用。 (b)
2016-05-19 10:24:54
1335
1
原创 九度-1198:a+b(大数相加)
题目描述: 实现一个加法器,使其能够输出a+b的值。 输入: 输入包括两个数a和b,其中a和b的位数不超过1000位。 输出: 可能有多组测试数据,对于每组数据, 输出a+b的值。 样例输入: 2 6 10000000000000000000 10000000000000000000000000000000 样例输出: 8 10000000000010000000000000
2016-05-18 17:43:54
839
原创 《c专家编程》学习笔记(二)
1、虚拟内存虚拟内存的基本思路是使用廉价但缓慢的磁盘来扩充快速但昂贵的内存。操作系统负责具体细节,使得每个进程都以为自己拥有整个地址空间的独家访问权,这个幻觉依靠虚拟内存实现。所有进程共享机器的物理内存,当内存用完时就用磁盘保存数据。在进程运行时,数据在磁盘和内存之间来回移动。内存管理硬件负责把虚拟地址翻译为物理地址,并让一个进程始终运行于系统的真实内存中。应用程序程序员只看到虚拟地址,并不知道自己
2016-05-16 10:21:37
561
原创 《c专家编程》学习笔记(一)
1、typedef和#define的区别1、typedef:typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间。可以增强程序的可读性,以及标识符的灵活性。2、#define:#define为宏定义语句,是预处理指令。通常用来定义常量(包括无参量与带参量)。它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以发现潜在的错误及
2016-05-14 23:02:15
1911
原创 《TCP/IP详解》学习笔记-第22/23章 TCP坚持定时器,保活定时器
对每个连接,TCP管理4个不同的定时器。 1) 重传定时器:使用于当希望收到另一端的确认。 2) 坚持(persist )定时器:使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。 3) 保活(keepalive)定时器:可检测到一个空闲连接的另一端何时崩溃或重启。 4) 2MSL 定时器:测量一个连接处于TIME_WAIT状态的时间。总结:坚持定时器用于防止通告窗口为0以后双方
2016-05-14 12:36:18
530
原创 《TCP/IP详解》学习笔记-第21章 TCP的超时与重传
超时重传是TCP协议保证数据可靠性的另一个重要机制,原理是TCP每发送一个报文段,就对这个报文段设置一次计时器。如果当定时器溢出时还没有收到确认,它就重传该数据。对任何实现而言,关键之处就在于超时和重传的策略,即怎样决定超时间隔和如何确定重传的频率。1、超时超时时间的计算是超时的核心部分,TCP要求这个算法能大致估计出当前的网络状况,虽然这确实很困难。要求精确的原因有两个:(1)定时太久会造成网络利
2016-05-13 17:20:16
1028
原创 《TCP/IP详解》学习笔记-第19/20章 TCP交互数据流、滑动窗口、拥塞窗口
1、TCP交互数据流交互数据总是以小于最大报文段长度的分组发送。对于这些小的报文段,接收方使用经受时延的确认方法来判断确认是否可被推迟发送,以便与回送数据一起发送。这样通常会减少报文段的数目,尤其是对于需要回显用户输入字符的Rlogin会话。在较慢的广域网环境中,通常使用Nagle算法来减少这些小报文段的数目。这个算法限制发送者任何时候只能有一个发送的小报文段未被确认。对于交互性要求比较高的应用,T
2016-05-13 11:22:12
600
原创 《TCP/IP详解》学习笔记-第17/18章 TCP:概述、连接建立与终止
1、概述TCP提供一种面向连接的、可靠的字节流服务。全双工通信。一个TCP连接由一个4元组唯一确定:本地 IP地址、本地端口号、远端 IP地址和远端端口号。TCP将用户数据打包构成报文段;它发送数据后启动一个定时器;另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据; TCP 提供端到端的流量控制,并计算和验证一个强制性的端到端检验和。 许多流行的应用程序如 Telnet, Rlogi
2016-05-12 23:15:20
9686
原创 《TCP/IP详解》学习笔记-第12~16章 广播/多播/IGMP/DNS/TFTP/BOOTP
1、广播三种 I P地址:单播地址、广播地址和多播地址。广播和多播仅应用于 U D P。每个以太网帧包含源主机和目的主机的以太网地址(4 8 b i t) 。(1)通常每个以太网帧仅发往单个目的主机,目的地址指明单个接收接口,因而称为单播。(2)一个主机要向网上的所有其他主机发送帧,这就是广播。(3)多播(multicast) 处于单播和广播之间:帧仅传送给属于多播组的多个主机。四种 I P广
2016-05-12 17:04:34
1031
原创 《TCP/IP详解》学习笔记-第11章 UDP
1、运输层概述运输层的任务主要是负责主机中两个进程之间的通信。1、运输层的基本功能:(1)复用与分用分用(Demultiplexing):将运输层的报文段中的数据交付到正确的套接字的工作。复用(Multiplexing):在源主机的不同套接字中收集数据块,并为每个数据块封装上首部信息(将在分用的时候使用),从而生成报文段/数据报,然后将报文段/数据报传递到网络层工作。为了进行分用和复用,需
2016-05-12 15:53:48
613
原创 《TCP/IP详解》学习笔记-第9/10章 IP选路&动态选路
1、IP选路IP层进行的选路实际上是一种选路机制,它搜索路由表并决定向哪个网络接口发送分组。1、简单路由表对于一个给定的路由器,可以打印出五种不同的标志(flag):U 该路由可以使用。G 该路由是到一个网关(路由器),如果没有设置该标志,说明目的地直接相连。H 该路由是到一个主机,即目的地址是一个完整的主机地址。如果没有设置该标志,说明该路由是到一个网络,而目的地址是一个网络地址:一个
2016-05-11 21:54:51
861
原创 《TCP/IP详解》学习笔记-第6/7/8章 ICMP/Ping/Traceroute
1、ICMP:Internet控制报文协议用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。1、ICMP报文是在IP数据报内部被传输的:2、ICMP报文的格式: ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前 16bit就组成了ICMP所要传递的信息。3、ICMP报文的类型:ICMP协议大致分为两类,一种是
2016-05-11 18:05:34
741
原创 《TCP/IP详解》学习笔记-第4/5章 ARP和RARP
1、ARP:地址解析协议ARP为IP地址到对应的硬件地址(MAC地址)之间提供动态映射。主要流程:当主机要发送一个IP包的时候,会首先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存),如果查询的IP-MAC值对不存在,那么主机就向网络发送一个ARP协议广播包,这个广播包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己
2016-05-11 17:03:03
459
原创 《TCP/IP详解》学习笔记-第3章 IP:网际协议
1、概述IP是TCP/IP协议族中最为核心的协议。所有的TCP,UDP,ICMP,IGMP数据都以IP数据报格式传输。IP提供不可靠,无连接的数据报传送服务。 (1)不可靠:它不能保证IP数据报能成功的到达目的地。 (2)无连接:IP并不维护关于后续数据报的状态信息。每个数据报的处理都是相互独立的。2、IP首部普通的IP数据报首部为20个字节,除非含有选项字段。 如图,还记得那8位的TTL字段
2016-05-11 16:17:31
632
原创 《TCP/IP详解》学习笔记-第2章 链路层
数据链路层有三个目的:(1)为IP模块发送和 接收IP数据报。(2)为ARP模块发送ARP请求和接收ARP应答。(3)为RARP发送RARP请 求和接收RARP应答。ARP叫做地址解析协议,是用IP地址转MAC地址的一种协议。 RARP则叫做逆地址解析协议,是用MAC地址转IP地址的一种协议。数据链路层属于计算机网络的底层,使用的信道主要有点对点信道和广播信道两种类型。TCP/IP支持多种不同
2016-05-11 09:01:35
5141
原创 《TCP/IP详解》学习笔记-第1章 概述
TCP/IP通常被认为是一个四层协议系统:1)链路层(数据链路层或网络接口层),通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。 2)网络层(互联网层),处理分组在网络中的活动。 3)运输层,主要为两台主机上的应用程序提供端到端的通信。(TCP和UDP)。 4)应用层,主要负责处理特定的应用程序细节。大部分TCP/IP实现都会提供以下通用程序:Telnet远程登陆、FTP文件传输协
2016-05-10 23:22:07
4175
原创 《STL源码剖析》学习笔记-第6章(一) set相关算法
STL中定义的set要求元素不得重复且已经排序。而set算法要求的都是有序区间(输出也是有序的),但元素可以重复出现。STL提供了4个set相关的算法,分别是并集(union)、交集(intersection)、差集(difference)和对称差集(symmetric difference),这4个算法接受的set必须是有序区间,都至少接受4个参数,分别表示两个set区间。一般而言,set算法前4
2016-05-08 23:11:23
949
原创 《STL源码剖析》学习笔记-第5章 关联式容器(二)
1、set和multisetset的特性: (1)所有元素都会根据元素的键值自动被排序。 (2)set是集合,它的元素的键值就是实值,实值就是键值,不允许两个元素有相同的值。 (3)不可以通过set的iterator来改变元素的值,因为set的元素值就是键值,改变键值会违反元素排列的规则。 (4)在客户端对set进行插入或删除操作后,之前的迭代器依然有效。当然,被删除的元素的迭代器是个例外。
2016-05-08 13:10:46
907
原创 《STL源码剖析》学习笔记-第5章 关联式容器
1、关联式容器概述所谓关联式容器,观念上类似于关联式数据库:每笔数据都有一个键值(key)和一个实际值(value)。当元素被插入容器时,内部机制根据键值,按着一定的规则将元素置于特定的位置。关联式容器没有所谓头尾的概念(只有最大元素,最小元素),所以不会有类似push_back(),push_front(),pop_back(),pop_front,begin(),end()这样的操作。标准的st
2016-05-07 18:33:47
836
原创 《STL源码剖析》学习笔记-第4章 序列式容器(二)
1、stackstack是一种先进后出的数据结构,只有一个出口。允许新增元素、移除元素、取得最顶端元素。不允许有遍历行为。在SGI STL的源码<stl_stack.h>的设计中,它是基于某种容器作为底部结构的,默认容器是deque容器,用户也可以自己指定容器的类型。stack不提供走访功能,也不提供迭代器。stack源码如下:template <class T, class Sequence =
2016-05-07 12:10:38
1018
原创 《STL源码剖析》学习笔记-第4章 序列式容器
1、vector1、vector特性(1)vector有自动扩容操作,每次扩容伴随着“配置新空间 / 移动旧数据 / 释放旧空间”的操作,因此有一定时间成本。 (2)vector提供了reserve接口,如果能够对元素个数有大概了解,可以一开始就分配合适的空间。 (3)vector的内存空间是连续的,对插入元素的操作而言,在vector尾部插入才是合适的选择。维护的是一个连续线性空间,所以vec
2016-05-06 20:23:38
798
原创 《STL源码剖析》学习笔记-第3章 迭代器
1、迭代器设计思维-STL关键所在迭代器:就是提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素。STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后再以一帖粘合剂将它们撮合在一起。只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作。以算法find( )为例,它接受2个迭代器和1个”搜寻目标”:/
2016-05-05 11:56:07
636
原创 《STL源码剖析》学习笔记-第2章 空间配置器
1、SGI 特殊的空间配置器,std::allocSGI STL 的配置器与众不同,也与标准规范不同,其名称是 alloc 而非 allocator ,而且不接受任何参数。我们所习惯的c++内存配置操作和释放操作如下:class Foo { ... };Foo* pf = new Foo; // 配置内存,然后构造对象delete pf; // 将对象析构,然后释放内存这其中的new 操作符(n
2016-05-04 17:38:49
1483
原创 leetcode51/52-N-Queens I/II(n皇后问题)
问题描述:The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.Given an integer n, return all distinct solutions to the n-queens puzzle.Each
2016-05-03 15:27:48
478
原创 《More Effective C++》读书笔记-技术(二)
30、proxy classes(代理类)可以用两个类来实现二维数组:Array1D是一个一维数组,而Array2D则是一个Array1D的一维数组。Array1D的实例扮演的是一个在概念上不存在的一维数组,它是一个代理类。代理类最神奇的功能是区分通过operator[]进行的是读操作还是写操作,它的思想是对于operator[]操作,返回的不是真正的对象,而是一个 proxy类,这个代理类记录了对
2016-05-02 15:28:58
632
原创 《More Effective C++》读书笔记-技术
25、将构造函数和非成员函数虚化1、这里所谓的虚拟构造函数,并不是真的指在构造函数前面加上 virtual 修饰符,而是指能够根据传入不同的参数建立不同继承关系类型的对象。class NLComponent { // 抽象基类,其中内含至少一个纯虚函数public:...};class TextBlock: public NLComponent{ // 没有内含任何纯虚函数public:
2016-05-02 12:27:49
4042
原创 《More Effective C++》读书笔记-效率
条款16-18省略。19、了解临时对象的来源临时对象产生的两种条件:1、为了使函数成功调用而进行隐式类型转换时。 2、函数返回对象时。临时对象是有开销的,因此要尽可能去消除它们,然而更重要的是训练自己寻找可能建立临时对象的地方,在任何时候只要见到常量引用参数,就存在建立临时对象而绑定在参数上的可能性,在任何时候只要见到函数返回对象,就会有一个临时对象被建立(以后被释放)。20、协助完成返回值优化略
2016-04-30 23:10:01
793
原创 《More Effective C++》读书笔记-异常
9、利用destructors 避免泄漏资源使用指针时,如果在delete指针之前产生异常,将会导致不能删除指针,从而产生资源泄漏。解决办法: 1、使用try-catch语句。int *pi = new int[10000];std::cout<<pi<<std::endl;try{ func();//若此处异常而未处理,无法执行delete语句,造成内存泄漏}catch(std
2016-04-30 19:24:30
563
原创 《More Effective C++》读书笔记-操作符
五、谨慎定义类型转换函数1)定义类似功能的函数,而抛弃隐式类型转换,使得类型转换必须显示调用。例如 String类没有定义对Char*的隐式转换,而是用c_str()函数来实施这个转换。 2)拥有单个参数(或除第一个参数外都有默认值的多参数)构造函数的类,很容易被隐式类型转换,最好加上 explicit 防止隐式类型转换。六、自增和自减操作符前缀与后缀形式的区别1、后缀式operator++(in
2016-04-30 16:15:12
411
原创 《More Effective C++》读书笔记-基础议题
一、仔细区别 pointers 和 references1)引用不可以为空(必须指向某个对象),而指针可以为空。 引用带来的好处:不需要检查空引用,也就省了相应的处理代码 指针在使用前则需要判断是否为空,对应两种处理逻辑。 2)引用必须要初始化,而指针不是必要的(但最好初始化)。 3)指针可以被重复赋值,指向另一个对象;引用总是指向(代表)它最初获得的那个对象。 4)重载某个操作符(例如o
2016-04-30 14:56:26
513
原创 leetcode78、90-Subsets I/II(组合数/子集数目)
问题描述:Given a set of distinct integers, nums, return all possible subsets.Note: Elements in a subset must be in non-descending order. The solution set must not contain duplicate subsets. For example,
2016-04-30 12:16:46
674
原创 leetcode60-Permutation Sequence(求指定位置的排列)
问题描述:The set [1,2,3,…,n] contains a total of n! unique permutations.By listing and labeling all of the permutations in order, We get the following sequence (ie, for n = 3):"123""132""213""231""312
2016-04-29 21:19:06
468
原创 leetcode46/47-Permutations I/II(全排列问题)
问题描述:Given a collection of distinct numbers, return all possible permutations.For example, [1,2,3] have the following permutations:[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].问题求解:利用剑指off
2016-04-28 23:26:35
1275
原创 数素数
问题描述:令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。 输入描述:输入在一行中给出M和N,其间以空格分隔。输出描述:输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。输入例子:5 27输出例子:11 13 17 19 23 29 31 37 41 4347 53 59 61 67 71 73 79 83 899
2016-04-27 15:13:48
401
原创 把字符串中的空格替换为"%20"
题目描述:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。输入:每个输入文件仅包含一组测试样例。 对于每组测试案例,输入一行代表要处理的字符串。输出:对应每个测试案例,出经过处理后的字符串。样例输入:We Are Happy样例输出:We%20Are%20Happy问题求解:方法一:如果允许我
2016-04-27 10:43:22
6751
转载 如何赢得数学游戏(博弈问题)
数学游戏(博弈问题)是最优化问题中的一类,同时它也是一类很有趣的逻辑推理问题。其中运用最广的思维是:倒推思维。例1.桌子上有24根火柴,甲、乙两人轮流取,每人每次取1—3根。谁取到最后一根谁就获胜。甲该怎样取才能保证获胜?解析:甲要获胜,就要拿到第24根火柴;要想拿到第24根火柴,必须先拿到第20根;要想拿到第20根,必须先拿到第16根,同理可推出,甲必须先拿到第12、8、4根,甲才获胜。所以,解决
2016-04-24 11:39:36
3638
转载 利用索引优化查询,提高效率
1、索引使用原则1、在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。2、在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。3、在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会
2016-04-23 22:03:56
2469
转载 原码、反码、补码计算及应用
若m=8,其补码形式为0000 1000 ,则~m=-9 因为~m为1111 0111,为负数,除符号位之外按位取反:1000 1000,再+1为1000 1001即是-9 32位机中,整形数int占4个字节即16位,为方便起见,我们写成8位 在电脑内存中,数值型据是以补码的形式存在的。原码就是这个数本身的二进制形式。正数的反码和补码都是和原码相同。负数的补码是反码再+1。负数的绝对值等于:
2016-04-23 11:10:41
1049
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅