某小厂面试加答案(6.15)

news2024/10/7 8:27:25

376bda631beae1406916c513da07dc8f.png看 Java 面试题就去 www.javacn.site

磊哥新推出《企业面经和答案》栏目,最近会持续更新,欢迎大家订阅此账号查看,或访问 www.javacn.site 查看。

面经来源于牛客,如下图所示:

d860fae2c427cfc05e6819db505fb35e.png

https://www.nowcoder.com/feed/main/detail/e81eab8523914514a80ff66f3cacd984

答案解析

1.自我介绍

在自我介绍时需要讲清楚以下 4 点:

  1. 你是谁?

  2. 你会什么技能?

  3. 使用这些技能做出过什么项目或成绩?(如果有编程大赛的经历更好)

  4. 你的优势是啥?为什么我们要用你?(可以讲解你的技术栈和企业技术栈的比较匹配)

2.Map 接口实现

Map 是接口,本身没有任何实现,但它的实现类有 HashMap、LinkedHashMap 和 TreeMap 等。其中,HashMap 是最常见的实现类之一,它的底层在 JDK 1.8 时,是使用数组 + 链表或红黑树的结构来实现的,在 JDK 1.8 之前,它使用的是数组 + 链表来实现的 。

3.HashMap 和 LinkedHashMap 有什么区别?

HashMap 和 LinkedHashMap 都是 Map 接口的实现,并且都是非线程安全的容器,它们的区别有以下两点:

  1. 迭代顺序:

  • HashMap:HashMap 不保证迭代顺序,即元素的遍历顺序是不确定的。它是通过哈希值进行快速查找的,而不考虑元素的插入顺序。

  • LinkedHashMap:LinkedHashMap 继承自 HashMap,它保留了元素的插入顺序。迭代 LinkedHashMap 时,元素按照插入的顺序进行访问。

性能:

  • HashMap:HashMap 在插入和查找操作上具有很好的性能,因为它使用了哈希表的快速查找特性。它的时间复杂度为 O(1)。

  • LinkedHashMap:由于 LinkedHashMap 需要维护插入顺序,所以在插入和删除操作上相对于 HashMap 要稍慢一些。但是,其性能仍然很好,并且与 HashMap 相比差异不大。

4.MySQL 索引失效的场景有哪些?

导致索引失效的场景有以下这些:

  1. 未遵循最左匹配原则

  2. 使用列运算

  3. 使用函数方法

  4. 类型转换

  5. 使用 is not null

  6. 错误的模糊匹配,使用右 % 开始查询。

具体详情,参考:https://www.javacn.site/interview/mysql/indexinvalid.html

5.Redis 数据结构

Redis 常用的数据类型有 5 种:String 字符串类型、List 列表类型、Hash 哈希表类型、Set 集合类型、Sorted Set 有序集合类型,如下图所示: 这 5 种常用类型的用途如下:

  1. String(字符串类型)常见使用场景是:存储 Session 信息、存储缓存信息(如详情页的缓存)、存储整数信息,可使用 incr 实现整数+1,和使用 decr 实现整数 -1;

  2. List(列表类型)常见使用场景是:实现简单的消息队列、存储某项列表数据;

  3. Hash(哈希表类型)常见使用场景是:存储 Session 信息、存储商品的购物车,购物车非常适合用哈希字典表示,使用人员唯一编号作为字典的 key,value 值可以存储商品的 id 和数量等信息、存储详情页信息;

  4. Set(集合类型)是一个无序并唯一的键值集合,它的常见使用场景是:关注功能,比如关注我的人和我关注的人,使用集合存储,可以保证人员不会重复;

  5. Sorted Set(有序集合类型)相比于 Set 集合类型多了一个排序属性 score(分值),它的常见使用场景是:可以用来存储排名信息、关注列表功能,这样就可以根据关注实现排序展示了。

6.Redis 缓存击穿

缓存击穿是指在缓存系统中,某个热点数据过期或失效时,同时有大量的请求访问该数据,导致请求直接访问数据库或后端服务,给数据库或后端服务造成巨大压力,导致系统性能下降甚至崩溃的现象。缓存击穿可能发生的原因包括:

  1. 热点数据失效:当某个热点数据过期时,此时大量请求访问该数据,导致缓存失效,请求直接访问数据库。

  2. 并发访问热点数据:在高并发环境下,大量的请求同时访问同一个热点数据,导致该热点数据在缓存失效期间被并发地访问,触发缓存击穿。

