[面试] java开发面经-1

前言


目录

1.看到你的简历里说使用Redis缓存高频数据,说一下Redis的操作

2.说一下Redis的缓存击穿、缓存穿透、缓存雪崩

3.你的项目中使用了ThreadLocal,那么当有两个请求同时发出时,会怎么处理,可以同时处理两个请求吗

4.使用的是哪个版本的git

5.假如在git提交的有两份代码,该怎么将这两份代码合并

6.maven对项目进行打包,生成jar包后,要怎么找出class包

7.说一下优化数据库的方法,可以在哪看到数据库语言的优化

8.说一下mysql中的单列索引和联合索引

9.#{}和${}的区别

10.怎么防止sql注入

11.平时使用什么进行前端的编码,你可以修改前端的代码吗


26届大三,刚开始学习java开发不久,只做了黑马程序员的苍穹外卖项目(只做了系统管理后台部分),今早去第一次面试,所以总结并记录一下这次面试。

面试完的整体感觉就是自己差的太多,还需要学很多东西。

接下来说一下整个面试的过程:

1.自我介绍

2.开始问一些技术问题

技术问题:

1.看到你的简历里说使用Redis缓存高频数据,说一下Redis的操作

先启动Redis的服务,使用Redis的Java客户端Spring Data Redis操作Redis,用来简化 Redis 操作,Spring Data Redis中提供了一个高度封装的类:RedisTemplate,对相关api进行了归类封装,将同一类型操作封装为operation接口,可以通过创建RedisTemplate的对象,使用对象操作Redis。

Spring Data Redis的使用:

  • 导入Spring Data Redismaven坐标
  • 配置Redis数据源
  • 编写配置类,创建RedisTemplate对象
  • 通过RedisTemplate对象操作Redis
默认提供的客户端连接工具界面不太友好,同时操作也较为麻烦,所以使用了一个Redis客户端图形工具:Another-Redis-Desktop-Manager,通过Redis服务默认端口号 6379连接。

2.说一下Redis的缓存击穿、缓存穿透、缓存雪崩

缓存穿透

大量高并发的请求到达Redis,但Redis上没有请求的资源,缓存失败,这些大量的高并发请求就会转向数据库,向数据库请求资源,数据库的压力突然变大,并且在数据库中也没有找到需要的数据,就会引发一系列问题。

客户端请求的数据在缓存中和数据库中都不存在

原因

业务误操作,导致缓存中的数据和数据库中的数据都被错误删除了,所以缓存和数据库中都没有数据;

黑客恶意攻击,故意大量访问某些不存在数据的业务

解决办法

限制非法请求
在API入口处判断请求参数是否合理,比如请求参数是否含有非法制、请求字段是否存在,如果判断出是恶意请求就直接返回错误,避免进一步访问缓存和数据库。

缓存空值或者默认值

当发现缓存穿透的现象时,可以针对查询的该数据,在Redis缓存中设置一个空值或者默认值,这样后续请求就可以从缓存中读取到空值或者默认值,返回给应用,而不会继续查询数据库。(但可能导致Redis内存不足的情况)

使用布隆过滤器

在写入数据库数据时,使用布隆过滤器做一个标记,然后在用户请求到来时,先通过查询布隆过滤器快速判断数据是否存在,如果不存在,就不用通过就拒绝查询

缓存雪崩

当大量缓存数据同时过期和Redis故障时,大量请求访问到数据库,引发问题

原因

大量缓存数据同时过期:为了保证缓存中的数据和数据库中的数据一致性,会给Redis里的数据设置过期时间,当缓存数据过期后,用户访问的数据如果不在缓存里,就会访问到达数据库

缓存服务Redis故障

解决办法

设置缓存数据的失效时间尽量分散

将失效时间加上随机数,尽量保证不再同一时间失效

互斥锁

当某个请求的数据在内存Redis中不存在时,加上互斥锁,其他请求等待这个请求访问数据库并将数据更新在Redis内存中之后才继续进行访问,互斥锁需要加上过期时间,防止请求数据在数据库中也不存在造成无响应的情况

后台更新缓存

缓存不设置有限期,让缓存永久有效,将更新缓存的工作交由后台线程定时更新。

服务熔断或请求限流机制
服务熔断机制:暂停业务应用对缓存服务的访问,直接返回错误。等到Redis恢复正常后,再允许业务应用访问缓存服务。

