Java
文章平均质量分 56
长不胖的小番茄
你有多努力,就有多特殊!
展开
-
手撕算法---爬楼梯,我用递归实现,让我伤心了
周一打卡leetcode爬楼梯这道算法题,我思考良久,决定使用递归实现,调试完没问题呀!刚提交就给我报超出时间限制。。。不讲武德,欺负小姑凉果不其然,递归代码虽然简洁高效,但是,也有很多弊端。比如,堆栈溢出、重复计算、函数调用耗时多、空间复杂度高等问题。leetcode 70.爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例1:输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1. 1 阶 + 1原创 2022-03-07 15:06:54 · 697 阅读 · 0 评论 -
手撕算法---基于数组实现栈的数据结构
从功能上来说,数组或链表确实可以替代栈,但是,特定的数据结构是对特定场景的抽象!当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,这时我们就应该首选“栈”这种数据结构。栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈。1.基于数组实现的顺序栈public class ArrayStack { private String[] items; // 数组 private int count; // 栈中原创 2022-03-04 15:13:59 · 329 阅读 · 0 评论 -
项目中RabbitMQ如何保证消息的可靠性传输
1.使用事务消息2.使用消息确认机制发送方确认:channel设置为confirm模式,每条消息会被分配一个唯一id。消息投递成功,信道会发送ack给生产者,包含了id,回调ConfirmCallback接口。如果发生错误导致消息丢失,发送nack给生产者,回调ReturnCallback接口。ack和nack只有一个被触发,且只有一次,属于异步触发,可以继续发送消息。@Component@Slf4jpublic class MyCallBack implements RabbitTempla原创 2022-02-06 13:16:03 · 1249 阅读 · 0 评论 -
RabbitMQ消息中间件碎片化知识的年终总结
为什么要有MQ?流量削峰、应用解耦、异步处理四大概念:生产者、消费者、交换机、队列六大模式(核心部分):1.简单模式2.工作模式3.发布/订阅模式4.路由模式5.主题模式6.发布确认模式...原创 2022-01-29 11:58:25 · 8465 阅读 · 0 评论 -
看懂JVM指令,字节码文件如何解析?
class 文件中的程序的执行逻辑,java 文件中编写程序的逻辑。JVM 对 class 文件的具体执行方式1、写 Java 代码public class Test { public static void main (String args[]){ int i = 10; int j = 20; int k = i + j; System.out.println(k); }}2、编译成 class 字节码文件(原创 2020-10-27 10:50:14 · 176 阅读 · 1 评论 -
面试官问我:数组下标为什么要从0开始?为什么不是从1开始?
说实话,这个问题我原来真的没有思考过呢!通过学习,我发现它是跟操作系统的内存寻址相关的!先上一个简单的数组内存结构图:int[] array = {1,2,3,4};内存地址是由寻址公式计算而来,操作系统的寻址公式其实就是通过下标找到对应的内存地址。假如数组首地址是1000,由于int类型在内存中是占4个字节,则array[0] = 1000array[1] = 1004array[2] = 1008array[3] = 1012下标从0开始:addr = 1000 + index *原创 2020-11-12 11:35:27 · 791 阅读 · 2 评论 -
【2021春招】上海哈罗Java开发岗面经
2021年3月16号上午,我投了哈罗的简历,下午就给我发了通知,告诉我17号晚上7点面试。我有点措不及防,时间有些仓促,没想到哈罗的效率这么快!技术面:1.自我介绍。2.说一下你做过的项目。3.讲一下你对AQS的理解。4.谈一下多线程中的CAS。5.Spring中Bean的生命周期。6.Spring中的Bean默认是单例模式,这种单例模式是线程安全的吗?7.Spring中的事务有哪几种方式?8.Spring事务中有个注解@Transactional,它底层是怎么实现的?9.Spring原创 2021-03-19 10:15:55 · 430 阅读 · 1 评论 -
面试官让你手写一个Java虚拟机,说说你会主要考虑哪些结构呢?
JVM整体结构线程共享:方法区、堆线程私有:虚拟机栈、本地方法栈、程序计数器JVM架构模型基于栈的指令集架构。优点:跨平台、指令集小、编译器容易实现。缺点:性能比基于寄存器的架构差、实现同样的功能需要更多的指令。JVM的生命周期启动:通过引导类加载器(BootStrap ClassLoader)创建一个初始类initial class来完成,这个类由虚拟机的具体实现指定。执行:一个运行中的Java虚拟机有着清晰的任务:执行Java程序程序开始时,它才运行。程序结束时,他就停止原创 2022-01-11 16:02:01 · 3509 阅读 · 0 评论