面试题

kafka模块

1.kafka 可以脱离 zookeeper 单独使用吗?为什么?

Kafka 不能脱离 zookeeper 单独使用,因为 kafka 使用 zookeeper 管理和协调 kafka 的节点服务器

2.kafka 有几种数据保留策略?

Kafka 有两种数据保留策略:按照过期时间保留和按照存储的消息大小保留。

3.kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 如何处理?

这个时候 kafka 会执行数据清除工作,时间和大小无论哪个条件满足,都会清空数据。

4.什么情况会导致 kafka 运行变慢?

CPU 性能瓶颈
磁盘读写性能
网络瓶颈

5.使用 kafka 集群需要注意些什么?

集群的数量不是越多越好,最好不要超过 7 个,因为节点越多,消息复制需要的时间就越长,整个 的
吞吐量就越低。集群数量最好是单数,因为超过一半故障集群就不能用了,设置为单数容错率更高。

Zookeeper

1.zookeeper 是什么?

Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google chubby 的开源实现,是
Hadoop hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置
维护、域名服务、分布式同步、组服务、选举机制等。

2.zookeeper 都有哪些功能?

集群管理:监控节点存活状态、运行请求等。
主节点选举:主节点挂掉了之后可以从备用的节点开始新一轮的选主,主节点选举说的就是这个选举
过程,使用 zookeeper 可以协助完成这个过程。
分布式锁: zookeeper 提供两种锁:独占锁、共享锁。独占锁即一次只能有一个线程使用资源,共享
锁是读锁共享,写锁互斥,即可以有多线程同时读一个资源,如果要使用写锁也只能有一个线程使用。
Zookeeper 可以对分布式锁进行控制。
命名服务:在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或服务的
地址,提供者信息等。

3.zookeeper 有几种部署模式?

Zookeeper 有三种部署模式:
单机部署:一台机群上运行。
集群部署:多台集群运行。
伪集群部署:一台机群启动多个 zookeeper 实例运行。

4.zookeeper 怎么保证主从节点的状态同步?

Zookeeper 的核心是原子广播,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 zab
协议。 Zab 协议有两种模式,分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导
者崩溃之后, zab 就进入了恢复模式,当领导者被选举出来,且大多数 server 完成了和 leader 的状态
同步之后,恢复模式就结束了。状态同步保证了 leader server 具有相同的系统状态。

5.集群中为什么要有主节点?

在分布式环境中,有些业务逻辑只需要集群中的一台机器执行,其他的机器可以共享这个结果,这样
可以大大减少重复计算,提高性能,所以就需要主节点。

6.集群中有三台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?

可以继续使用,单数服务器只要没超过一半的服务器宕机就可以继续使用。

7.说一下 zookeeper 的通知机制?

客户端会对某个 znode 建立一个 watcher 事件,当 znode 发生变化时,这些客户端会收到 zookeeper
的通知,然后客户端可以根据 znade 变化来做出业务上的改变。

补充:

zk 集群的选举机制
半数机制: zk 集群中有半数以上到的节点存活, zk 就能正常运行,所以 zk 集群节点最好是奇数个。
Zk 集群中只有一个 leader ,其他都是 follower
选举机制:会经过投票,票数大于半数以上的第一台服务器,当选 leader
-------------------------------------------------------------------------------------------------------------------------------------------------
Server1 Server2 Server3 Server4 Server5                                                                                                           
id 大的不给 id 小的投票, id 小的会给 id 大的投票, server1-5 id 依次增大)                                                
5 台机器: server1 开始投票, server1 投自己,因为 server1 id 最小,所以 server1 只有一票。                       
Server2 server2 会投自己, server1 也会投 server2 一票, server2 两票                                                           
Server3 server3 会投自己, server1 server2 各自投 server3 一票,这样 server3 就三票,三票在半数
以上(一共五台机器),后面的 server4 4 票)和 server5 5 票)虽然都比 server3 票数多,但是 server3
是第一个票数大于半数以上的,所以选择 server3 leader
-------------------------------------------------------------------------------------------------------------------------------------------------

Mysql

1.数据库的三范式是什么?

第一范式( 1NF ):强调的是列的原子性,即数据库表的每一列都是不可分割的院子数据项。
第二范式( 2NF ):要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖关键字
一部分的属性。(在 1NF 基础上消除非主属性对主键的部分函数依赖)
第三范式( 3NF ):任何非主属性不依赖于其他非主属性。(在 2NF 基础上消除传递依赖)