请求限流机制:服务熔断会导致全部业务都无法正常工作,请求限流机制,就只将少部分请求发送到数据库进行处理,再多的请求就在入口直接拒绝服务,等到Redis恢复正常并把缓存预热完后,在解除请求限流的机制。

构建Redis缓存高可靠集群

之前说的服务熔断或者请求限流机制是缓存雪崩发生后的应对方案,为了避免由于Redis故障宕机导致的缓存雪崩问题,最后通过主从节点的方式构建Redis缓存高可靠集群,如果Redis缓存的主节点故障宕机,从节点可以切换成为主节点,继续提供缓存服务。

缓存击穿

Redis中的某个热点key过期,但是此时有大量的用户访问该过期key。

缓存击穿可以看成缓存雪崩的一个子集。

如果缓存中的某个热点数据过期了,此时大量的请求访问了该热点数据,就无法从缓存中读取,直接访问数据库,数据库很容易就被高并发的请求冲垮了。

解决办法

互斥锁

后台更新缓存

全网最权威!Redis缓存击穿、雪崩、穿透!刷新你的三观!!!_redis bitmap hash碰撞-CSDN博客

缓存雪崩、击穿、穿透_缓存穿透,缓存雪崩-CSDN博客

 【Redis】缓存穿透、缓存击穿、缓存雪崩的原因及解决方案-CSDN博客

3.你的项目中使用了ThreadLocal,那么当有两个请求同时发出时,会怎么处理,可以同时处理两个请求吗

这个问题记不太清楚了,问的问题记不清楚是什么样的了,对这个问题一点不知道咋回答

4.使用的是哪个版本的git

gitee(跟着苍穹外卖用的gitee)

5.假如在git提交的有两份代码,该怎么将这两份代码合并

1. merge命令

这是最常见的合并分支的方式,将其他分支合并到当前分支:

# 切换到接受合并的分支
git checkout master # 合并指定分支到当前分支
git merge feature

2. rebase命令

rebase可以将当前分支代码 rebase 到其他分支上,实现合并:

# 切换到需合并的分支
git checkout feature# 将feature rebase到master上  
git rebase master

3. cherry-pick命令

可以只picked某些提交应用到其他分支:

# 切换到目标分支
git checkout master# 拣选feature中的某些提交  
git cherry-pick <commitA-id>
git cherry-pick <commitB-id>

4. squash合并

将多次提交squash为一个提交然后合并:

git merge --squash feature

5. 临时合并(no-commit merge)

合并后不自动提交,可进行额外操作:

git merge --no-commit feature
# 对合并结果进行操作
git commit

在Git中合并代码的几种方式_git合并代码-CSDN博客

IDEA中使用Git提交代码(包括合并分支)_idea提交git-CSDN博客

6.maven对项目进行打包,生成jar包后,要怎么找出class包

7.说一下优化数据库的方法,可以在哪看到数据库语言的优化

优化数据库的八种经典方式_数据库优化-CSDN博客

谈谈几种数据库优化方法和依据的指标_如何根据指标做优化-CSDN博客

8.说一下mysql中的单列索引和联合索引

9.#{}和${}的区别

在Mybatis中提供的参数占位符有两种:${...} 、#{...}

  • #{...}

    • 执行SQL时,会将#{…}替换为?,生成预编译SQL,会自动设置参数值

使用时机:参数传递,都使用#{…}

  • ${...}

    • 拼接SQL。直接将参数拼接在SQL语句中,存在SQL注入问题

    • 使用时机:如果对表名、列表进行动态设置时使用

预编译处理

性能更高:预编译SQL,编译一次之后会将编译后的SQL语句缓存起来,后面再次执行这条语句时,不会再次编译。(只是输入的参数不同)

更安全(防止SQL注入):将敏感字进行转义,保障SQL的安全性。

10.怎么防止sql注入

使用#{},进行预编译处理,将敏感字进行转义,保障SQL的安全性

11.平时使用什么进行前端的编码,你可以修改前端的代码吗

vscode,能看懂前端代码,没试过修改前端代码

最后问了一下我的期望薪资

)我说2-3k

(本来想说薪资没有也行,毕竟第一段实习,收我就行,太抽象了,没敢说)

总结

