自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Get请求报400错误常见问题及解决方案

我们常用的接口请求方式是Get或者Post请求,而我们使用Post请求的时候,参数使用JSON格式的时候会比较多,而我们使用Get请求时,常常使用的传参形式,多为Key-value的形式。而最近我使用Get请求的时候,遇到一个问题,需要传送key对应的Value为一个集合的时候。在接口测试的时候,无论怎么书写,都会抛出400 Request的错误,就是传参类型不匹配。后来经过百度得知,当我们在...

2019-10-31 09:39:12 24715 2

原创 Redis缓存更新修改原有值但是不修改失效时间

Redis缓存技术是现在开发常用到的技术,缓存更新也是很常见的情况,但是有时我们将缓存设置了失效时间,而我们需要更新缓存中的值但是又不想修改失效时间,希望缓存可以原定的失效时间失效。这时候就需要用到Redis的SETRANGE。Redis的命令行中有一个命令就是覆盖key对应的Value。redis> SET greeting "hello world"OKredis>...

2019-08-08 17:10:10 13849

原创 Dubbo封装异常处理Filter报AppResponse represents an concrete business response解决方案

Dubbo异常问题处理解决方案

2022-06-17 15:14:30 1530

原创 撸了一天Netty的源码,我凌乱了

目录传统NIO初始化步骤Netty初始化时序图Netty初始化入口AbstractBootstrapReflectiveChannelFactoryNioServerSocketChannelnewSocket() --- 重要thisAbstractNioChannel -- 重要ServerBootstrapChannelFuture regFuture = this.config().group().register(channel); --- 重要..

2021-01-07 17:21:34 359

原创 手把手教你用Netty实现一个RPC框架

写在开头本文使用Netty简单实现一个RPC框架,包括服务端,客户端,注册中心等,暂时不考虑监控,并且因为使用的Netty,所以使用到了Netty的封装API,所以不熟悉NettyAPI的小伙伴可以先熟悉一下API,我在代码中也注释了相关步骤和逻辑,因为Neety其实就是对网络通信的封装框架,所以底层还是IO那一套。建议大家熟悉一下NIO的三件套,buffer,selector,channel。项目结构api 服务接口 consumer 消费者 protocol 策略对象 provi.

2021-01-05 14:18:40 628 1

原创 记年底一波JAVA面经,希望你能用的到

一面、笔试笔试题还是比较中规中矩,比较幸运没有算法,公司可能比较看中SQL能力,所以大部分题目都是SQL相关的,有道并发解决问题,需要你提供技术解决方案。本次没有算法 SQL 高并发解决方案:流量削峰的整体设计方案(高可用,一致性等方法考虑)二面、技术面试做完笔试题和个人基本信息的填报,紧接着就是二轮技术面试,面试官很和蔼,言语之间很有礼貌,所以交流的比较舒服和流畅。自我介绍大部分面试流程一样,首先自我介绍,我主要是根据个人情况,工作经历,日常,性格等简单介绍了一下,也就是开场白。

2020-12-30 10:09:44 275

原创 一篇文章带你读懂ConcurrentHashMap的源码和原理

目录一、为什么要使用ConcurrentHashMapHashMapJDK1.7(闭环)JDK(1.8)Hashtable二、ConcurrentHashMap源码解析ConcurrentHashMap的数据结构ConcurrentHashMap是如何保证线程安全的呢?ConucurrentHashMap分析put()putVal()initTable()tabAt()addCount()fullAddCount()sumCount()..

2020-11-17 16:19:07 310

原创 吃透AQS的核心原理,有这一篇文章就够啦

ReentrantLock 的实现原理 我们知道锁的基本原理是,基于将多线程并行任务通过某一种机制实现线程的串 行执行,从而达到线程安全性的目的。在 synchronized 中,偏向锁、 轻量级锁、乐观锁。基于乐观锁以及自旋锁来优化了 synchronized 的加锁开销, 同时在重量级锁阶段,通过线程的阻塞以及唤醒来达到线程竞争和同步的目的。 那么在ReentrantLock中,也一定会存在这样的需要去解决的问题。就是在多线程 竞争重入锁时,竞争失败的线程是如何实现阻塞以及被唤醒的呢?...

