Java基础
文章平均质量分 71
JavaSE基础知识点
_Romeo
知无不言,言无不尽。
展开
-
面试常被问到:OOM内存泄露,内存溢出?
简单说说OOM!原创 2022-10-24 13:13:02 · 311 阅读 · 0 评论 -
浅谈TCP三次握手,四次挥手
什么是“3次握手,4次挥手”?TCP是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务器的内存里保存的一份关于对方的信息,如ip地址、端口号等。TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。TCP提供了一种可靠、面向连接、字节流、传输层的服务,采用三次握手建立一个连接。采用4次挥手来关闭一个连接。 .原创 2022-03-31 14:14:08 · 221 阅读 · 0 评论 -
【Caffeine进阶】Redis+Caffeine 两级缓存实战,性能爆缸
往期回顾博主前面发过一篇【缓存框架Caffeine】初级篇,主要介绍了Caffeine的入门级使用!地址https://blog.csdn.net/Number_oneEngineer/article/details/123328014?spm=1001.2014.3001.5501本文主要介绍Caffeine以注解的方式来操作缓存,将原本全手动操作方式,改进为本地缓存交给spring管理Caffeine基于切面操作,自定义注解的方式来操作缓存前面两种方式搭配Redis实现两级缓存实战.原创 2022-03-31 12:33:50 · 3894 阅读 · 1 评论 -
java中如何查询一个指定的子字符在字符串中出现的所有or指定次数的下标索引
最近刷到一道很常见的算法题,题目不难,实现方式很多,就看时间复杂度哪种最低了。话不多说,看题:【问】 已知字符串str1=“ABABCDBADBCDBABCDBADBBADBBCCDBABCDBADBBCCDBADBBCCDBABCD”, str2=“ABCD”,如何快速高效的找出str2在str1中出现的所有下标索引以及第三次出现的下标索引?笔者一看:哇喔,这不是so easy 嘛??1、indexof public static void main(String[] args) { .原创 2022-03-30 16:02:02 · 1599 阅读 · 1 评论 -
【Caffeine入门】浅谈缓存框架Caffeine
Caffeine是一个基于Java8的高性能缓存框架,号称趋于完美。Caffeine受启发于Guava Cache的API,使用API和Guava是一致的。它借鉴了Guava Cache和ConcurrentLinkedHashMap的设计经验。在Springboot中使用Caffeine在工程的pom文件引入caffeine的依赖,如下:<dependency> <groupId>com.github.ben-manes.caffeine</gr原创 2022-03-07 13:24:48 · 1939 阅读 · 0 评论 -
Hashmap的结构,1.7和1.8有哪些区别,深入的分析
面试被问到:HashMap1.7和1.8的区别,答到面试官怀疑人生!原创 2022-03-07 10:27:41 · 630 阅读 · 0 评论 -
Spring AOP 基于注解实现通用日志打印
前言我们在日常开发中,项目里日志是必不可少的,一般有业务日志,数据库日志,异常日志等,主要用于帮助程序猿后期排查一些生产中的bug。有时候程序猿们在做代码调优的时候需要关注每个接口的响应速度,所以需要打印接口调用时间,如果在接口中每次写这段代码实在恶心,故基于Spring AOP面向切面编程使用注解解决该问题。1.定义注解value为对应的接口名称,默认为BaseController@Target(ElementType.METHOD)@Retention(RetentionPolicy.R原创 2022-03-03 16:42:22 · 678 阅读 · 0 评论 -
Java实现获取n个工作日后的日期
获取n个工作日后的日期原创 2022-03-03 16:21:45 · 1466 阅读 · 0 评论 -
后端接口都测试什么?要怎么测?
本文主要分为两个部分:第一部分主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做?第二部分主要介绍为什么要做接口测试,并简单总结接口持续集成和接口质量评估相关内容。第一部分:首先,在做接口测试的过程中,经常有后端开发会问:1、后端接口都测试什么?怎么测的?2、后端接口测试一遍 ,前端也测试一遍,是不是重复测试了?于是,为了向开发解释上述问题,普及基本的测试常识,特意梳理了接口测试的相关内容以及.原创 2021-11-16 11:16:54 · 280 阅读 · 0 评论 -
GET 请求能传图片吗?
从一道面试题说起:GET 请求能传图片吗?「前言」曾经遇到的面试题,觉得挺有意思,来说下我的答案及思考过程。首先,我们要知道的是,图片一般有两种传输方式:base64 和 file对象。base64 图片图片的base64编码想必大家都见过:base64 的本质是字符串,而 GET 请求的参数在 url 里面,所以直接把图的 base64 数据放到 url 里面,就可以实现 GET 请求传图片。input 输入框拿到的图是 file 对象,图片 file 对象转 base64 :// i.原创 2021-11-16 10:51:27 · 834 阅读 · 0 评论 -
深拷贝与浅拷贝的那些事儿
在Java语言里,当我们需要拷贝一个对象时,有两种类型的拷贝:浅拷贝与深拷贝。浅拷贝只是拷贝了源对象的地址,所以源对象的值发生变化时,拷贝对象的值也会发生变化。而深拷贝则是拷贝了源对象的所有值,所以即使源对象的值发生变化时,拷贝对象的值也不会改变。如下图描述:了解了浅拷贝和深拷贝的区别之后,本篇博客将教大家几种深拷贝的方法。拷贝对象首先,我们定义一下需要拷贝的简单对象。/** * 用户 */public class User { private String name;原创 2021-10-26 17:20:49 · 173 阅读 · 0 评论 -
Java并发编程之java.util.concurrent包——Semaphore篇
概念信号量Semaphore一般用来表示可用资源的个数,相当于一个计数器,可类比生活中停车场牌子上面显示的停车场剩余车位数量。当有车开进去的时候, 就相当于申请一个可用资源,可用车位就 -1 (这个称为信号量的 P 操作)当有车开出来的时候, 就相当于释放一个可用资源, 可用车位就 +1 (这个称为信号量的 V 操作)如果计数器的值已经为 0 了,还尝试申请资源,就会阻塞等待,直到有其他线程释放资源(计数器的值是大于等于0的)源码 public Semaphore(int per原创 2021-10-20 13:36:11 · 561 阅读 · 0 评论 -
Java并发编程之java.util.concurrent包——CyclicBarrier篇
概念从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。它的作用就是会让所有线程都等待完成后才会继续下一步行动。举个例子,就像生活中我们会约朋友们到某个餐厅一起吃饭,有些朋友可能会早到,有些朋友可能会晚到,但是这个餐厅规定必须等到所有人到齐之后才会让我们进去。这里的朋友们就是各个线程,餐厅就是 CyclicBarrier。构造方法public CyclicBarrier(int parties)public CyclicBarrier(in原创 2021-08-04 14:39:22 · 216 阅读 · 0 评论 -
Java并发编程之java.util.concurrent包——CountDownLatch篇
概念countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。源码countDownLatch类中只提供了一个构造器://参数count为计数值public CountDownLatch(int count) { }; 类中有三个方法是最重要的://调用await()方法的线程原创 2021-08-04 14:34:14 · 283 阅读 · 0 评论 -
手写FutureTask实现
FutureTaskFutureTask是Future的实现,用来异步任务的获取结果,可以启动和取消异步任务,查询异步任务是否计算结束以及获取最终的异步任务的结果。通过get()方法来获取异步任务的结果,但是会阻塞当前线程直至异步任务执行结束。一旦任务执行结束,任务不能重新启动或取消,除非调用runAndReset()方法代码示例:public class ThreadTest_Demo { static ExecutorService executors = Executors.newSch原创 2021-08-04 14:15:42 · 155 阅读 · 0 评论 -
CurrentHashMap源码详解
J.U.C并发包–HashMap原理红黑树定律:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。HashMap的总结:HashMap是数组+链表构成的,JDK1.8之后,加入了红黑树.HashMap默认数组初始化大小为16,如果瞎设置数字,它会自动调整原创 2021-08-03 16:02:27 · 1081 阅读 · 0 评论 -
ThreadLocal你搞懂了嘛?InternalThreadLocal ,FastThreadLocal如何做到提高性能
一篇文章让你搞懂ThreadLocal,InternalThreadLocal,FastThreadLocal这里写目录标题ThreadLocal一. 能干啥用?二. 使用非常广泛。举三个框架源码中的例子,大家品一品。1. Spring 的事务2. mybatis 的分页插件,PageHelper。3. Dubbo 的 RpcContext。三. 原理?四. 内存泄漏的问题?InternalThreadLocal一. 能干啥用的?二. 强在哪里?FastThreadLocal一. 能干啥用?二. 为什么快原创 2021-07-05 11:20:01 · 1123 阅读 · 0 评论 -
SynchronizedMap与ConcurrentHashMap的对比
如何使用 ConcurrentHashMap<Object, Object> concurrentMap = new ConcurrentHashMap<>(); concurrentMap.put("", ""); concurrentMap.get(""); Map<Object, Object> synchronizedMap = Collections.synchronizedMap(new HashMap&原创 2021-06-07 13:26:38 · 610 阅读 · 0 评论 -
什么是乐观锁,什么是悲观锁
一、并发控制当程序中可能出现并发的情况时,就需要保证在并发情况下数据的准确性,以此确保当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这种手段就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。没有做好并发控制,就可能导致脏读、幻读和不可重复读等问题。常说的并发控制,一般都和数据库管理系统(DBMS)有关。在 DBMS 中的并发控制的任务,是确保在多个事务同时存取数据库中同一数据时,不破坏事务的隔离性、一致性和数据库的统一性。实现并发控制转载 2021-05-31 14:16:57 · 186 阅读 · 0 评论 -
程序员年底是怎么划水的?
到了一年一度最开心也是最无聊的时刻了…坐等放假,坐等年终奖,于是乎~~~开启了摸鱼模式俺们程序员摸鱼也要摸的很有逼格???(有审计的兄弟悠着点)…………………………………………………………………摸鱼摸鱼……………………摸鱼摸鱼……………………………………………………………摸鱼……摸鱼摸鱼……摸鱼摸鱼……摸鱼…………………………………………………………摸鱼……………摸鱼摸鱼摸鱼………………摸鱼……………………………………………………………………………………摸鱼摸鱼…………………………………原创 2021-02-04 14:42:43 · 301 阅读 · 0 评论 -
HashMap原理深入理解
hashing(哈希法)的概念散列法(Hashing)是一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来在数据库中建立索引并进行搜索,同时还用在各种解密算法中。对比:Hashtable、HashMap、TreeMapHashtable 是早期Java类库提供的一个哈希表实现,本身是同步的,不支持 null 键和值,由于同步导致的性能开销,所以已经很少被推荐使用。HashMap与 Ha转载 2020-11-09 09:58:41 · 220 阅读 · 0 评论 -
常用java工具类
1.json转换工具package com.taotao.utils;import java.util.List;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.JavaType;import com.fasterxml.jackson.data...原创 2018-10-20 18:27:07 · 322 阅读 · 0 评论 -
linux安装jdk的两种方式
安装jdk1、 下载jdk安装包http://www.oracle.com/technetwork/java/javase/downloads/jdk6u38-downloads-1877406.html下载jdk-6u38-linux-i586-rpm.bin包2、 上传并下载至目标服务器将包通过FileZilla(本地客户端需安装FileZilla )上传至...原创 2018-10-21 16:23:46 · 263 阅读 · 0 评论 -
如何实现线程安全?
如何实现线程安全?1.对于线程不安全的对象我们可以通过如下方法来实现线程安全:1: 加锁 利用Synchronized或者ReenTrantLock来对不安全对象进行加锁,来实现线程执行的串行化,从而保证多线程同时操作对象的安全性,一个是语法层面的互斥锁,一个是API层面的互斥锁.2: 非阻塞同步来实现线程安全。原理就是:通俗点讲,就是先进性操作,如果没有其他线程争用共享数据,那操作就成功了...原创 2018-12-02 14:49:40 · 5654 阅读 · 0 评论 -
深入解析单例设计模式
文章目录1.单例设计模式1.1 单例设计模式的定义:1.2单例设计模式的要点有三个:1.3从具体实现角度来说,就是以下三点:2.在java语言中,单例带来了两大好处:3.下面介绍一下几种实现单例设计模式的写法3.1 懒汉,线程不安全3.2 饿汉3.3 静态内部类3.4 枚举3.5 双重校验锁(jdk1.5)4.总结1.单例设计模式1.1 单例设计模式的定义:保证一个类仅有一个实例,并提供...原创 2018-12-02 14:23:52 · 329 阅读 · 0 评论 -
String,StringBuilder,StringBuffer三者的区别
String,StringBuilder,StringBuffer三者的区别最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,也便于加深自己学习过程中对这些知识点的记忆,如果哪里有误,恳请指正。 这三个类之间的区别主要是在两个方面...原创 2018-10-26 16:59:57 · 226 阅读 · 0 评论