![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java高级开发
小雁子学Python
专注Python爬虫、数据分析、游戏开发技术知识分享
展开
-
60秒一口Python:147个demo,助你从新手小白步步进阶编程高手
人生苦短,编程苦手,不妨学起Python,感受一飞冲天的快乐。不要害怕学习的过程枯燥无味,这里有程序员jackzhenguo打造的一份中文Python“糖果包”:147个代码小样,60秒一口,营养又好玩,从Python基础到机器学习尽皆囊括。入门简单如十进制转二进制,尽显Python简洁之美:In[1]:bin(10)Out[1]:'0b1010'冬天到了,就算没有点亮手绘技能,也能用...原创 2020-01-04 20:40:38 · 121 阅读 · 0 评论 -
深入剖析JVM之G1收集器、及回收流程、与推荐用例
JVM垃圾收集器发展历程第一阶段,Serial(串行)收集器在jdk1.3.1之前,java虚拟机仅仅能使用Serial收集器。 Serial收集器是一个单线程的收集器,但它的“单线程”的意义并不仅仅是说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。第二阶段,Parallel(并行)收集器Parallel...原创 2019-12-25 15:32:19 · 957 阅读 · 0 评论 -
JVM性能调优的6大步骤,及关键调优参数详解
JVM内存调优对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。1.Full GC会对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个堆进行回收,所以比较慢,因此应该尽可能减少Full GC的次数。2.导致Full GC的原因1)年老代(Tenured)被写满调优时尽量让对象在新生代GC时被回收、让对象在新生代多存活一段...原创 2019-12-14 16:24:49 · 905 阅读 · 0 评论 -
7种JVM垃圾收集器特点,优劣势、及使用场景
常见的垃圾收集器有3类:1.新生代的收集器包括:SerialPraNewParallel Scavenge2.老年代的收集器包括:Serial OldParallel OldCMS3.回收整个Java堆(新生代和老年代)G1收集器今天我们详细谈谈以上7种垃圾收集器的优劣势和使用场景。新生代垃圾收集器1.Serial串行收集器-复制算法...原创 2019-12-14 16:19:03 · 875 阅读 · 0 评论 -
JVM的4种垃圾回收算法、垃圾回收机制与总结
垃圾回收算法1.标记清除标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。在标记阶段首先通过根节点(GC Roots),标记所有从根节点开始的对象,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。适用场合:存活对象较多的情况下比较高效适用于年老代(即旧生代)缺点:容易产生内存碎片,再来一个比较大的对象时(典型情况:该对象的大小大于...原创 2019-12-14 16:15:00 · 1019 阅读 · 0 评论 -
深入详解JVM内存模型与JVM参数详细配置
BAT必考JVM系列专题JVM内存结构由上图可以清楚的看到JVM的内存空间分为3大部分:堆内存方法区栈内存其中栈内存可以再细分为java虚拟机栈和本地方法栈,堆内存可以划分为新生代和老年代,新生代中还可以再次划分为Eden区、From Survivor区和To Survivor区。其中一部分是线程共享的,包括 Java 堆和方法区;另一部分是线程私有的,包括虚拟机栈和本地...原创 2019-12-12 20:23:38 · 950 阅读 · 0 评论 -
Java必考题目之JVM面试题目和答案
JVM内存模型首先我们来了解一下JVM的内存模型的怎么样的:1.堆:存放对象实例,几乎所有的对象实例都在这里分配内存堆得内存由-Xms指定,默认是物理内存的1/64;最大的内存由-Xmx指定,默认是物理内存的1/4。默认空余的堆内存小于40%时,就会增大,直到-Xmx设置的内存。具体的比例可以由-XX:MinHeapFreeRatio指定空余的内存大于70%时,就会减少内存,直到-...原创 2019-12-12 20:20:55 · 882 阅读 · 0 评论 -
分布式消息Kafka的原理、基础架构、使用场景
一:Kafka简介Apache Kafka是分布式发布-订阅消息系统,在 kafka官网上对 kafka 的定义:一个分布式发布-订阅消息传递系统。 它最初由LinkedIn公司开发,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。二:Kafka基本架构它的架构包括以下组件:1...原创 2019-12-12 20:18:32 · 997 阅读 · 0 评论 -
Spring Cloud的核心成员、以及架构实现详细介绍
什么是微服务微服务的概念源于Martin Fowler所写的一篇文章“Microservices”。微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTfulAPI)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、...原创 2019-12-11 22:47:45 · 893 阅读 · 0 评论 -
Dubbo面试28题答案详解:核心功能 服务治理 架构设计等
1.Dubbo是什么?Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案, 可以和 Spring 框架无缝集成。RPC 指的是远程调用协议,也就是说两个服务器交互数据。2.Dubbo的由来?互联网的快速发展,Web应用程序的规模不断扩大,一般会经历如下四个发展阶段。单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署...原创 2019-12-11 22:43:26 · 897 阅读 · 0 评论 -
如何从0到1设计一个类Dubbo的RPC框架
RPC和RPC框架1.RPC(Remote Procedure Call)即远程过程调用, 主要解决远程通信间的问题,不需要了解底层网络的通信机制。2.RPC框架RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式、以及通信细节。实际使用中,并不需要关心底层通信细节和调用过程,让业务端专注于业务代码的实现。国内大家熟知的PRC框架,阿里的HSF和Dubbo(开源)Dub...原创 2019-12-11 22:40:47 · 849 阅读 · 0 评论 -
Spring Cloud简介,微服务架构,以及与Dubbo的详细比较
什么是Spring CloudSpring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量。为什么需要Spring CloudSpring Cloud 是整个 Spring 家族中新的成员,要致力于分布式系统、云服务的框架。Spring Cloud 为开发人...原创 2019-12-10 16:52:37 · 1515 阅读 · 0 评论 -
Dubbo的详细介绍、设计思路、以及4大适用场景
Dubbo是什么?Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式...原创 2019-12-09 21:11:30 · 966 阅读 · 0 评论 -
详解RocketMQ的架构设计、关键特性、与应用场景
内容大纲:RocketMQ的简介与演进RocketMQ的架构设计RocketMQ的关键特性RocketMQ的应用场景RocketMQ的简介RocketMQ一个纯java、分布式、队列模型的开源消息中间件,前身是MetaQ,是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点。RocketM...原创 2019-12-09 21:05:23 · 1276 阅读 · 0 评论 -
如何从零到一设计一个MQ消息队列
消息队列整体设计思路主要是设计一个整体的消息被消费的数据流。这里会涉及到:消息生产Producer、Broker(消息服务端)、消息消费者Consumer。1.Producer(消息生产者):发送消息到Broker。2.Broker(服务端):Broker这个概念主要来自于Apache的ActiveMQ,特指消息队列的服务端。主要功能就是:把消息从发送端传送到接收端,这里会涉及到消息的...原创 2019-12-09 15:49:13 · 909 阅读 · 0 评论 -
详解RPC远程调用和消息队列MQ的区别
什么是RPCRPC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制。RPC服务框架有哪些知名度较高的有Thrift(FB的)、dubbo(阿里的)RPC的一般需要经历4个步骤:1、建立通信首先要解决通讯的问题:即A机器想要调用B机器,首先得建立起通信连接,主要是通过在客户端和服务器之间建立TCP连接。2、服务寻...原创 2019-12-06 16:20:03 · 971 阅读 · 0 评论 -
什么是流量削峰?如何解决秒杀业务的削峰场景
流量削峰的由来 主要是还是来自于互联网的业务场景,例如,马上即将开始的春节火车票抢购,大量的用户需要同一时间去抢购;以及大家熟知的阿里双11秒杀,短时间上亿的用户涌入,瞬间流量巨大(高并发),比如:200万人准备在凌晨12:00准备抢购一件商品,但是商品的数量缺是有限的100-500件左右。这样真实能购买到该件商品的用户也只有几百人左右, 但是从业务上来说,秒杀活动是希望更多的人来参与,也就是...原创 2019-12-06 16:17:37 · 1220 阅读 · 0 评论 -
MQ消息队列的12点核心原理总结
1. 消息生产者、消息者、队列消息生产者Producer:发送消息到消息队列。消息消费者Consumer:从消息队列接收消息。Broker:概念来自与Apache ActiveMQ,指MQ的服务端,帮你把消息从发送端传送到接收端。消息队列Queue:一个先进先出的消息存储区域。消息按照顺序发送接收,一旦消息被消费处理,该消息将从队列中删除。2.设计Broker主要考虑1)消息...原创 2019-12-06 16:14:46 · 986 阅读 · 0 评论 -
分布式之消息队列的特点、选型、及应用场景详解
什么是消息队列消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列。消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保信息的可靠专递,消息发布者只管把消息发布到MQ中而不管谁来取,消息使用者...原创 2019-12-05 23:36:15 · 985 阅读 · 0 评论 -
主流的消息队列MQ比较,详解MQ的4类应用场景
目前主流的MQ产品1.ZeroMQ号称最快的消息队列系统,尤其针对大吞吐量的需求场景。扩展性好,开发比较灵活,采用C语言实现,实际上只是一个socket库的重新封装,如果做为消息队列使用,需要开发大量的代码。ZeroMQ仅提供非持久性的队列,也就是说如果down机,数据将会丢失。其中,Twitter的Storm中使用ZeroMQ作为数据流的传输。2.RabbitMQ结合erlang语...原创 2019-12-05 23:33:39 · 670 阅读 · 0 评论 -
消息中间件介绍、典型使用场景、以及使用原则
一、kafka1、不完全符合jms规范,注重吞吐量,类似udp 和 tcp2、一般做大数据吞吐的管道 我们现在的用途就是负责在各个idc之间通信3、量大对数据不是百分之百保证的,会有数据丢失,不是百分百送达(amq和rmq等有重发机制,而kafka没有);在吞吐量有提升 ,在这方面就得有牺牲, 所以kafka适合大数据量流转, 比如日志数据 比如用作统计的数据。二、activeMQAc...原创 2019-12-05 23:30:39 · 1218 阅读 · 0 评论 -
NIO、BIO、AIO的区别,及NIO的应用和框架选型
AIO、BIO、NIO的区别IO模型主要分类:同步(synchronous) IO和异步(asynchronous) IO阻塞(blocking) IO和非阻塞(non-blocking)IO同步阻塞(blocking-IO)简称BIO同步非阻塞(non-blocking-IO)简称NIO异步非阻塞(synchronous-non-blocking-IO)简称AIO1.BI...原创 2019-12-02 22:29:44 · 944 阅读 · 0 评论 -
ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)
哈希表1.介绍哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。哈希的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。这是对于简单的键的情况,我们将其扩展到可以处理更加复杂的类型的键。2.链式哈希表链式哈希表从根本上说是由一组...原创 2019-12-02 22:26:59 · 1110 阅读 · 0 评论 -
CountDownLatch、Semaphore等4大并发工具类详解
Java并发工具包1.并发工具类提供了比synchronized更加高级的各种同步结构:包括CountDownLatch、CyclicBarrier、Semaphore等,可以实现更加丰富的多线程操作。2.并发容器提供各种线程安全的容器:最常见的ConcurrentHashMap、有序的ConcurrentSkipListMap,实现线程安全的动态数组CopyOnWriteArrayL...原创 2019-12-02 22:24:35 · 937 阅读 · 0 评论 -
并发容器的原理,七大并发容器详解、及使用场景
并发容器的由来在Java并发编程中,经常听到Java集合类,同步容器、并发容器,那么他们有哪些具体分类,以及各自之间的区别和优劣呢?只有把这些梳理清楚了,你才能真正掌握在高并发的环境下,正确使用好并发容器,我们先从Java集合类,同步容器谈起。1.什么是同步容器Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map,大家熟知的这些集合类ArrayList、Link...原创 2019-11-30 22:37:24 · 675 阅读 · 0 评论 -
Java最全锁剖析:独享锁/共享锁 公平锁/非公平锁 乐观锁/悲观锁
乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度,在Java和数据库中都有此概念对应的实际应用。1.乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,乐观锁在Java中是通过使用无锁编程来实现,最常采用的是CAS...原创 2019-11-29 22:54:30 · 924 阅读 · 0 评论 -
Java线程池的使用方式,核心运行原理、以及注意事项
为什么需要线程池java中为了提高并发度,可以使用多线程共同执行,但是如果有大量线程短时间之内被创建和销毁,会占用大量的系统时间,影响系统效率。为了解决上面的问题,java中引入了线程池,可以使创建好的线程在指定的时间内由系统统一管理,而不是在执行时创建,执行后就销毁,从而避免了频繁创建、销毁线程带来的系统开销。线程池如何使用,以及实现原理,处理步骤,有什么使用注意事项等,今天主要从这几个...原创 2019-11-29 22:51:25 · 885 阅读 · 0 评论 -
Java多线程面试题:线程锁 线程池 线程同步等
1、并发编程三要素?1)原子性原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行。2)可见性可见性指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他线程可以立即看到修改的结果。实现可见性的方法:synchronized或者Lock:保证同一个时刻只有一个线程获取锁执行代码,锁释放之前把最新的值刷新到主内存,实现可见性。3...原创 2019-11-29 22:50:33 · 1184 阅读 · 0 评论 -
工作常用4种Java线程锁的特点,性能比较、使用场景
多线程的缘由在出现了进程之后,操作系统的性能得到了大大的提升。虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求。使用多线程的理由之一是和进程相比,它是一种非常花销小,切换快,更”节俭”的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种”昂贵”的多任务工作方式。而在进...原创 2019-11-27 22:06:35 · 827 阅读 · 0 评论 -
Redis的存储类型、集群架构、以及应用场景
什么是redisredis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存、事件发布或订阅、高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串、哈希、列表、队列、集合结构直接存取,基于内存,可持久化,支持多种开发语言。redis在高并发场景下的作用不言而喻,今天主要分享Redis大家比较关心的以下几个方面。redis的数据类型支持多种数据类型:1....原创 2019-11-27 22:04:05 · 987 阅读 · 0 评论 -
Redis面试题详解:哨兵 复制 事务 集群 持久化等
Redis主要有哪些功能?1.哨兵(Sentinel)和复制(Replication)Redis服务器毫无征兆的罢工是个麻烦事,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制。Sentinel可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能,Replication则是负责让一个Redis服务器可以配备多个备份的服务器。Redis也是利用这两个功...原创 2019-11-27 16:03:53 · 577 阅读 · 0 评论 -
如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
缓存雪崩数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。比如一个雪崩的简单过程:1、redis集群大面积故障2、缓存失效,但依然大量请求访问缓存服务redis3、redis大量失效后,大量请求转向到mysql数据库4、mysql的调用量暴增,很快就扛不住了,甚至直接宕机5、由于大量的应用服务依赖mysql和re...原创 2019-11-26 15:20:54 · 935 阅读 · 0 评论 -
Redis为什么是单线程、及高并发快的3大原因详解
Redis的高并发和快速原因1.redis是基于内存的,内存的读写速度非常快;2.redis是单线程的,省去了很多上下文切换线程的时间;3.redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll 自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。为什么Redi...原创 2019-11-25 17:04:13 · 269 阅读 · 0 评论