自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 java中超过long范围的超大整数相加算法(面试高频) 第二版

第二版针对第一版做了一定优化,代码和算法就是个不断优化的过程。具体题目背景请看第一版文章,地址:https://blog.csdn.net/wandou9527/article/details/108025167大佬有更好更优雅的实现方式请评论区交流讨论。直接上代码:import org.junit.Test;/** * @author liming * @date 2020/8/20 */public class BigNumAddDemo { @Test publi

2020-08-20 14:30:33 829 1

原创 Java设计模式-Builder模式

Builder模式是将一个复杂对象的创建和表示分离,使同样的创建过程可以创建不同的表示。它属于建造类模式。一般来说,如果一个对象的创建比较复杂,超出了构造方法所能包含的范围,就可以使用工厂模式和Builder模式,相对于工厂模式会产出一个完整的产品,Builder应用于更加复杂的对象创建,甚至单单了创建产品的一部分而已。...

2022-03-19 20:11:33 1929

原创 Java设计模式-工厂模式案例分析

有如下三个需求:1 任意定制交通工具2 任意定制交通工具生产过程3 任意定制产品一族,并可扩展需求 11.1 都写具体类实现定义交通工具代码public class Car { public void go() { System.out.println("???? car go sousousou ..."); }}public class Plane { public void go() { System.out.printl

2021-11-20 21:20:11 940

原创 HashMap常见面试题汇总

1 HashMap 的数据结构?整体是个数组结构,数组的元素是内部类Node,Node中有个成员变量 next,指向后续节点的指针,无哈希冲突时,是个单节点。当发生哈希冲突时,Node节点下将关联节点,形成联表。结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。transient Node<K,V>[] table;2 HashMap 的工作原理?HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry

2021-10-09 18:39:33 281 1

原创 Jvm Classloader 类加载机制

双亲委派类加载是遵循双亲委派机制的,双亲委派机制是当一个类需要被加载时,加载器首先并不是自己直接加载,而是先从自己缓存中查找是否加载过,如果加载过直接返回。如果没有则上委托自己的父加载器加载,父加载器同样执行上述操作,以次类推。如果到最顶层的boostrapClassLoader也没有加载的话,将向下检查,查找并加载该类。这样一上一下的过程称为双亲委派。示意图如下:为什么要使用双亲委派安全问题。比如某人自己类库中有个类叫 java.lang.String 自定义加载时可以覆盖掉 jdk 中的 St.

2021-09-24 17:12:52 144 1

原创 Jvm垃圾收集器总结之 Parallel Scavenge 收集器

Parallel Scavenge 收集器是个新生代收集器。它也是使用复制算法的收集器,又是并行的多线程收集器、、、、看上去和ParNew 都一样,那它有什么特别之处呢?Parallel Scavenge 收集器的特点是它关注的点和其他收集器不同,CMS 等收集器的关注点是尽可能的缩短垃圾收集器期间用户线程的停顿时间,而 Parallel Scavenge 收集器的目标则是达到一个可控的吞吐量(Throughput)。所谓吞吐量就是 CPU 运行用户线程的时间和 CPU 总时间的比值。即吞吐量 = 运行

2021-08-29 17:26:07 1361 4

原创 Jvm垃圾收集器总结(ParNew收集器)

ParNew收集器其实就是Serial 收集器的多线程版本,除了多条线程进行垃圾收集之外,其余行为包括 Serial 收集器的所有控制参数(例如: -XX:SurvivorRatio、-XX:PretenureSizeThreshold、-XX:HandlePromotionFailure 等)、收集算法、Stop The World、对象分配规则、回收策略等都与 Serial 收集器完全一样,在现实上,这两种收集器也共用了相当多的代码。ParNew 收集器的工作过程如下图所示。ParNew 收集器除了

2021-07-04 18:27:04 304 1

原创 Jvm垃圾收集器总结(Serial收集器)

Serial收集器是最基本、发展历史最悠久的收集器,曾经(在Jdk1.3.1之前)是虚拟机新生代收集唯一的选择。从名字可以猜出,这个收集器是单线程的收集器,但它的“单线程”的意义并不是仅仅说明它只会使用一个CPU或一条线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,知道它收集结束。“Stop The World” 这个名字也许听起来很酷,但这项工作实际上是虚拟机在后台自动发起和自动完成的,...

2021-07-04 12:03:46 158 1

原创 list stream sort Comparator.nullsLast 避免空指针的正确用法

list排序中经常是针对对象的某个字段排序,但是字段为null是处理起来比较麻烦,java中有针对此情况的api,下面做详细介绍。代码案例@Testpublic void testListSort() { List<Book> bookList = new ArrayList<>(); bookList.add(new Book(null, "水浒传")); bookList.add(new Book(9, "钢铁怎样炼成的")); bookLi

2021-04-18 15:52:58 7091 1

原创 分布式CAP定理与Base理论

CAP定理(CAP Theorem),又被称作布鲁尔定理(Eric Brewer),1998年第一次提出。最初提出是指分布式数据存储不可能满足一下三种保证的两种以上一致性(Consistency)每次读取和收到的信息都是最新的;可用性(Availability)每个请求都会收到(非错误)响应;分区容错性(Partition tolerance)即使节点之间网络不通导致分区,系统仍继续运行。事实上,不仅是分布式数据存储应用,所有分布式应用都必须从CAP这三点中权衡。...

2021-03-28 13:30:00 98

原创 Java 手写实现 LRU 缓存机制

前言LRU是什么?是一种缓存淘汰策略。Least Recently Used 即最近最少被使用。为什么要用LRU?在计算机中,所有的文件操作都要放在内存中进行,然而计算机内存大小是固定的,所以我们不可能把所有的文件都加载到内存,因此我们需要制定一种策略对加入到内存中的文件进项选择。实现LRU应该具备哪些功能运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:条件:LRUCache(int capacity) 以正整数作为容量 ca

2021-01-10 22:22:21 781

原创 创建和使用Redis集群教程

要创建集群,我们需要做的第一件事就是让一些空的Redis实例在集群模式下运行。因为需要配置特殊模式,以便Redis实例将启用集群特定的功能和命令。系统: LinuxRedis版本:redis-6.0.9以下是Redis集群最简洁配置文件内容:port 7000 #端口号需改为和对应目录节点相等cluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yes如配置所见,启用集群模

2020-12-04 11:28:10 326 1

原创 springboot集成feign 拦截器Interceptor的使用

feign中可以使用拦截器Interceptor实现一些通用的业务逻辑,比如记录日志,权限校验等。feign提供了 feign.RequestInterceptor 接口,只需实现该接口,实现对应方法,并将实现类通过 @Component 交给spring容器管理,即可加上我们自己的通用处理逻辑。下面看代码实现:package com.wandou.springbootfeign.config;import feign.MethodMetadata;import feign.RequestInt

2020-11-20 14:32:55 4697

原创 springboot集成feign get方法怎么用对象传参

在项目中使用feign调用远程接口,有时对方是个get接口,而且有很多参数,写出来的feignclient就会有很多参数,我们很可能写出如下代码: @RequestMapping(path = "/s", method = RequestMethod.GET) String search(@RequestParam("param1") String param1, @RequestParam("param2") String param2, @RequestPa

2020-11-17 20:20:12 3965 5

原创 springboot单独使用feign调用远程http接口

项目开发中,我们有时会有调用远程接口的需求。一般,我们会用到Appache的HttpClient,这个方式会有很多代码量,并且每个人的写的HttpClientUtil可能都不一样,这样很不利于代码的同一,也很不优雅。下面介绍一种优雅的方式来实现远程http接口调用。feign-client首先我们基于springboot,pom文件如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apach

2020-11-16 20:42:34 2424

原创 Java如何判断一个数是奇数 有什么高效率的方式

这可能是历史上最简单的一道java面试题了。判断一个数是否是奇数public boolean isOdd(int i) {}上来个人小试牛刀,这还不简单嘛,然后代码可能是这样的。public boolean isOdd(int i) { if (i % 2 == 1) { return true; } else { return false; }}你别不信,我们曾经一个同事工作几年的程序员,就写出过如此代码,而且是在coderevie

2020-11-12 21:03:21 1969

原创 启动报错org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean xxx

今天写代码,一顿操作,封装等待。启动发现报错了,翻车现场。。。我的项目中代码@Componentpublic class A { @Autowired private B b;}@Componentpublic class B { @Autowired private A a;}显然,出现了循环依赖。解决方案1. 设计层面解决各业务层面的类做好分层,只有一个方向依赖关系,从根本上消灭循环依赖。比如 Controller -> Service ->

2020-11-02 17:42:58 3423 3

原创 synchronized和ReentrantLock的区别的详细解读分析实现方式

synchronized和ReentrantLock的区别synchronized和ReentrantLock是jdk中保证线程安全的两大常用手段,也是两大利器。那他俩有啥区别呢?或者各自的特定和使用场景怎么样的呢?梳理他俩区别要从多个方面来分析,见如下表格。synchronizedReentrantLock实现层面Jvm c++实现Jdk java语言实现是否自动解锁是否是否可重入是是是否公平否公平、非公平可选...

2020-10-28 02:29:28 252

原创 Java内存区域划分及各区域作用

Java虚拟机内存区域示意图:各分区都有什么特点,他们的作用是什么呢?1. 程序计数器(Program Counter Register)线程私有。程序计数器是一块较小的空间,它可以看做是当前线程所执行的字节码的行号指示器。2. Java 虚拟机栈线程私有。Java 虚拟机栈的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对

2020-10-27 21:05:44 551

原创 IDEA解决maven包冲突

maven包冲突虽然在工作遇到不是特别多,但是遇到了也是很挠头的,下面介绍一种解决方式,妈妈再也不用担心我的maven冲突了。包冲突显现出来的问题有:某些类找不到。原因:工程中引入了一个需要的依赖,但工程中其他依赖的包内部也可能会有相同的依赖,如果版本不同maven可能取了一个低的版本,然后可能造成某个类找不到。比如:在工程中引入了easypoi jar,要使用Excel导出功能。<dependency> <groupId>cn.afterturn</groupId

2020-10-27 11:34:29 2899

原创 两个线程交替打印A1B2C3 ... 的几种实现方式

有以下需求:两个线程,需要打印字母和数字,格式A1B2C3 …这个问题涉及到线程的等待,唤醒,线程间通信等知识。下面看看实现代码:import java.util.concurrent.locks.LockSupport;/** * @author liming * @date 2020/10 * @description 交替打印 A1B2C3 ... */public class AlternatePrint { static Thread t1 = null, t2 =

2020-10-13 20:13:30 2201 6

原创 Java手写锁Lock 实现一个自己的锁

在juc包下有一些工具类(如 LockSupport)可以帮助我们实现一个自己的锁。

2020-09-24 17:43:35 592

原创 一个来自一线程序员对Java线程池的理解 手写线程池 带你翻过线程池这座山 升级第二版啦

第一版地址:https://blog.csdn.net/wandou9527/article/details/107769598第二版对比第一版优化点:线程实现延迟创建,对内存更友好自定义线程池实现java.util.concurrent.Executor 接口,更加符合规范submit方法改为execute方法,语义更贴切加入对任务(command)的非空判断优化后又离完美线程池近了一步。废话不说,我们上代码。package com.wandou.demo.thread.post.th

2020-09-17 20:50:01 276 2

原创 MySQL varchar和char区别与使用场景记录

varchar存储MySQL字符串类型数据。本文基于MySQL 5.7xvarchar有以下特点:MySQL规定:一行数据的最大长度是65535字节,注意,是字节(byte),text、blob等大字段类型除外。varchar的存储需要单独记录其长度,是在列之外占用的空间,但包括在每行总字节数限制内。占用空间和使用字符集相关gbk(每字符占用2字节)utf8(每字符占用3字节)utf8mb4(每字符占用4字节)为什么是 varchar(255)?以varchar(255)为例,

2020-09-11 15:35:17 2060

原创 海量数据处理 大量数据中找出最大的前10个数 (Top K 问题)

在工作中我们常遇到此类问题,从一个大量甚至海量的数据中取出前几个大的数。必须在海量的文章中取出点击量最大的10篇文章。此类问题其实就是Top K问题。给定一个数据(数据量海量 N),想找到前 K 个最大的或最小的元素。eg:有10亿个Long型整数,如果找出其中最大的10个?最容易想到的方法是将数据全部排序,然后在排序后的集合中进行查找,最快的排序算法的时间复杂度一般为O(nlogn),如快速排序。每个Long类型占8个字节,10亿个数就要占用7GB+的存储空间,对于一些可用内存小于7GB的计算机而

2020-09-04 17:44:49 9595

原创 ArrayList为什么线程不安全 线程不安全体现在哪些方面 源码角度分析其具体原因

我们都知道ArrayList是线程不安全的,那么它不安全在哪里?又会出现什么并发问题呢?

2020-08-27 14:16:17 2246 1

原创 java中超过long范围的超大整数相加算法(面试高频)

java里有数字long来表示大的整数,如果两个数字的范围超过了long,要做加法算法怎么做呢?

2020-08-19 11:57:12 4798 1

原创 Java 手写线程池 带你翻过线程池这座山

如果想玩转 Java 的多线程与高并发,线程池是你永远也绕不过的山。既然绕不过,我们就啃他,吃透线程池,玩转高并发。

2020-08-09 18:59:20 475 4

原创 JVM GC Roots及Java的四种引用(强引用 软引用 弱引用 虚引用)

gc回收时jvm是如何判断对象已死的?

2020-07-31 22:49:59 544 2

原创 JVM GC 垃圾收集算法总结

jvm的垃圾收集算法总结起来有4种,严格来说应该是3种,下面一一详细介绍。由于垃圾收集算法涉及程序细节,而且各个平台的虚拟机操作内存的方法不同,因此这里不过多介绍算法的实现,注重几种算法的思想及发展过程。标记 - 清除算法最基础的算法“标记-清除”(Mark-Sweep)算法,算法分为“标记”和“清除”两个阶段:首先标记出所有要回收的对象,在标记完成后同一回收调,...

2020-06-03 20:06:06 201 1

转载 如果微信小程序中图片过多过大怎么办

推荐一篇博文,免费使用云存储解决。优雅。https://blog.csdn.net/m0_46184946/article/details/106108999

2020-05-15 16:12:18 4093

原创 HashMap源码分析之扩容时机

首先从一个面试题说起,题目:jdk8中,一个默认大小(16)的HashMap最少存储几个元素会达到扩容点?有的可能会说16*0.75=12,有的会说8,让我们一探究竟。...

2020-05-07 15:55:44 928

原创 github个人项目添加合作者(collaborator)

github个人项目添加合作者如果你想和朋友合作开发个项目,想在同一个仓库中开发,可以添加这个朋友为合作者(collaborator),这样他登录自己的账号也可以在你的仓库push,提交代码都很方便。步骤:项目 - Settings - Mange access - Invite a collaborator...

2020-05-05 16:43:31 7717 1

原创 dubbo 使用

1 dubbo是什么一款高性能的Java RPC框架一款简单、易用的Java RPC框架一款优秀的RPC服务治理框架由阿里贡献的开源RPC框架官网地址: http://dubbo.apache.org/zh-cn/index.htmlgithub: https://github.com/apache/incubator-dubbo官方学习文档: http:...

2019-11-16 17:54:03 187

原创 Redis实现简单的分布式锁 (RedisTemplate实现)

概述分布式锁有很多种实现方式,比如数据库,zk,Redis等。

2019-10-28 20:13:09 304

原创 Docker运行Java程序

创建SpringBoot程序在这篇文章中我们将在Docker容器中运行一个简单的SpringBoot的Web应用,下面是初始时刻的pom.xml中的内容。<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www...

2019-09-23 20:33:22 620

原创 微信小程序开发图片上传到网络云存储生成外链引用(微信自带、七牛云等)

微信小程序开发图片上传到网络云存储在小程序个人开发中,今天在项目里添加了几个图片,但上传代码时提示代码包过大(不可超过2M)。一阵纠结。现在交给大家一个方式,把图片上传至网络,可在小程序中引用。重点是免费,适合个人开发练习。步骤在微信开发者工具左上方有个云开发图标,点击。弹出窗云开发控制台,点击开通,会要求输入环境名称,无特殊要求。后选择版本基础版是免费的。云开发有4个功能:运营分析、数据...

2019-09-15 17:21:47 3500

原创 Java的单例模式探索

目录Java的单例模式探索01020304Java的单例模式探索单例模式是最常见的设计模式,也是面试必问的(基本)。你真的会写一个正确的高效的单例吗?下面分几个阶段介绍写法,直接上代码01public class SingletonDemo { private static SingletonDemo instance = null; private Singleton...

2019-08-07 15:36:38 147

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除