面试纪实(一)

2024-02-26 01:04
文章标签 面试 纪实

本文主要是介绍面试纪实(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

类加载机制,解决了什么问题

类加载机制,是在程序运行时,加载字节码文件到内存中使用的过程,由jvm的类加载器完成,包括加载,链接(验证,准备,解析),初始化三部分,还允许程序在运行时动态加载,实现了Java的灵活性和可扩展性,其主要功能是实现了动态加载,类的隔离,安全加载,性能优化,
衍生:类的生命周期:加载,链接,初始化,使用,销毁,
类加载器的分类:启动类加载器(加载Java核心类,如string),扩展类加载器(加载Java扩展类包lib中类),应用程序类加载器(加载应用程序classpath下的类),自定义加载器(加载自定义的类(有特殊要求的类,如加密要求,或者动态加载需要的类))

如何打破双亲委派机制

在Java中,双亲委派机制是指当一个类加载器收到类加载请求时,它会首先将这个请求委托给其父类加载器去完成,只有在父类加载器无法完成加载时,子类加载器才会尝试自行加载。这种机制有助于保证类的唯一性和安全性
自定义类加载器:可以通过自定义类加载器来实现打破双亲委派机制。在自定义类加载器重写loadClass方法,因为子类在加载时是通过该方法实现向父类加载器申请加载的,可以在加载类时自行定义加载逻辑,不再遵循双亲委派机制。

== 和 equals的区别

==比较两个对象的引用是否指向相同的内存地址,基本类型直接比较值,引用数据类型比较地址是否相等,
equals是object类中的方法,只能用于引用类型的比较,不重写时,比较地址值,重写后,根据重写的比较逻辑比较内容。

equals会重写hashcode在哪里会用到

equals方法一般用于比较对象的值是否相等,而hashcode一般用于计算对象的hsah值,主要用在hash表有关的集合中,把对象放到集合时需要计算其hash值从而确定存放位置,如果有hash冲突的话还需要比较两个对象是否为同一个对象,是则覆盖,不是则根据处理hash冲突的方法再处理,
延时:处理hash冲突的方法,线性探测,二次探测,链地址法,

hashmap的结构

1.8以前是数组加链表,1.8之后是数组加链表或者红黑树,当链表长度大于把,并且数组容量大于六十四时会出现树化现象,
hash扩容,当元素个数大于负载因子乘以总容量时会进行扩容,

jvm中方法区保存的内容,以及线程切换时通过什么机制保存线程信息

jvm中方法区保存了类的结构信息,属性,方法,构造函数这些,包括静态常量,常量,方法字节码
线程通过上下文机制保存线程信息,包括程序计数器,寄存器状态信息这些,线程切换时,会保存上一个线程的上下文,将下一个线程的上下文信息,加载到cpu中,这一过程通过操作系统的调度器来控制和管理

程序计数器解决了什么问题

程序计数器是线程私有的,主要记录了要执行的指令的地址,解决了线程切换恢复问题,指令跳转,多线程并发执行

spring里循环依赖问题

循环依赖问题是指spring中的两个或者多个bean相互依赖导致bean实例化失败的问题,
spring中有三个缓存,用于存储单例的bean实例,三个缓存彼此互斥,不会针对同一个bean实例,同时存储,从三个缓存读取实例的顺序为,一二三,
一级缓存为单例bean,用于存储单例模式下创建的bean实例(已经创建完毕),该缓存是对外使用的,程序眼使用
二级缓存为早期单例bean(bean被提前暴露的引用,该bean还在创建中),该缓存是spring使用的,
三级缓存为单例工厂,通过对象工厂对象存储单例模式下提前暴露的bean实例的引用,该引用是spring使用
实例化Bean阶段:当Spring容器在实例化Bean时,首先会检查一级缓存(singletonObjects)中是否存在该Bean的实例。如果存在则直接返回,否则进入下一步。
创建Bean对象并提前暴露:在创建Bean对象的过程中,Spring会将当前正在创建的Bean实例放入二级缓存(earlySingletonObjects),并提前暴露一个ObjectFactory,以便其他Bean可以提前获取到该Bean的引用。
解决循环引用:如果在创建Bean对象的过程中发现循环引用,Spring会将正在创建的Bean实例包装成一个ObjectFactory,并放入三级缓存(singletonFactories)。这样,当其他Bean需要引用正在创建的Bean时,可以通过ObjectFactory获取到这个Bean的代理对象,从而避免循环引用问题。
完成Bean的创建:一旦Bean创建完成,Spring会将Bean从二级缓存中移除,并将其放入一级缓存中,以便后续的Bean可以直接获取到已经创建好的Bean实例。
三级缓存通过在Bean创建过程中提前暴露和代理对象的方式,解决了循环引用的问题。

二级缓存,三级缓存是什么

二级缓存是在spring创建bean对象时,在一级缓存中没有找到依赖的bean对象,就会将这个早期的还为创建完成的bean暴露在二级缓存中,以便其他bean在创建时获得该对象的引用,
三级缓存也是用于存放创建中bean对象实例的,没有找到依赖的对象时,会将创建的bean包装成一个对象工厂暴露在三级缓存中,以便其他bean可以通过对象工厂获取代理对象来解决循环依赖

为什么会出现循环依赖

1.设计不当导致的类之间的相互引用,2.依赖注入中的循环引用,3.多模块项目中的循环引用

乐观锁悲观锁是什么,通过什么实现的,cas怎么保证,aba问题如何解决

乐观锁和悲观锁:
乐观锁:乐观锁的思想是假设并发冲突不会发生,因此在读取数据时不会加锁,而是在更新数据时进行冲突检测。如果发现冲突,就会进行重试或者放弃操作。乐观锁适用于读操作远远多于写操作的场景,适合于并发冲突较少的情况。
悲观锁:悲观锁的思想是假设并发冲突会发生,因此在读取数据时会加锁,以防止其他线程对数据进行修改。悲观锁适用于写操作远远多于读操作的场景,适合于并发冲突较多的情况。

CAS(Compare And Swap):
CAS是一种乐观锁的实现方式,它通过比较并交换的方式来保证并发环境下的原子性操作。CAS操作包括三个参数:内存位置V、旧的预期值A、新的值B。如果当前内存位置的值等于预期值A,则将该位置的值更新为新值B,否则不做任何操作。
CAS通过硬件的原子指令来实现,保证了并发环境下的原子性操作。但是CAS也存在ABA问题,即在操作过程中可能会出现值从A变为B,再变回A的情况。

ABA问题的解决:
ABA问题指的是在CAS操作中,如果一个值从A变为B,再变回A,那么CAS操作就无法检测到这种情况,可能会导致错误的操作。为了解决ABA问题,可以使用版本号或者标记来区分不同的操作。比如在CAS操作中,除了比较值之外,还需要比较版本号或者标记,以确保操作的正确性。

联合索引下,第一个索引字段重复度低,第二个字段重复度高会对索引搜索效率有影响吗

会有一定影响,可能会导致查询变慢,外推到极限情况,第一个索引失效,导致了全表扫描,肯定是变慢的

这篇关于面试纪实(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/747248

相关文章

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

贝壳面试:什么是回表?什么是索引下推?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 1.谈谈你对MySQL 索引下推 的认识? 2.在MySQL中,索引下推 是如何实现的?请简述其工作原理。 3、说说什么是 回表,什么是 索引下推 ? 最近有小伙伴在面试 贝壳、soul,又遇到了相关的

毕业前第二次面试的感慨

距面试已经过去了有几天了,我现在想起来都有说多的恨感慨。 我一直都是想找刚刚起步的企业,因为这能让我学到更多的东西,然而正好有一家企业是刚起步的,而且他还有自己的产品专利,可以说这是一家,即是创业又是刚起步的公司,这家公司回复了我投给他的简历,这家企业想进一步了解我的情况,因为简历上我符合这家企业的基本要求,所以要进一步了解。 虽然面试的过程中,他给我的面试题,我做得并不是很理想,

腾讯社招面试经历

前提:本人2011年毕业于一个普通本科,工作不到2年。   15号晚上7点多,正在炒菜做饭,腾讯忽然打电话来问我对他们的Linux C++的职位是否感兴趣,我表达了我感兴趣之后,就开始了一段简短的电话面试,电话面试主要内容:C++和TCP socket通信的一些基础知识。之后就问我一道算法题:10亿个整数,随机生成,可重复,求最大的前1万个。当时我一下子就蒙了,没反应过来,何况我还正在烧

完整的腾讯面试经过

从9月10号开始到现在快两个月了,两个多月中,我经历数次面试和笔试,在经历这些的同时积累了不少的经验,也学到了不少东西,在此把它记录下来,算是和一起找工作中的同学一起共勉吧。我是本校的学生,专业是机械制造及其自动化,找工作的主要目标是计算机软件类和机械制造方向的国内的企业,所以意向去外企的同学就不必浪费时间看这些面经啦,想去国内IT企业的同学可以继续看下去。本贴中我把最近的腾讯面试经过写下

仕考网:结构化面试流程介绍

(一)结构化面试 结构化面试,也叫做标准化面试,考官按照预先设定好的一套试题以问答方式与应试者当面交谈,根据应试者的言语、行为表现,对其相关能力和个性特征作出相应评价。 (二)考试流程 抵达考场——审核抽签——面试候考——进入考场——面试答题——考生退场——计分审核 (三)答题技巧 1.声音洪亮,音量可以比平时说话声音大一点。 2.语速不要过快,语速快容易卡顿,而且不便于考官听清答

嵌入式面试经典30问:二

1. 嵌入式系统中,如何选择合适的微控制器或微处理器? 在嵌入式系统中选择合适的微控制器(MCU)或微处理器(MPU)时,需要考虑多个因素以确保所选组件能够满足项目的具体需求。以下是一些关键步骤和考虑因素: 1.1 确定项目需求 性能要求:根据项目的复杂度、处理速度和数据吞吐量等要求,确定所需的处理器性能。功耗:评估系统的功耗需求,选择低功耗的MCU或MPU以延长电池寿命或减少能源消耗。成本

Leetcode面试经典150题-128.最长连续序列-递归版本另解

之前写过一篇这个题的,但是可能代码比较复杂,这回来个简洁版的,这个是递归版本 可以看看之前的版本,两个版本面试用哪个都保过 解法都在代码里,不懂就留言或者私信 class Solution {/**对于之前的解法,我现在提供一共更优的解,但是这种可能会比较难懂一些(思想方面)代码其实是很简洁的,总体思想如下:不需要排序直接把所有数放入map,map的key是当前数字,value是当前数开始的