找回密码
 立即注册
查看: 97|回复: 0

面经—(涂鸦智能)

[复制链接]

4

主题

0

回帖

14

积分

智能学员

积分
14
发表于 2024-12-21 18:30:40 | 显示全部楼层 |阅读模式
1.java

1.1 hash算法

1.1.1 除余法

除余法就是用关键码x除以M(往往取散列表长度),并取余数作为散列地址。
1.1.2 乘余取整法

先让关键码key乘上一个常数A(O<A<1),提取乘积的小数部分。然后,再用整数n乘以这个值,对结果向下取整,把它做为散列的地址。
1.1.3 平方取中法

由于整数相除的运行速度通常比相乘要慢,所以有意识地避免使用除余法运算可以提高散列算法的运行时间。平方取中法的具体实现是:先通过求关键码的平方值,从而扩大相近数的差别,然后根据表长度取中间的几位数(往往取二进制的比特位)作为散列函数值。因为一个乘积的中间几位数与乘数的每一数位都相关,所以由此产生的散列地址较为均匀。
1.2冲突解决办法

1.2.1 链表法

1.2.2 开放地址法



  • 线性探测法将散列表看成是一个环形表,若在基地址d(即h(K)=d)发生冲突,则依次探查下述地址单元:d+1,d+2,M-1,0,1,d-1直到找到一个空闲地址或查找到关键码为key的结点为止。
  • 二次探查法
    生成的后继散列地址不是连续的,而是跳跃式的,以便为后续数据元素留下空间从而减少聚集。二次探查法的探查序列依次为:12,-12,22,-22,等,也就是说,发生冲突时,将同义词来回散列在第一个地址的两端。
  • 随机探查法
  • 双散列法
    https://wwwjianshu.com/p/f9239c9377c5
1.3 如何让线程在5秒钟内获取到锁



  • ·对程序进行限流,降级
  • ·对线程根据等待时间做优先级升级,优先级越高,越先获取锁
  • ·对业务代码做优化
2.Spring

2.1 spring的注解原理

AnnotationInvocationHandler它继承自InvocationHandler,会使用jdk的动态代理生成数据。
判断注解是否存在


  • 注解通过反射获取,通过 Class对象的 isAnnotationPresent()方法判断它是否应用了某个注解
  • 通过 getAnnotation()方法来获取 Annotation 对象实例
  1. @TestAnnotation("defaultValue")
  2. public class Test{
  3. public static void main(String[] args){
  4. // 注解通过反射获取,通过Class 对象的isAnnotationPresent()方法判断
  5. 它是否应用了某个注解
  6. boolean hasAnnotation=Test.class.isAnnotationPresent(TestAnnotation.class);
  7.         if(hasAnnotation){
  8.                 //通过getAnnotation()方法来获取 Annotation 对象实例
  9.                 Tes tAnnotation testAnnotation=
  10.                 Test.Class.getAnnotation(TestAnnotation.class);
  11.                 System.out.println("id:"+ testAnnotation.id());
  12.                 System.out.println("msg:" + testAnnotation.msg());
  13.                 }
  14.         }
  15. }
复制代码
2.2 spring的设计模式

  1. https://blog.csdn.net/chao821/article/details/92400186
  2. https://blog.csdn.net/w05980598/article/details/79363046
复制代码
3.dubbo

3.1 dubbo的调用链路

  1. 如何从consumer调用到provider,provider又是如何处理信息的
复制代码
3.2 dubbo和http的区别

dubbo是一个分布式的服务请求框架,改用provider和consumer模式进行服务。consumer端无需关注provider端如何实现,只需在注册中心订阅即可到相应服务器请求服务,这样就实现了高性能和透明化。


  • 协议层区别
    1 HTTP,HTTPS 使用的是应用层协议 应用层协议:定义了用于在网络中进行通信和传输数据的接口
    2 DUBBO接口使用的是TCP/IP是传输层协议 传输层协议:管理着网络中的端到端的数据传输;因此要比 HTTP协议快
  • socket层的区别
    1 dubbo默认使用socket长连接,即首次访问建立连接以后,后续网络请求使用相同的网络通道
    2 http1.1协议默认使用短连接,每次请求均需要进行三次握手,而http2.0协议开始将默认socket连接改为了长连接
3.3dubbo请求体是啥?

1.消息头

1.png

magic:类似java字节码文件里的魔数,用来判断是不是dubbo协议的数据包。魔数是常量
0xdabb
flag:标志位,一共8个地址位。低四位用来表示消息体数据用的序列化工具的类型(默认
hessian),高四位中,第一位为1表示是request请求,第二位为1表示双向传输(即有返回
response),第三位为1表示是心跳ping事件。
status:状态位,设置请求响应状态,dubbo定义了一些响应的类型。具体类型见
com.alibaba.dubbo.remoting exchange.Response
invoke id:消息id, long类型。每一个请求的唯一识别d(由于采用异步通讯的方式,用来把请
求request和返回的response对应上)
body length:消息体 body长度,int类型,即记录Body Content有多少个字节。
2.消息体

实现源码在DubboCodec.encodeRequestData(Channel channel,ObjectOutput out,Object
data):
1、dubbo版本号
2、invoke的路径
3、invoke的provider端暴露的服务的版本号
4、调用的方法名称
5、参数类型描述符
6、遍历请求参数值并编码
7、dubbo请求的attachments
4.kafka

4.1简单介绍下kafka
4.2分区及分区副本,如何保证一致性的
4.3 kafka如何提高吞吐量的?和其他MO对比
5.线上遇到的问题

5.1CPU占用较高
5.2内存占用最高
===========================

1 .redis和zookeeper分布式锁应用场景的区别
2 .线程池的种类
3 .几个线程同时去做某种事情(强调同时)
4 .二进制为什么高
5 .IO流类别 ,以及随机读的方式
6 .dubbo的熔断

来源:https://blog.csdn.net/itisnull/article/details/106032111
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|PHLOC Learning ( 冀ICP备2024058322号-1 )

GMT+8, 2026-2-8 04:06 , Processed in 0.079417 second(s), 23 queries .

Powered by Phloc tech! X3.5

© 2001-2025 Phloc! Team.

快速回复 返回顶部 返回列表