<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ying_coder的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/ying_coder</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; ying_coder]]></copyright><item><title><![CDATA[数据库中的存储过程与函数的区别和联系]]></title><link>https://blog.csdn.net/ying_coder/article/details/109280107</link><guid>https://blog.csdn.net/ying_coder/article/details/109280107</guid><author>ying_coder</author><pubDate>Sun, 25 Oct 2020 22:21:04 +0800</pubDate><description><![CDATA[存储过程与函数的区别与联系


]]></description><category></category></item><item><title><![CDATA[高频排序算法]]></title><link>https://blog.csdn.net/ying_coder/article/details/107876912</link><guid>https://blog.csdn.net/ying_coder/article/details/107876912</guid><author>ying_coder</author><pubDate>Wed, 12 Aug 2020 18:05:30 +0800</pubDate><description><![CDATA[1.冒泡排序
冒泡排序是一种交换排序（相邻元素两两比较）。
算法思想：冒泡排序重复地走访过要排序的数列，一次比较相邻的两个元素，如果它们的顺序不符合次序要求就交换它们的位置。走访数列的工作是重复地进行直到没有再需要交换的元素时，就说明该数列已经排序完成。
假设一个数组中有N个元素，要求按照升序排序。
（1）如果采用从后往前比较的方法，则最小值率先出现在数组的头角标位上。
//假设数组一共有N个元素，要求按照升序排序
 //冒泡排序1（如果是从后往前比较，则最小值率先出现在数组的头角标位上）
 public ]]></description><category></category></item><item><title><![CDATA[设计模式的六大原则]]></title><link>https://blog.csdn.net/ying_coder/article/details/107200262</link><guid>https://blog.csdn.net/ying_coder/article/details/107200262</guid><author>ying_coder</author><pubDate>Wed, 08 Jul 2020 11:29:48 +0800</pubDate><description><![CDATA[一、单一职责原则
