20230912java面经整理

news2024/11/23 23:27:23

1.gc算法有哪些

引用计数(循环引用)和可达性分析找到无用的对象
标记-清除:简单,内存碎片,大对象找不到空间
标记-复制:分成两半,清理一半,没有碎片,如果存活多效率低(适合新生代)
标记-整理:将存活对象向一端移动,清除边界外(适合老年代)
分代收集:老年代回收少,新生代回收多;对新生代使用复制算法,一个较大的eden和两个较小的survivor,提高空间利用的效率

2.反射的核心类是啥

反射是一种在程序运行时可以动态访问,修改某个类中任意属性和方法的机制(包括private)
功能包括:
1.判断对象所属的类
2.构造一个类的对象
3.判断类具有的变量和方法
4.调用任意一个对象方法
核心类包括四个:
1.java.lang.Class.java:类对象
2.java.lang.reflect.Constructor.java:类的构造器对象
3.java.lang.reflect.Method.java:类的方法对象
4.java.lang.reflect.Field.java:类的属性对象
工作原理:
java变成.class后有类的所有信息,父类接口构造函数方法属性;在运行时会被classLoader加载到虚拟机。类被加载后,jvm自动产生一个class对象,new就是通过这些class对象创建。

3.nio和io多路复用原理

用户进程想执行io,需要发起系统调用访问内核空间,包括:
1.内核等待io准备好数据
2.内核将数据从内核空间拷贝到用户空间
NIO(Non-blocking io)是只同步非阻塞io,使用轮询
1.如果kernel没有数据,调用失败,不需要等待
2.如果kernel有数据,阻塞,复制完成后才返回成功
在这里插入图片描述
NIO优点:无序等待无数据
NIO缺点:轮询占用cpu;定时轮训不及时;read导致用户态内核态频繁转换

IO多路复用(也就是java中的NIO, newIO)
1.一个线程监视多个描述符socket,一旦某个描述符就绪(kernel可读可写),可以通知程序进行io,系统调用包括select,poll, epoll
2.select会阻塞到socket有数据就绪,再调用read
在这里插入图片描述
io多路复用优点:改为select轮询,查找可io的操作;可同时管理多条连接
io多路缺点:select也属于同步阻塞io
select和poll:线性结构存储socket集合,需要遍历文件描述符集合找到可用socket
epoll:用红黑树跟踪文件描述符(logn),事件驱动维护链表记录就绪事件

4.MYSQL索引列建议

适合:
1.唯一性限制
2.频繁where,order by和group by
3.多表join的连接字段创建索引,类型必须一致(否则隐式转换导致索引失效)
4.字符串前缀创建索引,使用最频繁放联合索引左侧
5.多个字段维护索引,联合索引更优
不合适:
1.数据量小没有效果
2.大量重复数据高于10%例如性别
3.经常更新的表索引影响效率
4.无序的值不要做索引
5.每张表索引不超过6个

5.MYSQL事务特性

MySQL 事务具有四个特性:原子性、一致性、隔离性、持久性,这四个特性简称 ACID 特性

一、原子性(Atomicity ):一个事务是一个不可再分割的整体,要么全部成功,要么全部失败

事务在数据库中就是一个基本的工作单位,事务中包含的逻辑操作(SQL 语句),只有两种情况:成功和失败。事务的原子性其实指的就是这个逻辑操作过程具有原子性,不会出现有的逻辑操作成功,有的逻辑操作失败这种情况

二、一致性(Consistency ):一个事务可以让数据从一种一致状态切换到另一种一致性状态

举例说明:张三给李四转账 100 元,那么张三的余额应减少 100 元,李四的余额应增加 100 元,张三的余额减少和李四的余额增加这是两个逻辑操作具有一致性

三、隔离性(Isolution ):一个事务不受其他事务的影响,并且多个事务彼此隔离

一个事务内部的操作及使用的数据,对并发的其他事务是隔离的,并发执行的各个事务之间不会互相干扰

四、持久性(Durability ):一个事务一旦被提交,在数据库中的改变就是永久的,提交后就不能再回滚

一个事务被提交后,在数据库中的改变就是永久的,即使系统崩溃重新启动数据库数据也不会发生改变

6.分布式id实现方案

唯一标识
在这里插入图片描述
雪花算法:
在这里插入图片描述
号段模式:也是基于数据库,但分段,每次可以获得多个id,性能提升

7.RPC原理

remote procedure call,远程过程调用,使得分布式应用更容易
rpc一般都有长链接,都有注册中心,协议效率更高
在这里插入图片描述
1.client发起调用给client stub
2.client stub序列化后找到地址发给server stub
3.server stub解码后调用本地服务处理
4.得到返回结果后发给stub序列哈再发给client stub
5.client stub解码后发给client得到结果
涉及到的技术:
1.动态代理,stub的生成需要java动态代理
2.序列化,例如fastjson,数据都转化为字节
3.nio通信,例如dubbo
4.服务注册中心,client连接server发布的服务,dubbo用zookeeper
5.负载均衡多节点集群
6.探活:client心跳和server主动探测

