
java基础
文章平均质量分 57
weixin_43831204
记录每一点进步
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
String和常量池
String和常量池原创 2022-09-22 01:13:36 · 158 阅读 · 1 评论 -
Java打印String对象的地址
String打印地址值原创 2022-09-22 00:59:25 · 1969 阅读 · 0 评论 -
类名.this与this的区别
类名.this与this的区别转载 2022-09-20 20:21:40 · 370 阅读 · 0 评论 -
从sharding-jdbc看如何解决雪花算法的时钟回拨问题
https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247494475&idx=3&sn=a0d3a5918f70cb331546951fd11bbd85&chksm=fbb162b5ccc6eba3e56343b9df21f535994a6b41c1f73644f79190e523fd8eca88c189b8c5ec&mpshare=1&scene=1&srcid=1216Cs473kkMjC原创 2021-12-16 20:32:32 · 2200 阅读 · 0 评论 -
java.util.concurrent.locks.LockSupport
[java.util.concurrent.locks.LockSupport (讲得比较细)]学习JAVA中是如何实现线程间的锁,就得从LockSupport这个类先说起,因为这个类实现了底层的一些方法,各种的锁实现都是这个基础上发展而来的。这个类方法很少,但理解起来需要花费一点时间,因为涉及了很多底层的知识,这些都是我们平时不关心的。上源代码:package java.util.concurrent.locks;import java.util.concurrent.*;import sun.m转载 2021-12-07 20:26:16 · 290 阅读 · 0 评论 -
JVM预热
一、JVM 架构基础JVM 进程启动时,ClassLoader 会将需要的所有类加载到内存,主要分为以下三步:Bootstrap Class: 核心类库,由 “Bootstrap Class Loader”负责加载, 例如基础的运行时类库 JRE\lib\rt.jar。Extension Class: java.ext.dirs 路径下的类,由 ExtClassLoader 负责加载。在实际开发中,如果需要添加额外的类库,通常放置于此位置。Application Class: 实际应用包含的类,由原创 2021-11-24 20:04:57 · 1093 阅读 · 0 评论 -
NIO优化原理和Tomcat线程模型
NIO优化原理和Tomcat线程模型1、I/O阻塞书上说BIO、NIO等都属于I/O模型,但是I/O模型这个范围有点含糊,我为此走了不少弯路。我们日常开发过程中涉及到NIO模型应用,如Tomcat、Netty中等线程模型,可以直接将其视为网络I/O模型。本文还是在基础篇章中介绍几种I/O模型方式,后面就默认只讲解网络I/O模型了。1.1、I/O分类BIO、NIO、AIO等都属于I/O模型,所以它们优化的都是系统I/O的性能,因此首先,我们要清楚常见的I/O有哪些分类:I/O种类场景ja原创 2021-11-24 20:00:54 · 667 阅读 · 0 评论 -
缓存和数据库一致性问题,看这篇就够了
https://mp.weixin.qq.com/s?__biz=MzAxNjM2MTk0Ng==&mid=2247497523&idx=2&sn=3d3e780ee2e3ec36248a4880f23aeb60&chksm=9bf74786ac80ce9000252c79e25a1872b27bf1f487cb9389931614c0bdbf051dfd66b258e7dc&mpshare=1&scene=1&srcid=09138ES5J9UTz3转载 2021-09-24 00:43:52 · 185 阅读 · 0 评论 -
Cookie/Session/Token对比
1. 网站交互体验升级作为网友的我们,每天都会使用浏览器来逛各种网站,来满足日常的工作生活需求。现在的交互体验还是很丝滑的,但早期并非如此,而是一锤子买卖。1.1 无状态的http协议无状态的http协议是什么鬼?HTTP无状态协议,是指协议对于业务处理没有记忆能力,之前做了啥完全记不住,每次请求都是完全独立互不影响的,没有任何上下文信息。缺少状态意味着如果后续处理需要前面的信息,则它必须重传关键信息,这样可能导致每次连接传送的数据量增大。1.2 解决之道整个事情交互的双方只有客户端和服务转载 2021-09-08 00:57:24 · 221 阅读 · 0 评论 -
通过银行转账问题解说死锁解决方案
大家都知道,在并发情况下对两个账户进行转账操作可能会产生死锁,可能出现死锁的原因是,并发情况下对两个账户的操作无法保证其执行顺序。并发问题描述假如现在执行下面的操:线程一执行的是:【账户A】给【账户B】转账线程二执行的是:【账户B】给【账户A】转账如果两个转账动作同时执行,则会出现线程一会请求对【账户B】进行加锁,线程二会请求对【账户A】进行加锁由于此时的【账户A】已由线程一进行锁定,【账户B】已由线程二进行锁定 此时就会产生死锁问题。接下来分析一下产生死锁的原因,以及如何避免死锁。如何转载 2021-09-08 00:39:08 · 1619 阅读 · 0 评论 -
java的interrupt的使用
通常我们会有这样的需求,即停止一个线程。在java的api中有stop、suspend等方法可以达到目的,但由于这些方法在使用上存在不安全性,会带来不好的副作用,不建议被使用。具体原因可以参考Why is Thread.stop deprecated。在本文中,将讨论中断在java中的使用。中断在java中主要有3个方法,interrupt(),isInterrupted()和interrupted()。interrupt(),在一个线程中调用另一个线程的interrupt()方法,即会向那个线程发原创 2021-09-08 00:37:40 · 309 阅读 · 1 评论 -
PropertyUtils嵌套属性的使用
一般情况下,在Java中你可以通过get方法轻松获取beans中的属性值。但是,当你事先不知道beans的类型或者将要访问或修改的属性名时,该怎么办?Java语言中提供了一些像java.beans.Introspector这 样类,实现了在运行时检测Java类并确定属性get和set方法的名称,结合Java中的反射机制就可以调用这些方法了。然而,这些APIs使用起来比 较困难,并且将Java类中一些不必要的底层结构暴露给了开发人员。BeanUtils包中的APIs试图简化动态获取和设置bean属性的过程。原创 2021-09-05 15:46:54 · 412 阅读 · 0 评论 -
ThreadLocal总结
应该如何设计 ThreadLocal ?ThreadLocal<String> threadLocal1 = new ThreadLocal<>();ThreadLocal<Integer> threadLocal2 = new ThreadLocal<>();ThreadLocal<Integer> threadLocal3 = new ThreadLocal<>();那此时 ThreadLocal 对象和线程的关系原创 2021-09-03 15:28:50 · 154 阅读 · 0 评论 -
JAVA NIO学习笔记
一. NIO 基础non-blocking io 非阻塞 IO1. 三大组件1.1 Channel & Bufferchannel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层#mermaid-svg-hX337Q3frJMPNfYD .label{font-family:'trebuche原创 2021-08-25 00:18:31 · 241 阅读 · 0 评论 -
jackson常用配置
jackson常用配置@SpringBootTest public class JacksonTreeModelTest { private ObjectMapper objectMapper; @Before public void init() { objectMapper = new ObjectMapper(); // 如果为空则不输出 objectMapper.setSerializationInclusion原创 2021-08-08 14:04:10 · 438 阅读 · 0 评论 -
jackson自定义策略
Jackson支持在处理数据的时候,使用不同于对象字段名的JSON名称(Jackson内部使用),来代替原来的字段名进行序列化和反序列化。主要有几种实现方式:使用@JsonProperty指定固定的名称进行名称映射;使用预定义的命名策略PropertyNamingStrategy,设置全局或单个类的命名策略;扩展PropertyNamingStrategy,实现自定义命名策略,读和写支持使用不同的命名策略。一.属性名称@JsonProperty对于需要修改名称的字段,可以在字段或getter原创 2021-08-08 13:45:09 · 2928 阅读 · 0 评论 -
idea下使用springinitializr创建项目时 初始化失败的解决
修改初始化创建时Custom处 https://start.aliyun.com/原创 2021-08-08 12:49:34 · 370 阅读 · 0 评论 -
json根据路径查询
import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.core.type.TypeReference;import com.fasterxml.jackson.databind.DeserializationFeature;import com.fasterxml.jackson.databind.JsonNode;import com.fasterxml.jackson.data原创 2021-08-07 17:08:52 · 967 阅读 · 0 评论 -
JAVA三元运算符空指针引用的坑
记一个踩坑,三元表达式空指针,翻阅资料发现原因如下:原创 2021-07-24 11:31:11 · 154 阅读 · 0 评论 -
通过Optional的map消除冗长的空值判断
下面的例子中,代码片段1和代码片段2作用等价,并且更简洁import lombok.Data;import java.util.Optional;public class OptionalExample { // String isocode2 = user.getAddress().getCountry().getIsocode() // 通过Optional的map可以消除冗长的空值判断 public static void main(String[] args) {原创 2021-07-14 11:14:15 · 948 阅读 · 0 评论 -
Runtime类中的freeMemory,totalMemory,maxMemory
Runtime类中的freeMemory,totalMemory,maxMemory最近在网上看到一些人讨论到java.lang.Runtime类中的freeMemory(),totalMemory(),maxMemory ()这几个方法的一些问题,很多人感到很疑惑,为什么,在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节,而随着 java程序往前运行,创建了不少的对象,freeMemory()这个方法的返回有时候不但没有减少,反而会增加。这些人对freeMemory(转载 2021-06-09 00:58:30 · 133 阅读 · 0 评论 -
java的finalize方法
我们通常用构造器来创建对象,而Finalize正好相反,构造方法执行对象的初始化操作,finalize方法执行对象的销毁操作.那我们什么时候需要使用finalize方法呢,我们都知道Java里垃圾回收器可以回收对象使用的内存空间,但是对象可能会持有很多资源比如Socket、文件句柄等,垃圾收集器无法回收这些资源,因此你需要使用finalize方法帮助GC回收这些资源,比如关闭打开的文件或者网元资源,删除临时文件等.一个例子Object类是所有类的父类,如果你去查看java.lang.Object类原创 2021-06-08 10:14:06 · 12212 阅读 · 2 评论 -
死锁的四个必要条件
https://blog.csdn.net/qq_43089516/article/details/90440592原创 2021-06-07 23:17:34 · 5049 阅读 · 0 评论 -
记录一次内存溢出
记录一次内存溢出一.状况线上出现了OutOfMemoryError二.排查最简单查看java内存的方法就是分析dump文件.查找当前进程的Pid , pid 是 50480到jdk安装目录bin下面找一个 jmap的命令然后 ./jmap -dump:format=b,file=/opt/heap/heap1.bin 50480 , 得到 第一个 heap1.bin过个把小时, 再使用这个命令 ./jmap -dump:format=b,file=/opt/heap/heap2.bi原创 2021-06-07 23:09:53 · 294 阅读 · 3 评论 -
git命令速查表
原创 2021-04-07 09:52:50 · 67 阅读 · 0 评论 -
ThreadLocal的理解
https://blog.csdn.net/weixin_44742132/article/details/106935243?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242InheritableThreadLocal线性探测解决hash冲突转载 2021-03-20 12:40:23 · 187 阅读 · 0 评论 -
配置文件或模板中的占位符替换工具类
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.HashMap;import java.util.Map;/** * 配置文件或模板中的占位符替换工具类 * wxy */public class PlaceholderUtils { private static final Logger logger = LoggerFactory.getLogger(PlaceholderUtil原创 2021-02-20 14:56:01 · 274 阅读 · 0 评论 -
IDEA : shorten command line
如果类路径太长,或者有许多VM参数,程序就无法启动。原因是大多数操作系统都有命令行长度限制。在这种情况下,IntelliJIDEA将试图缩短类路径。shorten command line 选项提供三种选项缩短类路径。none:这是默认选项,idea不会缩短命令行。如果命令行超出了OS限制,这个想法将无法运行您的应用程序,但是工具提示将建议配置缩短器。JAR manifest:idea 通过临时的classpath.jar传递长的类路径。原始类路径在MANIFEST.MF中定义为classpa原创 2021-01-07 16:08:13 · 323 阅读 · 0 评论 -
Java8--HashMap之tableSizeFor
Java8–HashMap之tableSizeFor首先基本类型:int 二进制位数:32包装类:java.lang.Integer最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)java 8HashMap 构造函数java 8 中在创建hashMap的时候有个构造函数如下:public HashMap(int initialCapacity, float load原创 2021-01-04 16:25:19 · 175 阅读 · 1 评论 -
hashmap的putVal
/** * Implements Map.put and related methods. * * @param hash hash for key * @param key the key * @param value the value to put * @param onlyIfAbsent if true, don't change existing value * @param evict if false, the t...原创 2021-01-03 11:34:11 · 94 阅读 · 0 评论 -
为啥HashMap的容量为什么要是2的n次方
引入我们知道,hash方法的功能是根据Key来定位这个K-V在链表数组中的位置的。也就是hash方法的输入应该是个Object类型的Key,输出应该是个int类型的数组下标。如果让你设计这个方法,你会怎么做?其实简单,我们只要调用Object对象的hashCode()方法,该方法会返回一个整数,然后用这个数对HashMap的容量进行取模就行了。如果真的是这么简单的话,那HashMap的容量设置就会简单很多了,但是考虑到效率等问题,HashMap的hash方法实现还是有一定的复杂的。hash的实现主原创 2021-01-03 11:20:32 · 500 阅读 · 0 评论 -
java中isAssignableFrom()方法与instanceof关键字用法
isAssignableFrom()方法与instanceof关键字的区别总结为以下两个点:isAssignableFrom()方法是从类继承的角度去判断,instanceof关键字是从实例继承的角度去判断。isAssignableFrom()方法是判断是否为某个类的父类,instanceof关键字是判断是否某个类的子类。使用方法:父类.class.isAssignableFrom(子类.class)子类实例 instanceof 父类类型...原创 2020-12-11 19:39:47 · 225 阅读 · 0 评论 -
java使用Selector进行socket
服务端/** * @Auther: wxy * @Date: 2020/11/29 20:49 * @Description: */public class WebServer { public static void main(String[] args) { try { //创建ServerSocket通道 ServerSocketChannel ssc = ServerSocketChannel.open();原创 2020-12-05 10:18:31 · 439 阅读 · 0 评论 -
多路复用笔记
多路复用1. BIO 的缺陷BIO中的B 是 Blocking 的阻塞的意思作为服务端开发,使用ServerSocket 绑定端口号之后会监听该端口,等待accept事件,accept是会阻塞当前线程当我们收到accept事件的时候,程序就会拿到客户端与当前服务端连接的Socket针对这个socket我们可以进行读写,但是呢,这个socket读写都是会阻塞当前线程的。一般我们会有使用多线程方式进行c/s交互,但是这样很难做到C10K(比如说:1W个客户端就需要和服务端用1W个线程支持,这样的话原创 2020-12-05 10:17:18 · 153 阅读 · 0 评论 -
阿里为何不推荐使用Executors来创建线程池
https://blog.csdn.net/leisurelen/article/details/107872827?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.controlArr原创 2020-11-26 20:21:15 · 729 阅读 · 0 评论 -
ArrayBlockingQueue与LinkedBlockingQueue区别
ArrayBlockingQueue与LinkedBlockingQueue区别1、ArrayBlockingQueue采用动态数组takeIndex和putIndex 表示存和取的两个数组下标。有界 (必须指明数组大小)不能存放null读和写公用一个ReentrantLock2、LinkedBlockingQueue采用链表实现默认无界(可以在初始化时指明大小)不能存放null读和写有两把锁ReentrantLock takeLock和putLock原创 2020-11-26 20:17:44 · 112 阅读 · 0 评论 -
yml基本语法
系统的整理一下yml的语法1、基本语法格式要求k:(空格)v:表示一对键值对(空格必须有);以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的server: port: 8081 path: /hello123属性和值也是大小写敏感;2、值的写法字面量:普通的值(数字,字符串,布尔)k: v:字面直接来写;字符串默认不用加上单引号或者双引号;“”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思name: “zhangsan \原创 2020-11-26 20:09:34 · 438 阅读 · 0 评论 -
jvm调优
https://blog.csdn.net/qq_34707744/article/details/79287403原创 2020-11-26 20:07:30 · 59 阅读 · 0 评论 -
Integer的equals和==
//情景1Integer c = 128;Integer d = 128;System.out.println(c == d);//false//情景2Integer a = 1;Integer b = 1;System.out.println(a == b);//true。b.intValue()//情景3Integer e = new Integer(1);Integer f = new Integer(1);System.out.println(e == f);//false原创 2020-11-26 20:06:19 · 216 阅读 · 0 评论 -
easyexcel的动态表头和自定义转换器
https://github.com/alibaba/easyexcel原创 2020-11-15 20:14:04 · 2503 阅读 · 0 评论