思想：一个方法只负责一件事情。
描述：一个类或者一个方法只负责一个职责，各个职责的程序改动，不影响其他程序。
优点：降低类和类的耦合，提高可读性，增加可维护性和可扩展性，降低可变性的风险。
二、里氏替换原则
思想：可以在任何使用基类的地方使用其子类，完美的替换基类。
描述：子类可以扩展父类的功能，但不能改变父类原有的功能；子类可以实现父类的抽象方法，但不能覆盖父类的非抽象方法；子类中可以增加自己特有的方法。
优点：增加程序的健壮性，即使增加了子类，原有的子类还可以继续运行，互不影响。
三.]]></description><category></category></item><item><title><![CDATA[ThreadLocal的原理]]></title><link>https://blog.csdn.net/ying_coder/article/details/107199360</link><guid>https://blog.csdn.net/ying_coder/article/details/107199360</guid><author>ying_coder</author><pubDate>Wed, 08 Jul 2020 10:17:22 +0800</pubDate><description><![CDATA[ThreadLocal的原理

]]></description><category></category></item><item><title><![CDATA[synchronized的实现原理]]></title><link>https://blog.csdn.net/ying_coder/article/details/107110818</link><guid>https://blog.csdn.net/ying_coder/article/details/107110818</guid><author>ying_coder</author><pubDate>Fri, 03 Jul 2020 21:53:56 +0800</pubDate><description><![CDATA[在多线程并发编程中，synchronized一直是元老级角色，很多人称呼它为重量级锁。但是在Java SE 1.6之后为了减少获得锁和释放锁的带来的性能消耗而对其进行了各种优化，例如引入了偏向锁和轻量级锁，使得有些情况下synchronized也不那么重了。
利用synchronized实现同步的基础是Java中的每一个对象都可以作为锁即同步监视器（对象如同锁），主要有以下三种方式：
（1）对于普通同步方法（非静态同步方法），锁是this关键字表示本类对象的引用（当前实例对象）；
（2）对于静态同步方法，锁]]></description><category></category></item><item><title><![CDATA[数据库的优化问题]]></title><link>https://blog.csdn.net/ying_coder/article/details/106447504</link><guid>https://blog.csdn.net/ying_coder/article/details/106447504</guid><author>ying_coder</author><pubDate>Sun, 31 May 2020 12:33:36 +0800</pubDate><description><![CDATA[1. 如何定位并优化慢查询sql?
（1）根据慢日志(将show_query_log打开ON，超过long_query_time的sql将被记录在慢日志show_query_log_file中)定位捕获慢查询sql;
set global show_query_log = on;
set global long_query_time = 1;
（2）使用explain等工具分析该条sql（一般将explain放在select的前面，用来描述MySQL如何执行查询操作，成功返回结果及需要执行的行数，帮助我们分]]></description><category></category></item><item><title><![CDATA[数据库之聚簇索引和非聚簇索引的区别]]></title><link>https://blog.csdn.net/ying_coder/article/details/106443618</link><guid>https://blog.csdn.net/ying_coder/article/details/106443618</guid><author>ying_coder</author><pubDate>Sat, 30 May 2020 21:31:43 +0800</pubDate><description><![CDATA[聚簇索引（密集索引）文件中的每个搜索码值都对应一个索引值（叶子节点不仅保存了键值，还保存了位于同一行记录中的其他列的信息），因为聚簇索引决定了表的物理排列顺序，而一个表只能有一种物理排列顺序，所以一个表只能创建一个聚簇索引。
非聚簇索引（稀疏索引）文件只为索引码的某些值建立索引项（叶子节点仅保存了键值以及该行数据的地址）。
数据库必须要有索引，没有索引则检索过程变成了顺序查找（全表扫描），O(n)的时间复杂度几乎是不能忍受的。我们非常容易想象出一个只有单关键字组成的表如何使用B+树进行索引，只要将这个关键字]]></description><category></category></item><item><title><![CDATA[数据库之索引的数据结构]]></title><link>https://blog.csdn.net/ying_coder/article/details/106319901</link><guid>https://blog.csdn.net/ying_coder/article/details/106319901</guid><author>ying_coder</author><pubDate>Tue, 26 May 2020 19:37:02 +0800</pubDate><description><![CDATA[索引的数据结构主要有以下几种：
（1）生成索引，建立二叉查找树/二叉排序树/二叉搜索树进行二分查找；
（2）平衡二叉树，红黑树；
（3）生成索引，建立B-Tree(B树/B-树)结构进行查找；
（4）生成索引，建立B±Tree（B+树）结构进行查找；
（5）生成索引，建立Hash结构进行查找；
（6）生成索引，建立位图结构进行查找。
1、 二叉查找树

二叉查找树的特点：
（1）二叉查找树的每一个节点的值都大于其左子树上所有节点的值，且小于其右子树上所有节点的值；
（2）二叉查找树的每一个节点的左、右子树也]]></description><category></category></item><item><title><![CDATA[Java反射机制及其应用]]></title><link>https://blog.csdn.net/ying_coder/article/details/106312169</link><guid>https://blog.csdn.net/ying_coder/article/details/106312169</guid><author>ying_coder</author><pubDate>Sun, 24 May 2020 17:00:49 +0800</pubDate><description><![CDATA[反射机制是Java语言中的一个非常重要的特性，它允许程序在运行时进行自我检查，同时也允许对其内部的成员进行操作。由于反射机制能够实现在运行时对类进行装载，因此能够增加程序的灵活性，但是不恰当地使用反射机制，也会严重影响系统的性能。
具体而言，反射机制提供的功能主要有：得到一个对象所属的类；获取一个类的所有成员变量和方法；在运行时创建对象；在运行时调用对象的方法。
一、什么是反射？
在运行时，对于任意一个类，都能够获取到这个类的所有成员属性和方法；对于任意一个对象，都能够调用这个对象的任意属性和方法（包括pu]]></description><category></category></item><item><title><![CDATA[《剑指Offer》(59)队列的最大值以及双端队列接口Deque]]></title><link>https://blog.csdn.net/ying_coder/article/details/105520748</link><guid>https://blog.csdn.net/ying_coder/article/details/105520748</guid><author>ying_coder</author><pubDate>Tue, 14 Apr 2020 21:36:58 +0800</pubDate><description><![CDATA[1.双端队列
Java中实际上提供了java.util.Stack类（该类继承自Vector类）来实现栈结构（后入先出LIFO）,但官方目前已不推荐使用（因为Vector虽然与ArrayList的底层同是基于数组结构，但是Vector是线程安全的，而ArrayList不是线程安全的）,而是使用java.util.Deque双端队列来实现队列（先入先出FIFO）与栈（后入先出LIFO）的各种需求。j...]]></description><category></category></item><item><title><![CDATA[Java中的StringBuffer和StringBuilder类]]></title><link>https://blog.csdn.net/ying_coder/article/details/105437161</link><guid>https://blog.csdn.net/ying_coder/article/details/105437161</guid><author>ying_coder</author><pubDate>Fri, 10 Apr 2020 17:16:07 +0800</pubDate><description><![CDATA[Java中的StringBuffer和StringBuilder类
StringBuffer和StringBuilder类都是字符串缓冲区，当需要对字符串进行修改时，可以使用StringBuffer和StringBuilder类。
与String不同的是，StringBuffer和StringBuilder类需要创建对象来使用并且该对象能够被多次修改而不会产生新的未使用的对象。
StringBuf...]]></description><category></category></item><item><title><![CDATA[Map集合的常用方法]]></title><link>https://blog.csdn.net/ying_coder/article/details/105368043</link><guid>https://blog.csdn.net/ying_coder/article/details/105368043</guid><author>ying_coder</author><pubDate>Tue, 07 Apr 2020 17:13:09 +0800</pubDate><description><![CDATA[Map集合的常用方法：




