- 博客(94)
- 资源 (2)
- 收藏
- 关注
转载 CLH锁与MCS锁
一。引文1.1 SMP(Symmetric Multi-Processor)对称多处理器结构,指服务器中多个CPU对称工作,每个CPU访问内存地址所需时间相同。其主要特征是共享,包含对CPU,内存,I/O等进行共享。SMP能够保证内存一致性,但这些共享的资源很可能成为性能瓶颈,随着CPU数量的增加,每个CPU都要访问相同的内存资源,可能导致内存访问冲突,可能会导致C
2017-06-14 09:44:36
2553
转载 linux中tcp连接内核参数调优somaxconn
永久生效:vim /etc/sysctl.confnet.core.somaxconn=32768sysctl -p立即生效:sysctl -w net.core.somaxconn=32768sysctl -a显示所有内核参数看其解析: 对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接.当三次握手成功后, 我们可以看到端
2017-04-30 09:04:19
17936
转载 TCP连接的状态与关闭方式,及其对Server与Client的影响
1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态。TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用、特定数据包以及超时等,具体状态如下所示:CLOSED:初始状态,表示没有任何连接。LISTEN:Server端的某个Socket正在监听来自远方的TCP端口的连接请求。SYN_SENT:发送连接请求后等待确认信息。当客户端Socket进行Conne
2017-04-29 20:44:04
1193
转载 Linux内核TCP/IP参数分析与调优
如图展示的是TCP的三个阶段.1,TCP三次握手. 2,TCP数据传输. 3,TCP的四次挥手.SYN:(同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立的时候有效。表示一个新的TCP连接请求。 ACK:(确认编号,Acknowledgement Number)是对TCP请求的确认标志,同事提示对端系统已经成功连接所有数据。
2017-04-29 20:38:53
2481
转载 分布式理论之一:Paxos算法的通俗理解
维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。Paxos算法目前在Google的Chubby、MegaStore、Spanner等系统中得到了应用,Hadoop中的ZooKeeper也使用了Paxos算法,在上面的各个系统中,使用的算法与Lam
2017-04-25 09:59:40
562
转载 学习Javascript闭包(Closure)
作者: 阮一峰日期: 2009年8月30日闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。下面就是我的学习笔记,对于Javascript初学者应该是很有用的。一、变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域。变量的作用域无非就是两种:全局变量和局部变量。
2017-03-09 14:21:39
269
转载 JavaScript 严格模式详解
一、概述除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。设立"严格模式"的目的,主要有以下几个: - 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为; - 消除代码运行的一些不安全之处,保证代码运行的安全;
2017-03-09 13:52:55
226
转载 Nginx的负载均衡的那点事
本节就聊聊采用Nginx负载均衡之后碰到的问题:Session问题文件上传下载通常解决服务器负载问题,都会通过多服务器分载来解决。常见的解决方案有:网站入口通过分站链接负载(天空软件站,华军软件园等)DNS轮询F5物理设备Nginx等轻量级架构那我们看看Nginx是如何实现负载均衡的,Nginx的upstream目前支持以下几种方式的分配1、轮询(默认)每个
2017-01-20 14:46:07
492
转载 正向代理与反向代理的区别
正向代理的概念正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容代理服务器去取回来,然后返回给我从网站的角度,只在代理服务器来取内容的时候有一次记录有时候并不知道是用户的请求,也隐藏
2017-01-20 11:06:44
331
转载 LinkedBlockingQueue的双锁,源码分析
概述LinkedBlockingQueue是java concurrent包提供的另一个多线程安全的阻塞队列,与ArrayBlockingQueu相比,此队列的使用链表实现(不熟悉链表的同学,请查阅大学的数据结构课本),可以提供高效的并发读写性能。数据结构链表节点既然是链表,那么肯定少不了节点,节点自然包括节点内容和next指针。jdk开发人员,设计的节点是
2017-01-19 17:42:40
1722
转载 java并发-ReentrantLock的lock和lockInterruptibly的区别
ReentrantLock的加锁方法Lock()提供了无条件地轮询获取锁的方式,lockInterruptibly()提供了可中断的锁获取方式。这两个方法的区别在哪里呢?通过分析源码可以知道lock方法默认处理了中断请求,一旦监测到中断状态,则中断当前线程;而lockInterruptibly()则直接抛出中断异常,由上层调用者区去处理中断。 lock操作 lo
2017-01-18 10:57:59
1694
转载 分布式事务演进
分布式事务背景现在分布式系统一般由多个独立的子系统组成,多个子系统通过进程间通信(RPC)互相协作配合完成各个功能。有很多用例会跨多个子系统才能完成,比较典型的是电子商务网站的下单支付流程,至少会涉及交易系统和支付系统,而且这个过程中会涉及到事务的概念,即保证交易系统和支付系统的数据一致性。通常我们谈及的事务是指单机资源的ACID属性,所以此处我们称这种跨系统的事务为分布式事务。分
2016-12-13 09:46:16
968
转载 系统幂等以及常用实现方式
前言现在稍具规模的网站和大型应用都不再是单机模式,而是分布式应用,基于多机的集群构建的应用,这样服务能力就可以基本实现横向扩容(scale out),不会像单机模式下的纵向扩容(scale up)会受到单机服务能力上限的限制。另外,随着“微服务”概念的火爆,很多应用在构建之初就已经走在了分布式的路线上了,所以就目前行业的发展来看,基于分布式的应用会越来越普遍,甚至变成常态。加上docker
2016-12-13 09:19:49
2898
转载 Spring中默认bean名称的生成策略/方式修改
Spring中默认bean名称的生成策略/方式修改最近公司项目打算模块化,其实一个原因也是为了能够整合公司多个业务的代码,比如一个资源xxx,两个业务中都有对这个资源的管理,虽然是一个资源,但是是完全不同的定义、完全不同的表、不同的处理逻辑。所以打算把类名弄成一样的,但是包名不一样。这里就遇到一个问题,就是在使用注解的时候,两个模块里的这个资源都叫xxxDao,这样在spring启动的
2016-11-26 21:44:12
8052
原创 事务开启位置不正确,导致数据库连接数不够
在基于SOA的框架中,分四层时export: 响应数据整理层,响应数据请求及封装出参facade: 业务归集层,业务处理主流程service: 具体服务实现层,处理具体业务dao: 数据访问层,对数据进行增删改查操作在facade层中的某些方法可能会调用外部的一些其它的服务,比如在一个开团接口canOpenGroups,由三部分组成查看库存:checkStock (调用
2016-11-14 18:31:12
2520
1
转载 Spring配置文中解析xsd文件版本
最初Spring配置文件的头部声明如下: <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> 说明: 1、第一行表示xml声明,任何格式良好的xml文档都必须第一行是声明。相当于告诉解析器这个是x
2016-11-11 09:08:49
2284
转载 spring 事务 @Transactional注解参数 tx:annotation-driven
先让我们看代码吧!以下代码为在“Spring3事务管理——基于tx/aop命名空间的配置”基础上修改。首先修改applicationContext.xml如下:…bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"> property name="driverClassName" va
2016-11-09 11:35:51
28335
转载 spring 事务 @Transactional注解参数详解
事物注解方式: @Transactional当标于类前时, 标示类中所有方法都进行事物处理 , 例子:1 @Transactional public class TestServiceBean implements TestService {}当类中某些方法不需要事物时: 1 @Transactional 2 public class TestServic
2016-11-09 11:30:11
1536
转载 实战CGLib系列文章 MethodInterceptor和Enhancer
实战CGLib系列文章本篇介绍通过MethodInterceptor和Enhancer实现一个动态代理。一、首先说一下JDK中的动态代理:JDK中的动态代理是通过反射类Proxy以及InvocationHandler回调接口实现的,不了解的同学请参考我的这篇Blog:Java动态代理详解 http://shensy.iteye.com/blog/1698197 但是
2016-11-08 13:49:16
4795
转载 线程上下文切换和进程上下文切换的区别
进程切换分两步1.切换页目录以使用新的地址空间2.切换内核栈和硬件上下文。对于linux来说,线程和进程的最大区别就在于地址空间。对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的。所以明显是进程切换代价大线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。这两种上下文切换的处理都是通
2016-11-07 12:10:31
2380
转载 InnoDB 引擎独立表空间 innodb_file_per_table
使用过MySQL的同学,刚开始接触最多的莫过于MyISAM表引擎了,这种引擎的数据库会分别创建三个文件:表结构、表索引、表数据空间。我们可以将某个数据库目录直接迁移到其他数据库也可以正常工作。然而当你使用InnoDB的时候,一切都变了。 InnoDB 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就感觉不爽,增删数据库的时候,ibdata1文
2016-11-05 10:39:59
452
转载 高性能Mysql主从架构的复制原理及配置详解
1 复制概述Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。
2016-11-04 10:23:05
341
转载 mysql数据备份
前言我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?这可能是最恐怖的事情了吧, 我感觉在生产环境中应该没有什么比数据跟更为重要. 那么我们该如何保证数据不丢失、或者丢失后可以快速恢复呢?只要看完这篇, 大家应该就能对MySQL中实现数据备份和恢复能有一定的了解。为什么需要备份数据?其
2016-11-04 09:48:50
433
转载 用Kibana和logstash快速搭建实时日志查询、收集与分析系统
Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索),您可以使用它。说到搜索,logstash带有一个web界面,搜索和展示所有日志。kibana 也是一个开源和免费的工具,他可以帮助您汇总、分析和搜索重要数据日志并提供友好的web界面。他可以为 Logstash 和 ElasticSearch 提供的日志分析的 Web 界面说到这里,我们
2016-11-03 17:48:19
524
原创 Sharding JDBC源码分析-JdbcMethodInvocation类的作用
摘要 当当的Sharding JDBC是在JDBC规范上进行封装来实现数据库分表分库分表功能的。其整体结构非常清晰,主线就是将JDBC规范中的DataSource、Connection、Statement、PreparedStament分别封装为ShardingDataSource、ShardingConnection、ShardingStatement、ShardingPrepa
2016-11-02 19:32:21
3235
转载 ResultSet 状态详解
这篇文章并没有给出如何使用ResultSet的具体例子,只是从ResultSet的功能性上进行了详细的讲述。希望这篇文章对大家理解ResultSet能够有所帮助。下面就是这篇文章的具体内容。 结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。
2016-11-01 15:23:44
3229
1
转载 Mybatis3源码分析(21)-Mapper实现-动态代理
当定义好一个Mapper接口(UserDao)里,我们并不需要去实现这个类,但sqlSession.getMapper()最终会返回一个实现该接口的对象。这个对象是Mybatis利用jdk的动态代理实现的。这里将介绍这个代理对象的生成过程及其方法的实现过程。Mapper代码对象的生成过程DefaultSqlSession.getMapp()方法最终会调用MapperRegistry.g
2016-10-31 13:35:47
5199
原创 mybatis-Spring ClassPathMapperScanner源码分析(自定义注解加载Bean)
摘要:在使用mybatis时,可以通过mybatis-spring的MapperFactoryBean来配置一系列的DAO接口,MapperFactoryBean的getObject方法能返回DAO接口对应的动态代理类,实际是通过DefaultSqlSession以动态代理的方式生成DAO接口的实现类。而当DAO类很多时,可以通过mybatis-spring的MapperCannerConfi
2016-10-31 12:41:48
7460
转载 Java垃圾回收机制
Java的内存分布在JVM中,内存是按照分代进行组织的。其中,堆内存分为年轻代和年老代,非堆内存主要是Permanent区域,主要用于存储一些类的元数据,常量池等信息。而年轻代又分为两种,一种是Eden区域,另外一种是两个大小对等的Survivor区域。之所以将Java内存按照分代进行组织,主要是基于这样一个“弱假设” - 大多数对象都在年轻时候死亡。同时,将内存按照分代进行组织,
2016-10-29 20:35:15
887
转载 成为JavaGC专家(2)—如何监控Java垃圾回收机制
本文是成为Java GC专家系列文章的第二篇。在第一篇《深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。在本文中,我将解释JVM到底是如何执行垃圾回收处理的。什么是GC监控?垃圾回收收集监控指的是搞清楚JVM如何执行GC的过程,例如,我们可以查明
2016-10-29 20:05:07
459
转载 成为JavaGC专家(1)—深入浅出Java垃圾回收机制
对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用。这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者。如果你对GC的处理过程感兴趣,说明你已经具备较大规模应用的开发经验。如果你曾经想过如何正确的选择GC算法,那意味着你已经完全理解你所开发的应用的特点。当
2016-10-29 19:59:43
573
转载 Mybatis-Spring-注入映射器
注入映射器为了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 编写数据访问对象 (DAO)的代码,MyBatis-spring 提供了一个动态代理的实现:MapperFactoryBean。这个类 可以让你直接注入数据映射器接口到你的 service 层 bean 中。当使用映射器时,你仅仅如调 用你的 DAO 一样调用它们就可以了,但
2016-10-28 16:42:20
385
转载 mybatis-spring 源码分析MapperScannerConfigurer
在Spring配置Mybatis的文件中我们可以看到如下代码:[html] view plain copy bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> property name="basePackage" value="org.taren
2016-10-28 16:38:25
3116
转载 MySQL的JDBC驱动源码解析 预编译开启
一、背景 现在我们淘宝持久化大多数是采用iBatis+MySQL做开发的,大家都知道,iBatis内置参数,形如#xxx#的,均采用了sql预编译的形式,举例如下: SELECT * FROM user WHERE id =#id# 查看日志后,会发现这个sql执行时被记录如下,SELECT * FROM user WHERE id =
2016-10-27 17:45:52
2857
原创 CountDownLatch、CyclicBarrier、Semaphore共同之处与区别以及各自使用场景
摘要: jdk1.5之后,java的concurrent包提供了一些并发工具类,比如CountDownLatch和CyclicBarrier,Semaphore。这里简要的比较一下他们的共同之处与区别,同时介绍一下他们的使用场景。 CountDownLatch:一个线程A或是组线程A等待其它线程执行完毕后,一个线程A或是组线程A才继续执行。CyclicBarrier:一组线程使用await()
2016-10-26 10:55:09
9250
1
转载 剑指offer面试题26:复杂链表的复制Java实现
题目描述:一个复杂链表,在复杂链表中,每个结点除了有一个next指针指向下一个结点外,还有一个sbiling指向链表中的任意结点或者null。下图是一个复杂链表的示例,Null的指针没有画出。 解题思路:1.很直观的解法就是分成两步:1).原始链表上的每一个结点,并用next指针连起来。 2).sbiling指针。
2016-10-25 20:36:54
952
转载 Shell文件包含
像其他语言一样,Shell 也可以包含外部脚本,将外部脚本的内容合并到当前脚本。Shell 中包含脚本可以使用:. filename或source filename两种方式的效果相同,简单起见,一般使用点号(.),但是注意点号(.)和文件名中间有一空格。例如,创建两个脚本,一个是被调用脚本 subscript.sh,内容如下:
2016-10-21 18:00:56
282
转载 Shell输入输出重定向:Shell Here Document,/dev/null文件
Unix 命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示。一般情况下,标准输入设备就是键盘,标准输出设备就是终端,即显示器。输出重定向命令的输出不仅可以是显示器,还可以很容易的转移向到文件,这被称为输出重定向。命令输出重定向的语法为:$ command > file这样,输出到显示器的内容就可以被重定向到文件。
2016-10-21 17:59:31
450
转载 Linux Shell 之 Shell中的函数调用
说起函数调用,相信大家也不会陌生,然而对于初学Shell的我来说,Shell中函数调用方式却有点让我不太习惯,自己也走了不少的弯路,因为传递参数时出了一个很“自然”的错误,也让我吃了不少的苦头,所以总结一下Shell中函数的调用方法。一、Shell中函数的定义为了方便程序和管理和模块化并减少代码的重复,函数的确是一个好东西。而Shell中函数的定义有两种方法,如下:functi
2016-10-21 17:57:03
427
转载 Shell数组:shell数组的定义、数组长度
Shell在编程方面比Windows批处理强大很多,无论是在循环、运算。bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。定义数组在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为: array_name
2016-10-21 17:53:15
904
教室管理信息系统说明书 数据库大作业
2013-12-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人