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…

【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 应用的源码分析 …

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…

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;更换…

C++编译静态成员函数报错: “osgGA::DriveManipulator::setEye”: 非静态成员函数的非法调用

来看代码 .h文件中 static void computePosition(const osg::Vec3d& eye,const osg::Vec3d& lv,const osg::Vec3d& up); void setEye(const osg::Vec3d& eye); void setRotation( const osg::Quat& rotation );osg::Vec3d _eye; osg::Quat _rotation…

探索程序员需要掌握的算法?

文章目录 一&#xff1a;引言二&#xff1a;常见算法介绍三&#xff1a;重点算法总结 &#x1f389;欢迎来到数据结构学习专栏~探索程序员需要掌握的算法&#xff1f; ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章…

【大数据Hive】hive 加载数据常用方案使用详解

目录 一、前言 二、load 命令使用 2.1 load 概述 2.1.1 load 语法规则 2.1.2 load语法规则重要参数说明 2.2 load 数据加载操作演示 2.2.1 前置准备 2.2.2 加载本地数据 2.2.3 HDFS加载数据 2.2.4 从HDFS加载数据到分区表中并指定分区 2.3 hive3.0 load 命令新特性 …