返回值类型
方法




V
put(K key,V value):向Map集合中添加键值对


V
get(K key):通过键获取对应的值


boolean
isEmpty():判断集合是否为空


V
remove(K key):通过键将键值对删除


void
clear():清空Map集合中所有的键值对


V
put(K key,V value):向M...]]></description><category></category></item><item><title><![CDATA[MySQL的存储引擎：InnoDB和MyISAM的区别]]></title><link>https://blog.csdn.net/ying_coder/article/details/105358276</link><guid>https://blog.csdn.net/ying_coder/article/details/105358276</guid><author>ying_coder</author><pubDate>Tue, 07 Apr 2020 11:18:20 +0800</pubDate><description><![CDATA[1.InnoDB和MyISAM的区别
（1）InnoDB支持事务，而MyISAM不支持事务。InnoDB会将每一条SQL语句都默认封装成一个事务，自动提交，这样会影响速度，因此建议将多条SQL语句放在begin和commit之间组成一个事务。
（2）InnoDB支持外键，而MyISAM不支持外键。将一个包含外键的InnoDB表转换成MyISAM会失败。
（3）InnoDB是聚簇索引，使用B+树作为...]]></description><category></category></item><item><title><![CDATA[你不可不知道的String类的常用方法]]></title><link>https://blog.csdn.net/ying_coder/article/details/105327943</link><guid>https://blog.csdn.net/ying_coder/article/details/105327943</guid><author>ying_coder</author><pubDate>Sun, 05 Apr 2020 15:59:37 +0800</pubDate><description><![CDATA[String类位于java.lang包中，Java使用String类来创建一个字符串变量，字符串变量属于对象。String对象一旦创建后不能被修改。即使我们给该String变量s重新赋值后，也是生成了一个新的String对象来保存了新的内容，原来旧的String对象依然存在于内存中，只是此时s已经不再指向它了，由于已经没有引用指向它了，那么这个旧对象就会成为垃圾对象，在某一个特定时刻由Java虚拟...]]></description><category></category></item><item><title><![CDATA[Java的反射机制]]></title><link>https://blog.csdn.net/ying_coder/article/details/105126365</link><guid>https://blog.csdn.net/ying_coder/article/details/105126365</guid><author>ying_coder</author><pubDate>Thu, 26 Mar 2020 19:58:09 +0800</pubDate><description><![CDATA[Java的反射机制
基本定义：
（1）对于任意一个类，都能知道该类的任意属性和方法；
（2）对于任意一个对象，都能调用该对象的任意属性和方法。
常用方式：
（1）获取Class对象；
（2）实例化一个对象；
（3）获取一个类的父类或者接口（单继承，多实现）；
（4）获取类中的所有属性；
（5）获取类中的所有方法；
（6）调用类中的任意一个方法。
更进一步理解，可参看下面的Java代码：
在这里插入...]]></description><category></category></item><item><title><![CDATA[Hashtable，HashMap，ConcurrentHashMap的原理和区别]]></title><link>https://blog.csdn.net/ying_coder/article/details/105110099</link><guid>https://blog.csdn.net/ying_coder/article/details/105110099</guid><author>ying_coder</author><pubDate>Thu, 26 Mar 2020 11:11:17 +0800</pubDate><description><![CDATA[(1)HashMap不是线程安全的，不支持并发操作，没有同步方法。ConcurrentHashMap是线程安全的，支持并发操作，通过继承 ReentrantLock（JDK1.7的重入锁）/CAS和synchronized(JDK1.8的内置锁)来进行加锁（分段锁），每次需要加锁的操作锁住的是一个 segment，这样只要保证每个 segment 是线程安全的，也就实现了全局的线程安全。
(2)J...]]></description><category></category></item><item><title><![CDATA[《剑指Offer》(43)1~n整数中1出现的次数]]></title><link>https://blog.csdn.net/ying_coder/article/details/105076343</link><guid>https://blog.csdn.net/ying_coder/article/details/105076343</guid><author>ying_coder</author><pubDate>Tue, 24 Mar 2020 17:45:24 +0800</pubDate><description><![CDATA[题目：输入一个整数n，求1~n这n个整数的十进制表示中1出现的次数。例如：输入12，1~12这些整数中包含1的数字有1、10、11和12，1一共出现了5次。

