408
计算机组成原理
操作系统
数据结构
计算机网络
阿昌喜欢吃黄桃
这个作者很懒,什么都没留下…
展开
-
Day794.如何用协程来优化多线程业务 -Java 性能调优实战
协程有个队列,最终还是需要主线程来调度执行。那是不是有点类似线程池。主线程是Worker线程,每一个协程就是一个Task。只不过主线程执行到的某个Task阻塞时会去执行下一个Task。协程和线程密切相关,协程可以认为是运行在线程上的代码块,协程提供的挂起操作会使协程暂停执行,而不会导致线程阻塞。协程又是一种轻量级资源,即使创建了上千个协程,对于系统来说也不是很大的负担,但如果在程序中创建上千个线程,那系统可真就压力山大了。可以说,协程的设计方式极大地提高了线程的使用率。原创 2022-11-08 22:32:50 · 421 阅读 · 0 评论 -
Day786.NIO的优化实现原理 -Java 性能调优实战
阻塞IO:调用read()线程阻塞了非阻塞IO:调用read()马上拿到一个数据未就绪,或者就绪。I/O多路复用:selector线程阻塞,channel非阻塞,用阻塞一个selector线程换了多个channel了非阻塞。select()函数基于数组,fd个数限制1024,poll()函数也是基于数组但是fd数目无限制。都会负责所有的fd(未就绪的开销浪了),epll():基于红黑数实现,fd无大小限制,平衡二叉数插入删除效率高。信号驱动模式IO:对IO多路复用进一步优化,selector也非阻塞了。原创 2022-10-31 21:21:05 · 333 阅读 · 0 评论 -
Day689.内核如何阻塞与唤醒进程 -深入拆解 Tomcat & Jetty
首先CPU在用户态执行应用程序的代码,访问进程虚拟地址空间的用户空间;read系统调用时CPU从用户态切换到内核态,执行内核代码,内核检测到Socket上的数据未就绪时,将进程的task_struct结构体从运行队列中移到等待队列,并触发一次CPU调度,这时进程会让出CPU;httpshttpshttps。......原创 2022-07-26 22:12:48 · 269 阅读 · 0 评论 -
Day669.HTTP协议 -深入拆解 Tomcat & Jetty
Hi,我是阿昌,今天学习的是关于。首先:HTTP 和 HTML 有什么区别?HTTP 协议是浏览服务器之间的数据传送协议。作为应用层协议,HTTP 是基于 ·TCP/IP 协议·来传递数据的(HTML 文件、图片、查询结果等),HTTP 协议不涉及数据包(Packet)传输,主要规定了客户端和服务器之间的通信格式。浏览器需要从远程 HTTP 服务器获取一个 HTML 文本,在这个过程中,浏览器实际上要做两件事情。第一步比较容易理解,浏览器从地址栏获取用户输入的网址和端口,去连接远端的服务器,这样就能通信了原创 2022-07-06 21:17:01 · 420 阅读 · 0 评论 -
Day627.HTTP调用常见问题 --Java业务开发常见错误
HTTP调用常见问题Hi,这里是阿昌!今天学习记录的是HTTP调用过程中需要考虑的问题:超时、重试、并发Spring Cloud 是 Java 微服务架构的代表性框架。如果使用 Spring Cloud 进行微服务开发,就会使用 Feign 进行声明式的服务调用。如果不使用 Spring Cloud,而直接使用 Spring Boot 进行微服务开发的话,可能会直接使用 Java 中最常用的 HTTP 客户端 Apache HttpClient 进行服务调用。接下来,使用 Feign 和 Apac原创 2022-05-24 22:09:10 · 1361 阅读 · 0 评论 -
Day600&601.马踏棋盘算法 -数据结构和算法Java
马踏棋盘算法图的深度优先DFS回溯八皇后问题、小老鼠找迷宫问题一、介绍二、思路分析三、代码实现package com.achang.algorithm;import java.awt.*;import java.util.ArrayList;/** * 马踏棋盘问题&骑士周游问题 */public class Horse { public static void main(String[] args) { }}/** * 棋盘 *原创 2022-04-27 22:24:05 · 1759 阅读 · 0 评论 -
Day599.弗洛伊德算法 -数据结构和算法Java
弗洛伊德算法求最短路径算法( 各个节点到其他节点的最短路径)时间复杂度为n^3通过三个for循环:对中间节点遍历对开始节点遍历对终点节点遍历一、介绍二、思想三、代码实现package com.achang.algorithm;import java.util.Arrays;/** * 弗洛伊德算法 */public class Floyd { public static void main(String[] args) { char[]原创 2022-04-26 23:13:08 · 1350 阅读 · 0 评论 -
Day597&598.迪杰斯特拉算法 -数据结构和算法Java
迪杰斯特拉算法求最短路径使用图的广度优先遍历一、问题引出二、介绍三、算法过程四、代码实现package com.achang.algorithm;import java.util.Arrays;/** * 迪杰斯特拉最短距离算法 */public class DijkstraAlgorithm { public static void main(String[] args) { char[] vertex = {'a', 'b', 'c', 'd原创 2022-04-24 22:58:40 · 1123 阅读 · 0 评论 -
Day596.克鲁斯卡尔算法 -数据结构和算法Java
克鲁斯卡尔算法一、问题引出二、介绍三、代码实现package com.achang.algorithm;import java.util.Arrays;//克鲁斯卡尔算法public class Kruskal { private int edgeNum;//边的个数 private char[] vertexs;//节点数组 private int[][] matrix;//临界矩阵 private static final int INF =原创 2022-04-23 20:30:16 · 1060 阅读 · 0 评论 -
Day595.普利姆算法 -数据结构和算法Java
普利姆算法一、问题引出二、最小生成树三、普利姆算法介绍四、图解分析五、代码实现package com.achang.algorithm;import java.util.Arrays;/** * 普利姆算法 */public class PrimAlgorithm { public static void main(String[] args) { //初始化最小生成树 char[] data = {'a','b','c','d'原创 2022-04-22 22:34:48 · 1465 阅读 · 1 评论 -
Day593&594.贪心算法 -数据结构和算法Java
贪心算法一、问题引出二、介绍三、思路分析四、代码实现明天继续!!!原创 2022-04-20 23:27:08 · 1291 阅读 · 0 评论 -
Day592.KMP算法 -数据结构和算法Java
KMP算法一、问题引出二、暴力匹配方法package com.achang.algorithm.kmp;/** * 暴力匹配算法 */public class ViolenceMatch { public static void main(String[] args) { String str1 = "阿昌爱Java"; String str2 = "阿昌"; int i = violenceMatch(str1, str2);原创 2022-04-19 22:31:15 · 1140 阅读 · 0 评论 -
Day591.动态规划算法 -数据结构和算法Java
动态规划算法一、介绍二、背包问题三、思路图解四、代码实现package com.achang.algorithm;/** * 动态规划算法---01背包问题 */public class KnapsackProblem { public static void main(String[] args) { int[] w = {1, 4, 3};//物品的重量 int[] value = {1500, 3000, 2000};//物品的对原创 2022-04-18 22:34:07 · 1081 阅读 · 0 评论 -
Day590.分治算法 -数据结构和算法Java
分治算法一、介绍思路分析二、代码实现package com.achang.algorithm;/** * 分治算法 */public class DivideAndConquer { public static void main(String[] args) { hanoiTower(3,'a','b','c'); } /** * 汉诺塔移动方法 * 使用分治算法 * @param num 盘的数量原创 2022-04-17 21:09:32 · 1027 阅读 · 0 评论 -
Day589.二分查找(非递归) -数据结构和算法Java
二分查找(非递归)1、介绍2、代码实现package com.achang.algorithm;/** * 二分查找算法---非递归 */public class BinarySearchNoRecursion { public static void main(String[] args) { int[] arr = {1,3,5,6,7,8,10}; System.out.println(binarySearchNoRecursion(arr,原创 2022-04-16 21:54:25 · 1116 阅读 · 0 评论 -
Day587&588&589.图 -数据结构和算法Java
图一、介绍二、基本概念三、图的表示方式四、代码案例需求代码实现package com.achang.graph;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 图结构 */public class Graph { //存储顶点集合 private List<String> vertexList; //矩阵,存储原创 2022-04-14 22:08:03 · 1292 阅读 · 1 评论 -
Day586.多路查找树 -数据结构和算法Java
多路查找树一、二叉树存在的问题二、多叉树介绍三、B树的介绍四、2-3树介绍插入规则五、B+树介绍六、B*树介绍原创 2022-04-13 22:45:31 · 1114 阅读 · 1 评论 -
Day584&585.平衡二叉树 -数据结构和算法Java
平衡二叉树一、出现的原因解决二叉排序树的问题二、介绍三、平衡思路1、左旋转左旋转思路分析因为左子树高度为1,右子树高度为3,所以要将左侧进行调整,所以进行左旋转代码实现package com.achang.avl;/** * 平衡二叉树 */public class AVLTreeDemo { public static void main(String[] args) { int[] arr = {4,3,6,5,7,8};原创 2022-04-11 23:17:25 · 582 阅读 · 0 评论 -
Day583.二叉排序树 -数据结构和算法Java
二叉排序树一、介绍二、思路分析删除节点思路分析三、代码实现package com.achang.binarysorttree;/** * 二叉排序树 */public class BinarySortTreeDemo { public static void main(String[] args) { int[] arr = {7, 3, 10, 12, 5, 1, 9, 2}; BinaryTree binaryTree = new原创 2022-04-10 21:15:43 · 1336 阅读 · 1 评论 -
Day579&580&581&582.霍夫曼编码 -数据结构和算法Java
霍夫曼编码一、介绍利用霍夫曼树,来构建或形成的一种编码【程序算法】二、原理剖析1、定长编码通过英文对照转换为Ascii码对应的二进制2、变长编码根据字符出现的次数,来规定对应的二进制值,出现的越多,二进制值越小,并最后根据数值对应转化存在匹配的多异性3、霍夫曼编码(无损压缩)统计各个字符出现的个数,根据出现的字符出现的次数来构建一颗霍夫曼数,次数作为权值;根据上面构建的霍夫曼树,给一个个字符构建编码,树中朝左边的为0,朝右边的为1,他是前缀编码注意点三、明天继原创 2022-04-06 22:10:58 · 1569 阅读 · 2 评论 -
Day578.霍夫曼树 -数据结构和算法Java
霍夫曼树一、介绍二、重要概念三、图解思路四、代码实现package com.achang.tree;import java.util.ArrayList;import java.util.Collections;import java.util.List;/** * 霍夫曼数 */public class HufumanTree { public static void main(String[] args) { int[] arr = {原创 2022-04-05 22:00:22 · 1182 阅读 · 1 评论 -
Day577.堆排序 -数据结构和算法Java
堆排序一、介绍二、基本思想三、图解分析四、代码实现package com.achang.tree;import java.util.Arrays;/** * 堆排序(升序排列:采用大顶堆方案) */public class HeapSort { public static void main(String[] args) { int[] arr = {4, 6, 8, 5, 9}; heapSort(arr);原创 2022-04-04 20:51:05 · 1397 阅读 · 2 评论 -
Day572&573&574&575&576.树结构 -数据结构和算法Java
树结构一、为什么会出现树结构数组存储图文分析链表存储图文分析举例二叉树图文分析常用术语二、二叉树1、介绍2、二叉树的遍历3、二叉树的遍历代码实现package com.achang.tree;/** * 二叉树 */public class BinaryTreeDemo { public static void main(String[] args) { BinaryTree tree = new BinaryTr原创 2022-03-30 22:16:10 · 1200 阅读 · 5 评论 -
Day571.哈希表 -数据结构和算法Java
哈希表1、介绍2、图示3、思路分析4、代码实现package com.achang.hashtable;/** * @Author Achang * @Date 2022/3/28 21:30 **/public class HashTableDemo { public static void main(String[] args) { HashTable hashTable = new HashTable(3); hashTable.a原创 2022-03-28 22:18:27 · 1968 阅读 · 1 评论 -
Day570.斐波那契查找算法 -数据结构和算法Java
斐波那契查找算法一、介绍二、工作原理三、代码实现package com.achang.search;import java.util.Arrays;/** * @Author Achang * @Date 2022/3/27 20:11 * 斐波那契查找算法 **/public class FibonaciiSearch { public static int maxSize = 20; public static void main(String[] ar原创 2022-03-27 20:42:31 · 1879 阅读 · 1 评论 -
Day569.插值查找 -数据结构和算法Java
插值查找1、介绍类似二分查找,但找对应mid值的时候,采用的是自适应的方案2、思路分析3、代码实现package com.achang.search;/** * @Author Achang * @Date 2022/3/26 22:47 * 插值查找算法 **/public class InsertValueSearch { public static void main(String[] args) { int[] arr = new int[100原创 2022-03-26 22:58:31 · 1665 阅读 · 1 评论 -
Day568.线性查找&二分查找 -数据结构和算法Java
线性查找1、介绍顾名思义,线性查找就是直接通过遍历,进行查找对应的数据2、代码实现package com.achang.search;/** * @Author Achang * @Date 2022/3/25 21:08 * 顺序查找 **/public class SeqSearch { public static void main(String[] args) { int[] arr = {1,9,11,-1,31,89}; int in原创 2022-03-25 21:53:57 · 1939 阅读 · 1 评论 -
Day567.基数排序 -数据结构和算法Java
基数排序一、介绍二、基本思想三、思路分析四、代码实现package com.achang.sort;import java.util.Arrays;/** * @Author Achang * @Date 2022/3/24 21:29 * 基数排序 **/public class RadixSort { public static void main(String[] args) { int arr[] = {53,3,542,748,14,原创 2022-03-24 22:19:09 · 1422 阅读 · 2 评论 -
Day566.归并排序 数据结构和算法Java
归并排序一、介绍二、基本思想三、代码实现package com.achang.sort;import java.util.Arrays;/** * @Author Achang * @Date 2022/3/23 21:31 * 归并排序 **/public class MergeSort { public static void main(String[] args) { int[] arr = {8, 4, 5, 7, 1, 3, 6, 2};原创 2022-03-23 22:08:16 · 561 阅读 · 1 评论 -
Day565.快速排序 -数据结构和算法Java
快速排序一、介绍二、示意图三、算法思路分析四、代码实现package com.achang.sort;import java.util.Arrays;/** * @Author Achang * @Date 2022/3/22 22:08 * 快速排序 **/public class QuickSort { public static void main(String[] args) { int arr[] = {-9,78,0,23,-567,70原创 2022-03-22 22:28:15 · 1644 阅读 · 0 评论 -
Day564.希尔排序 -数据结构和算法Java
希尔排序1、介绍插入排序Plus2、基本思想3、排序示意图4、交换法代码实现 //交换法 public static void shellSort1(int arr[]) { int temp = 0; //整合 for (int gap = arr.length/2 ; gap > 0 ; gap /= 2) { for (int i = gap; i < arr.length; i++) {原创 2022-03-21 22:12:02 · 1054 阅读 · 1 评论 -
Day563.插入排序 -数据结构和算法Java
插入排序一、插入排序介绍二、排序思想三、思路图四、代码实现public class InsertSort { public static void main(String[] args) { int[] arr = {3,2,1}; insertSort(arr); } public static void insertSort(int[] arr){ for (int i = 1; i < arr.lengt原创 2022-03-20 21:00:38 · 564 阅读 · 1 评论 -
Day562.冒泡排序&选择排序 -数据结构和算法Java
冒泡排序一、基本介绍二、流程图解三、代码实现/** * @Author Achang * @Date 2022/3/19 16:08 * 冒泡排序 **/public class BubbleSort { public static void main(String[] args) { int arr[] = {3,9,-1,10,-2}; //临时变量 int temp = 0; boolean flag原创 2022-03-19 17:02:12 · 1020 阅读 · 1 评论 -
Day561.排序算法 -数据结构和算法Java
排序算法一、排序算法介绍二、判断算法效率的方式三、算法的时间复杂度1、时间频度案例2、时间复杂度原创 2022-03-18 21:20:14 · 1086 阅读 · 0 评论 -
Day560.递归 -数据结构和算法Java
递归一、递归应用场景举例二、递归基本概述三、递归的调用机制四、使用时注意的规则五、递归问题1、迷宫问题package com.achang.recursion;/** * @Author Achang * @Date 2022/3/15 21:22 * 递归---迷宫问题 **/public class MiGong { public static void main(String[] args) { int[][] map = initM原创 2022-03-17 21:11:31 · 1363 阅读 · 1 评论 -
Day558&559.栈 -数据结构和算法Java
栈一、基本介绍二、通过数组实现栈结构1、思路分析图2、代码实现/** * @Author Achang * @Date 2022/3/12 16:51 * 通过数组实现栈结构 **/public class ArrayStackDemo { public static void main(String[] args) { ArrayStack arrayStack = new ArrayStack(3); arrayStack.push(1);原创 2022-03-14 21:40:46 · 2474 阅读 · 2 评论 -
Day557.单向环形链表 -数据结构和算法Java
单向环形链表一、约瑟夫问题二、单向环形链表图示三、构建和遍历的代码实现package com.achang.linkedlist;/** * @Author Achang * @Date 2022/3/12 15:17 * 约瑟夫问题 **/public class Josepfu { public static void main(String[] args) { CircleSingleLinkedList circleSingleLinkedLi原创 2022-03-13 13:28:09 · 1106 阅读 · 3 评论 -
Day556.双向链表 -数据结构和算法Java
双向链表1、单线链表的缺点二、分析说明三、代码实现package com.achang.linkedlist;/** * @Author Achang * @Date 2022/3/10 22:13 * 双向链表 **/public class DoubleLinkedListDemo { public static void main(String[] args) { System.out.println("双向链表的测试"); Her原创 2022-03-12 14:27:41 · 527 阅读 · 0 评论 -
Day553&554&555.单链表 -数据结构和算法Java
单链表一、链表介绍二、单链表介绍三、单链表应用实例1、插入数据,插入单链表尾部案例package com.achang.linkedlist;/** * @Author Achang * @Date 2022/3/8 21:26 * 单链表 **/public class SingleLinkedListDemo { public static void main(String[] args) { HeroNode node1 = new HeroNode原创 2022-03-08 22:01:58 · 1061 阅读 · 2 评论 -
Day552.队列 -数据结构和算法Java
队列一、队列定义队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出二、简单队列实现该方式会出现队列无法重复使用的问题当我们将数据存入队列时称为”addQueue”,addQueue 的处理需要有两个步骤:思路分析将尾指针往后移:rear+1 , 当front == rear 【空】若尾指针 rear 小于队列的最大下标 maxSize-1,则将数据存入 rear所指的数组元素中,否则无法存入数据。 rear == m原创 2022-03-07 21:59:31 · 816 阅读 · 0 评论