今天不写项目,聊聊后端面试吧

news2024/9/20 8:50:21

首先感谢大家之前的观看呀~兄弟们~

这边把我去过几家公司面试的题目都写一下哈,像我大二下,就是前两个月7-9进了公司进行后端实习,哎.....反正就是学学学..话不多说~

1.Frist

1.HashMap实现原理

HashMap是基于哈希表的Map接口的非同步实现。它存储的内容是键值对(key-value)。主要通过数组的索引来快速定位数据的位置,同时解决哈希冲突问题(如链表法或红黑树法)。

2.创建线程的方式,线程的状态

  • 创建线程的方式:继承Thread类、实现Runnable接口、使用CallableFutureTask(返回结果)、通过ExecutorService等。
  • 线程的状态:新建(NEW)、就绪(RUNNABLE)、运行(RUNNING)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)和终止(TERMINATED)

3.线程池的七个参数和应用场景

  • 1. 核心线程数(corePoolSize)

    定义:线程池中保持存活的最小线程数。即使这些线程是空闲的,它们也不会被销毁,除非设置了allowCoreThreadTimeOuttrue(这取决于具体的线程池实现,如ThreadPoolExecutor)。

    应用场景:这个参数的设置取决于你的应用需要多少线程来并行处理任务,同时又不希望线程数量过多导致资源浪费。例如,如果你的应用需要持续处理大量的任务,并且这些任务可以并行执行,那么你可以设置一个相对较大的核心线程数来充分利用多核CPU的优势。

    2. 最大线程数(maximumPoolSize)

    定义:线程池中允许的最大线程数。当工作队列满了之后,线程池会尝试创建新的线程来执行任务,但最多只能创建到最大线程数。

    应用场景:这个参数的设置取决于你的系统能够承受的最大并发线程数,以及你的应用能够从并发执行中获得的性能提升。设置得太大可能会导致过多的线程竞争CPU和内存资源,反而降低性能;设置得太小则可能无法充分利用系统资源。

    3. 非核心线程空闲存活时间(keepAliveTime)

    定义:超过核心线程数之外的线程空闲存活时间。当这些线程空闲超过这个时间后,它们将被终止并从线程池中移除。

    应用场景:这个参数的设置可以帮助你控制线程池中的线程数量,避免在系统负载降低时还保留大量的空闲线程。通过调整这个参数,你可以让线程池更加灵活地适应系统负载的变化。

    4. 时间单位(unit)

    定义keepAliveTime参数的时间单位,如秒、毫秒等。

    应用场景:这个参数通常与keepAliveTime一起使用,用于指定非核心线程空闲存活时间的具体单位。

    5. 工作队列(workQueue)

    定义:用于存放待执行的任务的阻塞队列。当所有核心线程都在忙时,新任务会被添加到工作队列中等待执行。

    应用场景:工作队列的选择会影响线程池的行为。常见的队列类型有ArrayBlockingQueue(有界队列)、LinkedBlockingQueue(无界队列,但可以通过构造函数的参数限制其容量)、SynchronousQueue(不存储元素的阻塞队列,每个插入操作必须等到另一个线程调用移除操作)等。根据你的应用需求选择合适的队列类型非常重要。

    6. 线程工厂(threadFactory)

    定义:用于创建新线程的工厂。通过这个工厂,你可以自定义线程的创建过程,比如设置线程的优先级、守护状态、名称等。

    应用场景:当你需要创建具有特定属性的线程时(如特定的线程名称或优先级),可以使用自定义的线程工厂。这有助于在日志中更容易地识别线程,或者在调试时更容易地跟踪线程的行为。

    7. 拒绝策略(handler)

    定义:当线程池和任务队列都满了时,用于处理新任务的策略。Java提供了几种预定义的拒绝策略,如AbortPolicy(默认策略,直接抛出异常)、CallerRunsPolicy(由提交任务的线程执行该任务)、DiscardOldestPolicy(丢弃队列中最老的任务,然后尝试提交新任务)和DiscardPolicy(直接丢弃新任务,不执行也不抛出异常)。

    应用场景:选择合适的拒绝策略取决于你的应用需求。例如,如果你希望避免任务被丢弃,可以选择CallerRunsPolicy;如果你希望系统在达到负载极限时能够自我保护,可以选择AbortPolicy并妥善处理异常。

