携程一面面经

携程一面面经


前言

携程的面试邀约给得有点小慢,我记得携程的笔试是在20几天前,之前其实有一次面试邀约,但是我因为时间冲突给延后了,没想到又多等了一个多星期

言归正传,这次的面试还算比较顺利,问得比较多的是项目和 java 方面的知识,最后给了两个比较容易的算法题,OS,计网,数据库都没问到,但是为了在比较基础的提问中展现自己的能力,我还是尽量和面试官往深入的聊了一下



面试内容

1、自我介绍

2、怼项目(业务逻辑、是否上线,项目部署流程,图片存储的实现、前后端分离,我觉得面试官的主要目的是看看这个项目是不是真的是我写的)

3、我看你项目中说使用 axios 避免 Ajax 的引用过重,你能说说这是怎么回事吗(使用 Ajax 的话还要引入 JQuery,但是 VUE 有 mvvm 不需要使用 JQuery)

4、现在还在实习吗,实习做的工作是什么

5、谈谈你对面向对象的理解(封装、继承、多态)

6、对数据结构了解吗,谈谈数组,链表,哈希表他们的优缺点和在java中的实现(ArrayList,LinkedList,HashMap;数组随机访问,链表增删,哈希表快速匹配)

7、那 HashMap 在使用的时候有什么不方便的地方吗(对象作为key,要重写 equals hashcode 方法;HashMap无序)

8、HashMap是有序的吗(不是)

9、那想要有序,该怎么办(可以选用 LinkedHashMap)

10、了解图这个结构吗(顶点,边,有向图,无向图,带权图,二维数组或者邻接表表示)

11、谈谈深度遍历和广度遍历(一个递归或者用栈,一个用队列,并用树举了一个例子)

12、排序了解吗?谈谈堆排序的实现过程(建大根堆,把根节点与最后一个节点进行交换,循环往复直到结束)

13、谈谈线程进程的区别(进程资源分配的最小单位,线程资源调度的最小单位,我后面还稍微深入了一下二者切换的代价)

14、为什么需要多线程(单核单一线程的情况下,不能边听音乐边写 BUG;多核的情况下,可以提高CPU资源利用率)

15、那一个4核cpu,可以开几个线程?(这个问题我是猝不及防,后来查了一下,cpu开的线程数与核数没有必然联系,但是为了充分利用 CPU 性能,最好开得线程数要大于核数)

16、那多线程会有什么问题呢?(原子性(多线程的情况下无法保证原子性),有序性(编译器优化和CPU乱序执行),可见性(CPU缓存和内容)以及三者的出现原因)

17、谈谈同步异步,阻塞和非阻塞(同步异步那用户点击事件举例;阻塞非阻塞那线程CPU时间片用完举例)

18、那线程阻塞是只有 cpu 时间片用完了才会出现吗(不是,如果缺少资源,也会进入阻塞状态)

19、GC 你了解吗(还没看到那里,就和面试官说了解一些垃圾回收算法)

20、算法题1:判断一组牌是否能成为顺子(注意有大小王的话,就不是了,大小王可以用14,15表示)

// 判断一组牌是否能成为顺子
    public static boolean judge(int[] arr) {
        if (arr==null || arr.length==0) {
            return true;
        }
        int len = arr.length;
        Arrays.sort(arr);
        for (int i = 0; i < len - 1; i++) {
            if (arr[i+1]-arr[i]!=1 || arr[i]==14 || arr[i]==15) {
                return false;
            }
        }
        return true;
    }

21、算法题2:一组牌里如果有大小王的话,可以作为万能牌,问能不能凑成顺子

写题的时候出了点小错,顺便给面试官展示了一下 DEBUG 的技巧

// 一组牌里如果有大小王的话,可以作为万能牌,问能不能凑成顺子
    public static boolean judge2(int[] arr) {
        if (arr==null || arr.length==0) {
            return true;
        }
        int len = arr.length;
        Arrays.sort(arr);
        int kings = 0;
        int count = 0;
        int l=len-1;
        while (count<2) {
            if (arr[l]>13) {
                kings++;
            }
            count++;
            l--;
        }
        int errCount=0;
        for (int i = 0; i < len - kings - 1; i++) {
            errCount+=arr[i+1]-arr[i]-1;
        }
        return errCount==kings;
    }

22、我这边的问题都结束了,你有什么问题吗?(面试表现;如果能进入贵公司,负责什么业务)



总结

感觉整体回答的还可以,因为在被阿里面试官怼了以后,对计算机基础知识进行了深度的学习,所以有些问题可以向下深入了

这次的面试,面试官对我的项目提问提的比较多,从业务到部署都问了一下,应该是想看看这个项目是否真的是我自己写的

我个人是很抵触背面试题的,总感觉工科的知识用文科的方法来学,有那么一点不伦不类,而且现在背会的知识,并不是自己的,对自己日后的发展没有任何的益处。靠背题进公司人,就像我实习公司的一位大佬说的 “文科工程师”,就算是进公司了,可能无法为公司带来产出,甚至会有负产出。

虽然这次的面试还算比较顺利,但是还是存在着一些问题:

**1、就像面试官说的,有点小粗心:**写这道两道不是很难的算法题的时候,出了两个小错误,最后还要靠 DEBUG 解决

2、知识网络还不够全面: JVM 的相关知识,自己只有大致的了解,还没有深入的去学习

最近要从实习公司离职了,这样一是可以把更多时间花在学习计算机基础知识上,二是有时间,去接一个并发量较高的项目,拔高自己的项目经验(实习公司的saas项目,很多面试官不接受…),三是有时间研究框架,为自己的简历再添上一比,四是可以回校上课,避免无法毕业的风险

作为程序员,持续的学习是少不了的,特别是在我这个打基础的重要阶段。

生命不息,学习不止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FARO_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值