- 博客(108)
- 收藏
- 关注
原创 JUC常用的4种工具、CountDownLatch、CyclicBarrier、Semaphore、Exchanger、常用方法
文章目录JUC常用工具(组件)类 JDK 1.51、CountDownLatch构造方法常用方法2、CyclicBarrier构造方法常用方法3、Semaphore构造方法常用方法4、Exchanger- CountDownLatch 与 CyclicBarrier 的区别JUC常用工具(组件)类 JDK 1.5都实现了AQS类...
2020-06-14 16:53:00
41
原创 JUC:Lock接口、ReentrantLock类、Lock与Synchronized的区别、解决虚假唤醒、Condition接口、解决集合类线程不安全、Callable、FutrueTask
文章目录Lock 接口 (重点)1、ReentrantLock 类2、Lock与Synchronized的区别 面试3、防止线程虚假唤醒解决虚假唤醒分析 面试4、Condition 接口 JDK 1.55、Condition实现精准通知唤醒6、关于锁的问题 面试解决集合类线程不安全解决集合同步解决并发几个方法的区别Callable 进阶 FutureTaskLock 接口 (重点)常用传教Lock的方法:Lock lock = new ReentrantLock()1、ReentrantLock
2020-06-14 16:49:53
384
原创 Java之JVM初探:类加载机制、Natic、PC寄存器、方法区、栈、堆、OOM、GC垃圾回收机制、GC常用算法、强引用、软引用、弱引用、虚引用
文章目录JVM 初探一、类加载器1、JVM类加载机制3种全盘负责双亲委派(重点 面试高频)缓存机制二、沙箱安全机制(了解)三、Native、PC寄存器、方法区1、Native(重点)2、PC寄存器(线程私有)3、方法区(属于元空间)四、栈(线程私有)五、三种JVM六、堆1、解决OOM的方式2、通过修改堆内存,查看GC运作七、GC1、GC垃圾回收机制2、GC常用算法引用计数算法复制算法(适合新生代)标记清除算法(适合老年代)标记整理算法(适合老年代)分代算法总结八、引用1、强引用2、软引用3、弱引用4、虚引用
2020-06-14 16:40:39
288
原创 Java最短路径:Floyd(弗洛伊德)算法、最短路径问题、思路分析、代码实现
Floyd(弗洛伊德)算法dijkstra算法与floyd算法的区别:迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径;弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看做被访问顶点,求出从每一个顶点到其他顶点的最短路径。案例:最短路径问题这里有6个村庄,分别是A、B、C、D、E、F,从G点出发需要将邮件分别送到这6个村庄,各个村庄有不同的路线,路线上都标有公里数,计算各个村庄到各个村庄的最短距离?. 思路分析如果已A为中间顶点,即可能的路线为:.
2020-06-14 16:30:31
1170
原创 Java最短路径:Dijkstra(迪杰斯特拉)算法、最短路径问题、思路分析、代码实现
Dijkstra(迪杰斯特拉)算法迪杰斯特拉算法是经典的最短路径算法,用于计算一个节点到其他节点的最短路径。它主要的特点是以起始点为中心向外层层扩展(广度优先搜索算法),直到扩展到终点为止。案例:最短路径问题这里有6个村庄,分别是A、B、C、D、E、F,从G点出发需要将邮件分别送到这6个村庄,各个村庄有不同的路线,路线上都标有公里数,计算G村庄到各个村庄的最短距离?如果从其他点出发,各个点的最短距离又是多少?. 思路分析整体思路:选择G为起始点,那么G就设为已访问,用一个记录路径的数组.
2020-06-14 16:26:52
2150
1
原创 Java最小生成树:Prim(普里姆)算法、Kruskal(克鲁斯卡尔)算法、案例、思路分析、代码实现
文章目录Prim(普里姆)算法案例:修路问题(最小生成树). 思路分析. 代码分析Kruskal(克鲁斯卡尔)算法案例:修公路站牌问题(最小生成树). 思路分析. 代码实现. 终点解释Prim(普里姆)算法案例:修路问题(最小生成树)有一乡有7个村庄(A,B,C,D,E,F,G)现在需要修路把7个村庄连通,各个村庄的距离用边线表示(权),比如A-B距离5公里。问:如何修路保证各个村庄都能连通,且总的修建公路总里程最短?修路问题的本质就是最小生成树问题,最小生成树(Minimum Cost Sp
2020-06-14 16:23:27
839
3
原创 Java贪心算法之广播台集合覆盖问题、思路分析、代码实现
文章目录贪心算法案例:广播台集合覆盖问题. 思路分析. 代码实现贪心算法贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。案例:广播台集合覆盖问题如何选择最少的广播台,让所有地区都可以收到信号?. 思路分析用一个arealist集合
2020-06-14 16:17:22
724
1
原创 Java算法之KMP算法、字符串匹配、思路分析、代码实现
KMP算法KMP算法解决模式串在文本串中是否出现过。如果出现过,返回最早出现的索引位置。KMP算法命名,是由3个人的姓氏命名,由D.E.Knuth,J.H.Morris和V.R.Pratt在1997年提出的。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)。详尽KMP算法. 思路分析这是因为需要回溯到j位置的上一个字符j-1索引对.
2020-06-14 16:14:54
212
原创 Java动态规划算法之01背包问题、思路分析、代码实现
文章目录动态规划算法案例:01背包问题. 思路分析. 代码实现动态规划算法动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够
2020-06-14 16:12:20
2679
原创 java分治算法之汉诺塔、思路分析、代码实现
分治算法之汉诺塔分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。1、原问题可以分解为多个子问题这些子问题与原问题相比,只是问题的规模有所降低,其结构和求解方法与原问题相同或相似。2、原问题在分解过程中,递归地求解子问题由于递归都必须有一个终止条件,因此,当分解后的子问题规模足够小时,应能够直接求解。3、在求解并得到各个子问题的解后应能够采用某种方式、方
2020-06-14 16:10:00
258
原创 Java查找算法:线性查找算法、二分查找算法(递归 非递归)、插值查找算法、斐波那契查找算法、思路分析、代码实现
文章目录查找算法1、线性查找算法2、二分(折半)查找算法 (递归)3、二分查找算法 (非递归)4、插值查找算法5、斐波那契(黄金分割)查找算法查找算法1、线性查找算法对无序序列或有序序列的元素查找,线性查找算法就是对数组的遍历,找到该值的索引返回。public class SeqSearch { public static void main(String[] args) { int arr[] = {3,9,-1,-2,20,6}; int index
2020-06-14 16:07:50
191
原创 Java排序算法03:归并排序法、基数排序法、推排序法、思路分析、代码实现
文章目录5、归并排序法6、基数排序法7、堆排序法 (不稳定)5、归并排序法归并排序是利用归并的思想实现的排序方法。如上图。思路比较简单,就是对数组进行不断的分割,分割到只剩一个元素,然后,再两两合并起来。归并排序的时间复杂度是比较低的。归并与快速排序法的平均时间复杂度一致,但是比快速排序法稳定。示意图:这里展示将4578和1236合并在一起进行排序的过程:public class MergeSorting { public static void main(String[] a
2020-06-14 15:57:47
257
原创 Java排序算法02:希尔排序法、快速排序法、思路分析、代码实现
文章目录4、希尔排序法 (不稳定)5、快速排序法 (不稳定)4、希尔排序法 (不稳定)希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。public class ShellSorting
2020-06-14 15:52:35
167
原创 Java排序算法01:冒泡排序、选择排序、插入排序、思路分析、代码实现
文章目录排序算法. 排序算法时间复杂度1、冒泡排序法2、选择排序法 (不稳定)3、插入排序法排序算法排序是笔试最容易出现的题。排序依照指定的规则进行排列的过程。排序分为:内部排序:在内存中进行排序外部排序:由于数据过大,无法将所有数据放到内存中进行排序,需要借助外部存储进行排序. 排序算法时间复杂度1、冒泡排序法交换排序法其中的一种时间复杂度O(n2),需要排序的数量越大,排序时间越久。public class BubbleSorting { public st
2020-06-14 15:48:00
123
原创 Java数据结构与算法:图、图的概念、深度优先搜索DFS、广度优先搜索BFS、思路分析、代码实现
文章目录图一、图概念1、图的名词解释2、图的表示方法3、代码实现二、深度优先搜索 DFS (算法). 思路分析.代码实现三、广度优先搜索 BFS (算法). 思路分析. 代码实现图图是一种数据结构,其中节点可以具有零个或多个相邻元素。两个节点之间的连接称为边。节点也可称为顶点。表示多对多的关系时,就会用到图。一、图概念1、图的名词解释2、图的表示方法3、代码实现创建以下无向图:public class GraphDemo { public static void
2020-06-14 15:37:18
216
原创 Java数据结构与算法:多路查找树简单介绍、2-3树、B树、B+树、B星树简单介绍理解
多路查找树 简单介绍二叉树操作效率较高,但也存在一些问题。在构建二叉树时,需要多次进行i/o操作(因为数据很可能是通过数据库或本地文件中获取的),节点很多,造成二叉树的层数也多,会降低操作速度。因此就提出了多路树。允许每个节点可以有更多的数据项和更多的子节点,就是多叉树。比如2-3树,2-3-4树就是多叉树,多叉树通过重新组织节点,减少树的高度,能对二叉树进行优化。1、2-3树2-3树:2-3树是最简单的B树。需要保证顺序。性质:2-3树所有的叶子节点都在同一层 (只要是B树都满足这
2020-06-14 15:32:13
281
原创 Java数据结构与算法:平衡二叉树AVL、左旋转、右旋转、双向旋转、代码实现
文章目录平衡二叉树 AVL. 向左旋转. 向右旋转. 双向旋转. 代码实现平衡二叉树 AVL平衡二叉树是对二叉排序树的增强。AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis,他们在1962年的论文《An algorithm for the organization of informati
2020-06-14 15:29:51
340
原创 Java数据结构与算法:二叉排序树BST、二叉排序树添加删除、代码实现
文章目录二叉排序树 BST1、二叉排序树 添加1)思路分析2)代码实现2、二叉排序树 删除1)思路分析2)代码实现二叉排序树 BST二叉排序树:BTS(Binary Sort Tree),对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。如果有相同的值,可以将该节点放在左子节点或右子节点。二叉排序树的中序遍历,结果就是从小到大的排列。二叉排序树的特点:左子树所有的值一定比根节点小,右子树所有的值一定比根节点大1、二叉排序树 添加1)思
2020-06-14 15:25:49
1045
原创 JAVA数据结构与算法:哈夫曼树的创建、哈夫曼编码、思路分析、代码实现
文章目录哈夫曼树. 创建哈夫曼树哈夫曼编码. 思路分析. 代码实现哈夫曼树哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。带权路径总和最小的就是哈夫曼树。即 WPL=叶子节点权*路径+…+叶子节点权*路径中间的树就是哈夫曼树。. 创建哈夫曼树思路分析:将数列从小到大排序,此时每个数据就是一个节点取出前两个节点,作为子节点,计算出父节点的权值(就是两个
2020-06-10 20:20:44
3054
原创 JAVA数据结构与算法:二叉树、满二叉树、完全二叉树、前中后序遍历、顺序存储二叉树、线索化二叉树、代码实现
文章目录二叉树1、概念1)二叉树2)满二叉树、完全二叉树3)前序遍历、中序遍历、后序遍历2、前中后序遍历代码实现3、顺序存储二叉树代码实现3、线索化二叉树为什么要引入树?数组存储方式:由于数组访问元素速度快,开可以使用二分查找提高速度,但是在按一定顺序插入新元素时,当数组满了再插入新元素时,效率低速度慢。链式存储方式:链式存储插入很方便,删除效率也高。但是在检索时,效率也比较低,每次都需要从头遍历到尾。树结构存储方式:能提高数据存储,读取效率。既可以保证检索速度,也可以保证数据的插入、删除、修改的
2020-06-10 20:15:35
245
原创 JAVA数据结构与算法:哈希表、思路分析、代码实现
哈希表散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。1、关于哈希表的题有一个公司,当有新的员工来报道时,要求将该员工信息加入(id,姓名,年龄),当输入该员工的id时,要求找到该员工的所有信息。要求:不使用数据库,速度越快越好。. 思路分析有3个类:EmpHashTable类:根据id散列每个存入的值;创建
2020-06-10 20:05:41
143
原创 Java 数据结构与算法:递归实现八皇后问题、思路分析、代码实现
八皇后 回溯算法在8*8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,有多少种摆法?八皇后游戏连接. 思路分析第一个皇后先放在第一行,第一列第二个皇后放第二行,第一列,然后判断同列是否有皇后,有则放到第二行的第二列,判断是否在同一列,不是再判断是否在同一斜线,如果在同一斜线,就继续放在第二行的第三列,依次类推每放依次就判断一次,都不行,就回退到上一行,继续放下一列再判断原则上八皇后可以是8*8的二维数组表示,但是也可以以一维数组.
2020-06-02 12:22:20
211
原创 Java 递归:简易迷宫理解递归、思路分析、代码实现
简易迷宫 递归回溯. 思路分析这是一个迷宫地图,红色代表的是阻碍物墙,白色是可走区域。可将迷宫地图,看成8*8的二维数组。由1代表墙,2代表已行走的通路,3表示已行走的不可通的路。起始点为arr[1][1],终止点为arr[6][6]走的策略:右、下、左、上;先往右走,走不通就返回false,再往下走,依次类推,如果走得通就返回true。. 代码实现public class Maze { public static void main(String[] args) {
2020-06-02 12:19:37
728
1
原创 Java数据结构与算法:后缀表达式(逆波兰表达式)、中缀表达式转后缀表达式、思路分析、代码实现
文章目录一、后缀表达式 (逆波兰表达式). 思路分析. 代码实现 逆波兰计算器二、表达式转换. 中缀转后缀表达式. 思路分析. 代码实现一、后缀表达式 (逆波兰表达式)后缀表达式又称逆波兰表达式。运算符位于操作数之前。比如:(3+2)*6-5 对应后缀表达式就是:3 2 + 6 * 5 -在实际开发中,常常是将中缀表达式转为后缀表达式,因为后缀表达式相对于其他表达式来说对计算机较为友好。. 思路分析计算机从左至右扫描表达式,遇到数字直接入栈,遇到运算符,弹出栈顶和次顶的两个数进行运算,最后将
2020-05-31 18:19:31
533
原创 Java数据结构与算法:栈数据结构与前缀表达式、中缀表达式(思路分析、代码实现)
文章目录栈实现综合计算器运算1、前缀表达式 (波兰表达式). 思路分析2、中缀表达式. 思路分析. 代码实现栈实现综合计算器运算1、前缀表达式 (波兰表达式)前缀表达式又称波兰表达式。运算符位于操作数之前。比如:(3+2)*6-5 对应前缀表达式就是:- * + 3 2 6 5. 思路分析计算机从右至左扫描前缀表达式,依次将数字入栈。当遇到运算符,弹出栈顶和次顶两个数进行运算,运算结果再次入栈,遇到下一个运算符,又弹出栈顶和次顶两个数进行运算,运算结果再次入栈,依次类推…最终得到运算结果。
2020-05-31 18:16:02
344
原创 Java数据结构与算法:数组模拟栈的实现,思路分析,代码实现
文章目录栈1、数组模拟栈的实现1)思路分析2)代码实现栈栈是一个先进后出(FILO)的有序列表。入栈:push出栈:pop栈的应用场景:子程序的调用处理递归调用表达式的转换[中缀表达式转后缀表达式]与求值二叉树的遍历图形的深度优先(depth—first)搜索法1、数组模拟栈的实现1)思路分析定义一个top变量,用于记录最顶层元素索引当数组中没有任何元素时,top的值为-1当添加一个元素时,top++; arr[top]=value,进行添加值当删除顶部元素时,val
2020-05-31 18:12:42
214
原创 Java数据结构与算法:单向环形链表、约瑟夫问题、思路分析、代码实现
文章目录单向环形链表1、经典 约瑟夫问题. 思路分析. 代码实现单向环形链表1、经典 约瑟夫问题Josephus约瑟夫环、约瑟夫问题又称“丢手绢问题”。有n个人,编号为1~n,从第k个人开始报数,从1开始报,报到m的人会死掉,然后从第m+1个人开始,重复以上过程。在死了n-1个人后,问最后一个人的编号是?. 思路分析添加新节点:示意图 — 添加7号新节点首先要明确一个头节点,给一个辅助变量head一直指向头节点1。再给一个辅助变量temp,用于遍历链表,当temp.next==h
2020-05-30 20:26:53
262
原创 Java数据结构与算法:双向链表、增删改查、思路分析、代码实现
文章目录双向链表1、双链表的 增 删 改 查 思路分析2、代码实现双向链表双链表示意图:链表是以节点的方式存储,链式存储每个节点包含pre域(用于存储上一个节点对象)、data域(用于存储该节点中的数据) 和 next域(用于存储下一个节点对象)各个节点不一定连续存储链表分带头节点和不带头节点两种,根据实际需求来确定1、双链表的 增 删 改 查 思路分析头节点不存任何数据,只用作链表的头,方便对链表操作等。增加插入新节点如果直接从双向链表的尾节点添加新的节点new
2020-05-30 20:23:15
353
原创 Java数据结构与算法:单向链表、增删改查、求单链表有效节点个数、查找单链表倒数第k个节点、单链表反转、从尾到头打印单链表、合并两个有序链表后依然有序
文章目录单向链表1、单链表的 增 删 改 查 思路分析2、代码实现3、练习题# 1求单链表中有效节点个数# 2查找单链表中倒数第k个节点# 3单链表的反转# 4从尾到头打印链表# 5合并两个有序链表,合并之后链表依然有序,并返回合并后的链表4、对辅助节点的理解5、单链表的缺点单向链表单链表示意图:链表是以节点的方式存储,链式存储每个节点包含data域(用于存储该节点中的数据) 和 next域(用于存储下一个节点对象)各个节点不一定连续存储链表分带头节点和不带头节点两种,根据实际需求来确定
2020-05-30 20:18:49
568
原创 Java数据结构与算法:数组模拟队列、环形队列、思路分析
文章目录队列1、数组模拟队列思路分析代码实现存在的问题2、数组模拟环形队列思路分析代码实现队列队列可以用数组和链表来实现。遵循FIFO (先进先出)1、数组模拟队列该数组模拟队列不是环形的,该列子用于理解队列的工作过程。思路分析数组模拟队列示意图rear表示尾部(指向尾元素),front表示头部(头元素的前一个位置)。从图中可看出,当数组队列中没有任何元素时,rear和front都是指向-1的位置;当有元素加入到队列中,rear就依次增加指向,front没有动;当有元素移除队列时
2020-05-29 21:16:09
216
原创 Java数据结构与算法:稀疏数组、五子棋案例、思路分析、代码实现
文章目录稀疏数组1、思路分析2、代码实现稀疏数组在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵。1、思路分析实际运用:五子棋蓝色棋子以2表示;黑色棋子以1表示。可将其转换成二维数组:由于0占位太多,也没有具体的意义,可对该数组进行压缩。压缩后的数组,第一行存储的是原数组有几行几列有几个有效值。从索引为1开始,记录每个元素在原数组的索引位置,以及值。2、代码实现代码演示:import java.io.*;import
2020-05-29 21:11:40
444
原创 Java 反射:反射概念、Class类生成内存分析、类加载过程、通过反射机制加载对象、反射获取泛型和注解
文章目录反射1、Reflection 反射概念2、Class类 JDK 1.1常用方法获取Class类实例的方法有Class对象的类型3、Class类生成的内存分析类加载器加载过程4、类的初始化时刻5、类加载器6、获取运行时类的对象,使用方法7、反射机制创建对象,设置属性8、普通方式与反射机制 性能 对比9、反射获取泛型10、反射获取注解信息反射Java不是动态语言,但Java可称之为“准动态语言”。即Java有一定的动态性,可利用反射机制获得类似动态语言的特性。Java的动态性让编程的时候更加灵活,
2020-05-27 22:53:04
587
3
原创 Java 注解:内置注解、4大元注解、自定义注解
文章目录注解 JDK 1.51、内置的一些注解2、元注解@Target@Retention@Document@Inherited3、自定义注解注解 JDK 1.5Annotation是从JDK1.5(Java 5 ,JDK 5)开始引入的新技术可通过反射机制去读取注解作用:不是程序本身,可对程序作出解释可被其他程序(比如:编译器等)读取格式:注解是以@注释名在代码中存在,还可以添加一些参数值,如:@SuppressWarnings(value="unchecked")1、
2020-05-27 22:46:37
372
原创 Java 方法引用:通过对象名、类名、super、this、类的构造器、数组的构造器引用
文章目录方法引用1、语法引用符2、通过对象名引用成员方法3、通过类名称引用静态方法4、通过super引用成员方法5、通过this引用成员方法6、类的构造器引用7、数组的构造器引用方法引用1、语法引用符双冒号::为引用运算符,而它所在的表达式被称为方法引用。如果Lambda要表达的函数方案已经存在于某个方法的实现中,那么则可通过双冒号来引用该方法作为Lambda的替代者。语义分析如:System.out对象中有一个重载的println方法,其中System.out是已经存在的对象,其中print
2020-05-27 22:35:02
400
原创 Java Stream流:forEach、filter、map、count、limit、skip、concat、综合案例
文章目录Stream流 JDK 1.8引言 :通过案例展示Stream流的作用1、流式思想2、Stream特点3、获取Stream流对象4、常用方法逐一处理:forEach过滤:filter映射:map统计个数:count取用前几个:limit跳过前几个:skip组合:concat练习:集合元素的处理Stream流 JDK 1.8说到Stream容易想到 IO Stream,而流不一定是IO流。在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类
2020-05-27 22:31:47
1327
原创 Java 函数式接口:函数式编程、4大函数式接口、Supplier、Consumer、Predicate、Function
文章目录一、函数式接口1、概念定义2、@FunctionalInterface 注解3、自定义函数式接口二、函数式编程1、Lambda的延迟执行性能浪费的日志案例通过Lambda优化日志案例2、使用Lambda作为参数和返回值三、4大函数式接口 JDK 1.81、Supplier\ 接口练习:求数组元素中最大的数2、Consumer\ 接口练习:格式化打印信息3、Predicate\ 接口练习:集合信息的筛选4、Function一、函数式接口1、概念定义函数式接口在Java中是指:有且仅有一个抽象方
2020-05-27 22:26:23
667
原创 Java 网络编程:网络编程入门UDP/TCP、Socket、ServerSocket、文件上传案例、IO流read方法阻塞问题
文章目录网络编程一、网络编程入门1、应用软件结构2、网络通信协议3、协议分类UDPTCP三次握手四次挥手4、网络编程三要素协议IP地址端口号二、TCP通信程序1、客户端与服务端的通信原理2、Socket 类常用构造方法常用方法3、ServerSocket 类常用构造方法常用方法三、综合案例1、文件上传案例IO流read()方法遇到阻塞问题 重点2、文件上传案例 服务端优化3、模拟B\S服务器网络编程一、网络编程入门软件分为:系统软件和应用软件1、应用软件结构C/S结构:全称Cli
2020-05-27 21:29:35
574
原创 Java 线程03:对ThreadLocal类的理解与运用
文章目录ThreadLocal\ 类 JDK 1.2常用方法1、在Spring中的应用场景2、ThreadLocal运用3、源码分析ThreadLocal<T> 类 JDK 1.2java.lang.ThreadLocal<T> ThreadLocal类是为共享变量在每一个线程中创建一个副本,每个线程可以访问自己内部的副本变量。创建一个ThreadLocal类一定是私有的、静态的。常用方法public T get()获取副本中的valuepublic void
2020-05-27 21:16:24
149
原创 Java 线程02:线程生命周期、Object中唤醒等待机制、生产者与消费者问题、线程的正确停止、线程优先级、守护线程
文章目录一、线程状态1、线程状态(生命周期)概述2、Timed Waiting(计时等待)3、BLOCKED (阻塞状态)4、Waiting (无限等待状态)案例 顾客与老板包子5、Object类中的方法wait()与sleep()区别wait()和wait(long timeout)区别sleep()和sleep(long timeout)区别notify()和notifyAll()区别二、线程等待唤醒机制1、线程之间通信2、等待唤醒机制练习:生产者与消费者问题三、线程正确停止四、线程优先级五、守护(da
2020-05-27 19:38:14
641
原创 Java 线程01:并发并行、进程线程、3种线程创建、线程安全与锁对象
文章目录一、线程概念1、并发与并行2、线程与进程3、线程调度二、线程1、主线程2、多线程原理多线程内存原理run()与start() 区别3、Thread类构造方法常用方法练习:通过继承线程类,开启多线程下载网络图片4、Runable接口5、Thread类 与 Runnable接口 的区别6、匿名内部类实现线程创建7、Callable\ 接口三、线程安全1、线程安全2、线程同步1)同步代码块同步代码块的原理2)同步方法3)Lock 接口 JDK 1.5一、线程概念1、并发与并行并发:指两个或多个事
2020-05-27 19:30:01
733
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