自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java集合框架——HashMap

正文HashMap的知识点可以说在面试中经常被问到,是Java中比较常见的一种数据结构。所以这一篇就通过源码来深入理解下HashMap。回到顶部1 HashMap的底层是如何实现的?(基于JDK8)1.1 HashMap的类结构和成员复制/**HashMap继承AbstractMap,而AbstractMap又实现了Map的接口*/ public class HashMap<K,V> extends AbstractMap<K,V> imple

2020-07-24 15:00:23 132

原创 Java NIO的理解和应用

ava NIO是一种基于通道和缓冲区的I/O方式,已经被广泛的应用,成为解决高并发与大量连接和I/O处理问题的有效方式。Java NIO相关组件Java NIO主要有三个核心部分组成,分别是:Channel(通道),Buffer(缓冲区), Selector(选择器)ChannelChannel是所有访问IO设备的统称。类型与IO中的Stream,而通道是双向的,既可以读又可以写,但是Stream是单项的。常用的通道有:SocketChannel和ServerSocketChannel(对.

2020-07-24 14:57:41 178

转载 为什么我推荐Nginx作为后端服务器代理

1. 前言我们真实的服务器不应该直接暴露到公网上去,否则更加容易泄露服务器的信息,也更加容易受到攻击。一个比较“平民化”的方案是使用Nginx反向代理它。今天就来聊一聊使用Nginx反向代理的一些能力,Nginx代理能帮助我们实现很多非常有效的API控制功能。这也解释了我为什么一直推荐使用Nginx来代理我们的Spring Boot应用。2. Nginx可以提供哪些能力Nginx已经不用太多的赞美了,它已经得到了业界的广泛认可。我们就聊聊它具体能够实现什么功能。2.1 代理能力这是针..

2020-07-23 14:07:53 172

转载 进程内存布局异常引起的问题!!

前段时间业务反映某类服务器上更新了 bash 之后,ssh 连上去偶发登陆失败,客户端吐出错误信息如下所示:该版本 bash 为部门这边所定制,但是实现上与原生版并没有不同,那么这些错误从哪里来?是 bash 的锅吗从上面的错误信息可以猜测,异常是 bash 在启动过程中分配内存失败所导致,看起来像是某些情况下该进程错误地进行了大量内存分配,最后导致内存不足,要确认这个事情比较简单,动态内存分配到系统调用这一层上主要就两种方式: brk() 和 mmap(), 所以只要统计一下这两者的调用就.

2020-07-22 12:55:47 167

原创 字符字段与日期字段的转换问题

不会自动转换string与date主要是这个意思,前端提交的JSON里,日期是一个字符串,而对应后端的实体里,它是一个Date的日期,这两个在默认情况下是不能自动转换的,我们先看一下实体实体public class UserDTO { private String name; private String email; private Boolean sex; private Double total; private BigDecimal totalMo

2020-07-21 16:22:49 240

原创 ThreadLocal到底有没有内存泄漏?

1. 前言ThreadLocal 也是一个使用频率较高的类,在框架中也经常见到,比如 Spring。有关 ThreadLocal 源码分析的文章不少,其中有个问题常被提及:ThreadLocal 是否存在内存泄漏?不少文章对此讲述比较模糊,经常让人看完脑子还是一头雾水,我也有此困惑。因此找时间跟小伙伴讨论了一番,总算对这个问题有了一定的理解,这里记录和分享一下,希望对有同样困惑的朋友们有所帮助。当然,若有理解不当的地方也欢迎指正。啰嗦就到这里,下面先从 ThreadLocal 的一个应用场景

2020-07-21 14:04:15 448

转载 微服务化的基石——持续集成

作者:刘超,网易云解决方案架构师一、持续集成对于微服务的意义:拆之前要先解决合的问题在很多微服务化的文章中,很少会把持续集成放在第一篇,因为大多数的文章都会将如何拆的问题,例如拆的粒度,拆的时机,拆的方式。为什么需要拆呢?因为这是人类处理问题的本质方式:将一个大的复杂问题,变成很多个小问题解决。所以当一个系统复杂到一定程度,当维护一个系统的人数多到一定程度,解决问题的难度和沟通成本大大提高,因而需要拆成很多个工程,拆成很多个团队,分而治之。然而当每个子团队将子问题解决了,整个..

2020-07-20 17:35:06 118

原创 AQS并发——共享锁

SemaphoreSemaphore 字面意思是信号量的意思,它的作用是控制访问特定资源的线程数目。应用场景:资源访问,服务限流。Semaphore 实现AbstractQueuedSynchronizer的方法与ReentrantLock一样Semaphore构造方法public Semaphore(int permits) {------permits 表示能同时有多少个线程访问我们的资源 sync = new NonfairSync(permits)...

2020-07-20 12:56:26 121 1

转载 java比较器

Java中的对象正常情况下只能进行比较 == 或者 != 不能使用 > < ,但是在实际的开发中,我们需要对多个对象进行排序,就是需要比较对象的大小Java实现对象排序的方式有两种:自然排序:java.lang.Comparable 定制排序:java.util.Comparator回到顶部1. Comparable 自然排序像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式。 像String、包装类

2020-07-17 13:26:23 111

原创 spring循环依赖让你更好的理解spring!!

什么是循环依赖一言以蔽之:两者相互依赖。在开发中,可能经常出现这种情况,只是我们平时并没有注意到原来我们写的两个类、甚至多个类相互依赖了,为什么注意不到呢?当然是因为没有报错,而且一点问题都木有,如果报错了,或者产生了问题,我们还会注意不到吗?这一切都是Spring的功劳,它在后面默默的为我们解决了循环依赖的问题。如下所示:@Configuration@ComponentScanpublic class AppConfig {}@Servicepublic class Au

2020-07-17 13:17:37 113

原创 AJAX的使用以及介绍

介绍:AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。AJAX 不是新的编程语言,而是一种使用现有标准的新方法。AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。异步和同步客户端和服务器端相互通信的基础上客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。 客户端不需要等

2020-07-16 13:10:52 94

原创 设计模式在spring中的解析

设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记只是一直没有记忆。今天,就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了其设计的思想理念,才能在工作学习中运用到“无形”。Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行内典范。spring中常用的设计模式达到九种,我们一一举例:第一种:简单工厂又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一

2020-07-16 13:08:46 108

转载 隐藏在正则中的陷阱你中招了吗?

前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%。通过 Java 自带的线程 Dump 工具,我们导出了出问题的堆栈信息。我们可以看到所有的堆栈都指向了一个名为 validateUrl 的方法,这样的报错信息在堆栈中一共超过 100 处。通过排查代码,我们知道这个方法的主要功能是校验 URL 是否合法。很奇怪,一个正则表达式怎么会导致 CPU 利用率居高不下。为了弄清楚复现问题,我们将其中的关键代码摘抄出来,做了个简单的单元测试。

2020-07-16 13:06:47 124

转载 Java代码生成器的制作流程

1. 前言不少同学私下问我这个代码生成器是如何运作的,为什么要用到一些模板引擎,所以今天来说明下代码生成器的流程。2. 代码生成器的使用场景我们在编码中存在很多样板代码,格式较为固定,结构随着项目的迭代也比较稳定,而且数量巨大,这种代码写多了也没有什么技术含量,在这种情况下代码生成器可以有效提高我们的效率,其它情况并不适于使用代码生成器。3. 代码生成器的制作流程首先我们要制作模板,把样板代码的固定格式抽出来。然后把动态属性绑定到模板中,就像做填空题一样。所以在这个流程中模板引擎是最合适

2020-07-15 12:58:48 147

原创 Nginx 极简教程,大佬都是这样搞的你了解吗?

作者:静默虚空www.cnblogs.com/jingmoxukong/p/5945200.htm什么是Nginx?Nginx (engine x) 是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。什么是反向代理?反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理.

2020-07-14 22:31:56 147

转载 Spring Boot整合swagger使用教程

Swagger的介绍????你可能尝试过写完一个接口后,自己去创建接口文档,或者修改接口后修改接口文档。多了之后,你肯定会发生一个操作,那就是忘记了修改文档或者创建文档(除非你们公司把接口文档和写接口要求得很紧密????忘记写文档就扣工资?,否则两个分离的工作总是有可能遗漏的)。而swagger就是一个在你写接口的时候自动帮你生成接口文档的东西,只要你遵循它的规范并写一些接口的说明注解即可。优点与缺点????优点:自动生成文档,只需要在接口中使用注解进行标注,就能生成对应的接口文档。

2020-07-14 12:54:45 379

原创 带你深入理解Spring IOC(控制反转)

一、IOC概述Inverse Of Controll即为控制反转,简称IOC。简单来说,IOC反转了依赖关系的满足方式,由之前的自己创建依赖对象,变为由工厂推送。(变主动为被动,即反转)它解决了具有依赖关系的组件之间的强耦合,使得项目形态更加稳健二、什么是IOC?2.1 了解IOC思想大概了解了IOC是控制反转,至于现在我们并不清楚它的思想和作用。那么问题来了,IOC(控制反转)是什么呢?控制反转,简称IOC。顾名思义,它是由“控制”和“反转”两个词语组合而成。那么我们就顺.

2020-07-13 13:39:44 348

原创 ssm整合它来了!!

SSM整合1.需要的依赖<dependencies> <!--springMVC--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.8.RELEASE</version&g

2020-07-11 13:51:16 131

原创 java线程莫名异常退出捕获异常信息我来教你一手

之前有同事说他的程序里的线程时常莫名退出,日志中没有任何异常信息。目前我知道的可以获取线程异常信息的方法主要有1、Future<?>和ScheduledFuture<?>的get()方法2、JAVA1.5之后支持的UncaughtExceptionHandler1 Thread thread = new Thread(() -> {run方法内的代码块});2 thread.start();3 thread.setUncaughtExceptionHa

2020-07-10 13:38:51 463

原创 SpringMVC如何从默认的index.jsp页面跳转到其他页面

最近学习SpringMVC时,想要做一个登录页面Login.jsp,发现Tomcat服务器默认进入的页面是WEB-INF/index.jsp,查询资料发现如果修改默认页面,还需要修改Tomcat文件目录,所有打算不修改默认页面,而是采用从默认页面"index.jsp"跳转到登录页面"Login.jsp"的方式通过网上查阅资料,经测试学习到了两种方法能够完成要求文件结构如上,index.jsp在webapp/WEB-INF/目录下,而Login.jsp在webapp/WEB-INF/pages/目

2020-07-10 13:27:45 1884

转载 tomcat会用但是你了解过吗?服务器源码解读-基本原理

一: 生命周期Tomcat 为了方便管理组件和容器的生命周期,定义了从创建、启动、到停止、销毁共 12 中状态,tomcat 生命周期管理了内部状态变化的规则控制,组件和容器只需实现相应的生命周期 方法即可完成各生命周期内的操作(initInternal、startInternal、stopInternal、 destroyInternal)。Tomcat 的生命周期管理引入了事件机制,在组件或容器的生命周期状态发生变化时会通 知事件监听器,监听器通过判断事件的类型来进行相应的操作...

2020-07-09 17:09:46 137

转载 反应式关系数据库连接规范R2DBC操作MySQL数据库的操作,你懂吗??

1. 简介三月份已经介绍过R2DBC,它是一种异步的、非阻塞的关系式数据库连接规范。尽管一些NoSQL数据库供应商为其数据库提供了反应式数据库客户端,但对于大多数项目而言,迁移到NoSQL并不是一个理想的选择。这促使了一个通用的响应式关系数据库连接规范的诞生。 作为拥有庞大用户群的关系式数据库MySQL也有了反应式驱动,不过并不是官方的。但是Spring官方将其纳入了依赖池,说明该类库的质量并不低。所以今天就尝尝鲜,试一下使用R2DBC连接MySQL。2. 环境依赖基于Spring Boot 2

2020-07-09 17:00:16 579

转载 Mybatis源码简析——实用框架必看

前言Mybatis是一款半自动的ORM框架,是目前国内Java web开发的主流ORM框架,因此作为一名开发者非常有必要掌握其实现原理,才能更好的解决我们开发中遇到的问题;同时,Mybatis的架构和源码也是很优雅的,使用了大量的设计模式实现解耦以及高扩展性,所以对其设计思想,我们也非常有必要好好理解掌握。(PS:本系列文章基于3.5.0版本分析)精良的Mybatis骨架宏观设计Mybatsi的源码相较于Spring源码无论是架构还是实现都简单了很多,它所有的代码都在一个工程里面,在这个工程

2020-07-07 16:40:20 139

转载 Java守护线程普通线程的例子

我们一般创建的线程都是普通非守护线程,守护线程是为普通线程服务的。这个说法比较抽象。具体一个很大的区别是:JVM中所有的线程都是守护线程的时候,JVM就可以退出了--JVM不会等待守护线程是否运行结束 如果还有一个或以上的非守护线程则不会退出非守护线程例子 public static void main(String[] args) throws Exception { Thread runnableThread = new Thread(new Runnable

2020-07-07 16:38:17 163

转载 ELK?日志系统新贵Loki 了解一下

最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的背景。背景和动机当我们的容器云运行的应用或者某个节点出现问题了,解决思路应该如下:我们的监控使用的是基于prometheus体系进行改造的,prometheus中比较重要的是metric和alert,metric是来说明当前或者历史达到了某个值,alert设置metric达到某个特定的基数..

2020-07-06 17:26:06 141

转载 如何优雅的使用RabbitMQ

RabbitMQ无疑是目前最流行的消息队列之一,对各种语言环境的支持也很丰富,作为一个.NET developer有必要学习和了解这一工具。消息队列的使用场景大概有3种:1、系统集成,分布式系统的设计。各种子系统通过消息来对接,这种解决方案也逐步发展成一种架构风格,即“通过消息传递的架构”。2、当系统中的同步处理方式严重影响了吞吐量,比如日志记录。假如需要记录系统中所有的用户行为日志,如果通过同步的方式记录日志势必会影响系统的响应速度,当我们将日志消息发送到消息队列,记录日志的子系统就会通过异步的方

2020-07-06 14:12:10 108

转载 居然还去服务器上捞日志,搭个日志收集系统难道它不香么

ELK日志收集系统进阶使用,本文主要讲解如何打造一个线上环境真实可用的日志收集系统。有了它,你就可以和去服务器上捞日志说再见了!ELK环境安装ELK是指Elasticsearch、Kibana、Logstash这三种服务搭建的日志收集系统,这里仅提供最新版本的docker-compose脚本和一些安装要点。docker-compose脚本version: '3'services: elasticsearch: image: elasticsearch:6.4.0 co

2020-07-04 13:21:15 92

转载 记一次排查线上程序内存的忽高忽低,又是大集合惹祸了

一:背景1. 讲故事昨天继续还技术债,优化一轮后的程序拉到线上后内存继续忽高忽低,低的时候20G,高的时候30G,过了一会又下降了几个G,毫无疑问,程序中有什么集合或者什么操作占用了大量内存,所以准备在28,29G的时候抓dump分析分析。二:解决思路从快照中找问题就像看病一样,根据病象推测,都有一套经验可循。1. 把托管堆中>10M的对象找出来通常应对大集合从托管堆入手最简单,看哪个类型占用空间大,基本就是它出问题了,为了避免把所有类型都打出来,这里设置一下过滤,把小于10M

2020-07-03 13:21:20 360

转载 MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试

一:背景1. 讲故事上一篇说了mysql的架构图,很多同学反馈说不过瘾,毕竟还是听我讲故事,那这篇就来说一说怎么利用visual studio 对 mysql进行源码级调试,毕竟源码面前,不谈隐私,圣人面前,皆为蝼蚁。二:工具合集mysql是C++写的,要想在windows上编译,还需要下载几个必备小工具。mysql-5.7.12.zip cmake-3.17.3-win64-x64.msi boost_1_59_0.tar.gz bison-2.4.1-setup.exe wi

2020-07-03 13:17:45 240

转载 一个static和面试官扯了一个小时,舌战加强版

一:背景1. 讲故事最近也是奇怪,在社区里看到好几篇文章聊static的玩法以及怎么拿这个和面试官扯半个小时,有点意思,点进去看都是java版的,这就没意思了,怎么也得有一篇和面试官扯C#中的 static用法撒,既然没有人开这个头,那我就献丑了。。。,下面以QA的方式记述,大家可以代入一下能回答几个问题。二:QA环节1. 第一个问题面试官: 请问您都是在什么场景下用static的?  解析: 可能面试官潜意识的想问问你会不会使用本地缓存。码农: 先不说我的场景,纵观C#的底层FC

2020-06-30 14:52:24 84

转载 MySql轻松入门系列——第一站 从源码角度轻松认识mysql整体框架图

一:背景1. 讲故事最近看各大技术社区,不管是知乎,掘金,博客园,csdn基本上看不到有小伙伴分享sqlserver类的文章,看来在国内大环境下是不怎么流行了,看样子我再写sqlserver是不可能再写了,这辈子都不会写了,只能靠技术输出mysql维持生活这样子。二:了解架构图mysql最大的好处就是开源, 手握百万源码,有什么问题搞不定呢? 这一点要比sqlserver爽多了,不用再dbcc捣来捣去。1. 从架构图入手大家都知道做/装修房子都要有一张图纸,其实软件也是一样,只要有了

2020-06-30 14:28:12 75

转载 字符串太占内存了,我想了各种奇思淫巧对它进行压缩

一:背景1. 讲故事在我们的一个全内存项目中,需要将一家大品牌店铺小千万的trade灌入到内存中,大家知道trade中一般会有订单来源,省市区,当把这些字段灌进去后,你会发现他们特别侵蚀内存,因为都是字符串类型,不知道大家对内存侵蚀性是不是很清楚,我就问一个问题。Question: 一个空字符串占用多大内存? 你知道吗?思考之后,下面我们就一起验证下,使用windbg去托管堆一查究竟,代码如下: static void Main(string[] args) .

2020-06-30 14:26:27 167

转载 java提高:异常的处理

异常的概念异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常。异常发生的原因有很多,通常包含以下几大类:用户输入了非法数据。 要打开的文件不存在。 网络通信时连接中断,或者JVM内存溢出。这些异常有的是因为用户错误

2020-06-29 15:12:10 230

转载 阿里短信回执.net sdk的bug导致生产服务cpu 100%排查

一:背景1. 讲故事去年阿里聚石塔上的所有isv短信通道全部对接阿里通信,我们就做了对接改造,使用阿里提供的.net sdk。网址:https://help.aliyun.com/document_detail/114480.html同事当时使用的是ons-.net v1.1.3版本,程序上线后若干天就会有一次程序崩溃现象,当时也没特别在意,以为是自己代码或者环境出了什么问题,索性就加了一个检测程序,如果检测到sdk程序退出就自动重启,就这样先糊弄着,直到有一天服务器告警,那个程序CPU居然飙到10

2020-06-29 14:46:55 118

转载 foreach 集合又抛经典异常了,这次一定要刨根问底

一:背景1. 讲故事最近同事在写一段业务逻辑的时候,程序跑起来总是报:集合已修改;可能无法执行枚举操作,硬是没有找到什么情况下会导致这个异常产生,就让我来找一下bug,其实这个异常在座的每个程序员几乎都遇到过,谁也不是一生下就是大牛,简单看了下代码,确实是多线程操作foreach,但并没有对foreach进行Add,Remove操作,扫完代码其实我也是有点懵,没撤只能调试了,在foreach里套一层trycatch,查看异常的线程堆栈从而找出了问题代码,代码简化如下: static void Main

2020-06-28 17:04:41 361

转载 Newtonsoft 六个超简单又实用的特性,值得一试 【下篇】

一:特性分析像弱类型语言一样解析 json大家都知道弱类型的语言有很多,如: nodejs,python,php,它们有一个????????的地方就是处理json,不需要像 强类型语言 那样还要给它配一个类,什么意思呢? 就拿下面的 json 说事。{ "DisplayName": "新一代算法模型", "CustomerType": 1, "Report": { "TotalCustomerCount": 1000, "TotalTradeCount": 50 }

2020-06-28 14:15:46 76

转载 如何让多个不同类型的后端网站用一个nginx进行反向代理实际场景分析

前段时间公司根据要求需要将聚石塔上服务器从杭州整体迁移到张家口,刚好趁这次机会将这些乱七八糟的服务器做一次梳理和整合,断断续续一个月迁移完成大概优化掉了1/3的机器,完成之后遇到了一些问题,比如曾今零零散散部署在生产上一些可视化UI:apollo,kibana,grafana,jenkins 等等要么采用80端口,要么对公开放了其他端口,为了安全,现在不再开放非80之外的公网端口,由于机器少了,80端口不够,这些可视化UI不再能直接访问到了。所以需另寻其他出路。一:用nginx做反向代理 为了解决

2020-06-27 14:16:27 149

转载 Newtonsoft 六个超简单又实用的特性,值得一试 【上篇】

一:讲故事看完官方文档,阅读了一些 Newtonsoft 源码,对它有了新的认识,先总结 六个超经典又实用的特性,同大家一起分享,废话不多说,快来一起看看吧~~~二:特性分析1. 代码格式化如果你直接使用 JsonConvert.SerializeObject的话,默认情况下所有的json是挤压在一块的,特别不方便阅读,如下所示: static void Main(string[] args) { var reportModel = new ReportMo

2020-06-24 14:29:48 127

转载 HashSet扩容机制在时间和空间上的浪费,你必须来了解!!!

一:背景1. 讲故事自从这个纯内存项目进了大客户之后,搞得我现在对内存和CPU特别敏感,跑一点数据内存几个G的上下,特别没有安全感,总想用windbg抓几个dump看看到底是哪一块导致的,是我的代码还是同事的代码? 很多看过我博客的老朋友总是留言让我出一套windbg的系列或者视频,我也不会呀,没办法,人在江湖飘,迟早得挨上几刀,逼着也得会几个花架子????????????,废话不多说,这一篇就来看看 HashSet 是如何扩容的。二:HashSet的扩容机制1. 如何查看了解如何扩容,最好的办法

2020-06-24 13:49:37 480

空空如也

空空如也

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

TA关注的人

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