自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

IFollowRivers

Now is everything!

  • 博客(135)
  • 收藏
  • 关注

转载 IntelliJ IDEA For Mac 快捷键

转自:https://www.cnblogs.com/wxd0108/p/5295017.html

2019-10-17 16:12:32 240

转载 如何解释关系数据库的第一第二第三范式?

写得很清楚,静下心,认真看一遍就会懂https://www.zhihu.com/question/24696366

2019-10-17 16:00:50 279

原创 Redis底层数据结构

什么是SDS?SDS的数据结构?为什么Redis要使用SDS而不是C字符串?SDS使用len属性的值而不是空字符来判断字符串是否结束。1.常数复杂度获取字符串长度。SDS记录了所存字符串的长度,而C获取字符串长度需要遍历整个字符串,前者将复杂度从O(N)降到了O(1)。2.杜绝缓存区溢出。C字符串在拼接字符串时不会先检查内存的空间是否足够,而SDS内部的字符串拼接函数在拼接字符串前会...

2019-08-28 20:48:27 235

原创 3.无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所...

2019-08-22 20:17:39 200 2

原创 ThreadPoolExecutor类

重点:线程的创建两种方式,一种是new一个ThreadPoolExecutorpublic ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ...

2019-07-23 16:35:45 221

原创 2019.06.17-2019.06.21

Algorithm完成:1. 两数相加https://leetcode-cn.com/problems/add-two-numbers/submissions/该题考查的是链表数据结构,时间复杂度和空间复杂度都是O(max(m,n))。需要注意的地方就是边界值的判断。Review阅读:https://dzone.com/articles/the-java-platform-module-...

2019-06-23 16:10:00 135

原创 2019.06.10-2019.06.14

Algorithm完成:1. 两数之和https://leetcode-cn.com/problems/two-sum/submissions/自己采用的是暴力法,看了官网给的3种解法。时间复杂度为O(n^2),空间复杂度为O(1)。最优解时间复杂度为O(n),空间复杂度为O(n)。最优解突破口:检查数组中是否存在目标元素。如果存在,需要找出它的索引。保持数组中的每个元素与其索引相互对应的最...

2019-06-16 23:01:25 243

原创 Item20: 接口优于抽象类

Java 8中允许接口有默认实现抽象骨架实现。比如

2019-06-14 20:57:33 203

原创 CountDownLatch和ExecutorService结合使用案例

