笔试题目及难题解决方案笔试经验

时间:2023-02-09 21:52:21 笔试题目 我要投稿
  • 相关推荐

笔试题目及难题解决方案笔试经验

  1. 毫无疑问,面试得从笔试开始,先在笔试的时候读代码写结果,还是很简单的一道题,不过就是考C#继承,构造函数,及new对基类的隐藏等基础知识,换做谁应该都能做出来。

笔试题目及难题解决方案笔试经验

  2. 接下来的笔试问答题也还算简单,也不过就是诸如装箱拆箱,类和结构的区别,GAC,CLR等等基础得让人崩溃的基础,说崩溃,是因为它们都是刚毕业那年为了找工作曾试着死记硬背的概念,其实接触得多了,就算撇开概念也能较为清晰地描述它们,只是可能名词称呼不够专业。

  3. 紧接着就是编码题,常见的编码题就是排序,这次也毫无意外,写了一个比堆排序容易超级多的快速排序,写完心里还蛮忐忑的,虽然脑袋里尝试运行的时候结果好像是对的,然而总觉得哪里有问题,问题不是出在实现上,而是那一瞬间,突然不知道自己写出来的是不是快排了,只能肯定不是冒泡,冒泡可没那么长的代码。这里需要注意一点:如果能写泛型代码尽量写泛型,一个原因是泛型的作用还是很明显的,还有,写成泛型,稍稍好像有提升自己的档次吧。当然,如果写成 int[] array,回头面试官八成还得问你,那我要是传入的是一个string[] array(这个可能性会相对小)或者byte[] array,long[] array怎么办?

  面试的时候,他肯定了我写的是正确的快排,还提醒我,所有排序里面只有快排是用到了递归,所以只要你写出了递归,就可以肯定是快排。虽然自己没有一一去验证,不过就我所知道的为数不多的排序算法里,仔细想想,好像确实只有快排用到了递归。面试官还专门写了几个数字,问快排第一趟排序结束后的排序是什么样的,大概是怕我死记硬背这段代码,而不知道具体的逻辑吧。我稍微用笔画了一会,然后回答出来了,或许是为了验证我确实懂排序,又拿着同样的数列,让我用冒泡方式写出第一次排序结束后的情况。还算ok,排序和查找的算法,以前还是理解得比较深刻的,当然,只限于简单的部分,要是问我诸如堆排序什么的,我就只能举双手投降了。堆排序以前也仔细研究过,不过好像跟树有关,结果是将这些算法逻辑都还给书本和老师了。

  4. 依然还是编码题,丫丫的,有你这么考我的么?我是应聘测试开发类岗位的自动化测试工作,测试开发,什么叫测试开发,开发是为了更好的测试,我又不是真的应聘开发,尼玛以为我对C#是有多熟悉,多了解吖??居然让我实现String.Replace()方法,还不能调用API,说真的,给我一个用例让我调用 Replace方法做字符串的替换,我都可能不知道Replace有几种重载方法,以及每一个重载方法的参数有哪些,可是题目放在那里,总不能不会实现也没有任何思路吧。总不能打开手机上网百度吧,手机流量也不多了,舍不得用。为了留下良好印象,也总不能直接写上“我不会”三个字吧。

  栽了栽了,就栽在这题上了,心里没有任何慌张,只是很冷静地面对这样的事实,也许是过分的冷静吧,脑子里突然有点意识到了什么,如果记忆没有骗我的话,这个题,早在三四年前,某人曾经跟我一起讨论过,只是那时候我编码一塌糊涂,也无心学习,对于这种算法,编程什么的对话,我顶多当他自言自语,理解不了,或者说懒得去理解。

  闭上眼睛,努力搜寻那一幕幕微小的记忆片段,究竟那时候他自言自语说的是什么,印象中是他曾在某公司面试C#开发岗位的时候碰到过的, 也是现场没有回答出来而回到家里继续研究来着,当时他究竟研究出了什么结果。不记得眼睛闭了多久,也不记得脑子里飘过了多少东西,却很清晰地,抓住了,就是它,没错,三四年前,他说过,用CopyTo的方法,只要匹配到输入的string中需要被替换的字符串及知晓原字串长度,就可以知道 需要被复制的长度 = 索引-需要被替换的字符串的长度(这仅限当时的想法,和具体实现的代码逻辑对有出入),而一旦找到了这个关系,用CopyTo的方法将原来的字符串替换成需要被替换的字符串,即使用xx.CopyTo (int sourceIndex, char[] destination, int destinationIndex, int count)(不要问我为什么Replace的重载方法及参数记不住,CopyTo却记得那么清楚,前几天刚帮某个群的某个朋友看一段代码的时候,刚好里面有CopyTo方法,出于对它的好奇,还特地搜索过,因为时间不长,所以记忆深刻,没办法,我记忆力比较好~),可是,然后呢?char[]的数组是什么?又问了自己几个问题,脑子里思路似乎是渐渐清晰起来了,不过似乎挺凌乱,所以真让我从头到尾实现这个方法,与其说给我多少时间能解决,更可能的情况是,我根本写不出来,不得不说,似乎蛮复杂的。算了,还是放弃吧。(代码实现其实也不难,只是本人不得不承认,编码能力有限,没能现场搞定,代码在文章结尾已附上)

  5. 紧接着的题也让我有想放弃的想法,因为这题是根据写出的String.Replace()方法进行测试用例的设计,按我正常的逻辑(仅限于本人的思维,不表示正常人的正常逻辑思维)思考,上一题都没写出来的话,这题应该是做不到的吧。可是这个念头很快就打消了,开国际玩笑吖,测试是我本行,开发我甚至可以一窍不通,用控制台实现Hello World我可以完全不会,可是测试怎么能放弃,好不容易看到一道题考测试耶~立刻稀里哗啦写了一通我小小的脑袋瓜能想得到的一切可能用于测试的用例。

  6. 考题算是告一段落,ok~正式进入面试阶段,诸如自我介绍,根据之前工作的项目经验提问的一系列问题,我满脑子飘过的只有春晚大张伟唱的十几个字:天空飘来五个字,那都不是事儿~为啥,自己做过的项目,再怎么地,就算自己描述不清楚还不能把对方说迷糊么?好吧,我只是随口说说,还是会尽力将工作的一些情况如实禀报的。

  当问到自动化测试框架的时候,毫无意外地,搬出了我们工作所用的框架和Selenium类似这个看起来没有说服力的理由,只是一个不小心说到了框架在功能测试上帮助比较大,但后台数据貌似支持度不高,于是被面试官逮住问到,为什么框架不支持后台数据?为什么?为什么?突然满脑子的问号浮在了我脸上,不记得我嘴有没有嘟鼓起来(我郁闷的时候很容易嘟嘴),我有病啊,没事说什么对后台数据支不支持,别人写的框架,别人搞出来的问题,我怎么知道是对方不乐意写出对后台数据的支持还是没开发完成这个框架啊?可是我总不能这么回答吧,于是,稍作思考,这个时候就特别嫉妒自己的小聪明,怎么会如此聪明的脑袋呢?哈哈,也许有一秒钟时间我在微笑,然后回答到:因为我们这个框架是针对UI层设计的,主要是对页面进行操作并验证相应的功能,因此没有提供对后台的支持(不知道正确答案是什么,反正我就这么回答了,是正确的最好,不正确至少从我的角度忽悠了他,至于他是不是被忽悠到了,对我来说并不那么重要)。

  回到家,把面试的事抛到了脑后,毕竟结束了,不管结果如何,接下来可能要面对的是IBM的面试,IBM要求的自动化脚本是由Java编写的,这门对我来说可以算是完全陌生的语言(别鄙视我大学学过还敢说自己不知道这门语言),反正现在能看懂它已经是算是我的极限了,也许只能听天由命吧。

  继续翻开《C#函数式程序设计》的书籍(自己已经好几天没有在博客上跟进这本书的读书笔记了,这几天也不知道自己在干嘛,这本书被华丽丽抛在了脑后),突然就又想起了面试过程中没有回答出来的题,String.Replace()方法的实现,不能调用API。面试的时候没有掏出手机作弊,这个时候也该搜索下答案了。

  不打开百度搜索不知道,原来通过反编译查看String的Replace方法是内置实现,而无法查看具体实现源码,因此无法推断出String的 Replace方法是如何实现的。尼玛,故意的吧,反编译都看不到的源码实现,让我来实现,我又不是编写Visual Studio的程序员。好吧,抱怨归抱怨,多理解一点东西总归不是错的,其实看完代码,发现自己的思路还算没有走偏,而且其实实现起来并不那么难,看来真的是自己编码能力十分有限呢,咳,好吧,接下来的时间里继续提升自己的编码能力才是王道。

   代码如下:

  [ThreadStatic]

  static char[] mTempChars;

  protected static char[] GetTempData()

  {

  if (mTempChars == null)

  mTempChars = new char[1024 * 64];

  return mTempChars;

  }

  public static string Replace(string value, string oldData, string newData)

  {

  char[] tmpchars = GetTempData();

  int newpostion = 0;

  int oldpostion = 0;

  int length = value.Length;

  int oldlength = oldData.Length;

  int newlength = newData.Length;

  int index = 0;

  int copylength = 0;

  bool eq = false;

  while (index < value.Length)

  {

  eq = true;

  for (int k = 0; k < oldlength; k++)

  {

  if (value[index + k] != oldData[k])

  {

  eq = false;

  break;

  }

  }

  if (eq)

  {

  copylength = index – oldpostion;

  value.CopyTo(oldpostion, tmpchars, newpostion, copylength);

  newpostion += copylength;

  index += oldlength;

  oldpostion = index;

  newData.CopyTo(0, tmpchars, newpostion, newlength);

  newpostion += newlength;

  }

  else

  {

  index++;

  }

  }

  if (oldpostion < length)

  {

  copylength = index – oldpostion;

  value.CopyTo(oldpostion, tmpchars, newpostion, copylength);

  newpostion += copylength;

  }

  return new string(tmpchars, 0, newpostion);

  }

  好久没写这么长的文章了,尤其是和技术相关的文章,这次面试,权当给自己一个经验的积累吧,继续努力准备接下来几场我觉得对我来说比较重要的面试才好。顺便说一下,感谢今天雨后的阳光,让我迈出脚步,迎接了这么一场收获颇多的面试~是天佑我,衷心感谢命运对我再一次的眷顾!

【笔试题目及难题解决方案笔试经验】相关文章:

java笔试题,笔试题目分享08-10

LG技术笔试笔试经验01-14

2015美的的笔试题及笔试经验08-05

名企笔试经验笔试常识07-17

安永笔试经验及笔试细节03-16

ABB测评的笔试题目和经验分享08-10

杜邦的笔试题目和经验总结08-10

银行2014笔试题目及经验分享03-16

人人网笔试、面试题目经验07-17