2014.4.12 是T的广州站,就在本校,很方便。考前一两天,临时抱佛脚,看着HTMLdog上的网页知识。就算考前,还在懊悔自己为什么不好好利用清明假期,多看点,看多点?哎,哎。。

谁知道一拿到试卷就傻眼了,原来考基础的知识,这几乎都木有怎么准备啊。是老天爷给我苟延残喘的时间吧。好吧,只能靠着零碎的记忆,硬着头皮做了。

我的基础还打得不够踏实,很多知识都似懂非懂呢。It is my chance .It is my challenge.



一.C++

1.sizeof() 32位机

    • sizeof(指针)=sizeof(*char)=sizeof( (char*)malloc(100) )=4 byte
    • sizeof(char a[]="123456")

字符数组,最初未指定大小,由具体填充值定。6个显性字节,加隐含的"\0",共7byte

  • sizeof(char a[]="a\n")=3,\n算1位
  • sizeof(char a[100])=4,a[]等价于*a,退化成指针?
  • sizeof(char a[100]="123456")
字符数组,开始预分配100,∴共100,
strlen(a)=6,退化为char* 指针,以"\0"结束
  • sizeof(int a[100])=400
  • 结构体的长度一定是最长数据元素的整数倍(以其为对齐单元),结构体对齐参数默认为8
  • eg
int* a[3][4];
//这个二维数组布局是这样的
//[0] x, x, x, x
//[1] x, x, x, x
//[2] x, x, x, x

//这是整个二维数组的大小
// 3*4*sizeof(int*) = 3*4*4 = 48
assert( sizeof(a)==48 );

//*a取的是二维数组的第1行的指针,每行有4个int*,则大小为
// 4 x sizeof(int*) = 4 * 4 = 16
assert( sizeof(*a)==16 );

//**a取的是第1行的第1列的指针
// sizeof(int*) = 4
assert( sizeof(**a) == 4 );

//***a取的是第1行第1列的内容,即int指针的内容,则
// sizeof(int) = 4
assert( sizeof(***a) == 4 );

  • eg int **a[3][4], sizeof(a)=3*4*4=18
[]运算符的结合性大于*,变量定义要从右往左读,∴int** a[3][4]应该解释为:有一个3*4的数组,它的名字叫a,每个元素的类型是int**。

2.malloc 销毁

  • malloc与free是C++/C 语言的标准库函数,不在编译器控制权限之内,由于malloc/free不能执行构造函数与析构函数,必须调用成员函数Initialize和Destroy来完成“构造”与“析构”。
对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。内部数据类型的“对象”没有构造与析构的过程,对它们而言malloc/free和new/delete是等价的。
Malloc 向系统申请分配指定size个字节的内存空间,从堆里面获得内存空间。函数返回的指针是指向堆里面的一块内存,返回类型是 void* 类型,void* 类型可以强制转换为任何其它类型的指针。
int *p = (int *) malloc(sizeof(int) * length);
malloc 函数本身并不识别要申请的内存是什么类型,它只关心内存的总字节数

void free(void *FirstByte): free()释放的是指针指向的内存(将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。),指针仍然指向原来的存储空间,指针指向的内容变成垃圾,释放内存后把指针指向NULL

  • new/delete 是C++的运算符
动态对象的内存管理,

3.C++中,内存分成5个区,堆、栈、自由存储区、全局/静态存储区、常量存储区

栈,由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区,通常是局部变量、函数参数等。

堆,由new分配的内存块,编译器不去管它们的释放,由我们的应用程序去控制,一般一个new就要对应一个delete。

如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

自由存储区,由malloc等分配的内存块,和堆相似,用free来结束自己的生命

全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区(未初始化的变量都被初始化成0或空串,C中也一样)。

常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)

void f() { int* p=new int[]; }
在栈内存中存放了一个指向一块堆内存的指针p。在程序会先确定在堆中分配内存的大小,然后调用operator new分配内存,然后返回这块内存的首地址,放入栈中
http://www.cnblogs.com/hanyonglu/archive/2011/04/12/2014212.html

堆和栈主要的区别:

1、管理方式:栈,由编译器自动管理;堆,由程序员控制,易memory leak。

2、空间大小:栈,一般都是有一定的空间大小(VC6 1M 可改);堆,32位机的4G

3、能否产生碎片:栈无,堆有

4、生长方向:栈,向下生长,朝内存地址减小方向;堆,向上,内存地址增大方向

5、分配方式:栈,静态分配-编译器,动态分配-alloca函数;堆,动态

6、分配效率:栈是机器系统提供的数据结构,so效率比较高;堆,C/C++函数库提供,按照一定的算法,在堆内存中搜索可用的足够大小的空间。效率低

so 尽量用栈,而不是用堆

static

静态数据成员要实际地分配空间,故不能在类的声明中定义(只能声明数据成员)。类声明只声明一个类的“尺寸和规格”,并不进行实际的内存分配

