- 博客(111)
- 资源 (15)
- 问答 (1)
- 收藏
- 关注
转载 IO模式和IO多路复用
阅读目录1 基础知识回顾2 I/O模式3 事件驱动编程模型4 select/poll/epoll的区别及其Python示例 网络编程里常听到阻塞IO、非阻塞IO、同步IO、异步IO等概念,总听别人装13不如自己下来钻研一下。不过,搞清楚这些概念之前,还得先回顾一些基础的概念。回到顶部1 基础知识回顾注意:咱们下面说的都是Linux环境下,跟Windows不一样哈~~~1.1 用户空间和内核空间 ...
2018-04-08 14:26:34
358
转载 使用Spring实现读写分离( MySQL实现主从复制)
http://blog.youkuaiyun.com/jack85986370/article/details/51559232
2018-03-16 10:47:44
299
原创 Redis cluster 3.2.11 集群搭建
安装环境与版本redis 采用 redis-3.2.11 版本。两台虚拟机都是 CentOS ,一台 CentOS6.5 (IP:192.168.231.129)CentOS6.5(IP:192.168.231.130)安装过程1、下载并解压cd /usr/localtar -zxvf redis-3.2.11.tar.gz mv redis-3.2.11 redis2、编译安装cd redism...
2018-03-11 13:37:25
1656
转载 hadoop运行原理之shuffle
hadoop的核心思想是MapReduce,但shuffle又是MapReduce的核心。shuffle的主要工作是从Map结束到Reduce开始之间的过程。首先看下这张图,就能了解shuffle所处的位置。图中的partitions、copy phase、sort phase所代表的就是shuffle的不同阶段。 shuffle阶段又可以分为Map端的shuffle和Red
2018-01-21 19:52:47
291
转载 CAS操作ABA问题发生的场景
最开始看一些资料,提到了CAS操作存在问题,就是在CAS之前A变成B又变回A,CAS还是能够设置成功的,开始十分的费解,怎么可能呢,A变回了A就应该能够CAS成功啊,为什么会不成功呢?于是去查了一些资料,其中提到了两种情况: 第一种,A最开始的内存地址是X,然后失效了,有分配了B,恰好内存地址是X,这时候通过CAS操作,却设置成功了。这种情况在带有GC的语言中,这种情况是不可能发生
2017-09-18 00:28:18
964
转载 concurrent包的实现
由于java的CAS同时具有 volatile 读和volatile写的内存语义,因此Java线程之间的通信现在有了下面四种方式: A线程写volatile变量,随后B线程读这个volatile变量。A线程写volatile变量,随后B线程用CAS更新这个volatile变量。A线程用CAS更新一个volatile变量,随后B线程用CAS更新这个volatile变量。A线程用CAS
2017-09-17 23:58:03
570
原创 线程安全的实现方法
1 互斥同步(阻塞同步)悲观锁:synchronized和reentrantLock2 非阻塞同步基于冲突检测的乐观并发策略,通俗的说,就是先进行操作,如果没有其他线程争用共享数据,那操作就成功了;如果有争用,产生了冲突,那就再采取其他的补偿措施(最常见的补偿就是不断去尝试,直到成功为止)我们需要操作和冲突检测这两个步骤具备原子性,靠什么来保证呢?如果这里再使用互斥同步来保证就失去
2017-09-15 17:34:01
426
转载 this引用逃逸
并发编程实践中,this引用逃逸("this"escape)是指对象还没有构造完成,它的this引用就被发布出去了。这是危及到线程安全的,因为其他线程有可能通过这个逸出的引用访问到“初始化了一半”的对象(partially-constructed object)。这样就会出现某些线程中看到该对象的状态是没初始化完的状态,而在另外一些线程看到的却是已经初始化完的状态,这种不一致性是不确定的,程序也会
2017-09-15 16:33:33
2694
原创 volatile内存语义
1 可见性不管是volatile读还是volatile写,都会重新访问主内存取最新的值2 有序性(防止重排序)volatile写前 storestore屏障 首先先把前面的普通写操作执行到主内存,在执行volatile写操作执行到内存(保证前面普通写操作和volatile写操作不重排,前面的写操作可以重排)volatile写后 storeload屏障 首先先把volatile
2017-09-13 20:54:19
256
转载 Spring事务传播性与隔离级别
事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题。事务最重要的两个特性,是事务的传播级别和数据隔离级别。传播级别定义的是事务的控制范围,事务隔离级别定义的是事务在数据库读写方面的控制范围。以下是事务的7种传播级别:1) PROPAGATION_REQUIRED ,默认的spring事务传播级别,使用该级别的特点是,如
2017-07-11 10:43:31
373
原创 Mysql(2)事务
一、AICD1、原子性2、一致性3、隔离性4、持久性二、隔离级别1、read uncommint(未提交读)事务的修改,即使未提交,对于其他的事务也是可见的,称为脏读,这就会导致很多问题。这个隔离级别性能不会比其他隔离级别好太多,但是却缺乏其他隔离级别的很多好处,实际中很少应用。2、read commit(提交读)大多数数据库系统的默认隔离级别,但Mys
2017-06-06 23:24:01
266
原创 Mysql(1)并发控制
1、读写锁读锁是共享锁,相互不阻塞的。写锁是排他锁,一个写锁会阻塞其他的写锁和读锁。2、锁粒度所谓的锁策略,就是在锁的开销和数据的安全性之间寻求平衡,这种平衡当然也会影响到性能。大多数商用数据库系统没有提供更多的选择,一般都是在表上施加行级锁,并加以各种复杂的方式来实现,以便在锁比较多的情况下尽可能地提供更好的性能。Mysql每种存储引擎都可以实现自己的锁策略和锁粒度。
2017-06-06 11:04:33
489
原创 状态模式
定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态转换的条件表达过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的问题判断逻辑简化。理解:1、分成2个角色,State状态角色,StateContext控制状态翻转的上下文角色 2、当状态改变时,翻转上下文的状态类图如下:
2017-04-19 11:11:08
474
原创 happens-before规则和as-if-serial语义
JSR-133使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这2个操作之间必须要存在happens-before关系。这里提到的2个操作既可以是一个线程之内,也可以是不同线程之间。与程序员密切相关的happens-before规则如下:1、程序顺序规则:一个线程中的每个操作,happens-before于线
2017-03-22 11:19:18
8586
1
转载 内存屏障
原文地址 作者:Martin Thompson 译者:一粟 校对:无叶,方腾飞本文我将和大家讨论并发编程中最基础的一项技术:内存屏障或内存栅栏,也就是让一个CPU处理单元中的内存状态对其它处理单元可见的一项技术。CPU使用了很多优化技术来实现一个目标:CPU执行单元的速度要远超主存访问速度。在上一篇文章 “Write Combing (合并写)”中我已经介绍了其中的一项技术
2017-03-21 14:07:50
562
转载 Java指令重排序
在执行程序时候,为了提高性能,编译器和处理器常常会对指令做重排序。重排序分3中类型。1、编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。2、指令级并行的重排序。现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据的依赖性,处理器可以改变语句对应机器指令的执行顺序。3、内存系统的重排序。由于处理器使用缓存和读/写缓冲区,这使得加载和存储
2017-03-15 11:25:36
587
原创 并发编程的挑战
1、如何减少上下文的切换(1)无所并发编程。多线程竞争时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的id按照hash算法取模分段,不同的线程处理不同段的数据。(2)CAS算法。compare and set 算法。java的atomic包使用cas算法来更新数据,而不需要加锁。(3)使用最少的线程。避免创建不需要的线程(4)协程。在单线程里实现多
2017-01-21 23:32:12
499
转载 Java过滤器与SpringMVC拦截器之间的关系与区别
今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深夜,时间原因,我就把一些网友的观点重点摘录下来,大家仔细看后也一定会有一个比较新的认识(在此非常感谢那些大牛们的无私奉献,分享他们的经验与心得,才能让像我这样的小白有机会站一下你们这些巨人的肩膀,才能
2017-01-17 09:32:11
407
原创 优化sql
1、 优化group by语句默认情况下,mysql对所有group bycol1,col2…的字段进行排序。这与在查询中指定order by col1,col2…类似。因此,如果显式包括一个包含相同的列的order by 子句,则对mysql的实际执行性能没有什么影响。如果查询包括groupby 但用户想要避免排序结果的消耗,则可以指定order by null 禁止排序,如下面例子:
2017-01-10 16:00:41
322
原创 redis使用手册
字符串1、Redis命令不区分大小写2、字符串型是Redis最基本的数据类型,能存任何形式的字符串,包括二进制数据。一个字符串类型最大容量是512M3、字符串类型是其他4种数据类型的基础,其他数据类型和字符串类型的差别从某种程度来说只是组织字符串的形式不同4、incr key 当存储的字符串是整数形式时候,Redis提供了incr命令,其作用是让当前键值递增,并返回增值后的
2017-01-10 14:51:40
541
转载 mybatis执行批量更新batch update 的方法(oracle,mysql)
oracle和mysql数据库的批量update在mybatis中配置不太一样:oracle数据库:update id="batchUpdate" parameterType="java.util.List"> foreach collection="list" item="item" index="index" open="begin" close="end;" sepa
2017-01-10 14:17:14
1038
转载 MyBatis批量插入数据
在程序中封装了一个List集合对象,然后需要把该集合中的实体插入到数据库中,由于项目使用了Spring+MyBatis的配置,所以打算使用MyBatis批量插入,由于之前没用过批量插入,在网上找了一些资料后最终实现了,把详细过程贴出来。 实体类TrainRecord结构如下: Java代码 public class TrainRecord im
2017-01-10 14:15:07
505
转载 MySql小点心—1、赋值操作符"="与":="
对于刚接触到mysql的程序员来说,会对这两个符号有疑问,因为会发现有的代码里用这个有的用另一个。当然他们是有区别的。他们的区别也比较简单: “:=” 是真正意义上的赋值操作,左边的变量设置为右边的值。"=" 则只在两种情况下作为赋值用,第一种就是在SET语句里面,SET var = value;另一种是在UPDATE语句里面的那个SET,如update table
2017-01-10 11:03:09
709
原创 mysql索引分类
索引是在mysql的存储引擎层中实现的,而不是在服务器层实现的。所以每种存储引擎的索引都不一定完全相同,也不是所有的存储引擎都支持所有的索引类型。(1) Btree索引:最常见的索引类型,大多数引擎都支持B树索引。(2) HASH索引:只有memory引擎支持,使用场景简单。(3) Rtree索引:MyISAM的一个特殊索引类型,主要用于地理空间数据类型,
2017-01-10 10:42:32
311
转载 索引合并和组合索引的比较
在教务系统补考子系统的开发过程中,安排考场的算法运算时间非常慢,需要32秒才能完成考场的分配。查找原因,由于需要在学生补考科目表里面进行查找数据——该表的数据目前已达200万条,所以算法的大部分时间都花在查找数据方面。为了解决以上问题,我们决定对数据表进行分析,创建合适的索引。在创建索引过程中,我们发现查询语句已经为查询列创建了索引,但是是为每个列单独创建的——SELECT * FRO
2017-01-09 22:26:33
775
转载 MySQL查看SQL语句执行效率
Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看 SQL 语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。Explain语法:explain select … from … [where ...]例如:explain select * from news;输出:
2017-01-09 09:53:22
105
转载 Oracle中ROWNUM的使用技巧。
ROWNUM是一种伪列,它会根据返回记录生成一个序列化的数字。利用ROWNUM,我们可以生产一些原先难以实现的结果输出,但因为它是伪列的这个特殊性,我们在使用时也需要注意一些事项,不要掉入“陷阱”。下面就介绍一下它的使用技巧及注意事项。1 特殊结果输出利用ROWNUM,我们可以做到一些特殊方式的输出。1.1 Top N结果输出我们如果希望取输出结果的前面几条
2017-01-06 14:24:12
133
转载 MyBatis/Ibatis中#和$的区别
MyBatis/Ibatis中#和$的区别1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中。如:order by $us
2017-01-06 13:50:42
133
转载 mybatis如何防止sql注入
sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=’1’”这样的语句,有可能入侵参数校验不足的应用程序。所以在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些安全性很高的应用中,比如银行软件,经常使用将sql语句全部替换为存储过程这样的方式,来防止sql注入,这当然是一种很安全的方式,但我们平时开发中,可能不需要这种
2017-01-06 11:41:15
501
转载 代理和反向代理
引用 出于安全考虑,局域网内的机器访问访问墙外的网站借助于代理服务器进行,如果把局域网外Internet想象成一个巨大的资源库,局域网内的用户要访问这个库里的资源必须统一通过代理服务器进行。反过来,如果局域网向Internet提供资源,让Internet上的用户访问局域网内的资源也可以设置成一个代理服务器,只不过与我们常用的代理服务器方向正好相反,所以叫反向代理(Reverse Pr
2017-01-05 17:06:00
448
原创 套接字
源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。(我的理解是:套接字其实就是传输层给上层暴露出来的接口,我们可以通过套接字的接口去读写传输层的数据,所以http、ftp都是基于套接字 的)它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的
2016-12-12 14:36:35
473
转载 公钥和私钥解说
公钥和私钥就是俗称的不对称加密方式,是从以前的对称加密(使用用户名与密码)方式的提高。用电子邮件的方式说明一下原理。 使用公钥与私钥的目的就是实现安全的电子邮件,必须实现如下目的: 1. 我发送给你的内容必须加密,在邮件的传输过程中不能被别人看到。 2. 必须保证是我发送的邮件,不是别人冒充我的。 要达到这样的目标必须发送邮件的两人都有公钥和
2016-12-08 17:30:11
386
原创 Redis 数据类型要点
字符串1、Redis命令不区分大小写2、字符串型是Redis最基本的数据类型,能存任何形式的字符串,包括二进制数据。一个字符串类型最大容量是512M3、字符串类型是其他4种数据类型的基础,其他数据类型和字符串类型的差别从某种程度来说只是组织字符串的形式不同4、incr key 当存储的字符串是整数形式时候,Redis提供了incr命令,其作用是让当前键值递增,并返回增值后的
2016-12-01 15:50:30
556
原创 Spring IOC启动resources定位与加载过程
调用栈涉及类:FileSystemXmlApplicationContext:AbstractApplicationContext:AbstractRefreshableApplicationContext:AbstractXmlApplicationContext:
2016-11-28 15:46:07
834
转载 栈帧、局部变量表、操作数栈
1.定义 栈帧(stack frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。 每一个方法从调用开始到执行完成的过程,就对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。 对于执行引擎来说,活动线程中,只有栈顶的栈帧是有效的,称为当前栈帧,这
2016-11-22 14:10:26
762
转载 JVM调优总结 -Xms -Xmx -Xmn -Xss
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java -Xmx3550m -Xms355
2016-11-22 12:01:43
425
redis-2.4.5 for windows
2017-09-23
thrift-0.9.2 for windows
2017-09-23
基于Spring + Drools6.4规则引擎代码实例.
2017-09-23
考试报名管理(C语言课程设计)
2014-06-12
林锐-高质量C、C++编程指南
2014-06-12
项目中布局文件怎么引用另一个项目自定义的组件
2014-12-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人