202201-22 手把手带你用java搞定汉诺塔 目录什么是汉诺塔问题剖析n=1n=2n=3小结Java代码实现代码讲解move函数hanoiTower函数附:C语言实现汉诺塔总结什么是汉诺塔汉诺塔问题是一个经典的问题。汉诺塔(HanoiTower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘... 继续阅读 >
202201-22 手把手带你用java搞定青蛙跳台阶 目录问题描述问题剖析n=1n=2n=3n=4小结Java代码示例附:C语言实现青蛙跳台阶总结问题描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法问题剖析n=1此时有一种跳法。n=2此时有两种跳法。n=3此时有三种跳法。n=4此时有五种跳法。小结当有n级台阶时,青蛙可以跳1级,也可以跳2级。如果它跳1级,那么还剩下n-1级台阶;如果它跳2级,那么还剩下n-2级台阶。因此n级台阶的跳法等于n-1级台... 继续阅读 >
202110-28 带你快速搞定java IO 目录一、IO底层是怎么回事?二、梳理类的结构三、IO类大点兵四、来波实例展示1、访问操作文件(FileInputStream/FileReader,FileOutputStream/FileWriter)2、缓存流的使用(BufferedInputStream/BufferedOutputStream,BufferedReader/BufferedWriter)3、获取键盘输入总结:一、IO底层是怎么回事?操作系统就是管家,电脑的设备就是资源,如果进程先要操作资源,必须要进行系统调用,有操作系统去处理,然后再返回给进程,这样... 继续阅读 >
202110-25 带你快速搞定java并发库 目录一、总览二、Executor总览三、继承结构四、怎么保证只有一个线程五、怎么保证时间可以定时执行六、使用总结一、总览计算机程序=数据+算法。并发编程的一切根本原因是为了保证数据的正确性,线程的效率性。Java并发库共分为四个大的部分,如下图Executor和future是为了保证线程的效率性Lock和数据结构是为了维持数据的一致性。Java并发编程的时候,思考顺序为,对自己的数据要么加锁。要么使用提供的数据结构,保证数... 继续阅读 >
202110-25 带你快速搞定java数组 目录1、数组的定义2、array遍历3、List和array之间的转换1、数组转list2、list转数组3、Arrays工具类4、可能遇到的问题总结1、数组的定义先声明后使用数据类型[]数组名称=new数据类型[长度];String[]arr3=newString[5];数据类型数组名称[]=new数据类型[长度];Stringarr[]=newString[5];直接初始化String[]arrs={"1","2","3"};声明并初始化String[]sarr=newString[]{"a","b"};2、array遍历... 继续阅读 >
202110-25 带你快速搞定java多线程(5) 目录1、介绍2、countdownlantch的用法。3、如何利用AQS实现CountDownLatch4、总结1、介绍CountDownLantch倒数计时器,一个同步辅助类,一个线程(或者多个),等待另外N个线程完成某个事情后才能执行。用给定的计数初始化CountDownLatch,其含义是要被等待执行完的线程个数。每次调用CountDown(),计数减1,执行到await()函数会阻塞等待线程的执行,直到计数为0。CountDownLantch无法重置2、countdownlantch的用法。举个例子场... 继续阅读 >
202110-25 带你快速搞定java多线程(4) 目录1、AQS是什么?2、AQS模型3、AQSstate4、AQS两种资源共享方式:5、模板方式实现自定义6、锁的分类:公平锁和非公平锁,乐观锁和悲观锁7、CAS8、总结1、AQS是什么?AQS是类AbstractQueuedSynchronizer的简称,也是常用锁的基类,比如常见的ReentrantLock,Semaphore,CountDownLatch等等。AQS提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架。是Java提供的一种模板,一般在现有同步器无法完成的时候可以自... 继续阅读 >
202110-25 带你快速搞定java多线程(3) 目录一、锁的概念二、synchronized的使用方式三、synchronized的实现原理列小结四、线程池是什么五、为什么要用线程池?六、看下类图,从整体上理解下七、线程池的创建八、线程池核心参数说明九、几个疑问点9.1、是怎么保证线程不销毁的?9.2提交任务有哪几种方式?9.3拒绝策略都有哪些?9.4线程池的关闭9.5初始化线程池时线程数的选择十、总结一、锁的概念先来聊聊这几个概念,总不能聊起来的时候啥也不知道,只知道干活也... 继续阅读 >
202110-25 带你快速搞定java多线程(2) 目录1、Future的类图结构,从整体上看下Future的结构2、future的使用,说的再多都么什么用,来个例子悄悄怎么用的。3、通俗理解4、原理5、总结1、Future的类图结构,从整体上看下Future的结构首先看下future接口的函数,共有5个方法。get()获取执行的结果,另外一个重载是有时间限制的get,如果超时会有异常isDone()判断future结果是否处理完成cancel取消任务2、future的使用,说的再多都么什么用,来个例子悄悄怎么用的... 继续阅读 >
202110-25 带你快速搞定java多线程 目录1、什么是线程2、线程的状态3、怎么通俗理解进程,线程?4、线程和进程的区别5、什么是线程安全6、如何创建线程总结:1、什么是线程线程是操作系统调度的最小单元,也叫轻量级进程。它被包含在进程之中,是进程中的实际运作单位。同一进程可以创建多个线程,每个进程都有自己独立的一块内存空间。并且能够访问共享的内存变量。2、线程的状态线程的状态一般看到的也就是Runable和blocked,最多的还是blocked,因为cpu的时间片... 继续阅读 >
202110-21 一篇文章带你搞定JAVA内存泄漏 目录1、什么是内存泄漏2、内存泄漏的原因3、内存泄漏有哪些情况3.1代码中没有及时释放,导致内存无法回收。3.2资源未关闭造成的内存泄漏3.3全局缓存持有的对象不使用的时候没有及时移除,导致一直在内存中无法移除3.4静态集合类3.5堆外内存无法回收4、内存泄漏的解决办法5、内存问题排查第一步首先确认逻辑问题第二步:分析gc是否正常执行第三步确认下版本新增代码的改动,尽快从代码上找出问题。第四步:开启各种命令行和... 继续阅读 >
202110-21 一篇文章带你搞定JAVA反射 目录1、反射的概念1、概念2、获取字节码文件对象的方式2.1元数据的概念2.2获取class对象的方式1、访问权限2、获取方法2.1访问静态方法2.2访问类方法 3、获取字段,读取字段的值4、获取实现的接口5、获取构造函数,创建实例6、获取继承的父类7、获取注解4、反射实例5、总结1、反射的概念1、概念反射,指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对任意一个对象,都能调用它的任意一个方法。这种... 继续阅读 >
202110-21 一篇文章带你搞定JAVA注解 目录1、注解是什么2、jdk支持的注解有哪些2.1三种常用的注解:2.2元注解3、注解实例1、自定义注解2、在对应的方法上增加注解3、在项目启动的时候检查注解的枚举4、总结1、注解是什么Java注解用于为Java代码提供元数据,看完这句话也许你还是一脸懵逼,用人话说就是注解不直接影响你的代码执行,仅提供信息。接下我将从注解的定义、元注解、注解属性、自定义注解、注解解析JDK提供的注解这几个方面再次了解注解(Annotation)... 继续阅读 >
202110-21 一篇文章带你搞定JAVA泛型 目录1、泛型的概念2、泛型的使用3、泛型原理,泛型擦除3.1IDEA查看字节码3.2泛型擦除原理4、?和T的区别5、superextends6、注意点1、静态方法无法访问类的泛型2、创建之后无法修改类型3、类型判断问题4、创建类型实例7、总结1、泛型的概念泛型的作用就是把类型参数化,也就是我们常说的类型参数平时我们接触的普通方法的参数,比如publicvoidfun(Strings);参数的类型是String,是固定的现在泛型的作用就是再将String定义... 继续阅读 >
202110-21 一篇文章带你搞定JAVA Maven 目录1、maven是什么,为什么存在?项目结构是什么样子,怎么定位jar2、Idea的操作1.新建maven项目2.配置仓库3.添加依赖,添加fastjson的依赖4.打包项目3、Maven坐标主要组成4、maven生命周期4.1名词解释4.2生命周期4.3goal的概念4.4生命周期和phase的关系5、ideamaven的配置6、POM有2个很重要的关系:聚合、继承一、聚合二、继承7、Maven中的profile8、maven插件9、环境变量10、Maven依赖冲突的2个方法1.统一版本2.排除... 继续阅读 >