阿里Java后端电话面试

生平第一次面试,还是阿里,非常紧张。因为是校招,所以面的比较简单。都是我简历上说熟悉的东西,回答的不是很理想。面试官说我广度还行,深度差的比较多。
面试官:“你好同学,我是蚂蚁金服的,现在方便面试吗”
我“方便方便”
面试官“请简单介绍一下自己”
这里注意吐字清晰,说清楚学校和专业
面试官“你说你最近是在学算法是吧”
问了我两个题
第一题 我这里有八个球,其中有一个有气泡,称几次可以把有气泡那个称出来
二分查找,三次
那么我如何称两次就锁定呢
我。。。。
第二题,上台阶的题听过吧。每次可以上一阶或者两阶,如何解决这个问题
有三种方法,递归 dp 还有用行列式可以以O(logN)的时间复杂度算出来
递归的怎么写
核心代码return f(1)+f(2)
有了解过HashMap吗,它的原理是什么,put和set方法如何实现
java的HashMap底层是红黑树实现的。
红黑树是1.8以后,之前是用什么实现的
我。。。。。(链表数组。学过没想起来)
那么它的put和set是怎么实现的
HashMap和HashTable哪个是线程安全的
HashTable安全,HashMap是不安全的
他们的底层实现的区别是什么
。。。
HashMap如果遇到hash碰撞如何解决
我回答的是hash扩容,答非所问

我说了平衡搜素二叉树的调整策略。。。答非所问
那么你说你熟悉mvc设计模式,请谈谈对它的理解
将显示层,模型层,控制层区分开,有利于程序的编写和维护
请简述servlet的生命周期
我。。。。(忘了。。。这个真的不应该,太菜了)
你是熟悉SSH框架是吧,Struts2和Struts1有何区别。
Struts1有个大漏洞。。。。。我不熟悉之前的版本,学的时候已经是2了
谈谈你所理解的Spring框架
它是一个一站式管理框架,能够很方便的和其他框架整合,将创建实例对象通过IoC交给Spring框架方便管理。
创建实例对象有几种方式
new,反射
Spring框架使用了哪些设计模式,说你知道的
单例模式,工厂模式,代理模式。。说了六七个
Spring中为何要使用单例
我,线程安全?
为什么要通过Spring的控制反转创建对象,工厂模式不也可以单例创建对象吗
工厂模式下如果代码发生变动要做修改,而Spring框架可以通过反射机制动态创建。
bean对象在spring中是如何注入的
注解和配xml文件
autowared和resource的区别
。。。。。
会git的基本操作,说说你常用的命令
push 。。。。
如果我们有300人开发同一个项目,我需要删除其中某一条分支,命令怎么写
。。。。。。。。
你说你了解在linux下的基本操作,那么linux下查看端口用哪个命令
。。。。
。。。。
说几个你知道的
cd ls cp tar install …
你简历上没写分布式,对这个东西做过了解吗
了解过一点negix反向代理
谈谈你所理解的分布式,它的优缺点在哪
一部分机器出问题不会影响业务,只是处理速度略微下降。。。
我巴拉巴拉。。都没说到点子上
negix是如何实现反向代理的
有一个分配任务的服务器,将每条请求动态分配到所有服务器
如何保证每一次访问都是同一台分布式服务器处理我的业务
请求中绑定ip,每次这个ip过来我就将它分配到它第一次访问的机器
negix默认超时时间是多少
。。。。。75秒
这75秒是从访问开始还是光是在项目等待的
从访问开始
这块不太了解。。。但面试官好像很看重分布式这些多问了点

你是网络工程专业的,简述一下HTTP协议与HTTPS协议的区别
吧啦吧啦
简述一下我从访问www.baidu.com到响应是怎样一个过程
吧啦吧啦
UDP和TCP是区别,适用情景
这个比较简单,问的很浅

你说你了解过MySql优化那么请问一下我需要删除一条数据你怎么坐
delete语句
面试官。。。。你确定吗?
有没有了解过软删除
提示了我一下我记起来了,回答通过改变某个字段让这条数据不显示,从逻辑上删除但它其实还在数据库里
对,软删除又叫逻辑删除,每条数据都是很宝贵的,不能轻易的delete掉
一般每条数据设置一个state字段,修改这个字段使其不显示
问了我写的几个项目中我如何设计ER图(简历里写的项目)
。。。。不太理想
事务知道吗
知道
有几种事务隔离级别
四种,分别是(巴拉巴拉)
如果是这种情形,举了一个例子,我的查询和修改操作是同一个实务
。。。。。
你自己举实际例子说明一下什么隔离级别会出现什么样的问题
。。。。
了解实务锁吗
乐观锁和悲观锁?
他们有何区别
悲观锁默认每一次操作都会被干扰,所以每次都给事务加锁,等这次事务结束后其他的才能操作。
乐观锁是每一次默认自己的操作不会被干扰,等提交的时候再看自己原来的数据是否被修改。
乐观锁遇到那种情况怎么办
回滚数据
面试官。。。。确定吗?
我。。。。。。
了解过数据库索引吗?(问的都是我说了解他才问,比方问前端的时候我说不是很了解,只是对js和jquery是会用的档次)
是用B+树实现的
那么为什么不用b树不用其他树,用B+树?它好在哪,或者说它为什么快?
。。。。。。。
https://www.cnblogs.com/tiancai/p/9024351.html 看这个博客
B+树的性质(下面提到的都是和B树不相同的性质)