为了解决缓存击穿问题,可以采取以下策略:

  1. 设置热点数据永不过期或过期时间较长:对于一些热点数据,可以将其设置为永不过期,或者设置一个较长的过期时间,确保热点数据在缓存中可用,减少因为过期而触发的缓存击穿。

  2. 加互斥锁或分布式锁:在访问热点数据时,可以引入互斥锁或分布式锁,保证只有一个线程去访问后端服务或数据库,其他线程等待结果。当第一个线程获取到数据后,其他线程可以直接从缓存获取,避免多个线程同时访问后端服务,减轻压力。

  3. 限制并发访问:通过限制并发访问热点数据的请求量,可以控制请求的流量,避免过多请求同时访问热点数据。

7.Spring Boot 常用注解

Spring Boot 中的常用注解有很多,比如以下这些:

  1. @SpringBootApplication:标记一个主要的 Spring Boot 应用的启动类。

  2. @Controller:将类标记为控制器,处理 HTTP 请求。

  3. @RestController:类似于 @Controller,但是它还将返回的对象自动转换为 JSON 格式。

  4. @RequestMapping:用于映射 HTTP 请求到具体的处理方法。

  5. @GetMapping、@PostMapping、@PutMapping、@DeleteMapping:用于分别处理 GET、POST、PUT、DELETE 请求。

  6. @RequestParam:用于将请求参数绑定到处理方法的参数上。

  7. @PathVariable:用于将 URL 路径变量绑定到处理方法的参数上。

  8. @RequestBody:用于将请求体绑定到处理方法的参数上。

  9. @Autowired:用于自动装配依赖关系,通过类型进行依赖注入。

  10. @Qualifier:与 @Autowired 一起使用,指定注入的具体实现。

  11. @Value:用于注入配置属性值。

  12. @Component:将类标记为 Spring 容器的组件。

  13. @Service:将类标记为服务层组件。

  14. @Repository:将类标记为数据访问层组件。

  15. @Configuration:标记类为配置类,用于定义配置项。

  16. @Bean:在配置类中使用,用于声明一个 Bean 对象。

8.#{} 和 ${} 的区别?

${} 和 #{} 在 MyBatis 中都是用于 SQL 参数替换的符号,它们的区别主要体现在以下几个方面:

  1. 功能不同:${} 是直接替换,而 #{} 是预处理;

  2. 使用场景不同:普通参数使用 #{},如果传递的是 SQL 命令或 SQL 关键字,需要使用 ${},但在使用前一定要做好安全验证;

  3. 安全性不同:使用 ${} 存在安全问题,如 SQL 注入,而 #{} 则不存在安全问题。

9.MyBatis 如何分页?

MyBatis 实现分页有两种常见的方式:

  1. 手写 SQL 进行分页:比如 MySQL 中使用 limit x offset y 即可实现分页,分页的公式是 (pageIndex-1)*pageSize;

  2. 使用分页插件 PageHelper:PageHelper 是一个开源的分页插件,基于拦截器实现。它通过拦截 Executor 的 query 方法,在执行查询前拦截并修改 SQL 语句,实现分页逻辑的。

10.TCP 和 UDP 有什么区别?

TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报协议) 都是传输层的重要协议,它们都是用来将数据从源主机发送到目标主机的,但它们存在以下几点不同:

  1. 连接机制不同:TCP 是面向连接的协议,需要在客户端和服务器之间建立一个稳定的连接,然后再进行数据传输;而 UDP 是无连接的协议,数据包可以直接发送给目标主机,不需要事先建立连接。

  2. 数据传输方式不同:TCP 采用可靠的数据传输方式,即在传输过程中使用序号、确认号和重传机制等控制手段来保证数据的可靠传输;而 UDP 采用不可靠的数据传输方式,数据包可能会丢失或重复,不提供数据可靠性保障。

  3. 数据传输效率不同:由于 TCP 需要进行连接、序号确认等额外的数据包传输,因此在数据传输效率方面相对于 UDP 要低一些。

  4. 数据大小限制不同:TCP 对数据包的大小有限制,最大只能传输 64KB 的数据,而 UDP 的数据包大小没有限制。

  5. 应用场景不同:TCP 适用于要求数据传输可靠性高的场景,如网页浏览、文件下载、电子邮件等;而 UDP 适用于实时性要求较高的场景,如视频会议、在线游戏等。

具体细节请访问:https://www.javacn.site/interview/net/tcpvsudp.html

小结

小厂的面试题总体来说不难,都是常见的八股文,在扎实的掌握了 Java 技术之后,这些问题应该都能拿下。


