面试题汇总---安心云&商涌

安心云

1.主键索引和唯一索引有啥区别:

主键是特殊的唯一索引,都是聚簇索引,不能存在相同的值。
主键一定是唯一索引,而唯一索引不一定是主键。
另外,主键不允许为空,而唯一索引可以存在空值(一个)。
主键可以是外键,而唯一索引不可以是。
一个表中可以有多个唯一性索引,但只能有一个主键。

参考:
https://blog.csdn.net/weixin_33375360/article/details/113371197
https://blog.csdn.net/csdnlijingran/article/details/88629851

2.zookeeper在dubbo中起啥作用:

1.当提供者出现断电等异常停机时,注册中心能自动删除提供者信息。

2.当注册中心重启时,能自动恢复注册数据,以及订阅请求。

3.当会话过期时,能自动恢复注册数据,以及订阅请求。

4.当设置时,记录失败注册和订阅请求,后台定时重试。

5.可通过设置zookeeper登录信息。

6.可通过设置zookeeper的根节点,不设置将使用无根树。

7.支持*号通配符,可订阅服务的所有分组和所有版本的提供者。

zookeeper为服务者提供一个注册平台,通过节点存放生产者的信息(一个HTTPS的链接),记录了生产者的url,端口号,超时时间,线程池,服务名等一些属性。消费者可以通过zookeeper来获取这些信息,然后调用生产者。

3.dubbo的泛化调用了解吗:

泛化调用 :要在服务消费端没有API接口类及模型类元(比如入参和出参的POJO 类)的情况下使用。在进行服务调用时相关参数通过 Map 形式将数据传递,由服务提供者将 Map 转换为 实体类,再进行调用。

简单来说 : 泛化调用即服务消费者端启用了泛化调用,而服务提供者端则是正常服务。

参考:
https://www.jianshu.com/p/3a22a53c7068
https://dubbo.apache.org/zh/docs/v2.7/user/examples/generic-reference/
https://blog.csdn.net/qq_36882793/article/details/118090702

4.如果zookeeper挂了消费者还能调用到生产者吗:

  1. 监控中心宕掉不影响使用,只是丢失部分采样数据
  2. 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
  3. 注册中心对等集群,任意一台宕掉后,将自动切换到另一台
  4. 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
  5. 服务提供者无状态,任意一台宕掉后,不影响使用
  6. 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

首先,zk是集群部署的话,那么一台挂掉了,会转移到另一台提供服务。
如果全挂了,那么已经注册在zk 上的生产者,还是能被消费者调用到,前提是消费者要已经调用过这个生产者,这样的话生产者的信息会被消费者缓存下来。但是不能再注册新的生产者上来了。
而如果是消费者全挂了,那么消费者会无限次的重连等待生产者恢复
在这里插入图片描述

参考:https://blog.csdn.net/qq_38366063/article/details/92387458

5.dubbo有什么好处:

优点:

1、服务注册中心自动注册和配置管理

它不需要写死服务提供者地址,注册中心基于接口名自动查询提供者ip;

使用类似zookeeper等分布式协调服务作为服务注册中心,能够将大多数的项目配置移入zookeeper集群;

2、透明化的远程方法调用

这就好像调用本地方法一样,调用远程方法;

只需要很简单的配置,没有任何API侵入;

3、服务接口监控和治理

Dubbo-admin和Dubbo-monitor提供了完善的服务接口管理和监控功能;

针对不同应用的不同接口,能够进行多版本、多协议、多注册中心管理;

可以对服务进行启用禁用的管理;
可以控制提供者是否对外提供服务;
可以对服务提供者进行加权和降权的操作,来控制服务被调用的概率;

4、软负载均衡及容错机制

能够在内网替代nginx lvs等硬件负载均衡器;

高可用:
在这里插入图片描述
直连:
在这里插入图片描述

负载均衡:
在这里插入图片描述
高可用-服务降级-服务屏蔽:
在这里插入图片描述
高可用-服务降级-服务屏蔽-集群容错:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

缺点:

其实说白了,dubbo存在着一个非常大的缺点,那么就是dubbo仅仅只支持一种语言,那就是java语言。

参考:https://blog.csdn.net/weixin_31349405/article/details/112954673

6.说说你对Redis的应用:

Excel导入频率限制
Excel导入结果查询

7.Redis的数据类型:

string,hash,set,zset,list

8.mysql联合索引:

