自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zz_study

just-live

  • 博客(25)
  • 收藏
  • 关注

原创 SpringBoot-1:项目构建

项目环境:java version:1.8.0_151;               springboot:1.5.4;(也可使用更新版本);项目构建:              工具 idea;    1:Spring官网构建进入start.spring.io,填好Group和Artifact,Dependencies选上web,点Generate Project构建。start下载后解压zip...

2018-05-22 15:48:42 165

原创 消息中间件

什么是消息中间件中间件:非底层操作系统软件,非业务应用软件,不是直接给最终用户使用的,不能直接给用户带来价值的软件统称为中间件。消息中间件:关注于数据的发送和接受,利用高效可靠的异步消息传递机制集成分布式系统。什么是JMSJava消息服务(Java Message Service)及JMS,是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信...

2018-05-21 09:18:42 170

转载 Zookeeper基础

什么是ZooKeeperZooKeeper是开源的分布式协调服务,由雅虎创建,是Google Chubby的开源实现。ZooKeeper是一个高性能的分布式数据一致性解决方案,它将那些复杂的容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并提供一系列简单易用的接口给用户使用。它解决分布式数据一致性问题:1.顺序一致性 2.原子性 3.单一视图 4.可靠性 5.实时性应用场景数据的发布...

2018-05-21 09:18:35 159

原创 Redis基础

数据类型字符串(String)二进制安全的,存入和获取的数据相同Value最多可以容纳的数据长度是512M常用操作set name jack //"ok" 设置一个key为name 值为jackget name //"jack" 获取key为name的值getset name rose //"jack" 获取name的值并设置name的值为rosedel name //(integer)1 ...

2018-05-21 09:18:25 133

原创 Redis缓存击穿,穿透,雪崩等问题,及解决方案

缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的...

2018-05-18 15:04:47 13167 2

原创 红黑树学习

黑树本质上是一种二叉查找树,但它在二叉查找树的基础上额外添加了一个标记(颜色),同时具有一定的规则。这些规则使红黑树保证了一种平衡,插入、删除、查找的最坏时间复杂度都为 O(logn)。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。比如在 Java 集合框架中,很多部分(HashMap, TreeMap, TreeSet 等)都有红黑树的应用,这些集合均提供了很好的性能...

2018-05-18 14:52:30 140

转载 java设计模式

