- 博客(223)
- 资源 (21)
- 问答 (1)
- 收藏
- 关注
原创 Elasticsearch详解
当主分片不可用时,会在备份的分片中选举出一个作为主分片,所以备份不仅可以提升系统的高可用性能,还可以提升搜索时的并发性能。**Shards:**分片,当索引上的数据量太大的时候,我们通常会将一个索引上的数据进行水平拆分,拆分出来的每个数据库叫作一个分片。这时虽然集群的查询操作还可以进行,但是也只能返回部分数据(其他正常分片的数据可以返回),而分配到这个分片上的写入请求将会报错,最终会导致数据的丢失。**Node:**节点,组成 Elasticsearch 集群的服务单元,同一个集群内节点的名字不能重复。
2024-02-28 20:27:16 1402 1
原创 责任链模式
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
2023-12-23 11:13:58 708
原创 docker知识总结
docker是什么Docker 是一个开源的应用容器引擎,是一种资源虚拟化技术,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。docker的简单原理是什么基于Linux内核的Cgroup,Namespace,以及UnionFS等技术,对进程进行封装隔离,属 于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其 为容器。容器技术的优势隔离性 每个用户实例之间相互隔离,互不影响**可配额 **cgroups
2022-05-08 16:20:26 716
原创 分布式session详解
Session的作用?Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。客户端在第一次访问服务端的时候,服务端会响应一个sessionId并且将它存入到本地cookie中,在之后的访问会将cookie中的sessionId放入到请求头中去访问服务器,如果通过这个sessionid没有找到对应的数据那么服务器会创建一个新的sessionid并且响应给客户端。为什么需要共享Session在集群或分布式环境下,有多个服务端,所以需要解决共享Session的问题如
2021-10-29 20:37:27 533
原创 Spring的加载过程
Spring简单介绍如果你是使用java作为主要编程语言,那么Spring是一定要了解的,Spring是一个提供ioc(控制反转)的开源框架,他将对象的创建和使用解耦,开发人员无须手动设置对象的依赖关系,把这一工作交给了 Spring 容器去处理和管理,提升了开发体验。Spring IoC说到了 IoC (控制反转),一般来说和 IoC 一同出现的有 DI(Dependency Injection)也就是依赖注入,这两个概念之间有什么关系呢?在 2004 年 Martin Fowler 在探索 IO
2021-08-14 12:58:14 1671
原创 消息中间件详解
消息中间件的主要作用异步 将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度。解耦 生产者系统将消息写入消息队列,消费系统自己从消息队列中获取消息,使得2个系统不再耦合。削峰 有时一个系统的某个接口会有很大的流量,这种会给系统造成很大压力,服务器利用率则会偏高,而利用消息中间件,可以把高峰时的流量冲击放进消息队列中,消费者再慢慢消费。消息队列的缺点系统可用性降低 我们需要维护MQ,MQ也可能挂掉,系统的可用性是不是就降低了系统的复杂度提高 加入一个MQ之后,需要考虑消息重复消
2021-08-02 00:03:11 445
原创 Spring Cloud Eureka详解
Spring Cloud Eureka是什么spring cloud中的服务注册中心eureka。Eureka包含两个组件:Eureka Server和Eureka Client。Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。Eureka Client用于简化与Eureka Server的交互,在应用启动后,将会向Eureka Se
2021-07-25 10:44:29 587 1
原创 微服务简介
什么是微服务1)一组小的服务(大小没有特别的标准,只要同一团队的工程师理解服务的标识一致即可)2)独立的进程(java的tomcat,nodejs等)3)轻量级的通信(不是soap,一般http或者rpc)4)基于业务能力(类似用户服务,商品服务等等)5)独立部署(迭代速度快)6)无集中式管理(无须统一技术栈,可以根据不同的服务或者团队进行灵活选择)微服务的利与弊优点:开发简单技术栈灵活服务独立无依赖独立按需扩展可用性高缺点(挑战):多服务运维难度系统部署依赖服务间通
2021-07-17 22:20:00 457
原创 springboot知识点整合
springboot是什么Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。在我看来springboot最大好处就是简化配置,以前一个SpringMvc项目需要在xml配置各种东西,现在简化了很多配置,提高了开发效率springboot是如何自动配置的一般我的启动类会有**@SpringBootApplication**注解,这是一个组合注解@Tar
2021-07-11 00:07:58 133
原创 mybatis源码学习
什么是mybatisMyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。mybatis的初始化String resource = "mybatis-config.xml"; InputStream inp
2021-07-04 13:59:35 186
原创 cpu100%定位方法
我们服务器上的的服务和项目大部分都是java的,现在来讲讲,这种服务器cpu100%如何定位。先使用top命令找到cpu最高的进程。比如找到cpu最高的进程id,简称top_pid。使用top -Hp top_pid找到cpu最多的线程,这里记住最高的几个线程id,thread_id。现在我们将这些线程id转化成16进制,因为java堆栈里的线程id都是16进制的,转化后方便我们定位printf “%x\n” thread_idjstack top_pid,打印出堆栈,然后用3步骤里
2021-06-06 22:51:28 793 2
原创 nginx详解
什么是nginxnginx是一款免费的、自由的、开源的、高性能HTTP服务器和反向代理服务器,nginx 专为性能优化而开发,性能是其最重要的要求,十分注重效率,能支持高达 50000 个并发连接数。nginx有哪些功能正向代理用户需要手动配置代理服务器,可以配置一个代理服务器反向代理反向代理,“它代理的是服务端”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。负载均衡一个请求过来,nginx可以动态的把这个请求分配给不同的服务器。这种就是负载均衡,避免一个服
2021-05-04 17:34:39 755
原创 缓存常见问题以及解决方法
缓存雪崩如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,就造成了缓存雪崩。如何解决缓存雪崩如果缓存经常在一个时间消失,就要考虑key的过期时间是不是一样的,可以随机一下过期时间,避免缓存过期时间一起失效。取缓存的时候加锁,这样可以保证不会大部分数据请求到缓存,但是限制的并发。我们还是要保证缓存系统没有崩溃,比如你用redis,可以使它高可用,可以使用 主从+哨兵 ,Redis Cluster 来避免 Redis 全盘崩溃的情况。如果你的系统第一次就可能会有很大的流量
2021-05-04 17:13:24 823
原创 lucene学习
什么是luceneLucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎为什么我们要用Lucene?对比数据库1.lucene可以对文件进行检索,这是数据库所不能的2.对文本检索,lucene可以使用索引,检索效率高3.lucene消耗内存少4.lucene可以对搜索结果进行排名,进行高亮显示等。lucene的流程全文检索的流程分为两大部分:索引流程、搜索流程。索引流程:采集数据—>构建文档对象—&g
2020-07-26 16:46:56 198
原创 Java中的AQS
什么是AQSAQS即AbstractQueuedSynchronizer(抽象队列同步器),一个并发包的基础组件,用来实现各种锁,各种同步组件的。它包含了state变量、加锁线程、等待队列等并发中的核心组件。我们常用的比如ReentrantLock,CountDownLatch等等基础类库都是基于AQS实现的。AQS的原理和结构AQS核心思想是,如果被请求的共享资源空闲,那么就将当前请求资源的线程设置为有效的工作线程,将共享资源设置为锁定状态;如果共享资源被占用,就通过一个基于一个双向链..
2020-06-27 19:59:47 3048 1
原创 Java中的CAS
Java中的CASCAS全称 Compare And Swap(比较与交换),是一种无锁算法。在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步,java.util.concurrent包中的原子类就是通过CAS来实现了乐观锁。基本介绍CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(...
2019-10-02 23:16:51 1168
原创 Java中各种锁的介绍
Java中各种锁的介绍前言Java提供了各种各样的锁,每种锁都有适合的使用的场景,我们了解了各种锁的特点后,就能在平时的开发中灵活运用。1.乐观锁和悲观锁悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。Java中synchronized和Reentr...
2019-09-30 19:45:45 443
原创 synchronized深入探究
前言synchronized是Java中解决并发问题的一种常用方法,它主要的作用如下 确保线程互斥的访问代码 保证变量的可见性 解决重排序 基本使用synchronized可以修饰方法、代码块,下面看一个简单的例子public class SynTest {public void lockTest() {...
2019-09-17 22:27:52 153
原创 mysql索引介绍
mysql索引介绍为什么要用索引索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本。索引为什么是(B+/B-)树 查询不仅仅是只查一条,有很多需求会返回多个: 分组:group by 排序:order by 比较:<、> 满足局部性原理: 局部性原理的逻辑是这样的:(1)内存读写块,磁盘读...
2019-03-31 09:29:06 634
原创 Java事务总结
Java事务总结事务的特性事务拥有以下四个特性,习惯上被称为ACID特性: 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态是指数据库中的数据应满足完整性约束。除此之外,一致性还有另外一层语义,就是事务的中...
2019-03-05 22:11:28 579
原创 JVM性能调优
JVM性能调优 合理的分配新老代的空间 由于fullGC(老年代)的成本远比minorGC(新生代和老年代)的成本大,所以给应用分配一个合理的新生代空间,尽量将对象分配到新生代减小fullGC的频率。 将大对象直接分配到老年代,保持新生代对象的结构的完整性,以提高GC效率, 以通过-XX:PretenureSizeThreshold设置进入老年代的阀值。 采用合适的垃圾收集...
2019-03-05 22:10:32 166
原创 jvm垃圾回收知识总结
jvm垃圾回收知识总结1.垃圾对象是如何确定的主要是通过可达性算法分析,即通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的,可作为GC Roots的对象包括下面几种:虚...
2019-03-05 22:05:49 221
原创 redis知识总结
redis总结Redis 是一个基于内存的高性能key-value数据库。一、redis的数据结构字符串哈希,相当于java中的map列表list集合有序的集合二、redis的持久化快照(某一时刻所有数据写到硬盘上)aof(记录每条操作的命令)三、redis和memcache的比较redis是单核而memcache是多核,当数据量比较大的时候memcache的性能会比redis高memcache只...
2018-03-23 23:19:18 276
原创 一些java笔试面试题
前段时间找工作在笔试和面试中总结了一些题目分享给大家。基础篇String、StringBuilder、StringBuffer的区别当一个线程启动后,再次启动会发生什么ArrayList是怎么扩容的单例有什么缺点数据库乐观锁的实现ajax的get和post的区别框架篇SpringMVC的执行流程Spring有哪几种注入方式Spring的AOP有哪些使用场景Hibernatre
2017-04-09 18:02:31 490
原创 Lock与synchronized 的比较学习
一些比较Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;Lock可以让等待锁的线程响应中断,而synchro
2017-02-08 14:23:55 450
原创 Java线程池ThreadPoolExecutor
为什么使用线程池如果每次使用线程都创建,每次创建和销毁的开销会很大,线程池主要用来解决线程生命周期开销问题和资源不足问题,也消除了线程创建所带来的延迟。线程池分析先看下构造函数,其他构造函数都是调用此构造函数public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
2016-08-19 10:00:14 521
原创 JAVA7特性学习
泛型实例创建的类型推断//后面的括号内可以不用加上具体泛型List<String> list = new ArrayList<>();同时捕获多个异常try { createException();} catch (ClassNotFoundException | IOException e) { // TODO: handle exception}使用下划线对数字进行分隔表达
2016-08-06 20:32:13 1149
原创 Java线程间数据传递
线程共享数据Java中共享数据,可以使用一个共享对象,或者使用一个阻塞队列。接下来看一个日志的例子。其中主线程可以记录日志,而另外开启了一个线程进行日志的输出public class LogService { private final BlockingQueue<String> queue; private final LoggerThread logger; //关闭标记
2016-08-03 21:56:22 6293
原创 Java归并排序
归并排序就是将2个有序的序列合并起来,其时间复杂度为O(nlgn),而且它是一种稳定的排序,它的缺点是需要额外n的空间来辅助排序。接下来看其Java实现public class MergeSort { public static void main(String[] args) { Integer[] arr = {1, 6, 9, 3, 2, 11, 15, 4};
2016-07-31 10:32:52 533
原创 阻塞队列之ArrayBlockingQueue
阻塞队列 当使用阻塞队列的时候,它可能会对当前线程产生阻塞,,比如一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。当队列中有元素后,被阻塞的线程会自动被唤醒。部分实现ArrayBlockingQueue是使用数组作为底层存储的。 /** 数组存储 */ private final E[] items; /** 队尾下标 */ pr
2016-07-24 23:26:39 4457
原创 ArrayDeque源码解析
ArrayDeque是一个双端队列,它是线程不安全的,不能插入null元素,当使用栈时比Stack要快,当使用队列时比LinkedList要快。先初始化一个一定大小的数组,大小是2的n次方,接下来看下添加的源码。public void addFirst(E e) { if (e == null) throw new NullPointerException(
2016-07-02 21:39:55 546
原创 ThreadLocal源码解析
这个类提供了线程变量,这不同于其他的变量,它能在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的。使用示例:public static void main(String[] args) { ThreadLocal<String> str = new Thread
2016-06-30 21:35:37 385
原创 使用Spring AOP和Cookie做网站免登陆
在我们平时浏览网站的时候,会发现很多网站,在你登陆一次后,下次登陆就不需要重新登陆了。其原理就是登陆的时候将,用户名和密码用Cookie存储起来,每次访问的时候先从Cookie中取出并登陆。function SetCookie(name, value) { var today = new Date(); var expires = new Date();
2016-06-25 19:20:49 2571
原创 Java注解学习
元注解首先Java提供了4个元注解来定义其他注解@Target用来定义注解将应用于什么地方(如一个方法或者一个域)@Retention用来定义注解在哪一个级别可用,在源代码中(source),类文件中(class)或者运行时(runtime)@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。@Inheri
2016-06-22 11:12:47 661
原创 解析Java的四种引用
强引用强引用就是类似Object obj = new Object();之类的,只要有强引用存在,垃圾收集器就不会回收引用对象。软引用被软引用引用的对象,当系统将要内存不足时,被软引用引用的对象就将被回收,JDK提供了SoftReference类来实现软引用。软引用对象最常用于实现内存敏感的缓存。 一个代码例子:import java.lang.ref.SoftReference;public
2016-06-20 13:27:40 438 1
原创 Spring Boot入门例子
首先使用Maven导入必要的jar<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org
2016-06-10 00:36:28 5998 1
原创 Spring源码解析之DefaultListableBeanFactory
DefaultListableBeanFactory是bean加载的核心部分,是Spring注册及加载的默认实现。它的层次关系如下图 BeanFactory它是Spring中Bean容器的顶级接口。里面有获取bean,判断是否包含bean,是否单例,获取别名等基本方法ListableBeanFactory根据条件获取Bean的配置清单。 如String[] getBeanDefinitionNa
2016-06-06 23:30:00 2787 1
原创 uploadify在ie和火狐报406错误
在使用uploadify上传时,用chrome是正常的,使用ie和火狐就报406错误。项目使用springmvc,上传返回使用@ResponseBody将@ResponseBody注解去掉。使用response返回,解决问题response.setContentType("application/json; charset=UTF-8");response.getWri
2016-06-06 20:09:58 1757
原创 Java运行时数据区讲解
组成部分程序计数器因为Java虚拟机的多线程是通过线程轮流切换并分配处理器时间来执行的,所以每条线程都需要一个程序计数器,来知道一个线程执行到了什么地方。本地方法栈这是为JVM运行Native方法准备的空间。Java栈每个方法在执行的同时都会创建一个栈帧,用户存储局部变量表,操作数栈,动态链接,方法出口等,局部变量存储了8种基本类型,和对象的引用。Java栈是线程私有的,我们不用关心它的数据一致性问
2016-05-28 23:06:51 384
初学者怎么入门架构师
2016-05-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人