浙江大华后端开发一面面经

news2024/12/25 23:43:59

目录

    • 1.SpringBuffer和SpringBuilder的区别是什么?
    • 2.常用的集合类有哪些?HashMap的底层数据结构?推荐一下线程安全的Map?
    • 3.TCP和UDP的差异是什么?
    • 4.MySQL的左连接和右连接的区别?
    • 5.MySQL慢查询如何排查?
    • 6.深拷贝和浅拷贝的概念和区别?如何实现深拷贝?
    • 7.Spring循环依赖问题是什么?如何解决?
    • 8.Redis持久化的方式?
    • 9.SpringCloud共有几大组件?

1.SpringBuffer和SpringBuilder的区别是什么?

tringBuffer是线程安全的,因为它每个操作方法都加了synchronized同步关键字。
StringBuilder不是线程安全的,所以在多线程环境下对字符串进行操作,应该使用StringBuffer,否则使用StringBuilder

2.常用的集合类有哪些?HashMap的底层数据结构?推荐一下线程安全的Map?

常用的集合类有哪些?
List:Vector,LinkedList,ArrayList
Set:HashSet,TreeSet
Map:HashMap,TreeMap,HashTable
HashMap的底层数据结构?
HashMap1.7:数组+链表
HashMap1.8:数组+链表/红黑树
推荐一下线程安全的Map?
concurrentHashMap
JDK1.7ConcurrentHashMap底层实现原理:
数据结构:Segment(大数组) + HashEntry(小数组) + 链表,每个 Segment 对应一把锁,如果多个线程访问不同的 Segment,则不会冲突
JDK1.8ConcurrentHashMap底层实现原理:
数据结构:Node 数组 + 链表或红黑树,数组的每个头节点作为锁,如果多个线程访问的头节点不同,则不会冲突。首次生成头节点时如果发生竞争,利用 cas 而非 syncronized,进一步提升性能
ConcurrentHashMap在性能方面做的优化

  • 在JDK1.8中,ConcurrentHashMap锁的粒度是数组中的某一个节点,而在JDK1.7,锁定的是Segment,锁的范围要更大,因此性能上会更低。
  • 引入红黑树,降低了数据查询的时间复杂度,红黑树的时间复杂度是O(logn)。
  • 当数组长度不够时,ConcurrentHashMap需要对数组进行扩容,在扩容的实现上,ConcurrentHashMap引入了多线程并发扩容的机制,简单来说就是多个线程对原始数组进行分片后,每个线程负责一个分片的数据迁移,从而提升了扩容过程中数据迁移的效率。
    在这里插入图片描述
  • ConcurrentHashMap中有一个size()方法来获取总的元素个数,而在多线程并发场景中,在保证原子性的前提下来实现元素个数的累加,性能是非常低的。ConcurrentHashMap在这个方面的优化主要体现在两个点:
  • 当线程竞争不激烈时,直接采用CAS来实现元素个数的原子递增。
    如果线程竞争激烈,使用一个数组来维护元素个数,如果要增加总的元素个数,则直接从数组中随机选择一个,再通过CAS实现原子递增。它的核心思想是引入了数组来实现对并发更新的负载。

在这里插入图片描述

3.TCP和UDP的差异是什么?

连接
TCP 是面向连接的传输层协议,传输数据前先要建立连接。
UDP 是不需要连接,即刻传输数据。
服务对象
TCP 是一对一的两点服务,即一条连接只有两个端点。
UDP 支持一对一、一对多、多对多的交互通信
可靠性
TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。
UDP 是尽最大努力交付,不保证可靠交付数据。
拥塞控制、流量控制
TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。
首部开销
TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
UDP 首部只有 8 个字节,并且是固定不变的,开销较小。
传输方式
TCP 是流式传输,没有边界,但保证顺序和可靠。
UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。
分片不同
TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。
TCP 和 UDP 应用场景:

  • 由于 TCP 是面向连接,能保证数据的可靠性交付,因此经常用于:
    FTP 文件传输;
    HTTP / HTTPS;
  • 由于 UDP 面向无连接,它可以随时发送数据,再加上UDP本身的处理既简单又高效,因此经常用于:
    包总量较少的通信,如 DNS 、SNMP 等;视频、音频等多媒体通信;广播通信;

4.MySQL的左连接和右连接的区别?

左连接:返回包括左表中的所有记录和右表中连接字段相等的记录。
右连接:返回包括右表中的所有记录和左表中连接字段相等的记录。

5.MySQL慢查询如何排查?

如果不熟悉可以看这篇
Mysql查询截取分析_慢查询日志

开启慢查询

set global slow_query_log=1

