- 博客(19)
- 问答 (1)
- 收藏
- 关注
原创 java并发编程
一、前言借用Java并发编程实践中的话”编写正确的程序并不容易,而编写正常的并发程序就更难了”,相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的,本文算是对多线程情况下同步策略的一个一个简单介绍。二、 什么是线程安全问题线程安全问题是指当多个线程同时读写一个状态变量,并且没有任何同步措施时候,导致脏数据或者其他不可预见的
2017-06-15 17:39:16 330
转载 sql优化
一、定位慢查询 我们要对sql语句进行优化,第一步肯定是找到执行速度较慢的语句,那么怎么在一个项目里面定位这些执行速度较慢的sql语句呢?下面就介绍一种定位慢查询的方法。 1.1、数据库准备 首先创
2017-06-14 16:27:19 406
原创 sso原理浅析
关于sso原理分析:同域: xxx.com/demo1/hello.action xxx.com/demo2/hello.action 登录页面只需要在根路径下加一个cookie 关键就是这个cookie的路径要放到根路径,即顶级目录下,cookie.setPath(“/”); 这样两个action都可以访问到 即可进行登录验证同父域: demo1.xxx.com/demo1/he
2017-06-13 17:20:29 681
原创 jsonp原理
什么是JSONP? 先说说JSONP是怎么产生的:其实网上关于JSONP的讲解有很多,但却千篇一律,而且云里雾里,对于很多刚接触的人来讲理解起来有些困难,小可不才,试着用自己的方式来阐释一下这个问题,看看是否有帮助。1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一
2017-06-13 17:17:47 229
原创 ## javascript笔记(七)
javascript笔记(七)ajaxXMLHttpRequestjs能实现无需装载整个页面便能向服务器发送请求,靠的就是这个XMLHttpRequest。 XMLHttpRequest 是一个 JavaScript 对象。 var req = new XMLHttpRequest(); 常用属性 onreadystatechange Function,当readyState属性改变时会
2017-06-09 17:34:49 236
原创 javascript笔记(六)
javascript笔记(六)正则var expression = / pattern / flags flags是标记,有三种: g: 表示全局模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止i: 表示不区分大小写模式,即在确定匹配项时忽略模式与字符串的大小写m: 表示多行模式,即在到达一行文本末尾时还会继续查找下一行中是否存在模式匹配的项和其他语言一样,元字符要转义
2017-06-09 17:28:57 217
原创 javascript笔记(五)
javascript笔记(五)面向对象javascript中没有类的概念。创建对象对面字面量方式var person = { name: '张三', age: 27, walk: function() { console.log('走路'); }}缺点很明显,只适合临时创建对象。 工厂模式 自然我们会想到,使用工厂模式批量生产对象。functi
2017-06-09 17:20:32 273
原创 JavaScript笔记(四)
JavaScript笔记(四)事件事件冒泡和事件捕获事件冒泡即事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点。 与事件冒泡相反,事件捕获中,最具体的元素会在最后接收到事件。 事件绑定语法: target.addEventListener(type, listener[, useCapture]); type : String,表示监听的事件类型(如click为点击事件
2017-06-09 17:20:02 244
原创 javascript笔记(二)
javascript笔记(二)数组length设置length会导致数组丢掉超长的数据,很危险,要小心。var arr = ["1",2,3,4]arr.length4arr.length = 11arr["1"]arr.length = 44arr["1", undefined × 3]以undefined填充为赋值的元素。 push,pop,shift,unshiftpus
2017-06-09 17:07:33 202
原创 javascript笔记(一)
javascript笔记(一)变量局部变量 用 var 操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说,如果在函数中使用 var 定义一个变量,那么这个变量在函数退出后就会被销毁,例如: function test(){var message = "hi"; // 局部变量}test();alert(message); // 错误! 这里,变量 message 是在函
2017-06-09 17:05:41 278
转载 数据库索引原理及优化
个人总结:要实现高效的查询,就需要高效的算法。而使用高效的算法需要特定数据结构的支持,索引就是这种特定的数据结构。 B+tree对b-tree主要不同,节点上只存key,不存数据。 数据结构。基本上所有的对速度的优化,最后都落到计算机组成原理的底层。联合索引,顺序极其重要。最左匹配原则。%xx是匹配不到索引的。 原文链接:http:/
2017-06-09 16:24:16 372
原创 分布式锁实现
分布式锁实现1,数据库实现 原理 数据库的行级X锁。 优点 不需要引入第三方应用。 缺点 死锁 对数据库性能影响,可能较长时间占用数据库连接资源 如果业务是分库分表的,可能支持不了 示例代码2,缓存实现 原理 通过SETNX是否成功。 当且仅当 key 不存在,将 key 的值设为 value ,并返回1
2017-06-09 11:40:27 517
原创 NIO基础
buffer使用 Buffer 读写数据一般遵循以下四个步骤:写入数据到 Buffer;调用 flip() 方法;从 Buffer 中读取数据;调用 clear() 方法或者 compact() 方法。当向 Buffer 写入数据时,Buffer 会记录下写了多少数据。一旦要读取数据,需要通过 flip() 方法将 Buffer 从写模式切换到读模式。在读模式下,可以读取之前写入到 Buf
2017-06-07 15:15:11 250
原创 reactor模式
reactor模式为了处理web request请求,有两种web架构:基于线程模型的架构和基于事件驱动的架构。基于线程模型线程模型的好处是扩展性比较好,通过加server机器提供更多的线程。 但是缺点就比较多了, 因为是采用一个连接对应一个处理线程的方式。 这就需要大量的处理线程,占用大量内存,大量线程调度开销。 尤其是大量连接到来时,线程用光,导致请求被丢弃。尤其是遇到keep-aliv
2017-06-07 15:13:02 331
原创 RocketMQ
RocketMQ顺序性与重复性消息系统绕不开的两个问题:如何保证消息的顺序?如何保证消息不重复? 对于第一个问题,RocketMQ的策略是,你可以自己实现selector方法,保证同一个id的消息放到同一个队列中。 对于第二个问题,答案是RocketMQ不保证消息不重复。 需要消费端自己保证幂等。可以使用去重表,消息重复的问题应当是比较少的。 事务消息RocketMQ除了支持普通消息,顺序消
2017-06-07 15:09:36 960
原创 单元测试
单元测试单测定义单元测试(Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作,程序模块在面向对象编程中一般是指方法。单元测试一般由开发人员来编写,用来保证程序及功能的正确性。为什么需要单测编写单元测试代码并不是一件容易的事情,那为什么还需要去话费时间和精力来编写单元测试呢?减少Bug:如今的项目大多都是多人分模块协同开发,当各个模块集成时再去
2017-06-06 11:40:08 4964 1
原创 dubbo源码分析
SPIDubbo采用微内核+插件体系。设计优雅,可扩展性强。 微内核+插件体系的实现是基于SPI机制。(service provider interface) 框架定义服务标准接口,使用者可以自己扩展服务实现。 1, Dubbo定义了@SPI注解 对于打了@spi注解的接口,dubbo会从以下目录依次查找实现。 META-INF/dubbo/internal/ //dubbo 内部实现的各
2017-06-06 11:34:09 1339
原创 常用的JVM参数
常用的JVM参数(jdk7)堆设置-Xms:初始堆大小-Xmx:最大堆大小-XX:NewSize=n:设置年轻代大小-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Surviv
2017-06-06 11:26:40 1041
原创 JVM优化
JVM优化java性能优化,首先要做的一点是判断性能瓶颈在哪? 一般我们会对系统进行压测,以找到性能瓶颈。 这里只谈java系统优化。 一般来讲,默认的jvm可以工作的挺好,但是经过特定优化的jvm才可以发挥最大的性能。 调优希望达到的目标是: 尽量少的GC次数尽量短的GC时间(每次)尽量长的GC间隔时间所以,要达到1应该是设置一个尽量大的堆,但是要达到目标2应该是设置小一点的堆。这
2017-06-05 17:39:24 433
空空如也
mvn打包问题,被排除的jar依然打进war包
2018-05-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人