面试题总结


=Start=

缘由:

工作中,有时候会被临时叫去面试。有了那么几次经历之后,就想着提前准备一个面试题库,方便到时候有问题问,不至于又得临时找题目,效率不高,找到的题目的质量也不会太高。

面试应该要遵循一个科学的方法和思路,大体说来就是:

  • 第一层面:判断面试者的简历是否存在造假的情况;
    拿到面试者的简历之后,先大体浏览一遍,看他写了那些内容,自己心里面先有一个评估——教育经历、工作经历、技能列表的内容是否真实?项目经历是否属实?
  • 第二层面:判断面试者的简历是否存在夸大的情况;
    他对编程语言的了解处在一个什么水平?是精通、熟悉、能用还是略晓。他在他提到的项目中具体起到一个什么角色?是总负责人还是就一打杂的边缘人物。
  • 第三层面:判断面试者的实际水平层次在哪;
    这就需要面试官根据面试者对自己准备的各个层次的题目的回答情况做出动态判断;除了前期准备的一些比较死的题目之外,还可以针对面试者自认为的优势部分进行提问,难度不断升级,直到可以判断出他的实际水平为止。

第一个层面可以通过面试者的简历进行提问;第二、第三层面就需要面试官自己先准备一套题目,根据面试者的实际回答情况进行判断了,下面就大概准备一份常规的面试题以供参考。

正文:

参考解答:

C/C++相关:
  • C语言中#include<> 和 #include”” 有什么区别?
  • C语言中变量的跨文件引用
  • C语言中的 字符串数组 和 字符串指针
  • C语言中的字符串操作
  • C语言中sizeof与strlen的区别与联系
  • 用C语言实现循环读取文件内容并进行打印

=

Python相关:
  • Python中有哪些对象类型?其中哪些是不可变对象?
  • 这两个参数是什么意思:*args,**kwargs?我们为什么要使用它们?
  • 下面这些是什么意思:@classmethod, @staticmethod, @property?

=

PHP相关:
Java相关:
操作系统
数据库
网络
编程题
其它

=END=


