自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

努力奔跑

没有伞的孩子必须努力奔跑

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

原创 kafka原理解读

kafka核心原理

2022-09-02 17:47:25 1832 1

原创 java对象加载过程

当JVM遇到一条new指令时,1、检验是否被加载过首先先去检查这个指令参数能否在常量池中定位到符号引用,并检验这个引用是否被类加载过(详细类加载过程我会在后边单独发博客讲解),如果这个类没有没被加载过那么执行加载过程。类加载过程完毕以后,2、分内存对象在堆内存中的布局分为三部分:1、对象头;2、实例数据;3、对齐填充,根据这三部分可以确定一个对象所需要的内存。分配内存有两种机制1、采用CAS配上失败重试保证更新操作的原子性;2、采用本地线程分配缓冲(TLAB)内存大小在类加载阶段已经被确定好

2022-05-13 21:03:47 637

原创 62进制加法

62进制加法

2022-05-13 17:25:47 337

原创 如何做好代码优化

尽量重用对象,不要循环创建对象,比如for循环拼接字符串;容器初始化若能提前预知长度则指明长度;遍历map时候使用Entry遍历Mapfor(Map.Entry<String,String> entry : map.entrySet){ String key=entry.getKey(); String value=entry.getValue();}尽量使用基本...

2019-10-03 15:54:44 320

原创 GC调优步骤

GC调优步骤打印GC日志根据日志得到关键性能指标分析GC原因,调优JVM参数ParallelGC调优关注点:吞吐量、最大停顿时间、最小停顿时间、平均停顿时间、YGC发生次数、FullGC发生次数。设置Metaspace大小-XX:MetaspaceSize=64M-XX:MaxMetaspaceSize=64M添加吞吐量和停顿时间参数-XX:GCTimeRatio=...

2019-10-03 15:07:04 457

原创 阿里的面试官喜欢问哪些问题?(附详细解答)

@top一、开场白简单的介绍一下自己的工作经历与职责,在校或者工作中主要的工作内容,主要负责的内容;(你的信息一清二白的写在简历上,这个主要为了缓解面试者的压力)介绍下自己最满意的,有技术亮点的项目或平台,重点介绍下自己负责那部分的技术细节;(主要考察应聘者对自己做过的事情是否有清晰的描述,判断做的事情的复杂度)二、Java多线程相关线程池的原理,为什么要创建线程池?创建线程池的方式;...

2019-08-11 23:17:30 16488

原创 设计模式——开闭原则

开闭原则:对扩展开放,对修改关闭。具体实现:为系统定义一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层中完成。在很多面向对象编程语言中都提供了接口、抽象类等机制,可以通过它们定义系统的抽象层,再通过具体类来进行扩展。如果需要修改系统的行为,无须对抽象层进行任何改动,只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩展系统的功能,达到开闭原则的要求。JAVA例子...

2019-08-09 14:23:07 10293

原创 设计模式——代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。这里使用到编程中的一个思想:不要随意去修改别...

2019-08-09 14:18:00 10093

原创 设计模式——高耦合低内聚

内聚:每个模块尽可能独立完成自己的功能,不依赖于外部模块的代码。耦合:模块与模块之间接口的复杂程度。通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。高内聚:尽可能让类的每个成员方法只完成一件事,实现最大限度的聚合。低耦合:减少类内部对其他类的调用,同时减少模块之间的交互复杂度。参考 https://blog.csdn.net/kingscoming/article/deta...

2019-08-09 11:50:34 10430

原创 代码层架构设计需要注意的问题

1.划清业务边界如果对未来的架构有微服务的考虑,那么在单体架构的时候就需要理清业务边界的问题,常见的简单划分就是以业务区分,例如:用户,商品,订单,支付,权限等等,具体的拆分程度可根据自身业务量和需要做划分。当前流行的 DDD(领域驱动设计)可以作为一个指导原则,但是 DDD 比较偏向于理论,需要执行人员有良好的专业能力才能实施的比较好。代码的层次结构业务区分好之后,就是项目代码模块的设计...

2019-08-07 15:47:41 12113

原创 适配器模式

定义适配器模式把一个类的接口变换成客户端所期待的另外一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作。使用场景1. 系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。  2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。  3. 需要一个统一的输出接口,而输入端的类型不可预知。类图举个...

2019-08-06 11:59:00 11519

原创 REST和RPC

REST代表表现层状态转移(representational state transfer)。REST用来描述客户端通过某种形式获取服务器的数据,这些数据资源的格式通常是JSON或XML。同时,这些资源的表现或资源的集合是可以修改的,伴随着行为和关系可以通过多媒体来发现。在我看来,一种简单的理解就是:在设计API时,使用路径定位资源,方法定义操作,通过Content-Type和Accept来协商资...

2019-08-05 16:04:06 13485

原创 多进程和多线程区别

2019-08-02 17:32:44 15321

原创 Dubbo IO 模型

IO 线程池是处理 I/O 请求的 ( 服务端和消费端需要建立连接 ),比如说,业务处理流程很迅速,这时来一个新的请求。这时并不会去创建新的 IO线程,会复用这个线程,如果是业务处理流程慢,来一个新的请求,会新建一个 I/O 线程。业务线程池是处理业务逻辑的,来一个请求后,新起了一个线程去处理业务逻辑。...

