佬在哪投的
点赞 2

相关推荐

timeline2024.11.26 技术1面 70min2024.11.27 技术2面 60min后续无响应,无感谢信,没去问。面试官技术很好,一般从项目到框架底层,到linux设计,问穿了。1. 自我介绍(姓名 学校 专业 当前研二在读,做过的项目有哪些,(学习项目 + 实验室合作开发项目)第一:x'x'x'x'xxxxx,其中我主要负责流媒体、图文、机构以及权限认证模块的开发工作第二:基于前面的微服务项目,在其中开发使用openFeign和dubbo进行远程调用的实现,然后后续在项目完工之后,我基于openFeign实现了自定义的RPC框架实现,并且后续在本地环境上,进行了党务学习平台项目中远程调用模块的升级,测试通过rpc基本使用没问题。但是没有提交上线2. 聊RPC框架3. 问:实现RPC框架最主要关注哪些模块(RPC概念、RPC的架构设计、需要哪些组成)rpc的需求(分布式系统、微服务,功能在不同的模块,微服务里面,需要调用)底层实际就是报文传输,发送请求,接收解析调用,封装结果返回。服务注册发现中心,只要是共享中间件都可以实现,redis、nacos、zookeeper都可以。服务提供方,将功能和服务列表汇报给注册中心。服务调用方,第一、能够实现一个无感知调用,调用某个功能,底层通过cglib动态代理,将其转换为数据包的形式第二、转换过程首先根据调用api得到服务名,然后从注册中心获取服务列表,然后设计一个负载均衡器(随机、轮询、hash)第三、cglib动态代理就是,先获取调用的关键信息,然后使用netty的LTC解码器解决粘包半包问题,然后自定义协议设计(魔数、版本号以及消息类型等信息协商双方的通信)4. 问:一致性hash解决什么问题5. 问:一致性hash还有什么作用?(6. 问:上述功能,用普通hash不行吗?7. 问:Java动态代理底层实现?(ASM + 字节码增强 + 反射技术 + 类加载器动态加载)8. 问:rpc的容错处理?(我说的netty底层消息做重传,实际tcp可以保证可靠,基于tcp应用层不需要重传,否则另一端压力会增加)9. 问:从现在来考虑,rpc容错处理用改解决哪些问题?哪部分进行容错?我说的主要是:服务提供方(宕机或者恢复,能够快速更新注册中心列表)拉取服务如果有问题,需要及时通知列表刷新,同时通知其他调用方进行故障转移(用mq或者定时任务)10. 问:请求大量超时,考虑怎么容错吗?(考虑日志 + 错误信息记录的形式,出现大量超时可能是 线路故障 | 服务提供宕机 通过邮件 + 短信通知运维进行处理)11. 问:上面这个方法,见效慢怎么处理? (考虑自动化恢复,当出现问题先记录日志,然后设计心跳机制 + 自动重启实例机制进行重启,还不行再短信通知)12. 问:容错角度有哪些错误?遇到问题怎么运转?服务提供方故障(心跳机制 + 若干次实例故障重启,还不行进行日志 + 短信通知)注册中心组件(本身进行多实例部署 或者 集群部署,同时调用方调用时,调用同时也进行心跳检测,如果出现问题及时尝试重启 或者 通知)13. 问:实例宕机,为什么可以尝试进行若干次重启? ( 因为一般实例宕机 可能因为内存溢出 OOM  或者进程崩溃,一个服务器部署多个服务,导致内存使用问题,或者电脑过热死机,这类问题可以通过重启解决,同时也是大多数情况,对于设计缺陷、代码问题,只能通过后续的排错调试debug来解决)14. 问:做过文件上传,讲一下文件上传的技术细节?我负责的流媒体模块,设计部分大视频的上传问题首先第一次设计,并没有考虑进行文件的分片上传,完整上传大文件,在网络较差,或者出现网络波动情况,会导致发送方需要重新传输完整的文件。升级版:用签名、摘要算法,保证传输的数据的完整性,同时防止被篡改,之后进行文件的分片上传,各个分片也会进行签名,会将签名头、分片序号等信息与数据一起传输,接收端收到之后会进行各个分片完整性校验,对于重复 或者内容有误,或者分片丢失的情况,会根据序号通知客户端进行重传,从而针对性重传。整体收到之后,再根据签名算法和签名头验签,然后进行文件的合并,上传到分布式文件系统MINio里面,之后将相关的信息加载到缓存redis以提升访问的效率。15. 问:io多路复用?16. 问:select poll epoll的底层原理? (主要是是否能够在监听到消息的同时,还能把有消息到来的socket放入用户态队列中)17. 问:文件上传,用哪种io合适?(用epoll避免轮询socket集合、以及使用nio减少java层面线程数量,减少线程资源的创建与销毁,提升性能)18. re问:nio相比bio有什么优势?(bio阻塞式io accept以及read都是阻塞读取,先请求拿数据,然后等待数据准备好,然后读取到java缓冲区;而nio只需要一个线程  + selector + 事件响应机制,即可处理,从资源占用和性能来讲都很好,底层socket准备好数据 将对应事件添加到selector的事件响应队列19. re问:深入聊?bio在accept为什么效率会低?低在哪? 20. 文件上传适合哪种IO?从这个角度看,BIO效率还低吗? (bio慢在需要等待内核态准备数据,然后再进行读取,而nio只要有触发的事件,说明对应的数据已经到达,著需要读取到用户态缓冲区即可(java)21. 生产环境下用哪种IO?文件上传?(考虑nio,线程资源占用较少,防止出现OOM问题,BIO如果不加以限制,不进行限流,在分片文件上传中会创建巨量的线程与客户端对接,进行数据的接收,会容易出现OOM问题。但是如果BIO+ 线程池,其实可以限制线程资源的分配上限,也是可以考虑使用的。22. arthas的trace命令的实现思路? (通过反射 + ASM字节码增强框架,对监控方法,调用链路方法进行字节码增强)23. 在什么时间做字节码增强?从敲命令开始?什么时候增强比较好? (我的思路是刚开始增强,也就是刚敲trace就增强,但是我当时不知道怎么拿到整个执行链路,所以说增强这一块其实挺含糊的)24. 提示:只增强trace的方法,递归调用方法链的其他方法的时间?怎么获取,怎么增强?还有哪些方法需要处理?(使用trace命令,先模拟执行一次,通过jvm虚拟机栈,获取监控方法的调用链路,同时知道链路上所有需要增强的方法,后续再使用ASM + 反射机制 + 类加载机制 对其进行扩展)25. 问:如果方法有很多的if else分支,刚才那种一次模拟,没办法还原完整的监控方法调用链?(从api设计 + 功能 + 测试用例的角度,设计各种条件下的测试用例进行模拟,通过多次模拟调用,输入不同的测试用例,从而能够访问ifelse所有的分支,从而获取完整的调用链路树,之后再通过ASM进行增强)26. 问:操作系统了解吗?Linux? 我说命令会,底层原理了解少27. 问:栈,为什么要实现栈的结构?(方法调用、局部变量,操作数栈,我说根据程序方法调用需求,设计的栈)28. 问:有刷题的习惯吗(力扣 500道,擅长什么 滑窗 回溯 dp) 结果给了单词拆分 + 二叉树最近公共祖先?#牛客创作赏金赛##字节##字节求职进展汇总##我的求职思考##ai智能作图#
点赞 评论 收藏
分享
牛客网
牛客企业服务