8.redis除了缓存还能做什么

队列:list,例如将爬虫失败的存到redis队列,再启动一个线程自旋的方式阻塞式取出
签到:bitmap,二进制数组,setbit, bitcount获取结果
原子扣减库存:lua脚本保证原子性
分布式锁:setnx + 过期事件用lua保证原子性;锁有心跳检测,防止未解锁,锁失效问题;线程自旋获取锁;redisson框架
延迟队列,排行榜:zset,用score作为延迟的时间点,顺序获得端口的值,如果时间戳大于等于score可以取出
分布式id递增等等

9.redis数据结构底层

string:sds,获取长度o1,不会溢出,二进制安全
列表:双端链表
字典:类似hashmap
跳表:查询插入删除logn,zset
压缩列表:一块连续的内存空间,没有空隙(当lsit数据较少时,多了就linkedlist)
快速列表:由于每个节点都有prev和next指针,内存单独分配,使用quicklist代替。它是ziplist和linkedlist的混合,将linkedlist切分,每一段数据使用ziplist紧凑存储,多个ziplist之间用指针串联

10.springboot的自动装配原理

自动装配:通过注解或者一些简单的配置就可以在springboot的帮助下实现某块功能
@springbootapplicaiton = @configuration + @enableautoConfiguration + @ComponentScan
@EnableAutoConfiguration:实现自动装配的核心注解,importSelector获取所有符合条件的类的全限定类名,这些类需要被加载到ioc容器中
@configuration:允许在上下文注册额外的bean或导入其他配置类
@componentScan:扫描被@Component注解的bean,启动类所在包下的所有类,可以通过filter排除不扫描的包

11.spring的ioc原理

ioc=控制反转,把创建对象的控制交给spring进行管理,原来自己要new现在直接从spring获取
在这里插入图片描述
减低了代码的耦合度,降低程序的维护成本。
spring提供了一个beanFactory,他还有一个ApplicationContext,通过工厂+反射实现
在这里插入图片描述

12.autowired和resource区别,autowired希望byname咋办

都可以卸载字段or setter上
autowired只能byTpye注入,如果希望byName可以结合@Qualifier一起使用或者@Primary
resource默认通过ByName注入,spring会把@resource注解的name属性解析为bean的名字

13.一致性哈希了解吗

多副本负载均衡可以用加权轮询,但是对于数据分片分布式系统不适用
例如某个key只能在某些node上获取
如果使用hash(key) % n进行映射,当n变化时会迁移数据,成本高
用一致性哈希会有一个2**32-1的空间,将节点和data都映射到一个哈希环上
数据i存储节点就是hash顺时针找到的第一个节点
加入节点只影响相邻节点
但是,一致性哈希不保证分布均匀
在这里插入图片描述
可能会导致数据的全体迁移
通过引入虚拟节点解决不均匀问题
原有节点多复制一些可以提高节点的均衡度,使得某个节点不会负载特别高

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

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

相关文章

Bigemap 在土地图利用环境生态行业中的应用

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP Bigemap 在土地图利用环境生态行业中的应用  使用场景 : 1. 土地利用占地管理: 核对数据,查看企业的实际占地是否超出宗地&…

电商运营管理——广告系统

广告位对于电商平台而言,具有非常重要的作用。如何设计一个广告位是本篇文章重点讲述的内容,作者从六个方面出发,系统地介绍该如何去搭建一个广告位,能为产品设计的同学提供一些思路。 对于电商平台,广告位无论是对产品…

制造业企业使用哪种ERP系统好?金蝶还是用友?

制造业企业使用哪种ERP系统好?金蝶还是用友? 综合来看,这几位都算是是典型的ERP软件,它有着ERP软件应该有的基础功能,并且做的也比较成熟。下面是本文对这几个软件的总结 金蝶: 优势:1.产品丰…

mysql逻辑备份和恢复

备份恢复指令 1 全备 (变量为密码、端口号、输出路径。 --compress支持压缩) mysqldump -uroot -p*** -P*** --single-transaction --master-data2 --flush-logs --hex-blob --flush-privileges --triggers --routines --events --all-databases > …

【100天精通Python】Day61:Python 数据分析_Pandas可视化功能:绘制饼图,箱线图,散点图,散点图矩阵,热力图,面积图等(示例+代码)

目录 1 Pandas 可视化功能 2 Pandas绘图实例 2.1 绘制线图 2.2 绘制柱状图 2.3 绘制随机散点图 2.4 绘制饼图 2.5 绘制箱线图A 2.6 绘制箱线图B 2.7 绘制散点图矩阵 2.8 绘制面积图 2.9 绘制热力图 2.10 绘制核密度估计图 1 Pandas 可视化功能 pandas是一个强大的数…

在 Python 中实现 DBSCAN