2019-07-29 16:36:27 19649

原创 Dubbo服务注册与发现

Dubbo服务发现Dubbo默认是Zookeeper注册服务中心。Dubbo通过ZookeeperRegistry类来注册和订阅服务,通过zookeeper事件监听服务变更,一旦服务变更,消费端收到通知,然后主动去zookeeper拉取该服务的提供者子目录,这些提供者子目录记录了注册该服务的URL信息。RegistryDirectory类封装服务提供者,映射成RegistryDirecto...

2019-07-29 16:16:38 20135

转载 操作系统内存管理——分区、页式、段式管理

https://blog.csdn.net/hguisu/article/details/5713164

2019-07-26 20:29:31 20020

原创 activemq、rabbitmq、kafka原理和比较

一、activemq     虽然是java写的消息队列,但是提供Java, C, C++, C#, Ruby, Perl, Python, PHP各种客户端,所以语言上是没什么问题的。配置和使用,基本上是java xml这一套。同时对jms、spring之类的支持很友好。而且因为是Java写的,所以可以作为一个jar包,放到java项目里,用...

2019-07-26 19:50:07 20180

原创 Dubbo入门

一、 什么是DubboDubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方...

2019-07-24 17:13:27 19965

原创 阿里一面

1.看你用过ZMQ和netty,能说一下ZMQ的优势和作用吗2.netty怎么知道数据发送完了?怎么知道从哪里开始发?包头里面都有什么?3.亿万级流量如何优化,说了消息队列,数据库集群balabala,然后说面试官说只能自己想办法优化,-答 加redis集群 , 不行,流量大会压垮redis集群,如何做4.用java原生的如何做亿万级流量如何优化,答 自己实现一个消息队列, 如何实现?ba...

2019-07-23 20:37:09 20066

原创 RedLock分布式锁

