[面试] java开发面经-1

news2024/11/20 16:33:54

前言


目录

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

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

总结

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

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

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

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

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

相关文章

CUDA、Pytorch、Pycharm的安装与配置

文章目录 一、CUDA安装1.检查英伟达驱动支持的最高CUDA版本 二、Pytorch的安装与环境配置1.选择是下载CPU版本还是GPU版本2.上Pytorch官网找到安装命令3.运行指令(1)CPU版本(2)GPU版本 4.验证5.安装其他所需模块(0)安装torch(1)安装Matplotlib(2)安装 pillow&#xff08;可能an…

高效稳压,YB2411 DCDC降压芯片助力高电压功率转换系统

在现代的科技发展中&#xff0c;高电压功率转换系统的需求越来越多。为满足市场需求&#xff0c;我们推出了一款高输入电压DCDC降压芯片——YB2411。 YB2411系列 1>昱灿 YB2411R SOT23-6 DC-DC高压降压 36V 0.6A 2>昱灿 YB2411SR SOT23-6 DC-DC高压降压 60V 0.8A YB241…

【simulink仿真模型】Buck变换器闭环控制,电力电子仿真模型

摘要 本文介绍了基于Simulink的Buck变换器闭环控制系统的设计与仿真。通过对Buck变换器的数学模型进行建模&#xff0c;并引入PI控制器对输出电压进行实时调节&#xff0c;实现了系统的稳态控制。仿真结果显示&#xff0c;该闭环控制系统能够快速响应负载变化&#xff0c;保持…

头戴式耳机性价比推荐有哪些?头戴式耳机性价比之王推荐

这不是马上就要双十一了&#xff1f;对于环境比较吵的人来说&#xff0c;趁着最近双11开始&#xff0c;是购买耳机的好时机。即将入冬&#xff0c;佩戴头戴式耳机频率越来越多&#xff0c;包裹着耳朵很舒适保暖。有的人入耳式已经非常多了&#xff0c;而且同样的价格&#xff0…

地图箭头方向检测系统源码分享

地图箭头方向检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

哈佛大学俩学生开发出一种 AI 眼镜,看你一眼就能扒光所有个人信息

最近&#xff0c;科幻场景中的一个设想变成了现实&#xff1a;一副眼镜能够一瞥便获取人的全部信息&#xff01; 两位来自哈佛大学的学生开发了一个名为I-XRAY的项目&#xff0c;该项目利用智能眼镜结合面部识别技术&#xff0c;能够实时分析并获取被捕捉者的个人信息。这些信…

ChatTTS使用demo示例(包含长文本生成语音、固定音色pt文件)

ChatTTS使用demo示例&#xff08;包含长文本生成语音、固定音色pt文件&#xff09; 一、配置开发环境 安装anaconda&#xff0c;安装参考文章&#xff1a;https://blog.csdn.net/Q_fairy/article/details/129158178 建议anaconda最新版&#xff1a;https://mirrors.tuna.tsi…

windows11下面使用Pyinstaller打包python程序

文章目录 一、安装Python二、安装pip三、通过pip安装pyinstaller四、使用pyinstaller打包python为二进制程序参考 一、安装Python 我这里直接下载的是Python的可执行程序包&#xff0c;打开即用的版本&#xff0c; 也可以按照以下的教程安装python工具到windows上面 &#…

海洋鱼类图像分类分割系统源码&数据集分享

海洋鱼类图像分类分割系统源码&#xff06;数据集分享 [yolov8-seg-slimneck&#xff06;yolov8-seg-attention等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Globa…

MySQL联合索引、索引下推Demo

1.联合索引 测试SQL语句如下&#xff1a;表test中共有4个字段(id, a, b, c)&#xff0c;id为主键 drop table test;#建表 create table test(id bigint primary key auto_increment,a int,b int,c int )#表中插入数据 insert into test(a, b, c) values(1,2,3),(2,3,4),(4,5,…

