<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ONEMORE6499的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ONEMORE6499</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ONEMORE6499]]></copyright><item><title><![CDATA[利用反射实现简易IOC工具]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105565013</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105565013</guid><author>ONEMORE6499</author><pubDate>Thu, 16 Apr 2020 19:29:04 +0800</pubDate><description><![CDATA[定义一个注解用于放在属性上面给属性赋值
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Property {
    String value();
}

定义工具方法，根据提供的类全名以及类属性上注解上的值将对象创建出来（这个工具这里只能处理属性为基本数据类型的自动注入。仅仅当作一个...]]></description><category></category></item><item><title><![CDATA[策略模式]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105561411</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105561411</guid><author>ONEMORE6499</author><pubDate>Thu, 16 Apr 2020 16:59:59 +0800</pubDate><description><![CDATA[假设这样一个场景：有一个银行，用户可以办理业务，用户身份有普通客户，土豪，和VIP客户，不同的用户有不同的办理业务过程。我们用来模拟一下。
银行：
public class Bank {

    //欢迎普通用户
    public void welcome(OrdinaryUser user){
        user.doSomething();
    }

    //欢迎土豪用户
...]]></description><category></category></item><item><title><![CDATA[哲学家就餐问题-多线程并发死锁现象]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105543533</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105543533</guid><author>ONEMORE6499</author><pubDate>Wed, 15 Apr 2020 22:20:02 +0800</pubDate><description><![CDATA[假设下面一个场景：
4个哲学家，同坐一张方桌子，共2双筷子，4只筷子；每只放在桌角处，每个哲学家有可能拿到1只，1双，或者没有拿到的情况，只有拿到一双时才能开始用餐；没有一个哲学家能用餐成功的时候就处于僵持状态。



使用多线程模拟
public class Philosopher extends Thread{

    private String name;
    private C...]]></description><category></category></item><item><title><![CDATA[Java IO实现单个文件，文件夹的复制]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105541428</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105541428</guid><author>ONEMORE6499</author><pubDate>Wed, 15 Apr 2020 18:45:46 +0800</pubDate><description><![CDATA[单个文件复制
这里需要用到的是字符型文件输入流 （FileInputStream） 和字符型文件输出流 （FileOutputStream）。
public class FileUtil{

   public static void copyFile(String originalFilePath,String targetPath){
        File originalFile = n...]]></description><category></category></item><item><title><![CDATA[生产者-消费者模型（wait()、notify()、notifyAll()、synchronized的使用）线程安全问题]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105537018</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105537018</guid><author>ONEMORE6499</author><pubDate>Wed, 15 Apr 2020 17:58:00 +0800</pubDate><description><![CDATA[在刚接触Java线程的时候，对于wait()，notify()以及notifyAll()方法，synchronized修饰符并不是很了解，后面学习到一个例子也称作为生产者消费者模型，下面通过这样一个模型来进行进一步理解线程安全相关的知识。


模拟这样一个场景：有一个中心仓库，生产者将生成的商品放入仓库中，而消费者则可以在仓库中获取商品。消费者可以有多个。
实现过程：


模拟一个仓库:（为了...]]></description><category></category></item><item><title><![CDATA[String的不可变特性、内部存储结构、重写至Object的几个方法]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105529256</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105529256</guid><author>ONEMORE6499</author><pubDate>Wed, 15 Apr 2020 15:22:33 +0800</pubDate><description><![CDATA[一、 不可变特性，内部存储结构


说到String字符串，可以语义的理解为将一系列字符（char），然后将串在一起，就是字符串了。可以猜测到String的底层也许就是这样构建出来的。 如下：进入源码发现内部结构其实就是一个字符型数组（char[]）呈现的，所以字符串中的字符都是拆分成单个字符存入数组的。



String字符串又称为不可变字符串；相对应的有可变字符串StringBuilder(...]]></description><category></category></item><item><title><![CDATA[对于Java枚举的理解]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105496514</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105496514</guid><author>ONEMORE6499</author><pubDate>Mon, 13 Apr 2020 23:06:35 +0800</pubDate><description><![CDATA[一，Java枚举其实本质是一种特殊的类
特殊在于：对于一般的类在定义时是不确定实际使用的时候到底会创建多少个对象，可以具需求不定量的创建其类对象。而枚举是在类定义的时候可以确定对象个数的( 也就是说可以一一列举出来的，固定的数个对象 )。
二，通过普通的类描述，简单模拟枚举的特点，从而理解枚举
1.枚举的特点是对象个数是确定的，所以首先我们需要确保构造方法私有，才能确定对象不能随意被创建。
2.再...]]></description><category></category></item><item><title><![CDATA[使用Scanner类控制台输入时出现直接跳过输入过程问题]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105430680</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105430680</guid><author>ONEMORE6499</author><pubDate>Fri, 10 Apr 2020 14:10:39 +0800</pubDate><description><![CDATA[在之前学习java 的时候，有用到过这样一个类Scanner用于在控制台输入内信息，但是在输入的时候偶然出现过一个问题：
举个栗子：
Scanner input = new Scanner(System.in);
System.out.println("请输入姓名：");
String name = input.nextLine();
System.out.println("请输入学号：");
i...]]></description><category></category></item><item><title><![CDATA[判断字符串是否为空：出现NullPointerException？]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105429489</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105429489</guid><author>ONEMORE6499</author><pubDate>Fri, 10 Apr 2020 12:12:11 +0800</pubDate><description><![CDATA[在撸代码过程中判断字符串是否为空的时候你是否遭遇过这样一个问题:    NullPointerException，不瞒你说，我是踩过这样的坑，555！！！
判断字符串非空一般都有这几个条件：  str!=null    ， !str.isEmpty() ， 	  !"".equals(str)  ，
此处的isEmpty() 和 equals(); 其实效果是一样的，其实都是判断判断字符串长度为0...]]></description><category></category></item><item><title><![CDATA[Java包装类Integer-----那些年我们一起踩过的坑]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105404782</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105404782</guid><author>ONEMORE6499</author><pubDate>Thu, 09 Apr 2020 13:29:52 +0800</pubDate><description><![CDATA[包装类砸们并不陌生，在实际开发过程中也比较常用，似乎特别容易上手，上来就是Integer.paretInt("123")........... 会用说明它自身封装得比较完善且优化了。从而比较方便了。但是会用就代表你真正理解它本身吗？不见得。]]></description><category></category></item><item><title><![CDATA[Java基本数据类型之初始化可能遇到小坑]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105276992</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/105276992</guid><author>ONEMORE6499</author><pubDate>Thu, 02 Apr 2020 20:39:29 +0800</pubDate><description><![CDATA[Java的基本数据类型其实我们并不陌生，从存储的所占内存从小到大依次是 ： byte(字节型)【8bit】， short(短整型)【16bit】， int(整型)【32bit】， long(长整型)【64bit】， float(单精度浮点型)【32bit】， double(双精度浮点型) 【64bit】。
在开发的过程中很多时候定义一个变量不会直接自己初始化赋值的，而是直接将某个方法产生过程的结果...]]></description><category></category></item><item><title><![CDATA[web项目中上传的图片项目重新部署之后被清空如何解决？]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104991968</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104991968</guid><author>ONEMORE6499</author><pubDate>Fri, 20 Mar 2020 16:32:37 +0800</pubDate><description><![CDATA[前言：


我们在web项目中经常有上传图片的功能，上传的图片存在哪里呢?


存储方式一般有：存入数据库中，跟随项目相对路径中，还有就是再专门设计一个图片服务器用于图片处理。


当图片量大的时候，或者查询数据量大的时候，非常的影响性能，数据库显然不太推荐使用。


对于小项目来说，再另外特地为图片操作开一个服务也不太现实，维护等也都比较麻烦。


在小项目中，对于每一个体验用户，上传的图片可能...]]></description><category></category></item><item><title><![CDATA[利用bootstrap实现消息提示框的自动弹出与关闭]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104904276</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104904276</guid><author>ONEMORE6499</author><pubDate>Mon, 16 Mar 2020 17:53:59 +0800</pubDate><description><![CDATA[- 相关的依赖：
		&lt;link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.1.0/css/bootstrap.min.css"&gt;
        &lt;script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"&gt;&lt;/script...]]></description><category></category></item><item><title><![CDATA[动态规划之变态青蛙跳台阶]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104799750</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104799750</guid><author>ONEMORE6499</author><pubDate>Wed, 11 Mar 2020 16:39:41 +0800</pubDate><description><![CDATA[一只青蛙一次可以跳上1级台阶，也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路：（递归思想）贪心算法
表达式：f(n) = f(n-1) + f(n-2) + f(n-3) + f(n-4) + f(n-5) + … + f(2) + f(1)
代码实现：
public class Main3 {
    //f(n) = f(n-1) + f(n-2) ...]]></description><category></category></item><item><title><![CDATA[动态规划之青蛙跳台阶]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104799638</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104799638</guid><author>ONEMORE6499</author><pubDate>Wed, 11 Mar 2020 16:36:29 +0800</pubDate><description><![CDATA[一只青蛙一次可以跳上1级台阶，也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法（先后次序不同算不同的结果）。
思路：（递归思想） 要想到达第n阶必须先到达n-1或者n-2台阶处，计算到达n-1和n-2的跳法
表达式： f(n) = f(n-1) + f(n-2)
代码实现：
public class Main {
    //要跳到上n级台阶，那么在这之前，青蛙必须跳上n-1 或者 ...]]></description><category></category></item><item><title><![CDATA[动态规划之斐波那契数列]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104799314</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104799314</guid><author>ONEMORE6499</author><pubDate>Wed, 11 Mar 2020 16:27:04 +0800</pubDate><description><![CDATA[现在要求输入一个整数n，请你输出斐波那契数列的第n项（从0开始，第0项为0）。
思路：(利用递归思想）
表达式：f(n) = f(n-1) + f(n-2)
代码实现：
public class Main1 {
    public static void main(String[] args) {
		//System.out.println(fibo(10));
    }
    //求...]]></description><category></category></item><item><title><![CDATA[图的广度优先搜索]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104798875</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104798875</guid><author>ONEMORE6499</author><pubDate>Wed, 11 Mar 2020 16:13:00 +0800</pubDate><description><![CDATA[代码实现
//图节点
public class MapNode {
    public String val;
    public List&lt;MapNode&gt; neighbor;//记录周围的点
    public int index;

    public MapNode(String val, int index) {
        this.val = val;
 ...]]></description><category></category></item><item><title><![CDATA[图的深度优先搜索]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104798759</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104798759</guid><author>ONEMORE6499</author><pubDate>Wed, 11 Mar 2020 16:07:08 +0800</pubDate><description><![CDATA[代码实现：

//图节点
public class MapNode {
    public String val;
    public List&lt;MapNode&gt; neighbor;//记录周围的点
    public int index;

    public MapNode(String val, int index) {
        this.val = val;
...]]></description><category></category></item><item><title><![CDATA[树的广度优先搜索]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104798263</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104798263</guid><author>ONEMORE6499</author><pubDate>Wed, 11 Mar 2020 16:00:07 +0800</pubDate><description><![CDATA[代码实现

	//普通树结点
	public class MapNode {
		    public int val;
		    public List&lt;MapNode&gt; neighbor;//表示当前节点的所有分支节点

		    public MapNode(int val) {
		        this.val = val;
		        neighbor = ...]]></description><category></category></item><item><title><![CDATA[树的深度优先搜索]]></title><link>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104797818</link><guid>https://blog.youkuaiyun.com/ONEMORE6499/article/details/104797818</guid><author>ONEMORE6499</author><pubDate>Wed, 11 Mar 2020 15:44:26 +0800</pubDate><description><![CDATA[不同于二叉树，普通的树可以有多个分支。需要将所有分支装在一个集合中，并逐一递归搜索。


代码实现：
	//普通树结点
	public class MapNode {
	    public int val;
	    public List&lt;MapNode&gt; neighbor;//表示当前节点的所有分支节点

	
	    public MapNode(int val) {
	 ...]]></description><category></category></item></channel></rss>