2020-11-05 16:35:25 341

原创 学会MySQL的索引有这一篇文章就够啦!(MySQL索引原理和使用原则)

1.何为索引数据库索引是数据库管理系统中排序的数据结构,用来协助快速查询,更新数据库表中的数据。首先数据是以文件的形式存放在磁盘上面的,每一行数据都有它的磁盘地址。如果没有索引的话,要从500万行数据里面检索一条数据,只能依次遍历这张表的全部数据,直到找到这条数据。但是有了索引之后,只需要在索引里面去检索这条数据就行了,因为它是一种特殊的专门用来快速检索的数据结构,我们找到数据存放的磁盘地址以后,就可以拿到数据了。就像我们从一本500页的书里面去找特定的一小节的内容,肯定不可能从第一页开

2020-10-15 14:30:12 191

原创 一条MySQL语句是如何执行的?(浅谈MySQL架构与语句执行流程)

目录一条查询寻语句是如何执行的?1.建立链接1.1 通讯协议1.2 通讯方式(半双工)2.查询缓存(数据库默认关闭,并在8.0版本之后彻底抛弃)3.语法解析、预处理3.1 语法解析3.2 预处理4.查询优化4.1 什么是优化器(执行的SQL--->优化器--->多个执行计划--->根据cost(开销)最少的执行)5.存储引擎6.执行引擎一条更新语句是如何执行的?1.缓冲池(Buffer Pool)buffer PoolChan

2020-10-14 10:00:29 289 2

原创 (JVM调优实战篇 一) JVM基础知识概览

目录一、JDK8 概览二、编译分析三、类加载机制图解(了解即可)四、运行时数据区 (Run-Time Data Areas)一、JDK8 概览JDK ---> JRE ----> JVM我们平常开发中常用到的是JAVASE相关的API,进行业务开发,但是我们对JAVA的其余相关关注并不是太高,就比如,当我们编辑好JAVA文件,当文件通过JAVAC被编译成为 .class 文件之后的事情,我们并不是太关心,本文今天以JAVA---->JAVAC----&g..

2020-09-25 14:13:06 134

原创 300行代码带你了解Spring的核心运行原理

一、Spring核心原理分析Spring在目前JavaSE开发领域占有绝对的主导地位,可以毫不夸张的说现在任何一家公司项目的主导框架绝对是Spring。那么为何大家都这么齐心的选择Spring呢。原因很简单,易上手,封装度高,简化开发,提升效率。Spring是一个BOP编程框架,何为BOP呢? 所谓BOP就是 Bean OrientedProgramming,面向Bean编程。这种思想,可以联想Java本省的OOP编程,面向对象编程。而Bean对于BOP,就相当于Object对于OOP的意义一样。.

2020-09-22 11:12:29 255

原创 (面试突击宝典-Spring高频面试题) 应对Spring,有这一篇文章就够了

写在开头:最近在理解常用设计模式之后,准备系统的学习Spring源码,当然在学习源码的同时我也会尝试的总结一些高频面试题的答案,所以本博客是一篇长期更新帖!!!我们走过最长的路,就是面试官的套路。常见面试题:Spring的中的Bean是线程安全还是不安全的?这个题目应该是Spring面试题中的高频面试题了,基本问到Spring的时候,大部分面试官都会问到这个问题。首先如果是说是安全的或者说是不安全的时候,基本面试官就已经对你已经有个大致的了解了。其实,比较合理的答案应该是 没有关系

2020-09-17 19:20:14 230

原创 (面试突击宝典-设计模式) 工厂模式、策略模式联合使用原来这么香