只记得这些题目了,可能会有题目记错的情况,然后我在网上搜了一下相关的,把回答写了上去,不一定对,有些题目暂时不确定,等确定答案之后再回来改。

在这次面试中,我看到了我自己的好多问题,知识掌握的太过潦草,匆匆忙忙做了一半的项目就去投简历面试,准备的不够充分。但也给了我一些学习方向,苍穹外卖目前后台系统管理基本做完,增删改查都做过了,先暂停外卖,转方向Git、数据库优化和Redis,感觉面试官对Redis更感兴趣,数据库虽然学过了,但感觉学得并不深入,只要一问就傻眼,所以先把这几个部分补一下。

关于Git [Git] Git下载及使用 详解(附下载链接)-CSDN博客

数据库优化和Redis之后附上链接

不会就去学,反正还能学,做一件事最好的时间是十年前,其次是现在。

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

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

相关文章

第三课 Vue中的方法的定义及事件绑定指令

Vue中的方法的定义及事件绑定指令 方法定义 方法定义通过Vue对象中的methods属性进行拓展 1&#xff09;基础示例 new Vue({el: #app,methods: {fun(){alert(1);}}})2&#xff09;操作对象数据 new Vue({el: #app,data: {val: Hello World !},methods: {fun(){alert(val);}}…

【GESP】C++一级练习BCQM3037,简单计算,国庆七天乐收官

又回到了简单计算的题目&#xff0c;继续巩固练习。 题解详见&#xff1a;https://www.coderli.com/gesp-1-bcqm3037/ 【GESP】C一级练习BCQM3037&#xff0c;简单计算&#xff0c;国庆七天乐收官 | OneCoder又回到了简单计算的题目&#xff0c;继续巩固练习。https://www.cod…

内网渗透-隧道代理转发

文章目录 前言环境搭建工具清单工具使用Frp命令执行实验 Lcx命令执行实验 reGeorg命令执行实验Proxifier ew(EarthWorm)正向代理命令执行实验 反向代理命令执行实验SocksCap netsh命令执行 pingtunnel命令执行实验 ngrok命令执行&&实验 cs命令执行实验 前言 本文章介绍…

10/11

一、ARM课程大纲 二、ARM课程学习的目的 2.1 为了找到一个薪资水平达标的工作&#xff08;单片机岗位、驱动开发岗位&#xff09; 应用层(APP) 在用户层调用驱动层封装好的API接口&#xff0c;编写对应的API接口 ----------------------------------------------------…

CWE-1395:同源漏洞引起的安全威胁

1. 内容概述 产品依赖于一个或多个第三方组件&#xff0c;这些组件包含已知的安全漏洞。由于这些漏洞尚未被修复&#xff0c;可能会被攻击者利用&#xff0c;从而危及产品的整体安全性。未能及时更新或替换这些第三方组件可能导致严重的安全风险。 具体来说&#xff0c;许多产…

探索TCP协议的奥秘:Python中的网络通信

引言 在网络通信的世界里&#xff0c;TCP协议&#xff08;传输控制协议&#xff09;就如同一座桥梁&#xff0c;连接着数据的发送方和接收方。作为一名拥有20年实战经验的编码专家&#xff0c;我深知TCP协议在构建稳定、可靠的网络应用中的重要性。今天&#xff0c;我将带领大…

Redis:通用命令 数据类型

Redis&#xff1a;通用命令 & 数据类型 通用命令SETGETKEYSEXISTSDELEXPIRETTLTYPEFLUSHALL 数据类型 Redis的客户端提供了很多命令用于操控Redis&#xff0c;在Redis中&#xff0c;key的类型都是字符串&#xff0c;而value有多种类型&#xff0c;每种类型都有自己的操作命…

await的作用(举例)

问&#xff1a; 当方法a中又三个方法a1、a2、a3、a4都是异步函数&#xff0c;现在在a2、a4追加await&#xff0c;方法执行顺序是什么&#xff1f;主进程顺序是什么&#xff1f; 答&#xff1a; 通过一个具体的例子来说明当方法 a 中有四个异步方法 a1、a2、a3 和 a4&#xff…

Spring Cache 的说明及常用注解

一.介绍 Spring Cache是Spring Framework中的一个模块&#xff0c;用于简化和统一缓存的使用。它提供了一种将缓存逻辑与应用程序业务逻辑分离的方式&#xff0c;使得我们可以更方便地使用缓存来提高应用程序的性能。 二.主要特性 注解支持&#xff1a;Spring Cache提供了一组…

