首页
学习
活动
专区
工具
TVP
发布

深入理解Java

专栏作者
72
文章
65249
阅读量
19
订阅数
【甘泉算法】一文搞定“岛屿类”问题
这几道题是DFS(深度优先遍历)的应用题,我们做的比较多的是将DFS应用到二叉树上,在二叉树上进行深度优先搜索,这也是我们熟知的DFS应用的方式,但是上面的四道题,基本都是类似于在二维网格进行深度优先遍历,那么这种深度优先搜索的方式是如何应用的呢?读者暂时不要着急,我们一起看下面的四道例题的详解,就知道深度优先搜索是是如何应用到了类似于二维网格中的。
itlemon
2022-01-10
4250
【甘泉算法】一文搞定还原二叉树问题
首先我们一起来温习下二叉树的三种遍历方式:前序遍历、中序遍历、后续遍历。如果读者不太了解这三种遍历方式,建议找点博客看看二叉树的三种遍历,本文主要是借助二叉树的遍历结果来还原二叉树,所以本文默认读者是了解二叉树的遍历的。
itlemon
2022-01-10
2520
【甘泉算法】一文搞定单调栈问题
本文主要利用单调栈来解决leetcode上的典型问题,其实它的应用范围倒是不广,主要解决的都是类似于leetcode上下一个更大元素的问题,本文将从这类问题出发,帮助大家掌握单调栈的应用技巧。主要题型如下所示:
itlemon
2022-01-10
6590
RocketMQ源码之路(二)NameServer路由中心源码分析
我们熟知的几种常见的消息队列组件,比如Kafka,ActiveMQ,RabbitMQ等,都是一种基于主题的发布订阅机制,RocketMQ也正是基于这种机制实现的消息服务。消息生产者(Producer)将生产好的消息发布到某个主题,该主题下的消息在消息服务器(Broker)中进行传送或存储,由消费者(Consumer)进行订阅主题,从消息服务器中获取到消息后进行消费。消费者获取消息的方式通常有两种,一种是主动去消息服务器拉取消息(Pull Message),另外一种是由消息服务器推送消息(Push Message)给消费者。这种主题的发布订阅机制应用到分布式系统中,成功解耦了生产者和消费者。既然是分布式系统,那么常常存在分布式系统问题,比如某个消息服务器宕机了,生产者是如何感知这台消息服务器宕机了,从而避免将消息发送到这台消息服务器上,消费者是如何感知这台消息服务器宕机了,从而避免从这台消息服务器上拉取消息的呢?且这台宕机的消息服务器是如何从消息服务器实例列表中被剔除的呢?这一切都将归功于NameServer,它的诞生让动态感知、动态剔除、负载均衡成为可能。 图1-1是RocketMQ常见的物理部署图(图片来源:百度图库),采用的部署方式2m-2s(2Master,2Slave),本小节将根据此图阐述RocketMQ基本的流程原理,后面的小节将深入源码中,从源码中来验证基本流程原理。
itlemon
2020-11-03
7180
RocketMQ源码之路(一)搭建RocketMQ源码环境
本文不再赘述如何去fork代码,如何去git clone代码,笔者认为多数读者都会这些基本操作,如果正在阅读的您尚未掌握这些技巧,可以去查看一下其他博主的文章,正确把RocketMQ源码拉取到本地后再来阅读该文章。 Apache RocketMQ是一个基于Java语言开发的消息中间件,构建工具采用的是常用的maven,基本的代码结构如下图1-1所示:
itlemon
2020-09-27
9730
深入理解类加载机制:拨开迷雾见真章
我们平常写的Java代码是存储在.java文件中,这是一个文本文件,是不能直接执行的,但是这个文本文件可以被编译成为一个字节码文件(后缀为.class),这个字节码文件中描述了类的元信息,比如类的定义、属性及方法等。JVM可以将这个字节码文件从磁盘中(当然也可以来源于网络、数据库或者是动态产生的字节码二进制流)读取到内存中,并对这个字节码中的数据进行校验、解析和初始化,最后形成一个可以被JVM直接使用的类型,这个整个的读取、校验、解析、初始化的过程称为类的加载。
itlemon
2020-09-01
4080
走进高并发(四)深入理解Atomic类
大家都清楚,在多线程环境下,i++会存在线程不安全问题,原因是因为i++不是一个原子操作,它可以被解析为i = i + 1,它在运行时是被划分为三个步骤,分别是从主存中读取i的值到线程的工作内存中,然后线程对i值进行+1操作,最后将计算后的i值写回到主存中。因为这三个步骤不是一个原子操作,那么就存在某个线程A在进行i++操作的过程中,线程B对主存中的i值进行了读取并完成修改,那么此时线程A的计算结果就不正确了,且会出现数据被覆盖的问题,这是线程不安全的根本原因。
itlemon
2020-07-06
6260
走进高并发(三)深入理解Java内存模型
在讨论Java内存模型之前,这里先一起聊聊CPU、高速缓存以及主内存,在了解这些知识后,对理解Java内存模型会有很大的帮助。
itlemon
2020-06-23
3480
深入分析Java Web技术内幕读书笔记(二)浅析DNS域名解析过程
下面DNS解析步骤进行讲解,后面将采用命令行的形式来跟踪DNS解析过程。当用户在地址栏键入www.baidu.com并敲下回车键之后,域名解析就开始了。
itlemon
2020-04-03
2.3K0
设计模式02——Adapter模式
适配器设计模式,顾名思义就是将适配器的作用总结抽象成为一种代码的组织方式,将现有的代码通过适配器进行适配,以满足项目对另外一个类或者接口的要求。换句话说就是将一个类的接口适配(包装/转换)成客户(调用者)希望的另一个接口。适配器设计模式有以下两种形式:
itlemon
2020-04-03
4540
Spring Boot启用异步线程
Spring中存在一个接口AsyncConfigurer接口,该接口就是用来配置异步线程池的接口,它有两个方法,getAsyncExecutor和getAsyncUncaughtExceptionHandler,第一个方法是获取一个线程池,第二个方法是用来处理异步线程中发生的异常。它的源码如下所示:
itlemon
2020-04-03
2.2K0
Spring Cloud微服务技术栈(五):客户端负载均衡Spring Cloud Ribbon部分源码分析
为了使客户端具备负载均衡的能力,我们在代码中将RestTemplate交给Spring管理的时候,会加上@LoadBalanced注解,如下代码所示:
itlemon
2020-04-03
6300
Spring Cloud微服务技术栈(二):搭建高可用Eureka Server、服务注册与发现
在微服务架构中,服务治理是最为基本、最为核心的模块,它主要用来实现各个微服务实例的自动注册与发现。在互联网时代初期,微服务还未盛行之时,构建的服务完全可以使用静态配置文件来维护服务实例清单,根据实例清单来完成服务的调用,随着业务逐渐繁杂,手动维护服务实例清单已经无法满足需求,那么就需要构建一套自动维护服务实例清单的系统,该系统支持动态维护服务实例清单,当服务实例发生变化时,能及时通知客户端来应对服务实例的变化,它围绕服务实例注册与发现,实现自动化管理。
itlemon
2020-04-03
6760
基于Python脚本和聚合数据实现手机号码归属地信息查询
聚合数据是一个为智能手机开发者,网站站长,移动设备开发人员及图商提供原始数据API服务的综合性云数据平台。包含手机聚合,网站聚合,LBS聚合三部分,其功能类似于Google APIS和百度的APIStore。 在学习Python爬虫的过程中,可以尝试使用免费的API来获取一些信息,可以作为一种学习。
itlemon
2020-04-03
1.8K0
选择排序算法(Selection Sort)
         每一趟从待排序的数据元素中选出最小(或者最大)的一个元素,顺序放在已经排好序的数列的后面,直到全部待排序的数据元素排完。