4.JUC并发工具包用过哪些(有时候会问啊,频率不高)
JUC(java.util.concurrent)提供了丰富的并发工具,如CountDownLatchCyclicBarrierSemaphoreReentrantLockReadWriteLockConcurrentHashMap等。

5.CAS和AQS(这个需要了解一下=。=,有时候会问..)

6.数据库Mysql的sql语句掌握程度

join left join这些,索引的话,他有时候会给出一个场景,但是其实很多就说哎呀数据库都会用吧

毕竟很多都有Ai来实现,工作后你把他们拼成一起就可以了

8.数据库索引的种类,为什么建索引(这个啥呀问了前边的就应该都会问)

数据库索引主要分为以下几种类型:

  1. 主键索引:保证数据唯一性,同时提高查询效率。

  2. 唯一索引:要求索引字段的值必须唯一,可以有多个唯一索引,允许NULL值。

  3. 普通索引:最基本的索引,无特别限制,用于提高查询速度。

  4. 全文索引:专门用于文本搜索,快速找到包含特定关键词的数据。

  5. 复合索引:在多个列上创建的索引,适用于查询条件涉及多个列的情况。

为什么建索引

建立索引主要是为了:

  1. 提高查询效率:避免全表扫描,快速定位数据。

  2. 维护数据完整性:如唯一性约束。

9.sql优化有了解吗?应用场景

应用场景

  1. 查询语句优化
    • 使用合适的索引:为经常作为查询条件的列添加索引,可以极大提高查询速度。
    • 优化WHERE子句:确保WHERE子句中的条件能够有效利用索引,避免在WHERE子句中对字段进行函数操作或类型转换。
    • **避免SELECT ***:只选择需要的列,而不是使用SELECT *,以减少数据传输量。
    • 使用连接(JOIN)代替子查询:在可能的情况下,使用JOIN代替子查询可以提高查询效率。
    • 使用LIMIT分页:对于大量数据的查询,使用LIMIT来限制返回的结果集大小,以减少资源消耗。
  2. 数据库表结构优化
    • 规范化:通过数据库规范化来减少数据冗余,提高数据完整性,但过度规范化会增加查询的复杂度。
    • 反规范化:在某些情况下,适度的反规范化(如添加冗余字段、创建汇总表等)可以减少查询时的连接操作,提高查询效率。
    • 使用合适的数据类型:确保表中使用的数据类型是恰当的,避免不必要的数据存储开销。
  3. 查询执行计划分析
    • 利用数据库提供的查询执行计划分析工具(如EXPLAIN),分析查询语句的执行路径和成本,从而找到性能瓶颈。
  4. 高并发访问的Web应用:在Web应用中,数据库往往是性能瓶颈之一。通过SQL优化,可以减少数据库的负载,提高Web应用的响应速度。

  5. 数据仓库和BI系统:在数据仓库和BI系统中,经常需要处理大量的历史数据和复杂的查询。SQL优化可以帮助这些系统更快地响应查询请求,提高分析效率。

  6. 实时数据处理系统:在实时数据处理系统中,如物联网、金融交易等,对数据的实时性要求很高。通过SQL优化,可以确保系统在处理大量实时数据时保持高性能。

  7. 大规模数据分析:在处理大规模数据集时(如大数据场景),SQL优化对于提高查询性能、减少资源消耗和缩短处理时间至关重要。

数据库就基本这些,反正就一堆一堆举例,我说实话挺多的

2.Redis

到了redis~

等我后续写另一篇...一大堆放在一起很麻烦

3.Spring

1.Spring框架IOC容器启动过程

2.Spring中的Bean的生命周期(这个问的话大家说一下就行)

3.像spring框架这种东西吧,他AOC IOP都会问~

4.Spring事务中,什么情况下导致事务失效

5.Spring框架提供集中事务的传播行为(基本上问的很少)

