自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 搜索需求解决方案

本文重点介绍:(4)流量数据量由小到大,常见搜索方案与架构变迁(5)数据量、并发量、扩展性方案 只要业务有检索需求,本文一定对你有帮助。 二、检索需求的满足与架构演进任何互联网需求,或多或少有检索需求,还是以58同城的帖子业务场景为例,帖子的标题,帖子的内容有很强的用户检索需求,在业务、流量、并发量逐步递增的各个阶段,应该如何实现检索需求呢? 原始阶段-LIKE...

2018-08-09 11:56:40 2516

原创 Mysql全文索引

前言:本文简单讲述全文索引的应用实例,MYSQL演示版本5.5.24。Q:全文索引适用于什么场合?A:全文索引是目前实现大数据搜索的关键技术。一、设置条件1.表的存储引擎是MyISAM,默认存储引擎InnoDB不支持全文索引(新版本MYSQL5.6的InnoDB支持全文索引)2.字段类型:char、varchar和text二、配置my.ini配置文件中添加# MySQL全文索引...

2018-08-09 11:30:18 395 1

转载 MyISAM和InnoDB对比

一、关于count(*)知识点:MyISAM会直接存储总行数,InnoDB则不会,需要按行扫描。潜台词是,对于select count(*) from t; 如果数据量大,MyISAM会瞬间返回,而InnoDB则会一行行扫描。实践:数据量大的表,InnoDB不要轻易select count(*),性能消耗极大。常见坑:只有查询全表的总行数,MyISAM才会直接返回结果,当加了where条件...

2018-08-09 10:31:52 393

原创 JDK:Reflection的getCallerClass

权限Reflection.getCallerClass()此方法的调用者必须有权限,需要什么样的权限呢? 由bootstrap class loader加载的类可以调用 由extension class loader加载的类可以调用 都知道用户路径的类加载都是由 application class loader进行加载的,换句话说就是用户自定义的一些类中无法调用此方法作用R...

2018-08-07 16:00:37 8255

转载 深入理解 RPC 消息协议设计

本节我们开始讲解 RPC 的消息协议设计背后的基本原理,了解 RPC 的协议开发背后有哪些需要考虑的基本点。在通晓原理之后,我们就可以自己设计一套协议来开发属于自己的 RPC 系统。本节主要涉及的知识点和它们之见的关系如下图: 对于一串消息流,我们必须能确定消息边界,提取出单条消息的字节流片段,然后对这个片段按照一定的规则进行反序列化来生成相应的消息对象。消息表示指的是序列化后...

2018-08-06 11:56:46 451

转载 深入理解 RPC 交互流程

