面试总结

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个月数据的拉链表。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值