![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 53
济海河神
这个作者很懒,什么都没留下…
展开
-
有向图的拓扑排序
有向图的拓扑排序的基本思想是:首先在有向图中选取一个没有前驱的顶点,将其输出,从有向图中删除该顶点,并且删除【以该顶点为尾】的所有有向图的边。重复以上的步骤,直到图中的【所有顶点均输】出或是图中的【顶点均没有前驱】为止。对于后者,说明有向图中存在环,不能进行拓扑排序。【无向图和有向图判断是否有环】1.对于无向图,顶点v的度是指和v相关联的边的数目。2.对于有向图,以顶点v为头的弧的数目称为v的入度,记作ID(v)。3.以顶点v为尾的弧的数目称为v的出度,记作OD(v)。判断 无向图.原创 2022-04-06 20:24:58 · 1422 阅读 · 0 评论 -
常见的代码优化技术
常见的代码优化技术有:复写传播,删除死代码, 强度削弱,归纳变量删除如果有同学有研究过这部分内容,并总结过,有更好的答案,请联系我删除本篇非原创解答1.复写传播:a=d+e;b=d+e;c=d+e;===>t=d+e;a=t;b=t;c=t;复写语句:形式为f = g 的赋值优化过程中会大量引入复写复写传播变换的做法是在复写语句f = g后,尽可能用g代表f复写传播变换本身并不是优化,但它给其他优化带来机会 常量合并(编译时可完成的计算) 死代码删除2.死.原创 2022-04-06 20:24:01 · 937 阅读 · 0 评论 -
java流的分类
按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。1.节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.2.处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。JAVA常用的节点流:1.文 件 FileInputStream FileOutputStrean FileReader FileW.原创 2022-04-06 20:23:12 · 1321 阅读 · 0 评论 -
sleep\wait\yield\join
1.sleep()方法在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”。不推荐使用。sleep()使当前线程进入阻塞状态,在指定时间内不会执行。2.wait()方法在其他线程调用对象的notify或notifyAll方法前,导致当前线程等待。线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁。当前线程必须拥有当前对象锁。如果当前线程不是此锁的拥有者,会抛出IllegalMonitorStateException异常。唤醒当前对象锁的等待线程使用notify或noti.原创 2022-04-06 20:22:30 · 95 阅读 · 0 评论 -
java对象初始化顺序
java对象初始化顺序先说结论:父类静态代码块,父类静态成员变量(同级,按代码顺序执行)子类静态代码块,子类静态成员变量(同级,按代码顺序执行)父类普通代码块,父类普通成员变量(同级,按代码顺序执行)父类构造方法子类普通代码块,子类普通成员变量(同级,按代码顺序执行)子类构造方法注意点:静态内容只在类加载时执行一次,之后不再执行。默认调用父类的无参构造方法,可以在子类构造方法中利用super指定调用父类的哪个构造方法。代码测试:复制代码/** * Description.原创 2022-04-06 20:20:39 · 72 阅读 · 0 评论 -
java的几种基本数据类型及其大小
Java中的四类八种基本数据类型第一类:整数类型 byte short int long第二类:浮点型 float double第三类:逻辑型 boolean(它只有两个值可取true false)第四类:字符型 char按照字节排序(1个字节等于4bit,1bit等2位)byte(8位 1字节)short(16位 2字节) int(32位 4字节) long(64位 8字节) double(64位 8字节)float(32位 4字节)char(16位 2字节) boolean(.原创 2022-04-06 20:19:51 · 11349 阅读 · 1 评论 -
JVM常用垃圾回收器的特性与使用场景
JVM常用垃圾回收器的特性与使用场景jvm垃圾回收器是GC算法的具体实现。常用的垃圾回收器有以下几种,并且分别针对的是堆内存中的新生代、老年代。值得一提的是方法区(有的文章也将之称为永久代,主要存放类信息、常量池、静态类变量等)也会触发GC,主要是回收不可存活的常量对象以及无用类(当该类在程序中不再存在任何实例、对应的classloader被卸载、该类的类对象class不被任何地方引用,此时可以被回收)。1.Serial垃圾回收器简要概括下该回收器的特点:单线程,基于复制算法,JVM运行在C原创 2022-02-06 22:56:08 · 1024 阅读 · 0 评论 -
springboot学习小记
问题1:关于springBoot中内存数据库H2的简单配置总结 SpringBoot 内存数据h2的简单配置查询 1、IDEA 需要安装 Lombok 插件 (可能你的IDEA 不能搜出插件,需要简单调整一下,Setting->Plugins>设置->Auto-detect....),不然 @Slf4j 下的 log 无法用 2、不能访问 /beans 目录,需要在application.properties 中加入 management.endpoints.web.exposure.原创 2022-02-06 22:50:02 · 149 阅读 · 0 评论 -
进程、线程上下文切换的开销
进程、线程上下文切换的开销虚拟内存与地址空间映射关系虚拟内存是操作系统为每个进程提供的一种抽象,每个进程都有属于自己的、私有的、地址连续的虚拟内存,当然我们知道最终进程的数据及代码必然要放到物理内存上,那么必须有某种机制能记住虚拟地址空间中的某个数据被放到了哪个物理内存地址上,这就是所谓的地址空间映射,也就是虚拟内存地址与物理内存地址的映射关系,那么操作系统是如何记住这种映射关系的呢,答案就是页表,页表中记录了虚拟内存地址到物理内存地址的映射关系。有了页表就可以将虚拟地址转换为物理内存地址了,这种机原创 2020-09-10 11:21:07 · 6448 阅读 · 0 评论 -
synchronized的实现原理及优化思路
synchronized的作用范围 作用于方法时,锁住的是对象的实例(this); 当作用于静态方法时,锁住的是Class实例,又因为Class的相关数据存储在永久带PermGen (jdk1.8 则是 metaspace),永久带是全局共享的,因此静态方法锁相当于类的一个全局锁, 会锁所有调用该方法的线程; synchronized 作用于一个对象实例时,锁住的是所有以该对象为锁的代码块。它有多个队列, 当多个线程一起访问某个对象监视器的时候,对象监视器会将这些线程存储在不同的容原创 2020-09-10 10:56:58 · 396 阅读 · 0 评论 -
java种对象的创建过程、何时创建成功、对象布局以及访问方式
对象的创建过程先上个大概的过程:理解Java中对象实例化过程是很重要的,实例化过程主要步骤如下:第1步:在创建类之前,检查类是否加载(是将硬盘上的.class文件加载到内存中),如果没有加 载就加载这个类,在这个类加载之前要加载所有父类。 Java运行时采用的策略:懒惰式加载(按需加载):如果第一次用到就加载,只加载一次。通过CLASSPATH指定的路径寻找类文件(.class),加载以后是一个对象,类型是Class。第2步:在内存堆中分配对象空间。递归分配所有父类和子类属性空间。 属性默认原创 2020-09-10 10:20:06 · 265 阅读 · 0 评论 -
手把手教你DBDSpringBoot配置多数据源
SpringBoot配置多数据源创建两个数据源作为测试use test;use test2;CREATE TABLE FOO (ID INT primary key, BAR VARCHAR(64));CREATE TABLE BAR (ID INT primary key, BAR VARCHAR(64));INSERT INTO FOO (ID, BAR) VALUES (1, 'aaa');INSERT INTO FOO (ID, BAR) VALUES (2, 'bbb');INSE原创 2020-05-27 21:15:54 · 191 阅读 · 0 评论 -
JVM中解决MinorGC扫描全堆的方法
JVM中解决MinorGC扫描全堆的方法极客时间郑雨迪老师的《深入拆解Java虚拟机》的解释MinorGC的是当新生代不够时触发的GC算法,它的好处就是不用堆整个堆进行垃圾回收或者扫描,但是如果当老年代的对象引用到新生代的对象,在判断对象是否存活时,采用了GC Roots可达性分析,需要标记存活对象,照这个道理,JVM还是需要扫描老年代,也就是扫描整个堆了。这不前后矛盾了嘛。那么JVM是怎么做的呢?JVM内部维持了一个卡表(Card Table)技术,将整个堆分为大小512字节的若干卡,并且通过一个卡原创 2020-05-13 11:17:17 · 695 阅读 · 0 评论 -
动态规划之凑硬币和股票买卖
动态规划解决凑硬币问题问题一有一块 两块 五块3种硬币 总共凑成100元 问最小的硬币数是多少?思路典型的最值问题,可以考虑用动态规划的思路进行求解。初始化一个dp数组,数组长度为100+1(考虑凑0元)。dp[i]表示凑i元需要的最少硬币数。有三种硬币,每一种都要去尝试,例如当i足够大(至少为三)时,dp[i]应该考虑是dp[i-1]+1、dp[i-2]+1、dp[i-5]+1三种情况中的最小那个。代码public class MinCoins{ private static in原创 2020-05-11 14:58:49 · 215 阅读 · 0 评论 -
两种特别好数组原位删除元素的方法
两种特别好的数组原位删除元素的方法问题一给定一个排序数组,你需要在** 原地** 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3原创 2020-05-11 14:34:52 · 191 阅读 · 0 评论 -
判断二叉树的对称性
判断二叉树的对称性给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3递归方法public boolean judge(TreeNode t1,TreeNode t2){ if(t1==null &&a原创 2020-05-11 11:27:47 · 444 阅读 · 0 评论 -
约瑟夫问题
约瑟夫问题约瑟夫问题介绍约瑟夫问题是典型的单向环形链表的应用下图来自尚硅谷韩顺平老师《数据结构与算法》课件:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pl6T1oYS-1589164343318)(C:\Users\18221\AppData\Roaming\Typora\typora-user-images\image-20200511101253132.png)]代码节点类的构建class Boy{ private int no; pri原创 2020-05-11 10:32:42 · 190 阅读 · 0 评论 -
移动数组中的元素
移动数组中的元素问题描述给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [-1,-100,3,99] 和 k = 2输出: [3,99,-1,-100]解释: 向右旋转 1 步: [9原创 2020-05-11 10:08:04 · 2457 阅读 · 0 评论 -
数组中只出现一次问题
数组中只出现一次问题问题一描述:只有一个数只出现一次,其他都出现两次给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4解法这个还是比较简单的,利用1.数与数本身异或为0;2.0与任何数异或还是该数本身。两个性质,直接遍历这个数组,然后遍历过程中进行异或运算,最后得原创 2020-05-11 10:07:27 · 419 阅读 · 0 评论 -
数组中逆序对个数问题
数组中逆序对个数问题问题描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007解法采用分治算法,也就是借鉴归并排序的算法思路,因为在合并的过程中,如果前一部分对应的数大于后一部分对应的数,由于每一部分在合并时已经排序好了,所以逆序对肯定是mid-前一部分的index+1,可以看下面的图解[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直原创 2020-05-11 10:06:55 · 614 阅读 · 0 评论 -
全排列问题
全排列问题题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。Solution:从这张图中,我们可以看出来,找全排列类似于深度优先遍历,深度优先最关键的就是要记住上一个状态,而所谓回溯就是要回到上一没有操作过的状态,再去考虑别的情况。例如上面这个图,我们的想法是每次都把一个数固定在前面原创 2020-05-10 14:39:30 · 189 阅读 · 0 评论 -
JVM常用垃圾回收器的特性与使用场景
JVM常用垃圾回收器的特性与使用场景jvm垃圾回收器是GC算法的具体实现。常用的垃圾回收器有以下几种,并且分别针对的是堆内存中的新生代、老年代。值得一提的是方法区(有的文章也将之称为永久代,主要存放类信息、常量池、静态类变量等)也会触发GC,主要是回收不可存活的常量对象以及无用类(当该类在程序中不再存在任何实例、对应的classloader被卸载、该类的类对象class不被任何地方引用,此时可以被回收)。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-us5yrd8j-15原创 2020-05-10 12:47:07 · 294 阅读 · 0 评论 -
二叉树的非递归遍历方式(Java)
二叉树的非递归遍历方式(Java)前序遍历思路:就是通过一个栈来实现:从root开始,root非空先入栈;进入循环判断,若栈非空,则弹出栈顶元素,打印栈顶元素的值当弹出的栈顶元素的右子节点非空时,将右子节点压入栈;当弹出的栈顶元素的左子节点非空时,将左子节点压入栈;直到栈中无元素。代码:public static ArrayList<Integer>...原创 2020-04-24 14:24:35 · 160 阅读 · 0 评论 -
改进版笔试题迷宫问题--深度优先搜索
在迷宫上下左右移动的基础上,增加了飞行到中心对称位置处的限制package com.alibaba.test;import java.util.Scanner;public class Main { static int[][] map; static int[][] vis; static int[][] move = { { 0, 1 }, { 0, -1 }, { 1, ...原创 2020-03-23 20:08:24 · 193 阅读 · 0 评论 -
Prim算法、Kruscal算法、Dijkstra算法、Floyd算法
prim算法//创建最小生成树->村庄的图class MinTree { //创建图的邻接矩阵 /** * * @param graph 图对象 * @param verxs 图对应的顶点个数 * @param data 图的各个顶点的值 * @param weight 图的邻接矩阵 */ p...原创 2020-03-08 17:51:41 · 289 阅读 · 0 评论 -
剑指Offer编程题汇总(Java版)
将牛客网上剑指offer的编程题代码汇总一下,绝大部分是按自己思路写的代码,一部分题目还贴出了大牛们的快捷解法。祝好运!/*剑指Offer编程题汇总*///1.//在一个二维数组中(每个一维数组的长度相同),//每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public clas...原创 2020-03-04 15:58:53 · 176 阅读 · 0 评论 -
Huffman树实现解压缩文件
代码是根据尚硅谷韩顺平老师写的,发现有错误,先放着留着学习吧。package com.attongji.huffmancode;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.ObjectInputStream;impo...原创 2019-12-21 09:30:22 · 310 阅读 · 1 评论 -
java排序实现之基数排序
package com.attongji.sort.myself;import java.util.Arrays;public class RadixSort { public static void main(String[] args) { int[] arr = new int[10]; for (int i = 0; i < 10; i++) { arr[i...原创 2019-12-18 14:58:46 · 87 阅读 · 0 评论 -
栈实现多位数不含小括号的四则运算
package com.aitongji.stack;public class Calculator { public static void main(String[] args) { String expression = "7*21*2-5+1-5+3-42"; // 定义一个数栈一个符号栈 ArrayStackForCal stackfornum = new Arr...原创 2019-12-17 10:40:39 · 244 阅读 · 0 评论 -
java并发-forkjoinpool的应用
package ForkJoinTaskDemo;import java.util.ArrayList;import java.util.concurrent.ExecutionException;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.ForkJoinTask;import java....原创 2019-10-19 10:36:53 · 97 阅读 · 0 评论 -
java并发-扩展ThreadPoolExecutor
package ExtendThreadPoolExecutor;import java.util.concurrent.ExecutorService;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concu...原创 2019-10-19 09:58:20 · 99 阅读 · 0 评论 -
java并发-线程池
Executor框架提供了集中线程池工厂方法public static ExecutorService newFixedThreadPool(int nThreads)public static ExecutorService newSingleThreadExecutor()public static ExecutorService newCachedThreadPool()publ...原创 2019-10-17 15:42:34 · 104 阅读 · 0 评论 -
java并发同步控制-CyclicBarrier
package CyclicBarrierDemo;import java.lang.management.RuntimeMXBean;import java.util.Random;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;public ...原创 2019-10-17 15:07:35 · 81 阅读 · 0 评论 -
java并发同步控制-CountDownLatch
应用实例package CountDownLatchDemo;import java.util.Random;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public cla...原创 2019-10-17 14:37:44 · 102 阅读 · 0 评论 -
java并发同步控制
重入锁——可替代synchronized麻烦的是需要手动解锁,一般在finally里面释放锁它所指的重入锁仅针对一个线程。package test;import java.util.concurrent.locks.ReentrantLock;public class ReenterLock implements Runnable { public static Reent...原创 2019-10-17 11:22:24 · 174 阅读 · 0 评论 -
java修饰符final的深入理解
本文主要是李刚老师的《java疯狂讲义》中的学习心得与笔记。《疯狂java讲义》是一本对java基础讲解比较深入的书,强烈推荐。主要内容包括以下方面:final修饰符可修饰的内容 final修饰变量 final修饰方法 final修饰类 不可变类1.final可修饰的内容final作为修饰符,可以修饰类、方法、变量。表示修饰的类、方法以及变量不可改变。关于修饰符,有以下访问...原创 2019-08-15 14:46:20 · 252 阅读 · 0 评论 -
Java学习之Java中内部类以及匿名内部类
在进行多线程实例编程时,发现别人使用了内部类来进行代码和逻辑简化,特别回顾了下内部类,果然长期不写代码,语法会忘记的很快。内部类 内部类的特点 匿名内部类 内部类的创建 其他内部类(除匿名内部类外)1.内部类内部类又称“嵌套类”,是定义在类内部的类,目的在于将逻辑相关的类放在一起。包含内部类的类常被称作外部类,内部类可以被视作外部类的一个成员,故也被称为“成员类”,在语法结构上,...原创 2019-08-11 10:53:55 · 152 阅读 · 0 评论 -
Java线程学习实例——采用同步锁,互斥锁与同步锁的区别,synchronized的使用方法
栗子来源:https://blog.csdn.net/wenzhi20102321/article/details/52524545首先对java中同步锁与互斥锁进行区分,主要来源于知乎中的大佬总结如下:1.锁的概念锁的目的就是避免多个线程对同一个共享的数据并发修改带来的数据混乱。锁的实现要处理的大概就只有这4个问题:(知乎大宽宽的回答,非本人观点)“谁拿到了锁“这个信息存哪里...原创 2019-08-08 15:05:49 · 5365 阅读 · 1 评论 -
java线程学习——通过Runnable接口实现多线程
来源:https://www.runoob.com/java/java-multithreading.html以下是菜鸟教程中的Runnable接口实现多线程的Demo首先创建一个实现Runnable接口的类class RunnableDemo implements Runnable { private Thread t; private String threadName; ...转载 2019-08-08 14:07:30 · 350 阅读 · 0 评论 -
Java与python算法实现快速排序法及其测试
public class quick_sort { public static void main(String[] args) { int Array[]=new int[10]; for (int i=0;i<Array.length;i++) { Array[i]=(int)(100*Math.random()); } System.out.println(...原创 2019-07-31 17:26:37 · 180 阅读 · 0 评论