阿里巴巴电话一面凉凉经

我是申请的后台开发岗位

4.13的笔试,两道题

1.
第一道题:蚂蚁森林n个小动物,1~n,小动物编号越小能力越强,现在筛选国王,每个小动物都会崇拜别的小动物或者自己,但只会崇拜比自己能力强的小动物。

问每个人最多可以获得多少票。

看牛客的一些大佬说是要用树的遍历,我只会用递归破解,AC90%

import java.util.Scanner;

public class Main {
    static int[] a;
    static int[] ans;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        a = new int[n];
        ans = new int[n];
        for (int i = 0; i < n; i++) {
            int x = sc.nextInt();
            a[i] = x;
        }
        for (int i = 0; i < n; i++) {
            if (a[i]==0) {
                ans[i] = ans[i]+1;
            }else {
                findZero(i);
            }
        }
        for (int i = 0; i < n; i++) {
            System.out.println(ans[i]);
        }

    }

    private static void findZero(int i) {
        if (i > a.length-1 && i < 0) {
            return;
        }
        if (a[i] > i+1) {
            return;
        }
        ans[i]++;
        if (a[a[i]-1] == 0) {
            ans[a[i]-1]++;
            return;
        }else {
            findZero(a[i]-1);
        }
    }
}
 2.

做完第一题我就身下15分钟,第二题读完题目知道是图的路径搜索,但是不会就没做,后来上网查了floyd和Dijkstra(迪杰斯特拉)算法都可以破解,但floyd可能会超时

学了复习了一下Dijkstra(迪杰斯特拉)算法,没了。

4.17晚上电话面试

45分钟电话面试,30分钟说项目把;

没想到一面就疯狂说项目,我说的确实不好,问到我关于dubbo这些,还要些项目中数据传输的问题。

面试官问我的还要关于项目部署的,我接触到的确实只有单体项目,面试官似乎不满意,后面就没完了。

影响深入的几个问题:

1.

单机部署项目,问题很多,版本迭代就要kill进程,有什么问题?你有想过怎么解决好点吗?

后面问了问朋友,生产直接kill是不行的,强制杀死容易出问题,Kill这个操作不是生产操作,最简单就是布完包重启tomcat。就是取代kill操作啊,但还是以前的部署操作。(唉,我确实菜,项目经验确实不够)

2.

你的项目很慢,你应该做什么排查?例如查询一个数据很慢,你会怎么做?

我那时候一开始就说对项目的优化嘛,我直接就说建立索引什么的,我以为他会要我说说索引原理什么嘛,结果她问我怎么确定就是数据库的问题,不是其他的问题,要怎么排查

我确实不知道,后面补充一下:
1.看日志,是不是又哪写地方阻塞,也就是从应用方面排查,结合适当的debug,看哪个地方的取出来的数据不对。

2.jvm线上排查

jps 定位进程号

jstack PID 就会在终端输出我们熟悉的堆栈信息

3.linux

top 查看cpu使用情况,排除其他线程影响该程序执行的可能

单单看到各个进程的CPU使用率和内存使用率

vmstat

展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。——进一步分析

4.

最后才是定位sql这样子的,

用数据库自带索引命令工具排查

追踪慢查询,为什么慢

在多此查询的地方设置索引

当然,索引也不是绝对的优化方法,可能本身的sql是否可以优化

连表过多,对表进行拆分

也可以这么表达:

2.1

可以从应用,数据库,和运行环境分析;可以考虑用户网络环境,然后是应用中的调用链路是否存在问题(循环调用?外部依赖过多?),然后是数据库。有应用监控系统最好不过了,可以比较具体的排查。

2.2

数据库的原因也很多,sql问题,也有可能是数据库本身延时高。

Linux查看一下进程也需要,查看进程排查应用所在环境因素(其他进程对该应用程序的影响)

2.3

而且索引也不是绝对的优化方法,可能本身的sql是否可以优化,如果连表过多,是否可以拆解到应用层做,或是压根表设计不合理

基础知识

3.

类的加载?——》

双亲委派的过程?——》

还问为什么要双亲委派?

我回答了”安全高效“了,就没说了,他就没问了。。。。

补充:
确实是安全,如果没有这种机制,编写了一个java.lang.Object的同名类并放在ClassPath中,程序一跑,多个Object继续加载,就不能保证object的唯一性。

因此,解决就说通过类加载机制。底层是代理模式,对于 Java 核心库的类的加载工作由引导类加载器来统一完成,保证了 Java 应用所使用的都是同一个版本的 Java 核心库的类,是互相兼容的。

4.

三个工厂模式,有什么区别

这块明明很熟悉,面试可能有点紧张说的迷迷糊糊。。。我也不知道有没有说准确

答案:

三个工厂模式,各有千秋

从简单工厂模式——》工厂方法模式,解决了对产品的拓展不符合OCT原则的问题

从工厂方法模式——》抽象工厂模式,解决了一个过程只能生产一个产品的问题

但是反而多了一个问题,就是又产生了部分不符合OCT原则的问题,对工厂的拓展符合OCT,但是没错要拓展一个产品,就要修改一次工厂里面的方法

5.

高并发的concurrenthashmap

推荐使用,
在jdk8之前是使用分段加锁的一个方式,分成16个桶,每次只加锁其中一个桶,而在jdk8又加入了红黑树和CAS算法来实现。
每次只会锁目前一个segment,用synchronized+CAS,效率更高了,并发度更高。

问题:concurrenthashmap,有一个线程进入这一个桶,进行put方法,他还能再进入吗?

妈呀,我竟然说不可以,前面都采用synchronized了,synchronized是可重入锁啊!!!后面纠正过来了,但是。。

