- 博客(24)
- 收藏
- 关注
原创 开源项目eladmin--笔记
项目用途 暂略过 项目配置 #项目端口号 server: port: 8000 #springboot整合freemarker模板引擎 # 是否检查模板位置是否存在。 spring: freemarker: check-template-location: false #profiles: active 动态加载配置文件 profiles: active: dev #设置时区,东八区,(其实也可以设置时间格式spring.jackson.date-format=yyyy-M
2021-06-01 19:16:55
4642
3
原创 学习开源项目中碰到的问题和解决办法
在拉下代码之后,跑起整个项目之前碰到的问题: 一.报错信息 select version(); --5.1.55-community Caused by: com.mysql.cj.exceptions.UnableToConnectException: CLIENT_PLUGIN_AUTH is required at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.Nati
2021-06-01 10:34:45
502
原创 督促自己如何学习开源项目
一.了解项目的基本概念,基本用途,逻辑结构,基本原理,应用场景等 二.了解代码的组织,找到各个功能模块和代码文件之间的对应关系 三.了解项目的所有代码模块,程序文件的作用,走通所有的主要执行流程 抄录源于https://www.infoq.cn/news/2014/04/learn-open-source/ 一个项目就是一个分层的盒子 1.配置接口:用于盒子的工作模式,基本参数,拓展插件等重要特性进行配置.在盒子启动前就一次性配好的.在盒子的工作过程中,这些配置不变,或者是只在少数的情况下发生改变 2.控制
2021-05-28 14:45:41
183
1
原创 认识JVM
1.JVM的位置和jvm的体系结构 2.类加载器(Class Loader) 类加载器的作用: 加载Class文件–>Class Loader加载并初始化 做一些实例化的操作 类加载器首先是: AppClassLoader 应用类加载器 ExtClassLoader 扩展类加载器 ROOT 根加载器 public class Car { public static void main(String[] args) { // classloader加载实例化几个对象
2021-04-24 18:32:19
185
原创 单例模式---饿汉式和懒汉式的双重锁校验机制,以及volatile分析
单例模式的使用场景(转载https://www.jianshu.com/p/29a90d177d21): Windows的Task Manager(任务管理器)就是很典型的单例模式(这个很熟悉吧),想想看,是不是呢,你能打开两个windows task manager吗? 不信你自己试试看哦~ windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。 网站的计数器,一般也是采用单例模式实现,否则难以同步。 应用程序的日志应用,一般都何用单
2021-04-21 14:30:50
808
3
原创 Fork/Join
首先弄清楚ForkJoin的作用是什么?为什么会使用它? Fork/Join是体现一个分而治之思想的任务框架 在多线程的情况下,使用forkjoin会提高工作效率,比如说多线程中有几个线程同时在执行任务,但是有的线程会先执行完毕,但是如果闲置这个已经跑完的线程就会造成资源上的浪费,如果让这个已经跑完的线程去帮助执行其他线程没执行完的任务,就可以减少整体的运行时间. 同时要知道,Fork和Join是两种动作,Fork是拆分,Join是合并. 要想实现通过ForkJoin提高效率那应该怎么做? 1.首先通过
2021-04-20 12:02:15
878
原创 四大函数式接口和stream流式计算
整体这篇只是给自己理清思路,不建议观看 四大函数式接口 1.Function<T,R> 函数式接口, 两个参数,有一个输入参数T,有一个输出R 2.Predicate<T> 断定性接口 返回 的是布尔值,有一个参数,返回的是布尔值 3.Consumer 消费型函数式接口,消费者接口,有一个输入参数,没有返回值 4.Supplier 供给型函数式接口,没有参数,只有返回值 1.Function<T, R>函数式接口的源码: 看源码能看
2021-04-20 11:46:01
289
原创 线程池-----------7大参数4大拒绝策略以及自定义线程池
在能自己创建线程的同时为什么要使用线程池?线程池有什么好处? 线程复用,管理线程池,可以控制最大并发数 1.降低资源的消耗 2.提高响应速度 3.方便管理 两种创建线程池的方式 1.是通过Executors工具类(不推荐) 2.是通过ThreadPoolExecutor来创建(推荐) 为什么会推荐ThreadPoolExecutor呢?这两种的区别在哪儿? 我们可以看一看阿里开发手册中的说明,来对比一下以上三种方式的参数 一.通过Executors工具类 ExecutorServi
2021-04-17 17:27:59
243
原创 同步队列------SynchronousQueue
同步队列很简单: 从控制台的打印结果可以看出,同步队列是比较特殊,在队列中,必须存进的元素被取出来之后才能再存放元素进去 /** * 同步队列 * */ public class SynchronizeQueueDemo { public static void main(String[] args) { SynchronousQueue<String> queue = new SynchronousQueue<>(); new Th
2021-04-16 18:48:29
421
原创 阻塞队列------BlockingQueue,以及常用的API
1.什么是阻塞队列 了解一下BlockingQueue的依赖关系 Collection接口是最上级的接口 Queue 和 Set List是同级关系 Queue继承者包括: Deque双端队列 BlockingQueue阻塞队列 AbstractQueue非阻塞队列 阻塞队列的概念:可以简单的理解成队列相当于一个管道: 1.先进先出 2.写入队列(当队列满了,再写入就必须阻塞等待) 3.获取队列中的数据(如果队列是空的,只有等待写入后才能读取) 2.BlockingQueue主要的使用方法 主
2021-04-16 18:37:17
298
原创 读写锁
话不多说,直接上代码, 这里需要理解一点,读取的时候为什么要加锁,加锁和不加锁有什么区别,使用读写锁和使用Lock有什么区别 1.读取的时候加锁,是为了在读取的时候不能让其他线程进行写入 2.使用读写锁,是为了更加细粒度的控制 /*** * 读写锁 */ public class ReadWriterLockDemo { public static void main(String[] args) { MyCache myCache = new MyCache();
2021-04-15 18:19:29
167
原创 并发中的常用辅助类
并发中的常用辅助类 1.CountDownLatch(倒计时器): 这个不好理解,直接用代码表示比较清楚,就相当于一个倒计时器 public class UtilDemo { public static void main(String[] args) throws InterruptedException { //总数是6,会进行倒计时,然后计时完毕会执行什么操作 CountDownLatch count = new CountDownLatch(6);
2021-04-15 17:31:04
208
原创 认识Callable接口
认识Callable接口 Runnable接口和Callable接口的不同 callable接口,1.可以有返回值,2.可以抛出异常,3.调用方法不同, Runnable接口不可以 实现Callable接口调用多线程,需要用到一个适配器模式 适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。 因为Thread类只能接受Runna
2021-04-15 16:39:04
355
原创 多线程情况下的集合不安全
在调用多线程的情况下,使用ArrayList 进行添加操作,有可能会发生ConcurrentModificationException 异常,这个是也就是说ArrayList 并不安全,那如何进行解决,有以下3中方法 1.使用Vector. List<String> list =new Vector<>(); 2.使用Collection集合的工具类Collections工具类 List<String> list = Collections.synchronized
2021-04-14 17:04:48
500
原创 Synchronized和Lock区别
Synchronized 和 Lock的区别 1.Synchronized 是java内置关键字,Lock是一个java类 2.Synchronized 无法判断锁的状态,Lock可以判断是否获得了锁 3.Synchronized会自动释放锁,Lock必须手动释放锁,如果不手动释放锁,就会死锁 4.Synchronized在多线程的情况下,线程1获得锁后,线程2会等待;Lock锁就不一定会一直等待 5.Synchronized可重入锁,不可以中断的,非公平的(线程执行时间短的先执行);Lock锁,可重入锁
2021-04-14 15:43:52
274
原创 lambda表达式的推导
要点:lambda表达式的使用,有个前提是对一个函数式接口的实现简化.所谓函数式接口,就是一个接口内只有一个抽象方法 创建一个函数式接口 从外部类实现接口,到局部内部类,到匿名内部类,最后到lambda表达式的使用,是对代码逐渐的简化 package lambda; /** * 推导lambda表达式 * 函数式接口----必须是一个接口里只有一个方法 比如Runnable接口 */ public class TestLambda { public static void main(St
2021-04-13 10:21:48
255
原创 多线程--生产者和消费者问题
问题:多线程中有一个比较经典的案例就是生产者和消费者问题.共同操作同一个资源,就是生成的产品,一个生产一个消费,这就必须考虑到线程的安全同步.如何实现多线程中的线程安全,保证资源的统一. 在生产者和消费者问题中,生产者和消费者都是多线程操作. 这里有一个执行生产者和消费者动作的对象,需要对产品有一个判断,判断何时进行生产何时进行消费 /**操作数据*/ class Product{ int num;//产品的数量 //让生产者生产,数量小于20就开始生产 public synchr
2021-04-12 10:40:39
548
原创 IO流--文件上传实现
文件上传 思路:需要一个服务器和一个客户端,两者进行通信,通过一个TCP连接让两者通信,两者通信的要素是服务器的IP地址和对应的端口号才能建立起连接,然后创建TCP连接,通过IO流让文件实现输入和输出.文件输入和输出通过文件字节输入流实现FileInputStream和FileOutputStream 这里需要注意的是FileInputStream(URL),这里的URL默认是定位在项目路径下的相对路径,同时,下面的并没有考虑到真正的实现其实是需要客户端和服务器端在关闭之前的确认,需要客户端先发送消息,表示
2021-04-06 15:46:46
2504
原创 用GUI写一个简易的计算器中碰到的问题
问题:在一个frame框中,传入两个值能够得到两数和 代码实现 /** * 写一个计算器 */ public class TestText { public static void main(String[] args) { new Calculator().loadFrame(); } } /** * 计算器类 */ class Calculator extends Frame { //属性 TextField num1,num2,num3; /
2021-03-30 14:38:56
272
原创 二维数组和稀疏数组
二维数组和稀疏数组 ###问题:将一个二维数组转化为稀疏数组,并还原 1.要点:要知道稀疏数组的构成(以下图片行列值为数组的下角标) 2.代码的实现 public static void main(String[] args) { int[][] array1 = new int[11][11]; array1[1][2] =1; array1[2][3] =2; array1[3][5] =5820; System.o
2021-03-27 16:44:57
229
原创 简单算法--冒泡排序
#冒泡排序 问题: 定义一个数组array ,使用冒泡排序将数组按从小到大的顺序进行排序打印 int[] array = {2,8546,8,23,5,6,9,12}; 思考: 用冒泡排序按从小到大的顺序进行排序,是对数组中每两个相邻的元素进行比较大小,将相比大的数放在后一位,通过两层循环控制比较次数,时间复杂度为O(n^2),空间复杂度为O(n). 实现代码: 3.一点点的优化,在冒泡排序中,会有一些已经比较过的但是会重复比较的情况,时间复杂度为O(n^2)的由来 public s
2021-03-26 18:49:52
253
原创 嵌套for循环——打印正反等边三角形
#嵌套for循环——打印正反等边三角形 1.思维 思考图形的构成方法,等边三角形的构成,在图形面积上是一个正方形的二分之一,拿正等边三角形做例,将正方形均分为4份 那么,第一步打印出图形1三角的空格,第二步打印出图形2的星号,第三部补齐图形3的星号 2.实现 public static void main(String[] args) { for (int i = 1; i <= 5; i++) {//外层循环是控制行数,5行 //打印左边的三角
2021-03-26 00:24:32
2282
原创 理解博客的重要性
理解博客的重要性 所有的东西都应该是留下一些记录的,为了更好的理解,理清写代码的思路,不盲目的追求每天更新,只求把学过的东西都能很好的理解
2021-03-24 10:40:10
107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