一、说明 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)聚类是一种基于密度的聚类算法。它能够根据数据点的密度来将数据划分为不同的类别,并可以自动识别离群点。DBSCAN聚类算法的核心思想是将密度高的数据点划分为…

MacVim for Mac:强大的文本编辑器,提升你的编程体验

在Mac上,有这样一款独特的文本编辑器——MacVim for Mac,它以其强大的功能和出色的性能,吸引了广大的程序员和编程爱好者。这款编辑器不仅继承了Unix编辑器Vi的强大功能,更通过创新的设计和功能拓展,提供了一款更完整、…

批量上传文件,以input上传文件,后端以List<MultipartFile>类型接收

批量上传文件,以input上传文件,后端以List类型接收 一、后端接口二、前端对接三、测试 最近公司要求要做一个批量上传文件的功能,以往做的导入Excel表格、上传图片都是上传一个文件的,此次在开发的过程中着实让我犯了难&#xff0…

vue Echarts饼图指定颜色与数据对应

需求:一般自定义颜色是按照数据的顺序依次对应,现在想要指定字段对应某个颜色 因为是直接在返回数据中做操作,所以直接写这部分的代码 数据格式 cdata: {xData: ["水文", "森林", "气象", "地质",…

学习笔记|外部中断|INT0|中断列表|STC32G单片机视频开发教程(冲哥)|第十五集:中断系统和外部中断

文章目录 1.中断和中断系统1.1什么是中断?1.2什么是中断系统1.3中断系统的优点1.4 中断系统包含哪些中断源1.5.中断次序 2.什么是外部中断3.外部中断的用法4.外部中断的用法完整代码 总结课后练习: 上节课我们学完了GPIO的矩阵按键,已经把这个GPIO的一个外设全都已…

最小二乘法的实现与线性回归的应用

1. 简介 简单线性回归中,您有一个因变量y和一个自变量X。该模型可以表示为: y m x b ymxb ymxb 其中 x x x: 自变量 y y y: 因变量 m m m: 斜率 b b b: 截距 最小二乘法是回归分析中用于估计线性回归模型参数的标准方法。它可以最小化误差的平方和&…

SpringBoot课堂笔记20230913

本篇文章为SpringBoot学习笔记,方便自己再复习。 Maven:jar包管理工具 注解: Controller:处理http请求,返回的视图 RestController: 相当于ResponseBody和Controller一起用,返回的是json ResponseBody:返回响应内容 …

客户关系管理的定义及三种常见的CRM系统

CRM旨在加强企业与客户的关系,建立以客户为中心的经营策略。随着技术的迅速发展,CRM的实施变得更加普遍,不仅能帮助企业与客户建立紧密联系,还能实现客户细分开展个性化的营销活动。客户关系管理是什么,CRM怎么分&…

【MySQL】数据库的操作

目录 前言 创建数据库 编码集和校验集 不同校验集的区别 删除数据库 确认当前数据库 查看数据库属性 修改数据库属性 备份与还原 数据库和表的备份 还原 创建表 查看列结构 查看表属性 修改表的列 修改表名称 修改列名称 删除表 前言 在上一篇文章中&#…

什么是生成对抗网络 (GAN)?

什么是生成对抗网络 (GAN)? 钦吉兹赛义德贝利 一、说明 GAN(Generative Adversarial Network)网络是一种深度学习模型,由两个神经网络——生成器和判别器组成。生成器负责生成虚假的数据,而判别…

Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等)

Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等) 准备文件,这里我放在resource下的templates路径 在pom中配置构建打包的资源,更新maven 如果使用了assembly打包插件这样配置可能仍不生效&#…

Windows+Pycharm 如何创建虚拟环境

当我们开发一个别人的项目的时候,因为项目里有很多特有的包,比如 Pyqt5.我们不想破坏电脑上原来的包版本,这个时候,新建一个虚拟环境,专门针对这个项目就很有必要了. 简略步骤: 1.新建虚拟环境 1.打开 pycharm 终端(Terminal)安装虚拟环境工具: pip install virtualenv2.创…

基于FPGA的图像指数对比度增强算法实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1图像指数对比度增强概述 4.2基于FPGA的图像指数对比度增强 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 Vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns…

Redis——渐进式遍历和数据库管理命令

介绍 如果使用keys * 这样的操作,将Redis中所有的key都获取到,由于Redis是单线程工作,这个操作本身又要消耗很多时间,那么就会导致Redis服务器阻塞,后续的操作无法正常执行 而渐进式遍历,通过多次执行遍历…

虹科展会丨9月19号工博会启航:虹科五大团队携20+产品,双展台+两场演讲等您来!

2023年9月19-23日,第23届中国国际工业博览会即将在上海国家会展中心拉开帷幕。本届工博会以“碳循新工业、数聚新经济”为主题,展览面积30万平方米,吸引了来自全球27个国家和地区超2600家企业参展,共设置九大专业展区,…