剑指offer

2019-06-11  本文已影响0人  VickyShen

一、面试的流程

1.1 面试官说

1.初级程序员,偏重考察算法和数据结构,基本功;高级程序员,关注专业技能和项目经验。
2.面试前要做好准备,对公司近况、项目情况有所了解,体现热情,要准备合适的问题
3.不要过于紧张,解决问题,首先要清除要解决的问题,开始做一些整体的设计和规划,写完以后要自己review,并借助一些测试用例来走几遍代码,找出可能的错误

1.2 面试形式

电话面试

共享桌面远程面试

现场面试

1.3 面试环节

行为面试

5-10min,是一个warm up。
应聘者可以利用这几分钟调整自己的情绪,进入面试的状态。

  1. Situation 项目的背景:项目的规模、开发软件的功能、目标用户
  2. Task 自己完成的任务:注意如果只是参与了,不要用“负责”二字。
  3. Action 为了完成任务,自己做了哪些工作,是怎么做的。这里可以做详细介绍。比如我要面开发,要将基于什么工作在哪个平台下应用了哪些技术。
  4. Result 自己的贡献:最好能用数字说明,如果参与了功能开发,可以说按时完成了多少功能;如果是优化,可以说性能提高百分之多少
    除此之外,常问的问题包括:
    在项目中遇到的最大问题是什么,你是怎么解决的。
    从这个项目中你学到了什么
    什么时候会和其他团队成员有什么样的冲突,你们是解决冲突的。
    tips:在面试时,在介绍项目经验是,不必详细描述项目的背景,而是要突出自己完成的工作和取得的成绩。

技术面试

技术面试,一般占据一小时的面试的40-50min。
是面试的重头戏。
应聘者的5种素质:
1. 基础知识扎实全面

应聘者提问

最后的5-10min,至少准备1-2个问题,问的合适,是加分的好机会。
不适合问的问题

二、面试需要的基础知识

编程语言

面试编程语言通常有三个类型:

  1. 面试官直接询问对某个语言的理解程度
  2. 面试官拿出事先准备好的代码,让应聘者分析代码的结果
    3.要求应聘者写代码定义一个类型或者实现类型中的成员函数

数据结构

  1. 数组和字符串是两个最基本的数据结构
    数组-简单哈希表,时间高效
    解决空间效率不高的问题,动态数组 ArrayList

  2. 链表和树是面试中出现频率最高的数据结构,要留意代码的鲁棒性
    要熟练掌握树的前序遍历、中序遍历、后序遍历、层序遍历、二叉搜索树、堆、红黑树。
    栈是一个与递归紧密相关的数据解耦
    队列和广度优先算法遍历相关

算法和数据结构

重点掌握二分查找、归并排序和快速排序。
递归和循环:很多算法都可以用递归和循环两种方式来实现。递归的实现方式代码会比较简洁,但是性能不如基于循环的实现方式(由于函数调用自身,而函数调用是有时间和空间消耗的;每一次函数调用,都要在内存栈中分配空间以保存参数、返回地址即临时变量,而且往栈中压入和弹出数据都需要时间。)。在面试的时候,可以根据题目的特点,甚至是与面试官进行讨论来选择。
位运算是一种特殊的算法,总共有与、或、抑或、左移、右移5种位运算。

如果面试题要求在排序的数组中查找一个数字或者某个数字的统计次数,都可以尝试二分查找
二分查找的循环实现

    int binarySearch(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1; // 注意

        while(left <= right) {
            int mid = (right + left) / 2;
            if(nums[mid] == target)
                return mid;
            else if (nums[mid] < target)
                left = mid + 1; // 注意
            else if (nums[mid] > target)
                right = mid - 1; // 注意
        }
        return -1;
    }

二分查找的递归实现

   public static int search(int[] nums, int target) {
        return search(nums,0,nums.length-1,target);
    }

    public static int search(int[] nums, int start, int end, int target) {
        int min = start;
        int max = end;
        int mid = (min + max) / 2;
        while (min < max) {
            if (nums[mid] == target) {
                return mid;
            }else if(nums[mid]<target){
                return search(nums,mid+1,max,target);
            }else {
                return search(nums,min,mid-1,target);
            }

        }
        return -1;
    }

哈希表和二叉排序树的考察重点在于数据结构而不是算法

三、高质量的代码

3.1 代码的规范性

规范代码书写清晰
规范的代码布局清晰
规范的代码命名

3.2 代码的完整性

在编码之前,要先考虑测试用例:普通功能测试的测试用例、边界值的测试用例、各种可能出错的测试用例
有三种错误处理方式:

四、面试中的各项能力

1. 沟通能力

2.学习能力

两种方式考察应聘者的学习能力。
第一种方法是询问应聘者最近在看什么书或者在做什么项目,从中学习到了什么新技术。---从而了解其学习的愿望和学习能力。
第二种时抛出一个新概念,看应聘者能不能在较短时间内理解这个新概念并解决相关的问题。面试官期待应聘者能够通过思考、提问、再思考的过程,理解它们并最终解决问题。

3.善于学习、沟通的人也善于提问。

上一篇下一篇

猜你喜欢

热点阅读