《SQL基础教程》简要总结 《设计师要懂心理学》读书笔记 MySQL与MariaDB学习笔记 WDT (Folly) 安装指南 -- CentOS 7 [solved]Page build failed(Jekyll) 数据包过滤及分析实例 tshark tcpdump Scala Tour 学习总结 “Docker容器和容器云”读书笔记(1) “Docker Practice”读书笔记 “图解基础设施设计模式”小结 “图解服务器端网络架构”小结 Python网络安全编程 数据包解析笔记 华为挑战赛(1) DDoS攻击防御与云服务 基于网络回溯分析技术的异常行为分析 “Linux程序设计”小结(进程间通信) C语言编程规范(华为软件精英挑战赛) 2017阿里在线编程题--单源最短路径问题 2017年阿里在线编程题-- 数串分组 Uinx/Linux上的帮助查询命令 你懂C,所以C++不在话下 一篇特别长的总结(C专家编程) 程序员面试金典--笔记(精华篇) C陷阱与缺陷--笔记 半小时搭建电子商务网站--opencart linux网络知识和工具(持续更新) 网卡参数查询及设置工具ethtool 高性能流量生成工具trafgen(DDoS模拟) Linux流量控制工具TC 流量控制工具TC详细说明 tcpdump过滤数据包,结果不对? Lecture 网络攻击与防御技术笔记 gotgit-git权威指南 高效使用MacOS所要知道的 shell内置字符串处理 配置ntp(知其所以然) 360黑客攻防技术分享会--记录 中毒U盘恢复--快捷键病毒 Tor--anonymity network介绍(PPT) IBM bluemix 再读《Linux Shell脚本攻略》 linux shell 学习摘记(9) linux shell 学习摘记(8) linux shell 学习摘记(7) linux shell 学习摘记(6) linux shell 学习摘记(5) linux shell 学习摘记(4) linux shell 学习摘记(3) linux shell 学习摘记(2) linux shell 学习摘记(1) firefox vim 插件 vimperator A Byte of Vim 笔记 windows注册表小知识 安全测试工具篇(开源&商业) 安全及性能测试工具(网站收集) 性能测试工具 屡试不爽的“3个”iPad使用技巧 Shell Shortcuts(和Tab键一样实用) vim--自动添加jekyll post信息头 vim 自动给文件添加头部信息 GitHub Tips (很实用,值得收藏) Linux路由、防火墙、NAT命令

程序员面试金典--笔记(精华篇)

2017年01月27日

原文链接:http://codeshold.me/2017/01/cracking_interview.html

《程序员面试金典》 1-7章的总结
相关读物《金领简历:敲开苹果、微软、谷歌的大门》(Cayle Laakmann McDowell 盖尔 拉克曼 麦克道尔)careercup.com

面试流程

  1. 筛选面试 screening interview
    • 电话面试的可能性大
  2. 现场面试 on-site interview

  3. 准备时间表
  4. 面试评估流程
    • 一旦进入大型科技公司的面试环节,你之前的工作经验就不是特别重要了,但它可能会左右面试官对自己的看法
  5. 答题情况
    • 考量最终的解法是否最优,用时多久,代码整洁与否
  6. 常见的十大错误
    • 只在计算机上练习
    • 不做行为面试题演练(用心回顾以往的项目和经历)
    • 不做模拟面试训练
    • 试图死记硬背答案
    • 不大声说出自己的解题思路
    • 过于仓促
    • 代码不够严谨
    • 不做测试
    • 修正错误漫不经心
    • 轻言放弃
  7. 常见问题解答
    • 碰到熟悉的问题应该如是相告?
    • 应该使用哪种编程语言?
    • 面试结束后没有收到回复,是被拒了吗?
    • 被拒之后能否重新申请?可以的

面试揭秘

  1. 微软面试

  2. 亚马逊面试

  3. 谷歌面试

  4. 苹果面试

  5. Facebook面试
    • Etherpad或其他共享文档工具写些代码
  6. 雅虎面试

特殊情况

  1. 有工作经验的求职者
    • 在系统设计和架构架构方面应在简历中突出一些,面试的时候这方面的要求也应该高一些
    • 说说碰到过的棘手的bug?
  2. 测试人员及SDET

  3. 项目经理与产品经理
    • 处理含糊情况(面对含糊情况不会手忙脚乱、不知所措)
    • 以客户为中心(态度层面)-- 站在客户角度来判断问题
    • 以客户为中心(技术层面)
    • 多层次交流能力(怎么向祖母及时TCP/IP的问题)
    • 对技术的热情
    • 团队合作/领导能力(说说自己是怎么处理团队成员没能按进度完成工作的情况。)
  4. 创业公司
    • 最好的申请方式是内部推荐
    • 简历--能够在创业环境中卖力地工作
    • 大公司注重在软件开发上的整体职业素养,创业公司更注重自己的个性契合度、技术技能和此前的工作经验

面试之前

  1. 积累经验
    • 找实习,“微软探索者”、“谷歌编程夏列营”
    • 开拓一些业务或项目,自己的想法,然后主动的做
  2. 人际网
    • meetup.com
    • 主动和人打招呼
    • 助人为乐
  3. 写好简历
    • 有针对性
    • 一张纸
    • 项目经历 2-4个
    • 编程语言 java(非常熟练), C++(熟练), JavaScript(有过使用经验)

行为面试

