最近一大厂T5级同事面试了几位初级程序员,据说简单的算法都没写出来。不知道是面试恐惧症还是怎么的,我想说的是:其实没必要紧张,面试官首先需要了解你的基础知识是否扎实,会问几道简单的具有逻辑思维的题目,不求你是否有更优解,只求你知道这么回事,脑子里不是空的,这是最低要求;其次是面试者对自己所做所学有钻研的能力,有自己的思维方式。办公室里流传着“授人以鱼不如授人以渔”的经典,所以说这位大神更加注重方法。最后,希望面试者好好准备,切勿心存侥幸。
下面给出2个简单基础的据说以上没通过的题目(相信你不到1分钟就敲出来了):
1、阶乘算法
public class FactorialDemo {
public static void main(String[] args) {
for (int counter = 0; counter < 10; counter++) {
System.out.printf("%d! = %d\n", counter, factorial(counter));
}
for (int counter = 0; counter < 10; counter++) {
System.out.printf("%d! = %d\n", counter, factorialLoop(counter));
}
}
/**
* 递归实现阶乘算法
*
* @param number
* @return
*/
public static long factorial(long number) {
if (number < 0) {
return -1;
} else if (number == 0) {
return 1;
} else
return number * factorial(number - 1);
}
/**
* 循环实现阶乘
* @param number
* @return
*/
public static long factorialLoop(long number) {
if(number < 0) {
return -1;
} else if(number == 0) {
return 1;
}
long result = 1;
for(long i = number; i > 0; i--) {
result *= i;
}
return result;
}
}
算法定义自己问度娘。(仅提供基础,若有更优算法思路那就更好了)
2、9*9 乘法表实现
public class MultiplicationDemo {
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + "*" + i + " ");
}
System.out.println();
}
}
}
运行结果:
针对算法,我自己有点狭义上的认知,算法有数学算法和计算机算法之分。但是现实工作中我们是经常将这两种混为一谈,反正都是解决实际问题的,谁为谁服务都是一样的。但是一到面试上,且不说面试官的技术深度,算法还是有必要再正规一下子了,免得闹笑话,要知道有时候有没有机会获得某个机会也是取决于你有没有认识。
我为了研究算法专门去百度算法入门需要看什么书籍,说法各异,所以我推荐你去看《漫画算法-小灰的算法之旅》,对入门的同学这一本就够了。我不是卖书的,是觉得这本书确实通俗易懂、很有趣。
当面试管问你算法怎么样时,你可以不必懂所有的算法,但是你必须懂基本的算法。
下一篇我列举下工作中常用的算法和面试中常问的算法。