《“面试题总结”》 有 29 条评论

  1. 程序员面试金典
    https://github.com/careercup/ctci
    https://www.nowcoder.com/ta/cracking-the-coding-interview
    `
    数据结构
      数组与字符串
      链表
      栈与队列
      树与图

    概念与算法
      位操作
      智力题
      数学与概率
      面向对象设计
      递归和动态规划
      扩展性与存储限制
      排序与查找
      测试

    知识类问题
      C和C++
      Java
      数据库
      线程与锁

    附加面试题
      中等难题
      高难度题
    `

  2. 试题集 – 算法与编程
    http://www.cnblogs.com/JCSU/
    `
    C、C++语法题(1)
    C、C++语法题(2)
    C、C++语法题(3)

    算法题(1) – 字符串
    算法题(2) – 线性表、树、图
    算法题(3) – 数组、集合
    算法题(4) – 其他
    `

  3. 如何面试工程师?
    http://www.infoq.com/cn/articles/how-to-interview-engineers
    `
    面试中减少噪音的具体方法
    1. 明确你要寻找的技能
    2. 提问时尽可能贴近实际工作
    3. 提问时将问题拆分成多个部分,使之无法泄漏
    4. 避免提太难的问题
    5. 对每一个候选人提同样的问题
    6. 考虑进行多个版本的面试
    7. 不要因证书或资质产生偏见
    8. 避免让面试陷入阴霾
    9. 做决定时基于技能的长板而非平均水平或短板
    `

  4. 从一道简单的面试题考查应聘者的技术能力
    https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653548918&idx=1&sn=46f112739f13e4c3af168193b2914d7c
    `
    面试观察中发现,很多开发同学平时只注重各种框架、新技术的学习,对于基本功不够重视,然而对于框架的学习,很多时候也只停留在会用的水平,对于框架的实现原理以及框架能解决哪些问题不是非常清楚。日常的开发实践中,很多时候也只是照着现成的代码拷贝粘贴,然后再修改,最终是可以用的。但如果要从头开始,搭建一个完整的项目框架,或者写一些稍微复杂的代码,就完全暴露出真实水平了。
    对于面试中小题目的选择上,可以稍微灵活点,结合一些实际中遇到的问题,让应聘者来尝试解决,简单的可以写出代码实现,复杂的给出解决问题的思路和过程也是好的;不赞成直接用明确的算法题,比如快排、二叉树遍历,这类题目目标非常明确,只要应聘者熟悉这个算法,或者准备过这个算法,很容易就可以写出来,无法考查出分析问题和解决问题的能力。

    举例:
    输入:一个带转义字符’\b’的字符串
    要求:删除转义字符’\b’和它前面的字符,如果遇到多个连续的’\b’,则删除相同数量的转义字符和前面的字符
    输出:最终的结果字符串
    举例:输入”abc\b\bd\b\bghi”,期望输出”ghi”
    `
    程序员如何提问面试官?针对工程师、技术经理及CTO的提问指南
    https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=2653548609&idx=1&sn=4c76d4e83ef5def978a496dcb124dcee

  5. 面试的时候,如何描述自身优势???
    https://www.v2ex.com/t/397844
    `
    Situation -> Task -> Action -> Result

    在团队中扮演什么样的角色、解决了什么样的问题、遇到项目压力如何调整进度和自身的抗压能力

    对底层实现原理感兴趣,看过 v8 的部分源码,看过 zend 源码……按照这个思路应该可以吧
    `

  6. 通过率 1% 和 80% 的简历,都有什么区别?
    https://mp.weixin.qq.com/s/fNnAU787E2oOjKxrgC_IEg
    `
    简历唯一的目标:获得面试机会。
    每申请一份工作,就要做一份不同的简历。
    最容易通过筛选的简历,核心是:“关键词匹配”。技能点,闪光点,证书。

    修改关键词,使其与招聘广告一致。你不应编造,而是从已有经历中挖掘相关的经验,或者为了这一份工作,学习新的技能。

    你不需要设计背景,才能做出一份好看的简历,但是你必须避免一些关键的、而人人都在犯的错误,才能让你的简历有可读性,从众多简历中脱颖而出。
    `

  7. 如何搞定技术面试编码环节
    http://ethancai.github.io/2017/07/12/cracking-the-coding-skill/
    https://www.slideshare.net/gayle2/cracking-the-coding-interview-college
    https://github.com/careercup/CtCI-6th-Edition-Python
    `
    解决问题的步骤:
    1、听:仔细聆听问题描述,完整获取信息
    2、举例:注意特殊用例、边界场景
    3、快速解决:尽快找到解决方案,不一定要最优。想想最优方案是什么样子的,你的最终解决方案可能处于当前方案、最优方案之间
    4、优化:优化第一版解决方案
      BUD优化方法
        瓶颈,Bottlenecks
        不必要的工作,Unnecessary work
        重复的工作,Duplicated work
      Four Algorithm Approaches
        Pattern Matching: What problems is this similar to?
        Simplify & Generalize: Tweak and solve simpler problem.
        Base Case & Build: Does it sound recursive-ish?
        Data Structure Brainstorm: Try various data structures.
      或者尝试下面的方法
        Look for any unused info
        Use a fresh example
        Solve it “incorrectly”
        Make time vs. space tradeoff
        Precompute or do upfront work
        Try a hash table or another data structure
    5、重新审视解决方案,确保在编码前理解每个细节
    6、实现
      Write beautiful code
        Modularize your code from the beginning
        Refactor to clean up anything that isn’t beautiful
    7、测试
    `

  8. 如何有效地写算法题
    http://www.cnblogs.com/sskyy/p/8268976.html
    http://www.importnew.com/27784.html
    `
    如何有效地写算法题

    目的:
    持续做算法题的目的仍然是自身能力提升。可以继续细化成三点:
      保持思维敏捷。非常重要,状态好才能保持对编程的热情。
      对基础的数据结构、查找和排序保持熟练。能解决日常开发中的性能相关问题。
      积累对问题域的探索。只有对问题域有足够的探索,才可能举一反三,迸发灵感。

    方法:
    为了更有效地实现上面的目标。推荐用下面的方式来做题:
      严格使用番茄时钟进行规划
      用一个番茄时钟对题目进行彻底的分析
      执行时的番茄时钟
      任一番茄时钟结束时
    `

  9. 应届毕业生应该怎样写简历?
    https://hacpai.com/article/1522149387686
    `
    我们为什么要写简历
    简历应该怎么写
    1. 结构清晰
      1.1. 请使用 pdf 格式传输简历
      1.2. 至少对你的简历做一点简单的设计
      1.3. 分类明确
    2. 目标明确
    3. 重点突出
      3.1. “多”和“少”的取舍
      3.2. 个人的真实技能与经历
        3.2.1. 技能
        3.2.2. 项目
    4. 亮点可寻
    总结
    `

  10. 聊聊技术面试
    https://juejin.im/post/5ac5211f6fb9a028ca53329f
    `
    前言
    何为技术面试
      1. 互怼型
      2. 尬聊型
      3. 一边倒
    何为能力边界 & 能力模型
    面试者如何勾勒自己的能力模型 & 面试官如何确定面试者的能力边界
      基础能力
      专业能力
      沟通能力
      潜力 & 成长性
      经验
    总结
    `

  11. 谈谈面试官的责任
    https://mp.weixin.qq.com/s/lF6_0iIIVpfKgQdiAFdrGw
    `
    第一,要理解求职者的目标和未来的方向,这不是空话,这是你必须明确的,你能否满足对方的期待,以及能否让对方相信你确实能满足他的期待。

    第二,试图证明,阐述他在这份工作中可以得到能力,素质,视野的提升。
    这一条主要针对应届生,有潜质的年轻求职者。

    第三,试图证明,企业的发展潜力可以满足他对职场地位,财富,社会资源的诉求,
    这一条主要针对那些有一定基础和实力,需要一个平台跨越发展的人才,比如一些一线企业的技术经理,希望能找到一个快速发展的企业作为技术带头人给自己职场带来一个跨越。

    第四,试图证明,他的能力和特长,在这个企业有足够的发展和发挥的空间。
    这一条是针对高阶人才,很多高阶人才选择一些新兴企业会有一个担心,我的技术背景,我的知识背景,会不会无用武之地,一些高阶人才,除了待遇需求,也希望工作是可以持续稳定的发展,他们担心说来了发现不合适,可能短期就会离开,这样其实谈待遇条件意义都不大,或者因为自己的技能与诉求不符合,或者平台不足以发挥自己的全面能力,会导致自己名声受损或未来发展受限。
    `

  12. 如何成为一名合格的面试官?
    https://www.yejianye.com/2018/04/23/interviewer/
    `
    如果要我用一句话概括怎样成为一个合格的面试官,那就是建立标准化的面试模板。这使你可以用同一把尺子去衡量所有的候选人(对于相同职位)。理想情况下,我希望一个公司能有一套标准的面试文档,细化到什么岗位问什么问题,每个问题如何打分。这样就大大减少了面试过程的不确定性,甚至由谁当面试官也都不重要了。我承认这太理想化,在我十多年的工作经历中,也没有遇见过真正做到这一点的公司。不过从自身做起,先建立一套自用的面试模板,还是不难的。

    记住,最好的 10% 与 最差的 10% 候选人往往不难识别,好的面试题要为区分中间 80% 的人提供数据。
    但不要只重视专业经验,而忽略基本素质。
    一个人的基本素质里包含了许多能力与品质,一般可以主要关注的三项:聪明,自我驱动,承担责任。
    挑选一个候选人熟悉的专业概念,假设我没有相关领域的背景知识,让他花 5 到 10 分钟把这个概念讲解给我听。
    `

  13. 手写二叉树?程序员面试最常见问题TOP 48
    https://mp.weixin.qq.com/s/XikCzXNdO3ZO8Bp3-Gt-MA
    https://hackernoon.com/50-data-structure-and-algorithms-interview-questions-for-programmers-b4b1ac61f5b0
    https://github.com/jwasham/coding-interview-university
    `
    1. 数组编程面试问题
    2. 链表编程面试问题
    3. 字符串编码面试问题
    4. 二叉树编程面试问题
    5. 其它编程面试问题
    除了数据结构方面的问题,大部分编程工作面试也会问关于算法、设计、位运算和通用的逻辑问题。

    针对性练习很重要,因为有时在实际面试中它们会有点难解。事先练习不仅能够让你熟悉这些问题,还能让你在向面试官解释答案时更加自信。
    `

  14. 面试的一些技巧
    https://jiajunhuang.com/articles/2018_10_21-interview_techniques.md.html
    `
    面试的时候,我与求职公司的关系是怎么样的?
      作为面试者,我与求职公司的关系
      作为面试者,我能否向面试官提问?
      我能否问一些尖锐的问题?
      面试官问我薪资怎么办?
      面试官问我是否单身?
    面试的时候,怎么进行自我介绍
      技术面试官往往更在意你的技术
      HR和总监往往很重视你的自我介绍
      如何准备自我介绍?
    怎么应对设计类面试题?
    我该选择大公司还是小公司?
      大公司和小公司的区别
    `

  15. 机器学习常见算法个人总结(面试用)
    http://kubicode.me/2015/08/16/Machine%20Learning/Algorithm-Summary-for-Interview/#
    `
    1. 朴素贝叶斯
    1.1. 工作原理
    1.2. 工作流程
    1.3. 属性特征
    1.4. Laplace校准(拉普拉斯校验)
    1.5. 遇到特征之间不独立问题
    1.6. 优缺点
    2. 逻辑回归和线性回归
    2.1. 梯度下降法
    2.2. 其他优化方法
    2.3. 关于LR的过拟合问题:
    2.4. 关于LR的多分类:softmax
    2.5. 关于softmax和k个LR的选择
    3. KNN算法
    3.1. 三要素:
    3.2. k值的选择
    3.3. KNN的回归
    3.4. 优缺点:
    3.5. KD树
    3.5.1. 构造KD树
    3.5.2. KD树的搜索
    3.5.3. KD树进行KNN查找
    3.5.4. KD树搜索的复杂度
    4. SVM、SMO
    4.1. 线性SVM问题
    4.1.1. 对偶求解
    4.2. 损失函数
    4.3. 为什么要引入对偶算法
    4.4. 核函数
    4.5. SVM优缺点
    4.6. SMO
    4.7. SVM多分类问题
    5. 决策树
    5.1. ID3
    5.2. C4.5
    5.3. Cart
    5.4. 停止条件
    5.5. 关于特征与目标值
    5.6. 决策树的分类与回归
    5.7. 理想的决策树
    5.8. 解决决策树的过拟合
    5.9. 优缺点
    6. 随机森林RF
    6.1. 学习过程
    6.2. 预测过程
    6.3. 参数问题
    6.4. 泛化误差估计
    6.5. 学习算法
    6.6. 关于CART
    6.7. 优缺点
    7. GBDT
    7.1. Shrinkage
    7.2. 调参
    7.3. 优缺点:
    8. BP
    9. 最小二乘法
    10. EM
    11. Bagging
    12. Boosting
    13. 凸优化
    13.1. 凸集
    13.2. 凸函数
    13.3. 凸优化应用举例
    14. 参考
    15. 备注
    `

  16. 程序员如何准备技术面试
    https://zhuanlan.zhihu.com/p/38432342
    `
    1、分析阶段
    2、准备阶段
    3、面试阶段
    4、总结阶段

    一、分析阶段
    公司需要怎样的员工
    员工需要怎样的公司
    了解自己的优势

    二、准备阶段
    随时都在准备
    技术知识
    积累项目经验
    准备简历
    模拟面试
    选择公司

    三、面试阶段
    HR电话确认
    电话面试
    家庭作业
    现场面试
    非技术问题
    求职者提问

    四、总结阶段
    一次面试过来,可能筋疲力尽了。回想下自己哪里可以做得更好,简历哪里可以修改的。统计学告诉我们不要选择第一家面试的公司,多面试几家。不要欺骗自己,认真去思考每家的优点和缺点,和你的好朋友聊聊,寻求他们的建议。如果没有拿到offer也没关系,重复上面的步骤,继续努力。两年前我连想都不敢想到美国的大公司工作,而现在的我就在为Google的面试做准备,就算我现在进不了Google又有什么关系呢?我还是在准备过程中学到很多知识。我很享受这段时间。相信自己,努力和汗水总会能得到回报的。
    `

  17. 写在 19 年初的后端社招面试经历(蚂蚁、头条、PingCAP)
    https://toutiao.io/posts/0qvel5/preview
    https://github.com/aylei/interview
    https://paper.tuisec.win/detail/f41522479a6d477
    `
    当时真正找坑和准备面试的过程大概分为这几个阶段:

    反思:自己是不是真的要离职,假如不离职,在老东家接下来应该做什么才能继续提升?
    定位:我在硬性技能(编码、架构)上的长处在哪?我在软技能(沟通,团队)上的长处在哪?这步顺带写了简历
    寻找平台:哪些平台能同时满足:1、有挑战有上升空间;2、符合我的定位方向;3、团队氛围和老东家一样好(或更好)
    找人内推:基本都是在 v2 上找的(诚挚感谢各位帮助我内推的大佬)
    面试谈 offer

    定位这一步其实花了好几天时间,我先是梳理了自己的项目经历和工作内容的专长,把 Java + Golang,做过的面比较广(业务,中间件,基础架构都做过)以及对 k8s 云原生有专长和兴趣作为自己的”硬招牌”。然后把学习能力强,喜欢沟通合作,渴望挑战作为我的”软招牌”,最后把自己定位成一个”在过往经历中展现出了过人学习能力和钻研能力,同时渴望挑战,不愿意呆在舒适区”的形象(妈呀打这段话的时候太羞耻了!!!)。

    这个过程中,我的方法论是”换位思考”。自己过去也面试过不少人(所以平时公司让我去面试,虽然累点苦点,但也都是积累呀),并且也和 HR 以及放出 HC 的业务方聊过我们希望放什么样的人进来。因此全程都在以面试官的心态来考察自己:
    假如我是面试官,我会招怎样的人进来做我的同事?
    `

  18. 作为字节跳动的研发面试官,有些话我不得不说!
    https://mp.weixin.qq.com/s/Itr-EWLUfVMTSEiUN6GEeA
    `
    01——代码能力,是研发面试考察的核心!
    代码能力是计算机专业的基础。能否在有限时间内写出清晰简洁、逻辑清晰的代码,不仅可以考察出候选人是否有扎实的基本功,也可以让面试官对候选人在未来是否能够胜任相应的岗位工作有一个基础判断。
    面试两场之后我发现,有的候选人刚开始聊项目聊得非常开心,一些细节问题回答得都挺不错的,可一旦到了手写代码这一关,连二分查找都写不出来的大有人在。

    平时写的代码多不多,面试之前有没有做过准备,有经验的面试官一眼就可以判断出来。所以这里给大家分享三点建议:
    1、加强基本功,增加代码量
    多看优秀的源代码,认真从效率、逻辑等方面分析他人如何简洁明晰地实现一个函数,这对提升自己的基本代码能力有很大的帮助。
    2、面试前多做题,保持手感很重要
    面试之前多做些练习,这不仅可以加快答题速度,也会让自己养成较为规范的答题习惯。
    3、复盘笔试答案,思考更优解
    最后,不少面试官喜欢在面试的时候复盘笔试题目,与候选人讨论题目的更优解,从而考察考生是否具备主动思考能力。

    02——我们不反对刷题,不过更希望大家举一反三
    而在这里我想代表广大面试官表个态:我们不反对刷题,甚至希望同学们在大量做题之后,能够灵活运用、举一反三。
    大量做题不仅可以在短时间内提高同学们的解题速度,也会在一定程度上帮助你拓展自己的答题思路。
    当然,如果发现同学刷题,面试官也会变种问题,从侧面考察同学是否死记硬背答案。作为春招的面试官、你未来的潜在同事,我们更希望同学们能够灵活贯通。
    所以说,该准备准备,该刷题刷题,临时抱佛脚至少体现了你对面试重视是不是?等你题目刷到一定程度,你就会发现自己的能力有了一个量变到质变的提升。

    03——项目描述切忌花哨,突出项目重点,表述逻辑要清晰

    04——跨专业面试不会受到区别对待,技术实力最重要
    面试官们常常会被问到:非计算机专业的同学跨专业面试会不会受到区别对待?
    在这里我想强调:完全不会!
    不同岗位对具体的专业能力要求不同,拿算法岗位举例,只要你代码基础功底过硬,数理能力够强,又对所面试岗位是发自内心的热爱,就算你是学挖掘机技术的,面试官们也是想给你发offer的。
    算法行业的通用能力就是代码硬实力。如果不具备这种能力,在实际工作中就总会感觉不自信,受人制肘。所以非科班出身的同学们不用受自己的专业所限,但一定要多多锻炼,努力提升自己。
    不过这里也想真心地提醒大家几句,千万不要盲从跟风选择自己的职业方向,每个领域都有自己广阔的发展空间,适合自己的才是最好的。越热门的岗位对基础的要求越高,面试官在面试的时候是看得到笔试成绩的,所以还希望大家在面试过程中诚实一点,不懂装懂可是会减分的哦!

    05——哪些行为一定是减分项?
    虽然面试考察最多的是技术基础和代码能力,但是从心理学的角度分析,第一印象也是相当重要的啊喂!
    为了这场面试,逗比的我收敛了表情包,穿上了帅气的格子衫,还把头发梳成了面试官的模样,你说你穿着拖鞋、脸都不洗就来面试是不是有点伤我心了。
    如果同学们选择的是视频面试,希望大家在面试前做好充分的准备工作。面试开始之后,如果遇到候选人迟到、没有调试设备、网络不畅通、麦克风关掉、面试环境嘈杂等情况,面试官会给一定时间调试,但是面试体验会受到一定影响,心理上可能会减分的哦!
    诚实守信是做人第一要务,也是字节跳动用人的底线。你们要知道,即使是视频面试,面试官也是可以看到考生行为的!答应我,像类似「一边考试一边用ipad查答案」这种事情千万不要干好嘛!作为考官的我在摄像头另一边看到了也是很尴尬的……
    `

  19. 我在阿里做技术面试官的一些经验 #40
    https://github.com/lihongxun945/myblog/issues/40
    `
    社招和校招的面试重点

    大厂的面试流程
    一般阿里腾讯这样的大公司,校招面试的流程是一轮统一笔试+三轮技术面试+一轮HR面试,如果对候选人的水平有争议,技术面试有可能会增加一轮,以2019年春招(实习生招聘)为例:
    1.统一的笔试。
    2.技术初面,一般这一轮都是由你将来同一个团队的比较资深的同事来面试
    3.技术二面,一般是由你的未来主管面试
    4.技术交叉面,一般是其他事业部的主管面试
    5.HR终面,非技术问题

    面试前准备

    面试的时候的一些建议

    面试结束的时候应该问点什么

    面试结果?
    `

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注