自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 Docker部署过程

目录配置阿里云加速器安装Mysql镜像创建SpringBoot镜像 最近由于公司的需要,学习了下Docker容器相关的内容。 我们的项目是部署在阿里云上面的,之前都是直接jar包跑的,后来因为要部署多个服务器,所以想用docker镜像进行部署。我也是刚刚接触Docker相关的内容,这次就把部署的过程记录一下。配置阿里云加速器 由于去拉取镜像速度...

2020-03-01 19:30:39 556

原创 openOffice的使用

最近的一个项目需要进行文件预览,word转pdf的操作等等,于是接入openOffice,这里做一个小记录(踩了一些坑哈哈哈)安装openOffice我是在linux下进行安装的,简单说一下安装的步骤 1.下载安装包:http://www.openoffice.org/zh-cn/download/2.将安装包放在 linux的/opt目录下,并创建一个新的目录office...

2020-02-24 21:59:15 3331 4

原创 review 下属的代码之后,我吐了一杯咖啡

早上我喝一杯咖啡,开始了一天的工作。首先先review一下下属的代码,稍微看一下发现代码不太优雅(皱眉脸)。稍微总结一下各 位的错误吧,基本的业务代码都垒不好,整天满嘴高可用,高并发,真是醉了。刚刚喝进去的咖啡差点喷出来。 随便打开一个类,映入眼帘的是这样的代码 遍历一个Map,的所有key ,然后再根据key,去获取value的...

2020-01-07 21:31:27 290 2

原创 静态代理与动态代理

原文地址:https://blog.csdn.net/hon_3y/article/details/70655966代理模式:提供了对目标对象另外的访问方式;即通过代理访问目标对象。 这样好处:可以在目标对象实现的基础上,增强额外的功能操作。(扩展目标对象的功能)。 简单来说,就是再创建一个代理,在代理类里面调用原有的目标对象,同时再做一些其他的处理,从而达到 不对目标对象修...

2019-11-18 20:39:41 189

原创 java中的stream平时最常用的几个方法