static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间,

3.指针 (写个程序验证下吧)

指针值赋予


二.数据结构

判断单链表是否有环算法,至少需多少个指针?

快慢追赶

  1. bool I***itsLoop(slist * head)
  2. {
  3. slist * slow = head , * fast = head;
  4. while ( fast && fast -> next )
  5. {
  6. slow = slow -> next;
  7. fast = fast -> next -> next;
  8. if ( slow == fast ) break ;
  9. }
  10. return ! (fast == NULL || fast -> next == NULL);
  11. }
2.二叉树

三.数据库(看课本。。)

1.关系模式的定义&判断

1-NF(第一范式)每列都是不可再分的原子=R的所有属性都是不可再分的原子属性

2-NF:关系模式R为1-NF,R中每个非主属性都完全依赖于R的某个候选关键字/主键(真子集)=确保每列和主键相关

数据冗余 插入删除更新异常

3-NF:R为2NF,且R中每个非主属性都不传递依赖于R的某个候选关键字=确保每列和主键直接相关,而不是间接相关=属性不依赖于其它非主属性

BCNF;鲍依斯-科得范式,是3NF的改进形式 。在第三范式的基础上,不存在任何字段对任一候选关键字段的传递函数依赖。不会有关键字段决定关键字段

插入删除更新异常

4-NF:限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖

要求越来越严格,要符合某一种范式必须也满足它前边的所有范式

2.以下find表达方式一样的?


