1、自我介绍
2、自己最近从事的项目
3、spring相关
【1】为何要用spring
【2】解释下IOC和AOP
IOC就是依赖控制转化,利用java的反射机制,将示例的初始化都交给spring。spring可以通过配置文件管理实例。
那为何不用工厂模式?
因为本质上IOC是通过反射机制来实现的。当我们的需求出现变动时候,工厂模式需要修改相应的源码,有相应的变化。但是IOC的反射机制允许我们不用重新编译源代码,因为反射的对象都是动态生成的。
4、使用过的数据库
mysql、sqlserver、Pgsql、Greenplum、oracle
其中sqlserver开放性差,只能运行在windows上;可伸缩性差,没有并行性,并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。也就意味着,如果需要并发,mysql等其他数据库可以增加服务器,以提高性能和吞吐量,sqlserver不可以。
mysql的抗击打能力相对较弱,数据量过大后性能下降。不支持函数和条件索引。
等。
PGsql作为一款收费的数据库服务,其相比较于大多数关系型数据库来说,拥有更多的有事
稳定性强,容灾强。
高并发后保证性能稳定
有丰富的几何类型,子弹,数组等
无锁性突出
可使用函数和条件索引,调优灵活
编程能力牛逼,支持递归。
pg可做到同步复制,异步甚至半异步复制,支持stream复制。
可完全异步。
Greenplum (分布式并行计算)
主营业务关注在数据仓库和商业智能方面
Greenplum的数据库引擎是基于注明的开源数据库Postresql的。
ORM框架
Mybatis框架和hibernate
hibernate在复杂关联中往往会带来严重的性能问题,也就是N+1问题,但是是面向对象支持的最好的框架。Mybatis相对而言比较容易,但是同时也会破坏一些面向对象的规则。
数据库的事务级别和数据的枷锁,比如乐观锁和悲观锁等
假设有一张用户表,正常表只能存放大概一千万或者两千万左右的数据,但是上亿的用户怎么存储。
答:可以纵向分隔和横向分隔
横向分隔,把表拆分成多个表然后分布式存储。具体查询相关资料
Linux
linux的库函数和内核调用
内核代用是指进入内核然后执行指令然后再回到用户态。
查看进程 :
ps -aux | grep
JVN虚拟机 底层的模块
线程
什么是线程安全
比如同时又两个线程访问同一个变量,或者连个线程操作数据库,那么它们对变量造成的修改所带的=来的结果可能是不确定的。
java用什么方法来实现线程安全。
关键字stnchronized,一些封装好的类,比如CountDownLatch,Atomic,关键字final,lock
实现线程的collections和COncurrentHashMap。
分布式作业
介绍分布式业务,
分布式遇到的问题
CAP问题;CAP是指Consistency一致性,Availability可用性,Partition Tolerance分区容忍性
设计模式
介绍指令模式
类似于函数式编程,指令模式就是指将各个操作封装为统一的接口,并且提供各个操作的实现类。这样我们只需要面向command接口编程,解除了调用类和指令之间的强耦合。
阿里面试必须掌握的内容:
JAVASE,尤其是线程
JVM原理
数据库(事务,加锁,ORM)
Linux
Spring(重点)
分布式作业
设计模式
大数据面试:
1、数仓中拉链表简介,使用场景以及具体实施方案。
拉链表是针对数据仓库中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史。记录一个事物从开始,一直到当前状态的所有变化信息。
使用场景:
由于表设计的原因,部分表的数据量很大,且每天还有增量数据。即使使用ORC压缩,单表的数据仍然庞大,在HDFS的备份就更大。或者需要对表中部分数据进行update操作。
解决方案:
1、每天只保留最新的一份,比如每天用sqoop抽取最新的一份全量数据到hive中(实现简单,就是重新使用抽取的数据替换掉以前的。缺点:没有历史数据)
2、每天保留一份全量的切片数据(比较稳妥,缺点就是存储空间占用量太大)
3、使用拉链表()
拉链表的算法原理实现:
1、采集当日全量数据到ND(NewDay)表;
2、可从历史表中取出昨日全量数据存储到OD(oldDay)表;
3、(ND-OD)就是当日新增和变化的数据,也就是当天的增量,用W_I表示;
4、(OD-ND)为状态到此结束需要封链的数据,用W_U表示;
5、将W_I表的内容全部插入到历史表中,这些事新增记记录,start_date为当天,而end_date为MAX值;
6、对历史表进行W_U部分的更新操作,start_date保持不变,而end_date改为当天,也就是关链操作。
拉链表和流水表
流水表存放的是一个用户的变更记录,比如在一张流水表中,会存放一个用户的每条修改记录,但是在拉链表汇中只有一条记录。
这是拉链表设计时需要注意的一个粒度问题。
查询性能:
拉链表的性能问题,存放更久的数据,数据量也会变得很大,查询的性能就比较低了。
解决:做索引。保留部分历史数据。提供对外暴露的一张近3个月数据的拉链表。