自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

胖大海

吾生也有涯,而知也无涯

  • 博客(66)
  • 资源 (1)
  • 收藏
  • 关注

原创 宝塔下 nginx 支持图片放缩

nginx中自动放缩图片

2022-12-09 14:57:21 1149 1

原创 什么是缓存穿透,如何解决?

日常开发中,大家经常使用缓存,但是你知道大型的互联网公司面对高并发流量,要注意缓存穿透问题吗!!! 本文会介绍布隆过滤器,空间换时间,以较低的内存空间、高效解决这个问题。1、性能不够,缓存来凑现在的年轻人都喜欢网购,没事就逛逛淘宝,剁剁手,买些自己喜欢的东西,释放下工作压力。地址:https://detail.tmall.com/item.htm?id=628993216729上图是一个天猫 iphone12 的商品详情页,id表示商品的编号我们都知道淘宝的访问...

2021-08-12 11:36:40 1676

原创 SpringBoot 代码规范

如何更规范化编写Java 代码Many of the happiest people are those who own the least. But are we really so happy with our IPhones, our big houses, our fancy cars?忘川如斯,拥有一切的人才更怕失去。背景:如何更规范化编写Java代码的重要性想必毋需多言,其中最重要的几点当属提高代码性能、使代码远离Bug、令代码更优雅。一、MyBatis 不要为了多个查询..

2021-08-12 10:14:18 1494

原创 对象copy之BeanUtils

这里说的是spring的BeanUtils.copyProperties。场景开发中经常遇到,把父类的属性拷贝到子类中。通常有2种方法: 一个一个set 用BeanUtils.copyProperties 很显然BeanUtils更加方便,也美观很多。那么任何情况都能使用BeanUtils么,当然不是。要先了解他。BeanUtils是深拷贝,还是浅拷贝?是浅拷贝。 浅拷贝:只是调用子对象的set方法,并没有将所有属性拷贝。(也就是说,引用的一个内存地址)

2021-08-12 09:58:58 513

原创 Nginx 应用场景