itlemon
2020-04-03
5440
Spring Boot整合ActiveMQ
在本地或者虚拟机中安装ActiveMQ并启动ActiveMQ服务,启动完毕之后通过浏览器来访问ActiveMQ的管理页面http://localhost:8161(这是本地安装的ActiveMQ,如果是在虚拟机中,localhost需要替换成虚拟机的IP)来确认一下服务是否正常启动,页面正常显示说明启动成功。 为了让你的Spring Boot应用支持ActiveMQ,需要在pom.xml文件中添加如下依赖:
itlemon
2020-04-03
1.3K0
JavaScript基本入门教程
                必须以字母或下划线开头,中间可以是数字、字符或下划线
itlemon
2020-04-03
4K0
Spring Security技术栈开发企业级认证与授权(五)使用Filter、Interceptor和AOP拦截REST服务
使用过滤器进行拦截主要有两种方式,第一种是将自定义的拦截器标注为Spring的Bean,在Spring Boot应用就可以对RESTful风格的API进行拦截。第二种方式往往应用在继承第三方过滤器,这时候就需要将第三方拦截器使用FilterRegistrationBean对象进行注册即可。接下来详细介绍两种方式。
itlemon
2020-04-03
7800
Spring Cloud微服务技术栈(三):服务治理Spring Cloud Eureka核心元素分析
通过前面的文章的了解,我们知道Eureka服务治理包含了服务注册中心、服务提供者和服务消费者三个核心元素,三者的基本关系是:服务注册中心提供服务注册和服务发现平台,服务提供者将服务注册到服务注册中心,服务消费者从服务注册中心获取服务实例列表并调用。下图展示了三者之间的关系:
itlemon
2020-04-03
3800
MyBatis学习笔记(一)简单配置让MyBatis跑起来
Maven是一个优秀的项目构建和管理工具,使用Maven构建项目非常方便,可以非常方便地处理Jar包依赖问题。这里提供构建MyBatis应用的的pom.xml配置内容。
itlemon
2020-04-03
4850
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档