巨人网络面试题
来源:互联网 发布:教你如何在ty店里盘js 编辑:程序博客网 时间:2024/04/28 13:53
软件工程师笔试试题
笔试时间:三小时内 姓名: 开始时间: 完成时间: 余文瑛 08:10 11:10
(解题前,请首先写设计思路。 ) (请自行解答,一旦发现抄袭,笔试成绩取消。 ) 第一题:写一个函数,交换两个变量的值,不使用第三个变量。 第一题:写一个函数,交换两个变量的值,不使用第三个变量。 如 a=3,b=5,交换之后 a=5,b=3; 答: 描述:不使用新的空间,那么只能使用原来的变量‘记忆’旧的数据,由
void swap(int *a,int *b) { *a=*a+*b; *b=*a-*b; *a=*a-*b; } 第二题: 编程求两个矩形的相交矩形 第二题: 编程求两个矩形的相交矩形
//C++语言描述 语言描述
分别输入两个空间中两个矩形的左上角坐标 x,y,以及宽(width)高(height), 如果两个矩形有相交,输出相交的矩形左上角,右下角坐标,x1,y1,x2,y2 例如: 键盘输入: 0,0,100,100 20,20,100,40 输出: 20,20,100,60
算法描述: 我们将平面上的两个矩形分为左右两边,将左上角的横坐标较小的那个矩形 看成’左边’矩形,较大的为右边矩形。对于输入的 rect1 和 rect2,如果 rect2.p1.x 大于 rect2.p1.x 则交换他们的位置. 我们用 R1 表示左边巨型,R2 表示右边矩形 那么他们的相对位置有 4 种情况: (1) R1 右部上下两个顶点均 被包含在 R2 中 右部上下两个顶点均//被包含在 (2) R2 左部上下两个定点均被包含在 R1 中 (3) R1 右上方顶点被包含在右部矩形中,而右下角不在 右上方顶点被包含在右部矩形中, 包含, (4) R1 的右下角顶点被 R2 包含,而右上角不在 其中在(3)(4)种,还要分两种情况计算 其中在 种 还要分两种情况计算.
#include <iostream> using namespace std; //为了保证安全性,一般将类的成员访问属性设置为 private,通过相关的属性 函 为了保证安全性, 通过相关的属性(函 为了保证安全性 通过相关的属性 数进行访问), 数进行访问 ,但本例中 //为了简便,将部分成员直接设置为 public 访问属性 为了简便, 为了简便 class Point //定义点类 定义点类 { public: int x,y; public: Point() { } Point(int a,int b)
{ x=a; y=b; } }; class Rect //矩形类 矩形类 { public: Point p1; //左上角点坐标 左上角点坐标 int height; // 高 int width;//长 长
public: Rect(Point a,int w,int h) { p1=a; height=h; width=w; } Rect() {} }; class Intersect //处理相交情况类 处理相交情况类 { private: Rect R1,R2; //2 个矩形 public: Point p1; bool b_inter;//指示是否相交 指示是否相交 bool b_include;//指示是否包含 约定:包含必相交 指示是否包含(约定 指示是否包含 约定:包含必相交) public: Intersect(Rect rect1,Rect rect2 ) { R1=rect1; R2=rect2; b_inter=false;//指示两矩形是否相交,初始值为 false,在构造函数中初始化 指示两矩形是否相交, 指示两矩形是否相交 在构造函数中初始化 b_include=false; } void { slove() //求相交 求相交
if(R1.p1.x+R1.width>=R2.p1.x) // { include(); if(!b_include) shuzhifangxiang(); } else { swap(&R1,&R2); //使得 rect1 是"左边 图形 左边"图形 使得 左边 include(); if(!b_include) shuzhifangxiang(); } } void swap(Rect *r1,Rect *r2) //矩形交换位置, 矩形交换位置 目的是获得相对位置在左边 矩形交换位置, 的矩形为参照 {Rect temp; temp=*r1; *r1=*r2; *r2=temp;}
void include() //判断并求包含的相交 判断并求包含的相交 { if((R2.p1.x>=R1.p1.x)&&(R2.p1.y>=R1.p1.y)&&((R2.p1.x+R2.width)<=(R1. p1.x+R1.width))&&((R2.p1.y+R2.height)<=(R1.p1.y+R1.height))) {Point p11(R2.p1.x,R2.p1.y); Point p22(R2.p1.x+R2.width,R2.p1.y+R2.height); b_inter=true; b_include=true; p1=p11; p2=p22; cout<<"包含 包含"<<endl; 包含 }
} void shuzhifangxiang() //求非包含的相交 求非包含的相交 {
if(R1.p1.y>=R2.p1.y&&(R1.p1.y+R1.height)<=R2.p1.y+R2.height) //(1)R1 右部上下两个顶点均 被包含在 R2 中 右部上下两个顶点均//被包含在 { Point p11(R2.p1.x,R1.p1.y); Point p22(R1.p1.x+R1.width,R1.p1.y+R1.height); b_inter=true; p1=p11; p2=p22; cout<<"情况 1"<<endl; 情况 } //(2)R2 左部上下两个定点均被包含在 R1 中 if((R1.p1.y<=R2.p1.y)&&((R1.p1.y+R1.height)>=(R2.p1.y+R2.height))) { Point p11(R2.p1.x,R2.p1.y); Point p22(R1.p1.x+R1.width,R2.p1.y+R2.height); b_inter=true; p1=p11; p2=p22; cout<<"情况 2"<<endl; 情况 } //(3) if((R1.p1.y<=(R2.p1.y+R2.height))&&(R1.p1.y>=R2.p1.y)&&((R1.p1.y+R1. height)>=(R2.p1.y+R2.height)))//R1 右上方顶点被包含在右部矩形中,而右下角 右上方顶点被包含在右部矩形中, 不在 { //依然有两种情况 依然有两种情况 //1 只包含右侧矩形的 1 个端点 //2 包含右侧图形的 2 个端点 if(R2.p1.x+R2.width>=R1.p1.x+R1.width) { Point p11(R2.p1.x,R1.p1.y); Point p22(R1.p1.x+R1.height,R2.p1.y+R2.height); p1=p11; p2=p22; cout<<"情况 3.1"<<endl; 情况 } else {
Point p11(R2.p1.x,R1.p1.y); Point p22(R2.p1.x+R2.width,R2.p1.y+R2.height); p1=p11; p2=p22; cout<<"情况 3.2"<<endl;} 情况 b_inter=true; } if(((R1.p1.y+R1.height)>=R2.p1.y)&&((R1.p1.y+R1.height)<=(R2.p1.y+R2.h eight))&&(R1.p1.y<=R2.p1.y))//R1 的右下角顶点被 R2 包含,而右上角不在 包含, { //依然有两种情况 依然有两种情况 //1 包含右侧矩形的两个端点 //2 至包含右侧图形的 1 个端点 if(R1.p1.x+R1.width<=R2.p1.x+R2.width) { Point p11(R2.p1.x,R2.p1.y); Point p22(R1.p1.x+R1.width,R1.p1.y+R1.height); p1=p11; p2=p22; cout<<"情况 4.1"<<endl; 情况 } else { Point p11(R2.p1.x,R2.p1.y); Point p22(R2.p1.x+R2.width,R2.p1.y+R2.height); p1=p11; p2=p22; cout<<"情况 4.2"<<endl;} 情况 b_inter=true; } } }; int main() { //测试情况二 测试情况二 //Point p1(0,0); //Point p2(20,20); //Rect Rect1(p1,100,100); //Rect Rect2(p2,100,40); //测试情况一,三 测试情况一, 测试情况一 //..... Intersect inter(Rect1,Rect2);
inter.slove (); cout<<inter.p1 .x <<","<<inter.p1 .y <<endl; cout<<inter.p2 .x <<","<<inter.p2 .y <<endl; return 0;s } 第三题: 第三题:模拟实现乘法运算 A*B = C,A 和 B 最大值为 9999. 要求输出如下 1234 * 121 -------------1234 2468 1234 = -------------14 9 3 1 4 算法描述; 分别存储 2 个四位整数(注意在输入的时候 123 应当输入 0123, (1) 开辟两个数组, 即应该输入四位数) (2) 用第二个乘数的个位数分别乘以第一个乘数的个位,十位,百位和千位,并 处理进位问题 (3) 分别用第二个数的十位,百位,千位重复(2)的步骤 ,然后该和的个 (4) 将乘法中间数组 temp[4][8],竖直方向求和(并处理进位问题) 位数即是最终答案的对应为数值 (5) 输出最终答案数组 product[8]; #include<iostream> #include<math.h> using namespace std; class Help { public: int a[4],b[4]; //两个数组,分别存储两个乘数 两个数组, 两个数组 int product[8]; //存储成绩 存储成绩 int temp[4][8]; //存储中间乘法过程 存储中间乘法过程 public: void cout_1array(int A[]) //输出一维数组 输出一维数组 { int i; for(i=0;i<4;i++) cout<<A[i];
} void cout_2array(int A[][8]) //输出二维数组 输出二维数组 {int i,j; for(i=0;i<4;i++) { for(j=0;j<8;j++) { cout<<A[i][j]<<" ";} cout<<endl; } }
接受键盘输入, void cin_Aarray() //接受键盘输入,初始化一维数组 接受键盘输入 { for( int i=0;i<4;i++) cin>>a[i]; } void cin_Barray() //接受键盘输入,初始化一维数组 接受键盘输入, 接受键盘输入 { for( int i=0;i<4;i++) cin>>b[i]; }
void show_Multiplication() { int i,j,k=7,g,jinwei=0,l=0;
//模拟显示计算过程 模拟显示计算过程
for(i=3;i>=0;i--,k--,l++) { g=k; for(j=3;j>=0;j--,g--) { temp[l][g]=(jinwei+a[j]*b[i])%10 jinwei=(jinwei+a[j]*b[i])/10; } jinwei=0; }
;//
cout<<endl;
} void Multiplication() //计算两数的乘积 计算两数的乘积 { show_Multiplication(); int i,j,k,jinwei=0,sum; for(k=7,j=7;j>=0;j--,k--) { sum=0; for(i=0;i<=3;i++) { sum=sum+temp[i][j]; } sum=sum+jinwei; product[k]=sum%10; jinwei=(jinwei+sum)/10; } } private: void init_2array() //将二维数组中的初始化为 0 将二维数组中的初始化为 { for(int i=0;i<4;i++) for(int j=0;j<8;j++) temp[i][j]=0;
} public: Help() { init_2array() ;//将二维数组中的初始化 将二维数组中的初始化 }
};
int main() { Help help; help.cin_Aarray (); help.cin_Barray (); help.cout_1array (help.a ); cout<<"*"; help.cout_1array (help.b ); cout<<"="<<endl; //help.show_Multiplication (); help.Multiplication (); help.cout_2array (help.temp ); cout<<endl; for(int i=0;i<8;i++) cout<<help.product [i]; cout<<endl;
} 让它具备如下特性: 第四题:请设计一个 KString 类,让它具备如下特性 让它具备如下特性 1) KString str1 = "Hello"; 2) KString str2 = str1; 3) str += "world";在执行 1)之后,str1 的内容是 "Hello";在执行 2)之后,str2 的内容是 "Hello"; 但 是 str2 内部未给"Hello"分配新空间; 在执行 3) 之后, str2 的内容是 "Helloworld", str1 的内容是"Hello"而未改变; 请下载者自己搞定
问答题 第五题: 第五题 1、请问作完以上四题后,你对自已或对题目本身有如何的评价或体会。
答:第一题看起来简单,但是要求不使用新的变量,所以变成了一个简单的算法 题 第二题,其实考察的目的是游戏中的一个碰撞系统(两个图像均是矩形,如 果相交,则发生碰撞),因为时间限定在 3 小时内,所以很多注释和算法描述没 有时间写出来,抱歉。也因为时间的问题,所以很多地方没有使用 OOP 的方法 和思想,代码中也没有反应出设计模式思想(这本是我想显现的地方) 。 第三题和第四题都是偏算法的,本来以为会遇到 DirectX 3D 相关的题型,结 果没有,所以估计公司对游戏人工智能(AI)看的重些,觉得很支持,个人也觉得 解决问题的能力和思想,显得重要一些。 2、你理想中的优秀的软件开发师应该具备哪些特点 (1)喜欢软件开发行业,喜欢思考和对技术的热爱。当然着要建立在一些理工 科的教育背景之下。如果是游戏程序员,还要有对数学和游戏的喜爱。 (2)自主学习能力。在新工具和新领域不断出现的 e 时代,如果不肯学习,很 快就要 OUT,所以学习能力是程序员保持”青春”的药剂 (3)严谨的工作态度。如思维,编码习惯,和当下任务当下解决的毅力和习惯 (很多年轻人,喜欢把工作都往后推迟,就像学生在周日晚上补写下周一交的作 业一样,结果往往导致代码问题多多) (4)团队合作精神。软件,再也不是搭建和设计一个鸡窝那样简单,而是一个 庞大的软件工程,个人的英雄时代几乎已经结束,需要的是更多的来自各个行业 的人一起协作完成一个作品,只有建立一个高效的沟通,最终完成的才是当初设 计蓝图的作品。荣誉,应该属于团队。 等等更多。 3、你觉得哪些是你具备潜力的,哪些是你最希望突破的。 潜力: (1) 对软件行业的喜爱和对开发的激情 (2) 良好的数学基础和敏捷的思维(包括一些‘不切实际’的想法,比如开发 一款多人在线社区情感游戏等等) (3) 学习的激情 希望突破的地方:
笔试时间:三小时内 姓名: 开始时间: 完成时间: 余文瑛 08:10 11:10
(解题前,请首先写设计思路。 ) (请自行解答,一旦发现抄袭,笔试成绩取消。 ) 第一题:写一个函数,交换两个变量的值,不使用第三个变量。 第一题:写一个函数,交换两个变量的值,不使用第三个变量。 如 a=3,b=5,交换之后 a=5,b=3; 答: 描述:不使用新的空间,那么只能使用原来的变量‘记忆’旧的数据,由
void swap(int *a,int *b) { *a=*a+*b; *b=*a-*b; *a=*a-*b; } 第二题: 编程求两个矩形的相交矩形 第二题: 编程求两个矩形的相交矩形
//C++语言描述 语言描述
分别输入两个空间中两个矩形的左上角坐标 x,y,以及宽(width)高(height), 如果两个矩形有相交,输出相交的矩形左上角,右下角坐标,x1,y1,x2,y2 例如: 键盘输入: 0,0,100,100 20,20,100,40 输出: 20,20,100,60
算法描述: 我们将平面上的两个矩形分为左右两边,将左上角的横坐标较小的那个矩形 看成’左边’矩形,较大的为右边矩形。对于输入的 rect1 和 rect2,如果 rect2.p1.x 大于 rect2.p1.x 则交换他们的位置. 我们用 R1 表示左边巨型,R2 表示右边矩形 那么他们的相对位置有 4 种情况: (1) R1 右部上下两个顶点均 被包含在 R2 中 右部上下两个顶点均//被包含在 (2) R2 左部上下两个定点均被包含在 R1 中 (3) R1 右上方顶点被包含在右部矩形中,而右下角不在 右上方顶点被包含在右部矩形中, 包含, (4) R1 的右下角顶点被 R2 包含,而右上角不在 其中在(3)(4)种,还要分两种情况计算 其中在 种 还要分两种情况计算.
#include <iostream> using namespace std; //为了保证安全性,一般将类的成员访问属性设置为 private,通过相关的属性 函 为了保证安全性, 通过相关的属性(函 为了保证安全性 通过相关的属性 数进行访问), 数进行访问 ,但本例中 //为了简便,将部分成员直接设置为 public 访问属性 为了简便, 为了简便 class Point //定义点类 定义点类 { public: int x,y; public: Point() { } Point(int a,int b)
{ x=a; y=b; } }; class Rect //矩形类 矩形类 { public: Point p1; //左上角点坐标 左上角点坐标 int height; // 高 int width;//长 长
public: Rect(Point a,int w,int h) { p1=a; height=h; width=w; } Rect() {} }; class Intersect //处理相交情况类 处理相交情况类 { private: Rect R1,R2; //2 个矩形 public: Point p1; bool b_inter;//指示是否相交 指示是否相交 bool b_include;//指示是否包含 约定:包含必相交 指示是否包含(约定 指示是否包含 约定:包含必相交) public: Intersect(Rect rect1,Rect rect2 ) { R1=rect1; R2=rect2; b_inter=false;//指示两矩形是否相交,初始值为 false,在构造函数中初始化 指示两矩形是否相交, 指示两矩形是否相交 在构造函数中初始化 b_include=false; } void { slove() //求相交 求相交
if(R1.p1.x+R1.width>=R2.p1.x) // { include(); if(!b_include) shuzhifangxiang(); } else { swap(&R1,&R2); //使得 rect1 是"左边 图形 左边"图形 使得 左边 include(); if(!b_include) shuzhifangxiang(); } } void swap(Rect *r1,Rect *r2) //矩形交换位置, 矩形交换位置 目的是获得相对位置在左边 矩形交换位置, 的矩形为参照 {Rect temp; temp=*r1; *r1=*r2; *r2=temp;}
void include() //判断并求包含的相交 判断并求包含的相交 { if((R2.p1.x>=R1.p1.x)&&(R2.p1.y>=R1.p1.y)&&((R2.p1.x+R2.width)<=(R1. p1.x+R1.width))&&((R2.p1.y+R2.height)<=(R1.p1.y+R1.height))) {Point p11(R2.p1.x,R2.p1.y); Point p22(R2.p1.x+R2.width,R2.p1.y+R2.height); b_inter=true; b_include=true; p1=p11; p2=p22; cout<<"包含 包含"<<endl; 包含 }
} void shuzhifangxiang() //求非包含的相交 求非包含的相交 {
if(R1.p1.y>=R2.p1.y&&(R1.p1.y+R1.height)<=R2.p1.y+R2.height) //(1)R1 右部上下两个顶点均 被包含在 R2 中 右部上下两个顶点均//被包含在 { Point p11(R2.p1.x,R1.p1.y); Point p22(R1.p1.x+R1.width,R1.p1.y+R1.height); b_inter=true; p1=p11; p2=p22; cout<<"情况 1"<<endl; 情况 } //(2)R2 左部上下两个定点均被包含在 R1 中 if((R1.p1.y<=R2.p1.y)&&((R1.p1.y+R1.height)>=(R2.p1.y+R2.height))) { Point p11(R2.p1.x,R2.p1.y); Point p22(R1.p1.x+R1.width,R2.p1.y+R2.height); b_inter=true; p1=p11; p2=p22; cout<<"情况 2"<<endl; 情况 } //(3) if((R1.p1.y<=(R2.p1.y+R2.height))&&(R1.p1.y>=R2.p1.y)&&((R1.p1.y+R1. height)>=(R2.p1.y+R2.height)))//R1 右上方顶点被包含在右部矩形中,而右下角 右上方顶点被包含在右部矩形中, 不在 { //依然有两种情况 依然有两种情况 //1 只包含右侧矩形的 1 个端点 //2 包含右侧图形的 2 个端点 if(R2.p1.x+R2.width>=R1.p1.x+R1.width) { Point p11(R2.p1.x,R1.p1.y); Point p22(R1.p1.x+R1.height,R2.p1.y+R2.height); p1=p11; p2=p22; cout<<"情况 3.1"<<endl; 情况 } else {
Point p11(R2.p1.x,R1.p1.y); Point p22(R2.p1.x+R2.width,R2.p1.y+R2.height); p1=p11; p2=p22; cout<<"情况 3.2"<<endl;} 情况 b_inter=true; } if(((R1.p1.y+R1.height)>=R2.p1.y)&&((R1.p1.y+R1.height)<=(R2.p1.y+R2.h eight))&&(R1.p1.y<=R2.p1.y))//R1 的右下角顶点被 R2 包含,而右上角不在 包含, { //依然有两种情况 依然有两种情况 //1 包含右侧矩形的两个端点 //2 至包含右侧图形的 1 个端点 if(R1.p1.x+R1.width<=R2.p1.x+R2.width) { Point p11(R2.p1.x,R2.p1.y); Point p22(R1.p1.x+R1.width,R1.p1.y+R1.height); p1=p11; p2=p22; cout<<"情况 4.1"<<endl; 情况 } else { Point p11(R2.p1.x,R2.p1.y); Point p22(R2.p1.x+R2.width,R2.p1.y+R2.height); p1=p11; p2=p22; cout<<"情况 4.2"<<endl;} 情况 b_inter=true; } } }; int main() { //测试情况二 测试情况二 //Point p1(0,0); //Point p2(20,20); //Rect Rect1(p1,100,100); //Rect Rect2(p2,100,40); //测试情况一,三 测试情况一, 测试情况一 //..... Intersect inter(Rect1,Rect2);
inter.slove (); cout<<inter.p1 .x <<","<<inter.p1 .y <<endl; cout<<inter.p2 .x <<","<<inter.p2 .y <<endl; return 0;s } 第三题: 第三题:模拟实现乘法运算 A*B = C,A 和 B 最大值为 9999. 要求输出如下 1234 * 121 -------------1234 2468 1234 = -------------14 9 3 1 4 算法描述; 分别存储 2 个四位整数(注意在输入的时候 123 应当输入 0123, (1) 开辟两个数组, 即应该输入四位数) (2) 用第二个乘数的个位数分别乘以第一个乘数的个位,十位,百位和千位,并 处理进位问题 (3) 分别用第二个数的十位,百位,千位重复(2)的步骤 ,然后该和的个 (4) 将乘法中间数组 temp[4][8],竖直方向求和(并处理进位问题) 位数即是最终答案的对应为数值 (5) 输出最终答案数组 product[8]; #include<iostream> #include<math.h> using namespace std; class Help { public: int a[4],b[4]; //两个数组,分别存储两个乘数 两个数组, 两个数组 int product[8]; //存储成绩 存储成绩 int temp[4][8]; //存储中间乘法过程 存储中间乘法过程 public: void cout_1array(int A[]) //输出一维数组 输出一维数组 { int i; for(i=0;i<4;i++) cout<<A[i];
} void cout_2array(int A[][8]) //输出二维数组 输出二维数组 {int i,j; for(i=0;i<4;i++) { for(j=0;j<8;j++) { cout<<A[i][j]<<" ";} cout<<endl; } }
接受键盘输入, void cin_Aarray() //接受键盘输入,初始化一维数组 接受键盘输入 { for( int i=0;i<4;i++) cin>>a[i]; } void cin_Barray() //接受键盘输入,初始化一维数组 接受键盘输入, 接受键盘输入 { for( int i=0;i<4;i++) cin>>b[i]; }
void show_Multiplication() { int i,j,k=7,g,jinwei=0,l=0;
//模拟显示计算过程 模拟显示计算过程
for(i=3;i>=0;i--,k--,l++) { g=k; for(j=3;j>=0;j--,g--) { temp[l][g]=(jinwei+a[j]*b[i])%10 jinwei=(jinwei+a[j]*b[i])/10; } jinwei=0; }
;//
cout<<endl;
} void Multiplication() //计算两数的乘积 计算两数的乘积 { show_Multiplication(); int i,j,k,jinwei=0,sum; for(k=7,j=7;j>=0;j--,k--) { sum=0; for(i=0;i<=3;i++) { sum=sum+temp[i][j]; } sum=sum+jinwei; product[k]=sum%10; jinwei=(jinwei+sum)/10; } } private: void init_2array() //将二维数组中的初始化为 0 将二维数组中的初始化为 { for(int i=0;i<4;i++) for(int j=0;j<8;j++) temp[i][j]=0;
} public: Help() { init_2array() ;//将二维数组中的初始化 将二维数组中的初始化 }
};
int main() { Help help; help.cin_Aarray (); help.cin_Barray (); help.cout_1array (help.a ); cout<<"*"; help.cout_1array (help.b ); cout<<"="<<endl; //help.show_Multiplication (); help.Multiplication (); help.cout_2array (help.temp ); cout<<endl; for(int i=0;i<8;i++) cout<<help.product [i]; cout<<endl;
} 让它具备如下特性: 第四题:请设计一个 KString 类,让它具备如下特性 让它具备如下特性 1) KString str1 = "Hello"; 2) KString str2 = str1; 3) str += "world";在执行 1)之后,str1 的内容是 "Hello";在执行 2)之后,str2 的内容是 "Hello"; 但 是 str2 内部未给"Hello"分配新空间; 在执行 3) 之后, str2 的内容是 "Helloworld", str1 的内容是"Hello"而未改变; 请下载者自己搞定
问答题 第五题: 第五题 1、请问作完以上四题后,你对自已或对题目本身有如何的评价或体会。
答:第一题看起来简单,但是要求不使用新的变量,所以变成了一个简单的算法 题 第二题,其实考察的目的是游戏中的一个碰撞系统(两个图像均是矩形,如 果相交,则发生碰撞),因为时间限定在 3 小时内,所以很多注释和算法描述没 有时间写出来,抱歉。也因为时间的问题,所以很多地方没有使用 OOP 的方法 和思想,代码中也没有反应出设计模式思想(这本是我想显现的地方) 。 第三题和第四题都是偏算法的,本来以为会遇到 DirectX 3D 相关的题型,结 果没有,所以估计公司对游戏人工智能(AI)看的重些,觉得很支持,个人也觉得 解决问题的能力和思想,显得重要一些。 2、你理想中的优秀的软件开发师应该具备哪些特点 (1)喜欢软件开发行业,喜欢思考和对技术的热爱。当然着要建立在一些理工 科的教育背景之下。如果是游戏程序员,还要有对数学和游戏的喜爱。 (2)自主学习能力。在新工具和新领域不断出现的 e 时代,如果不肯学习,很 快就要 OUT,所以学习能力是程序员保持”青春”的药剂 (3)严谨的工作态度。如思维,编码习惯,和当下任务当下解决的毅力和习惯 (很多年轻人,喜欢把工作都往后推迟,就像学生在周日晚上补写下周一交的作 业一样,结果往往导致代码问题多多) (4)团队合作精神。软件,再也不是搭建和设计一个鸡窝那样简单,而是一个 庞大的软件工程,个人的英雄时代几乎已经结束,需要的是更多的来自各个行业 的人一起协作完成一个作品,只有建立一个高效的沟通,最终完成的才是当初设 计蓝图的作品。荣誉,应该属于团队。 等等更多。 3、你觉得哪些是你具备潜力的,哪些是你最希望突破的。 潜力: (1) 对软件行业的喜爱和对开发的激情 (2) 良好的数学基础和敏捷的思维(包括一些‘不切实际’的想法,比如开发 一款多人在线社区情感游戏等等) (3) 学习的激情 希望突破的地方:
- 巨人网络面试题
- 网络管理面试题
- 网络管理面试题
- 网络笔试面试题
- 网络编程面试题
- 网络编程面试题
- 网络编程面试题
- 网络面试题
- 网络面试题2
- 网络面试题3
- 网络面试题4
- 网络面试题5
- 网络面试题
- 网络面试题
- 网络编程面试题
- 网络面试题
- 网络编程面试题
- 网络编程面试题
- Android系统Surface机制的SurfaceFlinger服务的线程模型分析
- 3D程序员面试题
- 20121012失眠的夜晚
- LeetCode (A)
- 快速找出一个数组中的最大数、第二大数
- 巨人网络面试题
- mime
- simhash算法的原理[转]
- 心有猛虎 细嗅蔷薇
- eclipse小问题
- 第二章 java基础语法
- 文件指针的运用 : 计算文件wj.txt内容的字节数
- PANIC: Could not open: C:\Users\Administrator\.android/
- Linux串口编程-5-space校验2