4

cracking the code interview读书笔记

 3 years ago
source link: https://www.zenlife.tk/ctci.md
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

2016-03-19

面试主要考察的四个方面: 工作经验,文化匹配,编码技巧,分析能力。最重要的是后面两条。

大公司对工作经验的强调更少一些。小公司对文化匹配更关注一些。

注意以下方面:

  • 不要表现出自大,喜欢争辩,或者很没主见。
  • 花点时间准备简历相关的问题
  • 主要精力集中在编程和算法问题

容易犯的错误:

  1. 在电脑上练习
  2. 忽视行为测试
  3. 不做一些模拟的面试
  4. 面试过程中不把思考过程说出来,冷场
  5. 面试写代码太随意
  6. 改错误时不够细心

社招面试,对数据结构等基础知识考查,跟校招是一样的。不同的地方系统设计和架构问题等方面。

技术经理,还是需要很强的编程能力。除此之外,还有以下领域的技能:

  • 团队合作/领导力

面试背后的准备

尽管面试过程决定是否录用,简历是决定着面试机会的。

社交网络。

简历内容,长度。

工作经验要用强调号,角色,成就,按以下格式写:"Accomplished X by implementing Y which led to Z"。做了什么事,怎么做的,结果是什么。对结果描述尽量是可衡量的。

项目选择2-4个最重要的。描述什么样的项目,用到什么语言和技术。不太放多。

编程语言和软件,不要傻B到写会用office。Linux或者Visual Studio可以写,但其实影响不大。语言可以写上专家/精通/有使用经验。

不要有错别字!

行为问题准备

一般会是这种形式:"你最xxx的是xxx",比如遇到的最大的挑战是什么?学到什么?做的最有趣的事是什么?碰到的最难的Bug是什么?过得最快乐的时光是?跟团队最大的冲突是?

有些可以根据简历中写的东西来回答,准备一个好故事。如果是电话面试,推荐可以放这张纸,弄一个这样的表格。这样有一些关键字就可以提示自己如何回答。

其它的问题包括,失败,或者需要说服他人。一般面试leader或者管理岗位更容易碰到。可以做另一张表格。

最大的缺点?给一个真实的缺点,而不是说“我最大的缺点是工作太努力”,这会被认为过于自大,不承认失败。

要问面试官的问题。

“你工作多久了?每周开几次会?团队接下来计划的项目是?“ —-问这些问题可以了解公司日常生活是什么样的。

"我注意到你们使用了X技术,你们是如何处理Y问题的?""为什么选择X协议而不是Y协议?我知道它有A.B.C这些好处,但是也有D问题?" —问这类问题可以突出技术方面。

“我对scalability特别感兴趣。你有这方面背景么?或者有什么样的机会可以学习?“我对X技术不太熟,但是听起来它很有趣。你可以跟我讲下它是如何工作的么?” —突出对工作的热情

回答问题时的建议:

  • 要突出自己,又不能给对方自大的感觉。
  • 描述不要太细节,说关键点
  • 回答要有条理。S.T.A.R

如何准备技术题目?

  1. 独立解决。考虑时空间效率。问自己是否可以时间换空间或者反之。
  2. 在纸上写算法。
  3. 在纸上测试自己的代码。
  4. 纸上代码原样输入到电脑。

数据结构方面:链表,二叉树,Trie,栈,队列,数组,哈希表

算法:深度优先,广度优先,二分搜索,归并排序,快排,树的插入查找

概念:位操作,单例模式,工场模式,内存(堆、栈),递归,大O表示

设计算法时一定不要忘记了,时空间复杂度?如果数据量非常大会怎么样?有什么限制,是否做了正确的取舍?哪些取舍在哪些场合更重要?推荐的做法是,最先给一下暴力的答案。然后再去优化。

解题方法:举例;模式匹配;简化和泛化;构建基本情况;数据结构头脑风暴

随机生成的数字,存储在可扩展的数组里。如何跟踪中位数。用两个堆,较大的数放在小顶堆,较小的数放在大顶堆。

好的代码:正确、高效、简单、可读、可维护

offer相关

截止时间通常是1到4个星期,这里都可以要求延长。拒绝offer时,给一个不带冒犯性的,又合乎逻辑的理由。被拒绝时,对招聘者付出的时间表示感谢,解释你很失望但对他们的工作表示理解,询问什么时间可以重新申请这家公司。

考虑职业规划:这家公司的名字写在我简历上会怎么样?我能学到多少东西,是否能学到相关的东西?升职计划是怎样的?开发者的职业提升是怎么样的?公司和团队是否成长?如果要离开时,是否会有其它合适的公司,我该去哪?

公司的稳定性不重要。重要的是如果你被裁掉了,是否可以相对容易地再找份新工作。

工作是否会开心:产品。领导和团队。公司文化。工作时间是多长。

谈判:Just Do It,没什么损失。你有其它的候选,他们可能失去你。说具体的数据,想要加多少,而不是想要更多。来回,可能公司不会给你想要的那么多,但可能是当前的和想要的一个中间值。电话沟通>邮件沟通>找个中间人。

规划,如果你干了五年,而简历在后三年没什么可写的,那为什么不在二年时离开。思考十年后该是什么样,为了达到那样,每一步该做什么。每一年,都要思考下一年的经验对自己事业的提升。

关系网,与团队和领导保持联系。员工离开时,与他们保护联系。你的朋友,你的朋友的朋友。帮助他们,这样在需要的时候他们可能帮到你。

对自己诚实,想清楚自己到底想要什么。

Q:NxN的矩阵,旋转90度。O(1)空间复杂度。 A:上下交换,对角线交换

MxN的矩阵,如果里面其中一个元素为0,将它所在的一行和一列全置为0。

检查字符串s1是否由s2旋转得到,只能使用一次isSubstring(例如waterbottle是erbottlewat的旋转)

删除无序链表中的重复元素。不使用临时缓存。

找出有环的链表中环的首个节点。

如何用一个数组实现三个栈。

带min操作的栈,min返回栈中的最小值,push/pop/min是O(1)复杂度。

对栈数据结构进行升序排序,可以使用辅助栈。

给定一个有向图,如何判断两个结点是否连通?

给定一个二叉树,将每一层的结点链起来(D层返回D个链表)。

二叉树中两个结点的最小公共祖先。

给定一个二叉树,给一个值。打印出所有二叉树结点求和等于这个值的路径。

给定一个正整数,打印出和它二进制表示中有相同位数1的最大数和最小数。

最到智力题,不要慌张。还是跟普通题目一样,跟面试官讲你是怎么思考这个问题的。记住这些题目的规则和模式。

烧绳子,烧完要1个小时。两根不均匀的绳子。如何用烧绳子来准确的记录15分钟。

9个球,有一个跟其它不一样重。有个天平,可以称出左右哪边重。只称两次,找出重的球。

后记:以前的笔记翻出来,本来没有记一篇博客的价值。但想一想给新人小朋友看到还是挺好,把书读薄并吸收消化。

也基本上只能给小朋友看看了。想想一些经历,感慨万千,其实大家都不容易,无论是招人的还是找工作的。记得刘末鹏老师写过一篇《怎样花两年时间去面试一个人》。也许什么时候有心情了,专门说一说面试的话题。

  1. 最好的人也许不投简历,就决定去哪里了。所以要在他们做决定前找到他们。
  2. 比较差的会投很多次简历,找不到工作的时间越多,投的简历越多,给整个pool 带来很多噪音,top10%的简历也许根本不算全部人的top10%。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK