首页 > 阿里CTO线一面面经
头像
你壁橱里的怪物
编辑于 2021-09-12 15:40
+ 关注

阿里CTO线一面面经

1、equals和==的区别

答::1、基本数据类型,比较的是值,2、引用类型,比较的是内存地址是否相等,equals和一样,但多数情况下equals会进行重写,按照重写的规则进行比较,比如String里面的equals重写了,就是比较字符串的内容。一般重写equals,就还要重写hashcode。HashCode相等,equals不一定相同,但是如果equals相同,hashcode一定相同。

2、为什么重写equals还要重写hashcode,不重写会怎样?

答:HashCode相等,equals不一定相同,但是如果equals相同,hashcode一定相同。有这个特性,要保持。举了map的例子,存放的时候先进行比较hashcode然后再比较equals,如果只重写一个的话,对象比较的时候会出错。

3、finally语句是怎么用的?

答:try catch语句后用finally。一般附带一个语句块,无论是否抛出异常都会执行finally后面的语句块,一般用于释放资源。

4、public protected default private的作用范围

答: public:可以被所有其他类所访问 protected:自身、子类及同一个包中类可以访问 default:同一包中的类可以访问 private:只能被自己访问和修改

5、有了解并发编程的知识吗?

答:我说了解Synchronized 和ReetrantLock这些,问面试官要不要说一下,然后没说又问了下一个问题TreadLocal变量。

6、ThreadLocal变量

答: 本地线程变量,我项目中正好用了这个,在web开发中经常用到ThreadLocal,一个请求对应一个服务器线程,线程私有安全的。底层是一个ThreadLocalMap,key是ThreadLocal,value是我们要存储的值。

7、项目中有没有使用线程池?

答:项目中没使用,但是有了解,说了一下线程池的创建,不能用Executor创建线程,自己手动自定义线程池,自定义7个参数。

8、为什么不能用Excutor创建线程?

答:会造成资源耗尽的风险,(这里问我系统的是没有定义线程数量吗?)然后我解释了一下newCachedThreadPool是创建可伸缩的newFixedThreadPool是创建固定的线程数量,newSingleThreadExecutor是创建单个的,但是由于newCachedThreadPool最大线程数量这个参数可以为Integer.max-value,所有会无限扩展到内存耗光。

9、刚才你说的参数是怎么用的?

答:我回答了一下线程的执行过程。

1、首先用户提交任务到线程池,判断当前工作的线程池有没有大于核心线程数,如果小于核心线程数,则创建线程并执行任务,如果大于核心线程数,则判断任务队列是否已满。

2、如果任务队列没有满,则把任务缓存到任务队列中

如果任务队列已满,则判断当前工作线程数量是否大于最大线程数量

3、如果没有大于最大线程数量,则创建线程并执行任务,如果大于最大线程数量,则启用线程池的拒绝策略handler

10、讲一下Full GC

答: 我答了一下full gc的触发条件,一开始紧张把fullgc 说成清理老年代的了,实际上是回收新生代和老年代。

1、调用System.gc():只是建议虚拟机执行Full GC。但是虚拟机不一定真正去执行。

2、年代空间不足:老年代空间不足的场景为前文所讲的大对象直接进入老年代、长期存活的对象进入老年代等。为了避免以上原因引起的Full GC,应当尽量不要创建过大的对象数组。除此之外还可以通过-Xmn虚拟机参数调大新生代的大小,让对象尽量在新生代多存活一段时间。

3、空间分配担保失败:使用复制算法的Minor GC需要老年代的内存空间做担保,如果担保失败会执行一次Full GC

11、频繁的full gc有什么问题?怎么排查?

答:系统性能变低。一般full gc不会频繁执行,如果出现了就要去查看一下是不是创建了大的对象或者空间分配担保失败。调大参数。

(这里感觉答的不太好,没说pringtGCDetail这个命令)

12、数据库有哪些了解?

答:这个问题挺大的,不知道怎么回答。面试官问可以说看了什么书。

然后说了数据库引擎。InnoDB:事务型数据库首选,支持事务ACID,支持行锁定和外键,用在需要高性能的大型数据库站点上。

MyISAM:不支持事务,较高的插入查询速度,在Web,数据仓储上最常用。

然后又说了InnoDB索引的底层B+树,从二叉查找树到二叉平衡树再到B树最后到B+树说了一下。

这里面试官问的不具体,说了一会我就不太敢说了,感觉问的不是特别难,不问具体的问题。

13、Like走索引吗?

答:我说了几种索引失效的情况。

1、 查询条件在索引列上使用函数操作,或者运算的情况 2、 查询条件字符串和数字之间的隐式转换 3、特殊修饰符 %%, Or 将不走索引 4、 索引优化器选择最优的索引

然后面试官没问like了,问我in not in走不走索引

14、不等于可以用索引吗?大于小于?

答:这里我答的不好,把我问住了,后来想起来like 如果%是后面匹配的话是走索引的,前面匹配不会走,但是大于小于这里不知道了。

正确应该是:在使用不等于(!=或者<>)的时候无法使用索引导致全表扫描 is not null也无法使用索引,但是is null是可以使用索引的.

15、场景题,几千万的数据如何读取处理处理?

答:这个场景题我也没答好,我一直想是让想出一条效率很好的sql语句,然后面试管最后说用limit分页,然后又问我limit可以吗?

这里面试官可能想问我优化分页查询。知识点是关于分页优化索引的吧,不过这里我不太清楚,答的不好。

然后我说没这样实际操作过,但是用explain分析过执行计划。

Limit分页优化

1、查询条件放到子查询中,子查询只查主键ID,然后使用子查询中确定的主键关联查询其他的属性字段;
先查询出主键id,再进行查询,主键有索引。
关联延迟查询

反问

后面面试官看起来还想问,但是没想到问什么?就问我项目是个人弄的,我说是,面试官可能觉得商业的项目才有问的价值吧,最后就说没什么问的了。

除了场景题,没实际操作过,不清楚,其他问的都挺简单的,后面在反问中和面试官聊,觉得没什么商业项目,而且是双非。

秋招这段时间就天天背面经了,但是投的简历是石沉大海,不知道什么时候是个头

大家秋招加油!都拿到心仪的offer


更多模拟面试

全部评论

(29) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