设N = abcde ,其中abcde分别为十进制中各位上的数字。
如果要计算百位上1出现的次数，它要受到3个方面的影响：百位上的数字（c），百位以下（低位）的数字(de)，百位以上（高位）的数字(ab)。
① 如果百位上数字为0，百位上可...]]></description><category></category></item><item><title><![CDATA[《剑指Offer》(41)数流中的中位数及Java的优先队列PriorityQueue]]></title><link>https://blog.csdn.net/ying_coder/article/details/105033896</link><guid>https://blog.csdn.net/ying_coder/article/details/105033896</guid><author>ying_coder</author><pubDate>Mon, 23 Mar 2020 16:36:29 +0800</pubDate><description><![CDATA[题目：如何得到一个数据流中的中位数？如果从数据流中读出奇数个数值，那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值，那么中位数就是所有数值排序之后中间两个数的平均值。
Java中的优先队列PriorityQueue
PriorityQueue基于优先级堆，它实现了Queue接口，可以对集合中的元素进行排序，在JDK1.5中引入。
该集合内可以存放基本数据类型对象包装类（如...]]></description><category></category></item><item><title><![CDATA[Java实现堆排序]]></title><link>https://blog.csdn.net/ying_coder/article/details/105031196</link><guid>https://blog.csdn.net/ying_coder/article/details/105031196</guid><author>ying_coder</author><pubDate>Sun, 22 Mar 2020 17:57:00 +0800</pubDate><description><![CDATA[堆排序及图解
对于一个长度为n的数组R(n)={r[0],r[1],…,r[n-1]}。
大顶堆（最大堆）：r(i)&gt;=r(2i+1)且r(i)&gt;=r(2i+2)，堆顶元素必为最大值，用于升序；
小顶堆（最小堆）：r(i)&lt;=r(2i+1)且r(i)&lt;=r(2i+2)，堆顶元素必为最小值，用于降序。
堆排序主要包括两个过程：（1）构建堆（从最后一个非叶子节点开始，即序号为n...]]></description><category></category></item><item><title><![CDATA[计算机网络总结]]></title><link>https://blog.csdn.net/ying_coder/article/details/104913949</link><guid>https://blog.csdn.net/ying_coder/article/details/104913949</guid><author>ying_coder</author><pubDate>Sun, 22 Mar 2020 12:37:29 +0800</pubDate><description><![CDATA[1. OSI网络模型与TCP/IP网络模型
（1）OSI网络模型




OSI七层模型
功能
TCP/IP协议族




应用层
文件传输，文件服务，电子邮件，虚拟终端
FTP（文件传输协议），DNS（域名系统），HTTP（超文本传输协议）等


表示层
代码转换，数据加密，数据格式化
没有协议


会话层
建立或解除与别的接点的联系
没有协议


传输层
提供端对端的接口
TCP（传输控制协议...]]></description><category></category></item></channel></rss>