- 博客(68)
- 资源 (3)
- 收藏
- 关注

原创 JR1-jdk体系结构与jvm架构解析
一、JDK体系结构jre:Java运行时环境,支撑Java运行的核心类库和Java虚拟机。jdk:Java完整程序包二、JVM整体架构跨平台特性:一次编写各个平台运行,不同机器不同的二进制机器码,依靠的是不同操作系统不同版本的JVM运行过程:类转载子系统将.class字节码文件装载到运行时数据区,字节码执行引擎运行内存中的代码。栈(线程)(虚拟栈):程序运行时虚拟机为运行时的...
2020-04-12 17:46:26
817
1

原创 Kafka(一)
一 Kafka概述1.1 Kafka是什么在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。1)Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。2)Kafka最初是由LinkedIn公司开发,并于 2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为...
2018-10-11 15:16:56
237

原创 Java 堆和栈的思考
堆与栈堆和栈是程序运行的关键,很有必要把他们的关系说清楚。栈是运行时的单位,而堆是存储的单位。栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪儿。在Java中一个线程就会相应有一个线程栈与之对应,这点很容易理解,因为不同的线程执行逻辑有所不同,因此需要一个独立的线程栈。而堆则是所有线程共享的。栈因为是运行单位,因此里面存储的信息都是跟当前线程...
2018-06-13 14:41:51
1037

原创 类加载机制的一些思考
rt.jar被什么类加载器加载,什么时间加载;当一个类加载器接收到一个类加载的任务时,不会立即展开加载,而是将加载任务委托给它的父类加载器去执行,每一层的类都采用相同的方式,直至委托给最顶层的启动类加载器为止。如果父类加载器无法加载委托给它的类,便将类的加载任务退回给下一级类加载器去执行加载。 双亲委托模型的工作过程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个...
2018-05-29 14:50:31
272

转载 大型网站应用之海量数据和高并发解决方案
一、网站应用背景开发一个网站的应用程序,当用户规模比较小的时候,使用简单的:一台应用服务器+一台数据库服务器+一台文件服务器,这样的话完全可以解决一部分问题,也可以通过堆硬件的方式来提高网站应用的访问性能,当然,也要考虑成本的问题。当问题的规模在经济条件下通过堆硬件的方式解决不了的时候,我们应该通过其他的思路去解决问题,互联网发展至今,已经提供了很多成熟的解决方案,但并不是都具有适用性,你把淘宝的...
2018-05-18 15:18:38
224

原创 Redis
防止雪崩缓存雪崩是由于原有缓存失效(过期),新缓存未到期间。所有请求都去查询数据库,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。 1、碰到这种情况,一般并发量不是特别多的时候,使用最多的解决方案是加锁排队加锁排队只是为了减轻数据库的压力,并没有提高系统吞吐量。假设在高并发下,缓存重建期间key是锁着的,这是
2018-03-02 15:01:04
318
1

