自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 实现红黑树的插入方法

红黑树插入方法实现红黑树的简介红黑树的结构功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入红黑树的简介红黑树(Red...

2020-06-10 10:52:54 411

转载 StringUtils.split()和string.split()的区别

场景出于业务考虑,将多个字符串拼接起来时,使用的分隔符是;,;。如果要将这样一个拼接来的字符串分割成原本的多个字符串时,就需要使用到jdk自带的split()方法。不过因为公司的编程规范,改为使用了Apache工具类的StringUtils.split()。之后就发现,当被拼接的字符串里含有;或,时,就会出现分割不正确的问题。具体例子下面的代码,使用了上述的两种split方法,猜猜结果是什么。public class Test { public static void main(fina

2020-06-10 10:47:14 252

原创 集合中的containsKey,containsValue,contains,containsAll方法使用注意

常用的 HashMap 的containsKey,containsValue 方法:常用的 ArrayList 的 contains,containsAll 方法:注意的是,containsAll 方法是在 AbstractCollection 抽象类中。通过查看源码,可以看到在这些方法中,均是通过调用了 object 的 equals 方法进行比较,但是如果传入的 object 未重写 equals 和 hashcode 方法,将比较对象的地址,最终会导致结果为 false,需要注意如果只

2020-06-01 10:51:24 940

转载 java中快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?

一:快速失败(fail—fast)在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变modCount的值。每当迭代器使用hashNext()/n...

2020-02-11 20:30:02 394

原创 Iterator和ListIterator的区别是什么

Iterator 和 ListIterator 都是迭代器。区别在于:1.ListIterator 只能对 List 迭代,而 Iterator 不仅可以对 List 迭代,还可以迭代 Set。2.ListIterator 可以双向迭代,而 Iterator 只能单向迭代。3.ListIterator 继承 Iterator 接口增加了更多的方法,如下图。...

2020-02-11 20:16:46 567

转载 在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?什么是死锁(deadlock)?如何确保N个线程可以访问N个资源同时又不导致死锁?

在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?参考答案监视器和锁在Java虚拟机中是一块使用的。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。每一个监视器都和一个对象引用相关联。线程在获取锁之前不允许执行同步代码。在 java 虚拟机中, 每个对象( Object 和 class )通过某种逻辑关联监视器,每个监视器和一个对象引用相关联, 为了...

2020-02-11 16:30:24 350

转载 概括地解释下线程的几种可用状态

1.新建(new):新创建了一个线程对象。2.可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权。3.运行(running):可运行状态(runnable)的线程获得了cpu 时间片(timeslice ),执行程序代码。4.阻塞(block):阻塞状态是指线程因...

2020-02-11 16:11:48 136

原创 创建线程有几种方式

程序中,我们经常需要使用到线程来帮我们做事情,那么创建线程有哪些方式呢?1.继承 Thread 类,并且重写 run() 方法。2.实现 Runnable 接口,并且重写 run() 方法。3.实现 Callable 接口,并且重写 call() 方法。4.使用 Executors 类创建线程池。第一种方式直接调用 start() 方法即可。第二种方式需要 Thread 类包装后调用 ...

2020-02-10 21:43:06 588

转载 Java是值传递还是引用传递?

面试官:你好,你能说出下面个程序的执行结果吗?public class Test {public static void main(String[] args) { String name = "Scott"; int age = 5; User user = new User(); user.setName(name); user.setAge(age); System.out....

2020-02-10 15:58:48 114

转载 接口和抽象类有什么区别

接口和抽象类有什么区别他们都不能实例化对象,都可以包含抽象方法,而且抽象方法必须被继承的类全部实现。区别:1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。2、抽象类要被子类继承,接口要被类实现。3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现4、接口里定义的变量只能是公共的静态的常量...

2020-02-10 15:22:56 97

原创 lambda表达式求解交集和子集问题

啥也不说了,先上代码public static List<Map<String, Object>> filterResult(List<Map<String, Object>> resultMaps, Map<String, Object> params) { if (null != params) { ...

2019-10-11 15:41:41 456

转载 Java8 lambda表达式10个示例

例1、用lambda表达式实现Runnable我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例。看一下Java 8之前的runnable实现方法,需要4行代码,而使用lambda表达式只需要一行代码。我们在这里做了什么呢?那就是用() -> {}代码块替代了整个匿名类。// Java 8之前:new Thread(ne...

2019-10-11 14:36:04 108

转载 tk.mybatis通用方法记录(自用)

等号的CRUD:List select(T record); 根据实体中的属性值进行查询,查询条件使用等号T selectByPrimaryKey(Object key); 根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号List selectAll(); 查询全部结果,select(null)方法能达到同样的效果T selectOne(T recor...

2019-09-25 14:22:54 1382

转载 双频wifi是什么意思 双频wifi好处有哪些

很多朋友都在谈论双频Wifi,并且都不够了解,不知道双Wifi是什么意思,也不知道其有什么用。这里就来为大家科普一下双频Wifi是什么意思。1、什么是双频wifi所谓双频wifi,是指同时支持两个不同频段的无线信号,这两个网段分别为2.4G和5G,支持802.11a/b/g/n/ac技术,属于第五代wifi传输技术。目前大多数无线产品均采用单频2.4G wifi无线传输,比如无线鼠标、 键盘 ...

2019-09-19 15:42:03 3699

转载 Redis GEO 应用

最近在项目中遇到了需要通过高德/百度经纬度获取APP所在地域的问题。为了提高系统定位速度,我们将高德经纬度信息进行缓存。技术调研后,发现redis支持geo相关功能,总结如下:redis自3.2版本起,新增了GEO(地理位置)功能。改功能可以将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。这些数据将会存储到sorted set。这样的目的是为了方便使用GEORADIUS或者GEOR...

2019-09-10 11:42:56 411

原创 一次线上服务调用超时优化问题

最近线上环境有个文件列表超时无响应去数据库模拟查询后发现需要打约1200ms左右的时间,但是线上的服务调用超时时间设置的1000ms改动之前逻辑是在一个for循环中会访问三次数据库,造成比较多的访问数据库开销for( D d : list ) { .... AEntity a = aDao.getById( bId ); if( a!= null ) { .... BEntit...

2019-09-04 20:05:06 426

原创 IDEA启动后突然闪退

给idea装了mybatis plugin插件后,开启后一段时间就会突然闪退插件一次性装了很多,然后一个个试过之后发现是该插件的问题卸载后就不会出现该问题,可以改装free mybatis plugin,完美解决。...

2019-09-04 19:22:36 746

转载 解决SecureCRT中文乱码解决方法--字符集设置(Linux环境)

我们经常使用SecureCRT工具,但有时会碰到乱码,看到这些会非常痛苦,如下图所示:这次决定去研究下,先去百度了一把,解决步骤如下,做了一个笔记,以便以后查询:1、首先进入 SecureCRT工具的“选项”菜单 >> 点击“会话选项”菜单,如下图如示:2、点击“终端”菜单下面的“仿真”菜单,在右边 “终端”下拉菜单中选择"Linux", "ANSI 颜色"前面打上勾,如下...

2019-08-20 15:10:58 2035

原创 悲观锁和乐观锁

悲观锁总是认为处于最坏的环境,每次操作数据都认为其他线程也会修改,所以操作前加锁,防止 其他线程同时操作数据,比如synchronized、Lock就是悲观锁,数据库中的行锁,表锁,读锁,写锁都属于悲观锁。乐观锁总是认为每次操作不会有其他线程同时操作,不会加锁,但在每次更新数据前会判断数据在此期间内是否已被修改,如果没有则正常修改,否则就放弃此次修改,然后循环一直到满足条件修改成功。一般乐观...

2019-04-04 16:59:23 98

原创 浅谈线程池 ThreadPoolExecutor 以及工具类 Executors

Executors 工具类提供了四种不同的线程池来帮助我们创建不同需求的线程池:1.newCachedThreadPool():这是一个可以缓存的线程池,当有新任务时,如果线程池内有空闲线程,则使用空闲线程,如果线程池内没有空闲线程,则新建一个线程执行任务。空闲线程超过60秒会被回收掉。2.newFixedThreadPool(int nThreads):这是一个定长的线程池,线程池内的线...

2019-04-04 16:00:03 1079

原创 了解 CountDownLatch、CyclicBarrier、Semaphore 的用法

CountDownLatch:当某个线程需要等待其他几个线程执行完毕,才能够执行任务时就可以使用 CountDownLatch 来实现。CountDownLatch 它的初始值为指定线程的个数,每当一个被指定的线程执行完了任务后,调用其 countdown() 方法,使计数器减1,也就意味着该线程已经完成任务。如果指定的全部线程都已经执行完毕,那么计数器就会减少至0,这时被指定线程全部完成。被...

2019-04-02 16:07:42 117

转载 设计模式之代理模式

为了了解代理模式是什么,我在网上查了一些资料。通俗来说就是被代理的对象无法执行或者说不想执行某个方法而使用一个该对象的代理对象来帮助执行该方法。并且,这个代理对象需要拿到被代理对象的信息。举个例子来说,过年回家,因为火车票很紧张,所以自己没办法抢到票,只能通过黄牛来帮助自己抢票,而黄牛抢票必须要得到我的信息,才能帮助抢票。接下来,按照这个例子,我们实现一下JDK的动态代理首先要有Proxy...

2019-03-24 18:38:36 67

原创 StringBuffer源码解析

String 是我们用到非常多的一个类,对于 String 做大量的操作,如果只使用 String 的话,效率没有那么高。一般会推荐使用 StringBuffer 和 Stringbuilder 来做字符串的操作。那么 StringBuffer 和 StringBuilder 的区别是什么呢?StringBuffer 是线程安全的,因为它里面的方法都被 synchronized 关键字修饰,例...

2019-03-22 17:05:34 494 2

原创 模拟实现mybatis框架(跟原框架有出入)。

本次实现是非常基础的模拟实现,大佬们可以不用看了,如果对mybatis不怎么了解的同学可以看一看。先看一下整个实现的结构目录,如下图:第一步,加载配置的 mapper 文件public class ChampionConfiguration { private static List<MapperBean> mappers = new ArrayList<&gt...

2019-03-20 11:52:07 260 2

原创 ArrayList中remove(int index)方法中为什么不使用fastRemove方法?

今天在看 ArrayList 源码时,我发现了一个疑问。ArrayList 有两个删除的方法分别是 remove(int index) 和 remove(Object o) 方法。 public E remove(int index) { rangeCheck(index); // 检查下标是否合法 modCount++; // 修改次数加一 ...

2019-03-18 15:58:41 964 1

原创 HashMap 和 ConcurrentHashMap 源码解析(JDK1.8)(红黑树部分没有解析)

以前也有看过 HashMap 的源码,但看的比较浅,这次对比 ConcurrentHashMap 一起再学习一遍。HashMap 部分:看了许多博客对比分析觉得这一篇还不错,参考了其中的解析思维https://blog.csdn.net/m0_37914588/article/details/82287191HashMap的结构图:数据结构图首先我们先把 HashMap 中的成员变...

2019-03-16 12:11:35 348

空空如也

空空如也

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

TA关注的人

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