2.一张自增表里面总共 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入一条数据,此id是几?

表类型如果是 MyISAM ,那 id 就是 8
表类型如果是 InnoDB ,那 id 就是 6
InnoDB 表只会把自增主键的最大 id 记录在内存中,所以重启之后会导致最大 id 丢失。

3.如何获取当前数据库版本?

使用 select version() 获取当前数据库版本。

5.char varchar 的区别是什么?

Char n ):固定长度类型,比如订阅 char 10 ),当输入“ abc ”三个字符的时候,它们占的空间还
10 个字节,其他 7 个是空字节。
优点:效率高;缺点:占用空间;适用场景:存储密码的 md5 的值,固定长度的,使用 char 非常合
适。
Varchar n ):可变长度,存储的值是每个值占用的字节再加上一个用来记录其长度的字节的长度。
所以,从空间上考虑 varchar 比较合适;从效率上考虑 char 比较合适,二者使用需要权衡。

6.float double 有什么区别?

Float 最多可以存储 8 位的十进制数,并在内存中占 4 个字节。
Double 最多可以存储 16 位的十进制数,并在内存中占 8 个字节。

7.MySQL 的内连接、左连接、有连接有什么区别?

内连接关键字: inner join ;左连接: left join ;右连接: right join
内连接是把匹配的关联数据显示出来;左连接是左边表的数据全部显示,右边表的数据只显示符合条
件的;右连接和左连接正好相反。
 

HDFS

1 namenode 作用

接收用户操作请求
要是用来保存 HDFS 的元数据信息
元数据 : 文件块 , 文件存储位置 , 块大小 , 副本的个数 , 文件的权限 .....
fsimage - 它是在 NameNode 启动时对 整个文件系统的快照
edit logs - 它是在 NameNode 启动后,对 文件系统的改动序列
只有在 NameNode 重启时, edit logs 才会合并到 fsimage 文件中,从而得到一个文件系统的最新快照。
但是在集群中 NameNode 是很少重启的,这也意味着当 NameNode 运行了很长时间后, edit logs 文件
会变得很大 , 怎么去管理?
因此为了克服这个问题,需要易于管理的机制来帮助我们减小 edit logs 文件的大小和得到一个最新的
fsimage 文件,这样也会减小在 NameNode 上的压力。
为了能够保持文件系统最新的元数据。所以出现了 seconarynamenode

2 seconarynamenode 作用

它的职责是合并 NameNode edit logs fsimage 文件中。
1. 首先,它定时到 NameNode 去获取 edit logs ,并更新到 fsimage 上。
2. 一旦它有了新的 fsimage 文件,它将其拷贝回 NameNode 中。
3. NameNode 在下次重启时会使用这个新的 fsimage 文件,从而减少重启的时间。
4.Secondary NameNode 的整个目的是在 HDFS 中提供一个 检查点 。它只是 NameNode 的一个
助手节点 。是在文件系统中设置一个检查点来帮助 NameNode 更好的工作。它不是要取代掉 NameNode
也不是 NameNode 的备份。 检查点节点。

3 datanode 的作用

存储文件

mysql redis 的区别

类型上
Mysql 是关系型数据库
redis 是非关系型数据库
作用上
MySQL 用于持久化的存储数据到硬盘,功能强大,但是速度缓慢
Redis 用于存储使用较为频繁的数据到缓存中,读取速度快

JVM 模块

1.说一下 jvm 的主要组成部分?及其作用?

类加载器( ClassLoader
运行时数据区( Runtime Data Area
执行引擎( Execution Engine
本地库接口( Native Interface
组件作用:首先通过类加载器( ClassLoader )会把 java 代码转换成字节码,运行时数据区( Runtime Data
Area )再把字节码加载到内存中,而字节码文件只是 jvm 的一套指令集规范,并不能直接交给底层操
作系统去执行,因此需要特定的命令解析器执行引擎( Execution Engine ),将字节码翻译成底层系统
指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口( Native Interface )来实现
整个程序的功能。

3.说一下堆栈的区别?

功能方面:堆是用来存放对象的,栈是用来执行程序的。
共享性:堆是线程共享的,栈是线程私有的。
空间大小:堆大小远远大于栈。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值