设置慢查询的时间

SET GLOBAL long_query_time=0.1;

假如运行时间正好等于long_query_time的情况,并不会被记录下来。也就是说,在mysql源码里是判断大于long_query_time,而非大于等于。
使用mysqldumpslow去分析,查找sql,然后在使用explain进行分析
在这里插入图片描述

6.深拷贝和浅拷贝的概念和区别?如何实现深拷贝?

如果不熟悉可以看这篇
Java深拷贝和浅拷贝区别

深拷贝和浅拷贝都是对象拷贝
Object.clone()方法属于浅拷贝。如果想使用深拷贝,必须在类里面重写clone()方法。

  • 拷贝浅是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。
  • 深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。

7.Spring循环依赖问题是什么?如何解决?

循环依赖:循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。
比如A依赖于B,B依赖于A循环依赖在spring中是允许存在,spring框架依据三级缓存已经解决了大部分的循环依赖
一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的bean对象
二级缓存:缓存早期的bean对象(生命周期还没走完)
三级缓存:缓存的是ObjectFactory,表示对象工厂,用来创建某个对象的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.Redis持久化的方式?

Redis的持久化机制分别是RDB和AOF
RDB
是什么
在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里
备份是如何执行的
Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。
在这里插入图片描述
在这里插入图片描述
AOF
是什么
以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
AOF持久化流程
(1)客户端的请求写命令会被append追加到AOF缓冲区内;
(2)AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作sync同步到磁盘的AOF文件中;
(3)AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量;
(4)Redis服务重启时,会重新load加载AOF文件中的写操作,达到数据恢复的目的;
在这里插入图片描述
AOF和RDB同时开启,redis听谁的?
AOF和RDB同时开启,系统默认取AOF的数据(数据不会存在丢失)

9.SpringCloud共有几大组件?

  • 注册中心/配置中心 Nacos
  • 负载均衡 Ribbon
  • 服务调用 Feign
  • 服务保护 sentinel
  • 服务网关 Gateway

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

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

相关文章

01 【Vue简介 初识Vue 模板语法和数据绑定】

01 【Vue简介 初识Vue 模板语法和数据绑定】 1.Vue简介 1.1官网 英文官网中文官网 1.2介绍与描述 Vue 是一套用来动态构建用户界面的渐进式JavaScript框架 ○构建用户界面:把数据通过某种办法变成用户界面 ○渐进式:Vue可以自底向上逐层的应用&…

图解LeetCode——108. 将有序数组转换为二叉搜索树

一、题目 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 二、示例 2.1> 示例 1: 【输入】n…

企业邮箱大文件发送指南:推荐一个适用于大文件的邮箱服务

大多数电子邮件服务都不安全并且限制附件文件的大小,但是有一些方法可以安全地发送大文件。如果您曾尝试将多个图像或视频文件附加到电子邮件,您就会知道它并不总是有效。下面为大家介绍一款可以发送大文件的企业邮箱--Zoho Mail。 一、电子邮件发送大文…

【Python】Python系列教程--Python3 环境搭建(二)

文章目录 前言Python3 下载Python 安装Unix & Linux 平台安装 Python3:Window 平台安装 Python:MAC 平台安装 Python: 环境变量配置在 Unix/Linux 设置环境变量在 Windows 设置环境变量在命令提示框中(cmd) : 输入 Python 环境变量运行 Python1、交互式解释器:2…

品牌如何给自己创建一个百度百科词条,在百科上传企业资料方法

对于企业来说,很多人都想给自己企业或者品牌上传正面简介内容到百度百科平台,但创建一个品牌百度百科词条似乎并不是那么简答,很多自己尝试创建品牌百度百科词条的朋友最终都失败了,下面洛希爱做百科网教教大家如何给自己品牌创建…

1.矢量引入

目录 一.什么是矢量 1.1 定义 1.2 公理与体系 1.3 矢量几何化 二.矢量间的相互作用 1.点积 2.点积应用 3.叉积 4. 叉积应用 三.矢量除法 1.单用叉积无法唯一定义矢量除法 2.矢量除法 四.复杂相互作用 1.混合积 2.双叉积 3.Laplace公式 五.泛函的广义矢量理论…

从业十三年SEO大佬干货总结,满满五千字,图文结合,30min带你真正学会SEO

目录 seo优化 介绍seo是什么 网站更新: 网站排名在21世纪的意义: 网站为电商引流 百度算法规则 排名流程 seo策略 规则——“学会在线球里玩” 单页面收录显示 必要条件——链接数量 日志统计——及时优化seo策略 降低识别难度 收录越多排名就越大吗 …

B/S电子病历编辑器源码

