自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 java中关于深拷贝的几种方式

Object父类有个clone()的拷贝方法,不过它是protected类型的 ,我们需要重写它并修改为public类型,除此之外,子类还需要实现Cloneable接口来告诉JVM这个类上是可以拷贝的。Java提供了序列化的能力,我们可以先将源对象进行序列化,再反序列化生成拷贝对象。需要注意的是,super.clone()其实是浅拷贝,所以在重写User类的clone()方法时,address对象需要调用address.clone()重新赋值。

2023-05-28 00:03:42 5133

原创 Kafka经典三大问:数据有序丢失重复

的情况下,是有可能存在消息丢失的情况的,因为producer收到leader写入成功的通知就认为推送成功,但实际上leader副本在把消息同步到follower副本的时候失败了,这时候消息就丢失了。例如消费者已经获取到这个数据,并且提交了offset,但后续在对数据进行业务操作的时候挂掉了,导致数据没有成功处理,这时候kafka认为你已经成功获取了,但实际没有,就造成了数据丢失的问题。对于接收到的数据,如果其序号比Borker维护的序号大一(即表示是下一条数据),Broker会接收它,否则将其丢弃。

2023-04-03 17:33:44 1574

原创 策略模式

一、理解策略模式为了更好的理解这个模式,我们再举一个例子,我们出去旅游的时候可能有很多种出行方式,比如说我们可以坐火车、坐高铁、坐飞机等等。不管我们使用哪一种出行方式,最终的目的地都是一样的。也就是选择不同的方式产生的结果都是一样的。有了这个例子,我相信你应该对其思想有了一个基本的认识,下面看一下其正式的概念介绍:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换二、实现策略模式策略模式把对象本身和运算规则区分开来,因此我们整个模式也分为三个部分。环境类(Contex

2020-09-11 21:01:33 349

原创 工厂模式(配合membership-service项目)

原文:https://www.cnblogs.com/deityjian/articles/10908739.html工厂方法模式1.模式描述提供一个用于创建对象的接口(工厂接口),让其实现类(工厂实现类)决定实例化哪一个类(产品类),并且由该实现类创建对应类的实例。2.模式作用可以一定程度上解耦,消费者和产品实现类隔离开,只依赖产品接口(抽象产品),产品实现类如何改动与消费者完全无关。可以一定程度增加扩展性,若增加一个产品实现,只需要实现产品接口,修改工厂创建产品的方法,消费者可以

2020-09-04 17:52:35 309

原创 Dubbo支持的协议,8种通信协议之对比

哪些协议是无状态协议哪些是有状态的,怎么区别?举个例子我和朋友出去吃饭 不需要每次报上姓名 联系方式 等 朋友就知道我是谁 这是有状态的而我去办事大厅 工作人员不会记得我是谁 每次去都要填表 出示身份证 这就是无状态的无状态协议:在下一次链接不记住这一次链接的信息。HTTP,UDP都是无状态协议TCP,FTP是有状态协议无状态服务器是指一种把每个请求作为与之前任何请求都无关的独立的事务的服务器<<tcp/ip协议族>>(第二版)第546页有这样...

2020-08-05 17:25:15 1782

原创 一次完整的http请求过程

Http目前协议版本是1.1,HTTP是一种无状态的协议,无状态是指Web浏览器与Web服务器之间,不需要建立持久的链接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),链接就被关闭了,在服务器端不保留链接的有关信息。1.建立TCP链接在HTTP工作前,首先浏览器与服务器建立链接,该链接是通过TCP完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议方案。一般TCP连接端口号是80。打开浏览器,地址栏输入blog.csdn.net,开始

2020-08-05 17:00:14 330

原创 关于List的remove()方法

最近遇到一个小问题,我将其简化为下列代码,List的remove()方法在下列颜色注重的代码执行的源码也是不同的~List<Integer> list=new ArrayList<>(); list.add(11); list.add(12); list.add(13); list.add(14); list.add(15); list.add(16);

2020-07-28 18:16:54 887

原创 explain执行计划简析