1. 准备

  • 表格

    常见问题 项目1 项目2 项目3 项目4
    最难的部分        
    有什么收获        
    最有意思的部分        
    最难解的bug        
    最享受的过程        
    与团队成员的冲突        
  • 针对问题,回想小故事并将小故事浓缩成几个关键字
  • 项目失败的经历
  • 你需要说服团队成员的事例
  • 你有哪些缺点
    • “有时候我可能对细节不够重视。好的一方面是我反应迅速、执行力强,但不免会粗心大意而犯错。有鉴于此,我总会找其他同事帮忙检查自己的工作,确保不出问题。”
  • 项目中最难处理的问题是什么
  • 应该问面试官的问题
    1. 真实的问题
      • “你每天有多少时间花在写代码上?”
      • “你一周要开几次会?”
      • “整个团队中,测试人员、开发人员和项目经理的比例是多少?他们如何互动的?团队怎么做项目规划?”
    2. 有见地的问题
      • “我注意到你们使用了X技术,请问你们是如何处理Y问题的?”
      • “为什么你们的产品选择使用X协议而不是Y协议,对然有……好处,但存在……问题,很多公司并未采用该协议。”
    3. 富有激情的问题
      • “我对可扩展性很感兴趣。请问你从事过分布式系统方面额工作吗?有哪些机会可以学习这方面的知识?”
      • “我对X技术不是太熟悉,不过听上去是个不错的解决方案。你能给我多讲讲它的工作原理吗”

2. 应对

  1. 力求具体,切记自大(具体的故事)

  2. 省略细枝末节
    • “在研究最常用的用户行为并应用Rabin-Karp算法后,我设计了一种新算法,在90%的情况下搜索操作的时间复杂度由O(n)降至O(logn)”
  3. 回答调理清晰
    • 主题先行(直接先说结果)
    • S.A.R.法(情景、行动、结果)

技术面试

1. 准备

  1. 在纸上写算法代码,在纸上测试代码,将代码原样输入计算(记录犯过的错误),模拟测试(mock interview, careercup.com)

  2. 必须掌握的知识
    • 数据结构:链表、二叉树、单词查找树(trie)、栈、队列、向量/数组列表、散列表等
    • 算法:广度优先搜索、深度优先搜索、二分查找、归并排序、快速排序、树的插入/查找等
    • 概念t:位操作、单例设计模式、工厂设计模式、内存(栈和堆)、递归、大O时间
  3. 记忆幂表
    • 2^10, 1K, 近似一千, 1024
    • 2^20, 1MB, 近似一百万, 1048576
    • 2^30, 1GB, 近似十亿
    • 2^40, 1TB, 近似一万亿(trillion)
    • 一个将每个32位整数映射为布尔值的散列表可以把一台计算机的内存填满(2^32=4GB)
  4. 其他编程语言知识(参考公司的要求)

2. 应对

  1. 提问
    • 以消除题目的疑义
    • 例如就“设计一种列表的排序算法”可连续提问
  2. 设计算法
    • 考虑时间复杂度、空间复杂度
    • 大量数据的情况、算法的限制
    • 是否善用了“特定数据”(面试官指定的)
  3. 先编写伪代码

  4. 编写代码
    • 多用数据结构
    • 有条不紊、参数检测
  5. 测试
    • 先理清代码失效的原因
    • 极端用例(0、负值、空值、最大值、最小值)
    • 用户错误
    • 一般用例

3. 算法题解法

  1. 举例法
    • 求任意时刻时针和分针之间的角度
  2. 模式匹配法
    • 一个有序数组循环移动后,找出其中最小的元素
  3. 简化推广法
    • 从一本杂志里剪下一些单词可以拼凑成一封勒索信,如何判断该勒索信是否由某本杂志里的单词组成
  4. 简单构造法
    • 递归,打印某个字符串所有可能的排列组合
  5. 数据结构头男风暴
    • 随机生成一些数字,并保存到一个数组中,如何跟踪数组中的中位数

4. 好代码的建议

编写一个函数检查某个二进制数(以字符串形式传入)是否等于以字符串表示的十六进制数

  1. 多用数据结构(如多项式的加减)
  2. 适当重用代码
  3. 模块化
  4. 灵活、健壮(面试官要求编写代码检查谁是三连棋的赢家,但可以假定其实NxN的棋盘)
  5. 错误检查

面试结果

  1. 录用
    • 可申请延长回复期限(若还在苦等其他公司的回音)
    • 拒绝录用,可以阐明自己做当下最佳选择的原因
  2. 被拒
    • 询问什么时候可以再申请
    • 再申请时或下次面试时,需要注意哪些事项
  3. 薪酬
    • 签约奖金、搬家费及其他一次性津贴(总和除以预期服务的年限)
    • 各地生活成本差异(估算)
    • 年终奖(打听平均数)
    • 股票期权与补助金(收入除以预期服务年限)
  4. 谈判
    • 给出具体的“要价”,具体的金额
    • 开出比预期稍高的价码
    • 不要只盯着薪水(这往往不好改),可要求更多的期权或签约奖金
    • 使用合适的方式谈判,如电话
    • 先了解公司的等级制度,一定的级别对应一定的薪资范围
  5. 职业发展
    • 该公司能否增加履历的份量?
    • 是否提供了切实可行的转岗通道?
  6. 幸福指数
    • 产品:什么样的产品?和哪些人共事?
    • 经理和队友
    • 企业文化(如何做决策到整体氛围以及公司的组织架构,问问未来的同时如何描述)
    • 工作时常,每周会有多少,一天能用来写代码的时

入职准备

  1. 指定时间表,不要“温水煮青蛙”
  2. 打造人际网络
  3. 向经理寻求帮助,开诚布公的告诉主管自己的心迹

知识共享许可协议
SWF's Hacking Dreamonephone 创作,采用 知识共享 署名-非商业性使用 4.0 国际 许可协议进行许可。
© 2011-2017. All rights reserved by onephone. Powerd by Jekyll.