目录一、模拟场景二、需求整理三、简单代码演示一、模拟场景某商城系统引用促销活动,用户可以根据自己的需要通过促销活动购买自己心仪的商品。某初级程序员小哥可忙坏了,因为产品那边的促销活动层出不穷,返现,拼团,优惠券等等等,小哥满头大汗,根据业务需求一个一个实现,忙的不可开交,终于功夫不负有心人,所有业务实现并且测试没问题,准备上线啦,信心满满。这时候他的开发组长代码评审的时候看到了这期需求的业务代码,促销活动的代码冗余在一起,一个电脑屏幕拉不到头的if-else判断简直要..

2020-09-15 15:15:18 233

原创 (面试突击宝典-设计模式) 关于单例模式你不知道的那些事

一、单例模式的应用场景单例模式确保一个类在任何情况下都只有一个实例,并且只提供一个全局访问点 构造方法私有(隐藏所有的构造方法​​​​​​​​​​​​​​ 我们常用的开发框架中就有很多单例模式的应用场景,就拿最常用的Spring来说,ApplicationContext全局中就有且只有一个实例,J2EE中的ServletContext也一样。二、常见的单例模式饿汉式单例 懒汉式单例 注册式单例 ThreadLocal单例饿汉式单例...

2020-09-05 18:40:26 203

原创 为了拿高薪先给自己定一个小目标,万一实现了呢!

目录一、前期总结二、更改原因三、计划四、期望一、前期总结博主18年大学毕业,到今年算下来也算是个有两年工作经验的小菜鸡,在刚毕业参加工作的时候,因为刚刚接触实际的业务开发,跟上学学的大部分理论还是有些出入,所以每天忙着熟悉业务,熟悉技术,并没有太多的时间来梳理博客这个东西。大约在19年4月份左右,工作快一年的时间了,慢慢的也算入了行,在闲暇的时间,也习惯去总结一些东西在博客上。主要是包含几个方面。项目开发中遇到的技术难点,解决方案 新鲜技术学习笔记记录 技术分享 闲聊

2020-08-11 14:58:12 363

原创 连锁的分类都搞不清,就更不要谈多线程开发啦!!!

目录一、乐观锁&悲观锁二、独享锁&共享锁三、公平锁&非公平锁四、互斥锁&读写锁五、可重入锁六、分段锁七、偏向锁 & 轻量级锁 & 重量级锁锁是多线程开发中的重要组成部分,涉及到多线程开发,那么锁肯定是必不可少的模块,本文简单对锁进行了分类,方便大家更通俗的理解锁。乐观锁,悲观锁 独享锁,共享锁 公平锁,非公平锁 互斥锁,读写锁 可重入锁 分段锁 锁升级(无锁-->偏向锁-->轻量级锁-->重量级

2020-08-01 14:53:29 114

原创 原来解决Redis击穿、雪崩、穿透真的不是那么简单的一件事!!(缓存穿透)

一、缓存穿透缓存击穿 缓存雪崩之前两篇文章已经介绍和分析了缓存击穿和雪崩的场景和解决案例,本文主要介绍缓存穿透。缓存击穿,缓存穿透两个名词很像,很多人分不清。击"穿": 数据在数据库中真是存在,缓存丢失,大量请求击穿数据库 穿"透": 数据在缓存中不存在,在数据库中也没有,就像透过数据库找数据一样其实,击穿大部分情况是热点key丢失导致数据库宕机,而穿透绝大部分情况下是黑客脏数据重复请求,缓存和数据库中都不存在的数据频繁的查询,最后导致数据库宕机。 ...

2020-07-07 20:58:26 264 2

原创 原来解决Redis击穿、雪崩、穿透真的不是那么简单的一件事!!(缓存雪崩)

目录一、缓存雪崩二、解决方案分析三、总结一、缓存雪崩解决缓存击穿(原因解析及方案分析) 上一篇文章主要分析了缓存的实际应用场景,项目请求流程,缓存问题的出现场景,本文主要解析缓存雪崩。首先,再了解了缓存击穿后,再了解缓存雪崩,大家可能更容易理解。简单点说,就是大面积的缓存key失效,导致大量请求绕过缓存直接访问数据库,导致数据库一时间压力过大,处理能力下降,甚至崩溃。其实,这样一读起来大...

2020-07-07 11:19:55 357

原创 原来解决Redis击穿、雪崩、穿透真的不是那么简单的一件事!!(缓存击穿)

缓存技术是我们为了减少数据库压力而衍生出来的,Redis是当下解决缓存最常用的组件,当然Redis击穿,雪崩,击透也是我们面试的高频面试问题,但是往往大部分面试者都是给网上找到的问题答案给面试官背一遍,但是网上的方式真的能解决开发中的问题吗?绝大部分人都肯定都没有去验证,也就没有真的去考虑方法的可行性。其实,击穿、雪崩、击透的真正崩溃的是数据库,那么能导致数据库崩溃的前提是高并发。一、分析请求流程首先,客户端(APP、WEB)用户触发请求 负载均衡Nginx请求转发,流量分散层分发请求 Ga

2020-07-06 20:24:37 1191

原创 如何对成员变量优雅的NULL值判断,这一篇文章就够啦!

空指针异常(NullPointerException),这个异常可能伴随这程序员的整个职业生涯。当然,作为程序员对这个异常往往也是司空见惯。为了避免程序中因为数据,代码或者种种原因抛出这个异常,我们时常需要对成员变量进行NULL值判断。 if(null == costRecord){ return new CostRecord(); } return costRecord;很简单的一串代码。null值判断完全没什么问题,那么.

2020-07-04 14:56:56 823

原创 吐血整理微服务架构API网关的小技巧(Gateway简单入门)

目录一、场景介绍二、API网关什么是API网关?API能做什么事情?三、Gateway什么是GatewayGateway的几个重要组件怎么用Gateway?四、搭建入门Gateway(省去Cloud配置)引入依赖配置yml(也可使用配置类在项目中配置)四、总结一、场景介绍开发过程中,随着业务需求的增加,处理请求瓶颈等等原因,大部分公司会将原有的单体架构服务向微服务架构迁移。举个简单的例子,原某个单体架构中有用户中心,基础数据,支付等等多种业务。一个服.

2020-06-29 14:08:48 1306

原创 分布式系统中获取唯一ID原来这么简单?

目录一、分布式系统中常见的需要获取唯一ID的场景二、获取唯一ID的方式三、SnowFlake 雪花算法四、代码实现一、分布式系统中常见的需要获取唯一ID的场景微服务中多个服务完成业务逻辑,需要保持某个业务字段唯一订单模块,多个服务配合完成整套业务,包括用户,库存等等。订单ID需要唯一的业务单号。分表分表,保证主键唯一。二、获取唯一ID的方式 使用UUID获取全局唯一的标识码,32位标识码 缺点:完全无序,作为数据库唯一标识码,数据库B+Tree结构,节点可能在还没...

2020-06-22 19:43:15 1364

原创 再也不用担心面试官让我用Redis实现分布式锁啦(二、Redisson实现分布式锁)

目录一、Jedis实现分布式锁二、Redisson实现分布式锁(单机Redis) 一、引入依赖(3.5.7) 二、配置redis 三、配置RedisonConfig 四、提供锁接口及实现,方便统一调用 五、提供测试接口,测试分布式锁一、Jedis实现分布式锁二、Redisson实现分布式锁(单机Redis) 一、引入依赖(3.5.7) <!-- redisson 分布式锁 --> ...

2020-06-09 09:02:50 453

原创 大饼太硬鸡汤太腻,最终我还是扛不住了

博客断更大概有半个多月的时间,大致的原因是因为自己最近忙着面试,实在是有些力不从心,没有太多的时间去写博客。今年疫情突如其来,博主跟大部分程序员兄弟一样,本打算在公司安安稳稳的呆着,不做他想,但是出于各种原因,还是选择在这种极端情况下离职了。。。。虚假的狼性文化公司称自己是即将上市的 "互联网" 公司 ,大肆宣扬互联网大厂的狼性文化,鼓吹996,老板一天在钉钉群里发加班的照片,鼓励加班文化,白天划水,晚上8点多给你来个开会。可是加班可以,学习狼性文化可以,你给给狼喂饱了呀。分文不出,抠门到家,晚上没

2020-05-21 10:44:59 835 9

原创 面试官,求你不要再问我HashMap的实现原理了(一)

面试官 : 平常开发过程中使用过的HashMap吧。面试者:使用过。面试官:那你可以给我简单介绍一下HashMap的实现原理吗?。。。。。。。。。。这种场景Java开发的小伙伴在面试过程中肯定遇到过,当然,每个人的回答的程度都不一样,作者总结了一些常常会被问到的问题。一方面,帮助方便大家面试,另一方面,可以让大家对HashMap可以有一个比较深的认识。面试开始!!!面试官:...

2020-04-28 17:57:50 340

原创 再也不用担心面试官让我用Redis实现分布式锁啦(一、Jedis实现分布式锁)

目录一、分布式锁实现方式二、分布式锁得可靠性三、jedis实现Redis分布式锁获取分布式锁错误示例1释放锁错误实例1错误实例2一、分布式锁实现方式数据库乐观锁mybatis实现数据库乐观锁解决并发问题实践 基于Redis实现分布式锁 基于Zk的分布式锁二、分布式锁得可靠性互斥性,同一时间段只有一个客户端能持有锁 避免死锁,即使某一客...

2020-04-21 15:29:16 810

原创 手把手教你写个Mybatis框架 (支持注解形式)

一、手把手教你写个Mybatis框架上文:https://blog.csdn.net/ls490447406/article/details/105598980二、支持注解形式进行数据库交互一、Mybatis-config (开启注解扫描)<mappers> <!-- 使用xml--> <!--<mapper r...

2020-04-18 18:08:57 485

原创 手把手教你写个Mybatis框架

日常开发常用的持久层框架 Hibernate、Mybatis。本文按照Mybatis的执行流程简单搭建一个Demo,仅仅供大家对Mybatis框架有个更加透彻的理解。目录一、Mybatis的执行流程解读二、开发环境准备二、Mybatis相关Mybatis-config.xmlConfigMapperResourcesDataSourceUtilsExecu...

2020-04-18 16:09:08 646

原创 SpringBoot读取配置文件实现配置自动注入的多种方式

日常开发中,我们常常将项目共用的配置提取到 yml 或者 properties 配置文件中,在项目启动时,将相应配置从配置文件中读取出来注入对应的属性中。一、apollo(建议)阿波罗是简化开发,使得配置可以动态配置的一个插件,在项目中使用,不仅可以实现项目配置的自动注入,还可以完成配置的动态配置,当我们使用其的时候,如果我们需要在项目启动的时间内,修改项目中的某一处配置,我们就在阿波罗修...

2020-04-09 15:51:08 1098

原创 原来Redis两条命令就能实现简单分页啦!你Get到了吗?

开发有时候为了减少数据库的压力,常常要使用Reids缓存,但是Reids基于内存而且单线程,所以最忌讳的就是大key,大value来给造成阻塞。所以常常有时候我们需要使用Reids分页来实现大数据量存储。 比如:微博评论等等。如何实现Reids分页?分页其实很简单,在关系型数据库Mysql等中,只需使用 limit 关键字,就可以很简单的实现分页,插入起始索引,查询数目就可以完成。当然分页...

2020-04-01 11:42:30 3418 2

原创 Oracle 实现批量插入并且获取批量插入的主键id

Oracle 批量插入使得主键自增有很多实现方式,笔者使用的是较为简单的(序列)的方式,实现批量插入。但是有个问题,就是批量插入的同时获取每条插入数据的序列号。因为Oracle本身不像Mysql,是不支持批量返回主键id的,这也就是说,Mysql结合Mybatis的自动赋值主键的注解是无效的。当然,获取主键主要两种。方式一: 先拿到主键,再批量插入。方式二: 批量插入,再拿到主键。笔...

2020-03-12 16:27:32 5620 3

原创 List利用Java8特性stream计算两集合中相同元素的个数

List的JDK1.8的新特性 stram流进行过滤查重List01.stream().filter(List02::contains).count();

2020-03-02 20:46:07 4370 2

原创 Java 两个int类型相除 保留2位有效小数

private double deciMal(int top, int below) { double result = new BigDecimal((float)top / below).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); return result; }

2020-02-21 09:43:44 1762

原创 Mybatis使用多个参数执行批量插入数据方法时主键自动赋值的踩坑记录

mybatis批量插入数据是常用到的操作,而且大部分时候我们需要将生成的主键做到自动赋值,当然mybatis框架给我们提供了解决方法。这是单个参数的情况,但是如果我们要传入多个参数呢?这时候如过还是按照上面直接填集合对象中的某一个属性名称的时候,就会报出异常。所以我们需要按照mybatis的要求param.id 去填写 也就是 定义名称.属性名如下图如果并没有...

2020-02-11 17:51:44 1126

原创 获取List集合中某个基本数据类型元素、某个引用对象元素中的属性的最值

实际开发业务中经常碰到业务场景取最值的问题,当然最粗暴的解决办法就是遍历集合依次比较寻求其中的最值,但是有时候我们可以考虑一下,Java是否给我们提供了现成的方法可以让我们直接去使用呢?JDK8中 Collections 给我们提供了解决方法。若我们集合中存放的就是可以直接比较大小的数据类型,比如int,我们可以直接使用,来获取最值问题。Collections.min(list)...

2020-01-13 15:37:11 1353

原创 判断经纬度是否存在于某一个多边形的区域内(亲测有效)

/** * 判断点是否在多边形内 * @Title: IsPointInPoly * @param point 测试点 * @param pts 多边形的点 * @return * @return boolean * @throws */ public static boolean isInPolygon(...

2020-01-08 16:42:25 2927 2

原创 重试利器之Guava Retrying (一、介绍及简单实现)

何为Guava Retrying?guava-retrying是基于谷歌的核心类库guava的重试机制实现,可以说是一个重试利器。Guava Retrying的使用场景?在高并发开发的过程中,调用接口实现相关业务逻辑是很平常的一件事情,可是往往有时候在调用接口的过程中会因为某些因素,比如网络延迟等,造成接口调用的失败,而往往有些时候数据的重要性是不允许我们调用失败就抛个异常打个日志那么...

2020-01-02 16:58:51 3170

原创 基于SpringBoot和注解实现策略模式解决重复使用(if--else)的问题

应用场景:实际开发:最近在项目中遇到一个开发场景,需要根据type值判断来执行对应的业务逻辑,这样就涉及到重复的if-else的问题,为了解决这样重复的代码来造成的代码冗余的问题,所以考虑使用策略模式,根据具体的场景执行对应的策略,来解决问题。本文简单写一个测试Demo,实际开发需要根据具体业务,具体实现对应的业务逻辑。总结:因为业务需求需要重复的判断,造成代码冗余。具体方案(...

2019-12-17 17:46:48 1384

原创 List利用Java8特性stream根据集合中对象的某个属性去重

import static java.util.Comparator.comparing;import static java.util.stream.Collectors.collectingAndThen;import static java.util.stream.Collectors.toCollection;//根据id去重 List<User> un...

2019-12-07 09:35:30 8104

空空如也

空空如也

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

TA关注的人

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