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. normalize.css介绍

    Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性.相比于传统的CSS reset,Normalize.css是一种现代的.为HTML5准备 ...

  2. org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode

    [spring]:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowe ...

  3. hdu 2222 Keywords Search ac自动机入门

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2222 题意:有N(N <= 10000)个长度不超过50的模式串和一个长度不超过1e6的文本串. ...

  4. CODEVS 1090 加分二叉树

    题目描述 Description 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第j个节点的分数为di, ...

  5. mysql之——存储过程 + 游标 + 事务

    下面是自己曾经编写过的mysql数据库存储过程,留作存档,以后用到的时候拿来参考. 其中,涉及到了存储过程.游标(双层循环).事务. [说明]:代码中的注释只针对当时业务而言,无须理会. 代码如下: ...

  6. *[topcoder]TheTree

    http://community.topcoder.com/stat?c=problem_statement&pm=12746&rd=15703 这道题有意思.给了树的根和每层节点的个 ...

  7. 《ArcGIS Engine+C#实例开发教程》第二讲 菜单的添加及其实现

    原文:<ArcGIS Engine+C#实例开发教程>第二讲 菜单的添加及其实现 摘要:在上一讲中,我们实现了应用程序基本框架,其中有个小错误,在此先跟大家说明下.在“属性”选项卡中,我们 ...

  8. 二层安全之MAC Flooding解析与解决方法

    一.了解MAC Flooding原理 1.1 如图所示,网络中有3个PC和一个交换机,在正常情况下,如果PC A向PC B发送信息,PC C是不会知道的,过程都通过中间的交换机进行透明的处理,并且会记 ...

  9. Spring AOP实现方式四之注入式AspectJ切面【附源码】

    现在我们要讲的是第四种AOP实现之注入式AspectJ切面 通过简单的配置就可以实现AOP了. 源码结构: 1.首先我们新建一个接口,love 谈恋爱接口. package com.spring.ao ...

  10. 内存不足时Android 系统如何Kill进程

    [转]内存不足时Android 系统如何Kill进程 大家其实都或多或少知道,Android系统有自已的任务管理器,当系统内存不足时,系统需要KILL一些进程(应用),以回收一部分资源,来保证系统仍可 ...