数据分析Power BI设置万为单位的数据

玩过Power BI的同学都知道&#xff0c;power BI在度量值设置单位里&#xff0c;唯独没有万这个单位&#xff0c;但是我们可以自定义&#xff0c;操作过程如下&#xff1a; 1.用DAX新建单位表 单位 SELECTCOLUMNS( { ( "元", 1), ("万",10000), ("千…

清华大学经管学院朱武祥教授:五步构建高效的数据飞轮,提升企业核心竞争力

面对AI时代的到来&#xff0c;企业应积极拥抱这一变革&#xff0c;构建和优化自身的数据飞轮&#xff0c;让飞轮高速转动起来&#xff0c;为企业的创新发展持续赋能。 近期&#xff0c;清华管理评论发表了一篇名为《AI时代如何构建数据飞轮》的文章&#xff0c;引起了我们的重点…

Java 根据字符生成背景透明的图片

上代码 package com.example.demotest.controller;/*** Author shaolin* Date 2024-10-08 10:11**/import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; impor…

手机 电脑 Pad 是如何得到IP地址的呢? 如何让你的设备自动获取IP地址?DHCP :给你 IP 地址的隐形人

我们每天都是用手机 电脑 Pad 一系列电子设备连接到网络中&#xff0c;然后网络中的每一个设备都有一个独一无二的IP地址&#xff0c;用来作为网络中的唯一标识&#xff0c;那这些设备上的IP地址是如何得到的呢&#xff1f; 在现代网络中&#xff0c;每一台设备都需要一个唯一的…

Kubernetes----基础命令合集

目录 一、命令概述 1.1命令分类 1.2 基本语法 二、查看基本信息 2.1 环境指令 2.1.1 查看版本信息 2.1.2 查看资源对象简写 2.1.3 添加补全信息 2.1.4 查看日志 2.1.5 查看集群信息 2.2 查看资源信息 2.2.1 获取资源相关信息 ① 查看集群组件状态 ② 查看命名空间…

7个维度点剖析地图投影 第6个最重要

摘要: 地图投影在制图学和地理信息系统 (GIS) 中发挥着至关重要的作用。然而,即使是地理空间行业中经验最丰富的专业人士,它们也常常令人们感到困惑。在大多数情况下,也许必须返回参考文档和材料来重新检查这些问题。 因此有许多令人费解的现象,例如您是否曾经看过世界地..…

nginx代理,nginx301跳转,nginx地址重写

ngin代理 假如你的地址是:http://192.168.1.2:8282 你的域名是:www.jjycheng.com 你想访问域名www.jjycheng.com时,实际请求的地址是http://192.168.1.2:8282,但浏览器上的地址不变。 此时,你用到的技术就是请求代理 代理.conf配置 http {server {listen 80; server_na…

【Parsec】一款安全高效的远程桌面软件

Parsec 是一款远程桌面软件&#xff0c;它允许用户通过P2P&#xff08;点对点&#xff09;技术远程访问和控制另一台计算机。以下是Parsec的一些主要作用、安全私密性特点以及优缺点&#xff1a; 作用&#xff1a; 远程游戏&#xff1a;用户可以远程访问高性能PC进行游戏&am…

Centos7.5 安装和配置jdk17

目录 一、下载JDK17包 二、将安装包放入服务器 三、解压jdk包到/usr/lib/jvm 四、修改JDK环境配置 1、打开配置文件 2、最后一行插入 3、立即生效 4、检查版本 一、下载JDK17包 访问网址:Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads…

新硬盘第一次使用需要怎样做?

无论是组装新电脑&#xff0c;还是给现有电脑增加存储空间&#xff0c;我们需要进行一些安装硬盘和设置硬盘的操作。对于没有相关经验的用户来说&#xff0c;对于拿到手的新硬盘会感到手足无措&#xff0c;不知道应该从哪里开始。今天小编详细介绍一下新硬盘第一次使用时的流程…