精选
yes
Java后端
·2023-08-11
职场 项目 工作 #面试# #求职# 今天是我最开心一天,因为今天一同斩获两个offer,感谢鱼皮哥,真正让我学习到了很多以前从未学到的知识!也通过鱼皮哥的智能BI项目和API开发平台真正打动了面试官。(面试官后续给我打电话发offer的同时给说他们公司也在研究ChatGPT,让我后面自己好好准备研究研究chatGPT,他们公司也在搞这方面的业务,我自己是有点慌的,因为感觉就只是套了鱼聪明的模型) 面试一: 10号也是昨天线上面试了一个小公司,问的也比较基础,面试过程还是有一些紧张,不过还好过了。 面试问题: 1. 为什么要做智能BI项目和API开放平台项目? (BI:利用当前比较火的AI服务,更快更便捷的帮助企业完成数据源分析,举个例子,如果我们想要分析近一年网站的用户增长趋势,传统的数据分析平台需要手动导入数据、选择要分析的字段和图表、根据图表得出分析结论,需要专业的数据分析师完成。但本次设计的项目则不同,只需输入分析目标、上传原始数据,系统将利用AI自动生成可视化图表和学习的分析结论,让即使是外行人也能轻松使用,是我自己一直想做的一个平台。API:尽可能多的帮助和服务用户和开发者,让他们更方便的获取想要的信息和功能,接口开放平台可以帮助开发者快速接入一些常用的服务,比如历史上的今天发生的事情,每日一句英文,随机头像等,这些是小程序或者应用开发中常见的功能,这些接口可以让用用户获取更全面的功能和服务,提高用户体验,所以这是一个很有意义的项目,可以为开发者带来更多的便利和价值。) 2. 前端是否是自己写的?(这两个项目前端我基本跟着鱼皮哥写的,同时也跟着官方文档扩展了下,所以就跟面试官说自己写的) 3. 如果让你在做后端开发的前提下,做前端的一些事情你愿意吗?(那肯定愿意嘛,毕竟后端程序员基本都是往全栈发展的,所以公司需要我写前端那我也可以接受,但重心还是放在后端,同时前端我们男生和女生比也确实没什么优势) 4. 演示项目 ?(这里我把项目上线了,确保项目的真实性,同时面试官也提前通过地址访问过项目) 5. Maven 依赖传递产生版本冲突怎么解决?(通过指定版本或者排除冲突的依赖,关键字是<exclusions>) 6. HashMap底层原理?(1.7 数组 链表,1.8 数组 (链表 | 红黑树) jdk1.7 1) 初始化一个数组(默认长度16) 2) 当put 值时,计算key的hash值,二次hash然后对数组长度取模,对应到数组下标 3) 如果没有产生hash冲突(下标位置没有元素),则直接创建Node存入数组 4) 如果产生hash冲突,先进行equal比较,相同则取代该元素,不同,则插入链表 jdk8开始链表高度到8、数组长度超过64,链表转变为红黑树,元素以内部类Node节点存在 1) 计算key的hash值,二次hash然后对数组长度取模,对应到数组下标, 2) 如果没有产生hash冲突(下标位置没有元素),则直接创建Node存入数组, 3) 如果产生hash冲突,先进行equal比较,相同则取代该元素,不同,则判断链表高度插入链表,链 表高度达到8,并且数组长度到64则转变为红黑树,长度低于6则将红黑树转回链表 4) 如果存储的数据 key为null,存在下标0的位置 ) 7. ==和equal有什么区别?( ==是一个比较运算符 ①==:既可以判断基本类型,又可以判断引用类型 ② ==:如果判断基本类型,判断的是值是否相等 ③ ==:如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象 equals是Object类中的方法 ④equals:只能判断引用类型 ⑤默认判断地址是否相等,子类中往往重写了该方法,用于判断内容是否相等,比如Integer,String) 8. Integer和int有什么区别?应用场景分别是什么?(int 是 Java 的基本数据类型之一,用于表示整数值。它占用固定的内存空间,通常是 4 个字节。Integer 是一个类,属于 Java 中的包装类(Wrapper Class)。它将 int 包装为一个对象,从而提供了一些额外的功能。Integer 类位于 java.lang 包中,因此在使用时不需要显式导入。int 是基本数据类型,它在内存中的存储效率较高,适用于大量需要整数运算的情况;当需要在面向对象的环境中处理整数值时,可以使用 Integer 包装类。它使得 int 可以像对象一样进行操作。在集合框架(如 ArrayList、HashMap 等)中,由于集合要求存储对象而不是原始数据类型,所以可以使用 Integer 作为元素。在需要进行数据类型转换时,Integer 可以通过方法提供更多灵活性,可以将 Integer 转换为字符串(使用 toString() 方法)。Integer 对象允许表示 null 值,而 int 不行。这在某些情况下可能会很有用,比如表示缺失数据。) 面试二: 11号也就是今天下午,面试了一家大一点的公司,问的也比较全面。 1. 上来还是问为什么做这两个项目? 2. Maven 常用命令?(我就简单介绍了下clean、install、package这几个命令) 3. Tomcat 常用命令?(这块确实没怎么了解过,就和面试官介绍了之前在JavaWeb阶段学习了下,现在使用SpringBoot内置的Tomcat,然后基本没用过命令) 4. git的常用命令?(介绍了创建仓库、提交代码、克隆、拉代码的流程和命令) 5. Linux常用命令?(我就讲了我记得的几个命令,ls、cat、cd,因为确实没怎么使用过,都是用的时候百度) 6. HashMap 底层原理? 7. MySQL调优?(我就和面试官说查询的时候返回指定字段,不要全部返还,其他没了解过) 8. API项目使用缓存了吗?(其实我没有用缓存,然后我就欺骗了面试官,因为之前确实想过怎么实现,就大致讲了自己的看法:①先缓存不需要传参数,请求返回的结果数据一段时间内都是同一个结果的数据,那么可以使用redis直接缓存这些数据,设置过期时间时根据接口的更新时间来设置(比如每一天接口返回一个不同的数据),比如可以使用定时任务 缓存预热的方法在每天凌晨定时缓存,过期时间设置为24H;②通过数据监测或分析统计那些热点接口,使用业务名:类名:请求url:请求参数的组合作为缓存键,确保每个不同的请求都有唯一的缓存键,如果结果是单个值,则可以使用Redis的字符串类型存储;如果结果是一个复杂的数据结构,则可以使用哈希类型。(这类设置时过期时间可以稍微短一点,因为参数不一致性,每个人每次访问的参数都可能不同,可复用性不高,降低Redis压力),③缓存策略优化,使用LRU或LFU淘汰算法策略,LRF算法是使用双向链表和哈希表来维护缓存访问的顺序,将最新访问的接口提到前面,留在尾部的就是不经常访问的数据,进行淘汰。LFU淘汰策略是使用堆或者队列作为数据结构来存储每个接口的访问频率和时间戳,每次访问一个接口时,就将他的访问频率 1,淘汰数据时,根据访问频率将较低的淘汰,如果访问率相同就按照时间戳将最先被访问的数据淘汰;④为处理恶意请求,即缓存穿透和雪崩,可以使用缓存空值以及布隆过滤器,或设置随机的缓存失效时间避免缓存同时失效。) 9. API项目里SDK开发流程?(就创建项目引入依赖,然后编写配置类,用@Configuration、 @ConfigurationProperties("api.client")、@ComponentScan注解标记配置类 ,然后在resources目录下的MATE-INF下的spring.factories里加入配置类的包路径,然后在其他项目中引入依赖,在yml里加载依赖的参数。) 10. spring.factories是怎么加载SDK的?(这里我回答的是SpringBootApplication注解下EnableAutoConfiguration注解下Import注解,会在项目启动的时候去spring.factories文件中加载配置) 11. 智能BI项目,如何实现智能分析的?(考虑到成本问题,接入类似于ChatGPT的第三方的服务,引入AK,SK,然后通过预设好的模型,指定AI智能回答什么内容,比如分析图表这里AI只能生成图表代码以及分析结论,不能生产多余的东西,否则程序会报错) 总结: 我总共面试了四家公司,都还是比较看重基础的,所以我感觉Java基础非常非常重要,同时就是,做完项目一定一定要上线,因为只有上线了面试官可能觉得比较真实,这两场面试面试官都提前打开看了项目的,对于项目里的一些问题自己可以提前设想一下怎么处理,面试被问到也可以当作自己已经实现了,然后对面试官一顿输出。还有面试时候可以放松点,刚开始面试的两场我也特别紧张,不过后来这两个越面越自信,和面试官侃侃而谈。对于面试存在问题回来要搞清楚,反问环节可以问问面试官自己哪里做的不够好,有什么需要提高改善的地方。以便后续改正。第二个面试的大公司,对这两个项目都比较感兴趣,问的细节也比较多,然后给我透露他们公司也在搞chatCPT方面的业务,让我入职之前再学习学习chatGPT相关的知识。可见鱼皮哥带我们做的项目还是很潮的。最后也希望各位鱼友也可以斩获找到心仪的offer!成功上岸,冲冲冲!!!
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP