摘要:
System.gc() 的理解 在默认情况下,通过System.gc()者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(不 阅读全文
![10.垃圾回收相关概念](https://img2022.cnblogs.com/blog/2229560/202204/2229560-20220406091252774-1437782097.png)
摘要:
垃圾回收概述 Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C++语言没有垃圾收集技术,需要程序员手动的收集。 垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题: 哪些内存需要回收? 阅读全文
![9.垃圾回收概述与相关算法](https://img2022.cnblogs.com/blog/2229560/202204/2229560-20220406091207064-347488144.png)
摘要:
CompletableFuture 在 Java 里面被用于异步编程,异步通常意味着非阻塞,可以使得我们的任务单独运行在与主线程分离的其他线程中,并且通过回调可以在主线程中得到异步任务的执行状态,是否完成,和是否异常等信息 CompletableFuture 实现了 Future, Completi 阅读全文
![13.异步回调](https://img2022.cnblogs.com/blog/2229560/202204/2229560-20220406090414033-1959827418.png)
摘要:
将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果该算法相当于递归,且是二分查找思路 class Fibonacci extends RecursiveTask<Integer> { final int n; Fibonacci(int n) { this.n = n; 阅读全文
![12.Fork与Join分支](https://img2022.cnblogs.com/blog/2229560/202204/2229560-20220406090300124-166340010.png)
摘要:
连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用 线程池(英语:thread pool)一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价 阅读全文
![11.线程池](https://img2022.cnblogs.com/blog/2229560/202204/2229560-20220406090220902-647713653.png)
摘要:
阻塞队列是共享队列(多线程操作),一端输入,一端输出不能无限放队列,满了之后就会进入阻塞,取出也同理 当队列是空的,从队列中获取元素的操作将会被阻塞 当队列是满的,从队列中添加元素的操作将会被阻塞 试图从空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列插入新的元素 试图向已满的队列中添加新 阅读全文
![10.阻塞队列](https://img2022.cnblogs.com/blog/2229560/202204/2229560-20220406090132864-543626232.png)
摘要:
回顾悲观锁和乐观锁的概念悲观锁: 见字知意,他是干什么都很悲观,所以在操作的时候,每次都上锁,使用时解锁乐观锁:他很乐观,多线程,并不上锁,但是会发生 线程安全问题 表锁:整个表操作,不会发生死锁行锁:每个表中的单独一行进行加锁,会发生死锁读锁:共享锁(可以有多个人读),会发生死锁写锁:独占锁(只能 阅读全文
![9.读写锁](https://img2022.cnblogs.com/blog/2229560/202204/2229560-20220406090022453-1153535060.png)
摘要:
该辅助类主要讲述三个减少计数CountDownLatch 循环栅栏 CyclicBarrier 信号灯Semaphore 1 CountDownLatch 该类的构造方法为CountDownLatch(int count)构造一个用给定计数初始化的CountDownLatch在这里插入代码片 两个常 阅读全文
![8.JUC强大辅助类(减少计数CountDownLatch,循环栅栏CyclicBarrier,信号灯Semaphore)便于解决并发功能](https://img2022.cnblogs.com/blog/2229560/202204/2229560-20220406085903023-1213461909.png)
摘要:
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /* * 一、创建执行线程的方式三:实现 Cal 阅读全文
![7.Callable接口的实现](https://img2022.cnblogs.com/blog/2229560/202204/2229560-20220406085743755-1734428356.png)
摘要:
某一个时刻内,只能有唯一 一个线程去访问这些synchronized 方法所有的静态同步方法用的也是同一把锁——类对象本身,这两把锁是两个不同的对象,所以静态同步方法与非静态同步方法之间是不会有竞态条件的但是一旦一个静态同步方法获取锁后,其他的静态同步方法都必须等待该方法释放锁后才能获取锁,而不管是 阅读全文
![6.多线程锁 (公平锁和非公平锁,死锁,可重锁)](https://img2022.cnblogs.com/blog/2229560/202204/2229560-20220406084737926-990997313.png)
摘要:
搭建工程 ES提供多种不同的客户端: 1、TransportClient ES提供的传统客户端,官方计划8.0版本删除此客户端。 2、RestClient RestClient是官方推荐使用的,它包括两种:Java Low Level REST Client和 Java High Level RES 阅读全文
![ElasticSearch-进阶篇](https://img2022.cnblogs.com/blog/2229560/202204/2229560-20220406083347622-2068870051.png)
摘要:
一、下载jdk8 wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" 阅读全文
![linux](https://img2022.cnblogs.com/blog/2229560/202204/2229560-20220406094706137-1307876390.png)
摘要:
/*给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 二叉树的遍历 前序: 根 -> 左 -> 右 中序: 左 -> 根 -> 右 后序: 左 -> 右 -> 根 /** * Definition for a binary tree node. * public class TreeNo 阅读全文
摘要:
/*给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链 阅读全文
摘要:
/*给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 思路 标签:位运算 本题根据题意,线性时间复杂度 O(n)O(n),很容易想到使用 Hash 映射来进行计算,遍历一次后结束得到结果,但是在空间复杂度上会达到 O(n)O(n),需要使用较多的 阅读全文
摘要:
/*给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 思路 标签:位运算 本题根据题意,线性时间复杂度 O(n)O(n),很容易想到使用 Hash 映射来进行计算,遍历一次后结束得到结果,但是在空间复杂度上会达到 O(n)O(n),需要使用较多的 阅读全文
摘要:
/*给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。 */ class Solution { public boolean isPalindrome(String s) { int n = s.length(); in 阅读全文
摘要:
/*给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 阅读全文
摘要:
/*给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 class Solution { public List<Integer> getRow(int rowIndex) { int[] dp = new int[ 阅读全文
摘要:
/*给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 思路: 把杨辉三角转化为一维数组就是: [1] [1,1] [1,2,1] [1,3,3,1] ....... 返回结果为全集,把状态方程设置成二维数组即可。 状态 阅读全文