总的一个小时:
第一部分:15道多选题
第二部分:1道编程题+1道问答题
编程:打印蛇形矩阵(类似于 《剑指offer 》面试题20 顺时针打印矩阵)
问答:stack与heap的区别
第一部分
1 两台服务器距离1500km远,ping通需要耗费多少时间?
4ms 8ms 16ms 32ms
2 以下哪些属于平衡二叉树?
红黑树 B+树 完全二叉树 。。。
3 Integer i1=127,i2=127,i3=128,i4=128;
i1==i2;
i1.equal(i2);
i3==i4;
i3.equal(i4);
判断结果该是:true true false true
理由:
JVM会自动维护8种基本类型的常量池,int常量池中初始化-128~127的范围,所以当为i=127赋值时,在自动装箱过程中是取自常量池中的数值,而当i=128时,128不在常量池范围内,所以在自动装箱过程中需要new128,所以地址不一样。
第二部分 我的答案
/*
题目:蛇形矩阵
例子:
输入 3
对应的矩阵是:
1 2 3
8 9 4
7 6 5
按行输出:1 2 3 8 9 4 7 6 5
*/
#include<iostream>
//#include<vector>
//#include<algorithm>
using namespace std;
int k=1;
int **nn;
void f( int n,int start)
{
int endX=n-1-start;
int endY=endX;
for(int i=start;i<=endX;i++)
{
nn[start][i]=k++;
}
if(start<endY)
{
for(int i=start+1;i<=endY;i++)
{
nn[i][endX]=k++;
}
}
if(start<endY&&start<endX)
{
for(int i=endX-1;i>=start;i--)
{
nn[endY][i]=k++; //endY指的是 第几行
}
}
if(start<endY-1 && start<endX)
{
for(int i=endY-1;i>start;i--)
{
nn[i][start]=k++; //endY指的是 第几行
}
}
}
void main()
{
int n;
cin>>n;
nn=new int *[n];
for(int i=0;i<n;i++)
nn[i]=new int [n];
if(n<=1)cout<<n<<endl;
else
{
int start=0;
while(start*2<n)
{
f(n,start);
start++;
}
}
for(int k1=0;k1<n;k1++)
{for(int kk=0;kk<n;kk++)
cout<<nn[k1][kk]<<"\t";
cout<<endl;}
system("pause");
}
1.heap是堆,stack是栈。 2.stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配。 3.stack空间有限,heap的空间是很大的自由区。 在Java中,若只是声明一个对象,则先在栈内存中为其分配地址空间,若再new一下,实例化它,则在堆内存中为其分配地址。 4.举例: 数据类型 变量名;这样定义的东西在栈区。如:Object a =null; 只在栈内存中分配空间new 数据类型();或者malloc(长度); 这样定义的东西就在堆区。如:Object b =new Object();