public class Demo { public static void main(String[] args) throws ClassNotFoundException { List<Goods> list = new ArrayList<>(); Goods goods = new Goods("内裤", 33); Goods goods2 =...

2019-11-16 19:44:22 707

原创 自定义注解

//定义一个工具类public class JudgeUtils { public static void checkAge(Object object) throws Exception { List<String> alarmMessageList = Annotation.judge(object); if(alarmMessageList != null...

2019-11-06 18:26:41 232

原创 Java实现本地缓存

对于缓存的作用不言而喻,可以提高查询效率,比去DB查询的速度要快。项目中我们经常会使用Nosql数据库,如Redis等做缓存。但是对于数据量很小的,访问非常频繁的,我们也可以存在本地缓存中。我将利用concurrentHashMap等集合容器实现一个本地缓存。1.基于concurrentHashMap的本地缓存。 本地缓存一般使用键值对方式的存储,那么在Java中肯定是选用map...

2019-10-05 09:56:35 6987

原创 谁是代码界3%的王者

最近《Java开发手册(华山版)》推出了,几道易错的问题也随之而来,据说全部答对的人只有2.8%,接下来分析一下这几道题目。(题目来自阿里技术)1.public class FloatPrimitiveTest { public static void main(String[] args) { float a = 1.0f - 0.9f; ...

2019-06-29 14:23:23 457

原创 用Explain分析Mysql的执行计划

Mysql中对于每条执行语句都有一个执行计划,我们用explain+sql语句,就可以查询mysql对该条语句是怎么执行的,查了多少行,是否用到索引等,以此来帮助我们分析sql语句的性能,改善sql语句的编写。如下图:此片文章来记录一下如何看这一堆东西,每个字段是啥意思。1.Type:表示的是单表查询的方式 const: 用主键的等值查询, ...

2019-05-26 13:16:39 1499

原创 Mysql数据库索引

数据库索引一直是数据库学习的一个重点。以下以这几个模块对最近的学习进行一个总结。 (ps:学习的资料来自掘金小册《MySQL 是怎样运行的:从根儿上理解 MySQL》,下文仅仅是个人学习的简单总结,我非常推荐这本,同时作者的微信群也有非常好的解答服务,在此打一波广告) InnoDB引擎的数据存储以及数据查找 在Mysql的架构中,存储引擎是以类似插件的...

2019-05-26 11:39:13 440

原创 你真的能写好业务代码吗?

目录如何用好最常见的字符串String并发编程的利器-锁Java中最简单的浮点数真的懂吗?用好最简单的集合事务真的生效了吗?异常与日志如何用好最常见的字符串StringString的两种创建方式方式一:String name = “hejianfeng”; 这种方式JVM会根据常量池中的对象情况来判断是否创建对象,如果常量池中已经有该对象,就直接复用该对象...

2020-04-15 13:50:16 329

原创 quartz定时任务调度框架

1.quartz的基本认识与结构类QuartzSchedulerThread:负责执行向QuartzScheduler注册的触发Trigger的工作的线程。ThreadPool:Scheduler使用一个线程池作为任务运行的基础设施,任务通过共享线程池中的线程提供运行效率。QuartzSchedulerResources:包含创建QuartzScheduler实例所需的所有资源(...

2020-03-19 15:25:31 319

原创 Swagger的使用

在此前写接口的时候用的都是postman,包括前端也是通过postman进行查看接口的相关信息的,听说Swagger还挺好用的,可以自动生成接口文档,我就与项目整合在一起,发现还行(应前端的要求哈哈哈) 接下来我来记录一下我项目整合的过程吧!我是SpringBoot整合Swagger2 第一步导入相关的包<!-- Swagger --&gt...

2020-02-29 14:12:30 260

原创 Spring学习(1)----程序之间的耦合

这是学习Sping的第一篇文章,我们先来看看再引入Spring之前,我们的程序是怎么走的,是怎么耦合的,Spring又是提供了怎样的解决方案。 生活例子 先举一个生活中的例子,假如我们需要去参加一个高端晚宴,那么作为贵宾,我们当然需要精心装扮打点一下自己。比如皮鞋,西装,那是比不可少。但是假如皮鞋,西装都要我们自己做的话,那该多麻烦,哦!可能还多了一个帽子...

2020-02-25 13:54:56 164

原创 深入理解Java中的反射

目录什么是反射:反射的API:反射的应用:反射的缺点:什么是反射: 先来一个定义:对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制(注意关键词:运行状态)换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(...

2020-02-15 18:51:17 500 1

原创 适配器模式

适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种...

2020-02-15 10:21:23 90

原创 Redis基础

目录Redis的数据结构Redis的过期策略Redis持久化Redis的数据结构String字符串,内存中以字节数组的形式存在。Redis 规定字符串的长度不得超过 512M 字节List:列表:相当于LinkedList 是链表结构不是数组常用于异步队列使用。将需要延后处理的任务结构体序列化成字符串塞进 Redis 的列表,另一个线程从这个列表中轮询数据进...

2020-02-13 17:31:21 113

原创 浅析MyBatis的各个方面

MyBatis的核心组件 SqlSessionFactoryBuilder(构造器):作用是根据配置信息生成SqlSessionFactory(工厂接口) SqlSessionFactory:(工厂接口):作用是生成SqlSession(会话) SqlSession:可以向数据库发送信息的,类似于request对象,或者jdbc的connection对象 S...

2020-02-11 19:36:23 358

原创 关于日常使用MySql数据库

这篇文章主要写一写数据库中几个重要的方面的知识总结,仅仅作为个人的笔记1.字符集与排序规则: utf8mb3:阉割过的utf8字符集,只使用1~3个字节表示字符 utf8mb4:正宗的utf8字符集,使用1~4个字节表示字符。(如果需要存储emoji表情,则需要此字符集)2.主键生成策略: 优先使用用户自定义主键作为主键,如果用户没有定义主键,则选取一个Uniq...

2020-02-10 11:02:17 379

原创 Java中的内存泄漏

1.什么是内存泄漏 简单地讲,内存泄漏就是一个不在使用的对象或者变量一直占用内存,导致 GC 不能回收此对象。2.为什么会产生内存泄漏呢 java里面不是有垃圾回收机制嘛,怎么又会造成内存泄漏(GC不回收的情况呢)? 我们先来了解一下两种比较常用的对象存活判断的方法:引用计数法与可达性分析法 引用计数法:每个对象有一个引用计数属性,新增一个引用时...

2020-02-03 15:36:13 609

原创 MySQL 主从复制

我们之前学习的都是mysql单机的方面,包括如何优化sql,如何使用索引,如何使用查询计划查看sql的执行效率等等。但是随着系统的庞大,复杂,就要考虑到效率,容灾等等方面。这篇文章了解一下主从复制。什么是主从复制 是一种数据备份的方式:是使用两个或两个以上相同的数据库,将一个数据库当做主数据库,而另一个数据库当做从数据库。在主数据库中进行相应操作时,从数据库记录下所有主数据库的操作,使...

2020-02-01 11:11:33 153

原创 单例模式

1.什么是单例模式 2.单例模式在项目中的使用3.有哪些实现方式实现单例模式的要点是 1.私有化构造方法 2.指向自己实例的私有静态引用 3.以自己实例为返回值的静态公有方法实现方式有:延迟加载(懒汉) 与 立即加载(恶汉),区别就是是否用到时候再实例化先来了解一下懒汉式//懒汉式的写法class Singleton{ //私有化构造函...

2020-01-17 19:44:50 111 1

原创 最为基础的Java知识

1.接口与抽象类 资料:https://www.jianshu.com/p/7efced731cab 定义类的过程就是抽象与封装的过程。而接口与抽象类则是对实体类更高一层次的抽象,仅仅是定义公共行为和特征规范。 抽象类被继承时候,体现的是 is-a的关系。抽象类可以定义普通方法,继承抽象类的时候,可以共用该方法。接口是can-do关系(模板式设计)abstrac...

2019-11-28 20:45:43 112

原创 Mysql资料总结

1.关于连接 掘金小册,主要介绍连接的原理https://juejin.im/book/5bffcbc9f265da614b11b731/section/5c061b0cf265da612577e0f4left join 的易错点 :过滤左表用 where 过滤右表用 on 否则会导致数据丢失http://mp.weixin.qq.com/s?_...

2019-11-27 21:01:18 405

原创 分析排序的Map: TreeMap 和 LinkedHashMap

TreeMap: 一种键值按照自然顺序排序的Map,底层保证有序的结构是红黑树 自然排序:基本数据类型会按照ASCII码表排序,String类会按照字典序排序。 也可以自己自定义排序,看TreeMap的构造函数 public TreeMap(Comparator<? super K> comparator) { this...

2019-11-17 10:53:25 354 1

原创 Java 集合中的一些问题

1.数组转集合 1.使用 Arrays.asList()public class Demo { public static void main(String[] args) { String[] array = {"he","jianfe","sa"}; List<String> list = Arrays.asList(array); list.add(...

2019-11-16 17:13:31 597

原创 hashCode与equals详解

我们先看一下Java之中的所有类的父类 Object 里面的hashCode与equals方法: public native int hashCode(); public boolean equals(Object obj) { return (this == obj); }我们知道 “==”这个比较方式比较的是 hashcode的值,也就是说在...

2019-11-13 21:25:52 402

原创 comparable与comparator

先来说说基本的认识:comparable与comparator两者都是接口,实现的方法都是对对象进行排序。 comparable 这个词是以able结尾的,说明是一种能力,一种属性,可参见Serializable,继承了该接口就可以实现序列化了。那么继承 comparable并且重写compareTo方法,就可以让该类的对象拥有与其他同类对象的比较能力。 这是该...

2019-11-11 18:05:32 208

原创 LinkedList 与 ArrayList 操作的效率详解

ArrayList : 动态的数组, 底层实现是基于数组,所谓的动态就是在增加元素时候判断元素个数是否要超过当前容量,依次判断是否需要扩容。扩容的机制就是:赋值一个原来数组大小的1.5倍的数组空间来存放。 相关源码分析:https://www.cnblogs.com/zhangyinhua/p/7687377.html#_label3_1_3_0 Array...

2019-11-09 10:29:19 683

原创 TreeMap的理解

1.TreeMap实现方式 TreeMap实现了Map、SortedMap、NavigableMap、Cloneable、Serializable等接口。 SortedMap规定了元素可以按key的大小来遍历,它定义了一些返回部分map的方法.TreeMap只使用到了红黑树,所以它的时间复杂度为O(log n),我们再来回顾一下红黑树的特性2.TreeMap是有序的?...

2019-10-04 14:11:20 184

原创 一些Java并发编程的问题记录

1.Synchronized的实现原理 同步代码块使用monitorenter和monitorexit两个指令实现,可以把执行monitorenter指令理解为加锁,执行monitorexit理解为释放锁。 每个对象维护着一个记录着被锁次数的计数器。未被锁定的对象的该计数器为0,当一个线程获得锁(执monitorenter)后,该计数器自增变为 1 ,当同一个线程再次获得该对象的锁...

2019-08-12 14:19:25 104

原创 Java中的线程池

1.线程池的好处 上述图片来自阿里的Java开发手册。一般在编程中有用到池的,基本上显而易见的好处就是减少频繁创建而导致的系统开销,比如数据库连接池,线程池的原理也是类似,也是为了解决频繁创建线程而造成的系统开销过大的问题。因为大部分时候可能创建线程浪费的时间何资源比处理程序都多。2.线程池的执行过程 主要的判断分支点在于1.是否超过corePoolSize(核...

2019-07-29 14:10:00 357

原创 Java8的语言特性总结

虽然现在的JDK版本已经到达了11,但是jdk1.8版本的改变依然是浓墨重彩的一笔。本篇博文为自己梳理一些1.8版本的特性。由最重要的开始关键点 1.lambda表达式 2.流以及流的实际编程使用情况3..函数式编程 4.相关的面试题目3.5 默认方法 3.6用Optional博客推荐:https://blog.csdn.net/yitian_66/article/detai...

2019-07-05 17:46:52 229

原创 Redis基本数据类型

Redis有五种基本数据类型:String(字符串),list(列表),set(集合),zset(有序集合),hash(哈希)。接下来一个个分析这五个数据类型。1.Stringredis中String不同于java中的String,这里的字符串是可以更改的字符串,内部的结构类似与Java中的Arraylist,是预分配数组大小(内存中是以字节数组的形式存在的),不够的话在进...

2019-07-05 17:45:32 530

原创 原子类与CAS

JUC包下的原子类是CAS算法运用的典范1.引入(线程安全的累加器)我们来看平常的一个累加器public class AutomicDemo { private static AtomicInteger count = new AtomicInteger(); public void add() { for (int i = 0; i <...

2019-06-07 20:40:11 821

原创 HashSet

1.HashSet的底层实现是什么?它是如何保证不重复的? 底层的实现是HahMap,阅读源码可以发现,构造方法中new了一个HashMap 那么如何保证不重复呢? 在HahMap中key是不可以重复的,value是可以重复的。所以在hashset中就利用了key的特性,将value的值作为一个固定值(毕竟没什么用,主要用key)。. 在hashmap中,如...

2019-06-04 09:10:59 1345

原创 并发编程的基础知识

关于进程与线程 为什么会出现进程? 现在的计算机可以用来做很多的事情,而早期的计算机原本是用来做数学运算的。用户输入什么指令,计算机就做什么操作,当用户在思考或者输入数据的过程中,计算机可能什么都不会做,这样的效率非常低。 能不能把指令先写好,存在计算机中,让计算机自己去读取执行呢?于是批处理操作系统就诞生了。人们先把程序的指令写好交给计算机...

2019-06-01 17:19:33 1380

原创 HahMap的灵魂拷问

带着问题读源码:1.HashMap是线程安全的吗?如果不是,怎么变成线程安全? 不是线程安全的, 可以使用concurrentHashmap 或者 使用Collections类的synchronizedMap方法包装一下2.怎么解决hash冲突的? 用链表3. jdk1.7 与1.8版本的实现有什么差异?做了哪些优化? jdk1.8版本引入了红...

2019-05-29 17:56:45 1368

原创 关于hashcode与equals

关于hashcode与equals1.什么是hashcode,意义何在?object类中提供了方法 public native int hashCode();从Object角度看,JVM每new一个Object,它都会将这个Object丢到一个Hash表中去,这样的话,下次做Object的比较或者取这个对象的时候(读取过程),它会根据对象的HashCode再从Hash表中取这个对象。这...

2019-05-29 10:15:35 1475

转载 hashMap

原文:Java 8系列之重新认识HashMap,有删改。 JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理,文章末尾附有HashMap的p...

2019-05-28 17:34:47 122

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除