6.

spring容器启动过程

spring我配置文件在哪里读取?

我看过,但是一到面试说起来就不全面,缺斤少两的

https://zhuanlan.zhihu.com/p/82136894

总结:

这次面试的不足:

1.复盘项目,我在想对于工作经验这块我还是缺少很多,得总结自己以前遇到的问题以及解决思路,小项目就小项目,但还是得积极拓展,“自己为难自己”

2.复习基础,高并发这块可以再多吃透一点,懂的东西也要深入理解,做到别人怎么问都不怕

3.面试过程容易手忙脚乱的问题,前面回答的不好,后面就应该好好调整。

这次面试才45分钟,应该是凉了,面试官人还是不错的,看到我挺紧张的,也叫我调整调整状态。

加油!争取下次更好

#面经笔经##阿里巴巴#
全部评论
老兄,你的这个编程题存在问题吧,递归中的条件有问题。然后你这个程序运行会出现栈溢出的异常
1 回复 分享
发布于 2020-04-25 11:35
动森??
点赞 回复 分享
发布于 2020-04-18 15:35
多谢楼主的Spring分享
点赞 回复 分享
发布于 2020-04-18 14:51

相关推荐

2025年6月13日时长20min---------------------------1.自我介绍0.问有了解过react吗1.react和vue之间的区别2.简单介绍一下vue是什么3.问响应式原理和虚拟dom的关联:我这里就简单回答了一下视图的关系。加载渲染什么的4.介绍我的简历上第一个项目&amp;项目过程中遇到的难点5.前面说解决加载比较慢的问题,问怎么解决的--Vue&nbsp;Route6.Vuex在项目中的作用:题主就简单用过vuex存储一部分数据,从这里取数据。7.介绍我简历上的第二个项目&amp;遇到哪些难点8.工作过程中,前端和数据开发的占比:因为题主说自己有负责一部分的数据库反问环节:1.前端和数据开发这一块怎么样她说我有些模糊角色定位,而且通过我的描述我的数据开发更多是后端同学做的(本来就是,因为做的都是个人/几个同学弄的项目)2.公司前端业务这一块是怎么样的好像弄什么智能体agent吧,交互式的。最后说懂数据开发其实是加分项,但是更多要配合前端业务,懂怎么埋点,基本的sql语句,还有数据可视化这一块。--------------------------总体感觉下来,面试过程很轻松,没有开视频,面试官是女的而且听声音是广东人(我也是广东的)27~32岁的感觉。但是面试过程中没有什么提示吧。(温柔就完事了要什么过程提示!)这几天忙着考试,一点八股没看,本来想着拒掉的,但舍友(阿里大佬)鼓励我多试试,增加经验。过程中就是我对项目没有熟悉掌握吧,接下来还是要继续熟练掌握,然后多背背八股。
查看12道真题和解析
点赞 评论 收藏
分享
1.自从上次实习发布之后就再没发过动态了,主要是秋招经历太难搞了,一整个人麻了,不过还是要感谢实习经历,因为有两段找实习的经历,所以才会有现在最终的互联网offer。趁着现在在动车上闲着,写点反馈牛油们!加油!2.小结就是:合理评估自己找实习或者校招成功与否的原因,自身原因占比与运气成分占比。3.之所以秋招能坚持下来是因为第一段实习的经历,当时由于没有一个合理的判断加上没有坚定自己的想法导致没有去到互联网实习,这也给后续互联网之路埋下了一个很大的隐患。从有机会打牌到进入互联网需要好运相伴。4.从秋招到春招,首先第一个一定不要不想投,该投的都要投,不管是国企还是互联网,有时间都去面试,这不仅可以积累很多经验(虽然三五次面试之后,这些经验的作用就不一定大了,但是可以让你保持手感口感hh)。其次就是,有句话说得好,有心摘花花不开,无心插柳柳成荫。这在秋招阶段是很常见的,但是需要你猛猛投简历,这句话在我身边很多同学上都应验了,而且都是去的很好的单位。5.国企面试,对于国企面试来说,第一第二次的体验很重要,因为我们去面体制内的劣势在于不熟悉面试流程,刚开始嘴笨放不开,所以第一次第二次就是给你体验的,最好是那些你不想去的国企用来练兵升级。我第一次就去的一个省级挺不错的国企的,由于第一次毫无疑问挂了。如果是后续让我面,我有信心可以过的。因为后续的国企,只要是不是招聘个位数的,我都表现的游刃有余了,只不过时间太晚了,醒的太晚了呜呜呜。6.互联网岗位投递,互联网面试真的需要天时地利人和。这个岗位有hc,这个岗位目前还没有待定的候选人,你刚好遇上这个岗位并且处于流程初阶段。大多数情况下,很多人面到三面挂,并不是因为你实力不行,只不过你的流程比别人晚了一些,这个岗位已经有候选人了。所以到你这只能是流程结束了。7.互联网面试,面试主要就是手撕,八股,实习和项目。如果你的实习经历比较丰富或者面试官比较感兴趣,基本上就是手撕加实习项目,最多加一些八股随意问问。在这里面,需要的就是每天刷刷题保持手感是很重要的,我就是断断续续,导致有时候手撕忘记了所以没及时接收面试导致第六点的失败。然后就是实习或者项目,亮点很重要,超级重要,你和别人的区别就是这个亮点的区别。最后,加油,祝好!希望每一个努力的人都能找到自己心仪的工作。找工作不难,难的是自己的心态控制,塞翁失马,焉知非福。后续也许有时间再慢慢更新具体的面试吧·
点赞 评论 收藏
分享
评论
5
42
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务