面试常问问题

1.数据库的优化

  1. 选取最适用的字段属性,可以将表中字段的宽度设得尽可能小

  2. 使用连接(JOIN)来代替子查询

  3. 使用联合(UNION)来代替手动创建的临时表

  4. 防止数据的完整性,使用事务

  5. 如果用户访问数据库较大时可以通过锁定表的方式来获得更好的性能

  6. 使用外键,锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键

  7. 使用索引,提高数据库的性能便于快速检索

  8. 优化的查询语句,索引可以提高查询的速度但如果SQL语句使用不恰当的话,索引将无法发挥它应有的作用

  9. 分库分表:

    ①只分库不分表:数据库的读或者写的QPS过高,导致数据库的连接不足时(没遇到过这样的场景)

    ②只分表:单表数据量非常大时,存储和查询性能遇到了瓶颈

    ③分库分表:数据库连接不够并且表单的数据量也很大

2.JVM的调优问题

使用在JDK中自带的工具jconsole,对JVM中内存,线程和类等的监控

  1. 如果是堆内存不够: 尝试调整-Xmx(最大堆内存),–Xms选项(初始化堆内存的大小)
  2. **如果是想提高系统的并发性能:**可以尝试降低–Xss的值(每个线程的堆栈大小),JDK5.0以后每个线程堆栈大小为1MB。应根据应用线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。别调太小了,太小了栈溢出了。
  3. 调整对象在年轻代存活的时间: -XX:MaxTenuringThreshold 默认值15,这个值代表垃圾最大年龄。对于老年代比较多的应用,减少这个值可以提高效率。对于年轻代比较多的应用,增加这个值可以增加数据在年轻代即被回收的概率。这个值调整需要尤其注意,设置小了可能引发老年代频繁full GC,设置大了可能导致某些数据长期存活于新生代,每一次Minor GC都要拷贝它,很影响性能的。
  4. 调整CMS垃圾回收器并行线程数: -XX:ConcGCThreads=4 CMS垃圾回收器并行线程线,推荐值为CPU核心数。
  5. 尽量把永久代的初始值与最大值设置为同一值,因为永久代的大小调整需要进行FullGC才能实现。设置为同一个就可以防止内存抖动

3.Nginx在项目中的应用

请求转发;负载均衡;动静分离

1.轮询(默认),按照时间顺序逐一分配到指定的服务器

2.权重 ,指定轮询机率,修改weight属性大小

4.MQ的消息丢失/重复/积压的理解

消息丢失

原因:消息发送出去,由于网络问题没有抵达服务器

解决方案:1.做好容错方法(try-catch),发送消息失败使用重试机制;2.做好日志记录,每个消息状态是否都被服务器收到都应该被记录;3.做好定期重发,如果消息没有发送成功,定期去数据库扫描未成功的消息进行重发

消息重复

原因:1.成功消费,ACK时宕机,消息由unack变为ready,Broker又重新发送;2.消息消费失败,由于重试机制,自动又将消息发送出去;

解决方案:1.消费者的业务消费接口应该设计成幂等性(对于同一操作发起的一次请求或者多次请求的结果是一致的);2.使用防重表(redis, mysql) 唯一索引,发送消息每一个都有业务的唯一标识,处理过就不用再处理。

消息积压

原因:1.消费者宕机;2.消费者消费能力不足;3.发送者发送流量过大;

解决方案:1.上线更多消费者,进行正常消费;2.上线专门的队列消费服务,将消息先批量取出来,记录数据库,离线慢慢处理

5.redis

面试题(你们是怎么用redis):使用springboot整合,基于springboot的缓存注解做的

1.Redis 持久化机制

Redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。

缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(加锁)

缓存穿透是指用户查询数据,在数据库没有(查询的时候返回数据为空)

缓存预热就是系统上线后,将相关的缓存数据直接加载到缓存系统(定时刷新缓存)

缓存降级当访问量剧增、服务出现问题(Redis出现问题,不去数据库查询,而是直接返回默认值给用户)

redis的数据类型

(一)String
这个其实没啥好说的,最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数功能的缓存。
(二)hash
这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。博主在做单点登录的时候,就是用这种数据结构存储用户信息,以cookieId作为key,设置30分钟为缓存过期时间,能很好的模拟出类似session的效果。
(三)list
使用List的数据结构,可以做简单的消息队列的功能。另外还有一个就是,可以利用lrange命令,做基于redis的分页功能,性能极佳,用户体验好。本人还用一个场景,很合适—取行情信息。就也是个生产者和消费者的场景。LIST可以很好的完成排队,先进先出的原则。
(四)set
因为set堆放的是一堆不重复值的集合。所以可以做全局去重的功能。为什么不用JVM自带的Set进行去重?因为我们的系统一般都是集群部署,使用JVM自带的Set,比较麻烦,难道为了一个做一个全局去重,再起一个公共服务,太麻烦了。
另外,就是利用交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。

