<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Startapi的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Startapi</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Startapi]]></copyright><item><title><![CDATA[mysql基本数据类型]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/124162439</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/124162439</guid><author>Startapi</author><pubDate>Wed, 13 Apr 2022 16:11:00 +0800</pubDate><description><![CDATA[概述
要想学好mysql，了解其支持的基本数据类型以及内部原理是极为重要的，只有这样，我们才能根据不同的业务要求来选择不同的数据类型，实现最佳的存储效果和查询性能，因而本文就着重总结一下mysql支持的数据类型以及内部的存储原理。
总体来说，mysql一共分成了四类：数值类型、日期和时间类型、字符串类型、二进制类型等。
数值类型
数值类型是最为基础的类型，在业务开发中存储递增主键ID、金额、数量...]]></description><category></category></item><item><title><![CDATA[MySQL各数据类型总结]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/124150465</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/124150465</guid><author>Startapi</author><pubDate>Wed, 13 Apr 2022 16:05:37 +0800</pubDate><description><![CDATA[要想学好mysql，了解其支持的基本数据类型以及内部原理是极为重要的，只有这样，我们才能根据不同的业务要求来选择不同的数据类型，实现最佳的存储效果和查询性能，因而本文就着重总结一下mysql支持的数据类型以及内部的存储原理。
总体来说，mysql一共分成了四类：数值类型、日期和时间类型、字符串类型、二进制类型等。]]></description><category></category></item><item><title><![CDATA[Numpy简单入门]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/122277388</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/122277388</guid><author>Startapi</author><pubDate>Sun, 02 Jan 2022 16:09:42 +0800</pubDate><description><![CDATA[概述
Numpy是高性能科学计算好数据分析的基础包，提供了矩阵运算的功能，在深度学习和数据分析领域广泛应用。。
使用
创建array数组
vector = np.asarray([1,2,3,4]);

创建zero数组
a = np.zeros(10) # 创建向量
 a1 = np.zeros(shape=(5,3)) # 创建5行，3列的0矩阵

创建one矩阵
one = np.ones((3,4));

创建自定义值的矩阵
user_define = np.full((3, 5), 110)  #]]></description><category></category></item><item><title><![CDATA[线程本地存储ThreadLocal的原理及应用]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/120068824</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/120068824</guid><author>Startapi</author><pubDate>Thu, 02 Sep 2021 20:03:52 +0800</pubDate><description><![CDATA[概述
通常情况下，我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢？ JDK 中提供的ThreadLocal类正是为了解决这样的问题。 **ThreadLocal类主要解决的就是让每个线程绑定自己的值，可以将ThreadLocal类形象的比喻成存放数据的盒子，盒子中可以存储每个线程的私有数据。**每个线程都拥有了自己的数据这样也就避免了数据共享保证了线程安全。
如何用？
我们都知道SimpleDateFormat是线程不安全，但如果我们想在并发的场景中使]]></description><category></category></item><item><title><![CDATA[Atomic原子类的使用及其原理]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/119334232</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/119334232</guid><author>Startapi</author><pubDate>Mon, 02 Aug 2021 21:18:36 +0800</pubDate><description><![CDATA[本文总结了常用的原子类，及其内部实现的原理--CAS原理。Java 提供的原子类能够解决一些简单的原子性问题，但你可能会发现，上面我们所有原子类的方法都是针对一个共享变量的，如果你需要解决多个变量的原子性问题，建议还是使用互斥锁方案。原子类虽好，但使用要慎之又慎。]]></description><category></category></item><item><title><![CDATA[Kafka的核心原理]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/119280544</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/119280544</guid><author>Startapi</author><pubDate>Sat, 31 Jul 2021 19:52:56 +0800</pubDate><description><![CDATA[本文主要以消息引擎的角度出发，介绍Kafka的设计原理，整篇文章分成四个大篇幅：

一：Kafka消息格式以及演变过程，并且对消息的压缩也做了介绍

二：Kafka实现消息传输的方式，包含了生产者和消费者如何建立连接，如果保障消息的传输的可靠性

三：消息的保存方法，即Kafka是如何通过分区和副本机制来保证kafka的高可用

四：消费者组以及重平衡问题即重平衡发生的过程，触发条件，以及可参考的解决方法]]></description><category></category></item><item><title><![CDATA[线程池使用与原理]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/119220001</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/119220001</guid><author>Startapi</author><pubDate>Thu, 29 Jul 2021 20:29:57 +0800</pubDate><description><![CDATA[Java线程池在设计的时候，是按照`生产者-消费者`的模式来设计的，整个过程遵循`Executor框架`，用`Runnable/Callable`来作为任务的抽象；用`Executor`接口作为任务执行的抽象，`Future`作为异步执行结果的抽象。在工程实践中，我们都推荐使用`ThreadPoolExecutor`的构造方法来创建线程k池，而不推荐`Executors`封装的方法去创建其他类型的线程池。

`ThreadPoolExecutor`在创建线程时，一共有六个：

* `corePoolSize]]></description><category></category></item><item><title><![CDATA[零拷贝技术的原理]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/119186135</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/119186135</guid><author>Startapi</author><pubDate>Wed, 28 Jul 2021 17:45:45 +0800</pubDate><description><![CDATA[`Copy-On-Write`本质上讲是一种**延迟复制**的思想，在执行读操作的时候，不进行复制，而只有真正执行写操作的时候才进行复制。它的应用也非常广泛，比如linux中的`fork(）`方法，java中的`CopyOnWriteArrayList`。在使用时要注意其应用场景，因为其每次发生写操作都会复制新的空间，因此它天然适合**读多，写少的场景，并且能够忍受一定时间的读写不一致**。]]></description><category></category></item><item><title><![CDATA[零拷贝的原理]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/119174504</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/119174504</guid><author>Startapi</author><pubDate>Wed, 28 Jul 2021 10:59:19 +0800</pubDate><description><![CDATA[零拷贝技术，本质上讲就是通过减少非必要的内存拷贝以及上下文切换，来提高文件在通道间复制速度的一种技术。以本文中的`transferTo()`方法为例，通过该技术，可以将原来四次内存间拷贝减少成两次，将四次上下文切换减少成两次，大大提高复制的速度。但零拷贝技术并非万能的，它有自己的使用场景，对于将大量数据从一个 I/O 通道复制到另一个通道的情况（例如 Web 服务器），都是合适的。而对于磁盘文件间的复制，比如从一个磁盘位置复制到另一个磁盘位置，这种方式是不可用的。]]></description><category></category></item><item><title><![CDATA[skywalking agent插件开发过程中各种拦截点的写法]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/118884798</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/118884798</guid><author>Startapi</author><pubDate>Sun, 18 Jul 2021 22:40:17 +0800</pubDate><description><![CDATA[本文主要总结了自己写SkyWalking agent端插件的时候常用的匹配方法，并对每一个方法写了一个demo以供参考（所有demo均来自社区插件中的具体类）,希望能给想开发SkyWalking插件的小伙伴以帮助。]]></description><category></category></item><item><title><![CDATA[synchronized的原理及应用]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/117339097</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/117339097</guid><author>Startapi</author><pubDate>Thu, 27 May 2021 22:03:09 +0800</pubDate><description><![CDATA[本篇文章主要讲了`synchronized`的三个应用方式：修饰实例方法、修饰静态方法、修饰代码块，并且针对每种方式都从JVM角度讲解了其实现的底层原理。在扩展部分则详细讲解了Java6对`synchronized`的优化措施，以及底层的原理。]]></description><category></category></item><item><title><![CDATA[Java内存模型及其原理]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/117306606</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/117306606</guid><author>Startapi</author><pubDate>Wed, 26 May 2021 21:58:02 +0800</pubDate><description><![CDATA[本文主要讲了Java内存模型的原理及其构成，Java内存模型按照不同角度的划分，可以看到不同的内容，从JVM设计者的角度看，我们可以看到"主内存和工作内存的划分"以及"内存间的交互操作"。从程序员角度看，我们能够看到三个常用的关键字：volatile、synchronized以及final，并且简单介绍了这个三个关键字的作用，后续也会分别写出对应详细的文章，从原理角度进行阐述volatile和synchronized的原理以及使用。同时，对于Happens-Before 规则我们也有详细的介绍，分成了六部分]]></description><category></category></item><item><title><![CDATA[Java并发知识梳理]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/117229742</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/117229742</guid><author>Startapi</author><pubDate>Mon, 24 May 2021 18:54:59 +0800</pubDate><description><![CDATA[本文主要从分工、同步和互斥三类问题展开，从解决对应问题角度出发大致梳理了Java并发知识的学习前景图。后续将分若干部分来讲对应的内容。]]></description><category></category></item><item><title><![CDATA[java方法在java虚拟机中的执行过程]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/116590970</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/116590970</guid><author>Startapi</author><pubDate>Mon, 10 May 2021 11:19:19 +0800</pubDate><description><![CDATA[Java虚拟机在执行一个方法时，首先需要对该方法分配空间，也就是对应的一个栈帧。然后需要确定实际要执行方法的版本，可以有**解析**和**分派**两种方法去做选择，确定完方法版本之后，Java虚拟机在实际执行对应方法时会基于栈解析器来进行执行（此处也简单讲了基于栈指令集和基于寄存器指令的区别），执行完成后返回对应结果。这个方法的执行过程完成。]]></description><category></category></item><item><title><![CDATA[回溯算法解决子集、组合和排列问题]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/116306867</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/116306867</guid><author>Startapi</author><pubDate>Fri, 30 Apr 2021 17:10:50 +0800</pubDate><description><![CDATA[本文主要讲了通过回溯法如何解决排列、组合、子集这三类问题的基本思路：
组合问题关键点在于用一个start来保证每次选择的元素是之前未被选择过的
排列问题关键点在于通过contains()来保证每次选择的元素都未被包含在trace中
这两类问题回溯结束的时机都是搜索到的元素达到了预定的长度，即我们可以判断trace中元素的长度来判断是否终止此次回溯。
而子集问题则不然，因为它的长度是变长的，所以每次进入搜索的第一件事情就是将结果加入到结果集中。]]></description><category></category></item><item><title><![CDATA[Java对象的创建过程]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/116243206</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/116243206</guid><author>Startapi</author><pubDate>Wed, 28 Apr 2021 20:59:41 +0800</pubDate><description><![CDATA[本文主要讲了对象创建的五大过程以及每一步的具体作用，后续为了使用Java对象因而讲了一些对象访问定位相关的知识。]]></description><category></category></item><item><title><![CDATA[Java运行时内存如何分配]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/116234056</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/116234056</guid><author>Startapi</author><pubDate>Wed, 28 Apr 2021 15:02:38 +0800</pubDate><description><![CDATA[本文主要讲了Java运行时内存的区域划分。按照线程私有还是共有分成两类，其中私有部分包含了程序计数器、Java虚拟机栈、本地方法栈这三部分区域，其他区域为线程共有，并且每个区域的具体作用，文中也有阐述。]]></description><category></category></item><item><title><![CDATA[类加载器及其加载原理]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/115915613</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/115915613</guid><author>Startapi</author><pubDate>Tue, 20 Apr 2021 18:31:33 +0800</pubDate><description><![CDATA[本文主要讲了常用的类加载器，比如启动类加载器、扩展类加载器、应用类加载器以及自定义类加载器，详细介绍了类加载器在加载一个类时的原理以及加载所使用的双亲委派机制。以及使用双亲委派机制的好处以及破坏该机制的一些情况。]]></description><category></category></item><item><title><![CDATA[Class文件结构分析]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/115872862</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/115872862</guid><author>Startapi</author><pubDate>Mon, 19 Apr 2021 19:55:15 +0800</pubDate><description><![CDATA[Class文件是Java虚拟机执行引擎的数据入口，也是Java技术体系的基础支柱之一，因而学习Class文件的结构很有意义。本文主要讲解了Class文件结构中的各个组成部分，以及每个部分的定义、数据结构和使用方法。并结合一个例子（文中有代码，引用处附带有链接），讲解了Class文件是如何被存储和访问的。]]></description><category></category></item><item><title><![CDATA[类的加载流程]]></title><link>https://blog.youkuaiyun.com/Startapi/article/details/115930015</link><guid>https://blog.youkuaiyun.com/Startapi/article/details/115930015</guid><author>Startapi</author><pubDate>Wed, 14 Apr 2021 16:03:00 +0800</pubDate><description><![CDATA[概述
什么是类加载呢？
我们知道一个Class文件编译完成之后是存在于磁盘的一个普通文件，如果想要执行，必然需要将Class文件加载到内存中，并对数据进行校验、转换解析和初始化，最终形成可以被虚拟机直接使用的Java类型，这个过程其实就是类的加载机制。
当然上述过程说的比较抽象，具体来说其实Class文件从开始加载到内存中开始到被卸载回收为止，整个过程分为五大步：

加载
加载是类加载过程的第一...]]></description><category></category></item></channel></rss>