作者介绍

王磊(人称磊哥),13 年一线编程工作经验,3 年授课经验,曾就职于 360,资深技术博主。

曾担任某思教育和某谷电商的研发经理和技术负责人。

Java 技术传播者,博客总阅读量近 300 万次,博客成就:腾讯云年年度最佳作者/掘金社区优秀作者/拉勾专栏作者/GitChat(CSDN 旗下)畅销作家/慕课讲师/阿里云社区技术专家等,发布了 6 个技术专栏,分别是拉勾平台的《Java大厂真题与源码34讲》,GitChat 平台的《Java 面试全解析:核心知识点与典型面试题》《程序员的 MySQL 面试金典》《Redis 核心原理与实战》《程序员的 Redis 面试金典》,慕课网的《设计模式深度解析34讲》等。

我的 Java 训练营

由磊哥亲自带队的 Java 训练营开营了,提供的主要服务有:

  1. 一对一问题答疑:提供语音 + 远程调试的服务,帮你解决技术疑难问题。

  2. 面试辅导:简历辅导 + N 次模拟面试定位你的知识盲区,制定私人学习计划。

  3. 项目辅导:提供项目实现视频加项目源码,帮助你打造属于私人的非烂大街的项目,并提供项目面试辅导,教你在面试中搞定项目问题。

  4. 原创资料和面试视频课程:原创技术资料和 140+ 集原创面试视频。

训练营服务内容

  1. 简历辅导:不限次数。

  2. 模拟面试和知识补漏:每周一次的模拟面试和知识点补漏。

  3. 一对一技术答疑:语音解答 + 远程调试。

  4. 原创资料和面试课程:原创技术资料和 140+ 集原创面试视频。

  5. 面试真题:应聘公司面试真题 + 部分题解。

  6. 大厂直推:老学员直推。

  7. 制定一对一学习计划和监督服务:每日学习打卡督促。

  8. 面试复盘:分析面试中的问题和改善方案。

  9. 校招最新招聘信息分享:校招期间为学员提供最新招聘信息,以及好拿 offer 的公司信息同步。

  10. 公司历年薪资及谈薪建议:助你拿到最优工资。

  11. Offer 选择和职业规划:公司黑名单库帮你避坑。

也就是说,你只管学习,其他的我都帮你搞定

以上所有服务都是磊哥本人,一个有十几年工作经验的老程序员。

欢迎大家添加微信:gg_stone 咨询,备注【训练营】不然不予通过。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenAI的创始人World Coin项目介绍

🎯 在一个崇高的目标支持下,不停地工作,即使慢,也一定会获得成功。—— 爱因斯坦 如果你对项目感兴趣请联系v:weixin605405145 一、项目速览 项目背景 Worldcoin由OpenAI的创始人Sam Altman于2019年创立,就…

【C++】的继承

继承的概念及定义 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构…

010、体系架构之TiFlash

TiFlash TiFlash 功能架构异步复制一致性读取场景选择是选择TiKV还是TiFLash TiFlash 功能 异步复制一致性读取(写虽然是异步,但读可以做到一致性)引擎智能选择计算加速 架构 TiFLASH 也是通过raft 算法进行同步,但它不怎么消耗资源,因为它…

ProGuard 进阶系列(二)配置解析

书接上文,从开源库中把代码下载到本地后,就可以在 IDE 中进行运行了。从 main 方法入手,可以看到 ProGuard 执行的第一步就是去解析参数。本文的内容主要分析源码中我们配置的规则解析的实现。 在上一篇文章末尾,在 IDE 中&#x…

Vue Router4

后端路由 客户端请求不同的URL服务器匹配URL并给一个Controller处理Controller处理完返回渲染好的HTML页面或数据给前端 优点: 不需要单独加载js和css,直角交给浏览器展示,有利于SEO优化 缺点: 页面有后端人员编写或由前端人员…

告别里程焦虑:深蓝S7超级增程打造超长续航

提起新能源汽车,估计许多人第一时间都会想要查看它的续航里程。 虽然如今的新能源汽车在续航里程上较过去已经有了很大改进,但是稀缺的充电桩和漫长的充电时间,仍然无法让需要长途出行的用户摆脱里程焦虑。 那么问题就来了:有没有…

基于协同过滤算法的外贸出口电子电器产品的推荐系统的设计与实现源码+文档

