<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zyhhkb的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/zyhhkb</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; zyhhkb]]></copyright><item><title><![CDATA[JVM相关学习]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/127986278</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/127986278</guid><author>zyhhkb</author><pubDate>Thu, 08 Dec 2022 15:27:50 +0800</pubDate><description><![CDATA[d.虚引用：必须配合引用队列使用，主要配合ByteBuffer使用，例如，在其本身所指向的ByteBuffer被回收之后，直接内存并不会被回收，这时需要把虚引用的直接内存地址放入引用队列中，从而调用Unsafe.freeMemory()方法回收掉直接内存的空间。b.1.6 将这个字符串对象尝试放入串池，如果有则不放入，如果没有会把此对象复制一份，放入串池，并且会把串池中的对象返回；操作符创建一个对象时所返回的引用即为强引用，只有所有GC Root对象都不通过强引用引用该对象，该对象才能被垃圾回收。]]></description><category></category></item><item><title><![CDATA[Java常见问题]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/126787875</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/126787875</guid><author>zyhhkb</author><pubDate>Thu, 22 Sep 2022 17:30:39 +0800</pubDate><description><![CDATA[notifyAll():notifyAll()方法会将所有在等待集合中的线程唤醒，但由于所有的被唤醒的线程仍然要去争用synchronized锁，而synchronized锁具有排他性，最终只有一个线程获得该锁，进行执行状态，其他线程仍要继续等待。当线程调用wait()方法后，Java虚拟机会让当前的线程进入到休眠状态，并释放对对象的同步锁的控制权，允许其他线程执行该同步代码，要唤醒该线程，需要在同一个对象上调用notify()或notifyAll()方法。s1 =  s1+1;]]></description><category></category></item><item><title><![CDATA[数据结构与算法]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/126234563</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/126234563</guid><author>zyhhkb</author><pubDate>Wed, 21 Sep 2022 15:58:13 +0800</pubDate><description><![CDATA[(2)若添加元素个数小于基础扩容个数，则同add()方法扩容规则一致。若添加元素个数大于基础扩容个数，则在元素个数和相近的扩容个数里选较大值作为扩容个数。(2)添加数据，先扩容10，之后扩容为原基础的1.5倍(准确说是位数转换为二进制数，右移一位再加上原位数)；(1)初始数组长度为0；无参构造数组长度为0；(1)初始数组长度为0；]]></description><category></category></item><item><title><![CDATA[Spring整合]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/126304965</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/126304965</guid><author>zyhhkb</author><pubDate>Fri, 12 Aug 2022 15:38:14 +0800</pubDate><description><![CDATA[mybatis主要以Sqlsesssionfactory对象为主，则需要用Spring注解方式替换掉原有mybatis方法创建Sqlsessionfactory对象。]]></description><category></category></item><item><title><![CDATA[注解开发模式]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/126269232</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/126269232</guid><author>zyhhkb</author><pubDate>Wed, 10 Aug 2022 17:22:09 +0800</pubDate><description><![CDATA[使用@Component定义bean@Controller：用于表现层bean定义@Service：用于业务层bean定义@Repository：用于数据层bean定义核心配置文件中通过组件扫描加载bean。]]></description><category></category></item><item><title><![CDATA[依赖注入方式]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/126265701</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/126265701</guid><author>zyhhkb</author><pubDate>Wed, 10 Aug 2022 15:03:45 +0800</pubDate><description><![CDATA[a.简单类型b.引用类型a.简单类型b.引用类型。]]></description><category></category></item><item><title><![CDATA[Bean相关]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/126262672</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/126262672</guid><author>zyhhkb</author><pubDate>Wed, 10 Aug 2022 11:55:13 +0800</pubDate><description><![CDATA[由于所有请求都共享一个bean实例，所以这个bean要是有状态的一个bean的话可能在并发场景下出现问题，而原型的bean则不会有这样问题（但也有例外，比如他被单例bean依赖），因为给每个请求都新创建实例。新生成实例消耗包括两方面，第一，spring会通过反射或者cglib来生成bean实例这都是耗性能的操作，其次给对象分配内存也会涉及复杂算法。1、单例的bean只有第一次创建新的bean 后面都会复用该bean，所以不会频繁创建对象。由于不会给每个请求都新生成bean实例，所以自然回收的对象少了。...]]></description><category></category></item><item><title><![CDATA[Spring学习]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/126250103</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/126250103</guid><author>zyhhkb</author><pubDate>Wed, 10 Aug 2022 11:11:28 +0800</pubDate><description><![CDATA[Spring学习]]></description><category></category></item><item><title><![CDATA[JDBC练习]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/125897037</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/125897037</guid><author>zyhhkb</author><pubDate>Wed, 20 Jul 2022 17:40:54 +0800</pubDate><description><![CDATA[1.查询数据库里所有信息。4.druid配置文件。]]></description><category></category></item><item><title><![CDATA[13. 正则表达式]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/124726688</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/124726688</guid><author>zyhhkb</author><pubDate>Fri, 13 May 2022 21:17:02 +0800</pubDate><description><![CDATA[在项目开发中String是一个重要的程序类，String类除了可以实现数据的接受、各类数据类型的转型外，其本身也支持正则表达式(Regular Expression)，利用正则表达式可以方便的实现数据的拆分、替换、验证等操作。

范例：使用正则表达式


public class Main {
    public static void main(String[] args){
        String str="123";                   //字符串对象
        if (]]></description><category></category></item><item><title><![CDATA[15.8 Math数学计算]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/124708594</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/124708594</guid><author>zyhhkb</author><pubDate>Wed, 11 May 2022 18:17:38 +0800</pubDate><description><![CDATA[程序开发的本质就是数据处理，Java提供有java.lang.Math类来帮助开发者进行常规的数学计算处理，例如，四舍五入、三角函数、乘方处理等。

范例：使用Math类进行数学计算


package cn.kuiba.util;

public  class Main {
    public static void main(String[] args) throws Exception {
        System.out.println(Math.abs(-10.1));           ]]></description><category></category></item><item><title><![CDATA[15. 常用类库]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/124686604</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/124686604</guid><author>zyhhkb</author><pubDate>Tue, 10 May 2022 23:41:05 +0800</pubDate><description><![CDATA[现代程序开发需要依附于其所在平台的支持，平台支持功能越完善，开发也就越简单。Java拥有世界上最庞大的开发支持，除了丰富的第三方开发仓库外，JDK自身也提供有丰富的类库开发者使用。

1.StringBuffer类

在项目中String是一个必不可少的工具类，但String自身有一个最大的缺陷：内容一旦声明则不可改变。所以在JDK中提供StringBuffer类供用户修改字符串内容。

    StringBuffer()类并不像String类那样可以直接通过声明字符串常量的方式进行实例化，而是必...]]></description><category></category></item><item><title><![CDATA[14.10 线程自我检测]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/124652115</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/124652115</guid><author>zyhhkb</author><pubDate>Mon, 09 May 2022 10:40:08 +0800</pubDate><description><![CDATA[1.设计4个线程对象，其中两个执行减操作，另外两个执行加操作。


package cn.kuiba.util;

class Resource{
    private int num=0;            //加减操作的数据
    private boolean flag=true;    //转换加减线程的标志
    //flag=true：加法线程执行，减法等待
    //flag=true：减法线程执行，加法等待
    public synchronized void add()th]]></description><category></category></item><item><title><![CDATA[14.6 优雅地停止线程]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/124639520</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/124639520</guid><author>zyhhkb</author><pubDate>Sat, 07 May 2022 21:58:15 +0800</pubDate><description><![CDATA[在Java中，一个线程对象是有自己的生命周期的，如果想要控制好线程的生命周期，则首先应该认识其生命周期，如图。



从图中可以发现，大部分线程生命周期的方法都已经学过了，那么这里主要介绍下面3种新方法。

1.停止多线程：public void stop()。

2.挂起线程：public final void suspend()、暂停执行。

3.恢复挂起的线程执行：public final...]]></description><category></category></item><item><title><![CDATA[14.4线程的同步与死锁]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/124619075</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/124619075</guid><author>zyhhkb</author><pubDate>Sat, 07 May 2022 20:58:46 +0800</pubDate><description><![CDATA[程序利用线程可以进行更高效的程序处理，如果没有多线程，那么一个程序在处理某些资源的时候会有主方法（主线程全部处理），但是这样的处理速度一定会比较慢，但是如果采用了多线程的处理机制，，利用主线程创建出许多的子线程，那么效率会更高。

4.1 线程同步问题引出

线程同步是指若干个线程对象并行进行资源访问时实现资源处理的保护操作，下面通过一个程序说明。

范例：卖票操作（3个线程卖3张票）


package cn.kuiba.util;

class MyThread implements R...]]></description><category></category></item><item><title><![CDATA[14.3多线程常用操作方法]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/124597507</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/124597507</guid><author>zyhhkb</author><pubDate>Fri, 06 May 2022 18:16:10 +0800</pubDate><description><![CDATA[3.1 线程的命名和取得

    线程本身属于不可见的运行状态，即每次操作的时间都是无法预料的，所以如果要想在程序中操作线程，唯一依靠的就是线程名称，而要想取得和设置线程的名称可以使用如表所示的方法。

由于多线程的状态不确定，线程的名字就成为唯一的分辨标记，所以在定义线程名称的时候一定要在线程启动前设置名字，而且尽量不要重名，尽量不要为已经启动的线程修改名字。

由于线程的状态不确定，所以每次可以操作的都是正在执行run()方法的线程实例，依靠Thread类的以下方法实现。


取得当前线程对象...]]></description><category></category></item><item><title><![CDATA[14.多线程编程（二）]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/124364948</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/124364948</guid><author>zyhhkb</author><pubDate>Tue, 26 Apr 2022 17:21:44 +0800</pubDate><description><![CDATA[2.3 Thread和Runnable区别

现在Thread类和Runnable接口都可以以同一功能的方式来实现多线程，那么Java的实际开发来讲，肯定使用Runnable接口，因为采用这种方式可以有效地避免单继承的局限，但是从结构上也需要来观察Thread与Runnable的联系。首先来观察Thread类的定义：


public class Thread extends Object implements Runnable {}

    可以发现Thread类也是Runnable接口的子类，...]]></description><category></category></item><item><title><![CDATA[14.多线程编程]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/124346016</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/124346016</guid><author>zyhhkb</author><pubDate>Fri, 22 Apr 2022 23:58:06 +0800</pubDate><description><![CDATA[多线程编程是Java语言最为重要的特性之一，利用多线程技术可以提升单位时间内的程序处理性能，也是现代程序开发中高并发的主要设计形式。

1.进程与线程

进程是程序的一次动态执行过程，他经历了从代码加载、执行到执行完毕的一个完整过程，这个过程也是进程本身从产生、发展到最终消亡的过程。多进程操作系统能同时运行多个进程（程序），由于CPU具备分时机制，所以每个进程都能循环获得自己的CPU时间片。由于CPU执行速度非常快，使得所有程序好像是在“同时”运行一样。

    虽然多进程可以提高...]]></description><category></category></item><item><title><![CDATA[12.链表综合案例]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/124332338</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/124332338</guid><author>zyhhkb</author><pubDate>Thu, 21 Apr 2022 22:19:58 +0800</pubDate><description><![CDATA[1.宠物商店

    面向对象的程序设计可以实现生活概念的程序抽象化，应用面向对象的程序设计解决一个实际问题。现在假设有一个宠物商店，在这个商店里会出售各种宠物共用户选择，现在要求通过程序逻辑描述实现宠物商品的上架，下架，关键字模糊查询的功能。

完整程序如下： 2.


package cn.kuiba.util;

interface ILink&lt;E&gt; {         //设置泛型避免安全隐患
    public void add(E e) ;   //增加数据
    pu...]]></description><category></category></item><item><title><![CDATA[13.链表（三）]]></title><link>https://blog.youkuaiyun.com/zyhhkb/article/details/124324868</link><guid>https://blog.youkuaiyun.com/zyhhkb/article/details/124324868</guid><author>zyhhkb</author><pubDate>Thu, 21 Apr 2022 17:11:58 +0800</pubDate><description><![CDATA[7.数据内容查询

在一个集合里面往往会保存大量的数据，有时需要判断某个数据是否存在，这是就可以利用迭代的方法进行对象比较（equals()方法）来完成判断。

（1）【ILink】在ILink接口中定义数据查询方法。


/**
 * 查询指定内容是否存在，要求查询对象所在类覆写equals()方法
 * @param data要查找的数据
 * @return 数据存在返回true，否则返回false
 */
public boolean contains(E data);

（2）【LinkImpl.]]></description><category></category></item></channel></rss>