type访问类型,sql查询优化中一个很重要的指标,结果值从好到坏依次是:system>const>eq_ref>ref> fulltext > ref_or_null > index_merge > unique_subquery > index_subquery >range>index>ALL一般来说,好的sql查询至少达到range级别,最好能达到ref1、system:表只有一行记录(等于系统...

2020-05-21 10:31:14 168

原创 SpringBoot+SpringCloud面试题整理

一.什么是SpringBoot?1、用来简化spring初始搭建和开发过程使用特定的方式进行配置(properties或者yml文件)2、创建独立的spring引用程序:main方法运行3、嵌入Tomcat无需部署war包,直接打成jar包:nohup java -jar aa.jar& 启动就好4、简化了maven的配置4、自动配置:spring添加对应的starter自动化配置二.SpringBoot常用的starter:1、spring-boot-starter-web(嵌

2020-05-17 17:37:10 2388

原创 Spring干货汇总(含Spring Boot与Spring Cloud)

https://mp.weixin.qq.com/s?__biz=MzAxODcyNjEzNQ==&mid=2247484574&idx=1&sn=0984db0da3dc0efda956fa0aaeabe479&chksm=9bd0a906aca7201028da742819b4f5b78c8c4768bd88237ffd54c5c818afec0f7af47b1...

2020-04-29 17:46:06 118

原创 对比synchronized与java.util.concurrent.locks.Lock 的异同

1.Lock能完成几乎所有synchronized的功能,并有一些后者不具备的功能,如锁投票、定时锁等候、可中断锁等候等 2.synchronized 是Java 语言层面的,是内置的关键字;Lock 则是JDK 5中出现的一个包,在使用时,synchronized 同步的代码块可以由JVM自动释放;Lock 需要程序员在finally块中手工释放,如果不释放,可能会引起难以预料的后果(在...

2020-04-28 18:48:40 394

原创 Redis的那些最常见面试问题

 1.什么是redis?   Redis 是一个基于内存的高性能key-value数据库。  2.Reids的特点     Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知...

2020-04-25 18:21:07 242

原创 Java四种线程池的使用

Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。newS...

2020-04-25 18:15:58 203

原创 数据事务四种隔离机制和七种传播行为

一、隔离级别:数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。1.ISOLATION_READ_UNCOMMITTED:这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。 这种隔离...

2020-04-25 18:10:33 761 1

原创 高手详解SQL性能优化十条经验

1.查询的模糊匹配尽量避免在一个复杂查询里面使用 LIKE '%parm1%'—— 红色标识位置的百分号会导致相关列的索引无法使用,***不要用.解决办法:其实只需要对该脚本略做改进,查询速度便会提高近百倍。改进方法如下:a、修改前台程序——把查询条件的供应商名称一栏由原来的文本输入改为下拉列表,用户模糊输入供应商名称时,直接在前台就帮忙定位到具体的供应商,这样在调用后台程序时,这...

2020-04-25 18:09:12 151

原创 线程池底层核心接口简析

ThreadPoolExcecutor构造方法参数1.继承关系Executor ↑ExecutorService ↑AbstractExecutorService ↑ThreadPoolExecutorpublic ThreadPoolExecutor(int corePoolSize,int maxN...

2020-04-18 20:53:32 211

原创 Zookeeper简析

一.Zookeeper是一个分布式协调服务,Zookeeper本身就是分布式程序,他同时为别的分布式程序服务的。二.zk集群机制:半数机制:集群中半数以上的机器存活,集群可用。Zookeeper适合装在奇数台机器上。三.zk特性:1.zk是一个leader,多个follower组成集群。2.全局数据一致,每个server保存一份相同的数据副本,clent无论连接到哪个server,...

2020-04-18 20:35:48 151

原创 IO流

2020-04-18 19:51:30 130

原创 Dubbo解析及原理

1.Dubbo是一种分布式服务框架(WebService不是分布式),dubbo除了可以提供服务之外,还可以实现软负载均衡。的还提供了两个功能,Monitor监控中心和调用中心,这两个是可选的,需要单独配置2.服务提供者先启动start,然后注册register服务,消费者订阅服务,如果没有订阅到自己想获得的服务,他不断的尝试订阅,新的服务注册到注册中心后,注册中心会将这些服务通过noti...

2020-04-18 18:28:00 208

原创 volatile关键字

1.volatile本质是告诉jvm当前工作内存中的值,是不确定的,需要从主存中取,synchronized是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞。2.volatile仅能使用在变量级别,synchronized则可以使用在变量、方法和类级别。3.volatile仅能实现变量级别的修改可见性,不能保证原子性;(即单例双重锁写的时候,一个线程创建了这个单例对象,其他线程就...

2020-04-18 16:36:11 161

原创 ThreadLocal的用法

ThreadLocal实现线程范围内的共享变量,当多线程过沉重,容易出现共享数据被别的线程操作,导致脏数据发生,ThreadLocal本质上讲是提供了一个“线程级”变量作用域private static ThreadLocal<Integer> threadLocal = new ThreadLocal<>();存:threadLocal.set(data);取...

2020-04-18 16:27:04 922

原创 redis存储机制

一.Redis存储机制分为:1.shupshot(定时快照方式),文件名为dump.rdb,你可以配置redis的持久化策略,例如每N秒钟有超过M次更新,就将数据写入磁盘,或者可以手动调用SAVE。2.AOF:基于语句追加log文件的方式两者比较:快照方式性能明显高于AOF方式,但AOF数据的安全性高于快照方式,快照方式时,如果长时间不写入RDB,但Redis又遇到崩溃,那么没有写入的...

2020-04-18 16:02:54 1232

原创 事务四种隔离级别

1.读取未提交:一个事务可以读取另一个未提交的事务的数据。——脏读2.读取已提交:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据做了更新并提交,导致事务A多次读取同一数据时,结果不一致。——不可重复度(对应update操作);3.可重复读:开始读取数据时(事务开启时),不在允许修改操作。(可能会插入或删除数据)示例:系统管理员A将数据库中所有学生成绩从具体分数改为ABC...

2020-04-18 15:18:44 166

原创 GC垃圾回收原理

GC垃圾回收原理2.1如何判断对象是垃圾 ?有二种经典的判断方法,借用网友的图(文中最后有给出链接):引用计数法,思路很简单,但是如果出现循环引用,即:A引用B,B又引用A,这种情况下就不好办了,所以JVM中使用了另一种称为“可达性分析”的判断方法:还是刚才的循环引用问题(也是某些公司面试官可能会问到的问题),如果A引用B,B又引用A,这2个对象是否能被GC回收?答案...

2020-04-17 18:21:49 511

原创 DUBBO 直连提供者四种方式

1 通过 XML 配置如果是线上需求需要点对点,可在<dubbo:reference>中配置 url 指向提供者,将绕过注册中心,多个地址用分号隔开,配置如下<dubbo:reference id="xxxService" interface="com.alibaba.xxx.XxxService" url="dubbo://localhost:20890" /&g...

2019-12-09 16:34:01 1697

原创 MySQL之 explain执行计划详解

在工作中,我们用于捕捉性能问题最常用的就是打开慢查询,定位执行效率差的SQL,那么当我们定位到一个SQL以后还不算完事,我们还需要知道该SQL的执行计划,比如是全表扫描,还是索引扫描,这些都需要通过EXPLAIN去完成。EXPLAIN命令是查看优化器如何决定执行查询的主要方法。可以帮助我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时...

2019-02-21 18:15:46 119

原创 spring Bean注入方式

Bean注入的方式有两种,一种是在XML中配置,此时分别有属性注入、构造函数注入和工厂方法注入;另一种则是使用注解的方式注入 @Autowired,@Resource,@Required。2.1 在xml文件中配置依赖注入2.1.1 属性注入属性注入即通过setXxx()方法注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入是实际应用中最常采用的...

2019-02-21 16:07:18 631

原创 JVM 新生代为何需要两个 Survivor 空间?

我们知道,目前主流的虚拟机实现都采用了分代收集的思想,把整个堆区划分为新生代和老年代;新生代又被划分成 Eden 空间、 From Survivor 和 To Survivor 三块区域。 看书的时候有个疑问,为什么非得是两个 Survivor 空间呢?要回答这个问题,其实等价于:为什么不是0个或1个 Survivor 空间?为什么2个 Survivor 空间可以达到要求?  如果没有S...

2019-02-15 18:27:48 227

原创 jvm的GC日志分析

JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)-XX:+PrintH...

2019-02-15 16:40:00 97

原创 Java的三种代理模式(AOP就是利用了代理模式)

代理模式是什么代理模式是一种设计模式,简单说即是在不改变源码的情况下,实现对目标对象的功能扩展。比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing()。1 public class Singer{2 public void sing(){3 System.out.println("唱一首歌");4 } 5 }假如你希望,通过...

2019-02-14 15:30:22 454

原创 JDK1.8中HashMap实现

JDK1.8中的HashMap实现跟JDK1.7中的实现有很大差别。下面分析JDK1.8中的实现,主要看put和get方法。构造方法的时候并没有初始化,而是在第一次put的时候初始化putVal方法的主要逻辑是这样的:1、如果数组还没有初始化(数组长度是0),则先初始化2、通过hash方法计算key的hash值,进而计算得到应该放置到数组的位置3、如果该位置...

2019-01-25 17:54:47 214

原创 前端常见跨域解决方案

什么是跨域?跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。广义的跨域:1.) 资源跳转: A链接、重定向、表单提交2.) 资源嵌入: &lt;link&gt;、&lt;script&gt;、&lt;img&gt;、&lt;frame&gt;等dom标签,还有样式中background:url()、@font-face()等文件外链3.) 脚本请求: j...

2019-01-11 15:29:00 125

原创 spring容器初始化bean的过程中的时间周期

知识点介绍1、 init-method方法,初始化bean的时候执行,可以针对某个具体的bean进行配置。init-method需要在 applicationContext.xml配置文档中bean的定义里头写明。例如:&lt;bean id="TestBean" class="nju.software.xkxt.util.TestBean" init-method="init"&gt;&lt...

2018-10-18 16:58:01 2097

原创 @Autowired和@Resource的区别

用途:做bean的注入时使用历史:@Autowired        属于Spring的注解                org.springframework.beans.factory.annotation.Autowired   @Resource   不属于Spring的注解,JDK1.6支持的注解    javax.annotation.Resource共同点:  装配bean. 写在...

2018-06-07 15:09:36 120

原创 Xshell常用口令

重启命令:./startup.sh杀死命令:kill -9查看哪些java程序在运行:ps -ef|grep java查看8080端口的都有哪些:netstat -apn|grep 8080查看日志口令:tail -f catalina.out启动服务器并观测日志./startup.sh ;tail -f ../logs/...

2017-10-18 14:53:20 827 1

原创 Spring的面向切面编程在redis中应用

要在已经开发好的项目中添加redis缓存1.引入framework-redis包2.编写缓存常量类,其中包含缓存前缀,缓存有效时间3.在springmvc-config.xml中添加配置文件                    4.需要添加缓存的查询方法上加入注解@Cache(key = BidRedisConstants.BIDWEB_BUSINESSS

2017-10-18 14:18:16 496

原创 OOM异常简析

今天虚拟机报出OOM异常,异常代码如下[ERROR] GlobalExceptionHandler - java.lang.OutOfMemoryError: GC overhead limit exceeded - [cn.bidlink.framework.core.exceptions.GlobalExceptionHandler]java.lang.RuntimeException

2017-10-18 11:32:51 442

原创 二叉树遍历

一、基本概念每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。性质:1、非空二叉树的第n层上至多有2^(n-1)个元素。2、深度为h的二叉树至多有2^h-1个结点。满二叉树:所有终端都在同一层次,且非终端结点的度数为2。在满二叉树中若其深度为h,则其所包含的结点数必为2^h-1。完全二叉树:除了最大的层次即成为一颗满

2017-10-17 17:10:37 197

转载 查询在一张表不在另外一张表的记录

参考文献http://www.cnblogs.com/xwdreamer/archive/2012/06/01/2530597.html题目假如要查询在a表中存在,但是在b表中不存在的记录,应该如何查询。为了便于说明,我们假设a表和b表都只有一个字段id,a表中的记录为{1,2,3,4,5},b表中的记录为{2,4},那么我们需要通过一个sql查询得到{1,3,5}这样的结果集

2017-10-17 16:46:52 486

空空如也

空空如也

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

TA关注的人

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