原创 volatile关键字总结
volatile关键字前言我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.concurrent包的核心,没有volatile就没有这么多的并发类给我们使用。本文详细解读一下volatile关键字如何保证变量在多线程之间的可见性,在此之前,有必要讲解一下CPU缓存的相关知识,掌握这部分知识一定会让我们更好地理解v
2018-01-31 10:50:09
382
转载 java.sql.SQLException: Zero date value prohibited 异常的解决方法
使用MyBatis查询数据时候遇到这个异常,stackoverflow上一条回答解决办法是通过给jdbc链接增加zeroDateTimeBehavior参数来解决。 实际的错误还应该有: java.sql.SQLException: Value ‘0000-00-00’ can not be represented as java.sql.Datejdbc:mysql://yourserv...
2018-08-22 14:29:10
3345
转载 MySQL information_schema说明
原文链接:http://wenku.baidu.com/link?url=bIA38Slp-g2Bob4VDuTSVY8e04Beqq9Xac4I90UMC9ziQuzxiukpEh5abPK-woB9tuQ4DuY_KhKW-eTHH6ACSiMJmRhctiHvijOEFmENBbSinformation_schema数据库表说明: SCHEMATA表:提供了当前mysql实例中所有...
2018-08-15 18:38:39
610
原创 @Valid参数验证 BindingResult result 的使用
首先导入依赖包bean-validator.jar2.在实体类上面写一些相关的验证信息:可以搜索更多的一些验证方式,这只是一部分可以参考:点击打开链接http://blog.csdn.net/caihaijiang/article/details/7463514private String username; private String password; p...
2018-08-15 16:14:02
5098
原创 SpringDataJpa(待补充)
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I...
2018-08-14 11:27:43
168
转载 put类型请求url含有特殊字符解码问题
前提先了解浏览器解析url:关于不同浏览器对URL编码的分析1.encodeURIComponent 与 encodeURL区别:encodeURI(该函数对传入字符串中的所有非(基本字符、Mark字符和保留字符)进行转义编码(escaping)):;/?:@&=+$,#这些用于分隔 URI 组件的标点符号进行编码2.js端处理:encodeURI 编码2次 ,具体原因见...
2018-08-09 20:30:43
1259
原创 异常类型及处理
简介程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态?。Java提供了更加优秀的解决办法:异常处理机制。异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。...
2018-08-02 15:37:22
1324
转载 RESTful风格
1. 什么是RESTREST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功...
2018-08-02 15:36:36
177
原创 swagger使用总结
因为项目中用到了swagger,用起来感觉还不错,主要是在代码中加入依赖,在类或方法上加上相关注解就可实现接口规范,简单、方便。可生成在线接口文档或离线接口文档,省去了自己编写接口文档的繁琐。下面就是使用swagger的tips:1:认识SwaggerSwagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户...
2018-08-02 15:12:26
941
原创 ***************************************这是一条华丽的分割线***************************************************
null
2018-08-02 15:04:06
1309
转载 深入Hashmap问题
HashMap的原理以及如何实现,之前在JDK7与JDK8中HashMap的实现中已经说明了。那么,为什么说HashMap是线程不安全的呢?它在多线程环境下,会发生什么情况呢?3个情况,1个put会同时扩容早造成死循环,2.2个put引发扩容,另外的线程有可能get不到。3.有可能2个同时put,导致1个丢失,被后1个put给覆盖掉了。 一种情况是直接2个线程,1存1取,A刚存完ke...
2018-06-08 09:35:10
195
原创 HashSet和TreeSet
HashSetHashSet有以下特点 不能保证元素的排列顺序,顺序有可能发生变化 不是同步的 集合元素可以是null,但只能放入一个null当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置。简单的说,HashSet集合判断两个元素相等的标准是两个对...
2018-06-08 09:31:48
170
转载 如何解决秒杀的性能问题和超卖的讨论
最近业务试水电商,接了一个秒杀的活。之前经常看到淘宝的同行们讨论秒杀,讨论电商,这次终于轮到我们自己理论结合实际一次了。 ps:进入正文前先说一点个人感受,之前看淘宝的ppt感觉都懂了,等到自己出解决方案的时候发现还是有很多想不到的地方其实都没懂,再次验证了“细节是魔鬼”的理论。并且一个人的能力有限,只有大家一起讨论才能想的更周全,更细致。好了,闲话少说,下面进入正文。 一、秒杀带来了什么? ...
2018-06-07 16:54:06
222
转载 大型网站应用之海量数据和高并发解决方案总结
一、网站应用背景开发一个网站的应用程序,当用户规模比较小的时候,使用简单的:一台应用服务器+一台数据库服务器+一台文件服务器,这样的话完全可以解决一部分问题,也可以通过堆硬件的方式来提高网站应用的访问性能,当然,也要考虑成本的问题。当问题的规模在经济条件下通过堆硬件的方式解决不了的时候,我们应该通过其他的思路去解决问题,互联网发展至今,已经提供了很多成熟的解决方案,但并不是都具有适用性,你把淘宝的...
2018-06-07 15:29:00
253
转载 Java多线程编程- 关于锁优化的几点建议
上一篇:Java多线程编程-(11)-从volatile和synchronized的底层实现原理看Java虚拟机对锁优化所做的努力Java多线程编程-(12)-Java中的队列同步器AQS和ReentrantLock锁原理简要分析一、背景在《 Java多线程编程-(11)-从volatile和synchronized的底层实现原理看Java虚拟机对锁优化所做的努力》 这一篇文章中,我们大致介绍了J...
2018-06-05 14:55:41
221
转载 synchronized实现原理
记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它。诚然,随着Javs SE...
2018-06-04 14:00:36
847
原创 总结的informix错误说明
1. 问题描述:不能向表中插入数据报错信息:271: Could not insert new row into the table.136: ISAM error: no more extents问题原因:如果建表的时候不手工修改表的next size值,则默认为16,next size太小,表的扩展很容易达到极限,因此需要删除一部分数据然后修改参数处理步骤:1).先删除表的一部分...
2018-06-01 15:48:04
4898
原创 总结(一)
一、Java相关Arraylist与LinkedList默认空间是多少;1.ArrayListArrayList 初始化大小是 10 (如果你知道你的arrayList 会达到多少容量,可以在初始化的时候就指定,能节省扩容的性能开支) 扩容点规则是,新增的时候发现容量不够用了,就去扩容 扩容大小规则是,扩容后的大小= 原始大小+原始大小/2 + 1。(例如:原始大小是 10 ,扩容后的大小就是 1...
2018-05-20 21:59:52
1047
原创 总结(二)
1,Java 中抽象类和接口的区别是什么?类是具体实例的抽象,比如一个JSON字符串的抽象;而抽象类就是类的抽象;接口就是抽象类的抽象,接口更像是一种协议2,三种代理:代理(代理服务器)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。静态:代理对象与目标对象要实现相同的接口,然后通过调用...
2018-05-20 21:59:21
218
原创 Java中堆内存和栈内存有什么区别
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产...
2018-05-19 23:17:26
2280
1
转载 Java NIO和IO的区别
下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。复制代码代码如下:IO NIO面向流 面向缓冲阻塞IO 非阻塞IO无 选择器 面向流与面向缓冲Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Jav...
2018-05-19 23:12:56
525
转载 Session机制详解
虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术。本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答。 一、术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的...
2018-05-19 23:10:27
147
转载 Java NIO (三)
在上一篇中介绍了缓冲区的原理,下面来介绍NIO中另一个核心对象选择器(Selector)以及NIO的原理。在Client/Server模型中,Server往往需要同时处理大量来自Client的访问请求,因此Server端需采用支持高并发访问的架构。一种简单而又直接的解决方案是“one-thread-per-connection”。这是一种基于阻塞式I/O的多线程模型。在该模型中,Server为...
2018-05-14 10:17:33
166
转载 Java NIO (二)
在上一篇中,我们介绍了NIO中的两个核心对象:缓冲区和通道。本文为NIO入门学习的第二篇,将会分析NIO中的缓冲区Buffer的内部原理。在谈到缓冲区时,我们说缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,如果我们使用get()方法从缓冲区获取数据或者使用put()方法把数据写入缓冲区,都会引起缓冲区状态的变化。在缓冲区...
2018-05-14 09:37:14
144
转载 Java NIO (一)
I/O即输入输出,指的是计算机和外界的接口,或者是单个程序同计算机其他部分的接口。 在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统每次处理一个字节,输入流(input stream)生产一个字节,输出流(output stream)消费一个字节。这种工作模式下,非常容易给流数据创建过滤器(filters),而且也很容易将多个过滤器串起来,每个过滤器针对流过自己的字节做相应处...
2018-05-11 15:38:43
138
转载 什么是一致性Hash算法?
最近有小伙伴跑过来问什么是Hash一致性算法,说面试的时候被问到了,因为不了解,所以就没有回答上,问我有没有相应的学习资料推荐,当时上班,没时间回复,晚上回去了就忘了这件事,今天突然看到这个,加班为大家整理一下什么是Hash一致性算法,希望对大家有帮助!经常阅读我文章的小伙伴应该都很熟悉我写文章的套路,上来就是先要问一句为什么?也就是为什么要有Hash一致性算法?就像以前介绍为什么要有Spring...
2018-05-10 16:24:58
193
转载 分布式锁-数据库、Redis、Zookeeper
一、为什么要使用分布式锁我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug!注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间!后来业务发展,需要做集群,一个应用需要部署到几台机器上...
2018-05-10 14:40:31
336
Util通用工具类(轮子类)
2018-08-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人