總的一個小時:
第一部分: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();