1、非叶子节点的子树指针与关键字个数相同;
2、非叶子节点的子树指针p[i],指向关键字值属于[k[i],k[i+1]]的子树.(B树是开区间,也就是说B树不允许关键字重复,B+树允许重复);
3、为所有叶子节点增加一个链指针;
4、所有关键字都在叶子节点出现(稠密索引). (且链表中的关键字恰好是有序的);
5、非叶子节点相当于是叶子节点的索引(稀疏索引),叶子节点相当于是存储(关键字)数据的数据层;
6、更适合于文件系统;
相比B-树,B+树的父节点也必须存在于子节点中,是其中最大或者最小元素,B+树的节点只存储索引key值,具体信息的地址存在于叶子节点的地址中。这就使以页为单位的索引中可以存放更多的节点。减少更多的I/O支出。因此,B+树成为了数据库比较优秀的数据结构,MySQL中MyIsAM和InnoDB都是采用的B+树结构。不同的是前者是非聚集索引,后者主键是聚集索引,所谓聚集索引是物理地址连续存放的索引,在取区间的时候,查找速度非常快,但同样的,插入的速度也会受到影响而降低。聚集索引的物理位置使用链表来进行存储。
你了解jvm吗,简述遍历过程和jvm的原理
。。。。。。
面向对象语言中多态的好处
吧啦吧啦
了解线程吗,实现多线程有几种方式
两种,继承Thread类和实现Runable接口
他们的优缺点各是什么
用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
实现方式和继承方式有什么 区别呢?
实现方式好处:避免了单继承的局限性。
在定义线程时,建立使用实现方式。

)两种方式区别:
1继承Thread:线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。

了解自动拆装箱吗,
自动装箱过程是通过调用valueOf方法实现(如Integer.valueOf(10)),而拆箱过程是通过调用包装器的 xxxValue方法实现(如Integer.intValue(a))。
Integer与int的区别
java是一门面向对象的语言,但是它的基本数据类型却不是一个对象,必须将int转成Integer才可以使用面向对象的方法
Integer i=10;int i=10;==的结果是什么
integer i=300;int i =300;==的结果是什么
。。。。你应该了解一下自动拆装箱的范围

你说你了解单例模式,那么为什么使用单例模式
保证每个类只创建一个实例化对象
使用单例的好处在哪里
。。。。。
创建单例有几种方式
懒汉式和恶汉式
它们的区别的是什么
一个是用到的时候才创建,一个是一开始就创建线程
哪个是线程安全的
恶汉式
它如何实现线程安全
从一开始就创建线程
如何加锁
。。。。。。。。
双锁怎么用,使用的好处
。。。。。。
为什么要判断两次线程存在?括号里里面和外面都要判断?

//就这里为啥判断两次
public class Singleton {  
    private volatile static Singleton instance; //声明成 volatile 保证编译器不进行优化  
    private Singleton (){}
    public static Singleton getSingleton() {  
        if (instance == null) {                           
            synchronized (Singleton.class) {  
                if (instance == null) {         
                    instance = new Singleton();  
                }  
            }  
        }  
        return instance;  
    }  
     
} 

。。。。(面试官求你了别问了,我真不不应该把熟悉单例设计模式写上去)

面试官,那就考察到这了,你距离我们招实习生的水准还有点差距,不是歧视你们学校。
理解理解。。。。。我知道我回答的很不理想,通过面试我认识到自己的诸多不足
还有什么其他想问的吗
针对我的情况能给我点学习建议吗。
多看源码,你简历写的《MySq深入浅出》 《剑指offer》《第一行代码》我也都看过
问你的很多问题都是书上的,你还需要认真学习,建议看书学习而不是视频,虽然看书比较慢但是你会对原理有深刻理解。如果以后想进阿里还需要在这些方面多下功夫,还有尤其阿里特别喜欢多并发和分布式的技术,像双十一那些后台是如何做到的。
还有MyBits,meaven了,redies解吗,
正在学,Mybits学习成本低一点,会sql就可以学
现在Hibernate5的版本以后这个框架又越多人来用,了解一下5的新特性。
SpringBoot了解吗,正在学,它是简化Spring框架那么默认配置。
如何实现简化的(面试官好像突然来了兴趣又提问了。。。。放了我这条咸鱼吧)
它直接是jar包,而且内置tomcat,默认配置是通过一个注解让stater来配置那些默认的配置信息。
随便聊了几句,多看开源项目,GitHub的,阿里很看重开源,坚持写博客是个好习惯。。。。。,以后想进阿里把之前说的那些都搞懂,再看看分布式那些学深一点,不要停留在会用就行这个程度。
我是不是您面试的里面最弱的
。。。。。。。

总结:
阿里需要的实习生就需要源码级别的阅读能力,不论是jvm,框架,还有java语言的底层,对数据库一定要非常熟悉《MySql深入浅出》一定要认真学习一遍,网络协议,新兴技术,尤其分布式和高并发好好看。如果你写熟悉,人家会按照掌握的程度考,写掌握按精通的标准测
我差的还好远好远。。。。以后要深入学习。现在的技术和学习强度远远不够。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值