6.Springboot相比于SSM的优势劣势在哪

4.others(肯定是问你项目啦,我的是微服务)

1.你的项目中使用分布式锁,你的实现方案是什么,出现并发修改的时候你是怎么做的                      

2.分布式事务和传统的事务相同点和不同点

3.服务熔断和服务降级怎么理解的

4.介绍你的项目中某个具体的流程

比如RabbitMQ,消息队列嘛,你会不会遇到一些消息挤压,消息丢失,重复消费呀之类的问题,简单说说,哎呀面试官现在大部分问的项目一坨一坨= =你得非常了解

上一个不了解的人已经到村门口去放牛了,哎,谁叫我们19岁正是不懂劳动法当牛马的好年纪......

附加算法(我都服了,作为一个数据库和数据结构都挂过科的人= =

据说秋招还说笔试成绩决定面试成绩,笔试又都是算法+.....+)

1.AB间的最短路径

2.实现快排

3.反转链表

4.红黑树

5.空间换时间

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

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

相关文章

Zabbix 部署----安装 Zabbix(监控服务器)

目录 zabbix 官网: 1、准备一台虚拟机 1.整理配置yum源(192.xx.xx.10) 2.设置主机名(192.xx.xx.10) 3.防火墙 4.selinux 2、准备Zabbix-repo 使用阿里提供的zabbixYUM源 3、安装Zabbix服务器 4、初始化数据库 1.安装数据库 2.启动数据库 3.授权zabbix账号 4.初始化…

数据结构强化(直播课)

应用题真题分析&备考指南 (三)线性表的应用 (六)栈、队列和数组的应用 (四)树与二叉树的应用 1.哈夫曼(Huffman)树和哈夫曼编码 2.并查集及其应用(重要) (四)图的基本应用 …

74、Python之函数式编程:深入理解惰性求值与生成器

引言 我们在过程式编程或者面向对象编程中(当然也不局限于这些),涉及到计算、数据的转换处理时,通常是执行到对应的语句或者表达式时,就会完成计算或者数据处理。大多数场景下,这样立即计算的方式是没有问…

基于SpringBoot的社团管理系统【附源码】

基于SpringBoot的社团管理系统(源码L文说明文档) 目录 4 系统设计 4.1 系统概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 5.1.2 社长信…

【kafka-04】kafka线上问题以及高效原理

Kafka系列整体栏目 内容链接地址【一】afka安装和基本核心概念https://zhenghuisheng.blog.csdn.net/article/details/142213307【二】kafka集群搭建https://zhenghuisheng.blog.csdn.net/article/details/142253288【三】springboot整合kafka以及核心参数详解https://zhenghui…

Golang | Leetcode Golang题解之第416题分割等和子集

题目&#xff1a; 题解&#xff1a; func canPartition(nums []int) bool {n : len(nums)if n < 2 {return false}sum, max : 0, 0for _, v : range nums {sum vif v > max {max v}}if sum%2 ! 0 {return false}target : sum / 2if max > target {return false}dp …

修复 blender 中文输入 BUG (linux/wayland/GNOME/ibus)

blender 是一个很好的 开源 3D 建模/动画/渲染 软件, 功能很强大, 跨平台 (GNU/Linux, Windows 等系统都支持). 然而, 窝突然发现, blender 居然不支持中文输入 (linux) ! 这怎么能忍 ? 再一查, 不得了, 这居然是个 3 年前一直未解决的陈年老 BUG. 不行, 这绝对忍不了, 这个 …

关于单片机的技术原理及应用

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于单片机的技术原理及应用的相关内容&…

【Qt网络编程】Tcp多线程并发服务器和客户端通信

目录 一、编写思路 1、服务器 &#xff08;1&#xff09;总体思路widget.c&#xff08;主线程&#xff09; &#xff08;2&#xff09;详细流程widget.c&#xff08;主线程&#xff09; &#xff08;1&#xff09;总体思路chat_thread.c&#xff08;处理聊天逻辑线程&…

1、CycleGAN

