剑指offer 一

剑指offer是何海涛根据其在csdn上的一系列博客内容整理成册。
全书剖析了50个典型的程序员面试题,典型!是指可以引申出现在面试中的很多题。
有5个面:基础知识、代码质量、解题思路、优化效率、综合能力。
其中:
    1)基础知识,从编程语言、数据结构、算法三个方面总结了程序员面试的知识点。
    2)代码质量,讨论影响代码质量的3个要素(规范性、完整性、鲁棒性),强调高质量的代码除了能完成基本的功能外,还得能考虑到特殊情况并对非法输入进行合理的处理,其实这体现了程序员的严谨性和代码经验。
    3)解题思路,总结解决难题的常用思路,并建议在遇到难题时,可利用画图、举例、分解复杂问题3种方法化繁为简,先形成清晰的思路再下手编程。
    4)优化效率,包括优化时间和空间效率,介绍一些常用方法,和空间换时间的常用算法,从而面试中得到最优的解法。
     5)综合能力,主要是指面试中如何表现学习能力和沟通能力,通过具体题目展示了知识迁移能力、抽象建模能力和发散思维能力。

之外,包括了每道题目完整代码和测试用例,可以学习如何从基本功能测试、边界值测试、性能测试等方面去设计测试用例,从而提高编写高质量代码的能力。

第一部分:面试的流程
一般有电话面试->现场面试
通常几个注意的地方:先思考清楚再动手编程;良好的代码命名和缩进对齐习惯;
///
另外,注意调试能力锻炼,详细(如设置断点、单步跟踪、查看内存、分析调用栈)
   调试可以深入程序内部,观察运行时各个变量的值。但是,并不是一出现bug就要调试。调试最适合用来探究一些自己不太熟悉的语言特性或者是技术。比如对c++某些语句的作用不太熟悉,或某个库函数的作用不太确定,通过调试就可以看得比较清楚。
    但是如果程序只是逻辑出错误,最好的额方法是测试,通过逐个单元的测试找出问题所在,因为测试可以是自动化的,所以测试的效率更高,可以编写测试代码,一次性的完成很多测试,但是调试只能一步一步的来。
当然调试的好处是可以直接看变量的值,而测试的话,必须写额外的代码将变量的值输出到控制台或者日志文件里。
关键的三项技能是:如何设置断点及怎样运行到断点;怎样单步执行到并越过方法调用;怎样查看和修改变量、成员数据等的值。

断点:最简单
单步执行:有三种,一种是每次执行一行,按F10;
                  一种是每次执行一行,但遇到函数调用就会跳到被调用的函数里,安F11;/没实际用过
                  一种是直接执行当前函数里剩下的指令,返回上一级函数,按shift+f11;没实际用过
监视:调试器可能会自动列出一些相关变量的值,但是可能还关心其他变量的值,可以添加对这些变量的监视,       在断点调试下,直接将变量拖到“监视”栏里
///

技术面试:
1、扎实的基础知识。扎实的基本功是称为优秀程序员的前提条件。通常基本功体现在:编程语言、数据结构、算法3个方面。每个程序员至少要掌握一两门编程语言。(细节部分还差好多。。多思考)。其次,数据结构通常是考察的重点。
   面试前需要熟练掌握链表、树、栈、队列、哈希表等数据结构,以及它们的操作。
   面试题中链表和二叉树相关的问题非常多,特别适合在短时间的面试中检验应聘者的基本功。但是如果应聘者事先对链表的插入和删除结点了如执掌,对二叉树的各种便利方法的循环和递归写法都烂熟于胸,那么面试时也就游刃有余了。
    最后,大部分公式都会注重考查查找、排序等算法。可以在了解各种查找和排序算法的基础上重点掌握二分查找、归并排序和快速排序。很多面试题都只是这些算法的变体而已。对算法很重视的公司比如百度谷歌会要求熟练掌握动态规划和贪婪算法。
2、高质量的代码:只有注重质量的程序员,才能写出鲁棒稳定的大型软件。
3、清晰的思路:当一眼看不出问题中吟唱的规律的时候,可以试着用一两个具体的例子模拟操作的过程,这样说不定就可以通过具体的例子找到抽象的规律。其次,像链表、二叉树相关的题目,可以试着画出他们的结构。另外,很多基于递归的思路,包括分治法、动态规划都可以把复杂的问题分解成一个或多个简单的问题。
4、优化效率的能力。优秀的程序员对时间和内存的消耗是锱铢必较的。要想优化代码,首先需要熟知各种数据结构的优缺点,并能选择合适的数据结构解决问题。需要熟练掌握常用算法,面试中最常用的算法是查找和排序。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值