- 博客(214)
- 资源 (1)
- 收藏
- 关注
原创 HashMap 底层数据结构和扩容机制面试连珠炮
平衡二叉树,又叫AVL树,虽然查询效率也很快,但是AVL树要遵循十分严格的平衡条件,即左右子树的高度差不超过1,为了达到这样的平衡条件,在添加或者删除树的节点是,需要经过多次左旋或右旋操作才能复衡。而红黑树没有严格遵守这样的平衡条件。key 如果为null,哈希值就为0,这里说明HashMap是可以接受key为null,从而说明HashSet也可以接收key为null,因为HashSet就是HashMap去掉value那一半。
2024-11-15 19:16:16
454
原创 求字符 ‘a‘ 和 ‘b‘ 组成的,最大长度为n的字符串中字典序第 k 个字符串
既然用到了树数据结构,这里可以用回溯法的思想来解决这道问题,先遍历左子节点,即先获取字符a,然后再遍历右子节点,即获取字符b。求字符 ‘a’ 和 ‘b’ 组成的,最大长度为n的字符串中字典序第 k 个字符串。先来解释一下这个题目,假设最大长度为3,那么由字符。
2024-11-15 19:01:06
411
原创 牛客网项目总结
下面这幅图是牛客网项目的架构图,最下层是Spring Boot,表示我们所有的技术都是基于Spring Boot,上面一层是Spring,Spring上面是Spring MVC、Spring MyBatis 和 Spring Security。数据库访问的问题,通过Spring Security来管理我们项目中的安全层面的这个内容来管理我们项目中的权限,这三个技术都是基于Spring之上的。由Spring进行整合。通过Spring MVC 解决前后端请求交互的问题,通过Spring MyBatis解决。
2024-11-04 16:01:37
356
原创 Java 线程池介绍
线程池是Java并发编程中的一种重要工具,其主要功能是有效地管理和复用线程资源,以避免频繁创建和销毁线程所带来的性能开销。线程池的创建方式有自动和手动两种。虽然 JDK 提供了Executors工具类来简化线程池的创建,但我们在实际开发中,最好手动创建线程池业务需求的差异:自动创建的线程池(如等)是根据通用场景设计的,无法完全契合我们具体的业务需求。手动创建线程池可以根据业务场景灵活设置线程池的参数。自定义线程工厂:通过自定义线程工厂,我们可以为线程设置有意义的名称,方便后续的调试和日志分析。
2024-10-31 20:29:10
740
原创 Java 子类继承父类,构造方法调用规则
在Java中,当一个类去继承另一个类时,子类的构造方法必须调用父类的构造方法,以确保父类的成员变量和资源能够正确初始化。这是因为父类的构造方法负责初始化父类的成员变量,子类构造方法负责初始化子类的成员变量。因为子类没有显示地调用父类的构造函数。下面这段代码可以正常运行。
2024-10-30 16:53:02
452
原创 线程池八大拒绝策略
拒绝策略特点适用场景调用者线程执行被拒绝的任务,减轻线程池压力。并发量较小且不允许任务丢失的场景,任务执行时间较短。抛出异常,任务提交失败时明确反馈。需要明确处理任务提交失败的场景,适合对任务失败敏感的系统。静默丢弃被拒绝的任务,不抛出异常。对任务丢失不敏感的场景,如日志收集、监控数据等。丢弃队列中最旧的任务,优先处理新提交的任务。需要优先处理新任务的场景,如实时性要求较高的系统。Dubbo记录详细的日志和堆栈信息,帮助快速定位问题,抛出异常。
2024-10-22 16:56:05
963
原创 Spring AOP中有哪些概念,如何理解?
切面(Aspect):封装横切关注点的模块。连接点(Join Point):程序执行的某个点(Spring AOP 中是方法的执行)。通知(Advice):在连接点上执行的操作。切点(Pointcut):定义在哪些连接点上应用通知。目标对象(Target Object):被 AOP 增强的对象。代理(Proxy):AOP 框架生成的对象,用于实现切面逻辑。织入(Weaving):将切面应用到目标对象的过程。
2024-10-09 10:16:20
478
1
原创 网络五层模型:物理层、数据链路层、网络层、传输层、应用层,分别解决了什么问题?
层次解决的问题物理层如何通过物理介质传输比特流(0和1)?数据链路层如何在同一局域网内可靠地传输数据帧?如何检测和纠正传输错误?网络层如何跨越多个网络传输数据包?如何为设备分配逻辑地址并选择最佳传输路径?传输层如何确保端到端的可靠数据传输?如何控制流量并处理传输中的错误?应用层如何为用户提供网络应用服务?如何处理数据格式、用户认证、加密等问题?每一层都依赖于下层提供的服务,并为上层提供服务。通过这种分层结构,网络通信的复杂性被分解为多个相对独立的部分,使得网络设计和实现更加灵活和模块化。
2024-10-07 21:15:18
4839
原创 【尚硅谷】RocketMQ 消息队列学习笔记
Topic -> Queue -> 消息Queue 太多不好管理,将Queue划分成不同的分片,Broker 存储分片Broker 是按照分片存储的。
2024-10-02 15:44:28
647
原创 图解MySQL 1-22 章节相关总结
查 information_schema 库的 innodb_trx 表–skip-grant-tables 参数–skip-networking 参数慢查询日志(slow log)show indexexplainaliasmonth()CAST一句话总结章节。
2024-10-01 19:56:17
562
原创 com.hellobike.soa.common.exception.RpcException: RpcException Status:1101问题解决
【代码】com.hellobike.soa.common.exception.RpcException: RpcException Status:1101问题解决。
2024-10-01 19:55:40
174
原创 com.hellobike.soa.common.exception.RpcException: RpcException Status:2301, Message:Undeclared interf
在atlas静态配置,soa.json中添加相应的服务。
2024-09-03 19:42:55
173
原创 解决 com.hellobike.druid.exception.DruidInternalException: [Hbdl] Write Body To Http Connection Error
今天在实习公司跑单测时候,一直报错误,同事们都可以正常运行,最后是关掉公司内网vpn解决的。
2024-06-06 19:46:05
191
原创 线程池的工作队列对比
SynchronousQueue: 一个不存储元素的阻塞队列,每个插入操作必须等待一个相应的删除操作,反之亦然。当队列中存在未被消费的元素时,插入操作会被阻塞。当队列容量达到上限时,后续的插入操作会被阻塞。PriorityBlockingQueue: 基于优先级的无界阻塞队列,它会根据元素的优先级进行排序。当队列为空时,获取操作会被阻塞。ArrayBlockingQueue: 基于数组的有界阻塞队列,它的容量是固定的,当队列已满时,后续的插入操作会被阻塞。
2024-05-18 15:13:33
369
原创 Java 接口详解
接口更多的是为了解耦。比如我需要制定一套方法的规范,就可以将这套方法规范抽象为一个接口。每一个实现这个接口的类都必须实现接口中所有的方法。默认都是 public static final 修饰2 方法所以接口里面可以有main方法
2024-05-17 09:47:21
292
原创 Linux Top命令详解
综合来看,这条命令链的作用是列出系统中各种CPU型号的名称,并统计每种型号出现的次数,从而提供关于系统中具体使用了哪些CPU及其数量的快速概览。如果系统包含多个相同型号的CPU(例如在多核或多CPU配置中),这个命令可以清晰地显示每个型号的计数,帮助理解系统的具体硬件配置。这个数字较高,表明物理内存的需求超过了实际可用的物理内存,系统不得不依赖交换空间来满足内存需求,这通常会影响系统性能,因为交换空间的读写速度远不及物理内存。如果是多核心或者多CPU的系统,这个命令可以帮助理解系统的硬件组成。
2024-05-15 09:58:15
3440
原创 JDK 1.8 HashMap扩容机制
我们首先来看利用无参构造函数创建HashMap如何扩容。首先创建一个无参构造出来的hashmap HashMap hashMap = new HashMap();该构造函数源码如下:public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted }此时,该构造函数只会设置默认的加载因子,即计算阈值threshold,默认为0.75大小。此时底层的table数组是
2024-05-13 20:05:41
1534
原创 图解JVM出现的参数
参数说明-XX:+UseParNewGC使用ParNew作为垃圾回收器-XX:HandlePromotionFailure设置如果老年代内存<新生代所有对象大小时要不要Full GC,如果没设置就要Fuul GC,设置了就不要Full GC,而是进一步检查。-Xmx, -Xms, -Xmn, -XX:PermSize, -XX:MaxPermSize内存相关参数-XX:SurvivorRatio设置Eden区和S区的比例,如果-XX:SurvivorRat
2024-05-09 20:16:50
435
原创 Java i++操作不是原子性的,怎么理解?
在Java中,每个操作都对应一个或多个字节码指令。这些指令是Java虚拟机(JVM)执行的最低层次的命令。
2024-04-30 10:32:01
330
原创 笔试过程种遇到的笔试题收集
现在有1011种蘑菇,其中1种是毒蘑菇。人一旦吃了微量的毒蘑菇,就会在72小时后发作身亡。现在用松鼠做试验,从开始喂松鼠计时,要在72小时后马上找出毒蘑菇,问最少需要多少只松鼠?
2024-04-29 15:19:34
424
原创 面试过程种遇到的面试题收集
讲一讲这个项目是干什么的?需求规格说明书有哪些章节?职工部门层级如何显示在一张SQL表上?需求开发用到了哪些技术?
2024-04-29 15:19:06
241
1
原创 TCP建立连接三次握手中各个字段的含义?
ACK 确认SYN 同步seq 序列号 (sequential number 的缩写)ack 确认号 (acknowledge number 的缩写),表示期待对方下一次发送的序列号
2024-04-26 10:22:45
147
2
原创 MySQL统计一个表的行数,使用count(1), count(字段), 还是count(*)?
对于还未提交的,或者在当前事务开始之后的事务提交的数据,当前事务都是观察不到的,需要一行一行的做判断,当前行是否对当前事务可见。对于上面两种表的执行序列,由于事务B统计数据库中最新100条操作和表的总行数,由于事务A还没有提交,所以看不到最新的插入记录,也看不到表C字段计数 加1操作,所以,保证了事务B读到的数据逻辑一致性。在开发系统的时候,我们经常要计算一个表的行数。可以看到,即使是在同一时刻(t5)执行的查询,计算表的总行数,由于MVCC机制,每个事务看到的表的范围不一样,得到的结果也不一样。
2024-04-24 16:57:03
1090
1
编译原理实验报告+代码
2021-07-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人