1、CycleGAN CycleGAN论文链接&#xff1a;Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks CycleGAN 是一种流行的深度学习模型&#xff0c;用于图像到图像的转换任务&#xff0c;且不需要成对的数据。在介绍CycleGAN之前&#xff0c;必须…

Msf之Python分离免杀

Msf之Python分离免杀 ——XyLin. 成果展示&#xff1a; VT查杀率:8/73 (virustotal.com) 火绒和360可以过掉&#xff0c;但Windows Defender点开就寄掉了 提示&#xff1a;我用360测的时候&#xff0c;免杀过了&#xff0c;但360同时也申报了&#xff0c;估计要不了多久就寄…

《Linux运维总结:基于Ubuntu 22.04操作系统+x86_64架构CPU部署二进制mongodb 7.0.14分片集群》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、简介 1、应用场景 当您遇到如下问题时,可以使用分片集群解决: a、 存储容量受单机限制,即磁盘资源遭遇瓶颈。 b、 读写能力受单机限制,可能是CPU、内…

开关磁阻电机(SRM)系统的matlab性能仿真与分析

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 SRM的基本结构 4.2 SRM的电磁关系 4.3 SRM的输出力矩 5.完整工程文件 1.课题概述 开关磁阻电机(SRM)系统的matlab性能仿真与分析&#xff0c;对比平均转矩vs相电流&#xff0c;转矩脉动vs相电流&a…

Python OpenCV精讲系列 - 高级图像处理技术(九)

&#x1f496;&#x1f496;⚡️⚡️专栏&#xff1a;Python OpenCV精讲⚡️⚡️&#x1f496;&#x1f496; 本专栏聚焦于Python结合OpenCV库进行计算机视觉开发的专业教程。通过系统化的课程设计&#xff0c;从基础概念入手&#xff0c;逐步深入到图像处理、特征检测、物体识…

JavaWeb---纯小白笔记01:JavaWeb概述和Tomcat安装

本次将对WEB开发的相关的概念和Tomcat等进行介绍。 Web开发简介&#xff1a; C/S和B/S是两种常用的网络架构模式 区别&#xff1a; C/S&#xff1a;client/server --客户端与服务器之间直接进行通信,对用户&#xff0c;本地电脑要求高 B/S&#xff1a;browser/server--通过…

人工智能-大语言模型-微调技术-LoRA及背后原理简介

1. 《LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS》 LORA: 大型语言模型的低秩适应 摘要&#xff1a; 随着大规模预训练模型的发展&#xff0c;全参数微调变得越来越不可行。本文提出了一种名为LoRA&#xff08;低秩适应&#xff09;的方法&#xff0c;通过在Transf…

K8S容器实例Pod安装curl-vim-telnet工具

在没有域名的情况下&#xff0c;有时候需要调试接口等需要此工具 安装curl、telnet、vim等 直接使用 apk add curlapk add vimapk add tennet

Angular: ‘ng’ is not recognized as an internal or external command

背景 运行新项目的前端angular2项目时&#xff0c;需要全局安装angular-cli&#xff0c;然后使用ng serve --open命令启动项目。我安装好angular-cli后&#xff0c;在cmd里输入ng命令&#xff0c;死活无法识别。 解决过程 我按照网上的说法&#xff0c;去配置npm环境变量&am…

软考高级:数据库规范化: 1NF、2NF、3NF和 BCNF AI 解读

数据库的规范化是数据库设计中的一个重要过程&#xff0c;旨在减少数据冗余和提高数据一致性。它通过一系列规则&#xff08;称为范式&#xff09;来优化数据库表的结构。 常见的范式有1NF、2NF、3NF和BCNF。让我们分别来解释这些范式。 生活化例子 想象你在整理一个家庭成…

吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界

刚刚&#xff0c;阿里巴巴集团CEO、阿里云智能集团董事长兼CEO吴泳铭在2024云栖大会上发表主题演讲—— “ 过去22个月&#xff0c;AI发展速度超过任何历史时期&#xff0c;但我们依然还处于AGI变革的早期。生成式AI最大的想象力&#xff0c;绝不是在手机屏幕上做一两个新的超…