一、HTTP服务器Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。1、 首先在文档根目录Docroot(/usr/local/var/www)下创建html目录, 然后在html中放一个test.html;2、 配置nginx.conf中的serverusermengdaystaff;http{server{listen80...

2021-08-12 09:54:58 126

原创 Field injection is not recommended的原因探解

本章的内容主要是想探讨我们在进行 Spring 开发过程当中,关于依赖注入的几个知识点。感兴趣的读者可以先看下以下问题: @Autowired,@Resource,@Inject三个注解的区别 当你在使用@Autowired时,是否有出现过Field injection is not recommended的警告?你知道这是为什么吗? Spring 依赖注入有哪几种方式?官方是怎么建议使用的呢? 如果你对上述问题都了解,那我个人觉得你的开发经验应该是不错的????。下面

2021-08-12 09:48:13 2920

转载 一种通用整形数组压缩方法

我们在开发中后台应用或者中间件的时候,会存储一些数据在内存中以加快访问速度。随着数据量的增加,除了可以放置于堆外,还可以通过实时压缩来缓解。今天就给大家介绍一种压缩整形数组的方式。一 数据压缩数组指long[]或者int[]类型,在 Java 中应用很广。当数据量很大时,其内存占用的问题便突显出来,原因是一个 long 类型是占 8 个字节,而 int 也是占用 4 个字节,当有千万级别的数据时,其占用的空间便是上百 MB 级别的了。1 去冗余首先想到的就是缩减每个数字占用的空间...

2021-07-14 09:01:24 935

原创 有了HTTP,为什么还要RPC?

本文简单地介绍一下两种形式的 C/S 架构,先说一下他们最本质的区别,就是 RPC 主要是基于 TCP/IP 协议的,而 HTTP 服务主要是基于 HTTP 协议的。我们都知道 HTTP 协议是在传输层协议 TCP 之上的,所以效率来看的话,RPC 当然是要更胜一筹啦!下面来具体说一说 RPC 服务和 HTTP 服务。OSI 网络七层模型在说 RPC 和 HTTP 的区别之前,我觉的有必要了解一下 OSI 的七层网络结构模型(虽然实际应用中基本上都是五层)。它可以分为以下几层:(从上到下

2021-06-28 11:58:33 143 1

原创 PO,VO,DAO,BO,POJO 详解

POpersistant object:持久层对象。对应数据库中表的字段。VO 和 PO 都是属性加上属性的 get 和 set 方法;表面看没什么不同,但代表的含义是完全不同的。DTOdata transfer object:数据传输对象。表里面有十几个字段:id,name,gender(M/F),age,conmpanyId(如001)...页面需要展示四个字段:name,gender(男/女),age,conmpanyName(如今日头条股份有限公司)。DTO由此产生,一是

2021-06-17 16:06:51 148

转载 MySql批量插入时,如何不插入重复的数据?

业务很简单:需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入那么问题来了,是不是每次插入之前都要查一遍,看看重不重复,在代码里筛选一下数据,重复的就过滤掉呢?向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率看来这个问题不止我一个人苦恼过。解决的办法有很多种,不同的场景解决方案也不一样,数据量很小的情况下,怎么搞都行,但是数据量很大的时候,这就不是一个简单的问题了。几百万的数据,不可能查出来,做去重处理...

2021-06-17 16:02:00 233

原创 Springboot中常用的log组件分析

Slf4jslf4j 的全称是 Simple Loging Facade For Java,它仅仅是一个为 Java 程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如 JDBC 一样,只是一种规则而已。所以单独的 slf4j 是不能工作的,必须搭配其他具体的日志实现方案,比如 apache 的 org.apache.log4j.Logger,jdk 自带的 java.util.logging.Logger 等。简单语法SLF4J 不及 Log4J 使用普遍,因为许多开发者熟悉 L

2021-03-18 14:01:58 491

原创 浅显易懂认识23种设计模式

01 工厂方法追 MM 少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是 MM 爱吃的东西,虽然口味有所不同,但不管你带 MM 去麦当劳或肯德基,只管向服务员说「来四个鸡翅」就行了。麦当劳和肯德基就是生产鸡翅的 Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。02 建造者模式MM 最爱听的就是「我爱你」这句话了,见到不同地方的 MM...

2021-03-17 11:55:25 125

原创 Vue微信自定义分享时安卓系统config:ok,ios系统config:invalidsignature签名错误的解决办法

这两天在做微信自定义分享的需求,使用JS-SDK的页面注入配置信息时安卓系统config:ok,ios系统config:invalid signature签名错误。然后去查微信jssdk的文档,里面所说的config:invalid signature可能原因你都一个个查验过发现没有问题,但是还是提示签名错误,是不是很抓狂很蛋疼???然后你再去查请求配置信息时的动态URL是否有问题,你会发现安卓ios打印出来的url都是正确的,问题究竟出在哪里呢???就问你难不难受!!!安卓系统签名没问题,ios系统签

2021-03-16 17:04:45 1425

转载 SpringCloud中Hystrix容错保护原理及配置

1 什么是灾难性雪崩效应?如下图的过程所示,灾难性雪崩形成原因就大致如此:造成灾难性雪崩效应的原因,可以简单归结为下述三种: 服务提供者不可用。如:硬件故障、程序BUG、缓存击穿、并发请求量过大等。 重试加大流量。如:用户重试、代码重试逻辑等。 服务调用者不可用。如:同步请求阻塞造成的资源耗尽等。 雪崩效应最终的结果就是:服务链条中的某一个服务不可用,导致一系列的服务不可用,最终造成服务逻辑崩溃。这种问题造成的后果,往往是无法预料的。2 如何解决灾难性雪崩效应?

2021-03-16 16:57:37 178

原创 redis 做缓存时常见问题

1.缓存雪崩什么是缓存雪崩 缓存雪崩就是指缓存由于某些原因(比如 宕机、cache服务挂了或者不响应)整体crash掉了,导致大量请求到达后端数据库,从而导致数据库崩溃,整个系统崩溃,发生灾难。如何解决?1. 高可用 多增加几台redis,防止一台挂掉,整个服务不可用2.先来降级 缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。或者使用断路器,如果缓存宕机,为了防止系统全部宕机,限制部分流量进入 DB,保证部分可用,其余的请求返回断路器的默认值。3.数据预热...

2021-03-15 10:22:21 171

原创 mysql性能优化策略

1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2,应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。3,应尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。4,应尽量

2021-03-12 09:12:34 130

原创 mysql 常用命令

库的基本操作1.创建数据库:mysql>createdatabaseceshi;2.连接数据库mysql>useceshi;3.查看当前使用的数据库mysql>selectdatabase();4.当前数据库包含的表信息mysql>showtables;5.删除数据库mysql>dropdatabaseceshi;表的基本操作一、建表1.命令:createtable<表名>(<字段...

2021-03-12 08:57:38 105

原创 微信公众号获取不到用户发送的消息和事件的解决方案

最近做关于微信共中号的开发,遇到了一个很奇怪的问题,无论如何也收不到用户发送过来的消息和接收不到事件,通过微信提供的工具检测也是没有问题的检测结果为:提示是成功的,但是怎么也就接收不到对应的消息。。。最后突然想起来之前好像遇到过,具体忘记了,好像要加结束 / ,抱着试试的心态试了一下,果然好了解决方案:在配置的接口中,请求地址之后加/能解决问题,如下图所示:真是太坑了,特此记录,希望能帮助更多的人,也希望微信能解决这个bug...

2021-03-09 16:46:30 3449 4

原创 synchronized 实现原理

前言众所周知synchronized锁在Java中经常使用它的源码是C++实现的,它的实现原理是怎样的呢?本文以OpenJDK 8为例探究以下内容。synchronized 是如何工作的 synchronized 锁升级过程 重量级锁的队列之间协作过程和策略对象头对象头的内容非常多这里我们只做简单介绍以引出后文。在 JVM 中对象布局分为三块区域:对象头 实例数据 对齐填充当线程访问同步块时首先需要获得锁并把相关信息存储在对象头中。所以wait、notify...

2021-03-05 11:20:45 485 1

原创 设计模式基础之——模板模式业务实战

前言本文章主要采用如下结构:什么是「XX 设计模式」? 什么真实业务场景可以使用「XX 设计模式」? 怎么用「XX 设计模式」?本文主要介绍「模板模式」如何在真实业务场景中使用。什么是「模板模式」?抽象类里定义好算法的执行步骤和具体算法,以及可能发生变化的算法定义为抽象方法。不同的子类继承该抽象类,并实现父类的抽象方法。模板模式的优势:不变的算法被继承复用:不变的部分高度封装、复用。 变化的算法子类继承并具体实现:变化的部分子类只需要具体实现抽象的部分即可,方便扩展,且可无限

2021-03-05 11:15:39 306

原创 数据库SQL语句中 where,group by,having,order by的执行顺序

一、SQL查询1.查询中用到的关键词主要包含六个,并且他们的顺序依次为:select>from>where>group by>having>order by其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行:from>where>group by>having>select>order byfrom:需要从哪个数据表检索数据where:过滤表中数

2021-03-03 08:46:50 2057

原创 ArrayList与linkedList区别及扩容方式

1. ArrayArray(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排数组中的所有数据, (因为删除数据以后, 需要把后面所有的数据前移)缺点:数组初始化必须指定初始化的长度, 否则报错例如:int[] a = new int[4];//推介使用int[] 这种方式初始化int c[] = {23,43,56,78};//长度:4,索引范围:[0,3]2.

2021-03-03 08:43:41 1508

原创 Java 编程规范 ---- 华为篇

1、引言这个标准是衡量代码本身的缺陷,也是衡量一个研发人员本身的价值。华为作为一家全球化的 IT 公司,十几万员工,无论是人事管理,还是代码管理,都是一件不容易的事情,没有规范的约束,想想都是件可怕的事情。下面挑选了一些网上流传的编程规范,一起来学习下,以下内容不涉及基础的语法规范(请见 Refer),更侧重于一些编程习惯,如何提高程序的健壮性、可维护性等。2、军规简介军规一:【避免在程序中使用魔鬼数字,必须用有意义的常量来标识。】军规二:【明确方法的功能,一个方法仅完成一个功能。】军规

2021-03-02 13:40:52 1991

原创 RabbitMQ 总结

前言 -RabbitMQ 是基于 AMQP 协议的,通过使用通用协议就可以做到在不同语言之间传递。- AMQP 协议 -核心概念1、Server:又称 broker,接受客户端连接,实现 AMQP 实体服务。2、Connection:连接和具体 broker 网络连接。3、Channel:网络信道,几乎所有操作都在 channel 中进行,channel 是消息读写的通道。客户端可以建立多个 channel,每个 channel 表示一个会话任务。4...

2021-02-25 09:53:09 309

原创 Jar包冲突问题及解决方案!

Jar包冲突是老生常谈的问题,几乎每一个Java程序猿都不可避免地遇到过,并且也都能想到通常的原因一般是同一个Jar包由于maven传递依赖等原因被引进了多个不同的版本而导致,可采用依赖排除、依赖管理等常规方式来尝试解决该问题,但这些方式真正能彻底解决该冲突问题吗?答案是否定的。笔者之所以将文章题目起为“重新看待”,是因为之前对于Jar包冲突问题的理解仅仅停留在前面所说的那些,直到在工作中遇到的一系列Jar包冲突问题后,才发现并不是那么简单,对该问题有了重新的认识,接下来本文将围绕Jar包冲突的问题本质和相

2021-02-25 09:31:28 1930 2

原创 MyBatis 的执行流程

前言MyBatis可能很多人都一直在用,但是MyBatis的SQL执行流程可能并不是所有人都清楚了,那么既然进来了,通读本文你将收获如下: 1、Mapper接口和映射文件是如何进行绑定的 2、MyBatis中SQL语句的执行流程 3、自定义MyBatis中的参数设置处理器typeHandler 4、自定义MyBatis中结果集处理器typeHandler PS:本文基于MyBatis3.5.5版本源码。概要在MyBatis中,利用编程式进行数据查询,主要就

2021-02-23 15:00:19 163

原创 lambda 使用心得

1、什么是函数式接口 1.1 java8自带的常用函数式接口。 1.2 惰性求值与及早求值 2、常用的流 2.1 collect(Collectors.toList()) 2.2 filter 2.3 map 2.4 flatMap 2.5 max和min 2.6 count 2.7 reduce 3.1 转换成值 3.2 转换成块..

2021-02-23 14:53:08 372 5

原创 Google Guava 初了解

以面向对象思想处理字符串:Joiner/Splitter/CharMatcherJDK提供的String还不够好么?也许还不够友好,至少让我们用起来还不够爽,还得操心!举个栗子,比如String提供的split方法,我们得关心空字符串吧,还得考虑返回的结果中存在null元素吧,只提供了前后trim的方法(如果我想对中间元素进行trim呢)。那么,看下面的代码示例,guava让你不必在操心这些:Joiner/SplitterJoiner是连接器,Splitter是分割器,通常

2021-02-03 10:21:26 157

原创 retrofit 初了解

在SpringBoot项目直接使用okhttp、httpClient或者RestTemplate发起HTTP请求,既繁琐又不方便统一管理。因此,在这里推荐一个适用于SpringBoot项目的轻量级HTTP客户端框架retrofit-spring-boot-starter,使用非常简单方便,同时又提供诸多功能增强。目前项目已经更新至2.2.2版本,并且会持续进行迭代优化。github项目地址:https://github.com/LianjiaTech/retrofit-spring-boot-st

2021-02-03 10:17:50 754

原创 SpringBoot 接口幂等性的实现方案

一、什么是幂等性幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同。在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数或幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。二、什么是接口幂等性在HTTP/1.1中,对幂等性进行了定义。它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外),即第

2021-02-03 10:13:12 99

原创 AVL树详解

什么是AVL树AVL树,是一种平衡(balanced)的二叉搜索树(binary search tree, 简称为BST)。由两位科学家在1962年发表的论文《An algorithm for the organization of information》当中提出,作者是发明者G.M. Adelson-Velsky和E.M. Landis(链接由维基百科提供)。它具有以下两个性质: 任意一个结点的key,比它的左孩子key大,比它的右孩子key小; 任意结点的孩子结点之间高度差距最大为

2021-02-02 08:46:11 1754

原创 String hashCode 方法为什么选择数字31作为乘子

1. 背景某天,我在写代码的时候,无意中点开了 String hashCode 方法。然后大致看了一下 hashCode 的实现,发现并不是很复杂。但是我从源码中发现了一个奇怪的数字,也就是本文的主角31。这个数字居然不是用常量声明的,所以没法从字面意思上推断这个数字的用途。后来带着疑问和好奇心,到网上去找资料查询一下。在看完资料后,默默的感叹了一句,原来是这样啊。那么到底是哪样呢?在接下来章节里,请大家带着好奇心和我揭开数字31的用途之谜。2. 选择数字31的原因在详细说明 String ha

2021-02-02 08:44:25 231

原创 RPC实现以及相关学习

我们即希望能够敏捷开发,不做重复的劳动,用别人的势能赋能自己;又要成为一名能够赋能别人的人,拥有自身的势能。在一个拥有成千上万大大小小的服务的公司里,每个团队在不同的机器上部署它们自己的服务,所以真实开发一个新服务的场景一定需要考虑两个问题: 我的团队开发一个新服务,可能需要调用别人的服务。 我的团队开发一个新服务,别的团队可能会调用。 RPC调用的变与不变由于服务部署在不同机器,想要进行服务间的调用必须进行网络通信,那服务消费方每调用一个服务都要写一大堆网络通信的东西,不仅复杂

2021-01-30 17:16:54 165

原创 JVM知识点

1、你在项目中都使用了哪些参数打印GC?具体的参数名称记不清楚了,但是我一般在项目中输出详细的 GC 日志,并加上可读性强的 GC 日志的时间戳。特别情况下我还会追加一些反映对象晋升情况和堆详细信息的日志,这些会单独打到gc.log文件中用来排查问题。另外,OOM 时自动 Dump 堆栈,我一般也会进行配置。2、常用的调优工具有哪些?JDK内置的命令行:jps(查看jvm进程信息)、jstat(监视jvm运行状态的,比如gc情况、jvm内存情况、类加载情况等)、jinfo(查看jvm参数的,也可

2021-01-30 17:13:12 185 1

原创 Java 8 中使用 Optional 处理 null 对象

系统环境: Java JDK 版本:1.8 参考地址: Oracle JDK API 参考文档 https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html 菜鸟教程-Java 8 Optional 类 https://www.runoob.com/java/java8-optional-class.html一、Optional 简介Optional 是一个容器对象,可以存储对象、字符串等值,

2021-01-30 17:10:15 139

转载 SpringBoot 超全注解

一、注解(annotations)列表1、@SpringBootApplication包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让Spring Boot扫描到Configuration类并把它加入到程序上下文。2、@ComponentScan组件扫描,可自动发现和装配一些Bean。3、@Configuration等同于Spring的XML配置文件;使用Java代码可以检查类

2021-01-30 17:06:39 69

原创 数据库链接池注意事项

数据库连接池的配置是开发者们常常搞出坑的地方,在配置数据库连接池时,有几个可以说是和直觉背道而驰的原则需要明确。1万并发用户访问想象你有一个网站,压力虽然还没到Facebook那个级别,但也有个1万上下的并发访问——也就是说差不多2万左右的TPS。那么这个网站的数据库连接池应该设置成多大呢?结果可能会让你惊讶,因为这个问题的正确问法是: “这个网站的数据库连接池应该设置成多小呢?” 下面这个视频是Oracle Real World Performance Group发布的,请先看完:ht

2021-01-30 10:39:48 165

原创 CountDownLatch 用法和详解

CountDownLatch是多线程控制的一种工具,它被称为门阀、计数器或者闭锁。这个工具经常用来用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。下面我们就来一起认识一下 CountDownLatch认识 CountDownLatchCountDownLatch 能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。它相当于是一个计数器,这个计数器的初始值就是线程的数量,每当一个任务完成后,计数器的值就会减一,当计数器的值为 0 时,表示所有的线程都已经...

2021-01-29 20:07:40 10835

原创 @Autowire 警告的原因

今天使用Idea写代码的时候,看到之前的项目中显示有warning的提示,去看了下,是如下代码?@AutowireprivateJdbcTemplatejdbcTemplate;提示的警告信息Field injection is not recommended Inspection info: Spring Team recommends: "Always use constructor based dependency injection in your beans. Always..

2021-01-29 19:47:29 685

原创 List数据去重

1.使用LinkedHashSet删除arraylist中的重复数据LinkedHashSet是在一个ArrayList删除重复数据的最佳方法。LinkedHashSet在内部完成两件事: 删除重复数据 保持添加到其中的数据的顺序 Java示例使用LinkedHashSet删除arraylist中的重复项。在给定的示例中,numbersList是包含整数的arraylist,其中一些是重复的数字。例如1,3和5.我们将列表添加到LinkedHashSet,然后将内容返回到列表中。

2021-01-29 19:45:01 112

Java学习文档

自己整合的家擦学习笔记,仅供大家的学习参考

2015-05-27

空空如也

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

TA关注的人

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