开闭原则(1)对于扩展是开放的(Open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。(2)对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或者.E...

2018-05-18 14:52:19 163

转载 StringBuilder和StringBuffer

这两个类的方法基本是完全一样的,他们的实现代码也几乎一样,唯一不同的在于StringBuffer是线程安全的,而StringBuilder不是。下文讨论StringBuilder。基本实现原理与String类似,StringBuilder类也封装了一个字符数组,定义如下:char[] value;与String不同,它不是final的,可以修改。另外,与String不同,字符数组中不一定所有位置都...

2018-05-18 14:51:43 92

原创 java:反射

反射,是在运行时,而非编译时,动态获取类型的信息。比如接口信息、成员信息、方法信息、构造方法信息等,根据这些动态获取到的信息来创建对象、访问/修改成员、调用方法等。慎用反射反射虽然是灵活的,但一般情况下,并不是我们优先建议的,主要原因是:反射更容易出现运行时错误,使用显式的类和接口,编译器能帮我们做类型检查,减少错误,但使用反射,类型是运行时才知道的,编译器无能为力反射的性能要低一些,在访问字段、...

2018-05-18 14:51:40 77

原创 动态代理

动态代理是一种强大的功能,它可以在运行时动态创建一个类,实现一个或多个接口,可以在不修改原有类的基础上动态为通过该类获取的对象添加方法、修改行为,这些特性使得它广泛应用于各种系统程序、框架和库中,比如Spring, Hibernate, MyBatis, Guice等。动态代理是实现面向切面的编程(AOP - Aspect Oriented Programming)的基础,切面的例子有日志、性能监...

2018-05-18 14:51:36 102

原创 java抽象类

抽象类Nov 18, 2017 | Java基础文章目录抽象方法和抽象类为什么要抽象类抽象类和接口原文链接抽象是相对于具体而言的,具体类有直接对应的对象,而抽象类没有,一般而言是比较上层的夫类。比如说,动物是抽象,而狗是具体对象;水果是抽象,苹果是具体对象;图形是抽象,圆是具体对象。抽象方法和抽象类有一个图形类Shape,它有一个方法draw()。Shape其实就是一个抽象概念,它的draw方法并...

2018-05-18 14:51:32 3602

转载 java类加载机制

类加载器ClassLoader就是加载其他类的类,它负责将字节码文件加载到内存,创建Class对象。与之前介绍的反射、注解、和动态代理一样,在大部分的应用编程中,我们不太需要自己实现ClassLoader。不过,理解类加载的机制和过程,有助于我们更好的理解之前介绍的内容,更好的理解Java。在反射一节,我们介绍过Class的静态方法Class.forName,理解类加载器有助于我们更好的理解该方法...

2018-05-18 14:51:28 97

原创 日志表数据量大查询慢问题

问题​ 系统里的操作日志表,主要记录员工发起的各个请求(CRUD),刚建了没几个月,已经上千万条记录了,导致页面查询的时候,大概需要3-5秒的时间,如果加上条件查询,基本5秒多了。这个时间是完全不能接受的,所以打算重新设计一下。日志表的元数据:(id,name,url,param,add_time…)分析现在表每天大概30-50w的数据增长,基本每秒都有十几条的数据插入写多查少,数据库没有做读写分...

2018-05-18 14:50:10 5335

原创 Mysql事务

事务的基本概念事务(Transation):作为一个单独单元的一个或者多个sql语句组成。这个单元中的每一个sql语句都是相互依赖的,而且单元作为一个整体是不可分割的。如果单元中的一个语句不能成功完成,整个单元就会回滚。所有影响到的数据库将返回事务开始以前的状态。因此,只有事务中所有语句都被成功的执行才能说整个事务被成功执行。事务与ACID属性:原子性Atomicity一致性Consistency...

2018-05-18 14:50:05 119

转载 Mysql引擎

Mysql引擎Nov 20, 2017 | Mysql文章目录查看存储引擎常用引擎InnoDb存储引擎MyISAM存储引擎MEMORY存储引擎存储引擎的选择数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多...

2018-05-17 15:29:03 93

原创 Mysql系统优化

操作系统配置优化数据库是基于操作系统的,目前大多数Mysql都是安装在linux系统上,所以对于操作系统的一些参数配置也会影响到Mysql的性能,下面就列出一些常用的系统配置。网络方面的配置,要修改/etc/sysctl.conf文件://增加tcp支持的队列数net.ipv4.tcp_max_syn_backlog=65535//减少断开连接时,资源回收net.ipv4.tcp_max_tw_b...

2018-05-17 15:28:56 273

原创 Mysql表结构优化

选择合适的数据类型数据类型的选择,重点在于合适二字,如何确定选择的数据类型是否合适?1.使用可以存下你的数据的最小的数据类型。2.使用简单的数据类型,int要比varchar类型在Mysql处理上简单。3.尽可能的使用not null定义字段。4.尽量少用text类型,非用不可时最好考虑分表。表的范式化和反范式化范式化:范式化是指数据库设计的规范,目前说到的范式化一般是指第三设计范式,也就是要求数...

2018-05-17 15:28:30 845

原创 Mysql索引优化

如何选择合适的列建立索引1.在where从句,group by从句,order by从句,on从句中出现的列2.索引字段越小越好3.离散度大的列放到联合索引的前面select * from payment where staff_id = 2 and customer_id = 584;由于customer_id的离散度更大,所以应该使用index(customer_id,staff_id),而不...

2018-05-17 15:28:19 119

原创 Mysql相关优化:Mysql语句优化

慢查日志慢查日志用于记录执行时间超过某个设定值的sql,可以记录用时长的sql进行针对性优化。慢查日志默认关闭,需要手动开启。-- 查询慢查日志是否开启show variables like 'slow_query_log';-- 开启日志set global slow_query_log=on;-- 指定慢查日志存放在哪里set global slow_query_log_file = '/Us...

2018-05-17 15:27:35 137

转载 java:线程本地变量ThreadLocal

基本概念线程本地变量是说,每个线程都有同一个变量的独有拷贝,它们访问的虽然是同一个变量,但每个线程都有自己的独立的值,这就是线程本地变量的含义。使用场景DateFormat/SimpleDateFormatThreadLocal是实现线程安全的一种方案,比如对于DateFormat/SimpleDateFormat,日期和时间操作是非线程安全的,实现安全的一种方式是使用锁,另一种方式是每次都创建一...

2018-05-17 15:13:26 412

原创 java:线程池

线程池,顾名思义,就是一个线程的池子,里面有若干线程,它们的目的就是执行提交给线程池的任务,执行完一个任务后不会退出,而是继续等待或执行新任务。线程池主要由两个概念组成,一个是任务队列,另一个是工作者线程,工作者线程主体就是一个循环,循环从队列中接受任务并执行,任务队列保存待执行的任务。线程池的优点是显而易见的:它可以重用线程,避免线程创建的开销在任务过多时,通过排队避免创建过多线程,减少系统资源...

2018-05-17 14:53:06 78

原创 java:多线程

线程与进程线程是一个轻量级的子进程,线程类属于java.lang.包。是利用机器多个cpu的一种方式。例如 一个任务用一个线程需要100毫秒完成,那么可以使用10个线程让时间减少到10毫秒。一个进程可以有多个线程。线程可以执行进程的任何部分。进程的同个部分可以由多个线程执行。进程有自己的地址,由进程创建的线程可以共享进程的地址空间。线程在进程中有自己的堆栈,所有线程共享一个常见的系统资源,如堆内存...

2018-05-17 14:38:24 232

原创 java容器类:LinkedList

ArrayList随机访问效率很高,但插入和删除性能比较低,我们提到了同样实现了List接口的LinkedList,它的特点与ArrayList几乎正好相反,本节我们就来详细介绍LinkedList。实现原理内部组成我们知道,ArrayList内部是数组,元素在内存是连续存放的,但LinkedList不是。LinkedList直译就是链表,确切的说,它的内部实现是双向链表,每个元素在内存都是单独存...

2018-05-17 14:19:00 114

原创 java容器类:ArrayList

基本原理内部组成可以看出,ArrayList的基本用法是比较简单的,它的基本原理也是比较简单的,内部有一个数组elementData,一般会有一些预留的空间,有一个整数size记录实际的元素个数,如下所示:12transient Object[] elementData;private int size;我们暂时可以忽略transient这个关键字。各种public方法内部操作的基本都是这个数组和...

2018-05-17 14:13:44 201

原创 java容器类:HashMap

实现原理内部组成HashMap内部主要有以下几个主要的实例变量:1234transient Node<K,V>[] table;transient int size;int threshold;final float loadFactor;size表示实际键的个数。table是一个Node类型的数组,其中每个元素指向一个单向链表,链表中的每个节点表示一个键值对,Node是一个内部类,它...

2018-05-17 14:08:31 164

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除