随笔 - 221
文章 - 0
评论 - 57
阅读 -
162万
05 2020 档案
使用common-pool2构建thrift客户端连接池
摘要:本文不讨论thrift是否有发展前途,重点在于common-pool2的使用。 背景说明:最近在维护公司的一个老项目,项目目的是使公司内部产品和购买的产品进行交互,主要功能有导入用户、岗位、权限等。由于购买的产品有缓存设置,所以我们无法使用数据库导入的方式进行数据修改,而必须使用它内部的方法进行处理
阅读全文
关于SimpleDateFormat线程安全问题
摘要:今天百度一些资料偶然发现SimpleDateFormat居然不是线程安全的,平时使用时根本没有考虑,万幸今天发现了这个问题,得把写的代码得翻出来整理一下了。 一般我们使用的SimpleDateFormat一般是这样写的: public void method() { ... DateFormat d
阅读全文
MySQL性能优化-分页查询越来越慢
摘要:通常我们的分页分页查询时这样的: select * from table_name limit m,n; 当表的数据很大(几百万或更多)时,分页查询会随m的值变大而时间边长: select * from bd_user limit 10000, 20; #耗时0.003秒 select * from
阅读全文
Java使用BIO和NIO进行文件操作比较
摘要:1、读文件 package com.zhi.test; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.nio.ByteBuffer; import
阅读全文
Java并发编程-锁
摘要:锁的主要知识点有: 悲观锁/乐观锁 独享锁/共享锁 公平锁/非公平锁 可重入锁 分段锁 自旋锁 分布式锁 1、乐观锁/悲观锁 悲观锁/乐观锁体现的是一种思想,不是指具体什么类型的锁。 悲观锁总是假设最坏的情况,每次拿数据都会上锁,这样共享资源只能被一个线程使用阻塞其他线程,当用完后才释放锁让其他线程
阅读全文
@Autowired&@Resource
摘要:共同点: @Autowired&@Resource都是完成对象的依赖注入 他们都是写在类成员变量上或成员变量的setter方法上 不同点: Autowired完整类org.springframework.beans.factory.annotation.Autowired,是Spring定义的注解;
阅读全文
Java并发编程-线程间通讯示例
摘要:在Java中线程间通讯有多种方式,我这里列出一些常用方式,并用代码的方式展示他们是如何实现的: 共享变量 wait, notify,notifyAll(这3个方法是Object对象中的方法,且必须与synchronized关键字结合使用) CyclicBarrier、CountDownLatch 利
阅读全文
Java并发编程-多线程
摘要:1、进程与线程 一个程序就是一个进程,一个程序中的多个任务被称为线程。进程是资源分配的基本单位,线程是进程中执行运算的最小单位,亦是调度运行的基本单位。多线程的好处并发执行提高了程序的效率,CPU不会因为某个线程需要等待资源而进入空闲状态 2、线程的实现方式 继承java.lang.Thread类
阅读全文
分布式锁的实现方式和优缺点&Java代码实现
摘要:以下实现仅仅是大概思路,是非公平锁,也是独享锁,而且没有考虑阻塞。 1、基于数据库 它的实现方式很简单,就是在数据库中创建一个lock表,申请锁就是向表中插入一行唯一关键字,数据库能够保证只有一个请求执行成功,也就是说这个请求申请到了锁,其他请求会报错说明没有申请到锁。释放锁就是在数据库中删除这一行
阅读全文
Java操作Zookeeper
摘要:maven依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.6.0</version> </dependency> 程序其它依赖: <!-- Lo
阅读全文
排序二叉树、平衡二叉树、红黑树
摘要:1、排序二叉树 排序二叉树是一种特殊的二叉树,可以非常方便的进行检索,它具有如下特点: 若它的左子树不为空,则左子树上所有节点值都小于根节点的值 若它的右子树不为空,则右子树上所有节点值都大于根节点的值 左子树和右子树都一颗排序 排序二叉树评价查找时间为O(logn),极端情况下(所有节点都靠近一侧
阅读全文
HashMap&Hashtable&LinkedHashMap&ConcurrentHashMap&Collections.synchronizedMap
摘要:1、HashMap 是一种哈希散列结构。JDK1.8中,它由数组+单向链表+黑红树构成。当链表数据量超过8时就会转变为一个红黑树,已降低时间复杂度。 构造函数会创建一个空的HashMap,在插入第一个数据时才会初始化一个数组。它有2个重要的构造参数,分别叫初始容量(initialCapacity,默
阅读全文
Java实现单链表反转
摘要:public class Test { class Node { Node next; int data; protected Node(int data) { this.data = data; } } /** * 构建单链表 * * @param nums * @return */ privat
阅读全文
MySQL性能优化-索引
摘要:索引在MySQL中也叫“键(key)”,索引对性能影响非常关键,当数据量越来越大时,恰当的索引能大幅提高性能,反之,不恰当的索引会降低性能。索引是存储引擎层的而不是服务器层的,不同存储引擎下的索引有不同的工作方式。 1、索引的分类(Index Type) 主键索引 NORMAL普通索引 UNIQUE
阅读全文
MySQL性能优化-选择适合的字段类型
摘要:1、字段类型设计原则 更小的就是更好的:更小的字段类型通常更快,以为它们占用更小的磁盘、内存、缓存使用,降低I/O开销,而且需要的CPU处理周期更短。 简单就好:简单的数据类型需要更少的CUP周期 尽量避免NULL:可为NULL的列会使用更多的存储空间,当这个字段作为索引时,每个索引记录需要一个额外
阅读全文
Mybatis批量插入问题&MySQL参数max_allowed_packet
摘要:1、背景: 在做业务系统时,经常会碰到主子表模型,子表的数据量比较大,如果采用for循环进行insert操作,效率会很慢,MyBatis提供一个批量操作功能foreach,批量插入操作效率会大大提高。 <insert id="insertBatch" parameterType="java.util
阅读全文