联合索引(a,b),查询条件只用了b可以走索引吗?只用a能走索引吗?
用b的话不走,因为最左匹配原则,第一个不是a字段,所以不走
用a 的话走,因为第一个匹配的是a字段
用a,b的话走,索引覆盖
用b,a的话也走,因为会有查询优化器,优化之后还是a,b;索引覆盖。

9.dubbo的负载均衡策略:

随机,轮询,加权轮询,一致性哈希。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

10.你们用的dubbo的版本:

2.6.9/2.7.8/2.6.8/2.7.8

11.mysql版本:

8.4.0/8.2.23/5.1.34

12.除了技术方面有哪些收获:

文档的梳理和编写

13.公司有哪些代码规范:

1.判空方面:不要使用==null或者!=null;要用工具类里面的判空方法,比如collections,objects,StringUtils;
2.尽量不要使用魔法数
3.小数不要使用float变量
4.日志打印要注意调用的打印方法是否会打印出具体的行号。
5.查询调用外部依赖的方法,要用批量查询,不能循环调用。

14.讲讲JVM;

JVM分区
垃圾回收算法
各个代垃圾回收的过程

附加:

zookeeper相关面试题

面试:Dubbo&Zookeeper高频面试题-附加答案

dubbo优势_dubbo优点是什么?dubbo有哪些缺点?

史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!

Zookeeper高频面试题36问(附答案)

二.商涌科技:

1.主键索引和唯一索引有啥区别:

主键是特殊的唯一索引,都是聚簇索引,不能存在相同的值。
主键一定是唯一索引,而唯一索引不一定是主键。
另外,主键不允许为空,而唯一索引可以存在空值(一个)。
主键可以是外键,而唯一索引不可以是。
一个表中可以有多个唯一性索引,但只能有一个主键。

2.读写锁,公平锁,非公平锁,

读写锁:通过ReentrantReadWriteLock来实现的,
readLock 表示读锁,多个读操作可以并发执行。
writeLock 表示写锁,写锁同一时间只能有一个执行,其他的读锁和写锁都会被阻塞。

        ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
        ReentrantReadWriteLock.ReadLock readLock = lock.readLock();
        ReentrantReadWriteLock.WriteLock writeLock = lock.writeLock();

参考:
5分钟必懂-公平锁、非公平锁、可重入锁、自旋锁、读写锁
10分钟必懂-深入理解Synchronized关键字
死磕面试系列——请说出读写锁的公平锁和非公平锁特点及其原理
公平锁和非公平锁及读写锁

3.ReentrantLock:

在这里插入图片描述

ReentrantLock实现类lock接口,内部有三个静态内部类,sync,NonfairSync,FairSync。其中sync实现了AQS,而NonfairSync和FairSync继承了sync,分别表示非公平锁和公平锁。他们的区别在于获取锁的tryAcquire()方法,公平锁或先判断等待队列里面有没有其他节点,有则入队,没有则获取锁。而非公平锁是直接尝试获取锁。
在这里插入图片描述
在这里插入图片描述

4.map原理,

5.currentHashMap原理;

6.分段锁原理;

7.几个同步容器的区别;

(1)CountDownLatch :
倒计数,外部线程通过await()方法阻塞,其他线程到了不会被阻塞,可以自己完成业务,通过countDown()方法进行倒计数,为0了,外部线程才能结束阻塞,开始运行。
场景举例:吃饭。
先来的人先吃,后来的人后吃,直到所有人都吃完了,服务员才能开始打扫桌面。
其中服务员是外部线程,被await()方法阻塞。

(2)CyclicBarrier :
正计数,工作线程通过await()方法进行阻塞,先到的线程等待后到的线程,直到所有线程都到了,再一起运行。
场景举例:
跑步,先来的等后来的到,然后才能一起跑步
CyclicBarrier 就像一个栅栏一样,阻塞这先到的线程无法运行。他还有个特点,就是可以重置(reset()方法重置),循环使用。

区别:
(1)CyclicBarrier 可以重置,循环使用,CountDownLatch 是一次性的。
(2)CyclicBarrier是利用Lock的condition方法来进行线程的阻塞和唤醒,
CountDownLatch 是利用内部继承了AQS的静态内部类Sync来实现线程阻塞唤醒和调配的。

参考:
一句话说清楚 CountDownLatch 和 CyclicBarrier 的区别
CyclicBarrier和CountDownLatch区别
CountdownLatch和CyclicBarrier的区别使用场景与具体实现

8.AQS

9.cas,怎么解决死循环:

一般CAS会有一个循环次数,像currentHashMap的put方法,在获取锁的时候自选次数就是64次,超过的话就会改成阻塞获取锁。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.锁升级怎么保证线程安全