电子病历编辑器,简称EMRE(EMR Editor),是电子病历系统的核心关键基础技术。 B/S电子病历编辑器源码,带演示,自主研发,官方正版授权 ▶本套电子病历系统主要面向医疗机构医生、护士&#xff0c…

【远程办公】外网远程访问公司内网用友畅捷通T财务软件

文章目录 前言1.本地访问简介2. cpolar内网穿透3. 公网远程访问4. 固定公网地址 转发自cpolar极点云的文章:外网远程访问公司内网用友畅捷通T财务软件 – 远程办公 前言 用友畅捷通T适用于异地多组织、多机构对企业财务汇总的管理需求;全面支持企业对远…

微信小程序构建npm(js和ts)

先吐槽一下,官方文档写的就是一坨粑粑!真垃圾 微信小程序构建npm js版本下构建npm1.需要在电脑上按照node,并确保环境变量配置完毕2.新建一个小程序项目,js版本3.从小程序根目录打开cmd命令行4.在命令行中执行npm init -y5.继续执…

Linux UIO驱动

目录 什么是UIO? UIO驱动与普通驱动的区别 How UIO works 重要的结构体 UIO驱动源码 APP实现 测试 UIO驱动的优缺点 UIO在DPDK中的使用 什么是UIO? UIO(User-space I/O)驱动是一种特殊的Linux内核驱动,允许设…

将 PDF 压缩到 1 MB 或更小的 5 个工具

鉴于工作和生活中PDF文件的频繁传输,压缩文件大小成为PDF文件必不可少的一步,尤其是对于包含大量高清图片的文件。压缩不仅使您的文件兼容发送,还有助于存储优化。这意味着您将获得更多数据空间,适用于本地设备和云端。 想要将 …

把控项目进度,这样做就够了

项目管理的核心在于确保项目成员明确项目目标和自己的职责,以此保证项目成功。类比于十字路口中的指路人,项目经理应该为团队提供清晰的方向,避免走错路。 一、项目进度跟踪 项目进度是制胜的关键,它决定了项目是否能够按时达成…

CDN如何进行内容缓存与内容预热

CDN的启用与管理 1、打开火伞云融合CDN系统控制后台-CDN管理 2、查看加速域名下的全部CDN服务,可以看到有部分厂商暂时处于未启用状态,这是因为这些厂商要求进行域名所有权校验后方可使用(如果已经处于已启用状态的厂商则不用额外进行操作&…

Hadoop MapReduce入门实验:WordCount

环境:ubuntu 18.04, Hadoop 3.3.5 参考资料:Hadoop官网:MapReduce Tutorial 前置工作 运行Hadoop。 参考:单节点模式,集群模式 单节点模式(for first-time users) 在YARN上以pseu…

Istio 实现 ext-authz 外部扩展鉴权以及对接基于 k8s 的微服务

Istio 实现 ext-authz 外部扩展鉴权以及对接基于 k8s 的微服务 可以实现基于 redis 的 token 鉴权以及实现 rbac 鉴权。 转载请注明来源:https://janrs.com/vrsr Istio 的外部鉴权本质是基于 Envoy 实现的,直接看 Envoy 的代码,链接地址&…

Opencv 2

这里写目录标题 图像阈值平滑处理形态学 腐蚀操作膨胀操作开运算和闭运算梯度运算礼帽和黑帽图像梯度 sobel算子scharr算子canny边缘检测图像金字塔图像轮廓绘制轮廓轮廓特征轮廓近似边界矩形 模板匹配 图像阈值 平滑处理 均值滤波 blur cv2.blur(img,(3,3)) 相当于平均卷积…

基于Wi-Fi指纹匹配的室内定位方法(附代码)

引言 室内定位技术已广泛应用于商场导航、智能家居、人员搜救等领域,具有不可估量的商业价值和非常广阔的应用前景。全球导航卫星系统(GNSS)可以为室外定位提供良好的定位精度,然而在室内环境下卫星信号的衰减使得室内的位置信息…

day43|动态规划6-完全背包及其应用-零钱兑换II-组合总和IV

完全背包 前情提要: 0-1背包指的是给定背包重量,将物品放入背包中,使得背包中的物品达到最大的价值。(每个物品只能往其中放一次) 在0-1背包问题中,第二层for循环需要是倒序遍历才可以保证每个物品只使用一…

Pandas使用技巧

Pandas 是一个强大的数据分析 Python 库,提供了一系列用于数据清洗、转换、分析和可视化的 API。在使用 Pandas 进行数据处理时,常见的指令包括: 数据读取和解析 read_csv():用于读取 CSV、Excel等格式的数据文件,并将…