
JAVA
JachinDo
梦想仗剑走天涯
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java 彻底手撕LRU设计(使用JDK容器与不使用JDK容器)
Java 彻底手撕LRU设计(使用JDK容器与不使用JDK容器)原博链接JDK 1.8本文讲述了两种利用JDK容器实现LRU的方法,以及最后不使用JDK容器,自己定义HashMap和链表来纯手工打造时间复杂度为O(1)的LRU算法。§ 使用JDK容器1、使用LinkedHashMap这种方式比较简单,注释都在代码里public class LRUCache<K,V&g...原创 2020-04-25 10:50:23 · 720 阅读 · 1 评论 -
Java线程池中的异常处理
Java线程池中的异常处理原文博客§ 前置知识线程池中的任务有两种,一种有返回值,一种无返回值。通常对应着两种提交任务的方法:submit方法:虽然参数是Runnable,但由于返回值为Future,所以通常传入的参数为FutureTask类的对象。(FutureTask间接实现了Runnable接口和Future接口)public Future<?> submit...原创 2020-03-26 23:09:32 · 454 阅读 · 0 评论 -
Java浅拷贝和深拷贝
Java浅拷贝和深拷贝参考:https://www.jianshu.com/p/94dbef2de298注意:无论浅拷贝还是深拷贝,都会拷贝出一个新对象(即内存地址与原对象不同),而对象拷贝(直接将对象引用赋值给另一个引用那种)是不会生成新对象的,只是引用的指来指去§ 浅拷贝§ 特点浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类...原创 2020-02-28 22:56:57 · 229 阅读 · 0 评论 -
LeetCode 870. 优势洗牌 JAVA 题解
LeetCode 870. 优势洗牌 JAVA 题解题目链接:https://leetcode-cn.com/problems/advantage-shuffle/思想: 田忌赛马每次拿A的“当前轮次“的最小值和B的”当前轮次“最小值比较,若大于,则OK,满足。(1)若小于,则将A的值去和B的”最大值“配对。(2)技巧:将B的“值”和“索引”封装为Node对象,便于排序后找到原索引...原创 2020-02-27 21:08:46 · 418 阅读 · 0 评论 -
LeetCode 407. 接雨水 II JAVA题解
LeetCode 407. 接雨水 II JAVA题解题目链接:https://leetcode-cn.com/problems/trapping-rain-water-ii/根据油管上的一个视频写的java代码,视频链接:https://www.youtube.com/watch?v=cJayBq38VYw先将最外围四周看作第一层围栏,矩阵的元素看作节点,将其添加到优先队列中;依次出...原创 2020-02-27 21:01:01 · 443 阅读 · 0 评论 -
Spring Boot 整合 SpringData JPA与分页
Spring Boot 整合 SpringData JPA与分页在Spring Boot中使用JPA,需要引入如下依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId...原创 2020-02-24 15:16:41 · 492 阅读 · 0 评论 -
Spring Boot + Redis缓存实现
SpringBoot + Redis缓存实现1、缓存对象必须实现序列化如:package com.jachin.sell.VO;/** * @description: http请求返回的最外层对象 * @Author: JachinDo * @Date: 2019/07/17 22:32 */@Datapublic class ResultVO<T> implem...原创 2020-02-24 15:12:56 · 197 阅读 · 0 评论 -
为什么需要序列化与serialVersionUID
为什么需要序列化与serialVersionUID1、序列化§ 用途:把对象序列化成字节码,保存到指定介质上(如磁盘等)用于网络传输被序列化的实例所属类需要实现Serializable接口:2、serialVersionUIDserialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是**通过判断类的serialVersionUID来验证版本一...原创 2020-02-24 15:00:50 · 253 阅读 · 0 评论 -
Spring Boot 应用部署
Spring Boot 应用部署1、与虚拟机的交互ssh [email protected]进入虚拟机scp target/wechat-sell.jar [email protected]:/opt/javaapps将打包后的jar传到虚拟机指定目录2、运行问题端口占用: 使用==netstat -alnp | grep 8080== 或...原创 2020-02-22 12:01:41 · 199 阅读 · 0 评论 -
Docker安装配置及使用
Docker安装配置及使用参考博客https://yeasy.gitbooks.io/docker_practice/install/ubuntu.html1、卸载旧版本$ sudo apt-get remove docker \ docker-engine \ docker.io2、使用apt安装由于 apt 源使用 H...原创 2020-02-22 11:27:51 · 225 阅读 · 0 评论 -
Java Short类型比较的坑
Java Short类型比较的坑前提约定:精度小于int的数值==运算的时候(定义时不会)==都会被自动转换为int后进行计算short x = 3;Short s1 = 2;if (s1.equals(x - 1)) { System.out.println("!!!!!");}// 输出:null其实,上述定义x,s1时,后面的3和2都是int型的,只是编译器在...原创 2020-02-22 11:21:44 · 6104 阅读 · 0 评论 -
CopyOnWriteArrayList/Set 源码解析
CopyOnWriteArrayList/Set 源码解析原文地址:http://jachindo.top:8090/archives/copyonwritearraylistset%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90参考:https://mp.weixin.qq.com/s/Evw9Ikm83l_6M5x1i-K3Mw0、前言新老线程安全类,总结起来就...原创 2020-02-22 11:19:12 · 321 阅读 · 0 评论 -
ConcurrentHashMap源码解析
ConcurrentHashMap源码解析原文地址:http://jachindo.top:8090/archives/concurrenthashmap%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90jdk1.7:元素封装为HashEntry,同jdk1.7的HashMap分段锁+链表jdk1.8主要有两方面的优化:底层由链表 -->...原创 2020-02-22 11:15:15 · 250 阅读 · 0 评论 -
Java并发队列BlockingQueue总结与源码浅析
Java并发队列BlockingQueue总结与源码浅析§ 分类与简介§ LinkedBlockingQueue§ 构成底层为链表put锁和take锁notEmpty条件和notFull条件,使线程在对应条件等待private final Condition notEmpty = takeLock.newCondition();private final Ree...原创 2020-02-22 10:55:47 · 402 阅读 · 0 评论 -
AQS原理与源码剖析(结合ReentrantLock源码)
AQS原理与源码剖析(结合ReentrantLock源码)介绍:AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架1.ReentrantLock即为使用AQS框架实现的下图为ReentrantLock类中的静态内部类Sync、即其两个子类(对应公平和非公平)的类图。可见,均继承自AQS。2. AQS数据结构(CLH双端队列-等待队列)维护一个由双向链表实现...原创 2019-12-17 15:18:39 · 536 阅读 · 0 评论 -
JAVA线程池工作原理(ThreadPoolExecutor 源码简析)
线程池工作原理(ThreadPoolExecutor 源码简析)先来一张开门见山的流程图1. ThreadPoolExecutor源码简析1)一个记录线程池信息的变量ctlprivate final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));private static final int COUNT_BITS ...原创 2019-12-14 23:20:18 · 284 阅读 · 0 评论 -
Java中几种常量池的区分
Java中几种常量池的区分1、(全局)字符串常量池(String Pool)在类加载过程中,经过验证、准备阶段后:在堆中生成字符串对象实例将该字符串的对象实例引用值存到String Pool中在HotSpot VM里实现的String pool功能的是一个StringTable类,它是一个哈希表,里面存的是驻留字符串(也就是我们常说的用双引号括起来的)的引用(而不是驻留字符串实例...原创 2019-12-09 12:53:31 · 327 阅读 · 0 评论 -
HashMap源码解析
HashMap源码解析jdk版本:1.8前置约定:哈希表table。table[index]为解决hash冲突的数据结构(链表,红黑树)的头节点引用。根据链表长短选择是否要转换为红黑树。1、存储对象封装为节点Node<K,V>/** * Basic hash bin node, used for most entries. (See below for *...原创 2019-12-05 21:24:20 · 241 阅读 · 0 评论 -
Java类加载器与双亲委派模型
Java类加载器与双亲委派模型1、类加载器类加载阶段中通过类的全限定名获取定义此类的二进制字节流的动作代码。然后在堆上创建一个java.lang.Class对象。对于任何一个类,都需要由加载它的类加载器和这个类来确立其在JVM中的唯一性。也就是说,两个类来源于同一个Class文件,并且被同一个类加载器加载,这两个类才相等。分类,常用三种:启动类加载器(Bootstrap ClassL...原创 2019-12-03 21:09:20 · 194 阅读 · 0 评论 -
JVM类生命周期与类的加载过程
JVM类生命周期与类的加载过程类的生命周期:.class文件被加载到虚拟机内存后才可生效。类加载过程严格按照上述顺序“开始”,但不是按照上述顺序“进行”或“完成”,可能会交错。1、关于类初始化时机当且仅当对一个类进行主动引用的时候才会触发初始化阶段。共有5种主动引用场景,详见文末参考文章。其余被动引用不触发类的初始化,如:1) 通过子类引用父类的静态字段,不会导致子类的初始化。2...原创 2019-11-30 21:00:21 · 238 阅读 · 0 评论 -
Java对象的创建方式
Java对象的创建方式常用的创建对象的方式大致有5种:new关键字反射(2种)clone方法反序列化1、new关键字Student student = new Student();Student类想怎么写就怎么写,不多赘述。2、利用反射的两种创建方式1)只能调用无参构造函数newInstance()方法只能调用类的无参构造函数,因此要求类必须有无参构造函数。Stu...原创 2019-11-28 22:07:58 · 218 阅读 · 0 评论 -
Java对象的创建过程
Java对象的创建过程与初始化过程此文聚焦“对象”而不是“类”1、Java对象创建过程图片来源:https://www.cnblogs.com/chenyangyao/p/5296807.html2、Java对象的初始化(类的实例化)类的初始化不在本文范畴此部分对应上图的调用对象的<init>方法。 注意:在此之前,在虚拟机为对象分配内存后,已经进行过一次初始化了然后...原创 2019-11-28 22:07:14 · 297 阅读 · 1 评论 -
idea部署maven项目到远程tomcat
idea部署maven项目到远程tomcat1、配置服务器端1.1 安装配置java环境# 安装javasudo add-apt-repository ppa:openjdk-r/ppasudo apt-get updatesudo apt-get install openjdk-8-jdk# 给出java路径sudo update-alternatives --config j...原创 2019-06-22 15:56:37 · 1940 阅读 · 0 评论 -
form表单提交到Servlet中文乱码问题
form表单提交到Servlet中文乱码问题1、form表单提交到某个servlet后,由servlet显示其中文信息,结果是乱码,解决方法如下:protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ...原创 2019-04-17 14:51:26 · 2104 阅读 · 1 评论 -
JAVA BeanUtils使用
BeanUtils通过内省(Introspector)实现,通过读取对象属性值来创建对象。且读取类型均可统一为String类型,因为属性为基本类型时,BeanUtils会自动帮忙转换类型,如下代码示例:public class Demo3 { public static void main(String[] args) throws InvocationTargetExce...原创 2019-03-25 13:39:06 · 310 阅读 · 0 评论