面试题(每日新增)

2018-10-23  本文已影响10人  须臾之北

2018/10/22
面试题:
* 1.JDBC工作原理
* 2.本地yum源配置过程(使用光盘镜像)

一、面试题
1.JDBC工作原理
** JAVA Database Connectivity java 数据库连接
** 具体步骤:
** jar包 ——> classpath : 右键jar包——>add to BuildPath
** 加载驱动——load the driver
** 向DriverManager注册驱动
** 利用反射加载驱动
** 此时加载驱动时,静态代码块会被执行
--------------------------------------------------------------------
try {
Class.forName(driverClass); //com.mysql.jdbc.Driver
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
--------------------------------------------------------------------
** 获取连接
** 注意连接字符串url = jdbc:{dataBase}://{host}:{port}/{schema}
---------------------------------------------------------------------
try {
conn = DriverManager.getConnection(url,user,password);
//url = jdbc:mysql://localhost/student
}
catch(SQLException e) {
e.printStackTrace();
}
---------------------------------------------------------------------
** 获取操作对象
** Statement和PreparedStatement
------------------------------------------------------------------------------------
Statement stmt = conn.createStatement();
PreparedStatement prestmt = conn.prepareStatement("insert into dept values(?,?,?)");
------------------------------------------------------------------------------------
** 操作数据库
** executeUpdate(sql)
** 返回int型,变更条数
** executeQuery()
** 返回ResultSet,Cursor游标——>在结果表中移动游标
** 接受返回结果
** 释放资源
** 关闭ResultSet -> 关闭StateMent(数据库会话) -> 关闭连接
** 以关闭connection为例
--------------------------------------------------------------------
static void closeConn(Connection conn) {
try {
if(conn != null)
conn.close();
}
catch(SQLException e) {
e.printStackTrace();
}
finally {
conn = null;
}
}
--------------------------------------------------------------------

2.yum源配置过程(使用光盘镜像)
* yum作用:
** 解决rpm软件包安装时的依赖问题 -> 软件包依赖,软件版本不匹配,系统架构(x86,x86_64),系统版本
** 基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无需频繁地一次次下载和安装

* yum 基本语法:
    ------------------------------------------------------------------
    yum install -y httpd   (功能描述:安装 httpd 并确认安装) 
    yum list     (功能描述:列出所有可用的 package 和 package 组) 
    yum clean all    (功能描述:清除所有缓冲数据) 
    yum deplist httpd   (功能描述:列出一个包所有依赖的包) 
    yum remove httpd   (功能描述:删除 httpd) 
    ------------------------------------------------------------------

* 关联网络YUM配置
    ** 文件准备
        ** 一台联网的虚拟机
        
        ** 访问:http://mirrors.163.com/.help/centos.html在使用说明中,点击CentOS6进行保存

        ** 再保存文件的目录打开终端,执行pwd查看文件的保存位置

    **  替换本地YUM文件
        ** 把下载的文件移动到/etc/yum.repos.d/目录 
        ** mv CentOS6-Base-163.repo /etc/yum.repos.d/

    ** cd /etc/yum.repos.d/目录
        ** 用 CentOS6-Base-163.repo 替换 CentOS-Base.rep 

    ** 安装命令
        ** yum clean all
        ** yum makecache


* 制作本地YUM源 
    ** 准备一台服务器,版本 CentOS-6.8-x86_64-bin-DVD1.iso 
    
    ** 配置好IP地址
    
    ** 将 CentOS-6.8-x86_64-bin-DVD1.iso镜像挂载到/mnt/cdrom
       -------------------------------------------
       mkdir /mnt/cdrom
       mount -t iso9660 /dev/cdrom  /mnt/cdrom
       -------------------------------------------
    
    ** 修改本机上的YUM配置文件,将源指向自己,备份原有的YUM配置文件
       -------------------------------------------
       cd /etc/yum.repos.d/
       cp CentOS-Base.repo  CentOS-Base.repo.bak 
       -------------------------------------------
    
    ** 编辑CentOS-Base.repo文件
       vi CentOS-Base.repo
        -------------------------------------------
        [base] 
        name=CentOS-Local 
        baseurl=file:///var/iso 
        gpgcheck=1 
        enabled=1   #增加改行,使能 
        gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 
        -------------------------------------------
    
    ** 清除YUM缓存
       yum clean all 
    
    ** 列出可用的 YUM 源 
       yum repolist
    
    ** 安装相应软件
       yum install -y httpd 
    
    ** 开启 httpd 使用浏览器访问
       http://hostname:80(如果访问不通,检查防火墙是否开启了80端口或关闭防火墙) 
       service httpd start

    ** 将 YUM 源配置到 httpd(Apache Server)中,        
       其他的服务器即可通过网络访问这个内网中的YUM源了
        cp -r /mnt/cdrom/ /var/www/html/CentOS 

    ** 取消先前挂载的镜像 
        umount /mnt/cdrom 

    ** 在浏览器中访问 http://hostname/CentOS/ 
        若成功,则可以被其他服务器访问且指向该YUM源
    
    ** 让其他需要安装RPM包的服务器指向这个YUM源,准备一台新虚拟机,备份或者删除原有的YUM配置文件
        -------------------------------------------
        cd /etc/yum.repos.d/
        cp CentOS-Base.repo  CentOS-Base.repo.bak 
        -------------------------------------------

    ** 编辑 CentOS-Base.repo 文件 
       vi CentOS-Base.repo
       -------------------------------------------------------
       [base] 
        name=CentOS-hoetname 
        baseurl=http://192.168.11.101/CentOS 
        gpgcheck=1 
        gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 
       -------------------------------------------------------

    ** 在此虚拟机上执行
        yum clean all
        yum repolist

2018/10/23
面试题
1、Hive的运行机制和原理
2、ext4,fat32,ntfs,swap各文件系统的数据类型的区别,mbr和gpt分区表的区别,fdisk和parted分区工具的区别

1、Hive的运行机制和原理
* 从两个方面来回答这个问题:
** hive的安装部署和运行
** hive和其他的大数据生态圈的组件的集合

* 第一方面:hive的安装部署和运行
    ** hive 概念
        ** 将结构化的数据文件映射为一张表,并提供类 SQL 查询功能

    ** hive的安装部署
        ** yarn运行依赖的组件:
            ** Hadoop(hdfs yarn)
                ** hive启动时,只需要hdfs
                    ** hive也是可以启动的,可以执行单表查询
                    ** 不带聚合和分组函数的单表函数是可以进行的,因为只是简单的文件读写,不涉及到转换为MapReduce过程
                ** 涉及到mapreduce的才需要yarn的调度
        
        ** 关系型数据库(MYSQL)
            ** 可以使用schematools指定使用其他的数据库
            ** 如果不安装mysql,则元数据信息存储在derby中

    ** 穿插:hive与数据库的区别
        ** 数据库
            ** 数据文件存放在磁盘上
            ** 数据元数据记录在自己的数据库表中(mysql表)
                ** 存放的元信息:数据库对象结构信息
        
        ** hive
            ** 数据文件存放在hdfs上
            ** 数据元数据信息存放在关系型数据库中
            ** 这也就决定了hive的运行架构:
                ** hive运行架构
                    ** 本质是:将 HQL 转化成 MapReduce 程序 
                        1)Hive 处理的数据存储在 HDFS 
                        2)Hive 分析数据底层的实现是 MapReduce 
                            ** 可以通过HQL对结构化数据进行统计分析
                            ** 可以以分布式的方式执行计算任务
                            ** MR:计算模型
                            ** hadoop实现了MR计算模型,是一个分布式的计算框架
                        3)执行程序运行在 Yarn 上