四.软件工程(参照:http://blog.csdn.net/zhengzhb/article/category/926691/2

设计模式:Observation  visited

观察者模式:对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。类型:行为类模式


五.计算机网络(看书!)

1.C类,三个子网,每个子网55个主机,每个子网掩码?

(子网地址)网络号:该网段的首个地址(定义:将IP地址和子网掩码进行与运算得出的结果为网络号)主机位全0

广播地址:该网段的最后一个地址 主机位全1

1、 /25

128的掩码;1位1,7位0(10000000);块尺寸为128;2个子网,每个子网中有126个主机号。

2、 /26

192的掩码;2位1,6位0(11000000);块尺寸为64;4个子网,每个子网中有62个主机号。

3、 /27

224的掩码;3位1,5位0(11100000);块尺寸为32;8个子网,每个子网中有30个主机号。

4、 /28

240的掩码;4位1,4位0(11110000);块尺寸为16;16个子网,每个子网中有14个主机号。

5、 /29

248的掩码;5位1,3位0(11111000);块尺寸为8;32个子网,每个子网中有6个主机号。

6、 /30

252的掩码;6位1,2位0(11111100);块尺寸为4;64个子网,每个子网中有2个主机号。

2.指定端口的网络协议?TCP/UDP not ICMP/IP


六.操作系统(看书总结)

1.给定资源,至多几个进程同时请求竞争 才避免死锁?

2.缺页中断,调度算法?

LRU

3.磁盘指针划道数?


七.计组(看书!)

(中央)处理器CPU(Central Processing Unit):

运算器ALU(Arithmetic and Logic

Unit):算术逻辑部件,通用寄存器组,状态寄存器

控制器CU:时令 时序 总线控制逻辑 中断控制逻辑

存储器


八.算法(看书看资料!)

1.空间复杂度 & 时间复杂度 计算&比较

f函数T(n)为O(n),f*f 时间复杂度为O(n*n) or O(n)?

quick sort 至少占S(n)为O(1)?

lim(T(n)/f(n)) = 不为0常数

T(n)=O(f(n)),

复杂度与时间效率的关系:

c < log2n < n < n*log2n < n2 < n3 < 2n < 3n < n! (c是一个常量)
|--------------------------|------------|-------------|
          较好                     一般              较差

2.排序

直接插入法:一个数据插入到已经排好序的有序数据中,O(n^2),稳定

就地排序,所以空间复杂度是O(1),稳定

插入排序有个升级版:二分插入法:减少了关键字之间比较的次数,记录移动的次数没有变,时间复杂度仍为O(n^2),在插入Ri个元素的时候采用二分法比较查找插入位置,稳定

在插入第i个元素时,对前面的0~i-1元素进行折半,先跟他们
中间的那个元素比,如果小,则对前半再进行折半,否则对后半
进行折半,直到left>right,然后再把第i个元素前1位与目标位置之间
的所有元素后移,再把第i个元素放在目标位置上。

冒泡n2

冒泡改进:快排 不稳定 nlog2n

合并

关键字比较次数与原始数据排序关系?

排序前后的相同数字的顺序是否改变=是否稳定?


九.附加题

1分,2分,4分,组成1元的方案为?

参考http://www.zhihu.com/question/21075235

称重小于41g,要4个砝码,分别为?

参考http://blog.csdn.net/livelylittlefish/article/details/3854702

【笔试】T实习生2014 总结的更多相关文章

  1. [微软实习生2014]K-th string

    很久之前的事情了,微软2014实习生的在线测试题,记录下来以备后用. 题目描述: Description Consider a string set that each of them consist ...

  2. 《从HBase offheap到Netty的内存管理》

      JVM中的堆外内存(off-heap memory)与堆内内存(on-heap memory) 1. 堆内内存(on-heap memory) 1.1 什么是堆内内存 Java 虚拟机在执行Jav ...

  3. 春招后端阿里腾讯字节美团Offer拿来吧你,面试经验分享

    近期很多童鞋在准备校招了,找了蚂蚁的一位童鞋,给大家分享一波面试经验,以及面试心得,希望能帮大家在秋招拿到一个好结果 我自己的22届春招实习算是告一段落,给自己做个总结,也给大家分享一下面试的一些心得 ...

  4. 金山网络2014春季Android实习生招聘-成都站-笔试第二题

    一个文件名为input.txt的文件当中,每一行都有一个单词,要求统计单词出现的频率,并且按照从小到大出现次数打印,次数相同的按照首字母顺序排序. package jinshanwangluo.exa ...

  5. 金山网络2014春季Android实习生招聘-成都站-笔试第一题

    实现单例模式,并实现方法int getResult(float a),将a*8后返回. package jinshanwangluo.exam; /** * @author guoxm * @date ...

  6. 微软2014实习生招聘笔试第2题 the k-th string

    Time Limit: 10000msCase Time Limit: 1000msMemory Limit: 256MB Description Consider a string set that ...

  7. 学生党如何拿到阿里技术offer:《阿里面试经历-2014.4.18研发实习生面试经历(失败)》

    我们分享的上一篇文章是一位学长在大三的时候面试阿里实习生成功的经历的分享,其实就像学长在上一篇文章最后说的那样“面试并没有想的那么难,运气也会占一部分.”,其实我个人觉得,对于我们而言,自己越努力就会 ...

  8. 2014腾讯实习生笔试题——define与typedef

    2014腾讯实习生笔试(广州站)第26题填空题: #define MAX_NUM 1000+1 int Temp = Max_NUM*10; 则Temp的值为( ) 答案是:1010, 由于宏定义仅仅 ...

  9. BAT及各大互联网公司2014前端笔试面试题--Html,Css篇

    很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习前端基础更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正 ...

随机推荐

  1. 51nod1174区间中最大的数

    1174 区间中最大的数基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注给出一个有N个数的序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中, ...

  2. 两个不同于LR和jmeter的性能测试工具

    LR图形界面,更利于使用 jmeter采用java,也能够扩展 相对于上两款工具,下面两款性能测试工具都采用了异步IO模型,扩展性都更强速度也更快 gatling:基于scala,速度相比更快性能压力 ...

  3. 怎么预防sql注入攻击

    假设sql是搜索用户A的文章,sql会是这样: select * from table where owner='A'; sql注入攻击者会修改用户名来实现攻击,例如把A 改成A' or 1='1 组 ...

  4. SSH搭建完美CURD,含分页算法

    今日开始研究使用java平台上的框架解决web服务端的开发. 这是一个完整的SSH实例,在马士兵老师的SSH整合代码基础上,增加用户的增删改查,同时实现structs方式的分页 放出源代码供大家学习参 ...

  5. 如何在dapper中获取刚插入行的ID

    二话不说: 1.先建立个表 CREATE TABLE [dbo].[UserInfo](    [ID] [int] IDENTITY(1,1) NOT NULL,    [UserName] [nc ...

  6. 关于博客名“大话济公”的说明

    其实本来没打算起这个名字的,换了几个名字都被占用了(无语啊...).最近呢,我在研究<济公传>,对于济公的传说比较喜欢,尤其是这个任务,诙谐幽默,同时有时时刻刻在帮助有困难的群众,虽然是个 ...

  7. <一> jQuery 简单介绍

    jQuery 库位于一个 JavaScript 文件中,其中包含了所有的 jQuery 函数. 可以通过下面的标记把 jQuery 添加到网页中: <head> <script ty ...

  8. 服务器环境搭建系列(三)-JDK篇

    1.如果系统已经有jdk,卸载之. rpm -qa|grep java rpm -e --nodeps 上面命令返回的软件包名字 或者 yum -y remove 上面命令返回的包名 下载bin文件, ...

  9. 关于Spring运用过程中jar包报错问题

    使用Spring进行web开发时,第一步就是导入jar包,今天使用SPring Task开发定时器时,导入了好多次jar包,都是报错,不知道是因为jar包版本不同还是因为需要依赖的jar包没加入,反正 ...

  10. 来自内部的XSS攻击的防范

    来自内部的XSS攻击的防范 引入:前面我们分2篇文章分别探讨了来自外部的XSS攻击和来自内部的XSS攻击,现在我们来专门探讨如何防范来自内部的XSS攻击. 实践:其实从 http://www.2cto ...