博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 项目名称 基于协同过滤算法的外贸出口电子电器产品的推荐系统的设计与实现源码文档 视频演示 https://www.bilibili.com/video/BV1HW4y197Fe/ 系统介绍 摘 要 …

dubbo源码之-ExtensionInjector

dubbo源码之-ExtensionInjector 概述源码入口Extension 是如何获取到?SpiExtensionInjector 概述 其实ExtensionInjector 非常简单, 我们知道dubbo有ioc注入的功能, 是靠的set方法注入,对应的底层源码主要是ExtensionInjector 如…

MySQL数据库语言一、DDL

😘作者简介:正在努力的99年打工人。 👊宣言:人生就是B(birth)和D(death)之间的C(choise),做好每一个选择。 🙏创作不易,动…

华为OD机试真题B卷 JavaScript 实现【分班】,附详细解题思路

一、题目描述 幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友是否同班,请你帮忙把同班的小朋友找出来。 小朋友的编号为整数,与前一位小朋友同班用Y表示,不同班用N表示。 二、输入描述 输…

uniapp/手机APP使用支付宝支付(服务端)

博主介绍:✌全网粉丝4W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程,博主也曾写过优秀论文,查重率极低,在这方面…

chatgpt赋能python:Python接口应用于SEO的指南

Python接口应用于SEO的指南 Python成为了web开发中最流行的语言之一,而且尤其在SEO领域中被广泛应用。一些Python库和框架可帮助SEO团队实现其目标,如排名跟踪,爬取数据,进行网站分析,等等。在本文中,我们…

基于Hexo和Butterfly创建个人技术博客,(9) 优化butterfly主题配置文章版本

Butterfly官方网站,请 点击进入 本章目标: 掌握butterfly主题对文章的配置,熟悉并可按需配置到个人的博客站点中,本章内容是一个必会章节,不仅包括文章的UI美化、SEO相关配置还包括其它增加的功能,内容不多…

英语不好能不能学编程?

入门教程、案例源码、学习资料、读者群 请访问: python666.cn 大家好,欢迎来到 Crossin的编程教室 ! 常有人问我:我英语不好,想学编程行不行? 这个问题需要分情况讨论。 1. 可以学 如果你因为担心自己英语不…

chatgpt赋能python:Python怎么用?Python编程的入门指南

Python怎么用?Python编程的入门指南 Python是一种流行的高级编程语言,它被广泛应用于数据分析、机器学习、Web开发、自动化测试等领域。Python语言非常容易学习和使用,因此非常适合初学者和有经验的开发人员。在这篇文章中,我们将…

手把手教你在CentOS7.9上使用docker 安装MySQL5.7

前言 大家好,又见面了,我是沐风晓月,本文主要讲解如何用docker在centos7.9系统上安装MySQL5.7,以及如何设置MySQL的远程登录。 文章收录到【容器管理】和【数据库入门到精通专栏】,此专栏是沐风晓月对linux云计算架构…

chatgpt赋能python:Python怎么清除动点轨迹?

Python怎么清除动点轨迹? 引言 在数据科学和可视化的领域中,动点轨迹是很有用的工具。动点轨迹可以轻松地显示数据点的时间序列,这可以帮助分析者发现有关数据集的有用信息。然而,当轨迹过于密集和复杂时,这种可视化…

Spring Cloud Alibaba - Sentinel源码分析(一)

目录 一、Sentinel核心源码分析 1、Sentinel核心概念 1.1、Node之间的关系 2、Sentinel源码入口 2.0、Sentinel源码启动 2.1、SlotChain解析 2.2、NodeSelectorSlot解析 2.3、ClusterBuilderSlot解析 2.4、StatisticSlot解析 2.5、FlowSlot解析 2.6、DegradeSlot解析…

白鲸优化算法优化VMD参数,最小包络熵为适应度函数,提取最小包络熵对应的IMF分量,采集最佳IMF分量的9种时域指标,提取特征向量。以西储大学数据为例,附MATLAB代码

大家看到这篇文章,肯定会有疑问,难道本篇文章和上一篇文章不是一个意思嘛,这是来凑数的嘛……其实不然,如果各位读者仔细看,就会发现本篇文章和上一篇文章大有不同,这篇文章也是我一直以来想在上一篇文章基…

chatgpt赋能python:Python断言:如何断言等于两个值其中一个?

Python断言:如何断言等于两个值其中一个? Python是一种广泛使用的编程语言,而断言是它的一个重要功能。在编程中,我们可以使用断言来验证代码是否按照预期工作。但是,在某些情况下,我们可能想要断言两个值…