<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[T_LJAVA的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/T_LJAVA</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; T_LJAVA]]></copyright><item><title><![CDATA[java架构师培训-分布式储存的介绍]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115951274</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115951274</guid><author>T_LJAVA</author><pubDate>Wed, 21 Apr 2021 14:22:59 +0800</pubDate><description><![CDATA[可以从两方面来理解分布式存储：用户侧和实现侧。因为在软件领域有个经典的拆解问题的角度：接口和实现分离。

从用户方面看，单个应用的数据越来越多，低成本的商用单机存储难以满足需求。增加单机存储容量是一种思路，但成本会成倍增加，而且总是有上限的。另一种思路就是集合很多机器对外提供服务。最传统的接口是文件系统和数据库，但其接口都较为复杂，因此一开始分布式存储都寻求简化接口，以将精力放在解决分布式系统的问题上。比如裁剪的文件系统GFS，比如对象存储S3。随着分布式系统实践越来越多，可以支持更复杂的接口实现，最近趋势]]></description><category></category></item><item><title><![CDATA[java高级培训-异步请求和异步调用的区别]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115908682</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115908682</guid><author>T_LJAVA</author><pubDate>Tue, 20 Apr 2021 15:27:30 +0800</pubDate><description><![CDATA[最近，我正在研究SpringBoot的异步处理，并准备写一篇文章。收集信息时，我发现了一篇文章“SpringBoot中的异步请求和异步调用”及其许多派生文章。这篇文章确实不错，但是文章中提到的“异步请求和异步调用”这两个概念总是令人困惑，并且派生文章也混在一起。
终于忍不住想探究一番，发现除了那篇文章和衍生的文章之外，并没有其他证据来区别这两个概念。直到在StackOverflow上搜到了一篇七年前的文章，这个疑惑才解开。
今天就带大家一起探究一下“异步请求和异步调用”这两个概念。
异步请求和异步调用的区别]]></description><category></category></item><item><title><![CDATA[java架构师培训-aop和oop的区别]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115862980</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115862980</guid><author>T_LJAVA</author><pubDate>Mon, 19 Apr 2021 13:52:02 +0800</pubDate><description><![CDATA[可以说AOP（面向方面的编程，面向方面的编程）是OOP（面向对象的编程，面向对象的编程）的补充和改进。OOP引入了诸如封装，继承和多态性之类的概念，以建立对象层次结构来模拟公共行为的集合。当我们需要为分散的对象引入公共行为时，OOP是无能为力的。换句话说，OOP允许您定义上下关系，但不适用于定义左右关系。例如，日志功能。日志代码通常水平分布在所有对象级别，与它所分配到的对象的核心功能无关。其他类型的代码也是如此，例如安全性，异常处理和透明持久性。这种无关紧要的代码分散在各处，称为跨领域代码。在OOP设计中，]]></description><category></category></item><item><title><![CDATA[java高级培训中心-IOC的应用理解]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115832099</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115832099</guid><author>T_LJAVA</author><pubDate>Sun, 18 Apr 2021 15:55:06 +0800</pubDate><description><![CDATA[IOC—InversionofControl，即，“控制反转”不是技术，而是设计思想。在Java开发中，Ioc意味着将您设计的对象提供给容器进行控制，而不是在对象内部进行传统的直接控制。如何理解Ioc？理解Ioc的关键是要明确“谁控制谁，什么被控制，为什么要逆转（如果有逆转，就应该向前旋转）以及哪些方面逆转”。
谁控制谁，控制什么？
在传统的JavaSE编程中，我们通过new在对象内部直接创建对象，这意味着该程序会主动创建相关对象。IoC有一个特殊的容器来创建这些对象，即Ioc容器控制对象的创建；谁控制谁？]]></description><category></category></item><item><title><![CDATA[java架构师培训-多线程的生命周期]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115760067</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115760067</guid><author>T_LJAVA</author><pubDate>Fri, 16 Apr 2021 14:55:27 +0800</pubDate><description><![CDATA[任何对象都有生命周期，线程也不例外。它也有自己的生命周期。线程的整个生命周期分为六个阶段，即新状态（New），可运行状态（Runnable），运行状态（Running），阻塞状态（Blocked），等待状态（Waiting）和运行状态。死状态（已终止）。线程的不同状态指示线程的当前活动（在某些地方，等待状态分为两种类型，并添加了定时等待Timed-Waiting）。
下面对线程生命周期中的六种状态进行详细说明。
1.新建状态(New)
创建一个线程对象后，该线程对象就处于新建状态，此时它不能运行，和其它Ja]]></description><category></category></item><item><title><![CDATA[java架构师培训-多线程同步的问题怎么解决]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115723602</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115723602</guid><author>T_LJAVA</author><pubDate>Thu, 15 Apr 2021 14:37:00 +0800</pubDate><description><![CDATA[(1)问题分析：
审查员主要与多线程评估有关。如果同时访问多个线程，则使用线程同步技术来确保数据只能在一个时间被一个线程访问。
(2)核心答案讲解：
同步代码块：使用synchronized()对需要完整执行的语句进行“包裹”，synchronized(Objobj)构造方法里是可以传入任何类的对象。
同步方法：
在方法的申明里申明synchronized
(3)问题扩展
死锁
当线程需要同时持有多个锁时，有可能产生死锁。考虑如下情形：
线程A当前持有互斥锁lock1，线程B当前持有互斥锁lock2。
接下]]></description><category></category></item><item><title><![CDATA[java架构师培训-soa架构的应用介绍]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115696974</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115696974</guid><author>T_LJAVA</author><pubDate>Wed, 14 Apr 2021 15:03:42 +0800</pubDate><description><![CDATA[针对传统的单体架构存在的问题，后来出现了一种SOA架构。
SOA架构是一个面向服务的架构，它是一个组件模型。SOA架构将应用程序的不同功能单元（称为服务）进行拆分，并通过在这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的，它独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以使用一种统一和通用的方式进行交互。
SOA架构将原来的单体架构按照功能细分为不同的子系统，SOA架构如下图所示。

由上图可知，一个完整的项目会分为多个模块，并且数据库也会有主库与]]></description><category></category></item><item><title><![CDATA[java架构师培训-什么是字节码]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115667707</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115667707</guid><author>T_LJAVA</author><pubDate>Tue, 13 Apr 2021 14:57:43 +0800</pubDate><description><![CDATA[Java的最初目的是在不依赖特定物理硬件和操作系统环境的情况下运行，这意味着Java程序实现跨平台功能的基石实际上是字节码。Java之所以能够解决程序安全性和跨平台可移植性的问题，主要原因在于Java源代码的编译结果不是本地机器指令，而是字节码。将Java源代码成功编译为字节码后，如果要在其他平台上运行，则无需再次编译。就是说，Java源代码可以仅通过一次编译就可以在任何地方运行。这是“WriteOnce，RunAnywhere”的想法。所以注定了Java程序在任何物理硬件和操作系统环境下都能够顺利运行，只]]></description><category></category></item><item><title><![CDATA[java架构师培训-jvm可以对java的原生锁做哪些优化]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115621739</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115621739</guid><author>T_LJAVA</author><pubDate>Mon, 12 Apr 2021 14:40:37 +0800</pubDate><description><![CDATA[JVM对Java的原生锁做了哪些优化?在Java之前，Monitor的实现完全依赖底层操作系统的互斥锁来实现，也就是我们刚才在问题二中所闻述的获取/释放锁的逻辑。
java架构师培训
由于Java级线程与操作系统的本机线程具有映射关系，因此，如果要阻止或唤醒线程，则需要操作系统的帮助，这需要从用户模式切换到内核模式以进行操作。执行。这种切换非常昂贵，需要大量的处理器时间，并且在现代JDK中已经进行了很多优化。一种优化方法是使用旋转锁，即让线程旋转并等待一段时间，然后再阻塞线程。可能是在等待期间其他线程已被解]]></description><category></category></item><item><title><![CDATA[java架构师培训-Redis相比memcached有哪些优势?]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115600301</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115600301</guid><author>T_LJAVA</author><pubDate>Sun, 11 Apr 2021 15:41:04 +0800</pubDate><description><![CDATA[Redis本质上是键-值类型的内存数据库，非常类似于memcached。整个数据库被加载到内存中以进行操作，并且数据库数据通过异步操作被定期刷新到硬盘上以进行存储。

因为它是纯内存操作，所以Redis具有出色的性能。它每秒可以处理100,000多个读取和写入操作。它是已知最快的键值数据库。
Redis的卓越表现不仅在于性能。Redis的最大魅力在于它支持保存多个数据结构。此外，单个值的最大限制为1GB。与仅可保存1MB数据的内存缓存不同，Redis可用于实现许多有用的功能。特征。
比方说用他的List来做]]></description><category></category></item><item><title><![CDATA[java架构师培训-Zookeepe的选主流程]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115549839</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115549839</guid><author>T_LJAVA</author><pubDate>Fri, 09 Apr 2021 14:32:13 +0800</pubDate><description><![CDATA[当领导者崩溃或领导者失去大部分追随者时，zk进入恢复模式。恢复模式需要重新选择新的领导者，以将所有服务器还原到正确的状态。Zk的选举算法有两种：一种基于basicpaxos，另一种基于fastpaxos。系统的默认选举算法为fastpaxos。

1、Zookeeper选主流程(basicpaxos)
(1)选举线程由当前Server发起选举的线程担任，其主要功能是对投票结果进行统计，并选出推荐的Server;
(2)选举线程首先向所有Server发起一次询问(包括自己);
(3)选举线程收到回复后，验证是]]></description><category></category></item><item><title><![CDATA[java架构师培训-Java内存模型的应用介绍]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115520358</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115520358</guid><author>T_LJAVA</author><pubDate>Thu, 08 Apr 2021 14:55:00 +0800</pubDate><description><![CDATA[Java内存模型(即JavaMemoryModel，简称JMM)本身是一种抽象的概念，实际上并不存在。它描述了一组规则或规范，通过这些规则或规范定义了程序中各种变量（包括实例字段，静态字段和构成数组对象的元素）的访问方法。
Java内存模型的主要目标是定义程序中每个变量的访问规则，即如何在虚拟机中的内存中存储和删除变量。这里的变量不包括局部变量和方法参数，因为它们是线程专用的，并且不会共享，因此不存在竞争问题。由于JVM运行程序的实体是一个线程，因此在创建每个线程时，JVM都会为其创建一个工作内存（在某些地]]></description><category></category></item><item><title><![CDATA[java架构师培训-Redis内存淘汰机制是什么]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115484701</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115484701</guid><author>T_LJAVA</author><pubDate>Wed, 07 Apr 2021 14:43:53 +0800</pubDate><description><![CDATA[Redis内存消除是指Redis可以主动从实例中删除用户存储的某些键，从而导致读取未命中的事实。那么，Redis为什么具有此功能？这是我们需要探索的设计的初衷。Redis的两种最常见的应用场景是缓存和持久性存储。首先要明确的一个问题是内存淘汰策略更适合于那种场景？是持久存储还是缓存？

内存的淘汰机制的初衷是为了更好地使用内存，用一定的缓存miss来换取内存的使用效率。
作为Redis用户，我如何使用Redis提供的这个特性呢？看看下面配置
#maxmemory
我们可以通过配置redis.conf中的ma]]></description><category></category></item><item><title><![CDATA[java架构师培训-如何使用MyBatis框架操作数据库]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115351236</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115351236</guid><author>T_LJAVA</author><pubDate>Wed, 31 Mar 2021 15:18:59 +0800</pubDate><description><![CDATA[为了使读者能够更加清晰的理解MyBatis程序，在正式讲解MyBatis入门案例之前，先来了解一下MyBatis程序的工作原理。

从上图可以看出，MyBatis框架在操作数据库时，大体经过了8个步骤。下面就对图6-4中的每一步流程进行详细讲解，具体如下。
(1)读取MyBatis配置文件mybatis-config.xml。mybatis-config.xml作为MyBatis的全局配置文件，配置了MyBatis的运行环境等信息，其中主要内容是获取数据库连接。
(2）加载映射文件Mapper.xml。  ]]></description><category></category></item><item><title><![CDATA[java架构师培训-redis做缓存有哪些优势]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115324258</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115324258</guid><author>T_LJAVA</author><pubDate>Tue, 30 Mar 2021 14:19:53 +0800</pubDate><description><![CDATA[redis可以做缓存的优势有哪些？
1)Redis将其数据完全存储在内存中，并且仅使用磁盘进行持久化。与其他键值数据存储相比，Redis具有一组相对丰富的数据类型。Redis可以将数据复制到任意数量的从站。

2)异常快
Redis的速度非常快，每秒执行约110,000次设置（SET）操作，每秒执行约81,000次读/获取（GET）操作。支持丰富的数据类型-Redis支持开发人员常用的大多数数据类型，例如列表，集合，排序集合，哈希等。这使Redis非常容易用于解决各种问题，因为我们知道可以更好地使用哪种数据]]></description><category></category></item><item><title><![CDATA[java架构师培训-适合使用Redis的场景有哪些]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115301539</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115301539</guid><author>T_LJAVA</author><pubDate>Mon, 29 Mar 2021 15:03:08 +0800</pubDate><description><![CDATA[(1)会话缓存(SessionCache)
会话缓存是使用Redis的最常用方案之一。使用Redis在其他存储（例如Memcached）上缓存会话的优点是Redis提供了持久性。当维护一个不严格要求一致性的缓存时，如果所有用户的购物车信息丢失，大多数人将不满意。现在，他们还会这样吗？

幸运的是，随着Redis多年来的改进，很容易找到如何正确使用Redis缓存会话文档的方法。甚至著名的商业平台Magento都为Redis提供了插件。
(2)全页缓存(FPC)
除了基本的会话令牌外，Redis还提供了一个非常]]></description><category></category></item><item><title><![CDATA[java架构师培训-Spring eureka的应用]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115280074</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115280074</guid><author>T_LJAVA</author><pubDate>Sun, 28 Mar 2021 14:07:35 +0800</pubDate><description><![CDATA[Eureka是Netflix开发的一个服务发现框架，它是基于REST的服务，主要用于定位在AWS（AmazonWebServices）域中运行的中间层服务，以实现负载平衡和中间层服务故障转移。SpringCloud将其集成到自己的子项目SpringCloudNetflix中，以实现SpringCloud的服务发现功能。
Eureka的服务发现包含两大组件：服务端发现组件(EurekaServer)和客户端发现组件(EurekaClient)。服务端发现组件也被称之为服务注册中心，主要提供了服务的注册功能，而]]></description><category></category></item><item><title><![CDATA[java架构师培训-为什么要学习分布式]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115244862</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115244862</guid><author>T_LJAVA</author><pubDate>Fri, 26 Mar 2021 15:02:14 +0800</pubDate><description><![CDATA[众所周知，分布式事务是在分布式场景下，满足事务的需求，一直以来分布式事务被称为业界难题方案。那么，微服务架构下如何解决分布式事务呢？

一、为什么要学分布式事务？
分布式事务典型产生场景，可以帮助大家解决数据一致性。比如微服务架构，微服务之间通过远程调用完成事务操作。还有单体系统访问多个数据库实例，当单体系统需要访问多个数据库(实例)时就会产生分布式事务。以及多服务访问同一个数据库实例，订单微服务和库存微服务即使访问同一个数据库。除此之外，课程还包括了分布式事务多种应用，能够解决实际业务问题。比如用户注册送]]></description><category></category></item><item><title><![CDATA[java架构师培训-微服务和分布式有什么关系]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115208434</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115208434</guid><author>T_LJAVA</author><pubDate>Thu, 25 Mar 2021 14:55:59 +0800</pubDate><description><![CDATA[分布式和微服务是什么关系？简而言之，分布式和微服务的概念相似，并且分布式属于微服务。但是分布式服务和微服务在架构，功能和粒度上有所不同。因此，两者之间的关系既相关又互不相同。本文主要向您介绍分布式服务和微服务，并讨论两者之间的关系。有兴趣的朋友可以继续阅读。

1、微服务
微服务的意思也就是将模块拆分成一个独立的服务单元通过接口来实现数据的交互。简单来说微服务就是很小的服务，小到一个服务只对应一个单一的功能，只做一件事。这个服务可以单独部署运行，服务之间可以通过RPC来相互交互，每个微服务都是由独立的小团队]]></description><category></category></item><item><title><![CDATA[java架构师培训-架构和框架的区别]]></title><link>https://blog.youkuaiyun.com/T_LJAVA/article/details/115175560</link><guid>https://blog.youkuaiyun.com/T_LJAVA/article/details/115175560</guid><author>T_LJAVA</author><pubDate>Wed, 24 Mar 2021 14:04:11 +0800</pubDate><description><![CDATA[架构和框架的区别是什么？相信问这个问题的一定是新手小白。确实会有人在刚刚入门编程的时候，架构和框架的傻傻分不清。本文就框架和架构的定义、使用、特点等等方面，进行对比分析。
java架构师培训
一、框架：
1、定义：
框架（framework）它是整个系统或部分系统的可重用设计，表示为一组抽象组件以及组件实例之间的交互方法。另一个定义是，框架是可以由应用程序开发人员定制的应用程序框架。前者来自应用程序方面，后者是从墓地方面给出的定义。
框架是可以采用的设计组件，通常采用组件库的形式，但是框架库只是框架的重要组]]></description><category></category></item></channel></rss>