自我介绍

首先上来是面试官自我介绍,然后让我自我介绍,主要说了所在实验室和平时所做的 项目,在介绍的过程中涉及到了平时所做的项目,我这边主要是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

  • 说说对数据库中事务的理解

    这个还没复习到,没答上来,下面贴答案:

    1. 事务:就是被绑定在一起作为一个逻辑工作单元的 SQL 语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过 ACID 测试,即原子性,一致性,隔离性和持久性。

    2. 锁:在所以的 DBMS 中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

    3. 事务必须服从ISO/IEC所制定的ACIO原则,ACIO是原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)的缩写。

      • 事务的原子性:表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
      • 事务的一致性:表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
      • 事务的隔离性:表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
      • 事务的持久性:表示已提交的数据在事务执行失败时,数据的状态都应该是正确的。

    事务并发操作带来的问题

    2)脏读: 一个事务读取了另一个事务未提交的数据。

    3)不可重复读:一个事务两次读取同一个数据,两次读取的数据不一致。

    4)幻象读: 一个事务两次读取一个范围的记录,两次读取的记录数不一致。

  • 数据库连接jdbc中,如何实现事务

    当一个连接对象被创建时默认情况下是自动提交事务,每次执行一个SQL语句时,如果执行成功,就会向数据库自动提交,而不能回滚,为了让多个SQL语句作为一个事务执行,可使用一下步骤:

    • ——调用Connection对象的setAutoCommit(false),以取消自动提交事务。
    • ——在所有的SQL语句都成功执行后,调用commit方法提交事务。
    • ——在出现异常时,调用rollback方法,事务回滚。
    • ——若此时Conneciton没有关闭,则需要恢复其自动提交状态。
      注意:若使用的数据库引擎不是innodb,则事务无法回滚。而mysql默认的数据库引擎是MyISAM,所以第一次使用事务则需要更改数据表的引擎。