博客园 - 楼兰剑客
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=153408
2019-05-02T04:38:47Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
feed.cnblogs.com
https://www.cnblogs.com/lanjianblog/p/10802061.html
springboot项目:jar中没有主清单属性 - 楼兰剑客
在pom.xml文件添加: 重新打包即可
2019-05-02T04:39:00Z
2019-05-02T04:39:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】在pom.xml文件添加: 重新打包即可 <a href="https://www.cnblogs.com/lanjianblog/p/10802061.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10800491.html
IDEA连接数据库后如何显示表 - 楼兰剑客
2019-05-01T11:21:00Z
2019-05-01T11:21:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】 <a href="https://www.cnblogs.com/lanjianblog/p/10800491.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10789706.html
Java虚拟机运行时数据区域及垃圾回收算法 - 楼兰剑客
程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。 Java 虚拟机栈 每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程
2019-04-29T04:28:00Z
2019-04-29T04:28:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。 Java 虚拟机栈 每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程 <a href="https://www.cnblogs.com/lanjianblog/p/10789706.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10767742.html
synchronized原理 - 楼兰剑客
首先要介绍对象头,对象头包含两个部分,一个是指向类信息,一个保存对象运行时相关数据,称之为mark word。 偏向锁:线程申请获取偏向锁时,首先检测锁对象ThreadID是否为当前线程id,如果是,则直接进入临界区,否则用cas操作尝试修改ThreadID为当前线程id,如果成功则进入临界区,如果
2019-04-25T04:38:00Z
2019-04-25T04:38:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】首先要介绍对象头,对象头包含两个部分,一个是指向类信息,一个保存对象运行时相关数据,称之为mark word。 偏向锁:线程申请获取偏向锁时,首先检测锁对象ThreadID是否为当前线程id,如果是,则直接进入临界区,否则用cas操作尝试修改ThreadID为当前线程id,如果成功则进入临界区,如果 <a href="https://www.cnblogs.com/lanjianblog/p/10767742.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10767738.html
concurrentHashMap求size - 楼兰剑客
在 JDK1.7 中,首先会使用不加锁的模式去尝试多次计算 ConcurrentHashMap 的 size,最多三次,比较前后计算的结果,结果一致就认为当前没有元素加入,计算的结果是准确的。如果不符合,就会给每个 Segment 加上锁,然后计算 ConcurrentHashMap 的 size
2019-04-25T04:37:00Z
2019-04-25T04:37:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】在 JDK1.7 中,首先会使用不加锁的模式去尝试多次计算 ConcurrentHashMap 的 size,最多三次,比较前后计算的结果,结果一致就认为当前没有元素加入,计算的结果是准确的。如果不符合,就会给每个 Segment 加上锁,然后计算 ConcurrentHashMap 的 size <a href="https://www.cnblogs.com/lanjianblog/p/10767738.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10767735.html
Java类加载机制 - 楼兰剑客
1、加载 1)通过类的全限定名,获取类的字节码文件的二进制流 2)将二进制流所代表的静态存储结构转化为方法区的运行时数据结构 3)在内存中生成一个class对象 2、验证 1)文件格式验证 2)元数据验证 3)安全验证 3、准备 为类变量分配内存并设置初始值 4、解析 将符号引用转化为直接引用 5、
2019-04-25T04:36:00Z
2019-04-25T04:36:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】1、加载 1)通过类的全限定名,获取类的字节码文件的二进制流 2)将二进制流所代表的静态存储结构转化为方法区的运行时数据结构 3)在内存中生成一个class对象 2、验证 1)文件格式验证 2)元数据验证 3)安全验证 3、准备 为类变量分配内存并设置初始值 4、解析 将符号引用转化为直接引用 5、 <a href="https://www.cnblogs.com/lanjianblog/p/10767735.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10758114.html
fail-fast和fail-safe的区别 - 楼兰剑客
fail-fast(快速失败):多线程情况下,一个线程通过迭代器读取集合中的值时,另一个线程修改了集合,则会抛出ConcurrentModificationException异常; 集合中通过modCount记录集合被修改的次数,每次执行next和remove方法的时候都会先检查这个modCount
2019-04-23T10:31:00Z
2019-04-23T10:31:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】fail-fast(快速失败):多线程情况下,一个线程通过迭代器读取集合中的值时,另一个线程修改了集合,则会抛出ConcurrentModificationException异常; 集合中通过modCount记录集合被修改的次数,每次执行next和remove方法的时候都会先检查这个modCount <a href="https://www.cnblogs.com/lanjianblog/p/10758114.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10758110.html
线程的状态及其转换 - 楼兰剑客
新建(new):新创建了一个线程对象。 可运行(就绪)(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权。 运行(running):可运行状态(runnable)的线程获得了cpu
2019-04-23T10:30:00Z
2019-04-23T10:30:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】新建(new):新创建了一个线程对象。 可运行(就绪)(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权。 运行(running):可运行状态(runnable)的线程获得了cpu <a href="https://www.cnblogs.com/lanjianblog/p/10758110.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10758100.html
hashCode 与 equals - 楼兰剑客
面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” hashCode()介绍 hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashC
2019-04-23T10:28:00Z
2019-04-23T10:28:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” hashCode()介绍 hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashC <a href="https://www.cnblogs.com/lanjianblog/p/10758100.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10758085.html
Java成员变量与局部变量的区别 - 楼兰剑客
从语法形式上看,成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;但是,成员变量和局部变量都能被final所修饰。 从变量在内存中的存储方式来看,成员变量是对象
2019-04-23T10:26:00Z
2019-04-23T10:26:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】从语法形式上看,成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;但是,成员变量和局部变量都能被final所修饰。 从变量在内存中的存储方式来看,成员变量是对象 <a href="https://www.cnblogs.com/lanjianblog/p/10758085.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10751426.html
接口和抽象类的区别 - 楼兰剑客
接口的方法默认是public abstract,所有方法在接口中不能有实现,抽象类可以有非抽象的方法。(从 Java 8 开始,接口也可以拥有默认的方法实现,这是因为不支持默认方法的接口的维护成本太高了。在 Java 8 之前,如果一个接口想要添加新的方法,那么要修改所有实现了该接口的类。) 接口中
2019-04-22T09:29:00Z
2019-04-22T09:29:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】接口的方法默认是public abstract,所有方法在接口中不能有实现,抽象类可以有非抽象的方法。(从 Java 8 开始,接口也可以拥有默认的方法实现,这是因为不支持默认方法的接口的维护成本太高了。在 Java 8 之前,如果一个接口想要添加新的方法,那么要修改所有实现了该接口的类。) 接口中 <a href="https://www.cnblogs.com/lanjianblog/p/10751426.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10751409.html
String 和 StringBuffer、StringBuilder - 楼兰剑客
String为什么不可变? 简单的来说:String类中使用final关键字字符数组保存字符串,private final char value[],所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder
2019-04-22T09:26:00Z
2019-04-22T09:26:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】String为什么不可变? 简单的来说:String类中使用final关键字字符数组保存字符串,private final char value[],所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder <a href="https://www.cnblogs.com/lanjianblog/p/10751409.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10751380.html
Java重载和重写的区别 - 楼兰剑客
重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为 private 则子
2019-04-22T09:22:00Z
2019-04-22T09:22:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为 private 则子 <a href="https://www.cnblogs.com/lanjianblog/p/10751380.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10749570.html
C++内存空间 - 楼兰剑客
2019-04-22T05:15:00Z
2019-04-22T05:15:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】 <a href="https://www.cnblogs.com/lanjianblog/p/10749570.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10743867.html
Java和C++的区别 - 楼兰剑客
都是面向对象的语言,都支持封装、继承和多态。 Java 不提供指针来直接访问内存,程序内存更加安全。 Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。 Java 有自动内存管理机制,不需要程序员手动释放无用内存。
2019-04-21T01:30:00Z
2019-04-21T01:30:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】都是面向对象的语言,都支持封装、继承和多态。 Java 不提供指针来直接访问内存,程序内存更加安全。 Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。 Java 有自动内存管理机制,不需要程序员手动释放无用内存。 <a href="https://www.cnblogs.com/lanjianblog/p/10743867.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10743864.html
什么是字节码?采用字节码的最大好处是什么? - 楼兰剑客
先看下 java 中的编译器和解释器: Java 中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。 编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在 Jav
2019-04-21T01:28:00Z
2019-04-21T01:28:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】先看下 java 中的编译器和解释器: Java 中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。 编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在 Jav <a href="https://www.cnblogs.com/lanjianblog/p/10743864.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lanjianblog/p/10743853.html
JDK、JRE、JVM的区别 - 楼兰剑客
JDK: JDK(Java Development Kit)顾名思义它是给开发者提供的开发工具箱,是给程序开发者用的。它除了包括完整的JRE(Java Runtime Environment),Java运行环境,还包含了其他供开发者使用的工具包。 JRE: 普通用户而只需要安装 JRE(Java R
2019-04-21T01:23:00Z
2019-04-21T01:23:00Z
楼兰剑客
https://www.cnblogs.com/lanjianblog/
【摘要】JDK: JDK(Java Development Kit)顾名思义它是给开发者提供的开发工具箱,是给程序开发者用的。它除了包括完整的JRE(Java Runtime Environment),Java运行环境,还包含了其他供开发者使用的工具包。 JRE: 普通用户而只需要安装 JRE(Java R <a href="https://www.cnblogs.com/lanjianblog/p/10743853.html" target="_blank">阅读全文</a>