4个人一起打麻将,人到齐了再开始,用CountDownLatch来控制public class TestCountDownLatch2 { private static AtomicInteger id = new AtomicInteger(); private static ExecutorService executorService = new ThreadPoolE...

2019-04-23 20:21:40 1737

转载 SimpleDateFormat线程不安全问题

转自:http://www.cnblogs.com/peida/archive/2013/05/31/3070790.html 想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFor...

2019-04-21 19:07:59 182

转载 Item18:组合优于继承

转自:https://blog.csdn.net/qq_20492999/article/details/80816922#commentBox

2019-04-21 11:48:05 134

原创 Item17:减小可变性

成为不可变类应该遵守的5条规则:1.不要提供修改对象的方法,比如setter方法。2.确保类不能被扩展。禁止类被子类化,通常使用final关键字3.使所有域final4.使所有域private,因为这样可以阻止客户端获取可变对象的引用,从而修改该域5.如果类有可变对象域,要确保客户端无法获取这些可变域的引用,也不要提供方法返回该域的引用,在构造器或访问方法中使用保护性拷贝技术。(可以参...

2019-03-28 20:47:38 167

原创 Item16:在公有类中,使用接入方法而不是使用公有域

注意以下几点:1.如果类可以被包外所访问,为了阻止外部对属性的修改,应该把属性定义为private域而不是public域,提供setter 和getter方法来访问属性2.如果域是不可变类型,用public暴露的话,危害会小些,因为如果不改变类的API,也就不能够改变类的表示。3.如果想暴露域的话,可以用包级私有(即默认类型)或私有内部类来暴露域,无论是可变域还是不可变域。...

2019-03-27 20:35:04 154

原创 Item15:最小化类和成员的可访问性

注意以下几点:1.public static final 域要么包含基本类型,要么包含不可变对象的引用2.如果public static final 域包含可变对象的引用,虽然该引用不能修改,但是它所引用的对象却可以被修改3.非零长度的数组是可变类型,所以不能把数组定义为public static final 域,或者不能提供返回该域的方法。如果有的话,客户端就能够修改数组的内容,从而导致安...

2019-03-27 20:02:21 167

原创 Java 8 流

流什么是流流(Stream)是Java 8 引入的一个新的API,其为集合的处理带来了许多便利。你可以把流看过一个管道(或是流水线),当数据经过该管道(或是流水线)时,会对数据依次进行处理,最终得到想要的结果。而且,流还可以透明地并行处理数据。《Java 8》中对流的定义是从支持数据处理操作的源生成的元素序列流和集合的区别集合中的元素是存在内存中的。集合对数据进行处理前是要先把所有...

2019-03-24 21:19:54 272

原创 item14:实现Comparable接口

Comparable接口提供一个比较的方法compareTo,该方法的入参为泛型源码public interface Comparable<T> { public int compareTo(T o);}方法说明:1.入参为泛型2.如果两种不同类型的对象进行比较,该方法会抛出ClassCastException异常该接口的用途当你需要编写一个“值”类,即该类有...

2019-03-10 21:16:21 342

原创 Item2:当构造器有多个构造参数时,考虑用builder

目录1.重叠构造器模式2.JavaBeans模式3.为了解决上述问题,可以考虑采用Builder 模式:4.结合上面例子,来看一下采用Builder Pattern的几个准则:1.内部Builder类应该有与外部类相同的属性,这样才能利用外部类的私有构造函数来设置属性值2.外部类的构造函数必须是private类型,这样才能阻断外界利用外部类的构造器3.在内部Builde...

2019-02-24 21:04:01 233

原创 ThreadLocal类重点

目录Thread是如何与ThreadLocal关联上的?WeakReference类型有什么作用?如何避免内存泄漏?为何使用静态内部类?首先,来看看ThreadLocal类的类结构图,框出部分比较重要,后文会涉及相关内容。Thread是如何与ThreadLocal关联上的?ThreadLocal类维护一个静态内部类ThreadLocalMap,而ThreadLocalMap又维护一个静态内...

2019-02-24 18:15:12 257

原创 Item5: 采用依赖注入来装配资源

许多类的实现通常会依赖其他资源类。大多数实现会采用以下两种方式把资源类声明为静态实体类弊端:静态实体类是与类绑定的,无法在类实例化的时候修改类依赖的资源实例采用单例模式弊端:把资源实体类定义为final,就无法改变资源类的类型。这两种实现方式都基于了一个前提,这个类的实现只依赖资源类的一种实例。采用依赖注入的方式可以很好地提供灵活性,当在创建类的实例的时候,才把资源类实例传给类构造...

2019-02-02 11:17:19 307

转载 mybatis 中 foreach collection的三种用法

转载:https://www.cnblogs.com/fangyu19900812/p/6046209.htmlforeach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。    item表示集合中每一个元素进行迭代时的别名,    index指 定一个...

2019-01-12 14:11:28 227

转载 JAVA不可变类(immutable)机制与String的不可变性

转自:https://www.cnblogs.com/jaylon/p/5721571.html一、不可变类简介不可变类:所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值。如JDK内部自带的很多不可变类:Interger、Long和String等。可变类:相对于不可变类,可变类创建实例后可以改变其成员变量值,开发中创建的大部分类都属于可变类。二、不可变类的优点说...

2018-10-14 11:31:49 145

转载 toString() 和 强制类型转换 (String)、String.valueOf()的区别

转自:https://www.cnblogs.com/yuxiaoqi/p/3562161.html参考:http://blog.sina.com.cn/s/blog_986844ba01010y7z.html(这篇博是上面参考的博客,写得很好)toString() 和 强制类型转换 (String)简述  在Java中,往往需要把一个类型的变量转换成String 类型。作为菜鸟,...

2018-09-09 16:05:20 1129

转载 Java 枚举(enum) 详解7种常见的用法&深入理解Java枚举类型(enum)

转自:https://blog.csdn.net/qq_27093465/article/details/52180865https://blog.csdn.net/javazejian/article/details/71333103 

2018-08-26 10:58:54 1339

原创 equals与==

equals方法是Object类自带的方法,源码如下:从源码中可以看出,本质上equals方法和==是一样的,都是对比的两个对象的地址是否相同那为什么我们认知上的equals方法通常是用来对比值是否相同,这是因为调用equals方法的类继承了Object类并对equals方法进行了重写,所以才导致equals与==的不同,比如在包装类String中,equals源码如下:从上面...

2018-08-24 11:44:54 288

原创 如何在IntelliJ IDEA在线查看源码的API文档

步骤1: 下载api文档去Sun官网下载api文档 ,下载后(比如jdk-8u181-docs-all.zip)保存在本地,下载地址:http://www.oracle.com/technetwork/java/javase/documentation/jdk8-doc-downloads-2133158.html步骤2: 设置鼠标停留在类上自动显示Javadoc文档,设置方法如下依次...

2018-08-12 11:29:31 26984 1

原创 forEach遍历

2018-08-12 09:37:55 685

原创 Spring装配bean

背景:任何一个成功的应用都是由多个为了 实现某一个业务目标而相互协作的组件构成的。 这些组件必须彼此了解, 并且相互协作来完 成工作。 因此需要创建应用对象之间的关联关系,我们来看看传统的做法和现在的做法。 传统方法及弊端 创建应用对象之间关联关系的传统方法( 通过构造器或者查找) 通常会导致结构复杂的代码, 这些代码很难被复用也很难进行单元测试。 如果情 况不严重的话, 这些对象所做的...

2018-08-05 16:48:58 167

原创 Git基础

版本控制——Git——Git中数据的三种状态Git工作区基本的 Git 工作流程如下:用户信息Git的使用 项目 价格 查看git配置 git config –list 获取帮助 githelp在现有目录中初始化仓库githelp在现有目录中初始化仓库 git help 在现有目录中初始化仓库 git init...

2018-07-22 13:42:07 180

原创 Thread类源码解析

该类实现了Runnable接口。有两种方法用于创建线程:继承Thread类,覆盖run方法申明该类实现了Runnable接口,覆盖run方法1.构造方法thread类一共有9个构造方法,包括8个public构造方法和一个non public构造方法:public Thread() { init(null, null, "Thread-" + nextThreadNum(), 0);...

2018-04-27 11:21:43 446

原创 多线程执行顺序以及run方法的调用

1.多线程的执行顺序先来看一个例子:public class test { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); }}输出结果:main这个例子说明一个问题:一个Java程序至少会有1个线程在运行,就如上面的main()方法,它是...

2018-04-24 21:15:10 6305 1

原创 Object类源码解析

本文的源码来自JDK1.8Object类是Java中所有类的父类Object类结构:Object类方法解析:public final native Class<?> getClass();说明:该方法返回对象的运行时类,返回的Class对象是所表示的类的静态同步方法锁定的对象。?所代表的类实际上是继承了调用该方法的对象的类型。比如:Number n = 0; Class<? ex...

2018-04-18 19:40:21 256

转载 如何在Eclipse中查看Java类库的源代码以及相应的api

说明:网上很多帖子都是选中类,然后点F1,我按这种方法根本打不开API文档,只有下面这个帖子有用,感谢原作者!转自:https://blog.csdn.net/lixingshi/article/details/52184670你的JDK安装目录下%Java_home%/src.zip文件就是源码,解压缩找到对应包下面的类即可。如果是Eclipse开发,ctr+鼠标左击,出现不了源码的话,在弹出的...

2018-04-14 20:21:15 319

原创 Java I/O——InputStream

1. InputStream源码public abstract class InputStream implements Closeable { // MAX_SKIP_BUFFER_SIZE is used to determine the maximum buffer size to // use when skipping. private static final

2018-01-19 14:35:06 382

原创 读书笔记

《精进》——采铜(2017.11-2018.01.08)    诈一听这名字,还是以为是那种索然无味的鸡汤文,充斥着各种讲大道理。然而,这本书并非是死板地空洞地阐述各种道理。与其说是一本鸡汤文,我认为这本书更像是方法论和心理学的结合。书中的大部分观点和方法,作者有给予了心理学上的论证。看多了鸡汤文,一般都会觉得索然无味,因为对于我们而言,道理都懂,就是无法落实行动。我认为无法落实行动的原因除了...

2018-01-08 21:13:40 470

原创 设计模式之装饰模式

参考资料:《大话设计模式》1.装饰模式装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。Component:抽象组件角色,定义一组抽象的接口,规定这个被装饰组件都有哪些功能。ConcreteComponent:实现这个抽象组件的所有功能。Decorator:装饰器抽象类,继承了Component,它持有一个Component对象实

2017-12-06 21:07:55 268

原创 设计模式之适配器模式

参考资料:《大话设计模式》举个通俗易懂的例子,有些国家用110V电压,而我们国家用220V,因此我们的电器,比如笔记本电脑是不能什么电压都能用的,于是就用一个电源适配器,只要是电,不管多少伏,都能把电源变成需要的电压,这就是电源适配器的作用。适配器的意思就是使得一个东西适合另一个东西的东西。1.定义适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口

2017-12-01 20:52:42 295 2

原创 浏览器缓存机制

当我们浏览一个页面时发现有异常的情况下,通常考虑的就是浏览器是不是做了缓存,所以一般的做法就是按Ctrl+F5组合键重新请求一次这个页面,重新请求的页面肯定是最新的页面。因此按Ctrl+F5组合键刷新页面,浏览器会直接向目标URL发送请求,而不会使用浏览器缓存的数据。为了保证用户能够看到最新的数据,必须通过HTTP来控制。当使用Ctrl+F5组合键刷新页面时,会在HTTP的请求头中增加

2017-11-24 21:22:42 240

原创 HTTP报文结构

B/S网络架构的核心是HTTP。要理解HTTP,最重要的就是熟悉HTTP中的HTTP Header,HTTP Header控制着互联网上成千上万的用户的数据传输。最关键的是,它控制着用户浏览器行为和服务器的执行逻辑。HTTP有两类报文:请求报文和响应报文;由于HTTP是面向正文的(text-oriented),因此在报文中的每一个字段都是一些ASCII码串,因而每个字段的长度是不确定的

2017-11-24 19:55:23 416

原创 死锁案例及查看方法

死锁:指的是两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,如果无外力作用,它们都将无法推进。* @function 死锁案例 */public class DeadLockDemo { private static String A="A"; private static String B="B"; public static void main(

2017-08-24 21:48:00 593

原创 二分法——【Search Insert Position】【Search for a Range】【数字在排序数组中出现的次数】

【Search Insert Position】 https://leetcode.com/problems/search-insert-position/description/Given a sorted array and a target value, return the index if the target is found. If not, return the

2017-08-22 22:27:54 345

空空如也

空空如也

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

TA关注的人

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