到新单位快两月了,趁还记得面试时的一些题目,总结并记下,以资园友参考!
1.判断单链表是否有环,这题太经典了,有好几家公司面试问到这题。
2.数字舍入,精确到0.05,即五分钱,如,12.34 舍入后 12.35、12.36舍入后12.40、
12.30舍入后12.30、12.40舍入后12.40。
3.请用一个循环将乘法表打印出来。
4.一个M*N的方格,里面含有多少个矩形?如2*2的方格,则含9个矩形。
5.现在A有方法MethodA,B继承A,并声明new MethodA,C继承B,也声明new MethodA,
请问如何在C类中访问A类中的MethodA?(不要写个代码来测试,思考下,面试时可没计算机)
6.请写一个方法,将字符串翻转,如Hello,World!翻转为!World,Hello 。
7.如何在栈里声明对象?(.net)
8.单链表,如何找到中间节点?如何找到倒数第N个节点?
9.如何判断一个数是否为2的n次方?效率越高越好。
10.请用多线程实现生产消费者模型。
未完待续...
先付上答案:
1.单链表找环的解法有两个思路,一个是保存遍历过的指针,然后进行查找;一个是快慢指针的方法。
2.这道题是去一家做金融行业软件的公司面试的题目,解法如下:
2 {
3 decimal hundredD = decimal.Multiply(d, 100M);
4 decimal intD = decimal.Floor(hundredD);
5 decimal diff = hundredD - intD;
6 decimal result = decimal.Zero;
7 if (decimal.Equals(diff, decimal.Zero))
8 {
9 result = intD;
10 }
11 else if (diff <= 0.5M)
12 {
13 result = intD + 0.5M;
14 }
15 else if (diff > 0.5M)
16 {
17 result = intD + 1M;
18 }
19
20 return decimal.Divide(result, 100M);
21
22 }
3.
{
int line = 1;
for (int i = 1; i <= line && line <= 9;)
{
Console.Write("{0} * {1} = {2}\t", i, line, i * line);
if (i == line)
{
line++;
i = 1;
Console.WriteLine();
}
else
{
i++;
}
}
}
4.?
5.?
6.这个应该没啥考的,就看你写代码是否工整,检查边界。
7.未解,我回答的是不能在栈里什么声明对象,应该都是托管对象,应该只能在堆上分配对象。可是他问出这个问题,着实有些疑惑!同行们可一起深究下!
8.这道题的思想是快慢指针法,查找中间节点,只要快指针每走两步,慢指针跟上一步就行能找到。倒数第N个则快指针先走N步,然后慢指针开始移动。
9.
{
return (num & (num - 1)) == 0;
}
10.干活了,晚上续上。