(五)Zset
Zset多了一个权重参数score,集合中的元素能够按score进行排列。可以做排行榜应用,取TOP N操作。

6.Git和Svn的不同

git

1、分布式,每个参与开发的人的电脑上都有一个完整的仓库,不担心硬盘出问题;
2、在不联网的情况下,照样可以提交到本地仓库,可以查看以往的所有log,等到有网的时候,push到远程即可;
3、(缺点)权限管理不是很方便,需要安装插件gitolite,配置有点麻烦,或者直接使用gitlab管理。

svn

1、较好的权限管理功能,可以精确控制每个目录的权限;
2、使用相对git要简单一点。
3、集中式,如果中心服务器出现问题,所有人都不能正常干活,恢复也很麻烦,因为SVN记录的是每次改动的差异,不是完整文件;
4、分支功能没有git强大;
5、速度没有git快,如果有五个分支,是把五个分支的文件全部拷下来;必须联网才能commit。

Oauth2.0

OAuth 2.0 是一个开放标准的授权协议,它允许用户提供一个令牌而不是用户名和密码来访问他们存储在特定服务提供者的数据。OAuth 2.0 使得第三方应用可以在不获取用户密码的情况下,代表用户访问其资源。

OAuth 2.0 提供了四种授权流程:
授权码模式(Authorization Code Grant):适用于有自己的服务器的Web应用。这种模式下,授权码先交给客户端,然后客户端再交换令牌。
简化模式(Implicit Grant):适用于没有后端服务器的客户端应用,如JavaScript前端应用。在这种模式下,令牌直接通过浏览器传给客户端。
密码模式(Resource Owner Password Credentials Grant):适用于用户对客户端高度信任的情况,如操作系统或企业内部应用。用户将用户名和密码直接提供给客户端,客户端使用这些信息获取令牌。
客户端凭证模式(Client Credentials Grant):适用于客户端访问自己的资源服务器,不涉及用户。
安全性
虽然OAuth 2.0增加了安全性,但它也引入了一些潜在的安全问题,如重定向URI劫持、交叉站点请求伪造(CSRF)等。因此,实施OAuth 2.0时,建议采取相应的安全措施,比如使用HTTPS,验证重定向URI,以及使用最新的OAuth 2.0安全最佳实践。
OAuth 2.0 已经成为现代互联网应用中授权的事实标准,被广泛应用于各种场景中,包括Google、Facebook、Twitter等大型服务的API授权。

自我介绍

面试官你好,我叫***,做开发有3年的时间。在成都广力软件任职,后端经验丰富,熟悉前端技术。做过四川省事业编人事管理系统,医科大人事管理系统,西南科技大学招聘管理系统。看了贵公司的职务,我有三个优势,第一就是经历了多个产品,从0~1,1到100的过程,无论是技术选型还是难点攻克,我都有参与主导。第二个就是技术栈和业务的匹配,除了正常的业务开发,还有性能优化和调式。第三就是我工作态度严谨负责,善于思考能够很快融入到工作中。

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

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

相关文章

获取比特币和莱特币的实时价格

数据来源: https://datacenter.jin10.com/reportType/dc_bitcoin_current 代码: import akshare as ak import pandas as pd pd.set_option(display.max_columns, None) pd.set_option(display.max_rows, None) pd.set_option(display.width, 1000)cr…

「Linux系列」Shell 变量定义及运用

文章目录 一、Shell 变量的定义规则二、Shell变量的定义方法三、Shell变量的运用问题1. 变量未定义或为空2. 变量名拼写错误3. 变量作用域问题4. 变量值被意外修改5. 变量扩展问题6. 环境变量与局部变量冲突 四、相关链接 一、Shell 变量的定义规则 在Shell中,变量…

2024年最新Anaconda3 2024版中Jupyter Notebook安装

一、 Anaconda3 2024版下载 1.下载:Free Download | Anaconda 2.等待 解释:默认选择等等下载 ,时间可能数分钟 3.安装 解释:打开刚刚下载的Anaconda Navigator,并如图安装低版本,高版本会直接报错 4. …

CSS学习笔记:transform属性实现元素的位移、旋转、缩放

位移 实现居中的两种方法 绝对定位的盒子在父盒子中实现居中效果有两种方法 法一:margin 其中,left和top的值分别为子盒子自身宽高的一半 法二:translate 实现过渡效果 translate常常配合hover和transition使用,以实现鼠标悬停…

微博修改密码后无法通过微博开放接口发送微博

