MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » 分享:让人懊恼的面试-看程序员的基本功,该怎么解决

分享:让人懊恼的面试-看程序员的基本功,该怎么解决

www.MyException.Cn  网友分享于:2013-02-16  浏览:11次
分享:让人懊恼的面试-看程序员的基本功
今天去参加了微软的一个外包的公司的招聘,当然,这个招聘的公司不在国内,不过好在出人意料的是这个公司竟然在武汉来招聘了,我的一个非常优秀的 c++的朋友被应聘了,然后他极力推荐我去参加应聘,我第一次去,那个boss(老外)非常赞赏我,因为我的简历的原因,原来做了Shangducms这个项目并且还出了一本书,所以那个老外非常赞赏我,并且直接安排我到最后的面试。

话说回来,这个老外是一个hr,但是是微软的员工并且长达10年的工龄,这个老外对算法和素质要求的比较高(其实国外的公司都差不多是这样),然后这个老外出了两个题,一个题是编程题,另一个是设计题,这两个题在各位高手眼中肯定比较简单,这两个题是这样的。

1.对字符串进行排序,用任意一种编程语言来实现,不能使用现有的类,在排序中,字符串“Bc”,“Ad”,“aC”,“Hello”,“X man”,“little”,“During”,“day”能够排序成 “Ad”,"aC",“Bc”,“During”,“day”,“Hello”,“little”,“Hello”,也就是说,在排序的过程并不是传统的按照字符串排序,在排序中还需要将小写字母一并排序,也就是说a字符串要在B或b之前。

2.设计一个图书管理系统,无需实现,只需要写清思路就可以了。

考试也很轻松,出了不能用QQ,MSN以外,其他的什么baidu啊google啊都可以查,本来拿到这两个题的时候觉得非常的简单(当时的感觉那是相当的简单),但是没想到做了2-3个小时还没有做出来,要不就是出现错误要不就是无法排序,结果只好被老外说“I'm sorry”了。

后来回来了之后,感觉非常的郁闷,其实也不是特别郁闷,但是觉得自己水平不错嘛,这样的工作当然是唾手可得了,没想到马失前蹄,感觉不爽,就和朋友玩了几个小时游戏,后来坐回电脑前,改不了程序员的“劣根性”,非要搞出个所以然来,结果没出20分钟就搞定了,真是很郁闷!因为如果做不出来就算了,结果自己做20分钟就做出来了,在面试时却没有做出来,我想除了紧张以外,更多的还是基础知识不牢固的原因,下面分享一下自己的代码。

其实第一题很简单,就是一个排序,随便用什么算法都可以,直接冒泡就可以,不过难点在于比较字符串中间的字符的ASCII的值,首先写其他代码,初始化一下,示例代码如下所示。
  public string[] str = { "dad", "bood","bada","Admin","Good","aete","cc","Ko","Beta","Could"};
  public Form1()
  {
  InitializeComponent();
  }

  private void Form1_Load(object sender, EventArgs e)
  {
  textBox1.Text = "";
  for (int i = 0; i < str.Length; i++)
  {
  textBox1.Text += str[i].ToString()+" ";
  }
  }

 

上面这串代码很简单,就是先声明一个数组咯,然后在窗体加载时进行数组的遍历(原题是从文件中读取一串字符串转化为数组,这个简单,固可以忽略),当用户单击排序按钮时,进行排序,这里也很简单,示例代码如下所示。
Code
  private void button1_Click(object sender, EventArgs e)
  {
  Sort(str);
  textBox1.Text = "";
  for (int i = 0; i < str.Length; i++)
  {
  textBox1.Text += str[i].ToString() + " ";
  }
  }

 

当用户单击按钮时,使用排序Sort方法排序字符串然后清空现有的内容再呈现在控件中,这里关键的就是Sort方法的实现,Sort方法的实现很简单,直接冒泡就可以了,但是注意的是,这里是字符串,而不是数字,冒泡的话需要判断大小,如果使用C#函数,则可以很容易的实现Sort方法,示例代码如下所示。
Code
  private void Sort(string[] s)
  {
  for (int i = 0; i < s.Length; i++)
  {
  for (int j = 0; j < s.Length - i-1; j++)
  {
  if (String.CompareOrdinal(s[j], s[j + 1]) > 0)
  {
  string tem = s[j];
  s[j] = s[j+1];
  s[j + 1] = tem;
  }
  }
  }
  }

 

好了,如果使用String.CompareOrdinal方法当然能够快速的排序,但是这里有一个问题,先不说这里不能用自带的类,就说这个题目吧,CompareOrdinal方法还是无法实现需求,但是这里给了一个思路,使用冒泡排序进行排序,可以在函数中实现字符串的大小的对比,就好像数字的对比一样,这里就该一下,使用自己的方法,示例代码如下所示。
Code
  private void Sort(string[] s)
  {
  for (int i = 0; i < s.Length; i++)
  {
  for (int j = 0; j < s.Length - i-1; j++)
  {
  if (compare(s[j], s[j + 1]) > 0)
  {
  string tem = s[j];
  s[j] = s[j+1];
  s[j + 1] = tem;
  }
  }
  }
  }

 

上面的代码使用自己的compare方法进行判断,其实现思路基本同String.CompareOrdinal相同再加以改进就可以了,这是最重要的方法,因为这个方法直接关系到排序,示例代码如下所示。

 

文章评论

Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
Java程序员必看电影
Java程序员必看电影
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
如何成为一名黑客
如何成为一名黑客
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
每天工作4小时的程序员
每天工作4小时的程序员
 程序员的样子
程序员的样子
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
总结2014中国互联网十大段子
总结2014中国互联网十大段子
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
一个程序员的时间管理
一个程序员的时间管理
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员都该阅读的书
程序员都该阅读的书
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
漫画:程序员的工作
漫画:程序员的工作
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
老程序员的下场
老程序员的下场
鲜为人知的编程真相
鲜为人知的编程真相
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
那些争议最大的编程观点
那些争议最大的编程观点
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
我的丈夫是个程序员
我的丈夫是个程序员
程序员必看的十大电影
程序员必看的十大电影
编程语言是女人
编程语言是女人
中美印日四国程序员比较
中美印日四国程序员比较
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
程序员的鄙视链
程序员的鄙视链
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
旅行,写作,编程
旅行,写作,编程
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
10个调试和排错的小建议
10个调试和排错的小建议
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有