<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Lven的博客]]></title><description><![CDATA[小白的进阶之路]]></description><link>https://blog.youkuaiyun.com/ShadowerWArden</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ShadowerWArden]]></copyright><item><title><![CDATA[JDK1.8HashMap源码分析]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/113630047</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/113630047</guid><author>ShadowerWArden</author><pubDate>Thu, 04 Feb 2021 11:05:13 +0800</pubDate><description><![CDATA[目录

HashMap

一、概况

二、HashMap结构

三、JDK1.8中源码分析

（一）创建HashMap

（二）put方法

(三)扩容

（四）get方法

（五）扩展

四、问题

HashMap

一、概况

HashMap继承AbstractMap,可允许一个键（key）为空,可允许多个值（value）为空。HashMap非线程安全，默认容量为16，默认负载因子为0.75，进行扩容之后容量为原来的2倍，HashMap容量只能为2的n次方幂。HashMap是数组+链表+红黑树实现，当链]]></description><category></category></item><item><title><![CDATA[工厂方法模式]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107254658</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107254658</guid><author>ShadowerWArden</author><pubDate>Fri, 10 Jul 2020 16:46:02 +0800</pubDate><description><![CDATA[一、介绍
工厂方法模式（Fatory Method Pattern）是指定义一个创建对象的接口，但让实现这个 接口的类来决定实例化哪个类，工厂方法让类的实例化推迟到子类中进行。属于创建型模式，23中设计模式之一，在工厂方法 模式中用户只需要关心所需产品对应的工厂，无须关心创建细节，而且加入新的产品符 合开闭原则。
工厂方法模式其实就是简单工厂模式的一个拓展，只是将工厂接口化，具体的实现让实现类决定。
二、代码实现（示例）
1、示例背景：一个时间管理者拥有多个女朋友，那么他要记住每个女朋友的名字，每天晚上根据]]></description><category></category></item><item><title><![CDATA[简单工厂模式]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107254602</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107254602</guid><author>ShadowerWArden</author><pubDate>Fri, 10 Jul 2020 16:45:25 +0800</pubDate><description><![CDATA[一、介绍
简单工厂模式（Simple Factory Pattern）是指由一个工厂对象决定创建出哪一种产品类 的实例。属于创建型模式，但它不属于 GOF，23 种设计模式。
二、适用场景
1、适用 于工厂类负责创建的对象较少的场景，
2、且客户端只需要传入工厂类的参数，对于如何创 建对象的逻辑不需要关心。
三、作用
根据不同的情景（参数）创建不同的对象。
四、缺点
1、工厂类的职业相对过重，增加新的产品时需要修改工厂类的判断逻辑，违背开闭原则。
2、不易于扩展过于复杂的产品结构。
五、代码实现（示例）
1]]></description><category></category></item><item><title><![CDATA[导出项目javadoc文档]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107250090</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107250090</guid><author>ShadowerWArden</author><pubDate>Fri, 10 Jul 2020 14:22:04 +0800</pubDate><description><![CDATA[1、找到idea中的Tools，导航栏，选择Generate JavaDoc选项，如图：
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r2pPn3aw-1594361965411)(D:%5CHexo%5CBlog%5Csource%5C_posts%5C%E5%AF%BC%E5%87%BA%E9%A1%B9%E7%9B%AEjavadoc%E6%96%87%E6%A1%A3%5Cimage-20200630134419074.png)]
2、选择输出文档的地址，并选择输出]]></description><category></category></item><item><title><![CDATA[Hexo命令]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107250009</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107250009</guid><author>ShadowerWArden</author><pubDate>Fri, 10 Jul 2020 14:19:00 +0800</pubDate><description><![CDATA[1、创建文章
进入hexo目录下的_post目录,如D:\Hexo\Blog\source_posts。输入命令hexo new “文章标题”。在这个目录下则会出现这个文件并包含储存对应文章图片的文件夹。

2、清除缓存文件 db.json 和已生成的静态文件 public
进入hexo目录下的_post目录,如D:\Hexo\Blog\source_posts。输入命令hexo clean。
3、生成网站静态文件到默认设置的 public 文件夹
进入hexo目录下的_post目录,如D:\Hexo\Bl]]></description><category></category></item><item><title><![CDATA[静态代理模式]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107236937</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107236937</guid><author>ShadowerWArden</author><pubDate>Thu, 09 Jul 2020 20:21:30 +0800</pubDate><description><![CDATA[1、以一个生活中的例子来解释静态代理模式：到了一定的年龄，我们就要结婚，结婚是一件很麻烦的事情，（包括那些被父母催婚的）。有钱的家庭可能会找司仪来主持婚礼，显得热闹，洋气～好了，现在婚庆公司的生意来了，我们只需要给钱，婚庆公司就会帮我们安排一整套结婚的流程。整个流程大概是这样的：家里人催婚-&gt;男女双方家庭商定结婚的黄道即日-&gt;找一家靠谱的婚庆公司-&gt;在约定的时间举行结婚仪式-&gt;结婚完毕。婚庆公司打算怎么安排婚礼的节目，在婚礼完毕以后婚庆公司会做什么，我们一概不知，我们只要把钱给人家，]]></description><category></category></item><item><title><![CDATA[动态代理模式]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107236835</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107236835</guid><author>ShadowerWArden</author><pubDate>Thu, 09 Jul 2020 20:15:51 +0800</pubDate><description><![CDATA[一、动态代理的好处
动态代理：其实动态代理与静态代理的本质一样，最终程序运行时都需要生成一个代理对象实例，通过它来完成相关增强以及业务逻辑，只不过静态代理需要硬编码的方式指定，而动态代理则是以动态方式生成代理(有编译时操作字节码生成的方式、以及运行时通过反射、字节码生成的方式)。动态生成的好处很明显，代理逻辑与业务逻辑是互相独立的，没有耦合，代理1个类100个类没有任何区别。
二、动态代理例子（便于理解）
到了饭点了，有两个用户都需要买菜，小姜要买青菜，小鑫要买萝卜，他们下单，骑手接收到订单之后去到超时给他]]></description><category></category></item><item><title><![CDATA[使用map实现本地缓存]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107211846</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107211846</guid><author>ShadowerWArden</author><pubDate>Wed, 08 Jul 2020 18:02:12 +0800</pubDate><description><![CDATA[一、创建定时器线程池
static class FactoryClass implements ThreadFactory{
      @Override
      public Thread newThread(Runnable r) {
          Thread t = new Thread(r, "SegmentScheduledExecutorThread");
          t.setDaemon(true);
          return t;
      }
  }
pr]]></description><category></category></item><item><title><![CDATA[装饰者模式]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107211681</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107211681</guid><author>ShadowerWArden</author><pubDate>Wed, 08 Jul 2020 17:54:32 +0800</pubDate><description><![CDATA[1、装饰者模式的作用：
对已有的业务逻辑进一步的封装，使其增加额外的功能，如Java中的IO流就使用了装饰者模式，用户在使用的时候，可以任意组装，达到自己想要的效果。
举个栗子，我想吃三明治，首先我需要一根大大的香肠，我喜欢吃奶油，在香肠上面加一点奶油，再放一点蔬菜，最后再用两片面包夹一下，很丰盛的一顿午饭，营养又健康。（ps：不知道上海哪里有卖好吃的三明治的，求推荐～）那我们应该怎么来写代码呢？ 首先，我们需要写一个Food类，让其他所有食物都来继承这个类。
2、代码实现：
public class Fo]]></description><category></category></item><item><title><![CDATA[适配器模式]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107211667</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107211667</guid><author>ShadowerWArden</author><pubDate>Wed, 08 Jul 2020 17:53:42 +0800</pubDate><description><![CDATA[1、适配器模式的作用：
将两种完全不同的事物联系到一起，就像现实生活中的变压器。假设一个手机充电器需要的电压是20V，但是正常的电压是220V，这时候就需要一个变压器，将220V的电压转换成20V的电压，这样，变压器就将20V的电压和手机联系起来了。
2、代码实现：
public class Test {
   public static void main(String[] args) {
       Phone phone = new Phone();
       VoltageAdapter ad]]></description><category></category></item><item><title><![CDATA[观察者模式]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107211648</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107211648</guid><author>ShadowerWArden</author><pubDate>Wed, 08 Jul 2020 17:53:02 +0800</pubDate><description><![CDATA[1、模式动机及定义：
建立一种对象与对象之间的依赖关系，一个对象发生改变时将自动通知其他对象，其他对象将相应做出反应。在此，发生改变的对象称为观察目标，而被通知的对象称为观察者，一个观察目标可以对应多个观察者，而且这些观察者之间没有相互联系，可以根据需要增加和删除观察者，使得系统更易于扩展，这就是观察者模式的模式动机。
观察者模式(Observer Pattern)：定义对象间的一种一对多依赖关系，使得每当一个对象状态发生改变时，其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅（Publis]]></description><category></category></item><item><title><![CDATA[单例模式]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107211577</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/107211577</guid><author>ShadowerWArden</author><pubDate>Wed, 08 Jul 2020 17:51:20 +0800</pubDate><description><![CDATA[1、单例模式的介绍：
单例模式（Singleton），也叫单子模式，是一种常用的软件设计模式。在应用这个模式时，单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象，这样有利于我们协调系统整体的行为。比如在某个服务器程序中，该服务器的配置信息存放在一个文件中，这些配置数据由一个单例对象统一读取，然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。
2、实现单例模式的思路是：
一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法]]></description><category></category></item><item><title><![CDATA[根据图片流生成缩略图]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82884551</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82884551</guid><author>ShadowerWArden</author><pubDate>Fri, 28 Sep 2018 15:28:14 +0800</pubDate><description><![CDATA[
package com.goldgrid.utils;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import jav...]]></description><category></category></item><item><title><![CDATA[记录oracle常用的sql语句]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82782605</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82782605</guid><author>ShadowerWArden</author><pubDate>Thu, 20 Sep 2018 10:43:01 +0800</pubDate><description><![CDATA[
//查询businessid字段，数据量大于1 count&amp;gt;1
select businessid,count(*) from picture_library t group by businessid having count(*)&amp;gt;1;



//按时间降序（desc）排列，升序为asc
select t.*,rowid from picture_library t order ...]]></description><category></category></item><item><title><![CDATA[批量上传图片到图片服务器]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82773735</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82773735</guid><author>ShadowerWArden</author><pubDate>Wed, 19 Sep 2018 16:13:46 +0800</pubDate><description><![CDATA[批量上传图片到图片服务器


package com.goldgrid.util.batchpic;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.SQLException;
import java.text.ParseException;
impo...]]></description><category></category></item><item><title><![CDATA[测试http接口的类的实现]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82737299</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82737299</guid><author>ShadowerWArden</author><pubDate>Mon, 17 Sep 2018 14:49:04 +0800</pubDate><description><![CDATA[
package com.goldgrid.utils;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.IOExc...]]></description><category></category></item><item><title><![CDATA[弹出一个会自动消失的提示框，并时刻在屏幕最前方显示]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82662637</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82662637</guid><author>ShadowerWArden</author><pubDate>Wed, 12 Sep 2018 15:43:11 +0800</pubDate><description><![CDATA[
package com.goldgrid.util;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing...]]></description><category></category></item><item><title><![CDATA[java压缩图片的三种方法:按原比例压缩到指定大小以内；压缩到指定宽高；通过压缩基数和压缩比例按原比例压缩。]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82629079</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82629079</guid><author>ShadowerWArden</author><pubDate>Tue, 11 Sep 2018 17:15:37 +0800</pubDate><description><![CDATA[
package com.goldgrid.util;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStrea...]]></description><category></category></item><item><title><![CDATA[java按比例压缩图片到指定的大小（kb、mb）]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82628274</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82628274</guid><author>ShadowerWArden</author><pubDate>Tue, 11 Sep 2018 16:54:31 +0800</pubDate><description><![CDATA[       网上有很多压缩图片的方法，但是要么就是不能压缩到指定的大小以内，要么就是要引用第三方的插件，都不太符合我的要求，所以就想着自己写一个方法来实现。这种方法有点不好就是如果图片特别大则要进行多次判断和读取，可能时间会有点长，这要看实际情况，用的时候要自己注意。

      实现的思路：读取图片大小→判断是否符合要求大小→不符合就宽和高同时缩减10%→再进行判断以此循环。


packa...]]></description><category></category></item><item><title><![CDATA[图片转byte,String字符串转byte]]></title><link>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82390821</link><guid>https://blog.youkuaiyun.com/ShadowerWArden/article/details/82390821</guid><author>ShadowerWArden</author><pubDate>Tue, 04 Sep 2018 21:36:50 +0800</pubDate><description><![CDATA[
 /**
     * 图片转化成byte数组
     * @param bImage
     * @param format
     * @return
     */
       public byte[] imageToBytes(BufferedImage bImage, String format) {
    	ByteArrayOutputStream out = new ...]]></description><category></category></item></channel></rss>