![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 91
zhCoding
这个作者很懒,什么都没留下…
展开
-
Callable和Runnable的区别
原创 2020-09-11 22:54:49 · 131 阅读 · 0 评论 -
Java面试--堆和栈的概念和区别
堆和栈的概念和区别【转载自博客】在说堆和栈之前,我们先说一下JVM(虚拟机)内存的划分:Java程序在运行时都要开辟空间,任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空间的。JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区域中进行更细致的划分,因为虚拟机中每一片内存处理的方式都不同,所以要单独进行管理。JVM内存的划分有五片: 1. 寄存器; 2. 本地方法区; 3. 方法区; 4. 栈内存; 5. 堆内存。转载 2020-09-08 19:53:27 · 655 阅读 · 1 评论 -
LeetCode打卡 16. 最接近的三数之和(双指针详解)
16. 最接近的三数之和难度:中等给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 <= nums.length <= 10^3-10^3 <= nums[i] <=原创 2020-08-26 00:56:45 · 158 阅读 · 0 评论 -
Mybatis二级缓存应用场景和局限性
二级缓存应用场景对查询频率高,变化频率低的数据建议使用二级缓存。对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。实现方法如下:通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间隔flushInterval,比如设置为30分钟、60分钟、24小时等,根据需求而定。mybatis局限性mybatis二级缓存对细粒度的数转载 2020-08-25 17:19:20 · 856 阅读 · 0 评论 -
LeetCode打卡 (234. 判断回文链表的快慢指针超详细解析)
234. 回文链表难度 简单请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?打开网页 拿到题目 难度简单 我超勇的!二话不说就想到了方法一:遍历整条链表,逐个将值添加到ArrayList数组用双指针前后比较,不等则输出false。时间复杂度O(n)空间复杂度O(n)/** * Definition原创 2020-08-16 22:46:38 · 256 阅读 · 0 评论 -
Java8新特性之构造器引用
一、构造器引用和方法引用类似,函数式接口的抽象方法的形参列表和构造器的形参列表一致。二、数组引用大家可以把数组看做是一个特殊的类,则写法和构造器引用一致下面来看实例:/* * @author zhCoding * @create 2020-08-10 15:32 */public class ConstructorReference { //构造器引用 //Supplier中的T get() //Employee中的'new' Employee() @Tes原创 2020-08-10 16:34:50 · 147 阅读 · 0 评论 -
Java8新特性之 方法引用----对Lambda表达式的进一步“简化”
方法引用的使用–Java8新特性1.使用情境:当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法的引用!2.方法引用本质本质上就是Lambda表达式,而Lambda表达式作为函数式接口的实例。所以方法引用,也是函数式接口的实例。3.使用格式:类(或对象即方法调用者) :: 方法名4.具体分为如下三种情况:对象 :: 非静态方法类 :: 静态方法类 :: 非静态方法 (注意:方法引用中可以这样)5.方法引用使用的要求:要求接口中的抽象方法的形参列表和返回值类型和原创 2020-08-10 15:28:14 · 373 阅读 · 0 评论 -
Lambda表达式的使用-Java8新特性
Lambda表达式的使用1.举例:(o1,o2) -> Interger(o1,o2); 中间的"->"是lambda操作符2.格式:-> : lambda操作符 或 箭头操作符->左边 : 形参列表 (其实就是接口中的抽象方法的形参列表)->右边 : lambda体 (其实就是重写的抽象方法的方法体)3.Lambda表达式的使用:(分6中情况介绍) 总结: ->左边:lambda形参列表的参数类型可以省略(可以通过泛型推断);如果lambda形参原创 2020-08-10 13:32:14 · 186 阅读 · 0 评论 -
Java8 HashMap之tableSizeFor
Java8对许多内置的容器进行了优化与拓展,其中对HashMap的改变尤其大。之后将进行总结。最近在看HashMap的源码时,发现了里面好多很不错的算法,相比Java7从性能上提高了许多。其中tableSizeFor就是一个例子。tableSizeFor的功能(不考虑大于最大容量的情况)是返回大于输入参数且最近的2的整数次幂的数。比如10,则返回16。该算法源码如下:static final int tableSizeFor(int cap) { int n = cap - 1; n |转载 2020-08-09 22:39:21 · 87 阅读 · 0 评论 -
loadClass()和forName()的区别
类加载的方式主要有两种:隐式加载:使用 new + 构造方法时,隐式的调用类加载器,加载对应的类到 JVM 中,是最常见的类加载方式。显式加载:使用 loadClass()、forName() 等方法显式的加载需要的类,对于显式加载这种类加载方式来讲,当我们获取到了 Class 对象后,需要调用 Class 对象的 newInstance() 方法来生成对象的实例。两种类加载方式的区别:隐式加载能够直接获取对象的实例,而显式加载需要调用 Class 对象的 newInstance() 方法来生成对转载 2020-08-09 20:59:51 · 160 阅读 · 0 评论 -
HashMap里面key为null存放到哪?
我们知道HashMap集合是允许存放null值的hashMap是根据key的hashCode来寻找存放位置的,那当key为null时, 怎么存储呢?在put方法里头,其实第一行就处理了key=null的情况。// HashMap的put方法 public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key =转载 2020-08-06 12:47:49 · 3685 阅读 · 0 评论 -
Map的实现类HashMap、LinkedHashMap、TreeMap、Hashtalble的底层源码理解以及Map中的常用方法介绍
一、Map的实现类的结构Map:双列数据,存储key-value对的数据 —类似于函数的映射关系HashMap:作为Map的主要实现类;线程不安全,效率高;可以存储null的key和value------>LinkedHashMap HashMap的子类;保证在遍历map元素时,可以按照添加的顺序实现遍历。原因:在原有的HashMap的的层结构基础上,添加了一对指针,指向前一个和后一个元素。对于频繁的遍历操作,此类执行效率高于HashMap;TreeMap:保证按照添加的 ‘key-原创 2020-08-06 01:11:37 · 189 阅读 · 0 评论 -
从源码谈ArrayList、LinkedList、Vector三者的异同以及List接口的常用方法介绍
Collection接口 : 单列集合,用来存储一个一个的对象List接口 : 有序的,可重复的数据。 —>“动态数组”ArratList : 作为List接口的主要实现类,线程不安全,效率高;使用Object[] elementData对象数组粗出LinkedList :对于频繁的插入和删除操作使用LinkeList效率高 原因:底层使用的是双向链表存储。Vetor : 作为List接口的古老实现类;线程安全,效率低;ArrayList的源码分析: 1.JDK7 情况原创 2020-08-05 01:56:58 · 129 阅读 · 0 评论 -
LeetCode打卡(11. 盛最多水的容器)双指针排除无效数据
11. 盛最多水的容器难度 中等给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例:输入:[1,8,6,2,5,4,8,3,原创 2020-08-03 00:21:41 · 141 阅读 · 0 评论 -
线程通信的例子:使用线程交替打印1-100
线程通信的例子:使用线程交替打印1-100涉及到的三个方法:wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的线程notifyAll():一旦执行此方法,就会唤醒所有的被wait的线程*说明:1.wait() notify() notifyAll() 三个方法必须使用在同步代码块或者同步方法中。2.wait() notify() notifyAll() 三个方法的调原创 2020-08-01 23:35:30 · 444 阅读 · 0 评论 -
三元运算符最终结果的数据类型
2017-03-03 17:52:43三目运算:三元表达式条件?结果1:结果2a>b?a:b//如果a>b成立,结果为a,否则结果为b相当于一个: if(){ }else{ }*只有if、else两种可能的情况a和b到底以何种类型输出:public class SanYuanTest { public static void main(String[] args) { char a = 'b'; int b = 8; System.ou转载 2020-07-28 18:09:00 · 829 阅读 · 0 评论 -
JavaSE基础回顾:== 运算符 和 equals() 方法 的区别
== 和 equals() 的区别一、回顾 == 的使用:== : 是运算符1.可以使用在基本数据类型变量和引用数据类型变量中2.如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等。(不一定类型要相同)如果比较的是引用数据类型变量: 比较的是两个对象的地址值是否相同。即两个引用是否指向同一个对象实体。二、equals()方法的使用1.是一个方法,而非运算符2.只能适用于引用数据类型3.Object类中equals()的定义:public原创 2020-07-28 13:43:21 · 118 阅读 · 0 评论 -
LeetCode打卡1(9. 回文数)
9. 回文数难度:简单判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。进阶:你能不将整数转为字符串来解决这个问题吗?将整数x转换为字符串来做的话是十分简单的,只需遍原创 2020-07-27 23:47:41 · 682 阅读 · 0 评论 -
关于Java中面向对象编程的理解
在Java中 面向对象编程 的理解(1)通过类:类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体被称为类。(2)封装:是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想,用户只能通过对外提供的接口访问数据。(3)多态:是指允许不同类的对象对同一消息做出响应,根据对象创建实例的不同调用不同的方法,本质是编译时和运行时才决定对象的行为。这里分为两个知识点:静态分派,方法的重载,编译时决定.原创 2020-07-27 16:27:29 · 299 阅读 · 0 评论