获取当前系统时间(毫秒数)。按顺序依次向 N 个 Redis 节点执行获取锁的操作。这个获取操作跟前面基于单 Redis 节点获取锁的过程相同,包含随机字符串 my_random_value,也包含过期时间(比如 PX 30000,即锁的有效时间)。为了保证在某个 Redis 节点不可用的时候算法能够继续运行,这个获取锁的操作还有一个超时时间(Time Out),它要远小于锁的有效时间(几十毫...

2019-07-21 18:36:47 20258

原创 linux基础命令入门到精通

linux主要特征:一切且文件(目录、硬盘等都是文件);硬件都在/dev 目录,如硬盘、U盘为/dev/sd[a-d]; /dev/sr0(/dev/cdrom)是光驱的设备名(df命令查看),为设备文件,代表的是光驱本身,得把这个设备挂载到目录下(一般为/mnt)(文件系统的临时挂载点),才能对设备上的文件进行读写等操作;不懂的命令:man 命令(查用法、全称),只记得关键词,可用man -k...

2019-07-20 15:20:57 20238

原创 Linux IO模式及select、poll、epoll

select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内...

2019-07-19 16:56:06 20092

原创 简单工厂模式、工厂模式、抽象工厂模式

简单工厂模式简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码逻辑将会非常复杂。...

2019-06-14 23:37:38 20859

原创 软链接和硬链接到底有啥作用和区别

https://blog.csdn.net/gao_zhennan/article/details/79127232

2019-06-14 10:21:58 20717

转载 【高性能服务器】Nginx剖析

https://www.cnblogs.com/AlwaysFixBug/p/4811838.html

2019-06-13 17:35:52 20041

原创 leetcode 5-最长回文子串(中心扩展算法)

题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:示例1输入: “babad” 输出: “bab” 注意: “aba” 也是一个有效答案。 示例 2:示例2输入: “cbbd” 输出: “bb”题解我们观察到回文中心的两侧互为镜像。因此,回文可以从它的中心展开,并且只有 2n - 1 个这样的中心。解释1:你可能会问,...

2019-06-13 15:45:18 20862

转载 一致性协议之 ZAB

https://www.cnblogs.com/stateis0/p/9062133.html

2019-06-09 21:22:57 19945

原创 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?

首先,比如 RabbitMQ、RocketMQ、Kafka,都有可能会出现消息重复消费的问题,正常。因为这问题通常不是 MQ 自己保证的,是由我们开发来保证的。挑一个 Kafka 来举个例子,说说怎么重复消费吧。Kafka 实际上有个 offset 的概念,就是每个消息写进去,都有一个 offset,代表消息的序号,然后 consumer 消费了数据之后,每隔一段时间(定时定期),会把自己消费过...

2019-06-09 17:20:56 19949

原创 如何保证消息的顺序性?

问题分析我举个例子,我们以前做过一个 mysql binlog 同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mysql 库原封不动地同步到另一个 mysql 库里面去(mysql -> mysql)。常见的一点在于说比如大数据 team,就需要同步一个 mysql 库过来,对公司的业务系统的数据做各种复杂的操作。你在 mysql 里增删改一条数据,对应出来了增删...

2019-06-09 17:08:37 19775

原创 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

RabbitMQ生产者弄丢了数据生产者将数据发送到 RabbitMQ 的时候,可能数据就在半路给搞丢了,因为网络问题啥的,都有可能。此时可以选择用 RabbitMQ 提供的事务功能,就是生产者发送数据之前开启 RabbitMQ 事务channel.txSelect,然后发送消息,如果消息没有成功被 RabbitMQ 接收到,那么生产者会收到异常报错,此时就可以回滚事务channel.txR...

2019-06-09 09:22:37 19971

原创 如何保证消息队列的高可用?

RabbitMQ 的高可用性RabbitMQ 是比较有代表性的,因为是基于主从(非分布式)做高可用性的,我们就以 RabbitMQ 为例子讲解第一种 MQ 的高可用性怎么实现。RabbitMQ 有三种模式:单机模式、普通集群模式、镜像集群模式。单机模式单机模式,就是 Demo 级别的,一般就是你本地启动了玩玩儿的

2019-06-09 08:41:33 20542

原创 面试编程题

记录面试的编程题二叉查找树的插入和查找一个数二进制有多少个10-n二进制一共有多少个1

2019-06-06 23:37:24 19746

原创 操作系统之进程创建

操作系统基于某种原因决定创建一个新进程时,会按如下步骤操作:为新进程分配一个唯一的进程标识符。此时,主进程表中会添加一个新表项,每个进程一个表项。为进程分配空间。这包括进程映像中的所有元素。因此,操作系统必须知道私有用户地址空间(程序和数据)和用户栈需要多少空间。默认情况下会根据进程的类型分配这些值,也可以在作业创建时基于用户请求设置这些值;最后,必须为进程控制块分配空间。初始化进程控制块...

2019-06-05 21:31:16 32291

原创 JVM 常见面试题基础

基础1.1 JDK、 JRE、JVM 的关系是什么?什么是 JVM ?英文名称 ( Java Virtual Machine ),就是 JAVA 虚拟机, 它只识别 .class 类型文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。什么是 JRE ?英文名称( Java Runtime Environment ),Java 运行时环境。它主要...

2019-06-02 18:08:20 21940 1

原创 JVM 常见面试题进阶

1.1 Java 语言怎么实现跨平台的?我们编写的 Java 源码,编译后会生成一种 .class 文件,称为字节码文件。字节码不能直接运行,必须通过 JVM 翻译成机器码才能运行。JVM 是一个”桥梁“,是一个”中间件“,是实现跨平台的关键。Java 代码首先被编译成字节码文件,再由 JVM 将字节码文件翻译成机器语言,从而达到运行 Java 程序的目的。1.2 JVM 数据运行区,哪些会...

2019-06-02 17:57:56 22342

原创 JVM调优

年轻代大小选择响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度。因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用。年老代大小选择响应时间优先的应用:年老代使用并发收集器,所以其大小需要小心设置,一般要考...

2019-06-01 18:44:42 19784

原创 线程池的实际应用场景

在实际应用中使用java中的线程池,我构建了一个线程数为5个线程池,然后采用分段批量提取的方式每500条为一组数据进行图片信息的提取,然后再把这些通过Threadpool的execute方法交给线程池中的线程进行处理,即充分使用了CPU硬件资源又加快了大数据情况下程序的处理效率。...

2019-05-31 18:19:26 27176 2

原创 TIME_WAIT过多的危害以及解决TIME_AWAIT过多方案

TIME_WAIT过多危害网络情况不好时,如果主动方无TIME_WAIT等待,关闭前个连接后,主动方与被动方又建立起新的TCP连接,这时被动方重传或延时过来的FIN包过来后会直接影响新的TCP连接;同样网络情况不好并且无TIME_WAIT等待,关闭连接后无新连接,当接收到被动方重传或延迟的FIN包后,会给被动方回一个RST包,可能会影响被动方其它的服务连接。过多的话会占用内存,一个TIME...

2019-05-26 11:36:33 46716 5

原创 单例模式优缺点及应用场景

优点:在单例模式中,活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一个实例。这样就防止其它对象对自己的实例化,确保所有的对象都访问一个实例单例模式具有一定的伸缩性,类自己来控制实例化进程,类就在改变实例化进程上有相应的伸缩性。提供了对唯一实例的受控访问。由于在系统内存中只存在一个对象,因此可以节约系统资源,当需要频繁创建和销毁的对象时单例模式无疑可以提高系统的性能。允许可...

2019-05-25 21:47:09 22675 1

原创 什么时候使用IOC和AOP

ioc就是其实就是依赖注入,即用接口编程,在程序中不出现new关键字,而是用接口来命名引用,然后通过某种方式(多数用spring,不过Google guice也是很好的ioc框架)把接口的某个实现类的实例注入到引用里,从而实现与接口具体实现类的松耦合。aop方式就理解起来就简单了,其方式很类似j2ee中的filter,就是在程序正常的业务流中间像切面一样插入很多其他需要执行的代码,比如登陆时候在...

2019-05-25 16:36:07 21163

空空如也

空空如也

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

TA关注的人

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