07 2020 档案

摘要:一、出现的问题 近期公司有个老项目(数据库使用的 postgresql )需要维护需改,其中需要使用Excel 表格导入大批量的数据,因为excel导入数据存在太多不确定性,大量的数据校验和数据的关联查询是避免不了的,这就会导致响应时间太久,这里为了优化采取了数据库的批量插入,在小数据量时,批量插入 阅读全文
posted @ 2020-07-30 14:30 AmourLee 阅读(4303) 评论(0) 推荐(0) 编辑
摘要:解读源码本来就是一件极其枯燥乏味的事情 希望你坚持住 过了这道坎 你会看到不一样的风景; 在解读源码之前我们来讨论一下源码解读的技巧: 跑不起来的源码不读 解决问题就好-目的性 一条线索到底 无关细节略过 1、跑不起来的源码不读 因为大部分源码都会用到好多的设计模式,这就促使如果源码跑不起来,单纯的 阅读全文
posted @ 2020-07-28 01:27 AmourLee 阅读(255) 评论(0) 推荐(0) 编辑
摘要:可重入概念是不同的方法上加的是同一个锁,在一个方法中可以调用另一个方法,不会出现死锁的问题(意思就是我锁了一次之后还可以对同样这把锁再锁一次); 一、回顾一下synchronized锁可重入性: 记得在之前讲synchronized的时候讲过,synchronized就是可重入的。假设synchro 阅读全文
posted @ 2020-07-23 15:56 AmourLee 阅读(165) 评论(0) 推荐(0) 编辑
摘要:一、为什么要使用Atomic类? 看一下下面这个小程序,模拟计数,创建10个线程,共同访问这个int count = 0 ;每个线程给count往上加10000,这个时候你需要加锁,如果不加锁会出现线程安全问题,但是使用AtomicInteger之后就不用再做加锁的操作了,因为AtomicInteg 阅读全文
posted @ 2020-07-22 11:55 AmourLee 阅读(252) 评论(0) 推荐(0) 编辑
摘要:CAS操作号称无锁优化,也叫作自旋;对于一些常见的操作需要加锁,然后jdk就提供了一些以Atomic开头的类,这些类内部自动带了锁,当然这里的锁并非是用synchronized来实现的,而是通过CAS操作来实现的; 一、下面是 AtomicInteger 的使用: package com.desig 阅读全文
posted @ 2020-07-21 10:37 AmourLee 阅读(760) 评论(0) 推荐(0) 编辑
摘要:首先volatile有两大功能: 保证线程可见性 禁止指令重排序 1、保证线程可见性 首先我们来看这样一个程序,其中不加volatile关键字运行的结果截然不同,加上volatile程序能够正常结束,不加则程序进入死循环; package com.designmodal.design.juc01; 阅读全文
posted @ 2020-07-20 01:46 AmourLee 阅读(166) 评论(0) 推荐(0) 编辑
摘要:一、为什么要使用synchronized关键字? 1、使用synchronized关键字的原因:在并发编程问题中存在着共享数据,在多线程操作共享数据时,要保证同一时刻只有一个线程在执行某个方法或某个代码块; synchronized既保证了原子性,又保证了可见性,所以可以使用synchronized 阅读全文
posted @ 2020-07-17 17:05 AmourLee 阅读(1959) 评论(0) 推荐(0) 编辑
摘要:常见的线程状态有六种: 1.新建状态(new):当我们new 了一个线程,但是没有调用start()方法; 2.Runnable状态:此状态包含两个状态: 就绪状态(Ready):当线程调用了start()方法时,线程就进入了就绪状态; 运行状态(Running):当该线程被系统的调度器选中就会进入 阅读全文
posted @ 2020-07-17 00:11 AmourLee 阅读(324) 评论(0) 推荐(0) 编辑
摘要:下面给大家介绍线程几个简单的方法: sleep(); yield(); join(); 1、sleep(); sleep的意思就是睡眠的意思,当前线程停下来一段时间 ,让给其他的线程去执行,sleep的复活是完全取决于睡眠的时间,睡眠的时间到了自己会自动复活; 2、yield(); yield的意思 阅读全文
posted @ 2020-07-16 17:09 AmourLee 阅读(177) 评论(0) 推荐(0) 编辑
摘要:既然学习多线程,那你就要知道线程是如何创建的,线程又是如何启动的,下面就看一下,线程的创建和启动; 1、创建线程的方法一般有三种: 继承Thread类 实现Runnable接口 实现Callable接口 2、启动线程的方法一般有四种: new T01().start(); new Thread(ne 阅读全文
posted @ 2020-07-16 16:42 AmourLee 阅读(145) 评论(0) 推荐(0) 编辑
摘要:在模板模式中,定义了一个公开的执行模板的方法,字类可以按照需自己实现方法,但是它们的调用方法是必须要按照抽象类的方式来进行。 意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 主要解决:一些方法通用,却在每一个子类都 阅读全文
posted @ 2020-07-16 15:24 AmourLee 阅读(139) 评论(0) 推荐(0) 编辑
摘要:观察者模式主要存在于一对多的情况下,一个对象的修改需要通知多个依赖它的对象,它属于行为型的一种模式; 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协 阅读全文
posted @ 2020-07-16 11:15 AmourLee 阅读(146) 评论(0) 推荐(0) 编辑
摘要:策略模式中一个类的行为可以在运行的时候进行更改,我们需要定义一个策略的接口,让所有的具体策略实现这个接口,然后封装一个可以执行策略的对象,可以通过传入不同的策略,执行不同的算法; 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决:在有多种算法相似的情况下,使用 if. 阅读全文
posted @ 2020-07-15 17:35 AmourLee 阅读(143) 评论(0) 推荐(0) 编辑
摘要:抽象工厂模式相对于简单工厂模式,会复杂一些,但是扩展性变得更加好; 一、实现抽象工厂一共分一下几个步骤: 创建产品接口 创建产品抽象类 创建产品具体实现类 创建工厂接口 创建抽象工厂 创建具体工厂实现类 创造者调用创造方法 下面是简单的类图: 产品类图: 工厂类图: 1、创建产品接口 package 阅读全文
posted @ 2020-07-15 14:08 AmourLee 阅读(142) 评论(0) 推荐(0) 编辑
摘要:简单工厂模式的实现分为一下几个步骤(这里以工厂创建交通工具为例): 定义一个交通工具的总称(接口) 让实现类(具体的交通工具)实现这个接口 定义一个工厂(创建交通工具) 创造者调用工厂方法 下图是简单的类图可以帮助理解: 1、定义一个交通工具的总称(接口) package com.dongl.fac 阅读全文
posted @ 2020-07-14 17:42 AmourLee 阅读(185) 评论(0) 推荐(0) 编辑
摘要:代理模式相对于其他的设计模式来说比较简单:什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理人可以。 这里举个例子是模仿了《您的设计模式》中的经典案例,案例中讲述了一 阅读全文
posted @ 2020-07-14 15:48 AmourLee 阅读(200) 评论(0) 推荐(0) 编辑
摘要:单例模式模式一般大家都会认为它比较简单,其实并非你们所认为的那样,很多情况下,单例模式会涉及到很多优化,下面给大家简单介绍一下单例模式的几种演变过程: 饿汉模式 懒汉模式 懒汉模式(加锁关键字 synchronized) 懒汉模式(细粒度的添加synchronized) 懒汉模式(双重检查) 静态内 阅读全文
posted @ 2020-07-14 13:42 AmourLee 阅读(118) 评论(0) 推荐(0) 编辑
摘要:常见的垃圾回收器: Serial Serial Old Parallel Scavenge Parallel Old ParNew CMS G1 ZGC Shenandoah Epsilon 下图已经列出来了这,其中Epsilon是debug使用的,不用过分关注;最常见的组合有:Serial +Se 阅读全文
posted @ 2020-07-13 15:44 AmourLee 阅读(1452) 评论(0) 推荐(0) 编辑
摘要:一、首先什么是垃圾(garbage)? 没有引用指向的一个或多个对象叫做垃圾; 二、如何找到这些垃圾 一般有两种方法: 引用计数 根可达算法 1、第一种叫做引用计数法(reference count),有一个引用指向一个对象,计数就加1 ,直到这个数为0,就会被当作垃圾。 2、引用计数 不能解决一个 阅读全文
posted @ 2020-07-12 07:16 AmourLee 阅读(2587) 评论(0) 推荐(0) 编辑
摘要:一、对象的创建过程 1、创建对象主要分一下几个步骤: class loading class linking(verification preparation resolution) class innitializing 申请对象内存 成员变量赋默认值 调用构造方法(1.成员变量赋初始值 2.执行 阅读全文
posted @ 2020-07-10 14:57 AmourLee 阅读(451) 评论(0) 推荐(0) 编辑
摘要:因为MySQL更新了最新的版本,就想着换一个版本,安装时发现和之前的版本安装有一些小小的不同,记录下来仅供自己下次安装和不知道怎么安装的小伙伴参考 首先到官网下载8.0.20版本的MySQL,注意这里有解压版和安装版的:下载解压版的更为方便。 1、下载地址:https://dev.mysql.com 阅读全文
posted @ 2020-07-07 15:01 AmourLee 阅读(570) 评论(0) 推荐(0) 编辑
摘要:一、Java从编码到执行 首先我们来看一下Java是如何从编码到执行的呢? 我们有一个x.java文件通过执行javac命令可以变成x.class文件,当我们调用Java命令的时候class文件会被装载到内存中,这个过程叫做classloader。一般情况下我们自己写代码的时候会用到Java的类库, 阅读全文
posted @ 2020-07-04 13:13 AmourLee 阅读(4103) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示