生产环境,因密码修改导致授权失效致接口发送微博失效!内部网站编辑完博文后无法发送微博。在修改密码时,有提示授权应用失效,操作人员不清晰情况,直接忽视。 微博应用开放接口----》微博转发博文接口文档 无示例 遗憾…

突破边界:Web3开启数字化社会的新纪元

引言 随着科技的不断进步和数字化社会的发展,Web3正逐渐成为了人们关注的焦点。作为新一代互联网的演进形态,Web3具有突破传统边界、实现去中心化的特点,被认为将开启数字化社会的新纪元。本文将深入探讨Web3的概念、特点、应用场景&#xf…

【LeetCode: 224. 基本计算器 + 模拟 + 栈】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Java的集合体系及相关数据结构---Collection系列

​​​​​​​ 其中,有序和无序是指存取时候的顺序一致或者不一致; Collection是单列集合的顶层接口,它的方法全部单列集合可用。 Collection方法 方法名说明boolean add(E e)添加元素boolean remove(Object o)从集合中移除指定的元素…

微信小程序事件处理

微信小程序中的事件处理是指在微信小程序中处理用户的交互操作,例如点击按钮、选择器改变等。微信小程序中的事件处理分为以下几种: bindtap:点击事件。bindchange:选择器改变事件。bounddata:数据改变事件。 以下是…

SQL Server 的日志文件占满硬盘时处理方法

当 SQL Server 的日志文件占满硬盘时,可以采取以下几个步骤来解决问题: 1. 备份和压缩日志文件:首先,你可以通过备份数据库日志文件并压缩它们来释放磁盘空间。可以使用 SQL Server Management Studio (SSMS) 或 Transact-SQL (T…

语音转文字——sherpa ncnn语音识别离线部署C++实现

简介 Sherpa是一个中文语音识别的项目,使用了PyTorch 进行语音识别模型的训练,然后训练好的模型导出成 torchscript 格式,以便在 C 环境中进行推理。尽管 PyTorch 在 CPU 和 GPU 上有良好的支持,但它可能对资源的要求较高&#x…

HarmonyOS 应用开发案例

本帖下方集中了HarmonyOS Next应用开发时,会遇到的常见应用案例。后续会持续更新大量案例,帮助开发者快速学习。欢迎感兴趣的同学加入Q:454901491 72.手写绘制及保存图片案例(0319更新)(点此查看源码实现&…

Windows10无盘母盘制作-以云更新为例

Windows10无盘母盘制作-以云更新为例 缘起环境准备创建虚拟机安装系统导出系统 缘起 网吧客户端在实际环境中,经常要面对形形色色对无盘系统,五花八门对无盘镜像, 为了方便确认不同无盘环境对客户的对影响,决定自己制作一个无盘母…

项目管理平台-01-BugClose 入门介绍

拓展阅读 Devops-01-devops 是什么? Devops-02-Jpom 简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件 代码质量管理 SonarQube-01-入门介绍 项目管理平台-01-jira 入门介绍 缺陷跟踪管理系统,为针对缺陷管理、任务追踪和项目管理的商业…

【python + Django】Django模板语法 + 请求和响应

前言: 现在现在,我们要开始将变量的值展现在页面上面啦! 要是只会显示静态页面,我们的页面也太难看和死板了, 并且数据库的数据也没法展现在页面上。 但是呢,模板语法学习之后就可以啦!&…

【大模型服务】01EdgeFM: Leveraging Foundation Model for Open-set Learning on the Edge

该文发表在 SenSys’23(CCF B) 上,作者是来自港中文的鄢振宇。这是一篇关于云端协同的文章,主要解决边缘设备深度模型的泛化性不足问题,实现 Open-set Learning。 文章目录 背景Open-Set Recognition 的挑战EdgeFM 整体架构图云端&#xff1…

CAPL如何使用socket套接字实现TCP通信(建立连接)

socket套接字相关的文章我们已经写过太多,这里就不再展开。CAPL使用socket实现TCP活UDP通信,在文章《【CANoe示例分析】TCP/UDP Server/Client》也有过介绍,但主要介绍的是工程示例,代码分析比较粗略,今天重点介绍下CAPL代码如何实现socket套接字在TCP通信中的使用。 首先…

21---EEPROM电路设计

视频链接 EEPROM电路设计01_哔哩哔哩_bilibili EEPROM电路设计 1、存储器的分类 一般根据掉电丢失来划分的存储器。可分为易失性存储器和非易失性储存器。 ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据。 1.1、易失性存储器-R…

383.赎金信

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 思路:将magazine 中字…

升级 HarmonyOS 4 版本,腕上智慧更进一步

HUAWEI WATCH GT 3 系列升级 HarmonyOS 4 新版本后,手表体验更进一步,快来看看有哪些变化吧~