在这里插入图片描述

11.聚簇和非聚簇索引的区别,

在这里插入图片描述

12.B+树和B树的区别,

(1)b+树每个节点能拥有的子节点比b树多一个,所以相同节点数量的情况下,b+树层数更少;
(2)b+树索引跟数据都存放在叶子结点,找到了索引也就找到了数据,而b树叶子结点只有索引和主键(行号),找到索引之后还要根据主键进行回表。
(3)b+树的叶子结点有个顺序访问指针,指向相邻叶子结点,而b树没有,b树有一个指向null的指针。

参考:
B树与B+树简明扼要的区别
B+树和B树的区别

13.非聚簇索引怎么回表

在这里插入图片描述

14.Linux中,查看日志文件的命令

参考:
Linux 查看日志文件命令(整合)

15.@Autowired和@Resource注解的区别和联系

(1)@Autowired注解是Spring提供的,而@Resource注解是J2EE本身提供的
(2)@Autowird注解默认通过byType方式注入,而@Resource注解默认通过byName方式注入
如果一个service有多个实现类,就需要通过byName的方式来注入,
@Autowird注解要通过byName注入的话,需要和@Qualifier注解搭配使用
而@Resource注解可以加上name属性来指定

(3)@Autowired注解注入的对象需要在IOC容器中存在,否则需要加上属性required=false,表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错

参考:
@Autowired和@Resource注解的区别和联系(十分详细,不看后悔)
springboot中一个service接口多个实现类,如何注入

16.mysql搜索引擎

在这里插入图片描述在这里插入图片描述

17.MVCC

即多版本并发控制:通过保存某个时间点的数据快照来实现的。

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

18.分布式锁

附加:Linux常用命令:

目录切换:cd命令
cd /home 进入 ‘/ home’ 目录’
cd … 返回上一级目录
cd …/… 返回上两级目录
cd 进入个人的主目录
cd ~user1 进入个人的主目录
cd - 返回上次所在的目录

查看目录文件信息:ls命令
ls 查看目录中的文件
ls -F 查看目录中的文件
ls -l 显示文件和目录的详细资料
ls -a 显示隐藏文件
ls [0-9] 显示包含数字的文件名和目录名

创建目录:mkdir命令
mkdir dir1 创建一个叫做 ‘dir1’ 的目录’
mkdir dir1 dir2 同时创建两个目录
mkdir -p /tmp/dir1/dir2 创建一个目录树

删除文件/目录:rm
rm -f file1 删除一个叫做 ‘file1’ 的文件’
rmdir dir1 删除一个叫做 ‘dir1’ 的目录’
rm -rf dir1 删除一个叫做 ‘dir1’ 的目录并同时删除其内容
rm -rf dir1 dir2 同时删除两个目录及它们的内容

复制文件目录:cp
cp file1 file2 复制一个文件
cp dir/* . 复制一个目录下的所有文件到当前工作目录
cp -a /tmp/dir1 . 复制一个目录到当前工作目录
cp -a dir1 dir2 复制一个目录
cp -r dir1 dir2 复制一个目录及子目录

文件搜索:find命令
ind / -name file1 从 ‘/’ 开始进入根文件系统搜索文件和目录
find / -user user1 搜索属于用户 ‘user1’ 的文件和目录
find /home/user1 -name *.bin 在目录 ‘/ home/user1’ 中搜索带有’.bin’ 结尾的文件
find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件
find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件
find / -name *.rpm -exec chmod 755 ‘{}’ ; 搜索以 ‘.rpm’ 结尾的文件并定义其权限
find / -xdev -name *.rpm 搜索以 ‘.rpm’ 结尾的文件,忽略光驱、捷盘等可移动设备

归档/压缩,解压缩:
归档:tar:
在这里插入图片描述
在这里插入图片描述
tar命令常用的选项及其作用:
选项 作用
-c 建立新的压缩文件
-r 添加文件到已经压缩的文件
-u 添加改变了和现有的文件到已经存在的压缩文件
-x 从压缩的文件中提取文件
-t 显示压缩文件的内容
-z 支持gzip解压文件
-j 支持bzip2解压文件
-v 显示操作过程
-k 保留源有文件不覆盖
-C 切换到指定目录
-f 指定压缩文件

压缩:gzip
在这里插入图片描述
在这里插入图片描述
解压:gunzip
在这里插入图片描述
在这里插入图片描述

参考:
Linux常用命令大全(非常全!!!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值