目前研一在读,想找找暑假实习,自己代码能力不是特别强,所以寒假刷一刷剑指,做个简单的笔记
第一章 面试的流程
面试的三种形式:
一、电话面试
二、共享桌面远程面试:
考察编程习惯及调试能力,注意:
-
思考清楚再开始编码;
-
良好的代码命名和缩紧对齐习惯;
-
能够进行单元测试
三、现场面试:
-
行为面试环节:
性格特点,项目经理,自我介绍(主要学习、工作经历),注意准备几个问题
(1)项目经验:
Situation:简短的项目背景。比如项目的规模,开发的软件的功能,目标用户等。
Task:自己完成的任务。详细写,注意用词,“参与”和“负责”的区别。
Action:为了完成任务自己做了哪些工作,是怎么做的。详细写,做系统设计的可写系统架构的特点;做软件开发的可写基于什么工具在哪个平台下应用了哪些技术;做软件测试的可写手工测试还是自动化测试,黑盒测试或白盒测试。
Result:自己的贡献。最好用具体数据说明。功能开发:按时完成了多少功能;优化:性能提升百分比是多少;维护:修改了多少个bug。
常问问题:
-
你在该任务中碰到的最大问题是什么?你是怎么解决的?
-
从这个项目中你学到了什么?
-
什么时候会和其他团队成员(开发、测试、设计、项目经理等)有什么冲突?是怎么解决冲突的?
重点突出自己完成的工作以及取得的成绩。
(2)应聘者掌握的技能:
注意“了解”、“熟悉“和”精通“的区别。
-
了解:上过课或看过书,没有做过实际的项目。
-
熟悉:实际项目中使用某项技术已经较长时间,通过查阅相关文档可以独立解决大部分问题。
-
精通:得心应手使用某项技术,别人请教时,能有信心解决。
(3)回答“为什么跳槽”
话术:现在的工作做了一段时间已经没有太多激情了/现有工作对个人能力得不到锻炼,希望找一份更有挑战性的工作/能锻炼其他方面能力的工作。具体说为什么厌倦现在的职位,以及为什么对面试的职位感兴趣。
应对工资低的话术:我只管努力干活,相信公司不会亏待勤奋的员工。
-
-
技术面试环节:
应聘者需要具备的素质:
-
基础知识扎实全面,包括各种编程语言、数据结构、算法等
-
能写出正确的、完整的、鲁棒的高质量代码
-
能思路清晰地分析、解决复杂问题
-
能从时间、空间复杂度两方面优化算法效率
-
具备优秀的沟通能力、学习能力、发散思维能力等
(1)扎实的基础知识
-
编程语言:c++
-
数据结构:链表、树、栈、队列、哈希表,链表与二叉树常问
-
算法:查找、排序,二分查找、归并排序、快速排序、动态规划、贪婪算法
(2)高质量的代码
代码质量:边界条件、特殊输入
例:把字符串转换成整数:
-
特殊输入:非数字、正负号
-
最大正整数和最小附证书以及溢出
-
不能转换成整数时如何进行错误处理
-
输入空指针的特殊处理
例:求链表中的倒数第k个节点:
-
思路:用两个指针,第一个指针先指到头节点上,然后走k-1步,接着两个指针同时向链表尾部走,当第一个指针指向最后一个节点时,第二个指针指向的是倒数第k个节点。
-
注意节点总数小于k的情况和k为0的情况
技巧:写代码之前先想好测试用例
考虑边界条件、特殊输入(如nullptr指针、空字符串等)及错误处理。
(3)清晰的思路
找具体的例子、用图形表示抽象数据结构、基于递归的思路:分治法、动态规划
-
画图能使抽象问题形象化
-
举例使抽象问题具体化
-
分解使复杂问题简单化
(4)优化效率的能力
斐波那契数列:递归方法,时间复杂度n的指数,类推循环o(n)
(5)优秀的综合能力
沟通能力(低姿态)、学习能力
最近看什么书、学到什么新技术
抛出新概念,短时间的理解力、是否能解决问题
知识迁移能力:青蛙跳台阶
抽象建模能力、发散思维能力
-
-
应聘者提问环节
不问公司发展、不谈薪水、不打听面试结果
问与应聘职位或项目相关的问题:公司成立时间、主要业务、职位要求先了然于胸,留心面试官说过的话