2022/9/13 某笔试复盘
选择2题,编程3题,问答2题。
题目感觉不太难,就是时间有点紧张,45分钟。
但是,我还是凉了(尴尬而又不失礼貌的微笑.jpg)。问了一下,说是问答题答的还可以,但是选择题答得不好,wtf,我直接人傻了,选择题我都没怎么多看俩眼,直接就过了,甚至后面我都已经不记得选择题是啥了。万万没想到,是选择题。
话不多说,直接上题
选择题
我仅仅模糊的记得:
第一道选择题考的主要是类的一些基础知识,第二道选择题是继承的一些知识,都是给一串代码,然后选答案的。
编程题:
1.按照给定的格式打印6*6的乘法口诀表(当时给懵了一下,花费了挺长时间,而且代码写的很烂,一点都不优雅)
题目所给的格式是这样的:
1 * 1 = 1 2 * 1 = 2 3 * 1 = 3
1 * 2 = 2 2 * 2 = 4 3 * 2 = 6
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18
4 * 1 = 4 5 * 1 = 5 6 * 1 = 6
4 * 2 = 8 5 * 2 = 10 6 * 2 = 12
4 * 3 = 12 5 * 3 = 15 6 * 3 = 18
4 * 4 = 16 5 * 4 = 20 6 * 4 = 24
4 * 5 = 20 5 * 5 = 25 6 * 5 = 30
4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
我当时代码大概是这样的:
for (int i = 1; i <= 6; i++)
{
for (int j = 1; j <= 3; j++)
{
Console.Write("{0} * {1} = {2}\t", j, i, i * j);
}
Console.WriteLine();
}
Console.WriteLine();
for (int i = 1; i <= 6; i++)
{
for (int j = 4; j <= 6; j++)
{
Console.Write("{0} * {1} = {2}\t", j, i, i * j);
}
Console.WriteLine();
}
后来又想了一种做法:
for(int i = 1; i < 13; i++)
{
if (i == 7)
{
Console.WriteLine();
}
for (int j = 1; j <= 3; j++)
{
if(i<=6)
Console.Write("{0} * {1} = {2}\t", j, i, i * j);
else
Console.Write("{0} * {1} = {2}\t", j+3, i-6, (i-6) * (j+3));
}
Console.WriteLine();
}
不过,最终,我还是不懂这一题要考什么知识。可能是编程基础吧?
2.这道题是让两个栈转为一个队列,要求是O(1);
这道题都老生长谈了,然后,很快就做出来了。
我当时代码应该是这样的:
public class MyQueue
{
Stack<int> inStack;
Stack<int> outStack;
public MyQueue()
{
inStack = new Stack<int>();
outStack = new Stack<int>();
}
public void Push(int value)
{
inStack.Push(value);
}
public int DeQueue()
{
if (outStack.Count == 0 || inStack.Count == 0)
{
Console.WriteLine("Queue is Null");
return -1;
}
while (inStack.Count > 0)
{
outStack.Push(inStack.Pop());
}
return outStack.Pop();
}
}</code></pre>
3.斐波那契数列。
也是老生常谈的话题,但是!我好久没撸算法,因为题中有时间要求,我只能草草写个递归了事,应该是没有达到题目的要求
我当时的代码:
public int Solution(int num)
{
if (num < 0) return 0;
if (num == 1 || num == 2) return 1;
return Solution(num - 1) + Solution(num - 2);
}
感觉好菜,只能想到最简单的方式(苦笑.jpg
这道题用动态规划,应该是比较好的一种解法:
动态规划
public int Solution(int num)
{
if (num < 2) return num;
int p = 0;
int q = 0;
int ans = 1;
for (int i = 2; i <= num; i++)
{
q = p;
p = ans;
ans = p + q;
}
return ans;
}
在leetcode上面我看见还有另外一种解法:
矩阵快速幂
这种解法读者自行去leetcode上看比较好,因为我自己也是一知半解的,XD
另,这道题还有另外一种解法,那就是直接给出数学通项公式(数学果然是最吊的!!!(破音))
(关于通项公式的定理以及证明读者请自行百度)
问答题:
一共俩道,都很简单
1.点乘和叉乘的意义。
开放性问题,自行百度
2.这个题目是给一串代码判断里面的错误的
内容就是判断foreach里增加或删除是否正确。
其实只要理解foreach底层是迭代器,就很容易理解foreach里面增删查改等操作是不是对的,实在不行,也自己写个代码,自个慢慢调试。
一年多之后的我翻博客看到这个,思索了一下,估计当时笔试面试纯粹是面一下,估计目标是KPI吧,毕竟题目过于简单,而且也无任何专业知识,几乎就是糊弄人的水平,我记得我是到公司前去面试的,甚至当时做完题,面试机会都没有,自问我当时也不是那么菜,之后找工作的兄弟们,还是要注意甄选,不要被这种恶心人的公司给打击到自己的自信。保持乐观,保持自信。
public MyQueue()
{
inStack = new Stack<int>();
outStack = new Stack<int>();
}
public void Push(int value)
{
inStack.Push(value);
}
public int DeQueue()
{
if (outStack.Count == 0 || inStack.Count == 0)
{
Console.WriteLine("Queue is Null");
return -1;
}
while (inStack.Count > 0)
{
outStack.Push(inStack.Pop());
}
return outStack.Pop();
}
}</code></pre>
public int Solution(int num)
{
if (num < 0) return 0;
if (num == 1 || num == 2) return 1;
return Solution(num - 1) + Solution(num - 2);
}
public int Solution(int num)
{
if (num < 2) return num;
int p = 0;
int q = 0;
int ans = 1;
for (int i = 2; i <= num; i++)
{
q = p;
p = ans;
ans = p + q;
}
return ans;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!