python 自学总结

# 这是一个代码的注释 注释可以使用# 一般而言#号后面要加空格表示规范&#xff0c;多行注释使用“”“ ”“”符合包裹 # type()这个是判断变量类型# 变量的形式 meny 50 # 自己定义叫标识符 不可以使用关键字 不可以用字母开头 规范性 下划线命名法 英文字母全部小写 …

Dbt增量策略模型实践指南

参考&#xff1a;dbt Incremental Strategies | Indicium Engineering (medium.com) 本文讨论dbt的增量策略&#xff0c;介绍工作原理、以及各自优缺点。下篇讲解如何在模型中实现增量策略。 使用增量模型可以仅仅处理最近的数据&#xff0c;减少数据处理成本和时间。当然首先要…

Solon 3.0 引入 SqlUtils :数据库操作的反朴归真

Solon 3.0 版本发布后&#xff0c;带了一个新的特性 —— SqlUtils。这一全新的数据库操作框架给开发者提供了更加透明、灵活的数据库交互方式&#xff0c;可显著提升了代码的透明度和维护性。本文将浅入探讨 SqlUtils 的引入背景、使用方法以及它对市场和开发者群体的潜在影响…

pytorch 与 pytorch lightning, pytorch geometric 各个版本之间的关系

主要参考 官方的给出的意见&#xff1b; 1. pytorch 与 pytorch lightning 各个版本之间的关系 lightning 主要可以 适配多个版本的 torch; https://lightning.ai/docs/pytorch/latest/versioning.html#compatibility-matrix&#xff1b; 2. pytorch 与 pytorch geometric 各…

自动化的抖音

文件命名 main.js var uiModule require("ui_module.js"); if (!auto.service) {toast("请开启无障碍服务");auto.waitFor();} var isRunning true; var swipeCount 0; var targetSwipeCount random(1, 10); var window uiModule.createUI(); uiMo…

ComfyUI | 5分钟部署最新Flux大模型

Midjourney 和 Stable Diffusion 都是目前流行的 AI 图像生成工具&#xff0c;它们能够根据文本描述生成高质量的图像。都是基于深度学习技术的文本到图像生成模型&#xff0c;但它们各自基于不同的大模型。 但最近推出了一款比前两者更强大&#xff0c;生成图像更加逼真&…

windows端口被占用但是查不到进程的问题排查

在开发环境上经常遇到端口被占用&#xff0c;但是 netstat -ano|findstr 3306 查不到进程号&#xff0c;没法强杀解决。 这种情况&#xff0c;很有可能端口被排除了&#xff0c;可用命令&#xff1a; netsh interface ipv4 show excludedportrange protocoltcp 可以看到mysql的…

前端面试题(十四)

76. 前端性能优化 前端性能优化有哪些常见方法&#xff1f; 减少 HTTP 请求&#xff1a; 合并 CSS、JavaScript 和图片文件。使用雪碧图 (Sprite) 减少图片请求数。 资源压缩和合并&#xff1a; 压缩 JavaScript 和 CSS 文件&#xff0c;减少文件体积。使用工具如 UglifyJS、…

一、制作UI自适应

当前分辨率 更改分辨率 一、原因 一款游戏的UI&#xff0c;可能会根据玩家的分辨率和屏幕尺寸&#xff0c;产生不同的变化 例如&#xff1a;某一个Image位移到了摄像机外面 因此需要通过锚点和屏幕自适应来制作完美的效果 二、解决方法 1、锚点 作用是&#xff1a;根据当…

Unity3D相关知识点总结

Unity3D使用的是笛卡尔三维坐标系&#xff0c;并且是以左手坐标系进行展示的。 1.全局坐标系&#xff08;global&#xff09; 全局坐标系描述的是游戏对象在整个世界&#xff08;场景&#xff09;中的相对于坐标原点&#xff08;0&#xff0c;0&#xff0c;0&#xff09;的位置…

前端接收到的日期格式为 2021-12-07T16:44:53.298+00:00 怎么办?

在写项目的时候&#xff0c;给前端发送了一个 Date 类型的数据,发现格式不对&#xff1a; 可以通过在application 配置文件中进行如下配置&#xff1a; spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8 前端在获取就发现格式正确