第二方面:hive和其他的大数据生态圈的组件的集合   
    ** HQL——>MR——>数据文件从HDFS中读取,由YARN分配任务
        ** 如果只是查询,那么只是生成临时的结果显示出来
        ** 如果要将结果进行记保存
            ** create table {tableName} as {HQL}        此时HQL会触发MR,但是单表查询不会触发mapreduce,只是文件读写
            ** 将结果记录到表中,下次直接select * from {tableName},以此提高效率
    
    * hive操作    
        ** hive创建表
            ** 默认的数据库default ——> /user/hive/warehouse
                ** 数据库和数据库表都以文件夹的形式存在于HDFS
            ** 确定表类型——>内部表/外部表
                ** 内部表:默认就是内部表
                    ** HDFS将数据文件导入到内部表——会将数据文件移动到表文件夹下
                    ** 删除表时,数据也会被删除
                ** 外部表:external  
                    ** location:指定外部文件路径
                    ** 删除表,数据文件保留
            ** 需要指定数据文件的分隔符(\001)
        
        ** 创建数据库test
            ** /user/hive/warehouse/test.db
        
        ** show databases;
            ** 元数据:mysql(hive)中:DBS(id,数据库名称,存放路径,描述信息等)
            ** 此时不需要和hdfs进行交互
            ** 只需要查找关系型数据库中的表即可
        
        ** show tables
            ** 元数据:mysql(hive)中:TBLS(id,数据表名称,关联到数据库的id)
            ** 此时不需要和hdfs进行交互
            ** 只需要查找关系型数据库中的表即可
        
        ** desc {tableName}
            ** mysql(hive) ——> COLUMNS_V2(关联到表的id,字段名称,字段类型,字段顺序)
            ** 此时不需要和hdfs进行交互
            ** 只需要查找关系型数据库中的表即可
            
    * hive的执行   
        dataFlow(phoneNumber,upflow,downFlow)
            * select phoneNumber,sum(upFlow),sum(downFlow) from dataFlow group by phoneNumber;
                ** Mapper
                    ** 数据输入:数据表的数据文件
                    ** 数据输出:group by 字段分组
                        ** COLUMNS_V2表中字段名称和字段索引的对应
                ** Reducer
                    ** 数据输入:Mapper的输出
                    ** reduce方法:select 中出现的聚合函数
                    ** 数据输出:select后面的部分

        count(*) 和 count(phoneNumber)
            * count:统计所有非空数据的条数
            * count(*) 所有的都不是空才统计
                字段a 字段b 字段c
                111     333     null
                111     342     123
                111     355     124
                * count(*) 结果为2
                * count(a) 结果为3
            * count(phoneNumber) 统计phoneNumber不为空的条数

2、ext4,fat32,ntfs,swap各文件系统的数据类型的区别,mbr和gpt分区表的区别,fdisk和parted分区工具的区别

分区表区别:
* 能够支持的磁盘大小
* 分区
mbr
* 能够支持的磁盘大小2TB
* 4个主分区
* 3个主分区,一个扩展分区(分多个区)——>fdisk
gpt
* 能够支持的磁盘大小??
* 无限制的主分区——>parted

分区——>格式化(文件系统类型)——>mount{设备/分区} {目录}

上一篇下一篇

猜你喜欢

热点阅读