剑指offer

面试的流程

  • 能写单元测试,加分
  • 答非所问,不懂装懂,大忌
  • 准备几个问题

面试的三个环节

行为面试 5-10分钟

  • 性格特点
  • 深入了解项目经历
    • 项目介绍方法
      • 简短的项目背景
      • 自己完成的任务(参与 != 负责)
      • 为了完成任务自己是怎么做的
      • 自己的贡献,最好能用数字加以说明
    • 追问问题:
      • 遇到最大的问题是什么,怎么解决
      • 学到了什么
      • 和其他团队成员有什么冲突,怎么解决的
  • 简短的介绍
  • 对技能的分级
    • 了解:只是学过,但是没有做过实际的项目
    • 熟悉:
      • 大部分的技能
    • 精通
      • 不要随便用
      • 如果有人请教这个方面的问题有信心解决,才能用精通
  • 为什么跳槽
    • NG答案
      • 老板刻薄
      • 同事难相处
      • 加班频繁
      • 工资太低
    • 可以尝试的
      • 对现在的工作失去了激情,需要寻找一份有挑战

技术面试 40-50分钟

  • 基础知识
    • 数据结构,算法,编程语言等
  • 能写出清晰,完整的代码
  • 能思路清晰的解决问题
    • 简单问题-> 清晰代码
    • 复杂问题-> 画图,举例等分析
  • 能从时间空间方面优化代码
    • 主动提问,弄清要求
  • 沟通能力,学习能力,发散思维能力

基础

  • 对一门编程语言的掌握
  • 数据结构
    • 链表,树,栈,队列,哈希表
    • 尤其是链表和二叉树
  • 查找,排序算法等

高质量代码

  • 边界条件,特殊输入
  • 简单的问题需要完整的考虑问题,考虑特殊条件
  • 代码是不是够鲁棒

清晰的思路

  • 举几个简单的例子让自己理解问题
  • 图形抽象数据结构
  • 把复杂的问题分成简单的子问题

优化效率的能力

  • 不能放弃思考
  • 需要知道怎么计算效率
    • 比如斐波那契数列,用top-down就比bottom-up的重复计算多出很多
  • 知道各种数据结构的优缺点

学习能力

  • 最近在看什么书,学习到了什么新技术
  • 抛出一个新概念,理解并解决相关的问题

提问环节 5-10分钟

  • 不要问和自己职位没关系的问题
  • 不要问薪水(指技术面试)
  • 不要立即打听面试的结果
  • 与应聘的职位和项目相关的问题
    • 提前了解公司信息
    • 注意面试时对方介绍的内容

第二章 面试的基础知识

编程语言

驱动C,linuxCpp,windowsC#,跨平台Java,苹果O-C,小型应用Perl,Python

C++

  • sizeof(也就是拿着准备好的概念题)
    • 空类型的sizeof,instance需要占据一定空间,占用多少编译器决定
  • 给一段代码,看是否能够运行等
  • 定义一个类型或实现类型中的成员函数

相关书籍

  • Effective C++(面试之前突击)
  • C++ Primer(语法的全面了解)
  • 深度搜索C++对象模型(了解对象内部)
  • The C++ Programming Language(深入了解)

C\

  • 主要会问C++和C#的区别

相关书籍

  • Professional C#(写给已经有其他经验的程序员)
  • CLR Via C#

数据结构