面经学习(杭州实在智能实习)
个人评价
秃狼觉得本次的面试是有史以来难度最大的,问了很多陌生的八股文,项目问的比较少,估计是项目本来就没有什么亮点,也是第一次被面试官说菜的面试。不过在后续的学习上还是收获颇丰的。
1.说说你在实习中遇到的难点吧?
我们的实现项目主要就是做C端的在线教育项目,也是因为我是实习生的原有,我没有去负责黄金链路,也就是从用户登录到用户下单课程最后到用户观看视频的整个流程。我主要负责辅助模块的开发,包括 评论,点赞,视频点播模块的开发。
我说说我印象比较深的难点,当时需求就是完成续播的效果,在我们的点播记录表中会记录观看到的位置,因为我们视频播放采用的是腾讯VOD来实现的,也就是视频的长度使用整型表示 。并且上级的要求误差要控制在30秒之内。续播的功能本质就是操作数据库,并且前端每隔15秒就会提交对应的观看位置,如果直接打数据库的话,请求量大的话最终就会压垮数据库。为了解决这个问题,我们通过讨论使用的解决方案就是 redis的hash结构 + 定时任务来解决的。本质就是减少DB操作,redis的hash结构,大key存储课表id,课表id用于关联课程和userId,小key存储节的Id,value存储观看的位置。在每次发送请求的时候都修改hash结构并且使用RabbitMq的死信队列实现的延迟信息(延迟15秒)、发送一个当前的观看位置的消息。在监听到消息之后使用当前的观看位置和消息中的观看位置,如果二者相同的话,就说明当前15内没有再观看了,这时候去修改数据库,反之,丢掉对应的消息。在性能的上,减少了99%的db操作。
2.在做合并写请求的时候,RabbitMq发送消息的速度大于消费者消费的速度,怎么解决?
本质上就是消费者的消费速度小于生产速度。解决这个问题的主要方案就是:增加我们的消费者个数,加快消费者的消费速度,对我们消息队列进行扩容。
1.增加消费者个数:因为项目采用的是微服务落地方案,所以我们可以增加消费者的节点。
2.加快消费者的消费速度:我们可以创建线程池,创建多线程进行消费。
3.消息队列进行扩容:当在默认情况下我们的消息队列不足的时候,我们可以对消息队列进行扩容,可以使用惰性队列进行扩容,因为惰性队列使用磁盘进行存储,所以在读取的时候速度上比较慢,所以还是要根据业务情况进行选择。
3.在Spring中怎么解决循环依赖的问题?
Spring中使用三级缓存来解决缓存依赖,一级缓存主要就是存储完整的实例,二级缓存主要就是次存储代理对象,三级缓存就是ObjectFactory。当A和B相互依赖的时候就是使用三级缓存。
加载A,并将A的ObjectFactory存放到三级缓存,去加载B,并将B的ObjectFactory存放到三级缓存中。当发现B中需要依赖A,此时将使用A的ObjectFactory生成A的代理对象,并将A的代理对象存放到二级缓存中,将A注入到B中,将完整的B存放到一级缓存中,此时回溯,将完整的B注入到A中,最终解决三级缓存的问题。
4.Spring中的事务有了解过吗?
Spring的事务主要解决的问题就是并发事务带来的问题。
Spring的实现方式主要就是使用Aop的来实现的,使用环绕通知,在执行方法的时候,开启事务,并对执行的方法使用Try/catch,如果捕获异常的话就进行回滚,如果执行完方法后就进行提交。
Spring中的事务传播性主要包括: Propagation_Required(公用同一个事务),Propagation_Required_new(开启新事务),Propagation_nested,在住事务中内嵌子事务,当主事务不存在的时候,就会创建新事务。
5.动态代理的流程有了解过吗?
动态代理主要就是JDK动态代理和CGLIB动态代理,被当代理对象有实现接口的时候就会直接使用JDK的动态代理,当被代理对象没有实现接口的时候,就会使用CGLIB的动态代理,将继承被代理对象的子类作为代理对象。
6.B树和B+树的区别?
B树会在每一个节点上存放数据,而B+树则在叶子节点存储数据。
区别最大的我认为是:因为B树在结构特性,导致在做范围查询的时候需要多次从根节点出发,而B+树则不需要。并且在做排序的时候B+树也很方便,因为叶子节点使用双向链表进行存储。
7.Spring中的设计模式有哪些?
单例模式:我比较了解就是Spring中IOC默认情况下采用的就是单例模式。
工厂模式和策略模式:我们当时在实现动态获取分布式锁及对应策略,使用自定义注解+工厂模式+策略模式。自定义注解主要就是控制对应的枚举。我们会创建一个工厂类,里面有一个属性EunmMap,key存储对应的枚举,value存储对应分布式锁的实现方法,最终设置枚举即可获得对应的类。策略模式则就会在枚举中编写一个抽象方法,会有多个方法实现该抽象方法,最终这些实现的方法就是策略。
责任链模式:最常见的就是Stream流式编程,通过返回原型继续执行方法。
8.voliate是线程安全的吗?
voliate主要解决的就是线程共享变量的可见性,及防止指令重排序。
当我们的程序在执行很大的循环时,由于JIT的优化机制,就会使大循环变成无限循环,导致线程间无法读取到修改后的共享变量。也是因为JDK优化的问题,为了提高运行效率,在执行指令的时候会对指令进行重排序。
但是呢,voliate在执行的过程中不遵循原子性,所以不是线程安全的。
相关文章:
面经学习(杭州实在智能实习)
个人评价 秃狼觉得本次的面试是有史以来难度最大的,问了很多陌生的八股文,项目问的比较少,估计是项目本来就没有什么亮点,也是第一次被面试官说菜的面试。不过在后续的学习上还是收获颇丰的。 1.说说你在实习中遇到的难点吧&…...
mysql、oracle、db2数据库连接参数
mysql、oracle、db2数据库连接参数 参数/数据库driverurlMysqlcom.mysql.jdbc.Driver 或 com.mysql.cj.jdbc.Driverjdbc:mysql://localhost:3306/数据库名Oracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:localhost:1521:orcl 注:orcl为数据库SIDDB2com.ib…...
redis缓存击穿和缓存穿透的封装、缓存更新的CacheAside方案、数据预热
redis缓存击穿和缓存穿透的封装 一、首先是互斥锁二、封装为工具类三、调用四、数据预热五、缓存更新的CacheAside方案 (来源黑马redis) 一、首先是互斥锁 //拿到锁private boolean tryLock(String key) {Boolean flag stringRedisTemplate.opsForValue…...
ArcGIS Pro SDK (九)几何 5 多边形
ArcGIS Pro SDK (九)几何 5 多边形 文章目录 ArcGIS Pro SDK (九)几何 5 多边形1 构造多边形 - 从映射点的枚举2 构造多边形 - 从包络3 获取多边形的点4 获取多边形的各个部分5 枚举多边形的各个部分6 获取多边形的线段7 构建圆环…...
Docker 镜像使用和安装
1、简介 Docker是一个开源的应用容器引擎;是一个轻量级容器技术; Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像; 运行中的这个镜像…...
JAVA:Filer过滤器+案例:请求IP访问限制和请求返回值修改
JAVA:Filer过滤器 介绍 Java中的Filter也被称为过滤器,它是Servlet技术的一部分,用于在web服务器上拦截请求和响应,以检查或转换其内容。 Filter的urlPatterns可以过滤特定地址http的请求,也可以利用Filter对访问请求…...
FastAPI -- 第三弹(自定义响应、中间件、代理、WebSockets)
路径操作的高级配置 OpenAPI 的 operationId from fastapi import FastAPIapp FastAPI()# 通过 operation_id 参数设置 app.get("/items/", operation_id"some_specific_id_you_define") async def read_items():return [{"item_id": "F…...
网安小贴士(16)网络安全体系
前言 网络安全体系是一个综合性的系统,旨在保护网络系统中的硬件、软件和数据免受未经授权的访问、泄露、破坏或篡改。这个体系涉及多个方面,包括网络安全策略、安全技术和安全管理等。 一、网络安全体系概述 网络安全体系通常包括以下几个关键组成部分…...
UCOSIII 中断管理接口剖析
引言 在实时操作系统中,中断处理是一个非常重要的环节。理解和掌握中断处理流程对提高系统实时性和稳定性至关重要。本文将详细解析uCOS-III内核中的中断管理接口,包括 OSIntEnter() 和 OSIntExit() 函数的流程,并结合流程图对各个步骤进行说…...
windows 11 PC查询连接过的wlan密码
1:管理员打开cmd 2:输入netsh wlan show profiles 3:netsh wlan show profiles Shw2024-5G keyclear 密码关键内容:12345678...
npm install 出现canvas错误
npm install canvas2.8.0 --ignore-scripts只要是:npm ERR! Failed at the XXXX.X.X install script 这种错误 都可以:npm install XXXX.X.X --ignore-scripts进行更改 https://blog.csdn.net/YXWik/article/details/119039561...
Python爬虫入门篇学习记录
免责声明 本文的爬虫知识仅用于合法和合理的数据收集,使用者需遵守相关法律法规及目标网站的爬取规则,尊重数据隐私,合理设置访问频率,不得用于非法目的或侵犯他人权益。因使用网络爬虫产生的任何法律纠纷或损失,由使用…...
怎样对 PostgreSQL 中的慢查询进行分析和优化?
🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 怎样对 PostgreSQL 中的慢查询进行分析和优化?一、理解慢查询的危害二、找出慢查询&#x…...
Springboot项目远程部署gitee仓库(docker+Jenkins+maven+git)
创建一个Springboot项目,勾选web将该项目创建git本地仓库,再创建远程仓库推送上去 创建TestController RestController RequestMapping("/test") public class TestController { GetMapping("/hello") public String sayHelloJe…...
Chromium CI/CD 之Jenkins实用指南2024- Windows节点开启SSH服务(七)
1.引言 在现代软件开发和持续集成的过程中,自动化部署和远程管理是不可或缺的关键环节。SSH(Secure Shell)协议以其强大的安全性和灵活性,成为连接和管理远程服务器的首选工具。对于使用Windows虚拟机作为Jenkins从节点的开发者而…...
阿里大数据面试题集锦及参考答案(3万字长文:持续更新)
目录 MapReduce Shuffle为什么要将数据写入环形缓冲区 MapReduce Shuffle为什么容易发生数据倾斜 Hadoop HA当一个Namenode挂掉,会有数据丢失吗 数据倾斜发生的位置 Combiner了解吗? 什么情况下不能用Combiner? Sum、Count、Count(distinct)哪些能用、哪些不能用Comb…...
springboot 配置 spring data redis
1、在pom.xml引入父依赖spring-boot-starter-parent,其中2.7.18是最后一版支持java8的spring <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</…...
Numpy基础用法
Numpy基础用法 numpy.all()num.sun() numpy.all() numpy 中的 all() 函数用于测试 NumPy 数组中所有元素是否都满足指定条件。它接受一个 NumPy 数组作为输入,并返回一个布尔值,指示数组中所有元素是否都满足条件。让我们通过具体的代码示例来深入探讨 n…...
设计模式--享元模式
享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享大量细粒度的对象来减少内存消耗。这个模式的核心思想是把对象的状态分为内在状态和外在状态,其中内在状态是可以共享的,而外在状态是需要独立维护的。 享…...
可视化剪辑,账号矩阵,视频分发,聚合私信一体化营销工具 源----代码开发部署方案
可视化剪辑: 为了实现可视化剪辑功能,可以使用流行的视频编辑软件或者开发自己的视频编辑工具。其中,通过设计用户友好的界面,用户可以简单地拖拽和放大缩小视频片段,剪辑出满足需求的视频。在开发过程中,可…...
CCF-CSP认证考试 202406-2 矩阵重塑(其二) 100分题解
更多 CSP 认证考试题目题解可以前往:CSP-CCF 认证考试真题题解 原题链接: 202406-2 矩阵重塑(其二) 时间限制: 1.0 秒 空间限制: 512 MiB 题目背景 矩阵转置操作是将矩阵的行和列交换的过程。在转置过程…...
初阶数据结构的实现1 顺序表和链表
顺序表和链表 1.线性表1.1顺序表1.1.1静态顺序表(不去实现)1.1.2动态顺序表1.1.2.1 定义程序目标1.1.2.2 设计程序1.1.2.3编写代码1.1.2.3测试和调试代码 1.1.2 顺序表的问题与思考 1.2链表1.2.1链表的概念及结构1.2.1.1 定义程序目标1.2.1.2 设计程序1.…...
破解反爬虫策略 /_guard/auto.js(一) 原理
背景 当用代码或者postman访问一个网站的时候,访问他的任何地址都会返回<script src"/_guard/auto.js"></script>,但是从浏览器中访问显示的页面是正常的,这种就是网站做了反爬虫策略。本文就是带大家来破解这种策略&…...
40.简易频率计(基于等精度测量法)(3)
(1)BCD8421码:十进制数字转换成BCD8421码的方法 补零:你需要显示多少位数字,就在前面补上四倍的位宽。比如你要显示一个十进制8位的数字,就在前面补上8*432个零。判断:判断补零部分显示的十进制…...
关于Centos停更yum无法使用的解决方案
最近在使用Centos7.9系统时候,发现yum仓库无法进行安装软件包了,官方说2024年6月30日进行停更,停更后无法提供对应的软件服务。 我在使用yum安装包的时候发现确实不能使用官方服务了: CentOS停更的影响 CentOS停止更新之后&#…...
插画感言:成都亚恒丰创教育科技有限公司
插画感言:笔触间的灵魂对话 在这个快节奏、高压力的时代,我们时常在寻找那些能够触动心灵、让灵魂得以片刻栖息的角落。而插画,这一融合了艺术与情感的独特形式,便如同一股清泉,缓缓流淌进每个人的心田,以…...
【算法】数组中的第K个最大元素
难度:中等 题目: 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题…...
Perl 语言的特点
Perl 语言入门学习可以涵盖多个方面,包括其特点、基本语法、高级特性以及学习资源和社区支持等。以下是一个详细的入门学习指南: 一、Perl 语言的特点 文本处理能力强:Perl 提供了丰富的字符串处理函数和正则表达式的支持,非常适…...
NLP教程:1 词袋模型和TFIDF模型
文章目录 词袋模型TF-IDF模型词汇表模型 词袋模型 文本特征提取有两个非常重要的模型: 词集模型:单词构成的集合,集合自然每个元素都只有一个,也即词集中的每个单词都只有一个。 词袋模型:在词集的基础上如果一个单词…...
【开源 Mac 工具推荐之 2】洛雪音乐(lx-music-desktop):免费良心的音乐平台
旧版文章:【macOS免费软件推荐】第6期:洛雪音乐 Note:本文在旧版文章的基础上,新更新展示了一些洛雪音乐的新功能,并且描述更为详细。 简介 洛雪音乐(GitHub 名:lx-music-desktop )…...
临泽县建设局网站/百度官网推广平台电话
2019独角兽企业重金招聘Python工程师标准>>> 1.综述 StarUML是一种生成类图和其他类型的统一建模语言(UML)图表的工具。这是一个用Java语言描述的创建类图的简明手册。 StarUML(简称SU),是一种创建UML类图,并能够自动生成Java的“stub code”…...
做百度网站电话号码/北京优化推广
回顾MySpace架构的坎坷之路 说起MySpace,可能很多人对他印象很深,MySpace.com成立于2003年9月,是目前全球最大的社交网站。它为全球用户提供了一个集交友、个人信息分享、即时通讯等多种功能于一体的互动平台,同时他也是.NET应用最…...
基于jquery做的网站/优化系统软件
今天遇到了一个很奇怪的问题,通过adb和ssh获取的中断调试程序都没有问题,通过串口调试有问题,例如我要获取1000组数据,adb和ssh都刚好是1000组,串口一般也就600多个数据,造成这个结果原因可能是串口传输速率…...
重庆忠县网站建设公司哪里有/市场调研方案范文
前面的级数求解的基础终于结束了。开始到了应用的环节。虽然前面所举例的方程都是无法初等地求解,但是总是一个方程一个方程的求级数解也是够麻烦的。能否像初等求解那样化归出一种类型的方程?就像齐次方程、恰当方程那样?接下来可以看到&…...
深圳网站设计公司怎么找/seo做的比较牛的公司
初衷在公司由于大家随意提交 git-commit 的信息,导致提交的风格千奇百怪,写的信息不明确,不知道这次提交具体是修复 bug 呢?还是增加新功能,还是单纯改了一些配置文件,亦或是重构了一些不好的代码。只能靠大…...
做的网站不能放视频/b站推广网站2022
560. 和为 K 的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数。 示例 1: 输入:nums [1,1,1], k 2 输出:2 示例 2: 输入:nums [1,2,3], k 3 输出&am…...