【笔试】T实习生2014 总结
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")
- sizeof(int a[100])=400
- 结构体的长度一定是最长数据元素的整数倍(以其为对齐单元),结构体对齐参数默认为8
- eg
//这个二维数组布局是这样的
//[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
2.malloc 销毁
- malloc与free是C++/C 语言的标准库函数,不在编译器控制权限之内,由于malloc/free不能执行构造函数与析构函数,必须调用成员函数Initialize和Destroy来完成“构造”与“析构”。
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.指针 (写个程序验证下吧)
指针值赋予
二.数据结构
判断单链表是否有环算法,至少需多少个指针?
快慢追赶
- bool I***itsLoop(slist * head)
- {
- slist * slow = head , * fast = head;
- while ( fast && fast -> next )
- {
- slow = slow -> next;
- fast = fast -> next -> next;
- if ( slow == fast ) break ;
- }
- return ! (fast == NULL || fast -> next == NULL);
- }
三.数据库(看课本。。)
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 总结的更多相关文章
- [微软实习生2014]K-th string
很久之前的事情了,微软2014实习生的在线测试题,记录下来以备后用. 题目描述: Description Consider a string set that each of them consist ...
- 《从HBase offheap到Netty的内存管理》
JVM中的堆外内存(off-heap memory)与堆内内存(on-heap memory) 1. 堆内内存(on-heap memory) 1.1 什么是堆内内存 Java 虚拟机在执行Jav ...
- 春招后端阿里腾讯字节美团Offer拿来吧你,面试经验分享
近期很多童鞋在准备校招了,找了蚂蚁的一位童鞋,给大家分享一波面试经验,以及面试心得,希望能帮大家在秋招拿到一个好结果 我自己的22届春招实习算是告一段落,给自己做个总结,也给大家分享一下面试的一些心得 ...
- 金山网络2014春季Android实习生招聘-成都站-笔试第二题
一个文件名为input.txt的文件当中,每一行都有一个单词,要求统计单词出现的频率,并且按照从小到大出现次数打印,次数相同的按照首字母顺序排序. package jinshanwangluo.exa ...
- 金山网络2014春季Android实习生招聘-成都站-笔试第一题
实现单例模式,并实现方法int getResult(float a),将a*8后返回. package jinshanwangluo.exam; /** * @author guoxm * @date ...
- 微软2014实习生招聘笔试第2题 the k-th string
Time Limit: 10000msCase Time Limit: 1000msMemory Limit: 256MB Description Consider a string set that ...
- 学生党如何拿到阿里技术offer:《阿里面试经历-2014.4.18研发实习生面试经历(失败)》
我们分享的上一篇文章是一位学长在大三的时候面试阿里实习生成功的经历的分享,其实就像学长在上一篇文章最后说的那样“面试并没有想的那么难,运气也会占一部分.”,其实我个人觉得,对于我们而言,自己越努力就会 ...
- 2014腾讯实习生笔试题——define与typedef
2014腾讯实习生笔试(广州站)第26题填空题: #define MAX_NUM 1000+1 int Temp = Max_NUM*10; 则Temp的值为( ) 答案是:1010, 由于宏定义仅仅 ...
- BAT及各大互联网公司2014前端笔试面试题--Html,Css篇
很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习前端基础更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正 ...
随机推荐
- PHP 向 MySql 中数据修改操作时,只对数字操作有效,非数字操作无效,怎么办?
问题描述: 用PHP向MySql数据库中修改数据,实现增删改(数据库能正确连接) 经测试,代码只能对数字进行正常的增删改操作,非数字操作无效 但要在课程名称中输入中文,应该如果修改呢? 存 ...
- hdu 3746 Cyclic Nacklace KMP循环节
Cyclic Nacklace 题意:给一个长度为Len( 3 <= Len <= 100000 )的英文串,问你在字符串后面最少添加几个字符可以使得添加后的串为周期串? Sample I ...
- Java学习-Overload和Override的区别
1.Overload是重载的意思,Override是覆盖的意思,也就是重写. 2.重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同). 3 ...
- Hbase实例
import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.had ...
- Java学习--final与static
final是java的关键字,它所表示的是“这部分是无法修改的”. 编译期常量,它在类加载的过程就已经完成了初始化,所以当类加载完成后是不可更改的,编译期可以将它代入到任何用到它的计算式中,也就是说可 ...
- 如何实现一个malloc函数
一.概述 1.malloc简介 函数所在头文件:<stdlib.h> 函数原型是:void *malloc (size_t n) 函数功能:在内存的动态存储区中分配一个长度为size的连续 ...
- Python属性、方法和类管理系列之----属性初探
在学习dict的时候,肯定听过dict是Python中最重要的数据类型,但是不一定知道为什么.马上你就会明白原因了. Python中从模块.到函数.到类.到元类,其实主要管理方法就是靠一个一个的字典. ...
- 探索Microsoft.NET目录
所在目录:D:\Windows\Microsoft.NET(d盘为系统盘) 文件目录 |--D:\Windows\Microsoft.NET |------assembly |------GAC_32 ...
- 按行N等分某个文件
# --*-- coding:utf-8 --*--import randomimport math def fanhui(): into = random.randint(1, 10) ...
- C#压缩、解压缩文件(夹)(rar、zip)
主要是使用Rar.exe压缩解压文件(夹)(*.rar),另外还有使用SevenZipSharp.dll.zLib1.dll.7z.dll压缩解压文件(夹)(*.zip).需要注意的几点如下: 1.注 ...