20230912java面经整理

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.mzph.cn/news/77227.shtml

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

相关文章

Python之离线安装第三方库

1、场景介绍 在一些服务器上,我们搭建完Python环境之后,因为服务器的网络限制原因,不能直接通过pip命令下载安装Python的依赖包。 因此,我们需要在可以正常上网的服务器上下载好所需的依赖包文件,然后拷贝到目标服务器…

嘉泰实业:真实低门槛,安全有保障

在互联网金融大行其道的当下,无论用户是多么的青睐、喜爱这种便捷的理财方式,也一定得把资金安全放在心上。要投就投那些实力背景雄厚,诚信经营的平台,可以选择投资用户基数庞大的理财老品牌,也可以选择发展势头迅猛的…

OneFormer: One Transformer to Rule Universal Image Segmentation论文笔记

论文https://arxiv.org/pdf/2211.06220.pdfCodehttps://github.com/SHI-Labs/OneFormer 文章目录 1. Motivation2. 方法2.1 与Mask2Former的相同之处2.2 OneFormer创新之处2.3 Task Conditioned Joint Training2.4 Query Representations2.4 Task Guided Contrastive Queries 3…

备忘录模式简介

概念: 备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不暴露对象内部状态的情况下捕获和恢复对象之前的状态。该模式通过将对象的状态封装到备忘录中,并将其保存在一个管理者类中,从而实现了对…

【Redis】为什么要学 Redis

文章目录 前言一、Redis 为什么快二、Redis 的特性2.1 将数据储存到内存中2.2 可编程性2.3 可扩展性2.4 持久性2.5 支持集群2.6 高可用性 三、Redis 的应用场景四、不能使用 Redis 的场景 前言 关于为什么要学 Redis 这个问题,一个字就可以回答,那就是&…

学习记忆——宫殿篇——记忆宫殿——数字编码——记忆数字知识点

面对错综复杂的数字信息,我们想要记住可以通过以下三点: 1、首先找到关键词 2、数字编码牢记 3、关键词跟编码链接 案例:会计考试-时间期限为 3、7、10 日、1 年的知识点 3 天 (1)托收承付的承付期验单付款为 3 天。 (2)失票人应当在通…

帝国cms后台访问链接提示“非法来源”解决方法

提示“非法来源”的原因 帝国CMS更新升级7.2后,新增了后台安全模式,后台推出了金刚模式来验证链接来源。后台所有链接都需要登录后才能访问,直接强制访问后台页面链接都会提示“非法来源”。不是正常登录后台的用户无法直接访问到内容,保证了后台数据安全。 那么我们在日常…

【设计模式】三、概述分类+单例模式

文章目录 概述设计模式类型 单例模式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全,同步方法)懒汉式(线程安全,同步代码块)双重检查静态内部类枚举单例模式在 JDK 应用的源码分析 …

SpringMVC实现文件上传和下载功能

文件下载 ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文。具体步骤如下: 获取下载文件的位置;创建流,读取文件;设置响应信息,包括响应头,响应体以…

04-Redis哨兵高可用架构

上一篇:03-Redis主从架构 架构说明 sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。 哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过s…

【2023最新B站评论爬虫】用python爬取上千条哔哩哔哩评论

文章目录 一、爬取目标二、展示爬取结果三、爬虫代码四、同步视频五、附完整源码 您好,我是 马哥python说,一枚10年程序猿。 一、爬取目标 之前,我分享过一些B站的爬虫: 【Python爬虫案例】用Python爬取李子柒B站视频数据 【Pyt…

Java实现合并多个excel操作

涉及较多封装的工具类,所有依赖的工具类均提供代码,根据名称新建对应的类,在每个工具类中再引入相应的依赖即可 首先需要明确的是,需要合并的每个excel的表头名称必须是相同的, 针对表头,建立传输的dto&a…

【Spring】Ioc容器

🎈博客主页:🌈我的主页🌈 🎈欢迎点赞 👍 收藏 🌟留言 📝 欢迎讨论!👏 🎈本文由 【泠青沼~】 原创,首发于 CSDN🚩&#x1f…

IDEA设置Maven 镜像

第一步&#xff1a;右键项目&#xff0c;选择Maven->Create ‘settings.xml’ 已经存在的话是Open ‘settings.xml’&#xff1a; 第二步&#xff1a;在settings.xml文件中增加阿里云镜像地址&#xff0c;代码如下&#xff1a; <?xml version"1.0" encodin…

Android Ble蓝牙App(七)扫描过滤

Ble蓝牙App&#xff08;七&#xff09;扫描过滤 前言目录正文一、增加菜单二、使用MMKV① 添加依赖② 封装MMKV③ 使用MMKV 三、过滤空设备名四、过滤Mac地址五、过滤RSSI六、源码 前言 在上一篇文章中了解了MTU的相关知识以及对于设备操作信息的展示&#xff0c;本篇文章中将增…

Electron和vue3集成(推荐仅用于开发)

本篇我们仅实现Electron和vue3通过先运行起vue3项目&#xff0c;再将vue3的url地址交由Electron打开的方案&#xff0c;仅由Electron在vue3项目上套一层壳来达到脱离本机浏览器运行目的 1、参考快速上手 | Vue.js搭建起vue3初始项目 npm install -g vue npm install -g vue/c…

Android 文字转语音播放实现

1&#xff0c;TextToSpeech类是android自带的&#xff0c;但是部分设备需要支持TTS需要增加语音库&#xff0c;我使用的是讯飞语音&#xff08;离线的哦&#xff09;。请自行下载并安装讯飞语音APK&#xff0c;然后到系统设置中设置TTS功能默认使用该选项。有自带TTS库的可以省…

口袋参谋:淘宝不限类目,透视竞品实时销量!快试试这个插件

​在运营一家店铺之前&#xff0c;可以先了解各类目宝贝的市场行情&#xff0c;及时掌握不同类目宝贝的价格、销售情况&#xff0c;根据需求制定出属于自己的营销策略。 【可跨类目竞店透视】功能&#xff1a; 支持一键获取任意店铺宝贝概况信息 【跨类目竞店透视】功能使用 …

SEO百度优化基础知识全解析(了解百度SEO标签作用)

百度SEO优化的作用介绍&#xff1a; 百度SEO优化是指通过对网站的内部结构、外部链接、内容质量、用户体验等方面进行优化&#xff0c;提升网站在百度搜索结果中的排名&#xff0c;从而提高网站的曝光率和流量。通过百度SEO优化&#xff0c;可以让更多的潜在用户找到你的网站&…

Navicat15工具连接PostgreSQL15失败

1.错误现象及原因 错误现象&#xff1a; 错误原因&#xff1a; postgresql 15版本中 pg_database 系统表把 datlastsysoid 列删除了&#xff0c;所以造成了此错误。 2.解决方法 &#xff08;1&#xff09;将Navicat工具更新到官网最新版本。 &#xff08;2&#xff09;更换…