如果你只想获取一些面试准备经验,那么你可以直接跳到文章的最后部分。
问题如下:
1. 求从10到100中能被3或5整除的数的和
2. 将一个字符串逆序,不要使用反转函数
3. 反转一个栈
问题解决的步骤和错误:
1. 解析问题,手工“解决”
(1)对于孩子和成年人而言,这一步对前者来说更困难
(2)然而,如果要求误解了问题的学生来重读这个问题,孩子们的表现会超过成年人
2. 想出一个伪代码算法
(1)在这一步,学生的表现比成年人要好。
(2)让人震惊的是,很多成年人不知道如何用他们偏好的编程语言从一个字符串中抽取一个字符。
3. 将算法转换为代码
(1)我们有一些C++程序员,他们不知道方括号以及一些C程序员,他们采用指针运算,但是却失败了。
(2)更让人吃惊的是,当他们允许查阅java API 文档 或者使用参考书,很多成年人无法找到合适的文档来帮助解决问题。
(3)的确,一些中学生已经忘了如何使用栈或者实例化一个队列,但是,所有人都能够在适当的时间内通过查阅找到解决办法。
(4)会写代码的成年人(曾经会)经常会超过时间限制。
有很多糟糕的代码编写者,即便你也是其中一个,也不要害怕
可以尝试下面的方法:
1. 不停练习,直到你能快速且正确地写出小的代码片段。没有任何理由用自己喜欢的语言写不出一个双循环。找一些带有例子的小的代码智力题,你能在一分钟以内理解这些问题。对这类问题做成百上千遍的练习(不仅仅是几十遍,切记!)。
2. 为课本上的每个算法写一个用例列表。一个共同的错误就是仅仅记住计算复杂度表。但是看一些算法的使用例子,例如 A*搜索在哪些地方使用,这比学习代码本身要有用的多。
3. 至少做一个能逼迫你使用与工作相关的接口/用例的大型项目。语言通常不是很重要,而且独自写一个大型工程能够强迫你去学新的设计模式以及远离遗留代码维护。代码面试是智力测试。所以它们很少关注具体的体系。
4. 让自己接触更优秀的程序员。随着 CS 岗位的快速增长,应对“柠檬市场”的当前解决办法就是技术面试。但是同样也有其他的方式来反映被面试者的信息。例如,对热点话题、博客、技术的知识可以反映出对重要问题的意识。类似地,对恐怖故事采用幽默的代码书写方式,可以反映出经验和处理新问题的能力。幸运的是,在线代码编写社区随处可见,所以唯一地障碍就是是否肯花时间和保持谦虚。
问题如下:
1. 求从10到100中能被3或5整除的数的和
1
2
3
|
int
sum =
0
;
for
(
int
i =
10
; i <=
100
; i++)
if
( i %
3
==
0
|| i %
5
==
0
) sum += i;
System.out.println(sum);
|
2. 将一个字符串逆序,不要使用反转函数
1
2
3
4
|
String message =
"he saw a racecar"
;
StringBuilder rev =
new
StringBuilder();
for
(
int
i = message.length()-
1
; i >=
0
; i--) rev.append(message.charAt(i));
System.out.println(rev.toString());
|
3. 反转一个栈
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import
java.util.*;
public
class
MyProgram
extends
com.ktbyte.submit.Coder {
public
static
void
main(String[] args) {
Stack items =
new
Stack();
items.push(
"he"
);
//he is at the bottom of the stack
items.push(
"saw"
);
items.push(
"a"
);
items.push(
"racecar"
);
reverseStack(items);
//now he is at the top
//print in order pushed:
while
(items.size()>
0
) System.out.println(items.pop());
}
public
static
void
reverseStack(Stack stack) {
Queue rev =
new
LinkedList();
while
(stack.size()>
0
) rev.offer(stack.pop());
while
(rev.size()>
0
) stack.push(rev.poll());
}
}
|
问题解决的步骤和错误:
1. 解析问题,手工“解决”
(1)对于孩子和成年人而言,这一步对前者来说更困难
(2)然而,如果要求误解了问题的学生来重读这个问题,孩子们的表现会超过成年人
2. 想出一个伪代码算法
(1)在这一步,学生的表现比成年人要好。
(2)让人震惊的是,很多成年人不知道如何用他们偏好的编程语言从一个字符串中抽取一个字符。
3. 将算法转换为代码
(1)我们有一些C++程序员,他们不知道方括号以及一些C程序员,他们采用指针运算,但是却失败了。
(2)更让人吃惊的是,当他们允许查阅java API 文档 或者使用参考书,很多成年人无法找到合适的文档来帮助解决问题。
(3)的确,一些中学生已经忘了如何使用栈或者实例化一个队列,但是,所有人都能够在适当的时间内通过查阅找到解决办法。
(4)会写代码的成年人(曾经会)经常会超过时间限制。
有很多糟糕的代码编写者,即便你也是其中一个,也不要害怕
可以尝试下面的方法:
1. 不停练习,直到你能快速且正确地写出小的代码片段。没有任何理由用自己喜欢的语言写不出一个双循环。找一些带有例子的小的代码智力题,你能在一分钟以内理解这些问题。对这类问题做成百上千遍的练习(不仅仅是几十遍,切记!)。
2. 为课本上的每个算法写一个用例列表。一个共同的错误就是仅仅记住计算复杂度表。但是看一些算法的使用例子,例如 A*搜索在哪些地方使用,这比学习代码本身要有用的多。
3. 至少做一个能逼迫你使用与工作相关的接口/用例的大型项目。语言通常不是很重要,而且独自写一个大型工程能够强迫你去学新的设计模式以及远离遗留代码维护。代码面试是智力测试。所以它们很少关注具体的体系。
4. 让自己接触更优秀的程序员。随着 CS 岗位的快速增长,应对“柠檬市场”的当前解决办法就是技术面试。但是同样也有其他的方式来反映被面试者的信息。例如,对热点话题、博客、技术的知识可以反映出对重要问题的意识。类似地,对恐怖故事采用幽默的代码书写方式,可以反映出经验和处理新问题的能力。幸运的是,在线代码编写社区随处可见,所以唯一地障碍就是是否肯花时间和保持谦虚。