自我介绍
首先上来是面试官自我介绍,然后让我自我介绍,主要说了所在实验室和平时所做的 项目,在介绍的过程中涉及到了平时所做的项目,我这边主要是hadoop+kafka+hbase的大数据相关的内容的一个项目和很久以前做的MVC架构的酒店管理系统。
由项目展开详细追问
主要在我叙说项目过程中,会时不时的问到相关的专业知识内容。我这里主要被问到有udp的数据传输原理,以及为什么使用这样的一个协议。这里回答为UDP的即时通讯原理,和面向无连接的要求速度快的这样一个应用场景。
-
kafka数据传输原理
问:包含数据如何打包,key值设计原理,会问为什么这样设计,包含生产者和消费者具体如何对接。
答:kafka以键值对的形式进行数据传输,因为本身kafka是一个消息队列机制,因为项目中对分区没有要求,所以采用单分区的形式,key值中设计为数据的属性信息,key=仪表号-通道号-时间戳,key值采用string类型进行传输,value为一个float类型数组,在传输前将float数组转为byte字节,采用字节流的形式进行传输。在消费者端对key值进行解析,把value值解析回float数组,其实value值就是一个典型序列化的过程,消费者端通过解析key值将数据value存储到相应的地方。
-
hbase非关系型数据库
主要涉及到hbase的查询优化以及如何避免scan全表扫描策略,我这里回答使用filter过滤器,在面试官提醒下想起来有起始行startrow和结束行endrow对扫面范围进行限定这样一种策略。
过滤器包括:
- 行键过滤器:RowFilter
- 列簇过滤器 FamilyFilter
- 列过滤器 QualifierFilter
- 值过滤器 ValueFilter
- 时间戳过滤器 TimestampsFilter
- 前缀过滤器 PrefixFilter----针对行键
//设置开始行(前缀)和结束行(前缀) Scan scan = new Scan();//全表扫描器 scan.setStartRow("startRowKey".getBytes()); scan.setStopRow("stopRowKey".getBytes());
-
hadoop中涉及到的守护进程
master: NameNode,SecondaryNameNode,ResourceManager
slave1:DataNode,NodeManager
slave2:DataNode,NodeManager
-
说说对数据库中事务的理解
这个还没复习到,没答上来,下面贴答案:
-
事务:就是被绑定在一起作为一个逻辑工作单元的 SQL 语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过 ACID 测试,即原子性,一致性,隔离性和持久性。
-
锁:在所以的 DBMS 中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。
-
事务必须服从ISO/IEC所制定的ACIO原则,ACIO是原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)的缩写。
- 事务的原子性:表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
- 事务的一致性:表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
- 事务的隔离性:表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
- 事务的持久性:表示已提交的数据在事务执行失败时,数据的状态都应该是正确的。
事务并发操作带来的问题
2)脏读: 一个事务读取了另一个事务未提交的数据。
3)不可重复读:一个事务两次读取同一个数据,两次读取的数据不一致。
4)幻象读: 一个事务两次读取一个范围的记录,两次读取的记录数不一致。
-
-
数据库连接jdbc中,如何实现事务
当一个连接对象被创建时默认情况下是自动提交事务,每次执行一个SQL语句时,如果执行成功,就会向数据库自动提交,而不能回滚,为了让多个SQL语句作为一个事务执行,可使用一下步骤:
- ——调用Connection对象的setAutoCommit(false),以取消自动提交事务。
- ——在所有的SQL语句都成功执行后,调用commit方法提交事务。
- ——在出现异常时,调用rollback方法,事务回滚。
- ——若此时Conneciton没有关闭,则需要恢复其自动提交状态。
注意:若使用的数据库引擎不是innodb,则事务无法回滚。而mysql默认的数据库引擎是MyISAM,所以第一次使用事务则需要更改数据表的引擎。