自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法——动态规划

动态规划

2022-09-13 16:25:33 721 1

原创 Mybatis的插件分页原理

Mybatis

2022-07-25 14:25:23 4476

原创 mybatis一级缓存和二级缓存理解与区别

mybatis的一级缓存和二级缓存

2022-07-21 18:02:10 356

原创 使用aop代理获取不到Annotation注解问题

问题场景:使用aop切面方法执行一些业务,过程中获取自定义注解,并对自定义注解中的注入字段进行其他操作执行的方法是有注解的,但是通过Annonation an = method.getAnnonation(UserStatus.class)取值为null。注意:执行的方法是接口实现类原因:代理对象和目标对象的问题,通过代理模式生成代理对象上的方法不不会有注解,我们在获取的时候只能从目标对象中获取异常写法:Method method=((MethodSignature)point.get.

2022-04-21 19:59:18 1617

原创 谈一谈CAS实现

1. 什么是乐观锁与悲观锁?悲观锁总是假设最坏的情况,每次读取数据的时候都默认其他线程会更改数据,因此需要进行加锁操作,当其他线程想要访问数据时,都需要阻塞挂起。悲观锁的实现:1. 传统的关系型数据库使用这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁;2. Java里面的同步 synchronized 关键字的实现。乐观锁乐观锁,其实就是一种思想,总是认为不会产生并发问题,每次读取数据的时候都认为其他线程不会修改数据,所以不上锁...

2022-03-17 16:22:22 1506

原创 JVM基础储备

JVM从编译到执行Java程序的执行过程一个Java程序,首先经过javac编译成 .class 文件,然后JVM将其加载到方法区,执行引擎会执行这些字节码。执行时,会翻译成操作系统相应的函数。JVM作为 .class 文件的翻译存在,输入字节码,调用操作系统函数。过程如下:Java文件->编译器->字节码->机器码JVM、JRE、JDK的关系JVM只是一个翻译,把class翻译成机器识别的代码。开发伙伴在编写代码的时候,需要依赖的类库是在jre中,JVM标准加上实现的

2021-11-17 09:14:21 237

原创 CPU密集和IO密集型的区别

CPU密集CPU密集型也是计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时系统的大部分的状况是CPULoading100%,CPU读写I/O(硬盘/内存),I/O在很短时间就可以完成,而CPU还有很多运算要进行,CPULoading很高。CPU密集指的是该任务需要大量的运算,而没有阻塞,CPU在全速运行。CPU密集任务只有真正的多核CPU才可能得到加速(多线程),而在单核CPU上,无论你在开几个模拟的多线程该任务都不可能得到加速,因为CPU总的运算能力有限。CPU使用率高(例...

2021-08-01 10:54:34 786

原创 线程池

一、我们为什么使用线程池? 我们在处理的任务较少时,可以手动进行创建线程去处理,但是在高并发的场景下,需要处理的任务量很多,频繁的创建线程会大大降低系统的效率。此时,我们就可以使用线程池,线程池中的线程执行完一个任务后可以复用,并不被销毁。合理的使用线程池可以达到:1.减少资源的开销。通过复用线程,降低创建销毁线程造成的消耗。2.多个线程并发执行任务,提高系统的响应速度。3.可以统一的分配,调优和监控线程,提高线程的可控性。...

2021-04-17 19:14:17 88

原创 应用多线程遇到的坑

场景描述:获取产品列表,数据维护方在外部系统,通过外部接口获取到全量数据,自己在对数据进行处理;在访问接口获取数据的时候采用多线程,在子线程中通过JSONObject传递接口参数public class TestThreadTest implements Runnable { JSONObject json; @Override public void run() { System.out.println(Thread.currentThread().get

2021-03-23 13:45:17 138

原创 归并排序(Merge Sort)

定义:归并排序,是一种创建在归并操作的基础上的排序算法,归并排序思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。基本思想:归并排序是基于分治思想,分治模式在每一层递归上有三个步骤:1. 分解:将n个元素分解成n/2个元素的子序列2. 解决:用合并排序法将两个子序列排序3. 合并:将两个有序的子序列合并递归实现:① 将序列每相邻两个数字进行归并操作,形成floor(n/2)个序列,排序后每个序列包含两个元素② 将上述序列再次归并,形

2021-03-21 22:44:13 113

原创 Java常用类-枚举类

枚举类的定义枚举类是一种特殊类,它和普通类一样可以使用构造器、定义成员变量和方法,也可以实现多个接口,但不能继承类。枚举类的关键词是enum使用场景在生活中有一些对象是固定的,比如季节:春夏秋冬;一周天数:星期一等,这时就可以用到Java中的枚举类了。示例://在设置类名时应用驼峰命名,后缀最好是Enum,枚举类中的实例对象应全部大写public enum WeekEnum { MONDAY("星期一",1), TUESDAY("星期二",2), WEDNE

2021-01-26 20:44:13 119

原创 顶级域名(一级域名)、二级域名、三级域名的区别与介绍

域名:域名相当于一个人名,通过域名可以访问到网站,也能让人们更清楚的记住网站,域名是网站的三大组成元素之一,其余为程序和空间,所以域名也是世界上独一无二的。域名是两个或两个以上的词构成,中间由点号隔开。顶级域名:最右边的那个词,顶级域名分为两类:一是国家或者地区顶级域名,例:中国.cn 、美国.us ; 二是国际顶级域名,例:工商企业是.com、非盈利组织.org、表示网络商的.net一级域名又称顶级域名,即:baidu.com二级域名例如:www.baidu.com,.baid

2020-07-22 17:39:00 44762

原创 在IDEA中使用Git需要注意的地方

Git是分布式版本管理系统,也就是没有中央处理器的,每个人的电脑就是一个完整的版本库!因为没想着详细介绍Git的概念啥的,就说这一句说说就得了!☺️☺️场景:我们在日常工作中,需要将自己写的“bug”提交到git中,有时候两个人同时开发一个功能,在提交代码的时候可能会出现冲突,该如何提交代码,以及怎么解决冲突呢?git add 这个操作是将你修改的文件提交到缓存区...

2020-07-22 17:14:45 303

原创 MySQL中Group By遇到 SELECT list is not in GROUP BY clause and contains nonaggregated ........

遇见的报错具体是这样的:Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'a.time2' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by大概的意思就是:select 语句中的

2020-07-09 15:26:27 919

原创 MySQL中count和sum区别和注意事项

这两个函数我们平时应该用的都比较多,在此记录一下自己填坑的事件!count函数count()函数是统计查询结果中的行数,他是能自动忽略掉NULL这个值的,如果我们有以下表 user_auth使用count()函数再来查,mysql > select count(*) from user_auth ; 就会得到数据: 注意:count会忽略掉 NULL 的结果,所以count(字段名)这样使用的话,如果字段中包含为null的结果,将导致查...

2020-05-15 20:32:51 537

原创 Java中如何判断字符串为空或者不为null?

首先,啥是空串?字符串的长度为0,也就是"",一点内容都没有的就是空串!null串表示目前没有任何对象与该变量关联。判断是不是空串?if(str.length == 0)或者if(str.equals(""))判断是不是null?if(str == null)注意不要用 if(str.equals(null))检查一个字符串既不是null串也不是空串,多用以下方...

2020-04-12 14:44:36 2476

转载 JVM中垃圾回收机制及垃圾收集器详解

一、垃圾收集算法1.标记-清除算法最基础的收集算法是“标记-清除”(Mark-Sweep)算法,如同它的名字一样,算法分为“标记”和“清除”两个阶段。①首先标记出所有需要回收的对象②在标记完成后统一回收所有被标记的对象。不足:效率问题:标记和清除两个过程的效率都不高空间问题:标记清除之后产生大量不连续的内存碎片,空间碎片太多可能会导致以后程序运行过程中需要分配较大对象时...

2019-06-13 22:29:15 142

原创 进程与线程的区别

一、进程的状态与转换运行状态:进程正在处理机上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。就绪状态:进程已处于准备运行的状态,即进程获得了除处理机之外的一切所需资源,一旦得到处理机即可运行。阻塞状态,又称等待状态:进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。注意区别就绪状态和等待状态...

2019-06-13 22:00:11 208

原创 单例模式

一、单例模式1.定义作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。2.特点单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。二、创建单例模式的方式①懒汉式,线程不安全懒汉式其实是一种比较形象的称谓。既然懒,那么在创建对象实例的时候就不着急。会一直等到马上...

2019-06-13 21:59:26 125

原创 Java中抽象类与接口有什么区别

理解抽象abstract class和interface是Java中对于抽象类定义两种机制,正是由于这两种机制的存在,才赋予Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有相当大的相似性,设置可以互相替换,因此在进行抽象类定义时显得比较随意。其实,两者还是由差别的,对于他们的选择设置反映出对于问题空余本质的理解,对于涉及意图的理...

2019-06-13 20:55:16 12560

转载 计算机网络——TCP/IP

一、TCP/IP模型TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。下图表示TCP/IP模型与OSI模型各层的对照关系。TCP/IP协议族按照层次...

2019-06-06 23:10:27 351

原创 计算机网络——HTTP

一、 HTTP请求和响应步骤以上完整表示了HTTP请求和响应的7个步骤,下面从TCP/IP协议模型的角度来理解HTTP请求和响应如何传递的。二、TCP/IP协议TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议,通过20多年的发展已日渐成熟,...

2019-06-06 23:08:36 165

原创 HTTPS

我们知道HTTPS能够加密信息,以免敏感信息被第三方知道。在很多银行或者电子邮箱上都使用安全级别较高的服务都会采用HTTPS协议。HTTPS协议简介HTTPS其实是由两部分组成:HTTP+SSL/TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端与客户端的信息都是通过TLS进行加密的,所以传输的数据都是经过加密后的数据。具体是如何加密,解密,验证的,看看下面的图片。1....

2019-06-03 10:44:31 187

转载 Android中的事件分发机制

一、基础认知1.1 事件分发的对象是谁?答:事件当用户触摸屏幕时(View和ViewGroup派生的控件),将产生点击事件(Touch事件)Touch事件相关细节(发生触摸的位置、时间、历史纪录、手势动作等)被封装成MotionEvent对象主要发生的Touch事件有如下四种: MotionEvent.ACTION_DOWN:按下View(所有事件开始...

2019-05-19 20:00:53 231

原创 Service详细解说

一、Service简介Service是Android程序中的四大组件之一,和Activity一样是Context的子类,只不过他没有UI界面,是在后台运行的组件。Service是Android中实现程序后台运行的解决方案,非常适合于去执行那些不需要和用户交互而且长期运行的任务。Service默认并不会运行在子线程中,也不会运行在一个独立的进程中,他同样执行在UI线程中,因此,不要在Serv...

2019-05-18 22:52:43 547

原创 IntentService详解

一、定义IntentService是Android里面的一个封装类,继承自四大组件之一的Service。二、作用处理异步请求,实现多线程三、工作流程注意:若启动IntentService多次,那么每个耗时操作则是以队列的方式在IntentService的onHandleIntent回调方法中依次执行,执行完自动结束。四、实现步骤1. 定义IntentService...

2019-05-17 23:16:58 249

原创 Android消息机制

一、消息机制概述1. 消息机制的简介在Android中使用消息机制,我们首先想到的就是Handler。Handler是Android消息机制的上层接口,通过它可以轻松将一个任务切换到Handler所在的线程中取执行。通常情况下,Handler的使用场景是更新UI。public class Activity extends android.app.Activity { priv...

2019-05-17 21:41:07 138

转载 Fragment小记

一、这篇文章总结了点啥什么是Fragment Fragment的生命周期 Fragment的使用 什么是Fragment的回退栈? Fragment和Activity通信的优化 怎么处理运行时配置发生的变化(以屏幕翻转为例)二、Fragment详解1. 什么是Fragment?简单的理解,Fragment是显示在Activity中的Activity。他可以显示在Activi...

2019-05-11 01:15:32 155

原创 Java虚拟机——对象的创建、内存布局和访问定位

一、对象的创建1. 虚拟机遇到一个new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用;2. 检查这个符号引用代表的类是否已经被加载,解析和初始化过。如果没有,那必须先执行响应类加载过程;3. 在类加载检查通过以后,为新生对象分配内存。对象所需要的内存大小在类加载完成之后可以完全确定。二、对象的内存布局分为3个区域:对象头,实例数据,对齐填充对象头...

2019-05-09 22:31:35 122

转载 Java内存区域与内存模型

一、Java内存区域方法区(公有):用户存储已被虚拟机加载的类信息,常量,静态常量,即时编译器编译后的代码等数据。异常状态OutOfMemoryError其中包括常量池:用户存放编译器生成的各种字面量和符号引用。堆(公有):是JVM所管理的内存中最大的一块。唯一目的就是存放实例对象,几乎所有的对象实例都在这里分配。Java堆是垃圾收集器管理的主要区域,因此很多时候也被称为“GC堆”。异...

2019-05-09 21:13:44 84

原创 Java并发——Java中创建线程的方式

一、继承Thread类创建线程类(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此将run()方法称为执行体。(2)创建Thread子类的实例,即创建了线程对象。(3)调用线程对象的start()方法来启动该线程。public class FirstThreadTest extends Thread { int i ...

2019-05-08 22:52:11 71

原创 Java集合类——TreeMap

一、概述在之前总结的HashMap和LinkedHashMap,HashMap不保证数据有序,LinkedHashMap保证数据可以保持插入顺序,如果我们希望Map可以保持key的大小顺序的时候,我们就需要TreeMap了。TreeMap<Integer, String> tmap = new TreeMap<Integer, String>();tmap.pu...

2019-05-03 11:59:18 134

原创 Java集合类——LinkedHashMap

一、概述在总结了HashMap以后,现在来看看LikedHashMap的工作原理以及实现。首先还是先整一段LinkedHashMap程序:LinkedHashMap<String,Integer> lmap = new LinkedHashMap<String,Integer>();lmap.put("语文", 1);lmap.put("数学", 2);lm...

2019-05-03 10:34:16 113

原创 Java集合——HashMap

将总结的内容记录下来,方便他人,也能防止自己遗忘!脑容量不够的时候,真是捉急啊!一、概述1. 什么时候会使用HashMap?有什么特点呢?2. HashMap的工作原理3. get和put的原理是怎么的?equals()和hashCode()都有什么作用?4. hash的实现,为什么要这样实现呢?5. 如果HashMap的大小超过了负载因子(load factor)定义的容...

2019-05-03 00:13:44 83

原创 Java集合——LinkedList

一、概述以双向链表实现。链表无容量限制,但是双向链表本身使用了更多的空间,也需要额外的链表指针操作。按照下标访问数据——get(i)/set(i,e),要遍历链表指针移动到位(如果i>数组大小的一半,会从末尾移起)。插入、删除元素时修改前后节点的指针即可,到那时还要遍历部分链表的指针才能移动下标所指的位置,只在链表两头的操作——add(),addFirst(),removeLas...

2019-05-02 01:55:05 85

原创 Java集合——ArrayList集合

一、概述以数组实现。节约空间,但是数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10 的数组。按照数组下标来访问元素——get(i)/set(i,e)的性能很高,这是数组的基本优势。直接在数组末尾加入元素——add(e)的性能也很高,但是如果按下标出入、删除元素——add(...

2019-05-02 01:54:46 115

原创 Java基础之Java集合类

一. Java集合类简介Java集合大致可以分为Set、List、Queue和Map四种体系。其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map则代表具有映射关系的集合。Java5又增加了Queue体系集合,代表一种队列集合实现。Java集合就像是一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称为对象)“丢进”该容器中。从Java5增加了泛型之后,Java...

2019-05-02 01:54:24 147

原创 Android的四大组件之Activity解析

目录一. Activity的生命周期二. Activity的启动模式一. Activity的生命周期在本小节内容中将activity的生命周期分为两个部分进行介绍,第一部分先了解下典型的生命周期的7个部分以及Activity的状态。第二部分中介绍Activity在一些特殊情况下的生命周期的经历过程。好了,下面开始“白话”,哈哈!1. 典型的Activity的生命周期...

2019-05-02 01:53:02 102

原创 在大多数情况相同的dp和sp,到底有什么区别?

在Android的屏幕适配中,dp和sp存在差别。dp只和屏幕的像素密度有关;而Android系统是支持用户自定义文字的大小,当文字处于默认状态的时候,1sp=1dp,而当文字尺寸由用户改变后,1sp和1dp则变得不相等。...

2018-11-16 21:22:44 1931

原创 在新创建的项目中,出现依赖包冲突问题

Error:Execution failed for task ':app:preDebugAndroidTestBuild'.&gt; Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.0) and test...

2018-09-11 19:21:53 274

空空如也

空空如也

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

TA关注的人

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