深圳市易流科技股份有限公司面经
技术面
面试官没有问什么自我介绍直接就问笔试题,先是问了我没做出来的题现在有什么想法,我说了自己的想法,然后一直就在问我如何改进这段代码,一共问了两个题,一个是我做出来的一个是没做出来的。
1.从一篇英文文章中找出他们单词重复次数最高的前十个单词(笔试未做出来)
我起初说是用HashMap做,然后将这些单词转存的数组中再对数组进行排序,自然而然就能得到重复次数最高的前十个单词以及他们的重复次数,接着他就问我如何改进,我第二个思路是可以在存储的过程中统计出重复次数最高的那个数量,然后依次在HashMap集合中去找,先找重复次数为最高次数的单词,接着再找重复次数为最高次数减一对应的单词,以此类推,直到找到前十个单词为止。
面试官继续询问,我说没有思路了,然后他就说我们在实际环境下这样统计会带来什么异常现象,我只是说了会存在内存问题,但是我感觉我这块回答的不好。
2.打印一个N行菱形,中间是空的(笔试做出来)
*
* *
* *
* *
*
第一个思路(笔试时的思路):第一行和最后一行是比较特殊,单独考虑,中间可以分为两部分一部分是第二行到第 (N / 2) + 1 行,也就是上半部分,第二部分是从第 (N / 2) + 2 行到倒数第二行,也就是下半部分,下半部分刚好和上半部分相反," * “左边的空格个数与行之间的关系是 (N / 2) + 1 - i (这里由下标从0开始还是从1开始决定,我就行数从1开始,后面的均是这样),然后打印左边 " * " ,至于中间的空格个数就简单了它的个数为 2 ^ (i - 1) - 1,然后打印右边” * " ,这样这道题就结束了
第二个思路与第一个思路差不多,优化了一点,发现第i行的空格个数刚好是第i - 1行的 " * " 以及他们之间的空格合起来的个数
第三个思路(面试官给我的思路):每一行" * " 和他的下一行或者上一行的" * "
的下标存在着+1或者-1之间的关系,我这里想到的是用数组来实现,因为数组对下标是最好处理的。
接下来就简单问了一下生活中的事情,平时是如何学习Java的,以及对自己的编程能力感觉怎么样,还有就是问了一下成绩有关的问题,基本上就是这些。
总结
通过我上面的介绍你会发现这个公司对你的知识储备没有去深究,更看中的是你的编程思想以及代码优化,因为我在面试过程中一直被问如何改进这个代码,以及这个代码会出现什么问题,尤其是优化代码,感觉全程都是在围绕这个面试。