们讲解 RPC 的消息交互流程,目的是搞清楚一个简单的 RPC 方法调用背后究竟发生了怎样复杂曲折的故事,以看透 RPC 的本质。上图是信息系统交互模型宏观示意图,RPC 的消息交互则会深入到底层。RPC 是两个子系统之间进行的直接消息交互,它使用操作系统提供的套接字来作为消息的载体,以特定的消息格式来定义消息内容和边界。RPC 的客户端通过文件描述符的读写 API (read &...

2018-08-06 11:31:04 2095

转载 深入理解RPC——RPC在企业服务中的核心价值

随着企业 IT 服务的不断发展,单台服务器逐渐无法承受用户日益增长的请求压力时,就需要多台服务器联合起来构成「服务集群」共同对外提供服务。同时业务服务会随着产品需求的增多越来越肿,架构上必须进行服务拆分,一个完整的大型服务会被打散成很多很多独立的小服务,每个小服务会由独立的进程去管理来对外提供服务,这就是「微服务」。当用户的请求到来时,我们需要将用户的请求分散到多个服务去各自处理,然后又需要将...

2018-08-06 11:24:19 267

原创 Java 7 switch支持String类型的原理及注意事项

switchswitch中可以有null吗?在switch语句中,表达式的值不能是null,否则会在运行时抛出NullPointerException。在case子句中也不能使用null,否则会出现编译错误。switch支持的类型有?Java 7 中加入了对String类型的支持。所以支持的有:char、byte、short、int 和 Character、Byte、Short、In...

2018-08-02 15:59:21 495

转载 spring aop

一、AOP:是对OOP编程方式的一种补充。翻译过来为“面向切面编程”。可以理解为一个拦截器框架,但是这个拦截器会非常武断,如果它拦截一个类,那么它就会拦截这个类中的所有方法。如对一个目标列的代理,增强了目标类的所有方法。两个解决办法:1.不优雅的做法:在添加增强时,根据方法名去判断,是否添加增强,但是这样就得一直去维护这个增强类。2.面向切面:将增强类和拦截条件组合在一起,然后将这个切面配置到 P...

2018-07-12 17:51:47 183

转载 《Spring Cloud Netflix官方文档》路由和过滤器: Zuul

原文链接路由是一个微服务架构体系中必须的一部分,比如说,“/” 映射你的web根应用,“/api/users” 映射到用户服务,“/api/shop” 映射到购物服务上. Zuul 是 Netflix 公司的一个基于JVM的服务器端带负载均衡功能的路由。Netflix在以下场景使用Zuul:AuthenticationInsightsStress TestingCanary TestingDyna...

2018-07-12 16:20:41 910

原创 Java性能监控之Instrumentation

1.1.      Instrumentation 简介利用 Java 代码,即 java.lang.instrument 做动态 Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中解放出来,使之可以用 Java 代码的方式解决问题。使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent...

2018-07-05 12:00:22 554

原创 通过xml生成java Bean

第一步  下载Trang并解压zip文件 Trang 是一种命令行的可以XML生成XSD的工具。从http://www.thaiopensource.com/relaxng/trang.html 上下载trang-version.zip 第二步  生成XSD java -jar %TrangHome%\trang.jar  xx.xml  xx.xsd  ( %TrangHome%表示Tra...

2018-07-04 10:36:12 1905

转载 聊聊分布式事务,再说说解决方案

前言最近很久没有写博客了,一方面是因为公司事情最近比较忙,另外一方面是因为在进行 CAP 的下一阶段的开发工作,不过目前已经告一段落了。接下来还是开始我们今天的话题,说说分布式事务,或者说是我眼中的分布式事务,因为每个人可能对其的理解都不一样。分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免,本文就分布式事务来简单聊一...

2018-06-27 22:31:33 209

转载 java字节码指令集

字节码指令集  Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码(Opcode)以及跟随其后的零至多个代表此操作所需参数的操作数(Operands)所构成。  对于大部分为与数据类型相关的字节码指令,他们的操作码助记符中都有特殊的字符来表明专门为哪种数据类型服务:i代表对int类型的数据操作,l代表long,s代表short,b代表byte,c代表char,f代表float,d...

2018-06-24 17:07:51 393

转载 程序员的中年该如何度过

最近看了不少关于中年危机的文章,一直觉得自己只是一个看客,中年危机似乎离自己还有一段时间。然而,突然又觉得自己是不是已经迈入了中年?自己有没有认真思考过这个问题?看看自己已经三十出头,脸庞渐宽,不注重形象与健身,自从有了孩子生活也被填的满满的,所有时间是在路上,在上班,看娃,睡觉,一切似乎都很正常,按这个节奏转个不停。总是觉得好像少了点什么,对,还有目标吗!回顾以前,上学时的目标是考上一中,考上好...

2018-06-22 11:00:01 471 2

转载 JavaScript 的 this 原理

一、问题的由来学懂 JavaScript 语言,一个标志就是理解下面两种写法,可能有不一样的结果。var obj = {  foo: function () {}}; var foo = obj.foo; // 写法一obj.foo() // 写法二foo()上面代码中,虽然obj.foo和foo指向同一个函数,但是执行结果可能不一样。请看下面的例子。var obj = {  foo: funct...

2018-06-20 10:15:46 166

转载 JAVA设计模式--命令模式

一、什么是命令式命令(Command)模式又叫作动作(Action)模式或事务(Transaction)模式,是一种对象的行为模式。将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作...

2018-06-15 15:57:38 200

转载 在idea里面用git创建分支及合并到主干

点击git框的new Branch,然后输入自己分支的名称,按照本公司的分支命名规则哦。然后会自动切换到当前分支,然后再push到远程仓库中。可能有人新建了远程分支,但是在本地上的Remote Branches中并没有远程分支,所以需要右键选择git fetch。分支的切换用A merge B是把A中的改动放到B分支上,B merge A是把B中的改动merge到A中,例如把master分支上的改...

2018-06-14 14:43:46 1628

转载 Java调优经验谈

对于调优这个事情来说,一般就是三个过程:性能监控:问题没有发生,你并不知道你需要调优什么?此时需要一些系统、应用的监控工具来发现问题。性能分析:问题已经发生,但是你并不知道问题到底出在哪里。此时就需要使用工具、经验对系统、应用进行瓶颈分析,以求定位到问题原因。性能调优:经过上一步的分析定位到了问题所在,需要对问题进行解决,使用代码、配置等手段进行优化。Java调优也不外乎这三步。此外,本文所讲的性...

2018-06-13 10:48:40 203

原创 Java设计模式——观察者模式

一、定义观察者模式定义了一个一对多的依赖关系,让多个观察者对象同时监听同一个主题对象。当这个主题状态发生改变时,会通知所有观察者对象,让它们自动更新自己。二、适用场景1、聊天室程序的创建。服务器创建好后,A、B、C三个客户端连接好公开聊天。A向服务器发送数据,服务器在将数据分别发送给其他在线客户。也就是说,每个客户端需要更新服务器端的数据。2、网站上,很多人订阅了“Java主题”的新闻。当有这个主...

2018-06-12 16:29:55 201

转载 host文件位置和作用介绍

什么是HOST文件:Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析,如果发现是被屏蔽的IP或域名,就...

2018-06-11 10:58:22 68659 7

原创 java中的double 类型数据相加问题

问题描述:比如说 double a=3.0 double b=4.0 我 把a+b用 system.out.println输出 得到7.000000000000000006 解决方法:做float或double运算的时候 建议使用BigDecimal 来处理原因:这种情况是因为我们的数据在计算内部存储的是2进制(不论在内存还是cpu的寄存器内)的,其表示小数的时候根据不同的系统,不同的环境都...

2018-06-08 17:20:04 4394

原创 ActiveMQ : 基础篇

 ActiveMQ 是什么?“这个简单,ActiveMQ 是一个 MOM,具体来说是一个实现了 JMS 规范的系统间远程通信的消息代理。它……”什么是 MOM?“好。MOM 就是面向消息中间件(Message-oriented middleware),是用于以分布式应用或系统中的异步、松耦合、可靠、可扩展和安全通信的一类软件。MOM 的总体思想是它作为消息发送器和消息接收器之间的消息中介,这种中介...

2018-06-06 10:41:05 195

原创 启动Tomcat报Unable to open debugger port (127.0.0.1:64966): java.net.SocketException "socket closed"

问题:启动Tomcat容器报不能打开端口原因:该端口已被占用解决方案:1、根据端口号“80”查找进程号命令窗口输入netstat -ano|findstr "80"查看80端口的Pid列表,找到监听tomcat配置的端口号的进程ID2、根据进程名杀死进程taskkill -pid 7796 -f3、重启Tomcat即可...

2018-06-05 11:50:33 749

原创 sql语句优化建议

1. 不论一个sql中涉及到多少表,每次都用两个表(结果集)操作,得到新的结果后,再和下一个表(结果集)操作。2. 避免在select f1,(select f2 from tableB ).... from tableA 这样得到字段列。直接用tableA和tableB关联得到A.f1,B.f2就可以了。3.避免隐含的类型转换 如:select id from employee where em...

2018-06-04 15:49:39 435 1

转载 JVM性能监控工具-Jvisualvm

用法:Jvisualvm是JDK自带的一款性能分析工具使用方式:1.配置好JDK环境变量1.本地JVM监控略2.远程JVM监控 用JMX对Resin内存状态进行监控 ,可以看到本地所有可监控的JVM实例。原理就是通过添加一些JMX相关的JVM启动参数来控制JMX的行为,例如端口,验证信息等。Resin3.1.X版本的配置文件中有一些设置JVM args的配置项目,可以直接在里面修改。 Resin配...

2018-06-03 19:25:11 1243

原创 JVM问题排查

本文将介绍JDK自带的JVM排查工具。其提供的排查工具有:(1)jps:JVM Process Status Tool,显示系统内所有的JVM进程;(2)jstat:JVM Statistics Monitoring Tool,可以收集JVM相关的运行数据;(3)jinfo:Configuration Info for Java,显示JVM配置信息;(4)jmap:Memory Map for J...

2018-06-03 16:28:46 2466 1

原创 java中向匿名内部类传递参数

目的:将innerString变量值传给匿名内部类解决方案:在匿名内部类里定义一个方法,在创建匿名内部类对象时调用自定义方法进行传参。具体见代码:jb.addActionListener(new ActionListener(){ private String innerStr; @Override public void a...

2018-06-01 11:53:09 13230 1

转载 Jvm堆内存的划分结构和优化,垃圾回收详解

在JVM中堆空间划分如下图所示上图中,刻画了Java程序运行时的堆空间,可以简述成如下2条1.JVM中堆空间可以分成三个大区,新生代、老年代、永久代2.新生代可以划分为三个区,Eden区,两个幸存区在JVM运行时,可以通过配置以下参数改变整个JVM堆的配置比例1.JVM运行时堆的大小-Xms堆的最小值-Xmx堆空间的最大值2.新生代堆空间大小调整-XX:NewSize新生代的最小值-XX:MaxN...

2018-05-31 22:30:39 462

原创 GC日志分析

深入理解Java虚拟机[JVM]Java内存区域与垃圾收集 - 思维导图[JVM]类加载机制 - 思维导图[JVM]OOM实例分析[JVM]理解Class文件(1):手动解析常量池[JVM]理解GC日志[JVM]理解Class文件(2)1. 输出GC日志通过阅读GC日志,我们可以了解Java虚拟机内存分配与回收策略。先来看一个简单的示例,通过设置VM参数"XX:+PrintGCDetails"就可...

2018-05-31 22:29:11 1410

转载 XStream配置XML节点既有属性又有内容

#例如XML节点为这样的, 如何通过XStream来映射JavaBean呢?<node att="value">text</node>#在Stack Overflow上找到了解答, you can use a predefined Converter. #Field as Text Value@XStreamAlias("node")@XSt...

2018-05-31 16:45:06 1653

转载 分库分表需要考虑的问题及方案

分库分表的基本思想Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。如果表并不多,但每张表的数据非常多,这时候适合水平切分,即把表的数据按某种规则(比如按ID散列)切分到多个数据库...

2018-05-30 23:23:11 1128

转载 分布式事务及解决方案

前言最近很久没有写博客了,一方面是因为公司事情最近比较忙,另外一方面是因为在进行 CAP 的下一阶段的开发工作,不过目前已经告一段落了。接下来还是开始我们今天的话题,说说分布式事务,或者说是我眼中的分布式事务,因为每个人可能对其的理解都不一样。分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免,本文就分布式事务来简单聊一...

2018-05-30 23:21:49 252 1

转载 内存监视手段及各区域内存溢出解决

引言本文仅关注一些常见的虚拟机内存监视手段,以及JVM运行时数据区各个部分内存溢出的发生和对应的解决方案,总体来说属于概括性总结,涉及相对不是很深入,目的是让自己和其它初学者有一个框架性、概念性的了解,当遇到问题时有迹可循、不至于不知所措。一、虚拟机内存监视手段虚拟机常出现的问题包括:内存泄露、内存溢出、频繁GC导致性能下降等,导致这些问题的原因可以通过下面虚拟机内存监视手段来进行分析,具体实施时...

2018-05-30 23:20:11 1043

原创 JPS命令使用

使用jps 要先安装 jdk(jps是jdk自带的命令)。jps类似linux的ps命令,不同的是ps是用来显示进程,而jps只显示java进程,准确的说是当前用户已启动的部分java进程信息,信息包括进程号和简短的进程command。 提示:曾经遇到一个这样的问题:一个nagios 插件用 jps 监控java进程。结果得不到 java进程信息。这是由于 jps 只能显示当前用户的 java 进...

2018-05-30 23:17:31 869

转载 HashMap之原理及死锁

一、HashMap原理 1.HashMap的本质就是数组和链表。table是一个entry数组,每一个数组元素保存一个Entry节点,而Entry节点内部又连接着同样key的下一个Entry节点,就构成了链表。. 详情见 HashMap源码分析 2.HashMap死锁原因: HashMap会造成死锁,因为HashMap是线程非安全的,多并发的情况容易造成死锁,若要高...

2018-05-30 22:23:26 485

转载 mysql数据库分表后怎么进行分页查询?Mysql分库分表方案?

1.如果只是为了分页,可以考虑这种分表,就是表的id是范围性的,且id是连续的,比如第一张表id是1到10万,第二张是10万到20万,这样分页应该没什么问题。2.如果是其他的分表方式,建议用sphinx先建索引,然后查询分页,我们公司现在就是这样干的。Mysql分库分表方案1.为什么要分表:当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目...

2018-05-29 20:07:06 9271 2

转载 java安全管理器SecurityManager入门

一、文章的目的  这是一篇对Java安全管理器入门的文章,目的是简单了解什么是SecurityManager,对管理器进行简单配置,解决简单问题。  比如在阅读源码的时候,发现这样的代码,想了解是做什么的:SecurityManager security = System.getSecurityManager();if (security != null) { security.chec...

2018-05-26 20:12:48 176

原创 HashMap加入数据后,会自动根据首字母排序

1.Map<String, String> map = new HashMap<>();原因:然后增加一些数据,会发现根据String键值排序,并不是增加的时候的顺序,如果是中文,会按汉字的拼音首字母排序。2.解决方法LinkedHashMap替换HashMap...

2018-05-25 15:11:43 3617

转载 MySQL分库分表总结

单库单表 :单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到。 单库多表 :随着用户数量的增加,user表的数据量会越来越大,当数据量达到一定程度的时候对user表的查询会渐渐的变慢,从而影响整个DB的性能。如果使用mysql, 还有一个更严重的问题是,当需要添加一列的时候,mysql会锁表,期间所有的读写操作只能等待。 可...

2018-05-21 12:58:04 184

空空如也

空空如也

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

TA关注的人

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