Seeker的奇妙求职历险(阿里客户端一面)

前言

8月10日晚上8点,我进行了阿里巴巴海外技术部的客户端面试。
本来约了7点,结果面试官在开会,就延迟到了8点。

自我介绍

就进行自我介绍,讲了一下研究生阶段做的几个项目。
1.澳大利亚网吧项目,负责桌面端和服务器端的开发。
2.惠尔门店系统,负责部分服务器的功能开发和数据库的优化。

数据库优化

Q:你刚才说到了数据库的优化对吧,你是怎么优化的呢?
A:三种优化手段。
首先建立索引,数据库中有一张订单表,他们查询的时候主要是使用订单类型、操作员ID、生成时间来进行查询的,所以我就对这三个字段建立了联合索引。
其次,我对一些SQL语句进行了优化,比如一些like查询,把%写在前面导致全表查询,但是也不是所有的优化都有效的,在订单表中,公司的操作人员习惯于查询订单的中间几位和最后几位,所以导致这个订单编号的查询无法进行优化。
最后,主要是对数据库中的一些表进行了水平分割和垂直分割,一些数据量比较大的表按照主键ID的奇偶进行分割,存放在不同的表中。在订单表中对一些独有的字段进行了垂直分割,单独拿出来做一张表,查询的时候在join,由于join是按照小表查询的,所以速度可能还会快一些。

网吧项目的安全性

Q:你们网吧项目用的是Http请求对吧,那如何保证其安全性呢?
A:主要通过Session认证权限,Session是通过Mac地址和一些操作员的信息生成的,所以不是那么容易自己冒充的。同时我们使用的是Https可以防止中间人攻击,所以还是比较具有安全性的。
Q:你刚才说到了中间人攻击对吧,你能不能说下什么是中间人攻击,如何防止中间人攻击。
A:通过CA认证、把CA的公钥保存在操作系统中等等。

final

Q:说一下final关键字。
A:我就说了修饰方法、基本类型、对象时候的区别,然后说到了final可以禁止重排序。
Q:什么是重排序?
A:JVM在执行的时候会对指令进行优化,在不改变执行结果的前提下,会改变指令执行的顺序,使得执行效率提升。比如在创建对象的时候,对象的引用传递和对象的初始化可能就会交换,这样就会引发一个多线程的问题。

然而他并没有问我多线程的问题。

接口和抽象类

Q:接口和抽象类有什么区别?
A:has-a,is-a,抽象方法和接口默认方法,举了ArrayList的例子,它实现了一个随机访问的接口和抽象LIst的父类。

List的区别

Q:ArrayList和LinkedList的区别
A:数组和链表的区别,插入和查找的时间复杂度。

GC

Q:说一下GC。
A:讲了一下GC,举了G1和CMS作为例子。

快排的思想

Q:说一下快排的思想和时间复杂度。
A:说了下原理,时间复杂度,什么时候会退化为o(n^2)。

进程、线程和协程

Q:说一下进程、线程和协程的区别。
A:进程和线程的区别,PCB块、线程是CPU的执行者(其实这里说的不太好,标准答案应该是进程是资源分配的最小单位,线程值cpu调度的最小单位),协程是M:N而线程是1:1。

智力题

红眼病

一个岛上有5个人的眼睛是红色的,其他95个都是蓝色的,当一个人知道自己的眼睛是红色的之后就要自杀,但是这个岛上的人都不能照镜子。反正就是一个很典型的题目,问我当一个外岛人说了一句你们之中有红色眼睛之后,会发生什么?
答:第五天的时候,五个人自杀。

他说,你看到过是吧?
我说,是的。

他说,那换一道。
已知一个家庭中有两个孩子,一个是女孩,另外一个也是女孩的概率。
这道题我不知道因为是紧张还是什么的,就没答上来。
事后想想,其实答案是这样。
一共2个孩子,四种情况。2男,1男1女,1女1男,2女。
已知有一个女孩,去掉2男的情况,还剩3中。
求2女的概率,1/3。

感觉有一些遗憾。

反问

我有什么地方还需要提高?
你回去好好想想自己的亮点,有没有什么竞赛论文专利,导师的项目和大厂实习还是不太一样的。
感觉我被劝退了。
之后再好好想想网吧项目和惠尔项目怎么重新设计架构怎么看上去牛逼一点吧。


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33241802/article/details/107922210