![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java八股
文章平均质量分 54
小幻_159
这个作者很懒,什么都没留下…
展开
-
【java-spring】spring AOP原理
Spring AOP通过代理模式和切面编程技术,实现了在不修改原有业务逻辑的情况下,为程序添加额外的功能。它提高了代码的可维护性和重用性,使得开发者能够更专注于业务逻辑的实现。原创 2024-03-19 17:04:34 · 459 阅读 · 2 评论 -
【mysql】MyISAM与InnoDB区别
总的来说,InnoDB和MyISAM各有其优势和适用场景。InnoDB更适用于需要高数据完整性、高并发和事务处理的应用场景,而MyISAM则更适用于读操作频繁、不需要事务处理以及需要全文搜索的应用场景。在选择存储引擎时,应根据具体的应用需求和系统环境进行权衡。MySQL中的MyISAM和InnoDB是两种不同的存储引擎,它们在设计理念、功能特点以及应用场景等方面有着显著的差异。原创 2024-03-19 16:01:05 · 288 阅读 · 0 评论 -
java8中 synchronized与ReentrantLock区别
都是用于控制多线程对共享对象的访问,确保线程安全性的重要工具。然而,它们之间存在一些关键差异,这些差异影响了它们的使用场景和性能表现。在用法、性能、灵活性等方面都存在差异。在选择使用哪一个时,应根据具体的应用场景和需求进行权衡。对于简单的同步需求,通常是一个很好的选择;而对于需要更复杂控制或更高性能的场景,原创 2024-03-19 15:05:24 · 266 阅读 · 0 评论 -
java8中,线程池拒绝策略有哪些?默认是哪个?
此外,你还可以实现自己的 RejectedExecutionHandler 来定义自己的拒绝策略,并将其设置到线程池中。这为你提供了高度的灵活性,可以根据应用的具体需求来定制拒绝策略。你可以通过调用 ThreadPoolExecutor 的 setRejectedExecutionHandler 方法来设置你想要的拒绝策略。原创 2024-03-19 12:32:58 · 456 阅读 · 0 评论 -
java8中 CPU密集与IO密集的场景如何设置线程池参数?
在 Java 8 中,对于 CPU 密集型和 IO 密集型的任务,线程池的参数设置会有所不同。原创 2024-03-19 12:21:07 · 581 阅读 · 0 评论 -
java8中 ThreadPoolExecutor有哪些参数
ThreadPoolExecutor 是 Java 中一个非常灵活和强大的线程池工具,允许你精确控制线程池的行为。在这个例子中,线程池的核心线程数是 5,最大线程数是 10,空闲线程的存活时间是 60 秒,使用 LinkedBlockingQueue 作为工作队列,使用默认的线程工厂,以及 AbortPolicy 作为拒绝策略。你可以根据需要调整这些参数。原创 2024-03-19 11:57:18 · 313 阅读 · 0 评论 -
java运行时数据区
内存管理是每种开发语言不可避免需要考虑的问题,而JAVA语言作为主流的开发语言,其内存管理机制也是JAVA开发人员不可避免需要学习的内容,与C++不同的是,JAVA是将内存管理的控制权交给了JVM(java虚拟机),由其自动管理内存分配和回收,而不再需要开发人员手动的进行内存的分配和释放,故了解JVM运行时的内存机制有助于在程序发生内存溢出或者泄露时的问题快速定位。3、本地方法栈:本地方法栈与虚拟机栈类似,区别在于虚拟机栈执行的是java方法,而本地方法栈执行的是本地(Native)方法。原创 2024-03-14 09:08:03 · 326 阅读 · 0 评论 -
JAVA异常分类
受检型异常(非运行时异常),这类异常属于明知道可能出现,但是没有办法杜绝的异常。错误,一般指的是虚拟机的错误,是由Java虚拟机生成并抛出,程序不能处理所以也不加处理,例如OutOfMemoryError内存溢出、调用栈溢出StackOverFlowError。运行时异常(非受检型异常),是由于编程bug所导致,希望越早发现越好,所以不进行处理,直接终端报错即可,编程人员针对报错信息修改程序bug来解决问题。ArithmeticException 算数异常,就是执行数学计算时产生的非正常情况,如除以0。原创 2024-03-13 17:03:47 · 497 阅读 · 0 评论 -
String, StringBuffer, StringBuilder区别
String 是不可变字符序列。StringBuffer 是可变的字符序列。StringBuilder 也是可变的字符序列。原创 2024-03-13 16:57:41 · 343 阅读 · 0 评论 -
ConcurrentHashMap实现原理
判断头节点是否为链表,需要通过链表的方式循环判断是否有与当前 key 相同的值,有则在允许覆盖的情况下进行覆盖,没有则新建一个 Node 值放在链表最后;当 table 不为空时,判断在下标 i 的位置是否存在值,不存在则通过 CAS 方式直接在对应位置进行更新,更新成功则直接退出;遍历该 HashEntry,如果不为空则判断传入的 key 和当前遍历的 key 是否相等,相等则覆盖旧的 value 值。如果当前的 Node 节点为树节点,则进行树节点的相关操作;最后解除获取当前 Segment 的锁。原创 2024-03-13 12:14:05 · 326 阅读 · 0 评论 -
HashMap、LinkedHashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap区别
当我们往HashMap中put元素的时候,先根据key的hashCode(使用key的hashCode()方法获取)重新计算hash值(具体的算法这里就不讲解了,hash的算法中包含了很多优化的点,是存储的数据能够数组的每一位尽量只有一个值,而不是一个链表,这样能够提高查询效率),根据hash值算出这个元素在数组中的位置(即下标), 如果数组该位置上已经存放有其他元素了,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。,但用户也可以在构造函数中设置并发度。转载 2024-03-13 12:10:40 · 27 阅读 · 0 评论 -
ArrayList扩容机制
原文链接:https://blog.csdn.net/weixin_43004044/article/details/129898335。原创 2024-03-13 11:38:50 · 347 阅读 · 0 评论 -
ArrayList是否线程安全?如何线程安全地操作ArrayList?
ensureCapacityInternal()这个方法的详细代码我们可以暂时不看,它的作用就是判断如果将当前的新元素加到列表后面,列表的elementData数组的大小是否满足,如果size + 1的这个需求长度大于了elementData这个数组的长度,那么就要对这个数组进行扩容。线程B也开始进行设置值操作,它尝试设置elementData[10] =e,而elementData没有进行过扩容,它的下标最大为9。4⃣️, 线程A发现需求大小为10,而elementData的大小就为10,可以容纳。原创 2024-03-05 11:49:41 · 454 阅读 · 1 评论 -
数组与List的区别
数组的长度是固定的,而集合的长度是不固定的底层用数组实现,可以动态扩容。两者的存储类型不一样,数组存储的数据类型都是一样的,比如都是int,string,但是集合存储的是对象,而且对象可以不一致。原创 2024-03-05 11:05:03 · 345 阅读 · 0 评论 -
List与Set的区别
List可以在取出元素时通过迭代器去取出,也可以逐个去遍历,也可以通过get的方法,通过下标去指定取出某个元素,这样可以比较灵活地随机访问元素。List是有序的集合,其内部的元素是按照一定的顺序排列的,可以存储重复的元素,并且可以根据索引访问元素。Set只能通过迭代器去取出元素,然后去遍历,但不能通过下标直接访问元素。List支持添加、删除和修改操作,这些操作可能会影响其他元素的位置。Set是无序的集合,不允许存储重复的元素,也不能根据索引访问元素。Set不支持修改操作,只能添加和删除元素。原创 2024-03-05 10:52:01 · 351 阅读 · 0 评论 -
ArrayLIst和linkedlist的区别
ArrayList随机访问比LinkedList快的原因:原创 2024-03-05 10:26:39 · 595 阅读 · 0 评论