能力与素养恬阔与平时,欣赏与 Offer 展露在未来!

1. 牢固的基础知识

面试官通常采用 概念题、代码分析题、以及编程题这 3 种常见题型来考察应聘者对某一编程语言的掌握程度。

数据结构是面试考察重点。 其中 链表是面试题中使用频率最高的一种数据结构。 面试官加大难度的话就可能选用与 树(二叉树)相关问题,其中 递归调用密切相关,队列在遍历时也会用到。

算法是面试官喜欢考察的另一个重点。

查找(二分查找) 和排序(快速排序与归并排序)是面试官经常考察的算法。
回溯法很适合解决迷宫问题,
宽度优先搜索很适合最短路径问题,
求一个问题的最优解,考虑动态规划
如果在动态规划分解子问题中,每一步都存在最优解的选择,那么贪心算法是比较合适的。

位运算 是针对二进制数字的运算规律。只要应聘者熟练掌握了 二进制的 与,或,异或运算及 左移,右移操作,就能解决与位运算相关的问题。

2. 高质量的代码

代码的规范性

  • 清晰的书写 : 写代码前应该形成清晰的思路并把思路用编程语言清晰的写出来。
  • 清晰的布局 : 代码缩进,代码循环,判断较多时代码布局应该格外注意。
  • 合理的命名 : 完整的英文单词组合命名变量和函数,需要让面试官一眼就能得知其意思。

代码的完整性: (建议编写代码前 将单元测试体现在代码上方)

  • 功能测试: 完成基本的功能,其次应该突破常规思维的限制,看到更多的功能需求(比如 整数:就应该考虑 正负,大数问题等等)
  • 边界测试: 我们在 考虑 输入时,可以尝试输入给定测试的边界值,以测试代码是否十分完整。
  • 负面测试(错误输入):由于传参输入代表了用户输入,不规范输入的问题就一定会有体现,因此避免 负面测试与做出合理的错误处理是十分有必要的。

3 种 错误处理的方法

  • 函数用返回值告知调用者是否出错(比如指针返回值返回空指针)
  • 错误发生时设置一个全局变量,这样函数返回值就可以进行传递。 忘记检查全局变量是很大的问题,哈哈!!
  • 异常捕获,可以显示的去使用 try catch 语句对正常运行的程序块 和 处理异常的代码块,逻辑比较清晰,但是抛出异常的执行会打乱正常的代码顺序,对程序的性能有很大的影响。

代码的鲁棒性:

鲁棒性是指程序能够判断输入是否合乎规范要求,并对不符合要求的输入给与合理的处理。

提高代码的鲁棒性的有效途径是进行防御性编程,防御性编程是一种编程习惯,是指预见什么地方会出现问题,并为这些可能出现的问题制定处理方式。

最简单的防御性编程: 函数入口验证用户输入是否符合要求。



3. 解决问题的思路

画图让抽象问题形象化:

画图时在面试过程中应聘者用来帮自己分析,推理的常用手段。很多面试题很抽象,我们画图以辅助自己观察与思考,在面试的时候,应聘者需要向面试官解释自己的思路,这时光口头未必能说清,画几幅图形,看着图形一边讲解,面试官就能更加轻松地理解应聘者的思路。这对应聘者是有益的,面试官也会觉得他有很好的沟通能力。

举例子能让抽象的问题具体化:

很多算法相关的问题都很抽象,未必一眼就能看出它们的规律,这时我们不妨多举几个例子,一步步模拟运行的过程,说不定就能发现其中的规律,从而找到解决问题的窍门。

分解问题是解决复杂问题的有效方法

如果我们遇到的问题很大,则可以尝试先把大问题分解成小问题,然后递归地解决这些小问题,分治法,动态规划都是分解问题的思路。

也可以呢,分解解决问题的步骤,一步步地设置函数完成整个问题的解决。


4. 优化时间与空间效率

每个人都希望呢,软件的相应时间尽可能短一点,所以软件公司与面试官都非常重视时间性能。
面试官除了考察应聘者的编程能力,还关注应聘者有没有不断优化效率,追求完美的态度与能力。

  • 我们的编程习惯对代码的时间效率有很大影响。 比如 c++程序员要养成 引用(指针)传递复杂类型参数的习惯,如果使用值传递,从形参到实参会产生一次复制操作,我们应该避免这样的操作。
    如果我们没有养成好的编码习惯,那么我们写出的代码可能会让面试官大失所望。

  • 循环与递归:要效率就要尽可能选择循环来实现,递归的过程会从栈区分配内存保存参数,返回值以及局部变量,而且出栈入栈的操作也是需要一定的时间的。
    因此,我们可以用递归的思路来分析问题,但是写代码可以用数组来保存中间结果基于循环实现。

  • 数据结构与算法功底:选择合适的数据结构与算法来解决问题可以对效率上有不同的效果体现。

  • 敏捷的思维能力与追求完美的激情:我们应该对面试官给出的问题迅捷地给出回应(直观的解法),之后慢慢再追求更好的解决办法。

  • 学会与面试官沟通时间与空间的均衡

5. 工作中面试中的各项能力。

  • 沟通能力,学习能力: 对这两个能力的考察贯穿面试的始终,面试官不仅会留意我们回答问题时的言语谈吐,还会关注我们是否能抓住问题的本质从而提出有针对性的问题。通常面试官认为善于提问的人有较好的沟通能力和学习能力。
  • 知识迁移能力:面试官常常会给我们出一道简单的题目,之后希望我们能从解决简单问题中得到启发,最终解决较为复杂的能力,另外我们需要平时有一定的积累,做完一道题就要总结解题方法
  • 抽象建模能力: 日常生活中提炼的问题,我们可以使用适当的数据结构表述模型,再分析模型的内在规律,从而确定计算方法。
  • 发散思维能力:跳出常规限制的思路,从不同角度去尝试新的办法。


猜你喜欢

转载自blog.csdn.net/chongzi_daima/article/details/106200850