论坛首页 入门技术论坛

从一道面试题想到的

浏览 23812 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-12-29   最后修改:2009-12-29
berlou 写道
akunspy 写道
总有蠢材要把简单问题复杂化,这样的程序员我碰到直接就不要
考设计会出这样的题?真不知道是谁脑子坏了


简单问题复杂化确实是不好的习惯, 不过也因情况而异。
这种问题确实需要做些设计的, 也许客户需求变化了呢?不是螺旋矩阵而是贪吃蛇呢?
如果是一个网络游戏, 物体行走路线算法呢?Point, Direction这种封装还是有必要的。
当然这种问题在面试时回答要看对方是什么样的公司, 考察什么内容, 如果C程序员职位, 做底层开发的, 自然不用这么封装, 如果是Java程序员, 做游戏或者产品的, 不封装一下才是找抽呢。


    说得好,需求变化了怎么办.需求变成不是螺旋矩阵也不是贪吃蛇,而是三维空间多方向同时的旋转,且几个旋转方向互相影响,我倒想看看这段所谓OO的代码要改成啥子样子.
    你举的网络游戏例子更不合适,我就是做网络游戏服务端的,那种效率优先的地方最直接的行走路线算法都嫌慢(防外挂,路点必须都做检查),要是到处都"封装"一下,多"完美"啊,只是一台服务器只上得到100人,这可不怪我了.
    OO不是银弹更不是一切,KISS才是程序员应该树立的正确的世界观.感觉JAVA程序员很多走进了OO的怪圈.为了OO而OO,真正重要的是什么?是设计,是了解你要做的东西的业务逻辑而做出合理的能适应修改的设计.
    别天真的以为封了几个类就灵活了
2 请登录后投票
   发表时间:2009-12-29  
金蝶确实考很多算法,我栽了
0 请登录后投票
   发表时间:2009-12-29  
package first;


/**
* Created on 2009-12-29
* <p>Description: [描述该类概要功能介绍]</p>
*/
public class Game
{
private static final String BLANK = " ";

public static void main(String[] args)
{
// 打印的结果可以理解为一个正方形,参数相当于正方形的边长
int[][] target = createArray(6);

printArray(target);
}
/**
* <p>Discription:[参数相当于正方形的边长]</p>
* @param iLength
* @return
*/
private static int[][] createArray(int iLength)
{
int[][] target = new int[iLength][iLength];
int iCircle = (iLength % 2 == 0) ? iLength/2 : iLength/2 + 1;
int a1 = 1;
for (int k = 0; k < iCircle; k++)
{
int a2 = a1 + iLength-1;
int a3 = a2 + iLength-1;
int a4 = a3 + iLength-1;
int a4End = a4 + iLength-2;

int iColumn = k + iLength;
// 向右移动
for (int m = k, n = k; n < iColumn; n++)
{
if (n == k) {
target[m][n] = a1;
} else {
target[m][n] = target[m][n - 1] + 1;
}
}
// 向下移动
for (int m = k, n = iColumn -1; m < iColumn; m++)
{
if (m == k) {
target[m][n] = a2;
} else {
target[m][n] = target[m - 1][n] + 1;
}
}
// 向左移动
for (int m = iColumn -1, n = iColumn -1; n >= k; n--)
{
if (n == iColumn - 1) {
target[m][n] = a3;
} else {
target[m][n] = target[m][n + 1] + 1;
}
}
// 向上移动,移动到起始位置的下方的点
for (int m = iColumn -1, n = k; m > k; m--)
{
if (m == iColumn - 1) {
target[m][n] = a4;
} else {
target[m][n] = target[m + 1][n] + 1;
}
}
a1 = a4End + 1;
iLength -= 2;
}
return target;
}
private static void printArray(int[][] target)
{
int iLength = target.length;
for (int i = 0; i < iLength; i++)
{
for (int j = 0; j < target[i].length; j++)
{
String str = String.valueOf(target[i][j]);
if (str.length() == 1) str = BLANK + str;
System.out.print(str + BLANK);
if ((j+1)%iLength == 0) System.out.println();
}
}
}
}
0 请登录后投票
   发表时间:2009-12-29  
面向对象的思维呀,哈哈!
0 请登录后投票
   发表时间:2009-12-29  
我觉得这个贴该发在jdon上,呵呵。。
0 请登录后投票
   发表时间:2009-12-29  
楼主的思考,真的很有道理,并且思路很清晰!
0 请登录后投票
   发表时间:2009-12-29  
运行不了,有运行起来的吗
0 请登录后投票
   发表时间:2009-12-30  
楼主很强悍。思考很周道。呵呵。楼上很多说简单的东西复杂化了,问题并不是简单的东西复杂化,要考虑周道不简单啊。现在开发中改得多,很多就是程序太懒太简单自认为就可以了。太少考虑设计了。
0 请登录后投票
   发表时间:2009-12-30  
4 小时前 JavaEye管理员 发给 我 的消息
标题: 您的帖子被JavaEye会员集体投票评为新手帖
正文:
您的帖子:从一道面试题想到的 被JavaEye用户投票评为新手帖帖,积分-10分。
发贴前请仔细阅读 JavaEye版规和提问的智慧,如有异议,可以到JavaEye站务圈子申诉。

如果您只是急切的想找人解答你的问题,而不是为了讨论技术的话,请移步到JavaEye问答频道,在问答频道您可以用积分悬赏解答,并且不受论坛发贴规则的制约,谢谢!

这是系统的自动通知,无需回复
0 请登录后投票
   发表时间:2009-12-30  
第一次发帖,竟然这样!!!!!!!!!!!!!!!!!!天理啊。而且还让我做《JavaEye论坛使用规则 》题。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics