- 博客(34)
- 收藏
- 关注
转载 关于软件设计的思考
友人 10:35:06开了这么久的源码,有什么感悟?老碗鱼 10:35:36慢慢学会了怎么组织代码友人 10:36:55比如?老碗鱼 10:37:27以前写代码面向对象留的接口觉得对不上老碗鱼 10:37:37组织的不好老碗鱼 10:37:43现在看了组织性更强友人 10:39:02呵呵,都没有专门写过抽象接口老碗鱼 10:39:49其实优秀的代码是一层一层写的老碗鱼 10:40:00看...
2018-07-11 11:05:00
148
转载 多线程分工协作模板
在项目开发中遇到复杂任务使用单线程比较浪费时间效率也不高,使用多线程分解任务能提高执行效率。首先定义一个产品接口public interface Product {}定义产品生产线public class ProductLine extends LinkedBlockingDeque<Product> {}定义抽象机器人public...
2018-07-10 14:47:00
167
转载 使用Semaphore控制对象池
public class Pool<T> { private int size; private List<T> items = new ArrayList<T>(); private volatile boolean[] checkedOut; private Semaphore available; ...
2018-07-07 18:35:00
110
转载 多线程协调模板
在多线程进行相互协调是个头疼的事,今天写个多线程协调操作模板,以后只要套用这个模板就好了public abstract class Order implements Runnable { protected boolean open = true; protected ReentrantLock lock; protect...
2018-07-04 21:31:00
124
转载 多线程协调实例
用好多线程重要的是协调线程调用资源,下面看一个实例:三个线程,第一个线程循环输出三条信息,第二个线程循环输出两条信息,第三个线程循环输出一条信息,按照一二三线程顺序依次输出,然后按照这个顺序循环五回。多线程依次输出,依次控制就是多线程需要访问的共享资源。public class ThreadTest { public static class ChildR...
2018-07-02 14:45:00
166
转载 Zookeeper(二)
Shell使用zkCli.sh [-server ip:port]常用命令ls、ls2 列出zk中的节点create [-s] [-e] path data acl 创建节点,zk的节点分为两种:临时节点(随着zk session消亡而自动删除)、持久节点(一直存在)delete 删除命令rmr path 递归删除一个znodeget 获取节点信息...
2018-04-26 21:58:00
92
转载 Zookeeper(一)
介绍分布式协作。zookeeper是google的chubby项目开源实现。最早是hadoop的子项目。小米米聊、淘宝Taokeeper其实类zookeeper。Kafka使用zookeeper。消息发布订阅,其中zk就是用于检测节点崩溃。实现主题的发现,并且保持主题的生产和消费状态。Hbase三段查找,Root-Region=》Meta Region=》Region(T...
2018-04-22 21:49:00
77
转载 jvm优化(二)
栈逃逸分析:是指在局部方法内创建的对象被外面的索引引用,该方法在执行完毕之后并不会释放外界索引所指向的对象。jvm参数:DoEscapeAnalysis-server -Xmx10m -Xms10m -XX:+DoEscapeAnalysis -XX:+PrintGC使用情况:小对象可以直接分配到栈上栈会自动回收详细转载于:https://...
2018-04-22 16:00:00
68
转载 jvm优化(一)
什么是jvm?java程序自己独立运行环境,包括堆栈、寄存器和java字节码的指令集。jvm上可以运行的语言JavaScalaGroovyjvm、jdk和jrejvm:jvm是jre的一部分jre:java运行环境,包含jvmjdk:包含jrejvm常用的一些开发工具,javac、java和jconsol等等...
2018-04-18 22:10:00
90
转载 Spring中的事务管理
配置注解<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /></bean>...
2018-03-31 16:50:00
86
转载 Executor框架
JDK5的java.util.concurrent包中的执行器将为你管理Thread对象,从而简化了并发编程。Executor在客户端和任务执行之间提供了一个间接层;与客户端直接执行任务不同,这个中介对象执行任务。Executor允许你管理异步任务的执行,而无须显示的管理线程的周期。 Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标...
2018-01-17 22:27:00
82
转载 java线程池
什么是线程池? 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。为什么要用线程池?线程池可以对开发带来以下好处:降低资源消耗提高相应速度提高线程的可管理性线程池的组成线程的容器和管理器工作线程任务接口任务的容器处理流程线程池首先判断核心线程池里的线程是否都...
2018-01-15 20:58:00
67
转载 java并发工具
Fork/Join框架 在JDK7后提供一套并行任务的框架,它可以把发大任务拆分成很多的小任务,汇总每个小任务的结果得到大任务的结果。工作窃取算法工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务。那么,为什么需要使用窃取算法呢?假如我们需要做一个比较大的任务,可以把这个任务分割为若干互不依赖的子任务,为了减少线程间的竞争,把这些子任务粉笔放到不...
2018-01-13 17:29:00
80
转载 java并发容器
为什么要使用ConcurrentHashMap? 在多线程环境下,会用HashMap进行put操作会引起死循环,导致CPU利用率接近100%。因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点用不为空,就会产生死循环获取Entry。 HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的...
2018-01-09 22:26:00
69
转载 同步器AQS解析
什么是同步器? 多线程并发执行,通过某种共享状态来同步,当共享状态满足某种条件,才能触发线程开始执行操作。AbstractQueuedSynchronizer(AQS) 这是一个抽象类,它提供多线程下不同共享模式的操作,实现它可以自定义同步器。可以看出,ReentrantLock和ReentrantReadWriteLock的内部类都是继承于这个抽象类。...
2018-01-07 15:09:00
77
转载 多线程Lock锁
在JDK1.5以后,在并发包(java.util.concurrent)里面添加包locks,并提供了Lock接口,用于与synchronized类似的锁功能,不同的是Lock需要手动开启锁和释放锁。为什么要用Lock锁?尝试非阻塞的获取锁获取锁的过程可以被中断超时获取锁Lock锁的实现类图Lock锁的常用APIlock():...
2018-01-06 12:49:00
149
转载 无锁机制下的原子性操作
通常使用volatile关键字修饰字段可以实现多个线程的可见性和读写的原子性,但是对于字段的复杂性操作就需要使用synchronize关键字来进行,例如:public class Counter { private volatile int count = 0; public synchronized int getAndIncr() {...
2018-01-06 11:11:00
112
转载 多线程基础
什么是多线程? 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。为什么要用多线程?充分利用多处理核心更快的响应时间java默认的线程public static void main(String[] args) { // java虚拟机的线程管理接口 ThreadMXBean threa...
2017-12-31 12:31:00
69
转载 MySQL数据库优化(五)
MySQL配置优化 通过配置my.cnf使数据库达到优化的目的。1、innodb的缓冲池配置 innodb_buffer_pool_size 通常配置服务器内存的60%~70%2、innodb log缓存配置 innodb_log_buffer_size 这个不宜配置太大,因为日志缓存每秒刷新一次3、配置缓冲池个数 innodb_buffer_po...
2017-12-27 20:40:00
80
转载 MySQL主从复制
原理 MySQL主从复制通过两台机器,实现一台机器数据的变化在另一台机器上实时同步的过程。 首先开启master数据库和slave的binlog文件,再给master创建slave允许复制的用户。当master数据库获取到更改数据库的SQL语句时,master数据库会将更改数据库的SQL保存至binlog文件,运行在slave数据库上的IO Thread线程根据positio...
2017-12-24 18:20:00
61
转载 MySQL表分区
分区原理根据一定规则将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看只有一张表,但是底层确实由多个物理分区组成。分区后,表面上还是一张表,但数据散列到多个位置。应用程序读读写的时候操作的还是大表名字,MySQL自动去组织分区的数据。分区类型Range分区mysql> CREATE TABLE range_subarea(id INT, ...
2017-12-24 11:47:00
81
转载 数据库分表
水平分表 水平分表是将数据分别均匀的分配到多张表结构相同的表中,以减小单表的查询和读写压力。数据分配策略 通过取模的方式将数据分配到不同的表。例如:一共3张表,id%3结果就是分配的表序号。遇到的问题跨表直接连接查询无法进行我们需要统计数据的时候如果数据持续增长,达到现有分表的瓶颈,需要增加分表,此时会出现数据重新排列的情况解决方案第1...
2017-12-23 21:00:00
53
转载 数据库的悲观锁和乐观锁
悲观锁 它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。最佳实践具体示例请参照MySQL的悲观锁实现乐观锁 ...
2017-12-23 17:53:00
73
转载 InnoDB引擎的行锁
InnoDB引擎特点简述支持事务支持外键必须要有主键,聚焦索引不支持全文检索使用行锁行锁特点 支持事务,加锁开销大,加锁慢,会出现死锁,锁的粒度小,并发下等待锁的概率较低,所以支持高并发。手动事务语法手动测试行锁需要首先关闭自动提交,每个会话都需要...
2017-12-20 22:31:00
106
转载 数据库事务
事务是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,也就是说要么全部执行,要么全部都不执行。四大属性原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。隔离性(isolation)。一...
2017-12-20 21:31:00
47
转载 MyISAM引擎的表锁
MyISAM引擎特点简述不支持事务不支持外键较小的逐渐范围支持全文检索不支持GIB数据查询效率高使用表锁表锁特点 锁住整个表,所以开销小,加锁比较快,无死锁情况,锁的粒度较大,在并发情况下,产生锁等待的概率比较高,所以支持的并发数较低,一般用于查找。表锁类型读锁:也称为共享锁,针对同一张表,多并发读操作可以并行执行,并且互不影响,...
2017-12-19 22:03:00
75
转载 MySQL数据库优化(四)
慢查询 慢查询是MySQL提供的一种查询SQL执行效率的工具,通过该工具的设置可以获取SQL执行的信息。查看慢查询mysql> SHOW GLOBAL VARIABLES LIKE 'slow_query_log'; 开启/关闭慢查询mysql> SET GLOBAL slow_query_log = 1; #开启mysql&...
2017-12-19 21:22:00
67
转载 MySQL数据库优化(三)
适合建索引的情况频繁作为WHERE条件语句查询的字段关联字段需要建索引排序字段可以建索引分组字段需要建索引使用到聚合函数的字段不适合建索引的情况频繁更新的字段WHERE条件用不到的字段表数据量较小数据重复较为均匀,例如性别,布尔类型等WHERE条件中参与列计算的字段索引失效的情况选择列用到*号,给name加索引...
2017-12-17 16:12:00
80
转载 MySQL数据库优化(二)
索引索引是通过BTREE结构进行数据检索的,以平衡二叉树检索的方式缩短数据查询的时间。索引类型主键索引(primary),在innodb存储引擎下,由于数据和索引都在ibd文件里存储,所以数据的组织方式是由主键索引的BTREE结构,即聚簇索引,如果表没有主键系统会查找一列唯一数据列当主键,如果还没有唯一数据列,系统则虚拟主键索引。在innodb存储引擎下,其他索引都引用主...
2017-12-10 22:24:00
93
转载 MySQL数据库优化(一)
数据库性能下降可能的原因I/O吞吐量小,形成了瓶颈效应CPU性能差内存不足,磁盘空间不足没有检索或者没用到检索查询语句性能差,没有优化检索返回的数据量太大返回了不必要的字段锁或者死锁配置参数没有优化如果是服务器性能问题,可以使用这些指令进行查询:top命令、htop命令、free命令和df命令等等。SQL执行顺序如果我们想知道我们的...
2017-12-10 15:33:00
48
转载 MySQL数据类型
整型数据类型描述tinyint(m)1个字节 范围(-128~127)smallint(m)2个字节 范围(-32768~32767)mediumint(m)3个字节 范围(-8388608~8388607)int(m)4个字节 范围(-2147483648~2147483647)bi...
2017-12-10 13:52:00
51
转载 Linux安装MySQL
系统环境 CentOS 6.6准备工作安装gcc[root@localhost ~]# yum install -y gcc gcc-c++ make automake查看是否安装[root@localhost ~]# gcc -version安装wget[root@localhost ~]# yum install -y w...
2017-12-09 20:31:00
56
转载 MySQL入门指南
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle旗下产品,最流行的关系型数据库管理系统之一。为什么选择MySQLMySQL社区版是免费的开放源码社区活跃安装使用简单MySQL的逻辑架构组成部分:MySQL由八个部分组成,其中包含文件系统、存储引擎、管理服务工具...
2017-12-09 15:21:00
64
转载 Java程序员的知识树
知识体系 ├─前端 │ ├─ HTML │ ├─ CSS │ └─ JavaScript ├─ 后端 │ ├─ Java │ │ └─ 多线程 │ │ ├─多线程基础 │ │ ├─ 无锁机制下的原子性操作 │ │ ├─...
2017-12-09 14:20:00
484
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人